@namehash/ens-referrals 1.9.0 → 1.10.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +20 -22
- package/dist/index.cjs +2360 -828
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +1525 -426
- package/dist/index.d.ts +1525 -426
- package/dist/index.js +2347 -825
- package/dist/index.js.map +1 -1
- package/package.json +4 -13
- package/dist/v1/index.cjs +0 -20902
- package/dist/v1/index.cjs.map +0 -1
- package/dist/v1/index.d.cts +0 -2098
- package/dist/v1/index.d.ts +0 -2098
- package/dist/v1/index.js +0 -20879
- package/dist/v1/index.js.map +0 -1
package/dist/v1/index.cjs.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/v1/index.ts","../../src/v1/address.ts","../../src/v1/api/deserialize.ts","../../src/v1/api/zod-schemas.ts","../../../../node_modules/.pnpm/caip@1.1.1/node_modules/caip/src/spec.ts","../../../../node_modules/.pnpm/caip@1.1.1/node_modules/caip/src/utils.ts","../../../../node_modules/.pnpm/caip@1.1.1/node_modules/caip/src/chain.ts","../../../../node_modules/.pnpm/caip@1.1.1/node_modules/caip/src/account.ts","../../../../node_modules/.pnpm/caip@1.1.1/node_modules/caip/src/assetName.ts","../../../../node_modules/.pnpm/caip@1.1.1/node_modules/caip/src/assetType.ts","../../../../node_modules/.pnpm/caip@1.1.1/node_modules/caip/src/assetId.ts","../../../ensnode-sdk/src/shared/zod-schemas.ts","../../../datasources/src/abis/ensv2/EnhancedAccessControl.ts","../../../datasources/src/abis/ensv2/ETHRegistrar.ts","../../../datasources/src/abis/ensv2/Registry.ts","../../../datasources/src/abis/shared/StandaloneReverseRegistrar.ts","../../../../node_modules/.pnpm/@ponder+utils@0.2.16_typescript@5.9.3_viem@2.38.5_typescript@5.9.3_zod@4.3.6_/node_modules/@ponder/utils/src/getLogsRetryHelper.ts","../../../../node_modules/.pnpm/@ponder+utils@0.2.16_typescript@5.9.3_viem@2.38.5_typescript@5.9.3_zod@4.3.6_/node_modules/@ponder/utils/src/mergeAbis.ts","../../../../node_modules/.pnpm/@ponder+utils@0.2.16_typescript@5.9.3_viem@2.38.5_typescript@5.9.3_zod@4.3.6_/node_modules/@ponder/utils/src/loadBalance.ts","../../../../node_modules/.pnpm/@ponder+utils@0.2.16_typescript@5.9.3_viem@2.38.5_typescript@5.9.3_zod@4.3.6_/node_modules/@ponder/utils/src/rateLimit.ts","../../../../node_modules/.pnpm/@ponder+utils@0.2.16_typescript@5.9.3_viem@2.38.5_typescript@5.9.3_zod@4.3.6_/node_modules/@ponder/utils/src/utils/promiseWithResolvers.ts","../../../../node_modules/.pnpm/@ponder+utils@0.2.16_typescript@5.9.3_viem@2.38.5_typescript@5.9.3_zod@4.3.6_/node_modules/@ponder/utils/src/utils/queue.ts","../../../../node_modules/.pnpm/@ponder+utils@0.2.16_typescript@5.9.3_viem@2.38.5_typescript@5.9.3_zod@4.3.6_/node_modules/@ponder/utils/src/replaceBigInts.ts","../../../datasources/src/abis/ensv2/UniversalResolverV2.ts","../../../datasources/src/abis/root/UniversalResolverV1.ts","../../../datasources/src/abis/threedns/ThreeDNSToken.ts","../../../datasources/src/abis/basenames/BaseRegistrar.ts","../../../datasources/src/abis/lineanames/BaseRegistrar.ts","../../../datasources/src/abis/root/BaseRegistrar.ts","../../../datasources/src/abis/basenames/EARegistrarController.ts","../../../datasources/src/abis/basenames/RegistrarController.ts","../../../datasources/src/abis/basenames/UpgradeableRegistrarController.ts","../../../datasources/src/abis/lineanames/EthRegistrarController.ts","../../../datasources/src/abis/root/LegacyEthRegistrarController.ts","../../../datasources/src/abis/root/UnwrappedEthRegistrarController.ts","../../../datasources/src/abis/root/WrappedEthRegistrarController.ts","../../../datasources/src/lib/chains.ts","../../../datasources/src/abis/shared/AbstractReverseResolver.ts","../../../datasources/src/abis/shared/LegacyPublicResolver.ts","../../../datasources/src/abis/shared/Resolver.ts","../../../datasources/src/lib/ResolverABI.ts","../../../datasources/src/lib/types.ts","../../../datasources/src/ens-test-env.ts","../../../datasources/src/abis/root/NameWrapper.ts","../../../datasources/src/abis/root/Registry.ts","../../../datasources/src/abis/root/UniversalRegistrarRenewalWithReferrer.ts","../../../datasources/src/mainnet.ts","../../../datasources/src/abis/basenames/Registry.ts","../../../datasources/src/abis/lineanames/NameWrapper.ts","../../../datasources/src/abis/lineanames/Registry.ts","../../../datasources/src/abis/seaport/Seaport1.5.ts","../../../datasources/src/sepolia.ts","../../../datasources/src/sepolia-v2.ts","../../../datasources/src/namespaces.ts","../../../ensnode-sdk/src/shared/address.ts","../../../ensnode-sdk/src/shared/currencies.ts","../../../ensnode-sdk/src/shared/numbers.ts","../../../ensnode-sdk/src/shared/serialize.ts","../../../ensnode-sdk/src/registrars/ethnames-subregistry.ts","../../../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/constants.js","../../../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/constructFrom.js","../../../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/toDate.js","../../../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/getUnixTime.js","../../../ensnode-sdk/src/shared/deserialize.ts","../../../ensnode-sdk/src/shared/datetime.ts","../../src/v1/award-models/pie-split/api/zod-schemas.ts","../../src/v1/award-models/shared/api/zod-schemas.ts","../../src/v1/number.ts","../../src/v1/award-models/shared/leaderboard-page.ts","../../src/v1/award-models/shared/status.ts","../../src/v1/award-models/shared/edition-metrics.ts","../../src/v1/time.ts","../../src/v1/award-models/shared/rules.ts","../../src/v1/award-models/rev-share-limit/api/zod-schemas.ts","../../src/v1/api/types.ts","../../src/v1/award-models/pie-split/api/serialize.ts","../../src/v1/award-models/rev-share-limit/api/serialize.ts","../../src/v1/api/serialize.ts","../../src/v1/award-models/shared/score.ts","../../src/v1/award-models/pie-split/aggregations.ts","../../src/v1/edition.ts","../../src/v1/award-models/shared/edition-summary.ts","../../src/v1/award-models/pie-split/rules.ts","../../src/v1/award-models/pie-split/status.ts","../../src/v1/award-models/pie-split/edition-summary.ts","../../src/v1/award-models/shared/leaderboard-guards.ts","../../src/v1/award-models/shared/rank.ts","../../src/v1/referrer-metrics.ts","../../src/v1/award-models/pie-split/score.ts","../../src/v1/award-models/pie-split/rank.ts","../../src/v1/award-models/pie-split/metrics.ts","../../src/v1/award-models/pie-split/leaderboard.ts","../../src/v1/award-models/pie-split/leaderboard-page.ts","../../src/v1/award-models/rev-share-limit/aggregations.ts","../../src/v1/award-models/rev-share-limit/rules.ts","../../src/v1/award-models/rev-share-limit/status.ts","../../src/v1/award-models/rev-share-limit/edition-summary.ts","../../src/v1/award-models/rev-share-limit/metrics.ts","../../src/v1/award-models/rev-share-limit/sort-referral-events.ts","../../src/v1/award-models/rev-share-limit/leaderboard.ts","../../src/v1/award-models/rev-share-limit/leaderboard-page.ts","../../src/v1/client.ts","../../src/v1/edition-defaults.ts","../../src/v1/edition-metrics.ts","../../src/v1/edition-summary.ts","../../src/v1/leaderboard-page.ts","../../src/v1/link.ts"],"sourcesContent":["export * from \"./address\";\nexport * from \"./api\";\nexport * from \"./award-models/pie-split/aggregations\";\nexport * from \"./award-models/pie-split/api/serialized-types\";\nexport * from \"./award-models/pie-split/edition-metrics\";\nexport * from \"./award-models/pie-split/edition-summary\";\nexport * from \"./award-models/pie-split/leaderboard\";\nexport * from \"./award-models/pie-split/leaderboard-page\";\nexport * from \"./award-models/pie-split/metrics\";\nexport * from \"./award-models/pie-split/rules\";\nexport * from \"./award-models/pie-split/score\";\nexport * from \"./award-models/pie-split/status\";\nexport * from \"./award-models/rev-share-limit/aggregations\";\nexport * from \"./award-models/rev-share-limit/api/serialized-types\";\nexport * from \"./award-models/rev-share-limit/edition-metrics\";\nexport * from \"./award-models/rev-share-limit/edition-summary\";\nexport * from \"./award-models/rev-share-limit/leaderboard\";\nexport * from \"./award-models/rev-share-limit/leaderboard-page\";\nexport * from \"./award-models/rev-share-limit/metrics\";\nexport * from \"./award-models/rev-share-limit/referral-event\";\nexport * from \"./award-models/rev-share-limit/rules\";\nexport * from \"./award-models/rev-share-limit/status\";\nexport * from \"./award-models/shared/edition-metrics\";\nexport * from \"./award-models/shared/edition-summary\";\nexport * from \"./award-models/shared/leaderboard-page\";\nexport * from \"./award-models/shared/rank\";\nexport * from \"./award-models/shared/rules\";\nexport * from \"./award-models/shared/score\";\nexport * from \"./award-models/shared/status\";\nexport * from \"./client\";\nexport * from \"./edition\";\nexport * from \"./edition-defaults\";\nexport * from \"./edition-metrics\";\nexport * from \"./edition-summary\";\nexport * from \"./leaderboard\";\nexport * from \"./leaderboard-page\";\nexport * from \"./link\";\nexport * from \"./number\";\nexport * from \"./referrer-metrics\";\nexport * from \"./rules\";\nexport * from \"./time\";\n","import { type Address, isAddress } from \"viem\";\n\nexport const validateLowercaseAddress = (address: Address): void => {\n if (!isAddress(address, { strict: false })) {\n throw new Error(`Invalid address: ${address}. Address must be a valid EVM address.`);\n }\n\n if (address !== address.toLowerCase()) {\n throw new Error(`Invalid address: ${address}. Address must be in lowercase format.`);\n }\n};\n\nexport const normalizeAddress = (address: Address): Address => {\n return address.toLowerCase() as Address;\n};\n","import { prettifyError } from \"zod/v4\";\n\nimport type { ReferralProgramEditionConfig } from \"../edition\";\nimport type {\n SerializedReferralProgramEditionSummariesResponse,\n SerializedReferrerLeaderboardPageResponse,\n SerializedReferrerMetricsEditionsResponse,\n} from \"./serialized-types\";\nimport type {\n ReferralProgramEditionSummariesResponse,\n ReferrerLeaderboardPageResponse,\n ReferrerMetricsEditionsResponse,\n} from \"./types\";\nimport {\n makeReferralProgramEditionConfigSetArraySchema,\n makeReferralProgramEditionSummariesResponseSchema,\n makeReferrerLeaderboardPageResponseSchema,\n makeReferrerMetricsEditionsResponseSchema,\n} from \"./zod-schemas\";\n\n/**\n * Deserialize a {@link ReferrerLeaderboardPageResponse} object.\n */\nexport function deserializeReferrerLeaderboardPageResponse(\n maybeResponse: SerializedReferrerLeaderboardPageResponse,\n valueLabel?: string,\n): ReferrerLeaderboardPageResponse {\n const schema = makeReferrerLeaderboardPageResponseSchema(valueLabel);\n const parsed = schema.safeParse(maybeResponse);\n\n if (parsed.error) {\n throw new Error(\n `Cannot deserialize SerializedReferrerLeaderboardPageResponse:\\n${prettifyError(parsed.error)}\\n`,\n );\n }\n\n return parsed.data;\n}\n\n/**\n * Deserialize a {@link ReferrerMetricsEditionsResponse} object.\n */\nexport function deserializeReferrerMetricsEditionsResponse(\n maybeResponse: SerializedReferrerMetricsEditionsResponse,\n valueLabel?: string,\n): ReferrerMetricsEditionsResponse {\n const schema = makeReferrerMetricsEditionsResponseSchema(valueLabel);\n const parsed = schema.safeParse(maybeResponse);\n\n if (parsed.error) {\n throw new Error(\n `Cannot deserialize ReferrerMetricsEditionsResponse:\\n${prettifyError(parsed.error)}\\n`,\n );\n }\n\n return parsed.data;\n}\n\n/**\n * Deserializes an array of {@link ReferralProgramEditionConfig} objects.\n */\nexport function deserializeReferralProgramEditionConfigSetArray(\n maybeArray: unknown,\n valueLabel?: string,\n): ReferralProgramEditionConfig[] {\n const schema = makeReferralProgramEditionConfigSetArraySchema(valueLabel);\n const parsed = schema.safeParse(maybeArray);\n\n if (parsed.error) {\n throw new Error(\n `Cannot deserialize ReferralProgramEditionConfigSetArray:\\n${prettifyError(parsed.error)}\\n`,\n );\n }\n\n return parsed.data;\n}\n\n/**\n * Deserialize a {@link ReferralProgramEditionSummariesResponse} object.\n */\nexport function deserializeReferralProgramEditionSummariesResponse(\n maybeResponse: SerializedReferralProgramEditionSummariesResponse,\n valueLabel?: string,\n): ReferralProgramEditionSummariesResponse {\n const schema = makeReferralProgramEditionSummariesResponseSchema(valueLabel);\n const parsed = schema.safeParse(maybeResponse);\n\n if (parsed.error) {\n throw new Error(\n `Cannot deserialize ReferralProgramEditionSummariesResponse:\\n${prettifyError(parsed.error)}\\n`,\n );\n }\n\n return parsed.data;\n}\n","/**\n * All zod schemas we define must remain internal implementation details.\n * We want the freedom to move away from zod in the future without impacting\n * any users of the ensnode-sdk package.\n *\n * The only way to share Zod schemas is to re-export them from\n * `./src/internal.ts` file.\n */\n\nimport z from \"zod/v4\";\n\nimport { makeLowercaseAddressSchema } from \"@ensnode/ensnode-sdk/internal\";\n\nimport {\n makeReferralProgramEditionSummaryPieSplitSchema,\n makeReferralProgramRulesPieSplitSchema,\n makeReferrerEditionMetricsPieSplitSchema,\n makeReferrerLeaderboardPagePieSplitSchema,\n} from \"../award-models/pie-split/api/zod-schemas\";\nimport {\n makeReferralProgramEditionSummaryRevShareLimitSchema,\n makeReferralProgramRulesRevShareLimitSchema,\n makeReferrerEditionMetricsRevShareLimitSchema,\n makeReferrerLeaderboardPageRevShareLimitSchema,\n} from \"../award-models/rev-share-limit/api/zod-schemas\";\nimport {\n makeBaseReferralProgramEditionSummarySchema,\n makeBaseReferralProgramRulesSchema,\n makeBaseReferrerLeaderboardPageSchema,\n} from \"../award-models/shared/api/zod-schemas\";\nimport type { ReferrerEditionMetricsUnrecognized } from \"../award-models/shared/edition-metrics\";\nimport type { ReferralProgramEditionSummaryUnrecognized } from \"../award-models/shared/edition-summary\";\nimport type { ReferrerLeaderboardPageUnrecognized } from \"../award-models/shared/leaderboard-page\";\nimport type { ReferralProgramRulesUnrecognized } from \"../award-models/shared/rules\";\nimport { ReferralProgramAwardModels } from \"../award-models/shared/rules\";\nimport type { ReferralProgramEditionConfig } from \"../edition\";\nimport type { ReferrerEditionMetrics } from \"../edition-metrics\";\nimport type { ReferralProgramEditionSummary } from \"../edition-summary\";\nimport type { ReferrerLeaderboardPage } from \"../leaderboard-page\";\nimport {\n MAX_EDITIONS_PER_REQUEST,\n ReferralProgramEditionSummariesResponseCodes,\n ReferrerLeaderboardPageResponseCodes,\n ReferrerMetricsEditionsResponseCodes,\n} from \"./types\";\n\n/**\n * Schema for {@link ReferralProgramRules}\n */\nexport const makeReferralProgramRulesSchema = (valueLabel: string = \"ReferralProgramRules\") =>\n z.discriminatedUnion(\"awardModel\", [\n makeReferralProgramRulesPieSplitSchema(valueLabel),\n makeReferralProgramRulesRevShareLimitSchema(valueLabel),\n ]);\n\n/**\n * Schema for {@link ReferrerLeaderboardPage}.\n *\n * Forward-compatible — peeks at `awardModel` before committing to full validation:\n * - Known award models are fully validated with the model-specific schema.\n * - Unknown award models are wrapped as {@link ReferrerLeaderboardPageUnrecognized}.\n */\nexport const makeReferrerLeaderboardPageSchema = (\n valueLabel: string = \"ReferrerLeaderboardPage\",\n) => {\n const knownAwardModels = Object.values(ReferralProgramAwardModels).filter(\n (m) => m !== ReferralProgramAwardModels.Unrecognized,\n ) as string[];\n\n // Loose schema used only to peek at awardModel before full validation.\n const looseSchema = z.object({ awardModel: z.string() }).passthrough();\n\n // Schema for known award models — dispatch is handled automatically by discriminatedUnion.\n const knownSchema = z.discriminatedUnion(\"awardModel\", [\n makeReferrerLeaderboardPagePieSplitSchema(valueLabel),\n makeReferrerLeaderboardPageRevShareLimitSchema(valueLabel),\n ]);\n\n // Base schema for fields present on all leaderboard page variants (used for Unrecognized).\n const baseSchema = makeBaseReferrerLeaderboardPageSchema(valueLabel);\n\n return looseSchema.transform((data, ctx): ReferrerLeaderboardPage => {\n if (knownAwardModels.includes(data.awardModel)) {\n const parsed = knownSchema.safeParse(data);\n if (!parsed.success) {\n for (const issue of parsed.error.issues) {\n ctx.addIssue({\n code: \"custom\",\n path: issue.path as PropertyKey[],\n message: issue.message,\n });\n }\n return z.NEVER;\n }\n return parsed.data;\n }\n\n // Unknown awardModel — preserve as ReferrerLeaderboardPageUnrecognized using base fields.\n const parsed = baseSchema.safeParse(data);\n if (!parsed.success) {\n for (const issue of parsed.error.issues) {\n ctx.addIssue({\n code: \"custom\",\n path: issue.path as PropertyKey[],\n message: issue.message,\n });\n }\n return z.NEVER;\n }\n return {\n ...parsed.data,\n awardModel: ReferralProgramAwardModels.Unrecognized,\n originalAwardModel: data.awardModel,\n } satisfies ReferrerLeaderboardPageUnrecognized;\n });\n};\n\n/**\n * Schema for {@link ReferrerLeaderboardPageResponseOk}\n */\nexport const makeReferrerLeaderboardPageResponseOkSchema = (\n valueLabel: string = \"ReferrerLeaderboardPageResponseOk\",\n) =>\n z.object({\n responseCode: z.literal(ReferrerLeaderboardPageResponseCodes.Ok),\n data: makeReferrerLeaderboardPageSchema(`${valueLabel}.data`),\n });\n\n/**\n * Schema for {@link ReferrerLeaderboardPageResponseError}\n */\nexport const makeReferrerLeaderboardPageResponseErrorSchema = (\n _valueLabel: string = \"ReferrerLeaderboardPageResponseError\",\n) =>\n z.object({\n responseCode: z.literal(ReferrerLeaderboardPageResponseCodes.Error),\n error: z.string(),\n errorMessage: z.string(),\n });\n\n/**\n * Schema for {@link ReferrerLeaderboardPageResponse}\n */\nexport const makeReferrerLeaderboardPageResponseSchema = (\n valueLabel: string = \"ReferrerLeaderboardPageResponse\",\n) =>\n z.discriminatedUnion(\"responseCode\", [\n makeReferrerLeaderboardPageResponseOkSchema(valueLabel),\n makeReferrerLeaderboardPageResponseErrorSchema(valueLabel),\n ]);\n\n/**\n * Schema for {@link ReferrerEditionMetrics} (all ranked and unranked model variants, plus Unrecognized).\n *\n * Forward-compatible — peeks at `awardModel` before committing to full validation:\n * - Known award models are fully validated with the model-specific schema.\n * - Unknown award models are wrapped as {@link ReferrerEditionMetricsUnrecognized}.\n */\nexport const makeReferrerEditionMetricsSchema = (valueLabel: string = \"ReferrerEditionMetrics\") => {\n const knownAwardModels = Object.values(ReferralProgramAwardModels).filter(\n (m) => m !== ReferralProgramAwardModels.Unrecognized,\n ) as string[];\n\n // Loose schema used only to peek at awardModel before full validation.\n const looseSchema = z.object({ awardModel: z.string() }).passthrough();\n\n // Schema for known award models — dispatch is handled automatically by discriminatedUnion.\n const knownSchema = z.discriminatedUnion(\"awardModel\", [\n makeReferrerEditionMetricsPieSplitSchema(valueLabel),\n makeReferrerEditionMetricsRevShareLimitSchema(valueLabel),\n ]);\n\n return looseSchema.transform((data, ctx): ReferrerEditionMetrics => {\n if (knownAwardModels.includes(data.awardModel)) {\n const parsed = knownSchema.safeParse(data);\n if (!parsed.success) {\n for (const issue of parsed.error.issues) {\n ctx.addIssue({\n code: \"custom\",\n path: issue.path as PropertyKey[],\n message: issue.message,\n });\n }\n return z.NEVER;\n }\n return parsed.data;\n }\n\n // Unknown awardModel — wrap as ReferrerEditionMetricsUnrecognized.\n // No base fields are extracted here (unlike ReferrerLeaderboardPageUnrecognized) because\n // callers are expected to skip unrecognized edition metrics entirely rather than inspect them.\n return {\n awardModel: ReferralProgramAwardModels.Unrecognized,\n originalAwardModel: data.awardModel,\n } satisfies ReferrerEditionMetricsUnrecognized;\n });\n};\n\n/**\n * Schema for validating a {@link ReferralProgramEditionSlug}.\n *\n * Enforces the slug format invariant: lowercase letters (a-z), digits (0-9),\n * and hyphens (-) only. Must not start or end with a hyphen.\n *\n * Runtime validation against configured editions happens at the business logic level.\n */\nexport const makeReferralProgramEditionSlugSchema = (\n valueLabel: string = \"ReferralProgramEditionSlug\",\n) =>\n z\n .string()\n .min(1, `${valueLabel} must not be empty`)\n .regex(\n /^[a-z0-9]+(-[a-z0-9]+)*$/,\n `${valueLabel} must contain only lowercase letters, digits, and hyphens. Must not start or end with a hyphen.`,\n );\n\n/**\n * Schema for validating editions array (min 1, max {@link MAX_EDITIONS_PER_REQUEST}, distinct values).\n */\nexport const makeReferrerMetricsEditionsArraySchema = (\n valueLabel: string = \"ReferrerMetricsEditionsArray\",\n) =>\n z\n .array(makeReferralProgramEditionSlugSchema(`${valueLabel}[edition]`))\n .min(1, `${valueLabel} must contain at least 1 edition`)\n .max(\n MAX_EDITIONS_PER_REQUEST,\n `${valueLabel} must not contain more than ${MAX_EDITIONS_PER_REQUEST} editions`,\n )\n .refine(\n (editions) => {\n const uniqueEditions = new Set(editions);\n return uniqueEditions.size === editions.length;\n },\n { message: `${valueLabel} must not contain duplicate edition slugs` },\n );\n\n/**\n * Schema for {@link ReferrerMetricsEditionsRequest}\n */\nexport const makeReferrerMetricsEditionsRequestSchema = (\n valueLabel: string = \"ReferrerMetricsEditionsRequest\",\n) =>\n z.object({\n referrer: makeLowercaseAddressSchema(`${valueLabel}.referrer`),\n editions: makeReferrerMetricsEditionsArraySchema(`${valueLabel}.editions`),\n });\n\n/**\n * Schema for {@link ReferrerMetricsEditionsResponseOk}\n */\nexport const makeReferrerMetricsEditionsResponseOkSchema = (\n valueLabel: string = \"ReferrerMetricsEditionsResponseOk\",\n) =>\n z.object({\n responseCode: z.literal(ReferrerMetricsEditionsResponseCodes.Ok),\n data: z.record(\n makeReferralProgramEditionSlugSchema(`${valueLabel}.data[edition]`),\n makeReferrerEditionMetricsSchema(`${valueLabel}.data[edition]`),\n ),\n });\n\n/**\n * Schema for {@link ReferrerMetricsEditionsResponseError}\n */\nexport const makeReferrerMetricsEditionsResponseErrorSchema = (\n _valueLabel: string = \"ReferrerMetricsEditionsResponseError\",\n) =>\n z.object({\n responseCode: z.literal(ReferrerMetricsEditionsResponseCodes.Error),\n error: z.string(),\n errorMessage: z.string(),\n });\n\n/**\n * Schema for {@link ReferrerMetricsEditionsResponse}\n */\nexport const makeReferrerMetricsEditionsResponseSchema = (\n valueLabel: string = \"ReferrerMetricsEditionsResponse\",\n) =>\n z.discriminatedUnion(\"responseCode\", [\n makeReferrerMetricsEditionsResponseOkSchema(valueLabel),\n makeReferrerMetricsEditionsResponseErrorSchema(valueLabel),\n ]);\n\n/**\n * Schema for the shared base fields of a {@link ReferralProgramEditionConfig}.\n */\nconst makeReferralProgramEditionConfigBaseSchema = (valueLabel: string) =>\n z.object({\n slug: makeReferralProgramEditionSlugSchema(`${valueLabel}.slug`),\n displayName: z.string().min(1, `${valueLabel}.displayName must not be empty`),\n rules: makeBaseReferralProgramRulesSchema(`${valueLabel}.rules`),\n });\n\n/**\n * Schema for validating a {@link ReferralProgramEditionConfig}.\n */\nexport const makeReferralProgramEditionConfigSchema = (\n valueLabel: string = \"ReferralProgramEditionConfig\",\n) =>\n makeReferralProgramEditionConfigBaseSchema(valueLabel).safeExtend({\n rules: makeReferralProgramRulesSchema(`${valueLabel}.rules`),\n });\n\n/**\n * Schema for validating referral program edition config set array.\n *\n * Editions whose `rules.awardModel` is not recognized by this client version are preserved as\n * {@link ReferralProgramRulesUnrecognized} for forward compatibility — nothing is silently dropped.\n * Downstream code (e.g., leaderboard cache setup) is responsible for skipping unrecognized\n * editions with a warning log rather than crashing.\n *\n * The list must not be empty after processing all items. Duplicate slugs are not allowed.\n *\n * Two-pass approach:\n * 1. Each item is loosely parsed (based on `rules.awardModel` field).\n * - Known award models are fully validated with {@link makeReferralProgramEditionConfigSchema}.\n * - Unknown award models are parsed with {@link makeBaseReferralProgramRulesSchema} and wrapped as\n * `ReferralProgramRulesUnrecognized`.\n * 2. After processing all items, the result must be non-empty and have no duplicate slugs.\n */\nexport const makeReferralProgramEditionConfigSetArraySchema = (\n valueLabel: string = \"ReferralProgramEditionConfigSetArray\",\n) => {\n const knownAwardModels = Object.values(ReferralProgramAwardModels).filter(\n (m) => m !== ReferralProgramAwardModels.Unrecognized,\n ) as string[];\n const configSchema = makeReferralProgramEditionConfigSchema(`${valueLabel}[edition]`);\n\n // Loose schema used only to peek at rules.awardModel before full validation.\n const looseItemSchema = z\n .object({ rules: z.object({ awardModel: z.string() }).passthrough() })\n .passthrough();\n\n // Schema for extracting base fields from an unrecognized edition.\n const unrecognizedBaseSchema = makeReferralProgramEditionConfigBaseSchema(\n `${valueLabel}[edition]`,\n );\n\n return z.array(looseItemSchema).transform((items, ctx): ReferralProgramEditionConfig[] => {\n const result: ReferralProgramEditionConfig[] = [];\n\n for (let i = 0; i < items.length; i++) {\n const item = items[i];\n\n if (knownAwardModels.includes(item.rules.awardModel)) {\n // Known award model — fully validate.\n const parsed = configSchema.safeParse(item);\n if (!parsed.success) {\n for (const issue of parsed.error.issues) {\n ctx.addIssue({\n code: \"custom\",\n path: [i, ...(issue.path as PropertyKey[])],\n message: issue.message,\n });\n }\n } else {\n result.push(parsed.data);\n }\n } else {\n // Unknown award model — preserve as ReferralProgramRulesUnrecognized using base fields.\n const parsed = unrecognizedBaseSchema.safeParse(item);\n if (!parsed.success) {\n for (const issue of parsed.error.issues) {\n ctx.addIssue({\n code: \"custom\",\n path: [i, ...(issue.path as PropertyKey[])],\n message: issue.message,\n });\n }\n continue;\n }\n\n result.push({\n ...parsed.data,\n rules: {\n ...parsed.data.rules,\n awardModel: ReferralProgramAwardModels.Unrecognized,\n originalAwardModel: item.rules.awardModel,\n } satisfies ReferralProgramRulesUnrecognized,\n });\n }\n }\n\n if (result.length === 0) {\n ctx.addIssue({\n code: \"custom\",\n message: `${valueLabel} must contain at least one edition`,\n });\n // Issue above causes the overall parse to fail; this value is never used.\n return [];\n }\n\n const slugs = new Set<string>();\n for (const edition of result) {\n if (slugs.has(edition.slug)) {\n ctx.addIssue({\n code: \"custom\",\n message: `${valueLabel} must not contain duplicate edition slugs`,\n });\n // Issue above causes the overall parse to fail; this value is never used.\n return [];\n }\n slugs.add(edition.slug);\n }\n\n return result;\n });\n};\n\n/**\n * Schema for {@link ReferralProgramEditionSummary}.\n *\n * Forward-compatible — peeks at `awardModel` before committing to full validation:\n * - Known award models are fully validated with the model-specific schema.\n * - Unknown award models are wrapped as {@link ReferralProgramEditionSummaryUnrecognized}.\n */\nexport const makeReferralProgramEditionSummarySchema = (\n valueLabel: string = \"ReferralProgramEditionSummary\",\n) => {\n const knownAwardModels = Object.values(ReferralProgramAwardModels).filter(\n (m) => m !== ReferralProgramAwardModels.Unrecognized,\n ) as string[];\n\n // Loose schema used only to peek at awardModel before full validation.\n const looseSchema = z.object({ awardModel: z.string() }).passthrough();\n\n // Schema for known award models — dispatch handled automatically by discriminatedUnion.\n const knownSchema = z.discriminatedUnion(\"awardModel\", [\n makeReferralProgramEditionSummaryPieSplitSchema(valueLabel),\n makeReferralProgramEditionSummaryRevShareLimitSchema(valueLabel),\n ]);\n\n // Base schema for fields present on all edition summary variants (used for Unrecognized).\n const baseSchema = makeBaseReferralProgramEditionSummarySchema(valueLabel);\n\n return looseSchema.transform((data, ctx): ReferralProgramEditionSummary => {\n if (knownAwardModels.includes(data.awardModel)) {\n const parsed = knownSchema.safeParse(data);\n if (!parsed.success) {\n for (const issue of parsed.error.issues) {\n ctx.addIssue({\n code: \"custom\",\n path: issue.path as PropertyKey[],\n message: issue.message,\n });\n }\n return z.NEVER;\n }\n return parsed.data;\n }\n\n // Unknown awardModel — preserve as ReferralProgramEditionSummaryUnrecognized using base fields.\n const parsed = baseSchema.safeParse(data);\n if (!parsed.success) {\n for (const issue of parsed.error.issues) {\n ctx.addIssue({\n code: \"custom\",\n path: issue.path as PropertyKey[],\n message: issue.message,\n });\n }\n return z.NEVER;\n }\n return {\n ...parsed.data,\n awardModel: ReferralProgramAwardModels.Unrecognized,\n rules: {\n ...parsed.data.rules,\n awardModel: ReferralProgramAwardModels.Unrecognized,\n originalAwardModel: data.awardModel,\n },\n } satisfies ReferralProgramEditionSummaryUnrecognized;\n });\n};\n\n/**\n * Schema for {@link ReferralProgramEditionSummariesData}.\n */\nexport const makeReferralProgramEditionSummariesDataSchema = (\n valueLabel: string = \"ReferralProgramEditionSummariesData\",\n) =>\n z.object({\n editions: z.array(makeReferralProgramEditionSummarySchema(`${valueLabel}.editions[edition]`)),\n });\n\n/**\n * Schema for {@link ReferralProgramEditionSummariesResponseOk}.\n */\nexport const makeReferralProgramEditionSummariesResponseOkSchema = (\n valueLabel: string = \"ReferralProgramEditionSummariesResponseOk\",\n) =>\n z.object({\n responseCode: z.literal(ReferralProgramEditionSummariesResponseCodes.Ok),\n data: makeReferralProgramEditionSummariesDataSchema(`${valueLabel}.data`),\n });\n\n/**\n * Schema for {@link ReferralProgramEditionSummariesResponseError}.\n */\nexport const makeReferralProgramEditionSummariesResponseErrorSchema = (\n _valueLabel: string = \"ReferralProgramEditionSummariesResponseError\",\n) =>\n z.object({\n responseCode: z.literal(ReferralProgramEditionSummariesResponseCodes.Error),\n error: z.string(),\n errorMessage: z.string(),\n });\n\n/**\n * Schema for {@link ReferralProgramEditionSummariesResponse}.\n */\nexport const makeReferralProgramEditionSummariesResponseSchema = (\n valueLabel: string = \"ReferralProgramEditionSummariesResponse\",\n) =>\n z.discriminatedUnion(\"responseCode\", [\n makeReferralProgramEditionSummariesResponseOkSchema(valueLabel),\n makeReferralProgramEditionSummariesResponseErrorSchema(valueLabel),\n ]);\n","import { IdentifierSpec } from \"./types\";\n\nconst CAIP2: IdentifierSpec = {\n name: \"chainId\",\n regex: \"[-:a-zA-Z0-9]{5,41}\",\n parameters: {\n delimiter: \":\",\n values: {\n 0: {\n name: \"namespace\",\n regex: \"[-a-z0-9]{3,8}\",\n },\n 1: {\n name: \"reference\",\n regex: \"[-a-zA-Z0-9]{1,32}\",\n },\n },\n },\n};\n\nconst CAIP10: IdentifierSpec = {\n name: \"accountId\",\n regex: \"[-:a-zA-Z0-9]{7,106}\",\n parameters: {\n delimiter: \":\",\n values: {\n 0: {\n name: \"namespace\",\n regex: \"[-a-z0-9]{3,8}\",\n },\n 1: {\n name: \"reference\",\n regex: \"[-a-zA-Z0-9]{1,32}\",\n },\n 2: {\n name: \"address\",\n regex: \"[a-zA-Z0-9]{1,64}\",\n },\n },\n },\n};\n\n// represents namespace:reference in CAIP-19\nconst AssetName: IdentifierSpec = {\n name: \"assetName\",\n regex: \"[-:a-zA-Z0-9]{5,73}\",\n parameters: {\n delimiter: \":\",\n values: {\n 0: {\n name: \"namespace\",\n regex: \"[-a-z0-9]{3,8}\",\n },\n 1: {\n name: \"reference\",\n regex: \"[-a-zA-Z0-9]{1,64}\",\n },\n },\n },\n};\n\nconst CAIP19AssetType: IdentifierSpec = {\n name: \"assetType\",\n regex: \"[-:a-zA-Z0-9]{11,115}\",\n parameters: {\n delimiter: \"/\",\n values: {\n 0: CAIP2,\n 1: AssetName,\n },\n },\n};\n\nconst CAIP19AssetId: IdentifierSpec = {\n name: \"assetId\",\n regex: \"[-:a-zA-Z0-9]{13,148}\",\n parameters: {\n delimiter: \"/\",\n values: {\n 0: CAIP2,\n 1: AssetName,\n 2: {\n name: \"tokenId\",\n regex: \"[-a-zA-Z0-9]{1,32}\",\n },\n },\n },\n};\n\nexport const CAIP = {\n \"2\": CAIP2,\n \"10\": CAIP10,\n \"19\": {\n assetName: AssetName,\n assetType: CAIP19AssetType,\n assetId: CAIP19AssetId,\n },\n};\n","import { IdentifierSpec, Params } from \"./types\";\n\nexport function splitParams(id: string, spec: IdentifierSpec): string[] {\n return id.split(spec.parameters.delimiter);\n}\n\nexport function getParams<T>(id: string, spec: IdentifierSpec): T {\n const arr = splitParams(id, spec);\n const params = {};\n arr.forEach((value, index) => {\n params[spec.parameters.values[index].name] = value;\n });\n return params as T;\n}\n\nexport function joinParams(params: Params, spec: IdentifierSpec): string {\n return Object.values(spec.parameters.values)\n .map(parameter => {\n const param = params[parameter.name];\n return typeof param === \"string\"\n ? param\n : joinParams(param, parameter as IdentifierSpec);\n })\n .join(spec.parameters.delimiter);\n}\n\nexport function isValidId(id: string, spec: IdentifierSpec): boolean {\n // console.log(\"id\", id);\n // console.log(\"spec\", spec);\n // console.log(\"before regex\");\n if (!new RegExp(spec.regex).test(id)) return false;\n // console.log(\"after regex\");\n // console.log(\"before split\");\n const params = splitParams(id, spec);\n // console.log(\"after split\");\n // console.log(\"params\", params);\n // console.log(\"before length\");\n if (params.length !== Object.keys(spec.parameters.values).length)\n return false;\n // console.log(\"after length\");\n // console.log(\"before matches\");\n const matches = params\n .map((param, index) =>\n new RegExp(spec.parameters.values[index].regex).test(param)\n )\n .filter(x => !!x);\n if (matches.length !== params.length) return false;\n // console.log(\"after matches\");\n return true;\n}\n","import { CAIP } from \"./spec\";\nimport { IdentifierSpec } from \"./types\";\nimport { isValidId, joinParams, getParams } from \"./utils\";\n\nexport interface ChainIdParams {\n namespace: string;\n reference: string;\n}\n\nexport class ChainId {\n public static spec: IdentifierSpec = CAIP[\"2\"];\n\n public static parse(id: string): ChainIdParams {\n if (!isValidId(id, this.spec)) {\n throw new Error(`Invalid ${this.spec.name} provided: ${id}`);\n }\n return new ChainId(getParams<ChainIdParams>(id, this.spec)).toJSON();\n }\n\n public static format(params: ChainIdParams): string {\n return joinParams(params as any, this.spec);\n }\n\n public namespace: string;\n public reference: string;\n\n constructor(params: ChainIdParams | string) {\n if (typeof params === \"string\") {\n params = ChainId.parse(params);\n }\n\n this.namespace = params.namespace;\n this.reference = params.reference;\n }\n\n public toString(): string {\n return ChainId.format(this.toJSON());\n }\n\n public toJSON(): ChainIdParams {\n return {\n namespace: this.namespace,\n reference: this.reference,\n };\n }\n}\n","import { ChainId, ChainIdParams } from \"./chain\";\nimport { CAIP } from \"./spec\";\nimport { IdentifierSpec } from \"./types\";\nimport { isValidId, joinParams, getParams } from \"./utils\";\n\nexport interface AccountIdSplitParams extends ChainIdParams {\n address: string;\n}\nexport interface AccountIdParams {\n chainId: string | ChainIdParams;\n address: string;\n}\n\nexport class AccountId {\n public static spec: IdentifierSpec = CAIP[\"10\"];\n\n public static parse(id: string): AccountIdParams {\n if (!isValidId(id, this.spec)) {\n throw new Error(`Invalid ${this.spec.name} provided: ${id}`);\n }\n const { namespace, reference, address } = getParams<AccountIdSplitParams>(\n id,\n this.spec\n );\n const chainId = new ChainId({ namespace, reference });\n return new AccountId({ chainId, address }).toJSON();\n }\n\n public static format(params: AccountIdParams): string {\n const chainId = new ChainId(params.chainId);\n const splitParams: AccountIdSplitParams = {\n ...chainId.toJSON(),\n address: params.address,\n };\n return joinParams(splitParams as any, this.spec);\n }\n\n public chainId: ChainId;\n public address: string;\n\n constructor(params: AccountIdParams | string) {\n if (typeof params === \"string\") {\n params = AccountId.parse(params);\n }\n\n this.chainId = new ChainId(params.chainId);\n this.address = params.address;\n }\n\n public toString(): string {\n return AccountId.format(this.toJSON());\n }\n\n public toJSON(): AccountIdParams {\n return {\n chainId: this.chainId.toJSON(),\n address: this.address,\n };\n }\n}\n","import { CAIP } from \"./spec\";\nimport { IdentifierSpec } from \"./types\";\nimport { isValidId, joinParams, getParams } from \"./utils\";\n\nexport interface AssetNameParams {\n namespace: string;\n reference: string;\n}\n\nexport class AssetName {\n public static spec: IdentifierSpec = CAIP[\"19\"].assetName;\n\n public static parse(id: string): AssetNameParams {\n if (!isValidId(id, this.spec)) {\n throw new Error(`Invalid ${this.spec.name} provided: ${id}`);\n }\n return new AssetName(getParams<AssetNameParams>(id, this.spec)).toJSON();\n }\n\n public static format(params: AssetNameParams): string {\n return joinParams(params as any, this.spec);\n }\n\n public namespace: string;\n public reference: string;\n\n constructor(params: AssetNameParams | string) {\n if (typeof params === \"string\") {\n params = AssetName.parse(params);\n }\n\n this.namespace = params.namespace;\n this.reference = params.reference;\n }\n\n public toString(): string {\n return AssetName.format(this.toJSON());\n }\n\n public toJSON(): AssetNameParams {\n return {\n namespace: this.namespace,\n reference: this.reference,\n };\n }\n}\n","import { AssetName, AssetNameParams } from \"./assetName\";\nimport { ChainId, ChainIdParams } from \"./chain\";\nimport { CAIP } from \"./spec\";\nimport { IdentifierSpec } from \"./types\";\nimport { isValidId, joinParams, getParams } from \"./utils\";\n\nexport interface AssetTypeParams {\n chainId: string | ChainIdParams;\n assetName: string | AssetNameParams;\n}\n\nexport class AssetType {\n public static spec: IdentifierSpec = CAIP[\"19\"].assetType;\n\n public static parse(id: string): AssetTypeParams {\n if (!isValidId(id, this.spec)) {\n throw new Error(`Invalid ${this.spec.name} provided: ${id}`);\n }\n return new AssetType(getParams<AssetTypeParams>(id, this.spec)).toJSON();\n }\n\n public static format(params: AssetTypeParams): string {\n return joinParams(params as any, this.spec);\n }\n\n public chainId: ChainId;\n public assetName: AssetName;\n\n constructor(params: AssetTypeParams | string) {\n if (typeof params === \"string\") {\n params = AssetType.parse(params);\n }\n\n this.chainId = new ChainId(params.chainId);\n this.assetName = new AssetName(params.assetName);\n }\n\n public toString(): string {\n return AssetType.format(this.toJSON());\n }\n\n public toJSON(): AssetTypeParams {\n return {\n chainId: this.chainId.toJSON(),\n assetName: this.assetName,\n };\n }\n}\n","import { AssetName, AssetNameParams } from \"./assetName\";\nimport { ChainId, ChainIdParams } from \"./chain\";\nimport { CAIP } from \"./spec\";\nimport { IdentifierSpec } from \"./types\";\nimport { isValidId, joinParams, getParams } from \"./utils\";\n\nexport interface AssetIdParams {\n chainId: string | ChainIdParams;\n assetName: string | AssetNameParams;\n tokenId: string;\n}\n\nexport class AssetId {\n public static spec: IdentifierSpec = CAIP[\"19\"].assetId;\n\n public static parse(id: string): AssetIdParams {\n if (!isValidId(id, this.spec)) {\n throw new Error(`Invalid ${this.spec.name} provided: ${id}`);\n }\n return new AssetId(getParams<AssetIdParams>(id, this.spec)).toJSON();\n }\n\n public static format(params: AssetIdParams): string {\n return joinParams(params as any, this.spec);\n }\n\n public chainId: ChainId;\n public assetName: AssetName;\n public tokenId: string;\n\n constructor(params: AssetIdParams | string) {\n if (typeof params === \"string\") {\n params = AssetId.parse(params);\n }\n\n this.chainId = new ChainId(params.chainId);\n this.assetName = new AssetName(params.assetName);\n this.tokenId = params.tokenId;\n }\n\n public toString(): string {\n return AssetId.format(this.toJSON());\n }\n\n public toJSON(): AssetIdParams {\n return {\n chainId: this.chainId.toJSON(),\n assetName: this.assetName.toJSON(),\n tokenId: this.tokenId,\n };\n }\n}\n","import type { CoinType } from \"@ensdomains/address-encoder\";\nimport { AccountId as CaipAccountId } from \"caip\";\nimport { type Address, type Hex, isAddress, isHex, size } from \"viem\";\n/**\n * All zod schemas we define must remain internal implementation details.\n * We want the freedom to move away from zod in the future without impacting\n * any users of the ensnode-sdk package.\n *\n * The only way to share Zod schemas is to re-export them from\n * `./src/internal.ts` file.\n */\nimport { z } from \"zod/v4\";\n\nimport { ENSNamespaceIds, type InterpretedName, type Node } from \"../ens\";\nimport { asLowerCaseAddress } from \"./address\";\nimport {\n type CurrencyId,\n CurrencyIds,\n type PriceDai,\n type PriceEth,\n type PriceUsdc,\n} from \"./currencies\";\nimport { reinterpretName } from \"./interpretation/reinterpretation\";\nimport type { AccountIdString } from \"./serialized-types\";\nimport type {\n AccountId,\n BlockRef,\n ChainId,\n Datetime,\n DefaultableChainId,\n Duration,\n UnixTimestamp,\n} from \"./types\";\n\n/**\n * Parses a string value as a boolean.\n */\nexport const makeBooleanStringSchema = (valueLabel: string = \"Value\") =>\n z\n .string()\n .pipe(\n z.enum([\"true\", \"false\"], {\n error: `${valueLabel} must be 'true' or 'false'.`,\n }),\n )\n .transform((val) => val === \"true\");\n\n/**\n * Parses a numeric value as a finite non-negative number.\n */\nexport const makeFiniteNonNegativeNumberSchema = (valueLabel: string = \"Value\") =>\n z\n .number({\n // NOTE: Zod's implementation of `number` automatically rejects NaN and Infinity values.\n // and therefore the finite check is implicit.\n error: `${valueLabel} must be a finite number.`,\n })\n .nonnegative({\n error: `${valueLabel} must be a non-negative number (>=0).`,\n });\n\n/**\n * Parses a numeric value as an integer.\n */\nexport const makeIntegerSchema = (valueLabel: string = \"Value\") =>\n z.int({\n error: `${valueLabel} must be an integer.`,\n });\n\n/**\n * Parses a numeric value as a positive integer.\n */\nexport const makePositiveIntegerSchema = (valueLabel: string = \"Value\") =>\n makeIntegerSchema(valueLabel).positive({\n error: `${valueLabel} must be a positive integer (>0).`,\n });\n\n/**\n * Parses a numeric value as a non-negative integer.\n */\nexport const makeNonNegativeIntegerSchema = (valueLabel: string = \"Value\") =>\n makeIntegerSchema(valueLabel).nonnegative({\n error: `${valueLabel} must be a non-negative integer (>=0).`,\n });\n\n/**\n * Parses a numeric value as {@link Duration}\n */\nexport const makeDurationSchema = (valueLabel: string = \"Value\") =>\n z\n .number({\n error: `${valueLabel} must be a number.`,\n })\n .pipe(makeNonNegativeIntegerSchema(valueLabel));\n\n/**\n * Parses Chain ID\n *\n * {@link ChainId}\n */\nexport const makeChainIdSchema = (valueLabel: string = \"Chain ID\") =>\n makePositiveIntegerSchema(valueLabel).transform((val) => val as ChainId);\n\n/**\n * Parses a serialized representation of {@link ChainId}.\n */\nexport const makeChainIdStringSchema = (valueLabel: string = \"Chain ID String\") =>\n z\n .string({ error: `${valueLabel} must be a string representing a chain ID.` })\n .pipe(z.coerce.number({ error: `${valueLabel} must represent a positive integer (>0).` }))\n .pipe(makeChainIdSchema(`The numeric value represented by ${valueLabel}`));\n\n/**\n * Parses Defaultable Chain ID\n *\n * {@link DefaultableChainId}\n */\nexport const makeDefaultableChainIdSchema = (valueLabel: string = \"Defaultable Chain ID\") =>\n makeNonNegativeIntegerSchema(valueLabel).transform((val) => val as DefaultableChainId);\n\n/**\n * Parses a serialized representation of {@link DefaultableChainId}.\n */\nexport const makeDefaultableChainIdStringSchema = (\n valueLabel: string = \"Defaultable Chain ID String\",\n) =>\n z\n .string({ error: `${valueLabel} must be a string representing a chain ID.` })\n .pipe(z.coerce.number({ error: `${valueLabel} must represent a non-negative integer (>=0).` }))\n .pipe(makeDefaultableChainIdSchema(`The numeric value represented by ${valueLabel}`));\n\n/**\n * Parses {@link CoinType}.\n */\nexport const makeCoinTypeSchema = (valueLabel: string = \"Coin Type\") =>\n z\n .number({ error: `${valueLabel} must be a number.` })\n .int({ error: `${valueLabel} must be an integer.` })\n .nonnegative({ error: `${valueLabel} must be a non-negative integer (>=0).` })\n .transform((val) => val as CoinType);\n\n/**\n * Parses a serialized representation of {@link CoinType}.\n */\nexport const makeCoinTypeStringSchema = (valueLabel: string = \"Coin Type String\") =>\n z\n .string({ error: `${valueLabel} must be a string representing a coin type.` })\n .pipe(z.coerce.number({ error: `${valueLabel} must represent a non-negative integer (>=0).` }))\n .pipe(makeCoinTypeSchema(`The numeric value represented by ${valueLabel}`));\n\n/**\n * Parses a serialized representation of an EVM address into a lowercase Address.\n */\nexport const makeLowercaseAddressSchema = (valueLabel: string = \"EVM address\") =>\n z\n .string()\n .check((ctx) => {\n if (!isAddress(ctx.value)) {\n ctx.issues.push({\n code: \"custom\",\n message: `${valueLabel} must be a valid EVM address`,\n input: ctx.value,\n });\n }\n })\n .transform((val) => asLowerCaseAddress(val as Address));\n\n/**\n * Parses an ISO 8601 string representations of {@link Datetime}\n */\nexport const makeDatetimeSchema = (valueLabel: string = \"Datetime string\") =>\n z.iso\n .datetime({ error: `${valueLabel} must be a string in ISO 8601 format.` })\n .transform((v) => new Date(v));\n\n/**\n * Parses value as {@link UnixTimestamp}.\n */\nexport const makeUnixTimestampSchema = (valueLabel: string = \"Timestamp\") =>\n makeIntegerSchema(valueLabel);\n\n/**\n * Parses a string representations of {@link URL}\n */\nexport const makeUrlSchema = (valueLabel: string = \"Value\") =>\n z\n .url({\n error: `${valueLabel} must be a valid URL string (e.g., http://localhost:8080 or https://example.com).`,\n abort: true,\n })\n .transform((v) => new URL(v));\n\n/**\n * Parses a serialized representation of a comma separated list.\n */\nexport const makeCommaSeparatedList = (valueLabel: string = \"Value\") =>\n z\n .string({ error: `${valueLabel} must be a comma separated list.` })\n .transform((val) => val.split(\",\").filter(Boolean))\n .refine((val) => val.length > 0, {\n error: `${valueLabel} must be a comma separated list with at least one value.`,\n });\n\n/**\n * Parses a numeric value as a block number.\n */\nexport const makeBlockNumberSchema = (valueLabel: string = \"Block number\") =>\n makeNonNegativeIntegerSchema(valueLabel);\n\n/**\n * Parses an object value as the {@link BlockRef} object.\n */\nexport const makeBlockRefSchema = (valueLabel: string = \"Value\") =>\n z.strictObject(\n {\n timestamp: makeUnixTimestampSchema(`${valueLabel}.timestamp`),\n number: makeBlockNumberSchema(`${valueLabel}.number`),\n },\n {\n error: `${valueLabel} must be a valid BlockRef object.`,\n },\n );\n\n/**\n * Parses a string value as ENSNamespaceId.\n */\nexport const makeENSNamespaceIdSchema = (valueLabel: string = \"ENSNamespaceId\") =>\n z.enum(ENSNamespaceIds, {\n error() {\n return `Invalid ${valueLabel}. Supported ENS namespace IDs are: ${Object.keys(ENSNamespaceIds).join(\", \")}`;\n },\n });\n\nconst makePriceAmountSchema = (valueLabel: string = \"Amount\") =>\n z.coerce\n .bigint({\n error: `${valueLabel} must represent a bigint.`,\n })\n .nonnegative({\n error: `${valueLabel} must not be negative.`,\n });\n\nexport const makePriceCurrencySchema = (\n currency: CurrencyId,\n valueLabel: string = \"Price Currency\",\n) =>\n z.strictObject({\n amount: makePriceAmountSchema(`${valueLabel} amount`),\n\n currency: z.literal(currency, {\n error: `${valueLabel} currency must be set to '${currency}'.`,\n }),\n });\n\n/**\n * Schema for {@link Price} type.\n */\nexport const makePriceSchema = (valueLabel: string = \"Price\") =>\n z.discriminatedUnion(\n \"currency\",\n [\n makePriceCurrencySchema(CurrencyIds.ETH, valueLabel),\n makePriceCurrencySchema(CurrencyIds.USDC, valueLabel),\n makePriceCurrencySchema(CurrencyIds.DAI, valueLabel),\n ],\n { error: `${valueLabel} currency must be one of ${Object.values(CurrencyIds).join(\", \")}` },\n );\n\n/**\n * Schema for {@link PriceEth} type.\n */\nexport const makePriceEthSchema = (valueLabel: string = \"Price ETH\") =>\n makePriceCurrencySchema(CurrencyIds.ETH, valueLabel).transform((v) => v as PriceEth);\n\n/**\n * Schema for {@link PriceUsdc} type.\n */\nexport const makePriceUsdcSchema = (valueLabel: string = \"Price USDC\") =>\n makePriceCurrencySchema(CurrencyIds.USDC, valueLabel).transform((v) => v as PriceUsdc);\n\n/**\n * Schema for {@link PriceDai} type.\n */\nexport const makePriceDaiSchema = (valueLabel: string = \"Price DAI\") =>\n makePriceCurrencySchema(CurrencyIds.DAI, valueLabel).transform((v) => v as PriceDai);\n\n/**\n * Schema for {@link AccountId} type.\n */\nexport const makeAccountIdSchema = (valueLabel: string = \"AccountId\") =>\n z.strictObject({\n chainId: makeChainIdSchema(`${valueLabel} chain ID`),\n address: makeLowercaseAddressSchema(`${valueLabel} address`),\n });\n\n/**\n * Schema for {@link AccountIdString} type.\n */\nexport const makeAccountIdStringSchema = (valueLabel: string = \"Account ID String\") =>\n z.coerce\n .string()\n .transform((v) => {\n const result = new CaipAccountId(v);\n\n return {\n chainId: Number(result.chainId.reference),\n address: result.address,\n };\n })\n .pipe(makeAccountIdSchema(valueLabel));\n\n/**\n * Make a schema for {@link Hex} representation of bytes array.\n *\n * @param {number} options.bytesCount expected count of bytes to be hex-encoded\n */\nexport const makeHexStringSchema = (\n options: { bytesCount: number },\n valueLabel: string = \"String representation of bytes array\",\n) =>\n z\n .string()\n .check(function invariant_isHexEncoded(ctx) {\n if (!isHex(ctx.value)) {\n ctx.issues.push({\n code: \"custom\",\n input: ctx.value,\n message: `${valueLabel} must be a hexadecimal value which starts with '0x'.`,\n });\n }\n })\n .transform((v) => v as Hex)\n .check(function invariant_encodesRequiredBytesCount(ctx) {\n const expectedBytesCount = options.bytesCount;\n const actualBytesCount = size(ctx.value);\n\n if (actualBytesCount !== expectedBytesCount) {\n ctx.issues.push({\n code: \"custom\",\n input: ctx.value,\n message: `${valueLabel} must represent exactly ${expectedBytesCount} bytes. Currently represented bytes count: ${actualBytesCount}.`,\n });\n }\n });\n\n/**\n * Make schema for {@link Node}.\n */\nexport const makeNodeSchema = (valueLabel: string = \"Node\") =>\n makeHexStringSchema({ bytesCount: 32 }, valueLabel);\n\n/**\n * Make schema for Transaction Hash\n */\nexport const makeTransactionHashSchema = (valueLabel: string = \"Transaction hash\") =>\n makeHexStringSchema({ bytesCount: 32 }, valueLabel);\n\n/**\n * Make schema for {@link ReinterpretedName}.\n */\nexport const makeReinterpretedNameSchema = (valueLabel: string = \"Reinterpreted Name\") =>\n z\n .string()\n .transform((v) => v as InterpretedName)\n .check((ctx) => {\n try {\n reinterpretName(ctx.value);\n } catch (error) {\n const errorMessage = error instanceof Error ? error.message : \"Unknown error\";\n\n ctx.issues.push({\n code: \"custom\",\n input: ctx.value,\n message: `${valueLabel} cannot be reinterpreted: ${errorMessage}`,\n });\n }\n })\n .transform(reinterpretName);\n","import type { Abi } from \"viem\";\n\nexport const EnhancedAccessControl = [\n {\n inputs: [\n {\n internalType: \"uint256\",\n name: \"resource\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"roleBitmap\",\n type: \"uint256\",\n },\n {\n internalType: \"address\",\n name: \"account\",\n type: \"address\",\n },\n ],\n name: \"EACCannotGrantRoles\",\n type: \"error\",\n },\n {\n inputs: [\n {\n internalType: \"uint256\",\n name: \"resource\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"roleBitmap\",\n type: \"uint256\",\n },\n {\n internalType: \"address\",\n name: \"account\",\n type: \"address\",\n },\n ],\n name: \"EACCannotRevokeRoles\",\n type: \"error\",\n },\n {\n inputs: [],\n name: \"EACInvalidAccount\",\n type: \"error\",\n },\n {\n inputs: [\n {\n internalType: \"uint256\",\n name: \"roleBitmap\",\n type: \"uint256\",\n },\n ],\n name: \"EACInvalidRoleBitmap\",\n type: \"error\",\n },\n {\n inputs: [\n {\n internalType: \"uint256\",\n name: \"resource\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"role\",\n type: \"uint256\",\n },\n ],\n name: \"EACMaxAssignees\",\n type: \"error\",\n },\n {\n inputs: [\n {\n internalType: \"uint256\",\n name: \"resource\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"role\",\n type: \"uint256\",\n },\n ],\n name: \"EACMinAssignees\",\n type: \"error\",\n },\n {\n inputs: [],\n name: \"EACRootResourceNotAllowed\",\n type: \"error\",\n },\n {\n inputs: [\n {\n internalType: \"uint256\",\n name: \"resource\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"roleBitmap\",\n type: \"uint256\",\n },\n {\n internalType: \"address\",\n name: \"account\",\n type: \"address\",\n },\n ],\n name: \"EACUnauthorizedAccountRoles\",\n type: \"error\",\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: true,\n internalType: \"uint256\",\n name: \"resource\",\n type: \"uint256\",\n },\n {\n indexed: true,\n internalType: \"address\",\n name: \"account\",\n type: \"address\",\n },\n {\n indexed: false,\n internalType: \"uint256\",\n name: \"oldRoleBitmap\",\n type: \"uint256\",\n },\n {\n indexed: false,\n internalType: \"uint256\",\n name: \"newRoleBitmap\",\n type: \"uint256\",\n },\n ],\n name: \"EACRolesChanged\",\n type: \"event\",\n },\n {\n inputs: [],\n name: \"ROOT_RESOURCE\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"uint256\",\n name: \"resource\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"roleBitmap\",\n type: \"uint256\",\n },\n ],\n name: \"getAssigneeCount\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"counts\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"mask\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"uint256\",\n name: \"resource\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"roleBitmap\",\n type: \"uint256\",\n },\n {\n internalType: \"address\",\n name: \"account\",\n type: \"address\",\n },\n ],\n name: \"grantRoles\",\n outputs: [\n {\n internalType: \"bool\",\n name: \"\",\n type: \"bool\",\n },\n ],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"uint256\",\n name: \"roleBitmap\",\n type: \"uint256\",\n },\n {\n internalType: \"address\",\n name: \"account\",\n type: \"address\",\n },\n ],\n name: \"grantRootRoles\",\n outputs: [\n {\n internalType: \"bool\",\n name: \"\",\n type: \"bool\",\n },\n ],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"uint256\",\n name: \"resource\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"roleBitmap\",\n type: \"uint256\",\n },\n ],\n name: \"hasAssignees\",\n outputs: [\n {\n internalType: \"bool\",\n name: \"\",\n type: \"bool\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"uint256\",\n name: \"resource\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"roleBitmap\",\n type: \"uint256\",\n },\n {\n internalType: \"address\",\n name: \"account\",\n type: \"address\",\n },\n ],\n name: \"hasRoles\",\n outputs: [\n {\n internalType: \"bool\",\n name: \"\",\n type: \"bool\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"uint256\",\n name: \"roleBitmap\",\n type: \"uint256\",\n },\n {\n internalType: \"address\",\n name: \"account\",\n type: \"address\",\n },\n ],\n name: \"hasRootRoles\",\n outputs: [\n {\n internalType: \"bool\",\n name: \"\",\n type: \"bool\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"uint256\",\n name: \"resource\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"roleBitmap\",\n type: \"uint256\",\n },\n {\n internalType: \"address\",\n name: \"account\",\n type: \"address\",\n },\n ],\n name: \"revokeRoles\",\n outputs: [\n {\n internalType: \"bool\",\n name: \"\",\n type: \"bool\",\n },\n ],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"uint256\",\n name: \"roleBitmap\",\n type: \"uint256\",\n },\n {\n internalType: \"address\",\n name: \"account\",\n type: \"address\",\n },\n ],\n name: \"revokeRootRoles\",\n outputs: [\n {\n internalType: \"bool\",\n name: \"\",\n type: \"bool\",\n },\n ],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"uint256\",\n name: \"resource\",\n type: \"uint256\",\n },\n ],\n name: \"roleCount\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"uint256\",\n name: \"resource\",\n type: \"uint256\",\n },\n {\n internalType: \"address\",\n name: \"account\",\n type: \"address\",\n },\n ],\n name: \"roles\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"bytes4\",\n name: \"interfaceId\",\n type: \"bytes4\",\n },\n ],\n name: \"supportsInterface\",\n outputs: [\n {\n internalType: \"bool\",\n name: \"\",\n type: \"bool\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n] as const satisfies Abi;\n","import type { Abi } from \"viem\";\n\nexport const ETHRegistrar = [\n {\n inputs: [\n {\n internalType: \"contract IPermissionedRegistry\",\n name: \"registry\",\n type: \"address\",\n },\n {\n internalType: \"contract IHCAFactoryBasic\",\n name: \"hcaFactory\",\n type: \"address\",\n },\n {\n internalType: \"address\",\n name: \"beneficiary\",\n type: \"address\",\n },\n {\n internalType: \"uint64\",\n name: \"minCommitmentAge\",\n type: \"uint64\",\n },\n {\n internalType: \"uint64\",\n name: \"maxCommitmentAge\",\n type: \"uint64\",\n },\n {\n internalType: \"uint64\",\n name: \"minRegisterDuration\",\n type: \"uint64\",\n },\n {\n internalType: \"contract IRentPriceOracle\",\n name: \"rentPriceOracle_\",\n type: \"address\",\n },\n ],\n stateMutability: \"nonpayable\",\n type: \"constructor\",\n },\n {\n inputs: [\n {\n internalType: \"bytes32\",\n name: \"commitment\",\n type: \"bytes32\",\n },\n {\n internalType: \"uint64\",\n name: \"validFrom\",\n type: \"uint64\",\n },\n {\n internalType: \"uint64\",\n name: \"blockTimestamp\",\n type: \"uint64\",\n },\n ],\n name: \"CommitmentTooNew\",\n type: \"error\",\n },\n {\n inputs: [\n {\n internalType: \"bytes32\",\n name: \"commitment\",\n type: \"bytes32\",\n },\n {\n internalType: \"uint64\",\n name: \"validTo\",\n type: \"uint64\",\n },\n {\n internalType: \"uint64\",\n name: \"blockTimestamp\",\n type: \"uint64\",\n },\n ],\n name: \"CommitmentTooOld\",\n type: \"error\",\n },\n {\n inputs: [\n {\n internalType: \"uint64\",\n name: \"duration\",\n type: \"uint64\",\n },\n {\n internalType: \"uint64\",\n name: \"minDuration\",\n type: \"uint64\",\n },\n ],\n name: \"DurationTooShort\",\n type: \"error\",\n },\n {\n inputs: [\n {\n internalType: \"uint256\",\n name: \"resource\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"roleBitmap\",\n type: \"uint256\",\n },\n {\n internalType: \"address\",\n name: \"account\",\n type: \"address\",\n },\n ],\n name: \"EACCannotGrantRoles\",\n type: \"error\",\n },\n {\n inputs: [\n {\n internalType: \"uint256\",\n name: \"resource\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"roleBitmap\",\n type: \"uint256\",\n },\n {\n internalType: \"address\",\n name: \"account\",\n type: \"address\",\n },\n ],\n name: \"EACCannotRevokeRoles\",\n type: \"error\",\n },\n {\n inputs: [],\n name: \"EACInvalidAccount\",\n type: \"error\",\n },\n {\n inputs: [\n {\n internalType: \"uint256\",\n name: \"roleBitmap\",\n type: \"uint256\",\n },\n ],\n name: \"EACInvalidRoleBitmap\",\n type: \"error\",\n },\n {\n inputs: [\n {\n internalType: \"uint256\",\n name: \"resource\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"role\",\n type: \"uint256\",\n },\n ],\n name: \"EACMaxAssignees\",\n type: \"error\",\n },\n {\n inputs: [\n {\n internalType: \"uint256\",\n name: \"resource\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"role\",\n type: \"uint256\",\n },\n ],\n name: \"EACMinAssignees\",\n type: \"error\",\n },\n {\n inputs: [],\n name: \"EACRootResourceNotAllowed\",\n type: \"error\",\n },\n {\n inputs: [\n {\n internalType: \"uint256\",\n name: \"resource\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"roleBitmap\",\n type: \"uint256\",\n },\n {\n internalType: \"address\",\n name: \"account\",\n type: \"address\",\n },\n ],\n name: \"EACUnauthorizedAccountRoles\",\n type: \"error\",\n },\n {\n inputs: [],\n name: \"InvalidOwner\",\n type: \"error\",\n },\n {\n inputs: [],\n name: \"MaxCommitmentAgeTooLow\",\n type: \"error\",\n },\n {\n inputs: [\n {\n internalType: \"string\",\n name: \"label\",\n type: \"string\",\n },\n ],\n name: \"NameIsAvailable\",\n type: \"error\",\n },\n {\n inputs: [\n {\n internalType: \"string\",\n name: \"label\",\n type: \"string\",\n },\n ],\n name: \"NameNotAvailable\",\n type: \"error\",\n },\n {\n inputs: [\n {\n internalType: \"string\",\n name: \"label\",\n type: \"string\",\n },\n ],\n name: \"NotValid\",\n type: \"error\",\n },\n {\n inputs: [\n {\n internalType: \"contract IERC20\",\n name: \"paymentToken\",\n type: \"address\",\n },\n ],\n name: \"PaymentTokenNotSupported\",\n type: \"error\",\n },\n {\n inputs: [\n {\n internalType: \"address\",\n name: \"token\",\n type: \"address\",\n },\n ],\n name: \"SafeERC20FailedOperation\",\n type: \"error\",\n },\n {\n inputs: [\n {\n internalType: \"bytes32\",\n name: \"commitment\",\n type: \"bytes32\",\n },\n ],\n name: \"UnexpiredCommitmentExists\",\n type: \"error\",\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: false,\n internalType: \"bytes32\",\n name: \"commitment\",\n type: \"bytes32\",\n },\n ],\n name: \"CommitmentMade\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: true,\n internalType: \"uint256\",\n name: \"resource\",\n type: \"uint256\",\n },\n {\n indexed: true,\n internalType: \"address\",\n name: \"account\",\n type: \"address\",\n },\n {\n indexed: false,\n internalType: \"uint256\",\n name: \"oldRoleBitmap\",\n type: \"uint256\",\n },\n {\n indexed: false,\n internalType: \"uint256\",\n name: \"newRoleBitmap\",\n type: \"uint256\",\n },\n ],\n name: \"EACRolesChanged\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: true,\n internalType: \"uint256\",\n name: \"tokenId\",\n type: \"uint256\",\n },\n {\n indexed: false,\n internalType: \"string\",\n name: \"label\",\n type: \"string\",\n },\n {\n indexed: false,\n internalType: \"address\",\n name: \"owner\",\n type: \"address\",\n },\n {\n indexed: false,\n internalType: \"contract IRegistry\",\n name: \"subregistry\",\n type: \"address\",\n },\n {\n indexed: false,\n internalType: \"address\",\n name: \"resolver\",\n type: \"address\",\n },\n {\n indexed: false,\n internalType: \"uint64\",\n name: \"duration\",\n type: \"uint64\",\n },\n {\n indexed: false,\n internalType: \"contract IERC20\",\n name: \"paymentToken\",\n type: \"address\",\n },\n {\n indexed: false,\n internalType: \"bytes32\",\n name: \"referrer\",\n type: \"bytes32\",\n },\n {\n indexed: false,\n internalType: \"uint256\",\n name: \"base\",\n type: \"uint256\",\n },\n {\n indexed: false,\n internalType: \"uint256\",\n name: \"premium\",\n type: \"uint256\",\n },\n ],\n name: \"NameRegistered\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: true,\n internalType: \"uint256\",\n name: \"tokenId\",\n type: \"uint256\",\n },\n {\n indexed: false,\n internalType: \"string\",\n name: \"label\",\n type: \"string\",\n },\n {\n indexed: false,\n internalType: \"uint64\",\n name: \"duration\",\n type: \"uint64\",\n },\n {\n indexed: false,\n internalType: \"uint64\",\n name: \"newExpiry\",\n type: \"uint64\",\n },\n {\n indexed: false,\n internalType: \"contract IERC20\",\n name: \"paymentToken\",\n type: \"address\",\n },\n {\n indexed: false,\n internalType: \"bytes32\",\n name: \"referrer\",\n type: \"bytes32\",\n },\n {\n indexed: false,\n internalType: \"uint256\",\n name: \"base\",\n type: \"uint256\",\n },\n ],\n name: \"NameRenewed\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: true,\n internalType: \"contract IERC20\",\n name: \"paymentToken\",\n type: \"address\",\n },\n ],\n name: \"PaymentTokenAdded\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: true,\n internalType: \"contract IERC20\",\n name: \"paymentToken\",\n type: \"address\",\n },\n ],\n name: \"PaymentTokenRemoved\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: false,\n internalType: \"contract IRentPriceOracle\",\n name: \"oracle\",\n type: \"address\",\n },\n ],\n name: \"RentPriceOracleChanged\",\n type: \"event\",\n },\n {\n inputs: [],\n name: \"BENEFICIARY\",\n outputs: [\n {\n internalType: \"address\",\n name: \"\",\n type: \"address\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"HCA_FACTORY\",\n outputs: [\n {\n internalType: \"contract IHCAFactoryBasic\",\n name: \"\",\n type: \"address\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"MAX_COMMITMENT_AGE\",\n outputs: [\n {\n internalType: \"uint64\",\n name: \"\",\n type: \"uint64\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"MIN_COMMITMENT_AGE\",\n outputs: [\n {\n internalType: \"uint64\",\n name: \"\",\n type: \"uint64\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"MIN_REGISTER_DURATION\",\n outputs: [\n {\n internalType: \"uint64\",\n name: \"\",\n type: \"uint64\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"REGISTRY\",\n outputs: [\n {\n internalType: \"contract IPermissionedRegistry\",\n name: \"\",\n type: \"address\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"ROOT_RESOURCE\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"bytes32\",\n name: \"commitment\",\n type: \"bytes32\",\n },\n ],\n name: \"commit\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"bytes32\",\n name: \"commitment\",\n type: \"bytes32\",\n },\n ],\n name: \"commitmentAt\",\n outputs: [\n {\n internalType: \"uint64\",\n name: \"commitTime\",\n type: \"uint64\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"uint256\",\n name: \"resource\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"roleBitmap\",\n type: \"uint256\",\n },\n ],\n name: \"getAssigneeCount\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"counts\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"mask\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"uint256\",\n name: \"resource\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"roleBitmap\",\n type: \"uint256\",\n },\n {\n internalType: \"address\",\n name: \"account\",\n type: \"address\",\n },\n ],\n name: \"grantRoles\",\n outputs: [\n {\n internalType: \"bool\",\n name: \"\",\n type: \"bool\",\n },\n ],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"uint256\",\n name: \"roleBitmap\",\n type: \"uint256\",\n },\n {\n internalType: \"address\",\n name: \"account\",\n type: \"address\",\n },\n ],\n name: \"grantRootRoles\",\n outputs: [\n {\n internalType: \"bool\",\n name: \"\",\n type: \"bool\",\n },\n ],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"uint256\",\n name: \"resource\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"roleBitmap\",\n type: \"uint256\",\n },\n ],\n name: \"hasAssignees\",\n outputs: [\n {\n internalType: \"bool\",\n name: \"\",\n type: \"bool\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"uint256\",\n name: \"resource\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"roleBitmap\",\n type: \"uint256\",\n },\n {\n internalType: \"address\",\n name: \"account\",\n type: \"address\",\n },\n ],\n name: \"hasRoles\",\n outputs: [\n {\n internalType: \"bool\",\n name: \"\",\n type: \"bool\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"uint256\",\n name: \"roleBitmap\",\n type: \"uint256\",\n },\n {\n internalType: \"address\",\n name: \"account\",\n type: \"address\",\n },\n ],\n name: \"hasRootRoles\",\n outputs: [\n {\n internalType: \"bool\",\n name: \"\",\n type: \"bool\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"string\",\n name: \"label\",\n type: \"string\",\n },\n ],\n name: \"isAvailable\",\n outputs: [\n {\n internalType: \"bool\",\n name: \"\",\n type: \"bool\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"contract IERC20\",\n name: \"paymentToken\",\n type: \"address\",\n },\n ],\n name: \"isPaymentToken\",\n outputs: [\n {\n internalType: \"bool\",\n name: \"\",\n type: \"bool\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"string\",\n name: \"label\",\n type: \"string\",\n },\n ],\n name: \"isValid\",\n outputs: [\n {\n internalType: \"bool\",\n name: \"\",\n type: \"bool\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"string\",\n name: \"label\",\n type: \"string\",\n },\n {\n internalType: \"address\",\n name: \"owner\",\n type: \"address\",\n },\n {\n internalType: \"bytes32\",\n name: \"secret\",\n type: \"bytes32\",\n },\n {\n internalType: \"contract IRegistry\",\n name: \"subregistry\",\n type: \"address\",\n },\n {\n internalType: \"address\",\n name: \"resolver\",\n type: \"address\",\n },\n {\n internalType: \"uint64\",\n name: \"duration\",\n type: \"uint64\",\n },\n {\n internalType: \"bytes32\",\n name: \"referrer\",\n type: \"bytes32\",\n },\n ],\n name: \"makeCommitment\",\n outputs: [\n {\n internalType: \"bytes32\",\n name: \"\",\n type: \"bytes32\",\n },\n ],\n stateMutability: \"pure\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"string\",\n name: \"label\",\n type: \"string\",\n },\n {\n internalType: \"address\",\n name: \"owner\",\n type: \"address\",\n },\n {\n internalType: \"bytes32\",\n name: \"secret\",\n type: \"bytes32\",\n },\n {\n internalType: \"contract IRegistry\",\n name: \"subregistry\",\n type: \"address\",\n },\n {\n internalType: \"address\",\n name: \"resolver\",\n type: \"address\",\n },\n {\n internalType: \"uint64\",\n name: \"duration\",\n type: \"uint64\",\n },\n {\n internalType: \"contract IERC20\",\n name: \"paymentToken\",\n type: \"address\",\n },\n {\n internalType: \"bytes32\",\n name: \"referrer\",\n type: \"bytes32\",\n },\n ],\n name: \"register\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"tokenId\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"string\",\n name: \"label\",\n type: \"string\",\n },\n {\n internalType: \"uint64\",\n name: \"duration\",\n type: \"uint64\",\n },\n {\n internalType: \"contract IERC20\",\n name: \"paymentToken\",\n type: \"address\",\n },\n {\n internalType: \"bytes32\",\n name: \"referrer\",\n type: \"bytes32\",\n },\n ],\n name: \"renew\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"string\",\n name: \"label\",\n type: \"string\",\n },\n {\n internalType: \"address\",\n name: \"owner\",\n type: \"address\",\n },\n {\n internalType: \"uint64\",\n name: \"duration\",\n type: \"uint64\",\n },\n {\n internalType: \"contract IERC20\",\n name: \"paymentToken\",\n type: \"address\",\n },\n ],\n name: \"rentPrice\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"base\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"premium\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"rentPriceOracle\",\n outputs: [\n {\n internalType: \"contract IRentPriceOracle\",\n name: \"\",\n type: \"address\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"uint256\",\n name: \"resource\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"roleBitmap\",\n type: \"uint256\",\n },\n {\n internalType: \"address\",\n name: \"account\",\n type: \"address\",\n },\n ],\n name: \"revokeRoles\",\n outputs: [\n {\n internalType: \"bool\",\n name: \"\",\n type: \"bool\",\n },\n ],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"uint256\",\n name: \"roleBitmap\",\n type: \"uint256\",\n },\n {\n internalType: \"address\",\n name: \"account\",\n type: \"address\",\n },\n ],\n name: \"revokeRootRoles\",\n outputs: [\n {\n internalType: \"bool\",\n name: \"\",\n type: \"bool\",\n },\n ],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"uint256\",\n name: \"resource\",\n type: \"uint256\",\n },\n ],\n name: \"roleCount\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"uint256\",\n name: \"resource\",\n type: \"uint256\",\n },\n {\n internalType: \"address\",\n name: \"account\",\n type: \"address\",\n },\n ],\n name: \"roles\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"contract IRentPriceOracle\",\n name: \"oracle\",\n type: \"address\",\n },\n ],\n name: \"setRentPriceOracle\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"bytes4\",\n name: \"interfaceId\",\n type: \"bytes4\",\n },\n ],\n name: \"supportsInterface\",\n outputs: [\n {\n internalType: \"bool\",\n name: \"\",\n type: \"bool\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n] as const satisfies Abi;\n","import type { Abi } from \"viem\";\n\nexport const Registry = [\n {\n anonymous: false,\n inputs: [\n {\n indexed: true,\n internalType: \"address\",\n name: \"account\",\n type: \"address\",\n },\n {\n indexed: true,\n internalType: \"address\",\n name: \"operator\",\n type: \"address\",\n },\n {\n indexed: false,\n internalType: \"bool\",\n name: \"approved\",\n type: \"bool\",\n },\n ],\n name: \"ApprovalForAll\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: true,\n internalType: \"uint256\",\n name: \"tokenId\",\n type: \"uint256\",\n },\n {\n indexed: false,\n internalType: \"uint64\",\n name: \"newExpiry\",\n type: \"uint64\",\n },\n {\n indexed: true,\n internalType: \"address\",\n name: \"sender\",\n type: \"address\",\n },\n ],\n name: \"ExpiryUpdated\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: true,\n internalType: \"uint256\",\n name: \"tokenId\",\n type: \"uint256\",\n },\n {\n indexed: true,\n internalType: \"bytes32\",\n name: \"labelHash\",\n type: \"bytes32\",\n },\n {\n indexed: false,\n internalType: \"string\",\n name: \"label\",\n type: \"string\",\n },\n {\n indexed: false,\n internalType: \"address\",\n name: \"owner\",\n type: \"address\",\n },\n {\n indexed: false,\n internalType: \"uint64\",\n name: \"expiry\",\n type: \"uint64\",\n },\n {\n indexed: true,\n internalType: \"address\",\n name: \"sender\",\n type: \"address\",\n },\n ],\n name: \"NameRegistered\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: true,\n internalType: \"uint256\",\n name: \"tokenId\",\n type: \"uint256\",\n },\n {\n indexed: true,\n internalType: \"bytes32\",\n name: \"labelHash\",\n type: \"bytes32\",\n },\n {\n indexed: false,\n internalType: \"string\",\n name: \"label\",\n type: \"string\",\n },\n {\n indexed: false,\n internalType: \"uint64\",\n name: \"expiry\",\n type: \"uint64\",\n },\n {\n indexed: true,\n internalType: \"address\",\n name: \"sender\",\n type: \"address\",\n },\n ],\n name: \"NameReserved\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: true,\n internalType: \"uint256\",\n name: \"tokenId\",\n type: \"uint256\",\n },\n {\n indexed: true,\n internalType: \"address\",\n name: \"sender\",\n type: \"address\",\n },\n ],\n name: \"NameUnregistered\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: true,\n internalType: \"contract IRegistry\",\n name: \"parent\",\n type: \"address\",\n },\n {\n indexed: false,\n internalType: \"string\",\n name: \"label\",\n type: \"string\",\n },\n {\n indexed: true,\n internalType: \"address\",\n name: \"sender\",\n type: \"address\",\n },\n ],\n name: \"ParentUpdated\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: true,\n internalType: \"uint256\",\n name: \"tokenId\",\n type: \"uint256\",\n },\n {\n indexed: false,\n internalType: \"address\",\n name: \"resolver\",\n type: \"address\",\n },\n {\n indexed: true,\n internalType: \"address\",\n name: \"sender\",\n type: \"address\",\n },\n ],\n name: \"ResolverUpdated\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: true,\n internalType: \"uint256\",\n name: \"tokenId\",\n type: \"uint256\",\n },\n {\n indexed: false,\n internalType: \"contract IRegistry\",\n name: \"subregistry\",\n type: \"address\",\n },\n {\n indexed: true,\n internalType: \"address\",\n name: \"sender\",\n type: \"address\",\n },\n ],\n name: \"SubregistryUpdated\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: true,\n internalType: \"uint256\",\n name: \"oldTokenId\",\n type: \"uint256\",\n },\n {\n indexed: true,\n internalType: \"uint256\",\n name: \"newTokenId\",\n type: \"uint256\",\n },\n ],\n name: \"TokenRegenerated\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: true,\n internalType: \"address\",\n name: \"operator\",\n type: \"address\",\n },\n {\n indexed: true,\n internalType: \"address\",\n name: \"from\",\n type: \"address\",\n },\n {\n indexed: true,\n internalType: \"address\",\n name: \"to\",\n type: \"address\",\n },\n {\n indexed: false,\n internalType: \"uint256[]\",\n name: \"ids\",\n type: \"uint256[]\",\n },\n {\n indexed: false,\n internalType: \"uint256[]\",\n name: \"values\",\n type: \"uint256[]\",\n },\n ],\n name: \"TransferBatch\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: true,\n internalType: \"address\",\n name: \"operator\",\n type: \"address\",\n },\n {\n indexed: true,\n internalType: \"address\",\n name: \"from\",\n type: \"address\",\n },\n {\n indexed: true,\n internalType: \"address\",\n name: \"to\",\n type: \"address\",\n },\n {\n indexed: false,\n internalType: \"uint256\",\n name: \"id\",\n type: \"uint256\",\n },\n {\n indexed: false,\n internalType: \"uint256\",\n name: \"value\",\n type: \"uint256\",\n },\n ],\n name: \"TransferSingle\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: false,\n internalType: \"string\",\n name: \"value\",\n type: \"string\",\n },\n {\n indexed: true,\n internalType: \"uint256\",\n name: \"id\",\n type: \"uint256\",\n },\n ],\n name: \"URI\",\n type: \"event\",\n },\n {\n inputs: [\n {\n internalType: \"address\",\n name: \"account\",\n type: \"address\",\n },\n {\n internalType: \"uint256\",\n name: \"id\",\n type: \"uint256\",\n },\n ],\n name: \"balanceOf\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"address[]\",\n name: \"accounts\",\n type: \"address[]\",\n },\n {\n internalType: \"uint256[]\",\n name: \"ids\",\n type: \"uint256[]\",\n },\n ],\n name: \"balanceOfBatch\",\n outputs: [\n {\n internalType: \"uint256[]\",\n name: \"\",\n type: \"uint256[]\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getParent\",\n outputs: [\n {\n internalType: \"contract IRegistry\",\n name: \"parent\",\n type: \"address\",\n },\n {\n internalType: \"string\",\n name: \"label\",\n type: \"string\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"string\",\n name: \"label\",\n type: \"string\",\n },\n ],\n name: \"getResolver\",\n outputs: [\n {\n internalType: \"address\",\n name: \"\",\n type: \"address\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"string\",\n name: \"label\",\n type: \"string\",\n },\n ],\n name: \"getSubregistry\",\n outputs: [\n {\n internalType: \"contract IRegistry\",\n name: \"\",\n type: \"address\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"address\",\n name: \"account\",\n type: \"address\",\n },\n {\n internalType: \"address\",\n name: \"operator\",\n type: \"address\",\n },\n ],\n name: \"isApprovedForAll\",\n outputs: [\n {\n internalType: \"bool\",\n name: \"\",\n type: \"bool\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"uint256\",\n name: \"id\",\n type: \"uint256\",\n },\n ],\n name: \"ownerOf\",\n outputs: [\n {\n internalType: \"address\",\n name: \"owner\",\n type: \"address\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"address\",\n name: \"from\",\n type: \"address\",\n },\n {\n internalType: \"address\",\n name: \"to\",\n type: \"address\",\n },\n {\n internalType: \"uint256[]\",\n name: \"ids\",\n type: \"uint256[]\",\n },\n {\n internalType: \"uint256[]\",\n name: \"values\",\n type: \"uint256[]\",\n },\n {\n internalType: \"bytes\",\n name: \"data\",\n type: \"bytes\",\n },\n ],\n name: \"safeBatchTransferFrom\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"address\",\n name: \"from\",\n type: \"address\",\n },\n {\n internalType: \"address\",\n name: \"to\",\n type: \"address\",\n },\n {\n internalType: \"uint256\",\n name: \"id\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"value\",\n type: \"uint256\",\n },\n {\n internalType: \"bytes\",\n name: \"data\",\n type: \"bytes\",\n },\n ],\n name: \"safeTransferFrom\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"address\",\n name: \"operator\",\n type: \"address\",\n },\n {\n internalType: \"bool\",\n name: \"approved\",\n type: \"bool\",\n },\n ],\n name: \"setApprovalForAll\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"bytes4\",\n name: \"interfaceId\",\n type: \"bytes4\",\n },\n ],\n name: \"supportsInterface\",\n outputs: [\n {\n internalType: \"bool\",\n name: \"\",\n type: \"bool\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n] as const satisfies Abi;\n","import type { Abi } from \"viem\";\n\nexport const StandaloneReverseRegistrar = [\n {\n anonymous: false,\n inputs: [\n {\n indexed: true,\n internalType: \"address\",\n name: \"addr\",\n type: \"address\",\n },\n {\n indexed: false,\n internalType: \"string\",\n name: \"name\",\n type: \"string\",\n },\n ],\n name: \"NameForAddrChanged\",\n type: \"event\",\n },\n {\n inputs: [\n {\n internalType: \"address\",\n name: \"addr\",\n type: \"address\",\n },\n ],\n name: \"nameForAddr\",\n outputs: [\n {\n internalType: \"string\",\n name: \"name\",\n type: \"string\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"bytes4\",\n name: \"interfaceID\",\n type: \"bytes4\",\n },\n ],\n name: \"supportsInterface\",\n outputs: [\n {\n internalType: \"bool\",\n name: \"\",\n type: \"bool\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n] as const satisfies Abi;\n","import {\n type Address,\n type Hex,\n type LogTopic,\n type RpcError,\n hexToBigInt,\n numberToHex,\n} from \"viem\";\n\nexport type GetLogsRetryHelperParameters = {\n error: RpcError;\n params: [\n {\n address?: Address | Address[];\n topics?: LogTopic[];\n fromBlock: Hex;\n toBlock: Hex;\n },\n ];\n};\n\nexport type GetLogsRetryHelperReturnType =\n | {\n shouldRetry: true;\n /** `true` if the error message suggested to use this range on retry. */\n isSuggestedRange: boolean;\n /** Suggested values to use for (fromBlock, toBlock) in follow-up eth_getLogs requests. */\n ranges: { fromBlock: Hex; toBlock: Hex }[];\n }\n | {\n shouldRetry: false;\n /** Suggested values to use for (fromBlock, toBlock) in follow-up eth_getLogs requests. */\n ranges?: never;\n };\n\nexport const getLogsRetryHelper = ({\n params,\n error,\n}: GetLogsRetryHelperParameters): GetLogsRetryHelperReturnType => {\n const sError = JSON.stringify(error);\n let match: RegExpMatchArray | null;\n\n // avalanche\n match = sError.match(\n /requested too many blocks from (\\d+) to (\\d+), maximum is set to (\\d+)/,\n );\n if (match !== null) {\n const ranges = chunk({ params, range: BigInt(match[3]!) - 1n });\n\n if (isRangeUnchanged(params, ranges) === false) {\n return {\n shouldRetry: true,\n ranges,\n isSuggestedRange: true,\n } as const;\n }\n }\n\n // Cloudflare\n match = sError.match(/Max range: (\\d+)/);\n if (match !== null) {\n const ranges = chunk({ params, range: BigInt(match[1]!) - 1n });\n\n if (isRangeUnchanged(params, ranges) === false) {\n return {\n shouldRetry: true,\n ranges,\n isSuggestedRange: true,\n } as const;\n }\n }\n\n // thirdweb\n match = sError.match(/Maximum allowed number of requested blocks is ([\\d]+)/);\n if (match !== null) {\n const ranges = chunk({\n params,\n range: BigInt(match[1]!),\n });\n\n if (isRangeUnchanged(params, ranges) === false) {\n return {\n shouldRetry: true,\n ranges,\n isSuggestedRange: true,\n } as const;\n }\n }\n\n // infura, zksync\n match = sError.match(\n /Try with this block range \\[0x([0-9a-fA-F]+),\\s*0x([0-9a-fA-F]+)\\]/,\n )!;\n if (match !== null) {\n const start = hexToBigInt(`0x${match[1]}`);\n const end = hexToBigInt(`0x${match[2]}`);\n const range = end - start;\n\n const ranges = chunk({ params, range });\n\n if (isRangeUnchanged(params, ranges) === false) {\n return {\n shouldRetry: true,\n ranges,\n isSuggestedRange: true,\n } as const;\n }\n }\n\n // ankr\n match = sError.match(\"block range is too wide\");\n if (match !== null && error.code === -32600) {\n const ranges = chunk({ params, range: 3000n });\n\n if (isRangeUnchanged(params, ranges) === false) {\n return {\n shouldRetry: true,\n ranges,\n isSuggestedRange: true,\n } as const;\n }\n }\n\n // alchemy\n match = sError.match(\n /this block range should work: \\[0x([0-9a-fA-F]+),\\s*0x([0-9a-fA-F]+)\\]/,\n );\n if (match !== null) {\n const start = hexToBigInt(`0x${match[1]}`);\n const end = hexToBigInt(`0x${match[2]}`);\n const range = end - start;\n\n const ranges = chunk({ params, range });\n\n if (isRangeUnchanged(params, ranges) === false) {\n return {\n shouldRetry: true,\n ranges,\n isSuggestedRange: true,\n } as const;\n }\n }\n\n // quicknode, 1rpc, blast\n match = sError.match(/limited to a ([\\d,.]+)/);\n if (match !== null) {\n const ranges = chunk({\n params,\n range: BigInt(match[1]!.replace(/[,.]/g, \"\")),\n });\n\n if (isRangeUnchanged(params, ranges) === false) {\n return {\n shouldRetry: true,\n ranges,\n isSuggestedRange: true,\n } as const;\n }\n }\n\n // blockpi\n match = sError.match(/limited to ([\\d,.]+) block/);\n if (match !== null) {\n const ranges = chunk({\n params,\n range: BigInt(match[1]!.replace(/[,.]/g, \"\")),\n });\n\n if (isRangeUnchanged(params, ranges) === false) {\n return {\n shouldRetry: true,\n ranges,\n isSuggestedRange: true,\n } as const;\n }\n }\n\n // blast (paid)\n match = sError.match(\n /exceeds the range allowed for your plan \\(\\d+ > (\\d+)\\)/,\n );\n if (match !== null) {\n const ranges = chunk({ params, range: BigInt(match[1]!) });\n\n if (isRangeUnchanged(params, ranges) === false) {\n return {\n shouldRetry: true,\n ranges,\n isSuggestedRange: true,\n } as const;\n }\n }\n\n // chainstack\n match = sError.match(/Block range limit exceeded./);\n if (match !== null) {\n const prevRange =\n hexToBigInt(params[0].toBlock) - hexToBigInt(params[0].fromBlock);\n\n // chainstack has different limits for free and paid plans.\n const ranges =\n prevRange < 10_000n\n ? chunk({ params, range: 100n })\n : chunk({ params, range: 10_000n });\n\n if (isRangeUnchanged(params, ranges) === false) {\n return {\n shouldRetry: true,\n ranges,\n isSuggestedRange: true,\n } as const;\n }\n }\n\n // coinbase\n match = sError.match(/please limit the query to at most ([\\d,.]+) blocks/);\n if (match !== null) {\n const ranges = chunk({\n params,\n range: BigInt(match[1]!.replace(/[,.]/g, \"\")) - 1n,\n });\n\n if (isRangeUnchanged(params, ranges) === false) {\n return {\n shouldRetry: true,\n ranges,\n isSuggestedRange: true,\n } as const;\n }\n }\n\n // publicnode\n match = sError.match(/maximum block range: ([\\d,.]+)/);\n if (match !== null) {\n const ranges = chunk({\n params,\n range: BigInt(match[1]!.replace(/[,.]/g, \"\")),\n });\n\n if (isRangeUnchanged(params, ranges) === false) {\n return {\n shouldRetry: true,\n ranges,\n isSuggestedRange: true,\n } as const;\n }\n }\n\n // hyperliquid\n match = sError.match(/query exceeds max block range ([\\d,.]+)/);\n if (match !== null) {\n const ranges = chunk({\n params,\n range: BigInt(match[1]!.replace(/[,.]/g, \"\")),\n });\n\n if (isRangeUnchanged(params, ranges) === false) {\n return {\n shouldRetry: true,\n ranges,\n isSuggestedRange: true,\n } as const;\n }\n }\n\n // swell\n match = sError.match(/block range greater than ([\\d,.]+) max/);\n if (match !== null) {\n const ranges = chunk({\n params,\n range: BigInt(match[1]!.replace(/[,.]/g, \"\")),\n });\n\n if (isRangeUnchanged(params, ranges) === false) {\n return {\n shouldRetry: true,\n ranges,\n isSuggestedRange: true,\n } as const;\n }\n }\n\n // somnia\n match = sError.match(/block range exceeds ([\\d,.]+)/);\n if (match !== null) {\n const ranges = chunk({\n params,\n range: BigInt(match[1]!.replace(/[,.]/g, \"\")),\n });\n\n if (isRangeUnchanged(params, ranges) === false) {\n return {\n shouldRetry: true,\n ranges,\n isSuggestedRange: true,\n } as const;\n }\n }\n\n // merkle 10k\n match = sError.match(/eth_getLogs range is too large, max is 10k blocks/);\n if (match !== null) {\n const ranges = chunk({\n params,\n range: 10_000n,\n });\n\n if (isRangeUnchanged(params, ranges) === false) {\n return {\n shouldRetry: true,\n ranges,\n isSuggestedRange: true,\n } as const;\n }\n }\n\n // merkle 1k\n match = sError.match(/eth_getLogs range is too large, max is 1k blocks/);\n if (match !== null) {\n const ranges = chunk({\n params,\n range: 1_000n,\n });\n\n if (isRangeUnchanged(params, ranges) === false) {\n return {\n shouldRetry: true,\n ranges,\n isSuggestedRange: true,\n } as const;\n }\n }\n\n // harmony\n match = sError.match(/query must be smaller than size ([\\d,.]+)/);\n if (match !== null) {\n const ranges = chunk({\n params,\n range: BigInt(match[1]!.replace(/[,.]/g, \"\")),\n });\n\n if (isRangeUnchanged(params, ranges) === false) {\n return {\n shouldRetry: true,\n ranges,\n isSuggestedRange: true,\n } as const;\n }\n }\n\n // moonriver\n match = sError.match(/block range is too wide \\(maximum (\\d+)\\)/);\n if (match !== null) {\n const ranges = chunk({\n params,\n range: BigInt(match[1]!.replace(/[,.]/g, \"\")),\n });\n\n if (isRangeUnchanged(params, ranges) === false) {\n return {\n shouldRetry: true,\n ranges,\n isSuggestedRange: true,\n } as const;\n }\n }\n\n // aurora\n match = sError.match(/up to a ([\\d,.]+) block range/);\n if (match !== null) {\n const ranges = chunk({\n params,\n range: BigInt(match[1]!.replace(/[,.]/g, \"\")),\n });\n\n if (isRangeUnchanged(params, ranges) === false) {\n return {\n shouldRetry: true,\n ranges,\n isSuggestedRange: true,\n } as const;\n }\n }\n\n // ankr (tac)\n match = sError.match(/maximum \\[from, to\\] blocks distance: (\\d+)/);\n if (match !== null) {\n const ranges = chunk({\n params,\n range: BigInt(match[1]!),\n });\n\n if (isRangeUnchanged(params, ranges) === false) {\n return {\n shouldRetry: true,\n ranges,\n isSuggestedRange: true,\n } as const;\n }\n }\n\n // tron\n match = sError.match(/exceed max block range: (\\d+)/);\n if (match !== null) {\n const ranges = chunk({ params, range: BigInt(match[1]!) - 1n });\n if (isRangeUnchanged(params, ranges) === false) {\n return {\n shouldRetry: true,\n ranges,\n isSuggestedRange: true,\n };\n }\n }\n\n // catch-all\n if (\n // valtitude\n sError.includes(\"allowed block range threshold exceeded\") ||\n // erpc\n sError.includes(\"exceeded max allowed\") ||\n // erpc\n sError.includes(\"range threshold exceeded\") ||\n // base\n sError.includes(\"no backend is currently healthy to serve traffic\") ||\n // base, monad\n sError.includes(\"block range too large\") ||\n // optimism\n sError.includes(\"Block range is too large\") ||\n // optimism\n sError.includes(\"backend response too large\") ||\n // llamarpc, ankr, altitude\n sError.includes(\"query exceeds max results\") ||\n // arbitrum\n /logs matched by query exceeds limit of \\d+/.test(sError) ||\n // zkevm\n /query returned more than \\d+ results/.test(sError) ||\n // 1rpc\n /response size should not greater than \\d+ bytes/.test(sError)\n ) {\n const ranges = chunk({\n params,\n range:\n (hexToBigInt(params[0].toBlock) - hexToBigInt(params[0].fromBlock)) /\n 2n,\n });\n\n if (isRangeUnchanged(params, ranges) === false) {\n return {\n ranges,\n shouldRetry: true,\n isSuggestedRange: false,\n } as const;\n }\n }\n\n // No match found\n return { shouldRetry: false } as const;\n};\n\nconst isRangeUnchanged = (\n params: GetLogsRetryHelperParameters[\"params\"],\n ranges: Extract<\n GetLogsRetryHelperReturnType,\n { shouldRetry: true }\n >[\"ranges\"],\n) => {\n return (\n ranges.length === 0 ||\n (ranges.length === 1 &&\n ranges[0]!.fromBlock === params[0].fromBlock &&\n ranges[0]!.toBlock === params[0].toBlock)\n );\n};\n\nconst chunk = ({\n params,\n range,\n}: { params: GetLogsRetryHelperParameters[\"params\"]; range: bigint }) => {\n const ranges: { fromBlock: Hex; toBlock: Hex }[] = [];\n\n const fromBlock = hexToBigInt(params[0].fromBlock);\n const toBlock = hexToBigInt(params[0].toBlock);\n\n for (let start = fromBlock; start <= toBlock; start += range + 1n) {\n const end = start + range > toBlock ? toBlock : start + range;\n\n ranges.push({\n fromBlock: numberToHex(start),\n toBlock: numberToHex(end),\n });\n }\n\n return ranges;\n};\n","import type { Abi, AbiItem } from \"viem\";\nimport { formatAbiItem } from \"viem/utils\";\n\ntype MergeAbi<\n TBase extends Abi,\n TInsert extends Abi,\n> = TInsert extends readonly [\n infer First extends AbiItem,\n ...infer Rest extends Abi,\n]\n ? Extract<TBase[number], First> extends never\n ? First[\"type\"] extends \"constructor\" | \"receive\" | \"fallback\"\n ? MergeAbi<TBase, Rest>\n : MergeAbi<readonly [...TBase, First], Rest>\n : MergeAbi<TBase, Rest>\n : TBase;\n\nexport type MergeAbis<\n TAbis extends readonly Abi[],\n TMerged extends Abi = [],\n> = TAbis extends readonly [\n infer First extends Abi,\n ...infer Rest extends readonly Abi[],\n]\n ? MergeAbis<Rest, MergeAbi<TMerged, First>>\n : TMerged;\n\nconst isAbiItemEqual = (a: AbiItem, b: AbiItem): boolean =>\n formatAbiItem(a) === formatAbiItem(b);\n\n/**\n * Combine multiple ABIs into one, removing duplicates if necessary.\n */\nexport const mergeAbis = <const TAbis extends readonly Abi[]>(abis: TAbis) => {\n let merged: Abi = [];\n\n for (const abi of abis) {\n for (const item of abi) {\n // Don't add a duplicate items\n // if item is constructor, receive, fallback, or already in merged, don't add it\n if (\n item.type !== \"constructor\" &&\n item.type !== \"receive\" &&\n item.type !== \"fallback\" &&\n !merged.some((m) => isAbiItemEqual(m, item))\n ) {\n merged = [...merged, item];\n }\n }\n }\n\n return merged as MergeAbis<TAbis>;\n};\n","import { type Transport, type TransportConfig, createTransport } from \"viem\";\n\n/**\n * @description Creates a load balanced transport that spreads requests between child transports using a round robin algorithm.\n */\nexport const loadBalance = (_transports: Transport[]): Transport => {\n return ({ chain, retryCount, timeout }) => {\n const transports = _transports.map((t) =>\n chain === undefined\n ? t({ retryCount: 0, timeout })\n : t({ chain, retryCount: 0, timeout }),\n );\n\n let index = 0;\n\n return createTransport({\n key: \"loadBalance\",\n name: \"Load Balance\",\n request: (body) => {\n const response = transports[index++]!.request(body);\n if (index === transports.length) index = 0;\n\n return response;\n },\n retryCount,\n timeout,\n type: \"loadBalance\",\n } as TransportConfig);\n };\n};\n","import { type Transport, type TransportConfig, createTransport } from \"viem\";\nimport { createQueue } from \"./utils/queue.js\";\n\n/**\n * @description Creates a rate limited transport that throttles request throughput.\n */\nexport const rateLimit = (\n _transport: Transport,\n {\n requestsPerSecond,\n browser = true,\n }: { requestsPerSecond: number; browser?: boolean },\n): Transport => {\n return ({ chain, retryCount, timeout }) => {\n const transport =\n chain === undefined\n ? _transport({ retryCount: 0, timeout })\n : _transport({ chain, retryCount: 0, timeout });\n\n const queue = createQueue({\n frequency: requestsPerSecond,\n concurrency: Math.ceil(requestsPerSecond / 4),\n initialStart: true,\n browser,\n worker: (body: {\n method: string;\n params?: unknown;\n }) => {\n return transport.request(body);\n },\n });\n\n return createTransport({\n key: \"rateLimit\",\n name: \"Rate Limit\",\n request: (body) => {\n return queue.add(body);\n },\n retryCount,\n type: \"rateLimit\",\n } as TransportConfig);\n };\n};\n","export type PromiseWithResolvers<TPromise> = {\n resolve: (arg: TPromise) => void;\n reject: (error: Error) => void;\n promise: Promise<TPromise>;\n};\n\n/**\n * @description Application level polyfill.\n */\nexport const promiseWithResolvers = <\n TPromise,\n>(): PromiseWithResolvers<TPromise> => {\n let resolve: (arg: TPromise) => void;\n let reject: (error: Error) => void;\n const promise = new Promise<TPromise>((_resolve, _reject) => {\n resolve = _resolve;\n reject = _reject;\n });\n return { resolve: resolve!, reject: reject!, promise };\n};\n","import {\n type PromiseWithResolvers,\n promiseWithResolvers,\n} from \"./promiseWithResolvers.js\";\n\nexport type InnerQueue<returnType, taskType> = {\n task: taskType;\n resolve: (arg: returnType) => void;\n reject: (error: Error) => void;\n}[];\n\nexport type Queue<returnType, taskType> = {\n size: () => number;\n pending: () => Promise<number>;\n add: (task: taskType) => Promise<returnType>;\n clear: () => void;\n isStarted: () => boolean;\n start: () => Promise<void>;\n pause: () => void;\n onIdle: () => Promise<void>;\n onEmpty: () => Promise<void>;\n setParameters: (\n parameters: Pick<\n CreateQueueParameters<unknown, unknown>,\n \"frequency\" | \"concurrency\"\n >,\n ) => void;\n};\n\nexport type CreateQueueParameters<returnType, taskType> = {\n worker: (task: taskType) => Promise<returnType>;\n initialStart?: boolean;\n browser?: boolean;\n} & (\n | {\n concurrency: number;\n frequency: number;\n }\n | { concurrency: number; frequency?: undefined }\n | { concurrency?: undefined; frequency: number }\n);\n\nconst validateParameters = ({\n concurrency,\n frequency,\n}: Pick<\n CreateQueueParameters<unknown, unknown>,\n \"frequency\" | \"concurrency\"\n>) => {\n if (concurrency === undefined && frequency === undefined) {\n throw new Error(\n \"Invalid queue configuration, must specify either 'concurrency' or 'frequency'.\",\n );\n }\n\n if (concurrency !== undefined && concurrency <= 0) {\n throw new Error(\n `Invalid value for queue 'concurrency' option. Got ${concurrency}, expected a number greater than zero.`,\n );\n }\n\n if (frequency !== undefined && frequency <= 0) {\n throw new Error(\n `Invalid value for queue 'frequency' option. Got ${frequency}, expected a number greater than zero.`,\n );\n }\n};\n\nexport const createQueue = <returnType, taskType = void>({\n worker,\n initialStart = false,\n browser = true,\n ..._parameters\n}: CreateQueueParameters<returnType, taskType>): Queue<\n returnType,\n taskType\n> => {\n validateParameters(_parameters);\n\n const parameters: Pick<\n CreateQueueParameters<unknown, unknown>,\n \"frequency\" | \"concurrency\"\n > = _parameters;\n let queue = new Array<InnerQueue<returnType, taskType>[number]>();\n let pending = 0;\n let timestamp = 0;\n let requests = 0;\n let isStarted = initialStart;\n\n let timer: NodeJS.Timeout | undefined;\n\n let emptyPromiseWithResolvers:\n | (PromiseWithResolvers<void> & { completed: boolean })\n | undefined = undefined;\n let idlePromiseWithResolvers:\n | (PromiseWithResolvers<void> & { completed: boolean })\n | undefined = undefined;\n\n const next = () => {\n if (!isStarted) return;\n\n const _timestamp = Date.now();\n\n if (Math.floor(_timestamp / 1_000) !== timestamp) {\n requests = 0;\n timestamp = Math.floor(_timestamp / 1_000);\n }\n\n if (timer) return;\n\n while (\n (parameters.frequency !== undefined\n ? requests < parameters.frequency\n : true) &&\n (parameters.concurrency !== undefined\n ? pending < parameters.concurrency\n : true) &&\n queue.length > 0\n ) {\n const { task, resolve, reject } = queue.shift()!;\n\n requests++;\n pending++;\n\n worker(task)\n .then(resolve)\n .catch(reject)\n .finally(() => {\n pending--;\n\n if (\n idlePromiseWithResolvers !== undefined &&\n queue.length === 0 &&\n pending === 0\n ) {\n idlePromiseWithResolvers.resolve();\n idlePromiseWithResolvers.completed = true;\n }\n\n browser ? next() : process.nextTick(next);\n });\n\n if (emptyPromiseWithResolvers !== undefined && queue.length === 0) {\n emptyPromiseWithResolvers.resolve();\n emptyPromiseWithResolvers.completed = true;\n }\n }\n\n if (\n parameters.frequency !== undefined &&\n requests >= parameters.frequency\n ) {\n timer = setTimeout(\n () => {\n timer = undefined;\n next();\n },\n 1_000 - (_timestamp % 1_000),\n );\n return;\n }\n };\n\n return {\n size: () => queue.length,\n pending: () => {\n if (browser) {\n return new Promise<number>((resolve) =>\n setTimeout(() => resolve(pending)),\n );\n } else {\n return new Promise<number>((resolve) =>\n setImmediate(() => resolve(pending)),\n );\n }\n },\n add: (task: taskType) => {\n const { promise, resolve, reject } = promiseWithResolvers<returnType>();\n queue.push({ task, resolve, reject });\n\n next();\n\n return promise.catch((error) => {\n Error.captureStackTrace(error);\n throw error;\n });\n },\n clear: () => {\n queue = new Array<InnerQueue<returnType, taskType>[number]>();\n clearTimeout(timer);\n timer = undefined;\n },\n isStarted: () => isStarted,\n start: () => {\n if (browser) {\n return new Promise<number>((resolve) =>\n setTimeout(() => resolve(pending)),\n ).then(() => {\n isStarted = true;\n next();\n });\n } else {\n return new Promise<number>((resolve) =>\n process.nextTick(() => resolve(pending)),\n ).then(() => {\n isStarted = true;\n next();\n });\n }\n },\n pause: () => {\n isStarted = false;\n },\n onIdle: () => {\n if (\n idlePromiseWithResolvers === undefined ||\n idlePromiseWithResolvers.completed\n ) {\n if (queue.length === 0 && pending === 0) return Promise.resolve();\n\n idlePromiseWithResolvers = {\n ...promiseWithResolvers<void>(),\n completed: false,\n };\n }\n return idlePromiseWithResolvers.promise;\n },\n onEmpty: () => {\n if (\n emptyPromiseWithResolvers === undefined ||\n emptyPromiseWithResolvers.completed\n ) {\n if (queue.length === 0) return Promise.resolve();\n\n emptyPromiseWithResolvers = {\n ...promiseWithResolvers<void>(),\n completed: false,\n };\n }\n return emptyPromiseWithResolvers.promise;\n },\n setParameters: (_parameters) => {\n validateParameters(_parameters);\n\n if (\"frequency\" in _parameters) {\n parameters.frequency = _parameters.frequency;\n }\n if (\"concurrency\" in _parameters) {\n parameters.concurrency = _parameters.concurrency;\n }\n },\n } as Queue<returnType, taskType>;\n};\n","type _ReplaceBigInts<\n arr extends readonly unknown[],\n type,\n result extends readonly unknown[] = [],\n> = arr extends [infer first, ...infer rest]\n ? _ReplaceBigInts<\n rest,\n type,\n readonly [...result, first extends bigint ? type : first]\n >\n : result;\n\nexport type ReplaceBigInts<obj, type> = obj extends bigint\n ? type\n : obj extends unknown[]\n ? _ReplaceBigInts<Readonly<obj>, type>\n : obj extends readonly []\n ? _ReplaceBigInts<obj, type>\n : obj extends object\n ? { [key in keyof obj]: ReplaceBigInts<obj[key], type> }\n : obj;\n\nexport const replaceBigInts = <const T, const type>(\n obj: T,\n replacer: (x: bigint) => type,\n): ReplaceBigInts<T, type> => {\n if (typeof obj === \"bigint\") return replacer(obj) as ReplaceBigInts<T, type>;\n if (Array.isArray(obj))\n return obj.map((x) => replaceBigInts(x, replacer)) as ReplaceBigInts<\n T,\n type\n >;\n if (obj && typeof obj === \"object\")\n return Object.fromEntries(\n Object.entries(obj).map(([k, v]) => [k, replaceBigInts(v, replacer)]),\n ) as ReplaceBigInts<T, type>;\n return obj as ReplaceBigInts<T, type>;\n};\n","import type { Abi } from \"viem\";\n\nexport const UniversalResolverV2 = [\n {\n inputs: [\n {\n internalType: \"contract IRegistry\",\n name: \"root\",\n type: \"address\",\n },\n {\n internalType: \"contract IGatewayProvider\",\n name: \"batchGatewayProvider\",\n type: \"address\",\n },\n ],\n stateMutability: \"nonpayable\",\n type: \"constructor\",\n },\n {\n inputs: [\n {\n internalType: \"bytes\",\n name: \"dns\",\n type: \"bytes\",\n },\n ],\n name: \"DNSDecodingFailed\",\n type: \"error\",\n },\n {\n inputs: [\n {\n internalType: \"string\",\n name: \"ens\",\n type: \"string\",\n },\n ],\n name: \"DNSEncodingFailed\",\n type: \"error\",\n },\n {\n inputs: [],\n name: \"EmptyAddress\",\n type: \"error\",\n },\n {\n inputs: [\n {\n internalType: \"uint16\",\n name: \"status\",\n type: \"uint16\",\n },\n {\n internalType: \"string\",\n name: \"message\",\n type: \"string\",\n },\n ],\n name: \"HttpError\",\n type: \"error\",\n },\n {\n inputs: [],\n name: \"InvalidBatchGatewayResponse\",\n type: \"error\",\n },\n {\n inputs: [],\n name: \"LabelIsEmpty\",\n type: \"error\",\n },\n {\n inputs: [\n {\n internalType: \"string\",\n name: \"label\",\n type: \"string\",\n },\n ],\n name: \"LabelIsTooLong\",\n type: \"error\",\n },\n {\n inputs: [\n {\n internalType: \"address\",\n name: \"sender\",\n type: \"address\",\n },\n {\n internalType: \"string[]\",\n name: \"urls\",\n type: \"string[]\",\n },\n {\n internalType: \"bytes\",\n name: \"callData\",\n type: \"bytes\",\n },\n {\n internalType: \"bytes4\",\n name: \"callbackFunction\",\n type: \"bytes4\",\n },\n {\n internalType: \"bytes\",\n name: \"extraData\",\n type: \"bytes\",\n },\n ],\n name: \"OffchainLookup\",\n type: \"error\",\n },\n {\n inputs: [\n {\n internalType: \"uint256\",\n name: \"offset\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"length\",\n type: \"uint256\",\n },\n ],\n name: \"OffsetOutOfBoundsError\",\n type: \"error\",\n },\n {\n inputs: [\n {\n internalType: \"bytes\",\n name: \"errorData\",\n type: \"bytes\",\n },\n ],\n name: \"ResolverError\",\n type: \"error\",\n },\n {\n inputs: [\n {\n internalType: \"bytes\",\n name: \"name\",\n type: \"bytes\",\n },\n {\n internalType: \"address\",\n name: \"resolver\",\n type: \"address\",\n },\n ],\n name: \"ResolverNotContract\",\n type: \"error\",\n },\n {\n inputs: [\n {\n internalType: \"bytes\",\n name: \"name\",\n type: \"bytes\",\n },\n ],\n name: \"ResolverNotFound\",\n type: \"error\",\n },\n {\n inputs: [\n {\n internalType: \"string\",\n name: \"primary\",\n type: \"string\",\n },\n {\n internalType: \"bytes\",\n name: \"primaryAddress\",\n type: \"bytes\",\n },\n ],\n name: \"ReverseAddressMismatch\",\n type: \"error\",\n },\n {\n inputs: [\n {\n internalType: \"bytes4\",\n name: \"selector\",\n type: \"bytes4\",\n },\n ],\n name: \"UnsupportedResolverProfile\",\n type: \"error\",\n },\n {\n inputs: [],\n name: \"ROOT_REGISTRY\",\n outputs: [\n {\n internalType: \"contract IRegistry\",\n name: \"\",\n type: \"address\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"batchGatewayProvider\",\n outputs: [\n {\n internalType: \"contract IGatewayProvider\",\n name: \"\",\n type: \"address\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n components: [\n {\n components: [\n {\n internalType: \"address\",\n name: \"target\",\n type: \"address\",\n },\n {\n internalType: \"bytes\",\n name: \"call\",\n type: \"bytes\",\n },\n {\n internalType: \"bytes\",\n name: \"data\",\n type: \"bytes\",\n },\n {\n internalType: \"uint256\",\n name: \"flags\",\n type: \"uint256\",\n },\n ],\n internalType: \"struct CCIPBatcher.Lookup[]\",\n name: \"lookups\",\n type: \"tuple[]\",\n },\n {\n internalType: \"string[]\",\n name: \"gateways\",\n type: \"string[]\",\n },\n ],\n internalType: \"struct CCIPBatcher.Batch\",\n name: \"batch\",\n type: \"tuple\",\n },\n ],\n name: \"ccipBatch\",\n outputs: [\n {\n components: [\n {\n components: [\n {\n internalType: \"address\",\n name: \"target\",\n type: \"address\",\n },\n {\n internalType: \"bytes\",\n name: \"call\",\n type: \"bytes\",\n },\n {\n internalType: \"bytes\",\n name: \"data\",\n type: \"bytes\",\n },\n {\n internalType: \"uint256\",\n name: \"flags\",\n type: \"uint256\",\n },\n ],\n internalType: \"struct CCIPBatcher.Lookup[]\",\n name: \"lookups\",\n type: \"tuple[]\",\n },\n {\n internalType: \"string[]\",\n name: \"gateways\",\n type: \"string[]\",\n },\n ],\n internalType: \"struct CCIPBatcher.Batch\",\n name: \"\",\n type: \"tuple\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"bytes\",\n name: \"response\",\n type: \"bytes\",\n },\n {\n internalType: \"bytes\",\n name: \"extraData\",\n type: \"bytes\",\n },\n ],\n name: \"ccipBatchCallback\",\n outputs: [\n {\n components: [\n {\n components: [\n {\n internalType: \"address\",\n name: \"target\",\n type: \"address\",\n },\n {\n internalType: \"bytes\",\n name: \"call\",\n type: \"bytes\",\n },\n {\n internalType: \"bytes\",\n name: \"data\",\n type: \"bytes\",\n },\n {\n internalType: \"uint256\",\n name: \"flags\",\n type: \"uint256\",\n },\n ],\n internalType: \"struct CCIPBatcher.Lookup[]\",\n name: \"lookups\",\n type: \"tuple[]\",\n },\n {\n internalType: \"string[]\",\n name: \"gateways\",\n type: \"string[]\",\n },\n ],\n internalType: \"struct CCIPBatcher.Batch\",\n name: \"batch\",\n type: \"tuple\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"bytes\",\n name: \"response\",\n type: \"bytes\",\n },\n {\n internalType: \"bytes\",\n name: \"extraData\",\n type: \"bytes\",\n },\n ],\n name: \"ccipReadCallback\",\n outputs: [],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"contract IRegistry\",\n name: \"registry\",\n type: \"address\",\n },\n ],\n name: \"findCanonicalName\",\n outputs: [\n {\n internalType: \"bytes\",\n name: \"\",\n type: \"bytes\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"bytes\",\n name: \"name\",\n type: \"bytes\",\n },\n ],\n name: \"findCanonicalRegistry\",\n outputs: [\n {\n internalType: \"contract IRegistry\",\n name: \"\",\n type: \"address\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"bytes\",\n name: \"name\",\n type: \"bytes\",\n },\n ],\n name: \"findRegistries\",\n outputs: [\n {\n internalType: \"contract IRegistry[]\",\n name: \"\",\n type: \"address[]\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"bytes\",\n name: \"name\",\n type: \"bytes\",\n },\n ],\n name: \"findResolver\",\n outputs: [\n {\n internalType: \"address\",\n name: \"resolver\",\n type: \"address\",\n },\n {\n internalType: \"bytes32\",\n name: \"node\",\n type: \"bytes32\",\n },\n {\n internalType: \"uint256\",\n name: \"offset\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"bytes\",\n name: \"name\",\n type: \"bytes\",\n },\n ],\n name: \"requireResolver\",\n outputs: [\n {\n components: [\n {\n internalType: \"bytes\",\n name: \"name\",\n type: \"bytes\",\n },\n {\n internalType: \"uint256\",\n name: \"offset\",\n type: \"uint256\",\n },\n {\n internalType: \"bytes32\",\n name: \"node\",\n type: \"bytes32\",\n },\n {\n internalType: \"address\",\n name: \"resolver\",\n type: \"address\",\n },\n {\n internalType: \"bool\",\n name: \"extended\",\n type: \"bool\",\n },\n ],\n internalType: \"struct AbstractUniversalResolver.ResolverInfo\",\n name: \"info\",\n type: \"tuple\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"bytes\",\n name: \"name\",\n type: \"bytes\",\n },\n {\n internalType: \"bytes\",\n name: \"data\",\n type: \"bytes\",\n },\n ],\n name: \"resolve\",\n outputs: [\n {\n internalType: \"bytes\",\n name: \"\",\n type: \"bytes\",\n },\n {\n internalType: \"address\",\n name: \"\",\n type: \"address\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"bytes\",\n name: \"response\",\n type: \"bytes\",\n },\n {\n internalType: \"bytes\",\n name: \"extraData\",\n type: \"bytes\",\n },\n ],\n name: \"resolveBatchCallback\",\n outputs: [],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"bytes\",\n name: \"response\",\n type: \"bytes\",\n },\n {\n internalType: \"bytes\",\n name: \"extraData\",\n type: \"bytes\",\n },\n ],\n name: \"resolveCallback\",\n outputs: [\n {\n internalType: \"bytes\",\n name: \"\",\n type: \"bytes\",\n },\n {\n internalType: \"address\",\n name: \"\",\n type: \"address\",\n },\n ],\n stateMutability: \"pure\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"bytes\",\n name: \"response\",\n type: \"bytes\",\n },\n {\n internalType: \"bytes\",\n name: \"extraData\",\n type: \"bytes\",\n },\n ],\n name: \"resolveDirectCallback\",\n outputs: [],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"bytes\",\n name: \"response\",\n type: \"bytes\",\n },\n {\n internalType: \"bytes\",\n name: \"\",\n type: \"bytes\",\n },\n ],\n name: \"resolveDirectCallbackError\",\n outputs: [],\n stateMutability: \"pure\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"bytes\",\n name: \"name\",\n type: \"bytes\",\n },\n {\n internalType: \"bytes\",\n name: \"data\",\n type: \"bytes\",\n },\n {\n internalType: \"string[]\",\n name: \"gateways\",\n type: \"string[]\",\n },\n ],\n name: \"resolveWithGateways\",\n outputs: [\n {\n internalType: \"bytes\",\n name: \"result\",\n type: \"bytes\",\n },\n {\n internalType: \"address\",\n name: \"resolver\",\n type: \"address\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"address\",\n name: \"resolver\",\n type: \"address\",\n },\n {\n internalType: \"bytes\",\n name: \"name\",\n type: \"bytes\",\n },\n {\n internalType: \"bytes\",\n name: \"data\",\n type: \"bytes\",\n },\n {\n internalType: \"string[]\",\n name: \"gateways\",\n type: \"string[]\",\n },\n ],\n name: \"resolveWithResolver\",\n outputs: [\n {\n internalType: \"bytes\",\n name: \"\",\n type: \"bytes\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"bytes\",\n name: \"lookupAddress\",\n type: \"bytes\",\n },\n {\n internalType: \"uint256\",\n name: \"coinType\",\n type: \"uint256\",\n },\n ],\n name: \"reverse\",\n outputs: [\n {\n internalType: \"string\",\n name: \"\",\n type: \"string\",\n },\n {\n internalType: \"address\",\n name: \"\",\n type: \"address\",\n },\n {\n internalType: \"address\",\n name: \"\",\n type: \"address\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"bytes\",\n name: \"response\",\n type: \"bytes\",\n },\n {\n internalType: \"bytes\",\n name: \"extraData\",\n type: \"bytes\",\n },\n ],\n name: \"reverseAddressCallback\",\n outputs: [\n {\n internalType: \"string\",\n name: \"primary\",\n type: \"string\",\n },\n {\n internalType: \"address\",\n name: \"resolver\",\n type: \"address\",\n },\n {\n internalType: \"address\",\n name: \"reverseResolver\",\n type: \"address\",\n },\n ],\n stateMutability: \"pure\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"bytes\",\n name: \"response\",\n type: \"bytes\",\n },\n {\n internalType: \"bytes\",\n name: \"extraData\",\n type: \"bytes\",\n },\n ],\n name: \"reverseNameCallback\",\n outputs: [\n {\n internalType: \"string\",\n name: \"primary\",\n type: \"string\",\n },\n {\n internalType: \"address\",\n name: \"\",\n type: \"address\",\n },\n {\n internalType: \"address\",\n name: \"\",\n type: \"address\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"bytes\",\n name: \"lookupAddress\",\n type: \"bytes\",\n },\n {\n internalType: \"uint256\",\n name: \"coinType\",\n type: \"uint256\",\n },\n {\n internalType: \"string[]\",\n name: \"gateways\",\n type: \"string[]\",\n },\n ],\n name: \"reverseWithGateways\",\n outputs: [\n {\n internalType: \"string\",\n name: \"primary\",\n type: \"string\",\n },\n {\n internalType: \"address\",\n name: \"resolver\",\n type: \"address\",\n },\n {\n internalType: \"address\",\n name: \"reverseResolver\",\n type: \"address\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"bytes4\",\n name: \"interfaceId\",\n type: \"bytes4\",\n },\n ],\n name: \"supportsInterface\",\n outputs: [\n {\n internalType: \"bool\",\n name: \"\",\n type: \"bool\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n] as const satisfies Abi;\n","import type { Abi } from \"viem\";\n\nexport const UniversalResolverV1 = [\n {\n inputs: [\n {\n internalType: \"address\",\n name: \"owner\",\n type: \"address\",\n },\n {\n internalType: \"contract ENS\",\n name: \"ens\",\n type: \"address\",\n },\n {\n internalType: \"contract IGatewayProvider\",\n name: \"batchGatewayProvider\",\n type: \"address\",\n },\n ],\n stateMutability: \"nonpayable\",\n type: \"constructor\",\n },\n {\n inputs: [\n {\n internalType: \"bytes\",\n name: \"dns\",\n type: \"bytes\",\n },\n ],\n name: \"DNSDecodingFailed\",\n type: \"error\",\n },\n {\n inputs: [\n {\n internalType: \"string\",\n name: \"ens\",\n type: \"string\",\n },\n ],\n name: \"DNSEncodingFailed\",\n type: \"error\",\n },\n {\n inputs: [],\n name: \"EmptyAddress\",\n type: \"error\",\n },\n {\n inputs: [\n {\n internalType: \"uint16\",\n name: \"status\",\n type: \"uint16\",\n },\n {\n internalType: \"string\",\n name: \"message\",\n type: \"string\",\n },\n ],\n name: \"HttpError\",\n type: \"error\",\n },\n {\n inputs: [],\n name: \"InvalidBatchGatewayResponse\",\n type: \"error\",\n },\n {\n inputs: [\n {\n internalType: \"address\",\n name: \"sender\",\n type: \"address\",\n },\n {\n internalType: \"string[]\",\n name: \"urls\",\n type: \"string[]\",\n },\n {\n internalType: \"bytes\",\n name: \"callData\",\n type: \"bytes\",\n },\n {\n internalType: \"bytes4\",\n name: \"callbackFunction\",\n type: \"bytes4\",\n },\n {\n internalType: \"bytes\",\n name: \"extraData\",\n type: \"bytes\",\n },\n ],\n name: \"OffchainLookup\",\n type: \"error\",\n },\n {\n inputs: [\n {\n internalType: \"uint256\",\n name: \"offset\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"length\",\n type: \"uint256\",\n },\n ],\n name: \"OffsetOutOfBoundsError\",\n type: \"error\",\n },\n {\n inputs: [\n {\n internalType: \"bytes\",\n name: \"errorData\",\n type: \"bytes\",\n },\n ],\n name: \"ResolverError\",\n type: \"error\",\n },\n {\n inputs: [\n {\n internalType: \"bytes\",\n name: \"name\",\n type: \"bytes\",\n },\n {\n internalType: \"address\",\n name: \"resolver\",\n type: \"address\",\n },\n ],\n name: \"ResolverNotContract\",\n type: \"error\",\n },\n {\n inputs: [\n {\n internalType: \"bytes\",\n name: \"name\",\n type: \"bytes\",\n },\n ],\n name: \"ResolverNotFound\",\n type: \"error\",\n },\n {\n inputs: [\n {\n internalType: \"string\",\n name: \"primary\",\n type: \"string\",\n },\n {\n internalType: \"bytes\",\n name: \"primaryAddress\",\n type: \"bytes\",\n },\n ],\n name: \"ReverseAddressMismatch\",\n type: \"error\",\n },\n {\n inputs: [\n {\n internalType: \"bytes4\",\n name: \"selector\",\n type: \"bytes4\",\n },\n ],\n name: \"UnsupportedResolverProfile\",\n type: \"error\",\n },\n {\n inputs: [],\n name: \"batchGatewayProvider\",\n outputs: [\n {\n internalType: \"contract IGatewayProvider\",\n name: \"\",\n type: \"address\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n components: [\n {\n components: [\n {\n internalType: \"address\",\n name: \"target\",\n type: \"address\",\n },\n {\n internalType: \"bytes\",\n name: \"call\",\n type: \"bytes\",\n },\n {\n internalType: \"bytes\",\n name: \"data\",\n type: \"bytes\",\n },\n {\n internalType: \"uint256\",\n name: \"flags\",\n type: \"uint256\",\n },\n ],\n internalType: \"struct CCIPBatcher.Lookup[]\",\n name: \"lookups\",\n type: \"tuple[]\",\n },\n {\n internalType: \"string[]\",\n name: \"gateways\",\n type: \"string[]\",\n },\n ],\n internalType: \"struct CCIPBatcher.Batch\",\n name: \"batch\",\n type: \"tuple\",\n },\n ],\n name: \"ccipBatch\",\n outputs: [\n {\n components: [\n {\n components: [\n {\n internalType: \"address\",\n name: \"target\",\n type: \"address\",\n },\n {\n internalType: \"bytes\",\n name: \"call\",\n type: \"bytes\",\n },\n {\n internalType: \"bytes\",\n name: \"data\",\n type: \"bytes\",\n },\n {\n internalType: \"uint256\",\n name: \"flags\",\n type: \"uint256\",\n },\n ],\n internalType: \"struct CCIPBatcher.Lookup[]\",\n name: \"lookups\",\n type: \"tuple[]\",\n },\n {\n internalType: \"string[]\",\n name: \"gateways\",\n type: \"string[]\",\n },\n ],\n internalType: \"struct CCIPBatcher.Batch\",\n name: \"\",\n type: \"tuple\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"bytes\",\n name: \"response\",\n type: \"bytes\",\n },\n {\n internalType: \"bytes\",\n name: \"extraData\",\n type: \"bytes\",\n },\n ],\n name: \"ccipBatchCallback\",\n outputs: [\n {\n components: [\n {\n components: [\n {\n internalType: \"address\",\n name: \"target\",\n type: \"address\",\n },\n {\n internalType: \"bytes\",\n name: \"call\",\n type: \"bytes\",\n },\n {\n internalType: \"bytes\",\n name: \"data\",\n type: \"bytes\",\n },\n {\n internalType: \"uint256\",\n name: \"flags\",\n type: \"uint256\",\n },\n ],\n internalType: \"struct CCIPBatcher.Lookup[]\",\n name: \"lookups\",\n type: \"tuple[]\",\n },\n {\n internalType: \"string[]\",\n name: \"gateways\",\n type: \"string[]\",\n },\n ],\n internalType: \"struct CCIPBatcher.Batch\",\n name: \"batch\",\n type: \"tuple\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"bytes\",\n name: \"response\",\n type: \"bytes\",\n },\n {\n internalType: \"bytes\",\n name: \"extraData\",\n type: \"bytes\",\n },\n ],\n name: \"ccipReadCallback\",\n outputs: [],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"bytes\",\n name: \"name\",\n type: \"bytes\",\n },\n ],\n name: \"findResolver\",\n outputs: [\n {\n internalType: \"address\",\n name: \"\",\n type: \"address\",\n },\n {\n internalType: \"bytes32\",\n name: \"\",\n type: \"bytes32\",\n },\n {\n internalType: \"uint256\",\n name: \"\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"registry\",\n outputs: [\n {\n internalType: \"contract ENS\",\n name: \"\",\n type: \"address\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"bytes\",\n name: \"name\",\n type: \"bytes\",\n },\n ],\n name: \"requireResolver\",\n outputs: [\n {\n components: [\n {\n internalType: \"bytes\",\n name: \"name\",\n type: \"bytes\",\n },\n {\n internalType: \"uint256\",\n name: \"offset\",\n type: \"uint256\",\n },\n {\n internalType: \"bytes32\",\n name: \"node\",\n type: \"bytes32\",\n },\n {\n internalType: \"address\",\n name: \"resolver\",\n type: \"address\",\n },\n {\n internalType: \"bool\",\n name: \"extended\",\n type: \"bool\",\n },\n ],\n internalType: \"struct AbstractUniversalResolver.ResolverInfo\",\n name: \"info\",\n type: \"tuple\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"bytes\",\n name: \"name\",\n type: \"bytes\",\n },\n {\n internalType: \"bytes\",\n name: \"data\",\n type: \"bytes\",\n },\n ],\n name: \"resolve\",\n outputs: [\n {\n internalType: \"bytes\",\n name: \"\",\n type: \"bytes\",\n },\n {\n internalType: \"address\",\n name: \"\",\n type: \"address\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"bytes\",\n name: \"response\",\n type: \"bytes\",\n },\n {\n internalType: \"bytes\",\n name: \"extraData\",\n type: \"bytes\",\n },\n ],\n name: \"resolveBatchCallback\",\n outputs: [],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"bytes\",\n name: \"response\",\n type: \"bytes\",\n },\n {\n internalType: \"bytes\",\n name: \"extraData\",\n type: \"bytes\",\n },\n ],\n name: \"resolveCallback\",\n outputs: [\n {\n internalType: \"bytes\",\n name: \"\",\n type: \"bytes\",\n },\n {\n internalType: \"address\",\n name: \"\",\n type: \"address\",\n },\n ],\n stateMutability: \"pure\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"bytes\",\n name: \"response\",\n type: \"bytes\",\n },\n {\n internalType: \"bytes\",\n name: \"extraData\",\n type: \"bytes\",\n },\n ],\n name: \"resolveDirectCallback\",\n outputs: [],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"bytes\",\n name: \"response\",\n type: \"bytes\",\n },\n {\n internalType: \"bytes\",\n name: \"\",\n type: \"bytes\",\n },\n ],\n name: \"resolveDirectCallbackError\",\n outputs: [],\n stateMutability: \"pure\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"bytes\",\n name: \"name\",\n type: \"bytes\",\n },\n {\n internalType: \"bytes\",\n name: \"data\",\n type: \"bytes\",\n },\n {\n internalType: \"string[]\",\n name: \"gateways\",\n type: \"string[]\",\n },\n ],\n name: \"resolveWithGateways\",\n outputs: [\n {\n internalType: \"bytes\",\n name: \"result\",\n type: \"bytes\",\n },\n {\n internalType: \"address\",\n name: \"resolver\",\n type: \"address\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"address\",\n name: \"resolver\",\n type: \"address\",\n },\n {\n internalType: \"bytes\",\n name: \"name\",\n type: \"bytes\",\n },\n {\n internalType: \"bytes\",\n name: \"data\",\n type: \"bytes\",\n },\n {\n internalType: \"string[]\",\n name: \"gateways\",\n type: \"string[]\",\n },\n ],\n name: \"resolveWithResolver\",\n outputs: [\n {\n internalType: \"bytes\",\n name: \"\",\n type: \"bytes\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"bytes\",\n name: \"lookupAddress\",\n type: \"bytes\",\n },\n {\n internalType: \"uint256\",\n name: \"coinType\",\n type: \"uint256\",\n },\n ],\n name: \"reverse\",\n outputs: [\n {\n internalType: \"string\",\n name: \"\",\n type: \"string\",\n },\n {\n internalType: \"address\",\n name: \"\",\n type: \"address\",\n },\n {\n internalType: \"address\",\n name: \"\",\n type: \"address\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"bytes\",\n name: \"response\",\n type: \"bytes\",\n },\n {\n internalType: \"bytes\",\n name: \"extraData\",\n type: \"bytes\",\n },\n ],\n name: \"reverseAddressCallback\",\n outputs: [\n {\n internalType: \"string\",\n name: \"primary\",\n type: \"string\",\n },\n {\n internalType: \"address\",\n name: \"resolver\",\n type: \"address\",\n },\n {\n internalType: \"address\",\n name: \"reverseResolver\",\n type: \"address\",\n },\n ],\n stateMutability: \"pure\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"bytes\",\n name: \"response\",\n type: \"bytes\",\n },\n {\n internalType: \"bytes\",\n name: \"extraData\",\n type: \"bytes\",\n },\n ],\n name: \"reverseNameCallback\",\n outputs: [\n {\n internalType: \"string\",\n name: \"primary\",\n type: \"string\",\n },\n {\n internalType: \"address\",\n name: \"\",\n type: \"address\",\n },\n {\n internalType: \"address\",\n name: \"\",\n type: \"address\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"bytes\",\n name: \"lookupAddress\",\n type: \"bytes\",\n },\n {\n internalType: \"uint256\",\n name: \"coinType\",\n type: \"uint256\",\n },\n {\n internalType: \"string[]\",\n name: \"gateways\",\n type: \"string[]\",\n },\n ],\n name: \"reverseWithGateways\",\n outputs: [\n {\n internalType: \"string\",\n name: \"primary\",\n type: \"string\",\n },\n {\n internalType: \"address\",\n name: \"resolver\",\n type: \"address\",\n },\n {\n internalType: \"address\",\n name: \"reverseResolver\",\n type: \"address\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"bytes4\",\n name: \"interfaceId\",\n type: \"bytes4\",\n },\n ],\n name: \"supportsInterface\",\n outputs: [\n {\n internalType: \"bool\",\n name: \"\",\n type: \"bool\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n] as const satisfies Abi;\n","import type { Abi } from \"viem\";\n\nexport const ThreeDNSToken = [\n {\n type: \"event\",\n name: \"NewOwner\",\n inputs: [\n { type: \"bytes32\", name: \"node\", indexed: true },\n { type: \"bytes32\", name: \"label\", indexed: true },\n { type: \"address\", name: \"owner\", indexed: false },\n ],\n },\n {\n type: \"event\",\n name: \"RegistrationCreated\",\n inputs: [\n { type: \"bytes32\", name: \"node\", indexed: true },\n { type: \"bytes32\", name: \"tld\", indexed: true },\n { type: \"bytes\", name: \"fqdn\", indexed: false },\n { type: \"address\", name: \"registrant\", indexed: false },\n { type: \"uint32\", name: \"controlBitmap\", indexed: false },\n { type: \"uint64\", name: \"expiry\", indexed: false },\n ],\n },\n {\n type: \"event\",\n name: \"RegistrationExtended\",\n inputs: [\n { type: \"bytes32\", name: \"node\", indexed: true },\n { type: \"uint64\", name: \"duration\", indexed: true },\n { type: \"uint64\", name: \"newExpiry\", indexed: true },\n ],\n },\n {\n type: \"event\",\n name: \"RegistrationTransferred\",\n inputs: [\n { type: \"bytes32\", name: \"node\", indexed: true },\n { type: \"address\", name: \"newOwner\", indexed: true },\n { type: \"address\", name: \"operator\", indexed: true },\n ],\n },\n {\n type: \"event\",\n name: \"RegistrationBurned\",\n inputs: [\n { type: \"bytes32\", name: \"node\", indexed: true },\n { type: \"address\", name: \"burner\", indexed: true },\n ],\n },\n {\n type: \"function\",\n name: \"uri\",\n inputs: [{ type: \"uint256\", name: \"tokenId_\" }],\n outputs: [{ type: \"string\", name: \"\" }],\n stateMutability: \"view\",\n },\n {\n type: \"function\",\n name: \"resolver\",\n inputs: [{ type: \"bytes32\", name: \"node\" }],\n outputs: [{ type: \"address\", name: \"\" }],\n stateMutability: \"view\",\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: true,\n internalType: \"bytes32\",\n name: \"node\",\n type: \"bytes32\",\n },\n {\n indexed: false,\n internalType: \"address\",\n name: \"owner\",\n type: \"address\",\n },\n ],\n name: \"Transfer\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: true,\n internalType: \"address\",\n name: \"operator\",\n type: \"address\",\n },\n {\n indexed: true,\n internalType: \"address\",\n name: \"from\",\n type: \"address\",\n },\n {\n indexed: true,\n internalType: \"address\",\n name: \"to\",\n type: \"address\",\n },\n {\n indexed: false,\n internalType: \"uint256\",\n name: \"id\",\n type: \"uint256\",\n },\n {\n indexed: false,\n internalType: \"uint256\",\n name: \"value\",\n type: \"uint256\",\n },\n ],\n name: \"TransferSingle\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: true,\n internalType: \"address\",\n name: \"operator\",\n type: \"address\",\n },\n {\n indexed: true,\n internalType: \"address\",\n name: \"from\",\n type: \"address\",\n },\n {\n indexed: true,\n internalType: \"address\",\n name: \"to\",\n type: \"address\",\n },\n {\n indexed: false,\n internalType: \"uint256[]\",\n name: \"ids\",\n type: \"uint256[]\",\n },\n {\n indexed: false,\n internalType: \"uint256[]\",\n name: \"values\",\n type: \"uint256[]\",\n },\n ],\n name: \"TransferBatch\",\n type: \"event\",\n },\n] as const satisfies Abi;\n","import type { Abi } from \"viem\";\n\nexport const BaseRegistrar = [\n {\n inputs: [\n { internalType: \"contract ENS\", name: \"registry_\", type: \"address\" },\n { internalType: \"address\", name: \"owner_\", type: \"address\" },\n { internalType: \"bytes32\", name: \"baseNode_\", type: \"bytes32\" },\n { internalType: \"string\", name: \"baseURI_\", type: \"string\" },\n { internalType: \"string\", name: \"collectionURI_\", type: \"string\" },\n ],\n stateMutability: \"nonpayable\",\n type: \"constructor\",\n },\n { inputs: [], name: \"AccountBalanceOverflow\", type: \"error\" },\n { inputs: [], name: \"AlreadyInitialized\", type: \"error\" },\n { inputs: [], name: \"BalanceQueryForZeroAddress\", type: \"error\" },\n {\n inputs: [{ internalType: \"uint256\", name: \"tokenId\", type: \"uint256\" }],\n name: \"Expired\",\n type: \"error\",\n },\n { inputs: [], name: \"NewOwnerIsZeroAddress\", type: \"error\" },\n { inputs: [], name: \"NoHandoverRequest\", type: \"error\" },\n {\n inputs: [{ internalType: \"uint256\", name: \"tokenId\", type: \"uint256\" }],\n name: \"NonexistentToken\",\n type: \"error\",\n },\n {\n inputs: [\n { internalType: \"uint256\", name: \"tokenId\", type: \"uint256\" },\n { internalType: \"address\", name: \"sender\", type: \"address\" },\n ],\n name: \"NotApprovedOwner\",\n type: \"error\",\n },\n {\n inputs: [{ internalType: \"uint256\", name: \"tokenId\", type: \"uint256\" }],\n name: \"NotAvailable\",\n type: \"error\",\n },\n { inputs: [], name: \"NotOwnerNorApproved\", type: \"error\" },\n {\n inputs: [{ internalType: \"uint256\", name: \"tokenId\", type: \"uint256\" }],\n name: \"NotRegisteredOrInGrace\",\n type: \"error\",\n },\n { inputs: [], name: \"OnlyController\", type: \"error\" },\n { inputs: [], name: \"RegistrarNotLive\", type: \"error\" },\n { inputs: [], name: \"TokenAlreadyExists\", type: \"error\" },\n { inputs: [], name: \"TokenDoesNotExist\", type: \"error\" },\n { inputs: [], name: \"TransferFromIncorrectOwner\", type: \"error\" },\n { inputs: [], name: \"TransferToNonERC721ReceiverImplementer\", type: \"error\" },\n { inputs: [], name: \"TransferToZeroAddress\", type: \"error\" },\n { inputs: [], name: \"Unauthorized\", type: \"error\" },\n {\n anonymous: false,\n inputs: [\n {\n indexed: true,\n internalType: \"address\",\n name: \"owner\",\n type: \"address\",\n },\n {\n indexed: true,\n internalType: \"address\",\n name: \"account\",\n type: \"address\",\n },\n { indexed: true, internalType: \"uint256\", name: \"id\", type: \"uint256\" },\n ],\n name: \"Approval\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: true,\n internalType: \"address\",\n name: \"owner\",\n type: \"address\",\n },\n {\n indexed: true,\n internalType: \"address\",\n name: \"operator\",\n type: \"address\",\n },\n {\n indexed: false,\n internalType: \"bool\",\n name: \"isApproved\",\n type: \"bool\",\n },\n ],\n name: \"ApprovalForAll\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: false,\n internalType: \"uint256\",\n name: \"_fromTokenId\",\n type: \"uint256\",\n },\n {\n indexed: false,\n internalType: \"uint256\",\n name: \"_toTokenId\",\n type: \"uint256\",\n },\n ],\n name: \"BatchMetadataUpdate\",\n type: \"event\",\n },\n { anonymous: false, inputs: [], name: \"ContractURIUpdated\", type: \"event\" },\n {\n anonymous: false,\n inputs: [\n {\n indexed: true,\n internalType: \"address\",\n name: \"controller\",\n type: \"address\",\n },\n ],\n name: \"ControllerAdded\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: true,\n internalType: \"address\",\n name: \"controller\",\n type: \"address\",\n },\n ],\n name: \"ControllerRemoved\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n { indexed: true, internalType: \"uint256\", name: \"id\", type: \"uint256\" },\n {\n indexed: true,\n internalType: \"address\",\n name: \"owner\",\n type: \"address\",\n },\n {\n indexed: false,\n internalType: \"uint256\",\n name: \"expires\",\n type: \"uint256\",\n },\n ],\n name: \"NameRegistered\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n { indexed: true, internalType: \"uint256\", name: \"id\", type: \"uint256\" },\n {\n indexed: true,\n internalType: \"address\",\n name: \"owner\",\n type: \"address\",\n },\n {\n indexed: false,\n internalType: \"uint256\",\n name: \"expires\",\n type: \"uint256\",\n },\n {\n indexed: false,\n internalType: \"address\",\n name: \"resolver\",\n type: \"address\",\n },\n { indexed: false, internalType: \"uint64\", name: \"ttl\", type: \"uint64\" },\n ],\n name: \"NameRegisteredWithRecord\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n { indexed: true, internalType: \"uint256\", name: \"id\", type: \"uint256\" },\n {\n indexed: false,\n internalType: \"uint256\",\n name: \"expires\",\n type: \"uint256\",\n },\n ],\n name: \"NameRenewed\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: true,\n internalType: \"address\",\n name: \"pendingOwner\",\n type: \"address\",\n },\n ],\n name: \"OwnershipHandoverCanceled\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: true,\n internalType: \"address\",\n name: \"pendingOwner\",\n type: \"address\",\n },\n ],\n name: \"OwnershipHandoverRequested\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: true,\n internalType: \"address\",\n name: \"oldOwner\",\n type: \"address\",\n },\n {\n indexed: true,\n internalType: \"address\",\n name: \"newOwner\",\n type: \"address\",\n },\n ],\n name: \"OwnershipTransferred\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n { indexed: true, internalType: \"address\", name: \"from\", type: \"address\" },\n { indexed: true, internalType: \"address\", name: \"to\", type: \"address\" },\n { indexed: true, internalType: \"uint256\", name: \"tokenId\", type: \"uint256\" },\n ],\n name: \"Transfer\",\n type: \"event\",\n },\n {\n inputs: [{ internalType: \"address\", name: \"controller\", type: \"address\" }],\n name: \"addController\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n { internalType: \"address\", name: \"account\", type: \"address\" },\n { internalType: \"uint256\", name: \"id\", type: \"uint256\" },\n ],\n name: \"approve\",\n outputs: [],\n stateMutability: \"payable\",\n type: \"function\",\n },\n {\n inputs: [{ internalType: \"address\", name: \"owner\", type: \"address\" }],\n name: \"balanceOf\",\n outputs: [{ internalType: \"uint256\", name: \"result\", type: \"uint256\" }],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"baseNode\",\n outputs: [{ internalType: \"bytes32\", name: \"\", type: \"bytes32\" }],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"cancelOwnershipHandover\",\n outputs: [],\n stateMutability: \"payable\",\n type: \"function\",\n },\n {\n inputs: [{ internalType: \"address\", name: \"pendingOwner\", type: \"address\" }],\n name: \"completeOwnershipHandover\",\n outputs: [],\n stateMutability: \"payable\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"contractURI\",\n outputs: [{ internalType: \"string\", name: \"\", type: \"string\" }],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [{ internalType: \"address\", name: \"controller\", type: \"address\" }],\n name: \"controllers\",\n outputs: [{ internalType: \"bool\", name: \"isApproved\", type: \"bool\" }],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [{ internalType: \"uint256\", name: \"id\", type: \"uint256\" }],\n name: \"getApproved\",\n outputs: [{ internalType: \"address\", name: \"result\", type: \"address\" }],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n { internalType: \"address\", name: \"owner\", type: \"address\" },\n { internalType: \"address\", name: \"operator\", type: \"address\" },\n ],\n name: \"isApprovedForAll\",\n outputs: [{ internalType: \"bool\", name: \"result\", type: \"bool\" }],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [{ internalType: \"uint256\", name: \"id\", type: \"uint256\" }],\n name: \"isAvailable\",\n outputs: [{ internalType: \"bool\", name: \"\", type: \"bool\" }],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"name\",\n outputs: [{ internalType: \"string\", name: \"\", type: \"string\" }],\n stateMutability: \"pure\",\n type: \"function\",\n },\n {\n inputs: [{ internalType: \"uint256\", name: \"id\", type: \"uint256\" }],\n name: \"nameExpires\",\n outputs: [{ internalType: \"uint256\", name: \"expiry\", type: \"uint256\" }],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"owner\",\n outputs: [{ internalType: \"address\", name: \"result\", type: \"address\" }],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [{ internalType: \"uint256\", name: \"tokenId\", type: \"uint256\" }],\n name: \"ownerOf\",\n outputs: [{ internalType: \"address\", name: \"\", type: \"address\" }],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [{ internalType: \"address\", name: \"pendingOwner\", type: \"address\" }],\n name: \"ownershipHandoverExpiresAt\",\n outputs: [{ internalType: \"uint256\", name: \"result\", type: \"uint256\" }],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n { internalType: \"uint256\", name: \"id\", type: \"uint256\" },\n { internalType: \"address\", name: \"owner\", type: \"address\" },\n ],\n name: \"reclaim\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n { internalType: \"uint256\", name: \"id\", type: \"uint256\" },\n { internalType: \"address\", name: \"owner\", type: \"address\" },\n { internalType: \"uint256\", name: \"duration\", type: \"uint256\" },\n ],\n name: \"register\",\n outputs: [{ internalType: \"uint256\", name: \"\", type: \"uint256\" }],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n { internalType: \"uint256\", name: \"id\", type: \"uint256\" },\n { internalType: \"address\", name: \"owner\", type: \"address\" },\n { internalType: \"uint256\", name: \"duration\", type: \"uint256\" },\n ],\n name: \"registerOnly\",\n outputs: [{ internalType: \"uint256\", name: \"\", type: \"uint256\" }],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n { internalType: \"uint256\", name: \"id\", type: \"uint256\" },\n { internalType: \"address\", name: \"owner\", type: \"address\" },\n { internalType: \"uint256\", name: \"duration\", type: \"uint256\" },\n { internalType: \"address\", name: \"resolver\", type: \"address\" },\n { internalType: \"uint64\", name: \"ttl\", type: \"uint64\" },\n ],\n name: \"registerWithRecord\",\n outputs: [{ internalType: \"uint256\", name: \"\", type: \"uint256\" }],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"registry\",\n outputs: [{ internalType: \"contract ENS\", name: \"\", type: \"address\" }],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [{ internalType: \"address\", name: \"controller\", type: \"address\" }],\n name: \"removeController\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n { internalType: \"uint256\", name: \"id\", type: \"uint256\" },\n { internalType: \"uint256\", name: \"duration\", type: \"uint256\" },\n ],\n name: \"renew\",\n outputs: [{ internalType: \"uint256\", name: \"\", type: \"uint256\" }],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"renounceOwnership\",\n outputs: [],\n stateMutability: \"payable\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"requestOwnershipHandover\",\n outputs: [],\n stateMutability: \"payable\",\n type: \"function\",\n },\n {\n inputs: [\n { internalType: \"address\", name: \"from\", type: \"address\" },\n { internalType: \"address\", name: \"to\", type: \"address\" },\n { internalType: \"uint256\", name: \"id\", type: \"uint256\" },\n ],\n name: \"safeTransferFrom\",\n outputs: [],\n stateMutability: \"payable\",\n type: \"function\",\n },\n {\n inputs: [\n { internalType: \"address\", name: \"from\", type: \"address\" },\n { internalType: \"address\", name: \"to\", type: \"address\" },\n { internalType: \"uint256\", name: \"id\", type: \"uint256\" },\n { internalType: \"bytes\", name: \"data\", type: \"bytes\" },\n ],\n name: \"safeTransferFrom\",\n outputs: [],\n stateMutability: \"payable\",\n type: \"function\",\n },\n {\n inputs: [\n { internalType: \"address\", name: \"operator\", type: \"address\" },\n { internalType: \"bool\", name: \"isApproved\", type: \"bool\" },\n ],\n name: \"setApprovalForAll\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [{ internalType: \"string\", name: \"baseURI_\", type: \"string\" }],\n name: \"setBaseTokenURI\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [{ internalType: \"string\", name: \"collectionURI_\", type: \"string\" }],\n name: \"setContractURI\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [{ internalType: \"address\", name: \"resolver\", type: \"address\" }],\n name: \"setResolver\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [{ internalType: \"bytes4\", name: \"interfaceID\", type: \"bytes4\" }],\n name: \"supportsInterface\",\n outputs: [{ internalType: \"bool\", name: \"\", type: \"bool\" }],\n stateMutability: \"pure\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"symbol\",\n outputs: [{ internalType: \"string\", name: \"\", type: \"string\" }],\n stateMutability: \"pure\",\n type: \"function\",\n },\n {\n inputs: [{ internalType: \"uint256\", name: \"tokenId\", type: \"uint256\" }],\n name: \"tokenURI\",\n outputs: [{ internalType: \"string\", name: \"\", type: \"string\" }],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n { internalType: \"address\", name: \"from\", type: \"address\" },\n { internalType: \"address\", name: \"to\", type: \"address\" },\n { internalType: \"uint256\", name: \"id\", type: \"uint256\" },\n ],\n name: \"transferFrom\",\n outputs: [],\n stateMutability: \"payable\",\n type: \"function\",\n },\n {\n inputs: [{ internalType: \"address\", name: \"newOwner\", type: \"address\" }],\n name: \"transferOwnership\",\n outputs: [],\n stateMutability: \"payable\",\n type: \"function\",\n },\n] as const satisfies Abi;\n","import type { Abi } from \"viem\";\n\nexport const BaseRegistrar = [\n {\n inputs: [\n { internalType: \"contract ENS\", name: \"_ens\", type: \"address\" },\n { internalType: \"bytes32\", name: \"_baseNode\", type: \"bytes32\" },\n ],\n stateMutability: \"nonpayable\",\n type: \"constructor\",\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: true,\n internalType: \"address\",\n name: \"owner\",\n type: \"address\",\n },\n {\n indexed: true,\n internalType: \"address\",\n name: \"approved\",\n type: \"address\",\n },\n {\n indexed: true,\n internalType: \"uint256\",\n name: \"tokenId\",\n type: \"uint256\",\n },\n ],\n name: \"Approval\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: true,\n internalType: \"address\",\n name: \"owner\",\n type: \"address\",\n },\n {\n indexed: true,\n internalType: \"address\",\n name: \"operator\",\n type: \"address\",\n },\n { indexed: false, internalType: \"bool\", name: \"approved\", type: \"bool\" },\n ],\n name: \"ApprovalForAll\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: true,\n internalType: \"address\",\n name: \"controller\",\n type: \"address\",\n },\n ],\n name: \"ControllerAdded\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: true,\n internalType: \"address\",\n name: \"controller\",\n type: \"address\",\n },\n ],\n name: \"ControllerRemoved\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n { indexed: true, internalType: \"uint256\", name: \"id\", type: \"uint256\" },\n {\n indexed: true,\n internalType: \"address\",\n name: \"owner\",\n type: \"address\",\n },\n {\n indexed: false,\n internalType: \"uint256\",\n name: \"expires\",\n type: \"uint256\",\n },\n ],\n name: \"NameMigrated\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n { indexed: true, internalType: \"uint256\", name: \"id\", type: \"uint256\" },\n {\n indexed: true,\n internalType: \"address\",\n name: \"owner\",\n type: \"address\",\n },\n {\n indexed: false,\n internalType: \"uint256\",\n name: \"expires\",\n type: \"uint256\",\n },\n ],\n name: \"NameRegistered\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n { indexed: true, internalType: \"uint256\", name: \"id\", type: \"uint256\" },\n {\n indexed: false,\n internalType: \"uint256\",\n name: \"expires\",\n type: \"uint256\",\n },\n ],\n name: \"NameRenewed\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: true,\n internalType: \"address\",\n name: \"previousOwner\",\n type: \"address\",\n },\n {\n indexed: true,\n internalType: \"address\",\n name: \"newOwner\",\n type: \"address\",\n },\n ],\n name: \"OwnershipTransferred\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n { indexed: true, internalType: \"address\", name: \"from\", type: \"address\" },\n { indexed: true, internalType: \"address\", name: \"to\", type: \"address\" },\n {\n indexed: true,\n internalType: \"uint256\",\n name: \"tokenId\",\n type: \"uint256\",\n },\n ],\n name: \"Transfer\",\n type: \"event\",\n },\n {\n inputs: [],\n name: \"GRACE_PERIOD\",\n outputs: [{ internalType: \"uint256\", name: \"\", type: \"uint256\" }],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [{ internalType: \"address\", name: \"controller\", type: \"address\" }],\n name: \"addController\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n { internalType: \"address\", name: \"to\", type: \"address\" },\n { internalType: \"uint256\", name: \"tokenId\", type: \"uint256\" },\n ],\n name: \"approve\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [{ internalType: \"uint256\", name: \"id\", type: \"uint256\" }],\n name: \"available\",\n outputs: [{ internalType: \"bool\", name: \"\", type: \"bool\" }],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [{ internalType: \"address\", name: \"owner\", type: \"address\" }],\n name: \"balanceOf\",\n outputs: [{ internalType: \"uint256\", name: \"\", type: \"uint256\" }],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"baseNode\",\n outputs: [{ internalType: \"bytes32\", name: \"\", type: \"bytes32\" }],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [{ internalType: \"address\", name: \"\", type: \"address\" }],\n name: \"controllers\",\n outputs: [{ internalType: \"bool\", name: \"\", type: \"bool\" }],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"ens\",\n outputs: [{ internalType: \"contract ENS\", name: \"\", type: \"address\" }],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [{ internalType: \"uint256\", name: \"tokenId\", type: \"uint256\" }],\n name: \"getApproved\",\n outputs: [{ internalType: \"address\", name: \"\", type: \"address\" }],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n { internalType: \"address\", name: \"owner\", type: \"address\" },\n { internalType: \"address\", name: \"operator\", type: \"address\" },\n ],\n name: \"isApprovedForAll\",\n outputs: [{ internalType: \"bool\", name: \"\", type: \"bool\" }],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"name\",\n outputs: [{ internalType: \"string\", name: \"\", type: \"string\" }],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [{ internalType: \"uint256\", name: \"id\", type: \"uint256\" }],\n name: \"nameExpires\",\n outputs: [{ internalType: \"uint256\", name: \"\", type: \"uint256\" }],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"owner\",\n outputs: [{ internalType: \"address\", name: \"\", type: \"address\" }],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [{ internalType: \"uint256\", name: \"tokenId\", type: \"uint256\" }],\n name: \"ownerOf\",\n outputs: [{ internalType: \"address\", name: \"\", type: \"address\" }],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n { internalType: \"uint256\", name: \"id\", type: \"uint256\" },\n { internalType: \"address\", name: \"owner\", type: \"address\" },\n ],\n name: \"reclaim\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n { internalType: \"uint256\", name: \"id\", type: \"uint256\" },\n { internalType: \"address\", name: \"owner\", type: \"address\" },\n { internalType: \"uint256\", name: \"duration\", type: \"uint256\" },\n ],\n name: \"register\",\n outputs: [{ internalType: \"uint256\", name: \"\", type: \"uint256\" }],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n { internalType: \"uint256\", name: \"id\", type: \"uint256\" },\n { internalType: \"address\", name: \"owner\", type: \"address\" },\n { internalType: \"uint256\", name: \"duration\", type: \"uint256\" },\n ],\n name: \"registerOnly\",\n outputs: [{ internalType: \"uint256\", name: \"\", type: \"uint256\" }],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [{ internalType: \"address\", name: \"controller\", type: \"address\" }],\n name: \"removeController\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n { internalType: \"uint256\", name: \"id\", type: \"uint256\" },\n { internalType: \"uint256\", name: \"duration\", type: \"uint256\" },\n ],\n name: \"renew\",\n outputs: [{ internalType: \"uint256\", name: \"\", type: \"uint256\" }],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"renounceOwnership\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n { internalType: \"address\", name: \"from\", type: \"address\" },\n { internalType: \"address\", name: \"to\", type: \"address\" },\n { internalType: \"uint256\", name: \"tokenId\", type: \"uint256\" },\n ],\n name: \"safeTransferFrom\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n { internalType: \"address\", name: \"from\", type: \"address\" },\n { internalType: \"address\", name: \"to\", type: \"address\" },\n { internalType: \"uint256\", name: \"tokenId\", type: \"uint256\" },\n { internalType: \"bytes\", name: \"data\", type: \"bytes\" },\n ],\n name: \"safeTransferFrom\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n { internalType: \"address\", name: \"operator\", type: \"address\" },\n { internalType: \"bool\", name: \"approved\", type: \"bool\" },\n ],\n name: \"setApprovalForAll\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [{ internalType: \"address\", name: \"resolver\", type: \"address\" }],\n name: \"setResolver\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [{ internalType: \"bytes4\", name: \"interfaceID\", type: \"bytes4\" }],\n name: \"supportsInterface\",\n outputs: [{ internalType: \"bool\", name: \"\", type: \"bool\" }],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"symbol\",\n outputs: [{ internalType: \"string\", name: \"\", type: \"string\" }],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [{ internalType: \"uint256\", name: \"tokenId\", type: \"uint256\" }],\n name: \"tokenURI\",\n outputs: [{ internalType: \"string\", name: \"\", type: \"string\" }],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n { internalType: \"address\", name: \"from\", type: \"address\" },\n { internalType: \"address\", name: \"to\", type: \"address\" },\n { internalType: \"uint256\", name: \"tokenId\", type: \"uint256\" },\n ],\n name: \"transferFrom\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [{ internalType: \"address\", name: \"newOwner\", type: \"address\" }],\n name: \"transferOwnership\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n] as const satisfies Abi;\n","import type { Abi } from \"viem\";\n\nexport const BaseRegistrar = [\n {\n inputs: [\n {\n internalType: \"contract ENS\",\n name: \"_ens\",\n type: \"address\",\n },\n {\n internalType: \"bytes32\",\n name: \"_baseNode\",\n type: \"bytes32\",\n },\n ],\n stateMutability: \"nonpayable\",\n type: \"constructor\",\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: true,\n internalType: \"address\",\n name: \"owner\",\n type: \"address\",\n },\n {\n indexed: true,\n internalType: \"address\",\n name: \"approved\",\n type: \"address\",\n },\n {\n indexed: true,\n internalType: \"uint256\",\n name: \"tokenId\",\n type: \"uint256\",\n },\n ],\n name: \"Approval\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: true,\n internalType: \"address\",\n name: \"owner\",\n type: \"address\",\n },\n {\n indexed: true,\n internalType: \"address\",\n name: \"operator\",\n type: \"address\",\n },\n {\n indexed: false,\n internalType: \"bool\",\n name: \"approved\",\n type: \"bool\",\n },\n ],\n name: \"ApprovalForAll\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: true,\n internalType: \"address\",\n name: \"controller\",\n type: \"address\",\n },\n ],\n name: \"ControllerAdded\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: true,\n internalType: \"address\",\n name: \"controller\",\n type: \"address\",\n },\n ],\n name: \"ControllerRemoved\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: true,\n internalType: \"uint256\",\n name: \"id\",\n type: \"uint256\",\n },\n {\n indexed: true,\n internalType: \"address\",\n name: \"owner\",\n type: \"address\",\n },\n {\n indexed: false,\n internalType: \"uint256\",\n name: \"expires\",\n type: \"uint256\",\n },\n ],\n name: \"NameMigrated\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: true,\n internalType: \"uint256\",\n name: \"id\",\n type: \"uint256\",\n },\n {\n indexed: true,\n internalType: \"address\",\n name: \"owner\",\n type: \"address\",\n },\n {\n indexed: false,\n internalType: \"uint256\",\n name: \"expires\",\n type: \"uint256\",\n },\n ],\n name: \"NameRegistered\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: true,\n internalType: \"uint256\",\n name: \"id\",\n type: \"uint256\",\n },\n {\n indexed: false,\n internalType: \"uint256\",\n name: \"expires\",\n type: \"uint256\",\n },\n ],\n name: \"NameRenewed\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: true,\n internalType: \"address\",\n name: \"previousOwner\",\n type: \"address\",\n },\n {\n indexed: true,\n internalType: \"address\",\n name: \"newOwner\",\n type: \"address\",\n },\n ],\n name: \"OwnershipTransferred\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: true,\n internalType: \"address\",\n name: \"from\",\n type: \"address\",\n },\n {\n indexed: true,\n internalType: \"address\",\n name: \"to\",\n type: \"address\",\n },\n {\n indexed: true,\n internalType: \"uint256\",\n name: \"tokenId\",\n type: \"uint256\",\n },\n ],\n name: \"Transfer\",\n type: \"event\",\n },\n {\n inputs: [],\n name: \"GRACE_PERIOD\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"address\",\n name: \"controller\",\n type: \"address\",\n },\n ],\n name: \"addController\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"address\",\n name: \"to\",\n type: \"address\",\n },\n {\n internalType: \"uint256\",\n name: \"tokenId\",\n type: \"uint256\",\n },\n ],\n name: \"approve\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"uint256\",\n name: \"id\",\n type: \"uint256\",\n },\n ],\n name: \"available\",\n outputs: [\n {\n internalType: \"bool\",\n name: \"\",\n type: \"bool\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"address\",\n name: \"owner\",\n type: \"address\",\n },\n ],\n name: \"balanceOf\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"baseNode\",\n outputs: [\n {\n internalType: \"bytes32\",\n name: \"\",\n type: \"bytes32\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"address\",\n name: \"\",\n type: \"address\",\n },\n ],\n name: \"controllers\",\n outputs: [\n {\n internalType: \"bool\",\n name: \"\",\n type: \"bool\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"ens\",\n outputs: [\n {\n internalType: \"contract ENS\",\n name: \"\",\n type: \"address\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"uint256\",\n name: \"tokenId\",\n type: \"uint256\",\n },\n ],\n name: \"getApproved\",\n outputs: [\n {\n internalType: \"address\",\n name: \"\",\n type: \"address\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"address\",\n name: \"owner\",\n type: \"address\",\n },\n {\n internalType: \"address\",\n name: \"operator\",\n type: \"address\",\n },\n ],\n name: \"isApprovedForAll\",\n outputs: [\n {\n internalType: \"bool\",\n name: \"\",\n type: \"bool\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"name\",\n outputs: [\n {\n internalType: \"string\",\n name: \"\",\n type: \"string\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"uint256\",\n name: \"id\",\n type: \"uint256\",\n },\n ],\n name: \"nameExpires\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"owner\",\n outputs: [\n {\n internalType: \"address\",\n name: \"\",\n type: \"address\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"uint256\",\n name: \"tokenId\",\n type: \"uint256\",\n },\n ],\n name: \"ownerOf\",\n outputs: [\n {\n internalType: \"address\",\n name: \"\",\n type: \"address\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"uint256\",\n name: \"id\",\n type: \"uint256\",\n },\n {\n internalType: \"address\",\n name: \"owner\",\n type: \"address\",\n },\n ],\n name: \"reclaim\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"uint256\",\n name: \"id\",\n type: \"uint256\",\n },\n {\n internalType: \"address\",\n name: \"owner\",\n type: \"address\",\n },\n {\n internalType: \"uint256\",\n name: \"duration\",\n type: \"uint256\",\n },\n ],\n name: \"register\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"uint256\",\n name: \"id\",\n type: \"uint256\",\n },\n {\n internalType: \"address\",\n name: \"owner\",\n type: \"address\",\n },\n {\n internalType: \"uint256\",\n name: \"duration\",\n type: \"uint256\",\n },\n ],\n name: \"registerOnly\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"address\",\n name: \"controller\",\n type: \"address\",\n },\n ],\n name: \"removeController\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"uint256\",\n name: \"id\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"duration\",\n type: \"uint256\",\n },\n ],\n name: \"renew\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"renounceOwnership\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"address\",\n name: \"from\",\n type: \"address\",\n },\n {\n internalType: \"address\",\n name: \"to\",\n type: \"address\",\n },\n {\n internalType: \"uint256\",\n name: \"tokenId\",\n type: \"uint256\",\n },\n ],\n name: \"safeTransferFrom\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"address\",\n name: \"from\",\n type: \"address\",\n },\n {\n internalType: \"address\",\n name: \"to\",\n type: \"address\",\n },\n {\n internalType: \"uint256\",\n name: \"tokenId\",\n type: \"uint256\",\n },\n {\n internalType: \"bytes\",\n name: \"data\",\n type: \"bytes\",\n },\n ],\n name: \"safeTransferFrom\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"address\",\n name: \"operator\",\n type: \"address\",\n },\n {\n internalType: \"bool\",\n name: \"approved\",\n type: \"bool\",\n },\n ],\n name: \"setApprovalForAll\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"address\",\n name: \"resolver\",\n type: \"address\",\n },\n ],\n name: \"setResolver\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"bytes4\",\n name: \"interfaceID\",\n type: \"bytes4\",\n },\n ],\n name: \"supportsInterface\",\n outputs: [\n {\n internalType: \"bool\",\n name: \"\",\n type: \"bool\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"symbol\",\n outputs: [\n {\n internalType: \"string\",\n name: \"\",\n type: \"string\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"uint256\",\n name: \"tokenId\",\n type: \"uint256\",\n },\n ],\n name: \"tokenURI\",\n outputs: [\n {\n internalType: \"string\",\n name: \"\",\n type: \"string\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"address\",\n name: \"from\",\n type: \"address\",\n },\n {\n internalType: \"address\",\n name: \"to\",\n type: \"address\",\n },\n {\n internalType: \"uint256\",\n name: \"tokenId\",\n type: \"uint256\",\n },\n ],\n name: \"transferFrom\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"address\",\n name: \"newOwner\",\n type: \"address\",\n },\n ],\n name: \"transferOwnership\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n] as const satisfies Abi;\n","import type { Abi } from \"viem\";\n\nexport const EarlyAccessRegistrarController = [\n {\n inputs: [\n {\n internalType: \"contract BaseRegistrar\",\n name: \"base_\",\n type: \"address\",\n },\n {\n internalType: \"contract IPriceOracle\",\n name: \"prices_\",\n type: \"address\",\n },\n {\n internalType: \"contract IReverseRegistrar\",\n name: \"reverseRegistrar_\",\n type: \"address\",\n },\n { internalType: \"address\", name: \"owner_\", type: \"address\" },\n { internalType: \"bytes32\", name: \"rootNode_\", type: \"bytes32\" },\n { internalType: \"string\", name: \"rootName_\", type: \"string\" },\n { internalType: \"address\", name: \"paymentReceiver_\", type: \"address\" },\n ],\n stateMutability: \"nonpayable\",\n type: \"constructor\",\n },\n {\n inputs: [{ internalType: \"address\", name: \"target\", type: \"address\" }],\n name: \"AddressEmptyCode\",\n type: \"error\",\n },\n {\n inputs: [{ internalType: \"address\", name: \"account\", type: \"address\" }],\n name: \"AddressInsufficientBalance\",\n type: \"error\",\n },\n { inputs: [], name: \"AlreadyInitialized\", type: \"error\" },\n {\n inputs: [{ internalType: \"address\", name: \"sender\", type: \"address\" }],\n name: \"AlreadyRegisteredWithDiscount\",\n type: \"error\",\n },\n {\n inputs: [{ internalType: \"uint256\", name: \"duration\", type: \"uint256\" }],\n name: \"DurationTooShort\",\n type: \"error\",\n },\n { inputs: [], name: \"FailedInnerCall\", type: \"error\" },\n {\n inputs: [{ internalType: \"bytes32\", name: \"key\", type: \"bytes32\" }],\n name: \"InactiveDiscount\",\n type: \"error\",\n },\n { inputs: [], name: \"InsufficientValue\", type: \"error\" },\n {\n inputs: [\n { internalType: \"bytes32\", name: \"key\", type: \"bytes32\" },\n { internalType: \"bytes\", name: \"data\", type: \"bytes\" },\n ],\n name: \"InvalidDiscount\",\n type: \"error\",\n },\n {\n inputs: [{ internalType: \"bytes32\", name: \"key\", type: \"bytes32\" }],\n name: \"InvalidDiscountAmount\",\n type: \"error\",\n },\n { inputs: [], name: \"InvalidPaymentReceiver\", type: \"error\" },\n {\n inputs: [\n { internalType: \"bytes32\", name: \"key\", type: \"bytes32\" },\n { internalType: \"address\", name: \"validator\", type: \"address\" },\n ],\n name: \"InvalidValidator\",\n type: \"error\",\n },\n {\n inputs: [{ internalType: \"string\", name: \"name\", type: \"string\" }],\n name: \"NameNotAvailable\",\n type: \"error\",\n },\n { inputs: [], name: \"NewOwnerIsZeroAddress\", type: \"error\" },\n { inputs: [], name: \"NoHandoverRequest\", type: \"error\" },\n { inputs: [], name: \"ResolverRequiredWhenDataSupplied\", type: \"error\" },\n {\n inputs: [{ internalType: \"address\", name: \"token\", type: \"address\" }],\n name: \"SafeERC20FailedOperation\",\n type: \"error\",\n },\n { inputs: [], name: \"TransferFailed\", type: \"error\" },\n { inputs: [], name: \"Unauthorized\", type: \"error\" },\n {\n anonymous: false,\n inputs: [\n {\n indexed: true,\n internalType: \"address\",\n name: \"registrant\",\n type: \"address\",\n },\n {\n indexed: true,\n internalType: \"bytes32\",\n name: \"discountKey\",\n type: \"bytes32\",\n },\n ],\n name: \"DiscountApplied\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: true,\n internalType: \"bytes32\",\n name: \"discountKey\",\n type: \"bytes32\",\n },\n {\n components: [\n { internalType: \"bool\", name: \"active\", type: \"bool\" },\n {\n internalType: \"address\",\n name: \"discountValidator\",\n type: \"address\",\n },\n { internalType: \"bytes32\", name: \"key\", type: \"bytes32\" },\n { internalType: \"uint256\", name: \"discount\", type: \"uint256\" },\n ],\n indexed: false,\n internalType: \"struct EARegistrarController.DiscountDetails\",\n name: \"details\",\n type: \"tuple\",\n },\n ],\n name: \"DiscountUpdated\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: true,\n internalType: \"address\",\n name: \"payee\",\n type: \"address\",\n },\n {\n indexed: false,\n internalType: \"uint256\",\n name: \"price\",\n type: \"uint256\",\n },\n ],\n name: \"ETHPaymentProcessed\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n { indexed: false, internalType: \"string\", name: \"name\", type: \"string\" },\n {\n indexed: true,\n internalType: \"bytes32\",\n name: \"label\",\n type: \"bytes32\",\n },\n {\n indexed: true,\n internalType: \"address\",\n name: \"owner\",\n type: \"address\",\n },\n {\n indexed: false,\n internalType: \"uint256\",\n name: \"expires\",\n type: \"uint256\",\n },\n ],\n name: \"NameRegistered\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: true,\n internalType: \"address\",\n name: \"pendingOwner\",\n type: \"address\",\n },\n ],\n name: \"OwnershipHandoverCanceled\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: true,\n internalType: \"address\",\n name: \"pendingOwner\",\n type: \"address\",\n },\n ],\n name: \"OwnershipHandoverRequested\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: true,\n internalType: \"address\",\n name: \"oldOwner\",\n type: \"address\",\n },\n {\n indexed: true,\n internalType: \"address\",\n name: \"newOwner\",\n type: \"address\",\n },\n ],\n name: \"OwnershipTransferred\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: false,\n internalType: \"address\",\n name: \"newPaymentReceiver\",\n type: \"address\",\n },\n ],\n name: \"PaymentReceiverUpdated\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: false,\n internalType: \"address\",\n name: \"newPrices\",\n type: \"address\",\n },\n ],\n name: \"PriceOracleUpdated\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: false,\n internalType: \"address\",\n name: \"newReverseRegistrar\",\n type: \"address\",\n },\n ],\n name: \"ReverseRegistrarUpdated\",\n type: \"event\",\n },\n {\n inputs: [],\n name: \"MIN_NAME_LENGTH\",\n outputs: [{ internalType: \"uint256\", name: \"\", type: \"uint256\" }],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"MIN_REGISTRATION_DURATION\",\n outputs: [{ internalType: \"uint256\", name: \"\", type: \"uint256\" }],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [{ internalType: \"string\", name: \"name\", type: \"string\" }],\n name: \"available\",\n outputs: [{ internalType: \"bool\", name: \"\", type: \"bool\" }],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"cancelOwnershipHandover\",\n outputs: [],\n stateMutability: \"payable\",\n type: \"function\",\n },\n {\n inputs: [{ internalType: \"address\", name: \"pendingOwner\", type: \"address\" }],\n name: \"completeOwnershipHandover\",\n outputs: [],\n stateMutability: \"payable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n components: [\n { internalType: \"string\", name: \"name\", type: \"string\" },\n { internalType: \"address\", name: \"owner\", type: \"address\" },\n { internalType: \"uint256\", name: \"duration\", type: \"uint256\" },\n { internalType: \"address\", name: \"resolver\", type: \"address\" },\n { internalType: \"bytes[]\", name: \"data\", type: \"bytes[]\" },\n { internalType: \"bool\", name: \"reverseRecord\", type: \"bool\" },\n ],\n internalType: \"struct EARegistrarController.RegisterRequest\",\n name: \"request\",\n type: \"tuple\",\n },\n { internalType: \"bytes32\", name: \"discountKey\", type: \"bytes32\" },\n { internalType: \"bytes\", name: \"validationData\", type: \"bytes\" },\n ],\n name: \"discountedRegister\",\n outputs: [],\n stateMutability: \"payable\",\n type: \"function\",\n },\n {\n inputs: [\n { internalType: \"string\", name: \"name\", type: \"string\" },\n { internalType: \"uint256\", name: \"duration\", type: \"uint256\" },\n { internalType: \"bytes32\", name: \"discountKey\", type: \"bytes32\" },\n ],\n name: \"discountedRegisterPrice\",\n outputs: [{ internalType: \"uint256\", name: \"price\", type: \"uint256\" }],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [{ internalType: \"address\", name: \"registrant\", type: \"address\" }],\n name: \"discountedRegistrants\",\n outputs: [{ internalType: \"bool\", name: \"hasRegisteredWithDiscount\", type: \"bool\" }],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [{ internalType: \"bytes32\", name: \"key\", type: \"bytes32\" }],\n name: \"discounts\",\n outputs: [\n { internalType: \"bool\", name: \"active\", type: \"bool\" },\n { internalType: \"address\", name: \"discountValidator\", type: \"address\" },\n { internalType: \"bytes32\", name: \"key\", type: \"bytes32\" },\n { internalType: \"uint256\", name: \"discount\", type: \"uint256\" },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getActiveDiscounts\",\n outputs: [\n {\n components: [\n { internalType: \"bool\", name: \"active\", type: \"bool\" },\n {\n internalType: \"address\",\n name: \"discountValidator\",\n type: \"address\",\n },\n { internalType: \"bytes32\", name: \"key\", type: \"bytes32\" },\n { internalType: \"uint256\", name: \"discount\", type: \"uint256\" },\n ],\n internalType: \"struct EARegistrarController.DiscountDetails[]\",\n name: \"\",\n type: \"tuple[]\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [{ internalType: \"address[]\", name: \"addresses\", type: \"address[]\" }],\n name: \"hasRegisteredWithDiscount\",\n outputs: [{ internalType: \"bool\", name: \"\", type: \"bool\" }],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"owner\",\n outputs: [{ internalType: \"address\", name: \"result\", type: \"address\" }],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [{ internalType: \"address\", name: \"pendingOwner\", type: \"address\" }],\n name: \"ownershipHandoverExpiresAt\",\n outputs: [{ internalType: \"uint256\", name: \"result\", type: \"uint256\" }],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"paymentReceiver\",\n outputs: [{ internalType: \"address\", name: \"\", type: \"address\" }],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"prices\",\n outputs: [{ internalType: \"contract IPriceOracle\", name: \"\", type: \"address\" }],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n { internalType: \"address\", name: \"_token\", type: \"address\" },\n { internalType: \"address\", name: \"_to\", type: \"address\" },\n { internalType: \"uint256\", name: \"_amount\", type: \"uint256\" },\n ],\n name: \"recoverFunds\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n { internalType: \"string\", name: \"name\", type: \"string\" },\n { internalType: \"uint256\", name: \"duration\", type: \"uint256\" },\n ],\n name: \"registerPrice\",\n outputs: [{ internalType: \"uint256\", name: \"\", type: \"uint256\" }],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"renounceOwnership\",\n outputs: [],\n stateMutability: \"payable\",\n type: \"function\",\n },\n {\n inputs: [\n { internalType: \"string\", name: \"name\", type: \"string\" },\n { internalType: \"uint256\", name: \"duration\", type: \"uint256\" },\n ],\n name: \"rentPrice\",\n outputs: [\n {\n components: [\n { internalType: \"uint256\", name: \"base\", type: \"uint256\" },\n { internalType: \"uint256\", name: \"premium\", type: \"uint256\" },\n ],\n internalType: \"struct IPriceOracle.Price\",\n name: \"price\",\n type: \"tuple\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"requestOwnershipHandover\",\n outputs: [],\n stateMutability: \"payable\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"reverseRegistrar\",\n outputs: [{ internalType: \"contract IReverseRegistrar\", name: \"\", type: \"address\" }],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"rootName\",\n outputs: [{ internalType: \"string\", name: \"\", type: \"string\" }],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"rootNode\",\n outputs: [{ internalType: \"bytes32\", name: \"\", type: \"bytes32\" }],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n components: [\n { internalType: \"bool\", name: \"active\", type: \"bool\" },\n {\n internalType: \"address\",\n name: \"discountValidator\",\n type: \"address\",\n },\n { internalType: \"bytes32\", name: \"key\", type: \"bytes32\" },\n { internalType: \"uint256\", name: \"discount\", type: \"uint256\" },\n ],\n internalType: \"struct EARegistrarController.DiscountDetails\",\n name: \"details\",\n type: \"tuple\",\n },\n ],\n name: \"setDiscountDetails\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [{ internalType: \"address\", name: \"paymentReceiver_\", type: \"address\" }],\n name: \"setPaymentReceiver\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"contract IPriceOracle\",\n name: \"prices_\",\n type: \"address\",\n },\n ],\n name: \"setPriceOracle\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"contract IReverseRegistrar\",\n name: \"reverse_\",\n type: \"address\",\n },\n ],\n name: \"setReverseRegistrar\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [{ internalType: \"address\", name: \"newOwner\", type: \"address\" }],\n name: \"transferOwnership\",\n outputs: [],\n stateMutability: \"payable\",\n type: \"function\",\n },\n {\n inputs: [{ internalType: \"string\", name: \"name\", type: \"string\" }],\n name: \"valid\",\n outputs: [{ internalType: \"bool\", name: \"\", type: \"bool\" }],\n stateMutability: \"pure\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"withdrawETH\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n] as const satisfies Abi;\n","import type { Abi } from \"viem\";\n\nexport const RegistrarController = [\n {\n inputs: [\n {\n internalType: \"contract BaseRegistrar\",\n name: \"base_\",\n type: \"address\",\n },\n {\n internalType: \"contract IPriceOracle\",\n name: \"prices_\",\n type: \"address\",\n },\n {\n internalType: \"contract IReverseRegistrar\",\n name: \"reverseRegistrar_\",\n type: \"address\",\n },\n { internalType: \"address\", name: \"owner_\", type: \"address\" },\n { internalType: \"bytes32\", name: \"rootNode_\", type: \"bytes32\" },\n { internalType: \"string\", name: \"rootName_\", type: \"string\" },\n { internalType: \"address\", name: \"paymentReceiver_\", type: \"address\" },\n ],\n stateMutability: \"nonpayable\",\n type: \"constructor\",\n },\n {\n inputs: [{ internalType: \"address\", name: \"target\", type: \"address\" }],\n name: \"AddressEmptyCode\",\n type: \"error\",\n },\n {\n inputs: [{ internalType: \"address\", name: \"account\", type: \"address\" }],\n name: \"AddressInsufficientBalance\",\n type: \"error\",\n },\n { inputs: [], name: \"AlreadyInitialized\", type: \"error\" },\n {\n inputs: [{ internalType: \"address\", name: \"sender\", type: \"address\" }],\n name: \"AlreadyRegisteredWithDiscount\",\n type: \"error\",\n },\n {\n inputs: [{ internalType: \"uint256\", name: \"duration\", type: \"uint256\" }],\n name: \"DurationTooShort\",\n type: \"error\",\n },\n { inputs: [], name: \"FailedInnerCall\", type: \"error\" },\n {\n inputs: [{ internalType: \"bytes32\", name: \"key\", type: \"bytes32\" }],\n name: \"InactiveDiscount\",\n type: \"error\",\n },\n { inputs: [], name: \"InsufficientValue\", type: \"error\" },\n {\n inputs: [\n { internalType: \"bytes32\", name: \"key\", type: \"bytes32\" },\n { internalType: \"bytes\", name: \"data\", type: \"bytes\" },\n ],\n name: \"InvalidDiscount\",\n type: \"error\",\n },\n {\n inputs: [{ internalType: \"bytes32\", name: \"key\", type: \"bytes32\" }],\n name: \"InvalidDiscountAmount\",\n type: \"error\",\n },\n { inputs: [], name: \"InvalidPaymentReceiver\", type: \"error\" },\n {\n inputs: [\n { internalType: \"bytes32\", name: \"key\", type: \"bytes32\" },\n { internalType: \"address\", name: \"validator\", type: \"address\" },\n ],\n name: \"InvalidValidator\",\n type: \"error\",\n },\n {\n inputs: [{ internalType: \"string\", name: \"name\", type: \"string\" }],\n name: \"NameNotAvailable\",\n type: \"error\",\n },\n { inputs: [], name: \"NewOwnerIsZeroAddress\", type: \"error\" },\n { inputs: [], name: \"NoHandoverRequest\", type: \"error\" },\n { inputs: [], name: \"ResolverRequiredWhenDataSupplied\", type: \"error\" },\n {\n inputs: [{ internalType: \"address\", name: \"token\", type: \"address\" }],\n name: \"SafeERC20FailedOperation\",\n type: \"error\",\n },\n { inputs: [], name: \"TransferFailed\", type: \"error\" },\n { inputs: [], name: \"Unauthorized\", type: \"error\" },\n {\n anonymous: false,\n inputs: [\n {\n indexed: true,\n internalType: \"address\",\n name: \"registrant\",\n type: \"address\",\n },\n {\n indexed: true,\n internalType: \"bytes32\",\n name: \"discountKey\",\n type: \"bytes32\",\n },\n ],\n name: \"DiscountApplied\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: true,\n internalType: \"bytes32\",\n name: \"discountKey\",\n type: \"bytes32\",\n },\n {\n components: [\n { internalType: \"bool\", name: \"active\", type: \"bool\" },\n {\n internalType: \"address\",\n name: \"discountValidator\",\n type: \"address\",\n },\n { internalType: \"bytes32\", name: \"key\", type: \"bytes32\" },\n { internalType: \"uint256\", name: \"discount\", type: \"uint256\" },\n ],\n indexed: false,\n internalType: \"struct RegistrarController.DiscountDetails\",\n name: \"details\",\n type: \"tuple\",\n },\n ],\n name: \"DiscountUpdated\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: true,\n internalType: \"address\",\n name: \"payee\",\n type: \"address\",\n },\n {\n indexed: false,\n internalType: \"uint256\",\n name: \"price\",\n type: \"uint256\",\n },\n ],\n name: \"ETHPaymentProcessed\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n { indexed: false, internalType: \"string\", name: \"name\", type: \"string\" },\n {\n indexed: true,\n internalType: \"bytes32\",\n name: \"label\",\n type: \"bytes32\",\n },\n {\n indexed: true,\n internalType: \"address\",\n name: \"owner\",\n type: \"address\",\n },\n {\n indexed: false,\n internalType: \"uint256\",\n name: \"expires\",\n type: \"uint256\",\n },\n ],\n name: \"NameRegistered\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n { indexed: false, internalType: \"string\", name: \"name\", type: \"string\" },\n {\n indexed: true,\n internalType: \"bytes32\",\n name: \"label\",\n type: \"bytes32\",\n },\n {\n indexed: false,\n internalType: \"uint256\",\n name: \"expires\",\n type: \"uint256\",\n },\n ],\n name: \"NameRenewed\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: true,\n internalType: \"address\",\n name: \"pendingOwner\",\n type: \"address\",\n },\n ],\n name: \"OwnershipHandoverCanceled\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: true,\n internalType: \"address\",\n name: \"pendingOwner\",\n type: \"address\",\n },\n ],\n name: \"OwnershipHandoverRequested\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: true,\n internalType: \"address\",\n name: \"oldOwner\",\n type: \"address\",\n },\n {\n indexed: true,\n internalType: \"address\",\n name: \"newOwner\",\n type: \"address\",\n },\n ],\n name: \"OwnershipTransferred\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: false,\n internalType: \"address\",\n name: \"newPaymentReceiver\",\n type: \"address\",\n },\n ],\n name: \"PaymentReceiverUpdated\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: false,\n internalType: \"address\",\n name: \"newPrices\",\n type: \"address\",\n },\n ],\n name: \"PriceOracleUpdated\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: false,\n internalType: \"address\",\n name: \"newReverseRegistrar\",\n type: \"address\",\n },\n ],\n name: \"ReverseRegistrarUpdated\",\n type: \"event\",\n },\n {\n inputs: [],\n name: \"MIN_NAME_LENGTH\",\n outputs: [{ internalType: \"uint256\", name: \"\", type: \"uint256\" }],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"MIN_REGISTRATION_DURATION\",\n outputs: [{ internalType: \"uint256\", name: \"\", type: \"uint256\" }],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [{ internalType: \"string\", name: \"name\", type: \"string\" }],\n name: \"available\",\n outputs: [{ internalType: \"bool\", name: \"\", type: \"bool\" }],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"cancelOwnershipHandover\",\n outputs: [],\n stateMutability: \"payable\",\n type: \"function\",\n },\n {\n inputs: [{ internalType: \"address\", name: \"pendingOwner\", type: \"address\" }],\n name: \"completeOwnershipHandover\",\n outputs: [],\n stateMutability: \"payable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n components: [\n { internalType: \"string\", name: \"name\", type: \"string\" },\n { internalType: \"address\", name: \"owner\", type: \"address\" },\n { internalType: \"uint256\", name: \"duration\", type: \"uint256\" },\n { internalType: \"address\", name: \"resolver\", type: \"address\" },\n { internalType: \"bytes[]\", name: \"data\", type: \"bytes[]\" },\n { internalType: \"bool\", name: \"reverseRecord\", type: \"bool\" },\n ],\n internalType: \"struct RegistrarController.RegisterRequest\",\n name: \"request\",\n type: \"tuple\",\n },\n { internalType: \"bytes32\", name: \"discountKey\", type: \"bytes32\" },\n { internalType: \"bytes\", name: \"validationData\", type: \"bytes\" },\n ],\n name: \"discountedRegister\",\n outputs: [],\n stateMutability: \"payable\",\n type: \"function\",\n },\n {\n inputs: [\n { internalType: \"string\", name: \"name\", type: \"string\" },\n { internalType: \"uint256\", name: \"duration\", type: \"uint256\" },\n { internalType: \"bytes32\", name: \"discountKey\", type: \"bytes32\" },\n ],\n name: \"discountedRegisterPrice\",\n outputs: [{ internalType: \"uint256\", name: \"price\", type: \"uint256\" }],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [{ internalType: \"address\", name: \"registrant\", type: \"address\" }],\n name: \"discountedRegistrants\",\n outputs: [{ internalType: \"bool\", name: \"hasRegisteredWithDiscount\", type: \"bool\" }],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [{ internalType: \"bytes32\", name: \"key\", type: \"bytes32\" }],\n name: \"discounts\",\n outputs: [\n { internalType: \"bool\", name: \"active\", type: \"bool\" },\n { internalType: \"address\", name: \"discountValidator\", type: \"address\" },\n { internalType: \"bytes32\", name: \"key\", type: \"bytes32\" },\n { internalType: \"uint256\", name: \"discount\", type: \"uint256\" },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getActiveDiscounts\",\n outputs: [\n {\n components: [\n { internalType: \"bool\", name: \"active\", type: \"bool\" },\n {\n internalType: \"address\",\n name: \"discountValidator\",\n type: \"address\",\n },\n { internalType: \"bytes32\", name: \"key\", type: \"bytes32\" },\n { internalType: \"uint256\", name: \"discount\", type: \"uint256\" },\n ],\n internalType: \"struct RegistrarController.DiscountDetails[]\",\n name: \"\",\n type: \"tuple[]\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [{ internalType: \"address[]\", name: \"addresses\", type: \"address[]\" }],\n name: \"hasRegisteredWithDiscount\",\n outputs: [{ internalType: \"bool\", name: \"\", type: \"bool\" }],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"launchTime\",\n outputs: [{ internalType: \"uint256\", name: \"\", type: \"uint256\" }],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"owner\",\n outputs: [{ internalType: \"address\", name: \"result\", type: \"address\" }],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [{ internalType: \"address\", name: \"pendingOwner\", type: \"address\" }],\n name: \"ownershipHandoverExpiresAt\",\n outputs: [{ internalType: \"uint256\", name: \"result\", type: \"uint256\" }],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"paymentReceiver\",\n outputs: [{ internalType: \"address\", name: \"\", type: \"address\" }],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"prices\",\n outputs: [{ internalType: \"contract IPriceOracle\", name: \"\", type: \"address\" }],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n { internalType: \"address\", name: \"_token\", type: \"address\" },\n { internalType: \"address\", name: \"_to\", type: \"address\" },\n { internalType: \"uint256\", name: \"_amount\", type: \"uint256\" },\n ],\n name: \"recoverFunds\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n components: [\n { internalType: \"string\", name: \"name\", type: \"string\" },\n { internalType: \"address\", name: \"owner\", type: \"address\" },\n { internalType: \"uint256\", name: \"duration\", type: \"uint256\" },\n { internalType: \"address\", name: \"resolver\", type: \"address\" },\n { internalType: \"bytes[]\", name: \"data\", type: \"bytes[]\" },\n { internalType: \"bool\", name: \"reverseRecord\", type: \"bool\" },\n ],\n internalType: \"struct RegistrarController.RegisterRequest\",\n name: \"request\",\n type: \"tuple\",\n },\n ],\n name: \"register\",\n outputs: [],\n stateMutability: \"payable\",\n type: \"function\",\n },\n {\n inputs: [\n { internalType: \"string\", name: \"name\", type: \"string\" },\n { internalType: \"uint256\", name: \"duration\", type: \"uint256\" },\n ],\n name: \"registerPrice\",\n outputs: [{ internalType: \"uint256\", name: \"\", type: \"uint256\" }],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n { internalType: \"string\", name: \"name\", type: \"string\" },\n { internalType: \"uint256\", name: \"duration\", type: \"uint256\" },\n ],\n name: \"renew\",\n outputs: [],\n stateMutability: \"payable\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"renounceOwnership\",\n outputs: [],\n stateMutability: \"payable\",\n type: \"function\",\n },\n {\n inputs: [\n { internalType: \"string\", name: \"name\", type: \"string\" },\n { internalType: \"uint256\", name: \"duration\", type: \"uint256\" },\n ],\n name: \"rentPrice\",\n outputs: [\n {\n components: [\n { internalType: \"uint256\", name: \"base\", type: \"uint256\" },\n { internalType: \"uint256\", name: \"premium\", type: \"uint256\" },\n ],\n internalType: \"struct IPriceOracle.Price\",\n name: \"price\",\n type: \"tuple\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"requestOwnershipHandover\",\n outputs: [],\n stateMutability: \"payable\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"reverseRegistrar\",\n outputs: [{ internalType: \"contract IReverseRegistrar\", name: \"\", type: \"address\" }],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"rootName\",\n outputs: [{ internalType: \"string\", name: \"\", type: \"string\" }],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"rootNode\",\n outputs: [{ internalType: \"bytes32\", name: \"\", type: \"bytes32\" }],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n components: [\n { internalType: \"bool\", name: \"active\", type: \"bool\" },\n {\n internalType: \"address\",\n name: \"discountValidator\",\n type: \"address\",\n },\n { internalType: \"bytes32\", name: \"key\", type: \"bytes32\" },\n { internalType: \"uint256\", name: \"discount\", type: \"uint256\" },\n ],\n internalType: \"struct RegistrarController.DiscountDetails\",\n name: \"details\",\n type: \"tuple\",\n },\n ],\n name: \"setDiscountDetails\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [{ internalType: \"uint256\", name: \"launchTime_\", type: \"uint256\" }],\n name: \"setLaunchTime\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [{ internalType: \"address\", name: \"paymentReceiver_\", type: \"address\" }],\n name: \"setPaymentReceiver\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"contract IPriceOracle\",\n name: \"prices_\",\n type: \"address\",\n },\n ],\n name: \"setPriceOracle\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"contract IReverseRegistrar\",\n name: \"reverse_\",\n type: \"address\",\n },\n ],\n name: \"setReverseRegistrar\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [{ internalType: \"address\", name: \"newOwner\", type: \"address\" }],\n name: \"transferOwnership\",\n outputs: [],\n stateMutability: \"payable\",\n type: \"function\",\n },\n {\n inputs: [{ internalType: \"string\", name: \"name\", type: \"string\" }],\n name: \"valid\",\n outputs: [{ internalType: \"bool\", name: \"\", type: \"bool\" }],\n stateMutability: \"pure\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"withdrawETH\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n] as const satisfies Abi;\n","import type { Abi } from \"viem\";\n\nexport const UpgradeableRegistrarController = [\n { inputs: [], stateMutability: \"nonpayable\", type: \"constructor\" },\n {\n inputs: [{ internalType: \"address\", name: \"sender\", type: \"address\" }],\n name: \"AlreadyRegisteredWithDiscount\",\n type: \"error\",\n },\n {\n inputs: [{ internalType: \"uint256\", name: \"duration\", type: \"uint256\" }],\n name: \"DurationTooShort\",\n type: \"error\",\n },\n {\n inputs: [{ internalType: \"bytes32\", name: \"key\", type: \"bytes32\" }],\n name: \"InactiveDiscount\",\n type: \"error\",\n },\n { inputs: [], name: \"InsufficientValue\", type: \"error\" },\n {\n inputs: [\n { internalType: \"bytes32\", name: \"key\", type: \"bytes32\" },\n { internalType: \"bytes\", name: \"data\", type: \"bytes\" },\n ],\n name: \"InvalidDiscount\",\n type: \"error\",\n },\n {\n inputs: [{ internalType: \"bytes32\", name: \"key\", type: \"bytes32\" }],\n name: \"InvalidDiscountAmount\",\n type: \"error\",\n },\n { inputs: [], name: \"InvalidInitialization\", type: \"error\" },\n { inputs: [], name: \"InvalidPaymentReceiver\", type: \"error\" },\n {\n inputs: [\n { internalType: \"bytes32\", name: \"key\", type: \"bytes32\" },\n { internalType: \"address\", name: \"validator\", type: \"address\" },\n ],\n name: \"InvalidValidator\",\n type: \"error\",\n },\n {\n inputs: [{ internalType: \"string\", name: \"name\", type: \"string\" }],\n name: \"NameNotValid\",\n type: \"error\",\n },\n { inputs: [], name: \"NotInitializing\", type: \"error\" },\n {\n inputs: [{ internalType: \"address\", name: \"owner\", type: \"address\" }],\n name: \"OwnableInvalidOwner\",\n type: \"error\",\n },\n {\n inputs: [{ internalType: \"address\", name: \"account\", type: \"address\" }],\n name: \"OwnableUnauthorizedAccount\",\n type: \"error\",\n },\n { inputs: [], name: \"ResolverRequiredWhenDataSupplied\", type: \"error\" },\n { inputs: [], name: \"TransferFailed\", type: \"error\" },\n { inputs: [], name: \"ZeroAddress\", type: \"error\" },\n {\n anonymous: false,\n inputs: [\n { indexed: true, internalType: \"address\", name: \"registrant\", type: \"address\" },\n { indexed: true, internalType: \"bytes32\", name: \"discountKey\", type: \"bytes32\" },\n ],\n name: \"DiscountApplied\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n { indexed: true, internalType: \"bytes32\", name: \"discountKey\", type: \"bytes32\" },\n {\n components: [\n { internalType: \"bool\", name: \"active\", type: \"bool\" },\n { internalType: \"address\", name: \"discountValidator\", type: \"address\" },\n { internalType: \"bytes32\", name: \"key\", type: \"bytes32\" },\n { internalType: \"uint256\", name: \"discount\", type: \"uint256\" },\n ],\n indexed: false,\n internalType: \"struct UpgradeableRegistrarController.DiscountDetails\",\n name: \"details\",\n type: \"tuple\",\n },\n ],\n name: \"DiscountUpdated\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n { indexed: true, internalType: \"address\", name: \"payee\", type: \"address\" },\n { indexed: false, internalType: \"uint256\", name: \"price\", type: \"uint256\" },\n ],\n name: \"ETHPaymentProcessed\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [{ indexed: false, internalType: \"uint64\", name: \"version\", type: \"uint64\" }],\n name: \"Initialized\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n { indexed: false, internalType: \"address\", name: \"newL2ReverseRegistrar\", type: \"address\" },\n ],\n name: \"L2ReverseRegistrarUpdated\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n { indexed: false, internalType: \"string\", name: \"name\", type: \"string\" },\n { indexed: true, internalType: \"bytes32\", name: \"label\", type: \"bytes32\" },\n { indexed: true, internalType: \"address\", name: \"owner\", type: \"address\" },\n { indexed: false, internalType: \"uint256\", name: \"expires\", type: \"uint256\" },\n ],\n name: \"NameRegistered\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n { indexed: false, internalType: \"string\", name: \"name\", type: \"string\" },\n { indexed: true, internalType: \"bytes32\", name: \"label\", type: \"bytes32\" },\n { indexed: false, internalType: \"uint256\", name: \"expires\", type: \"uint256\" },\n ],\n name: \"NameRenewed\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n { indexed: true, internalType: \"address\", name: \"previousOwner\", type: \"address\" },\n { indexed: true, internalType: \"address\", name: \"newOwner\", type: \"address\" },\n ],\n name: \"OwnershipTransferStarted\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n { indexed: true, internalType: \"address\", name: \"previousOwner\", type: \"address\" },\n { indexed: true, internalType: \"address\", name: \"newOwner\", type: \"address\" },\n ],\n name: \"OwnershipTransferred\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n { indexed: false, internalType: \"address\", name: \"newPaymentReceiver\", type: \"address\" },\n ],\n name: \"PaymentReceiverUpdated\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [{ indexed: false, internalType: \"address\", name: \"newPrices\", type: \"address\" }],\n name: \"PriceOracleUpdated\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n { indexed: false, internalType: \"address\", name: \"newReverseRegistrar\", type: \"address\" },\n ],\n name: \"ReverseRegistrarUpdated\",\n type: \"event\",\n },\n {\n inputs: [],\n name: \"MIN_NAME_LENGTH\",\n outputs: [{ internalType: \"uint256\", name: \"\", type: \"uint256\" }],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"MIN_REGISTRATION_DURATION\",\n outputs: [{ internalType: \"uint256\", name: \"\", type: \"uint256\" }],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"acceptOwnership\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [{ internalType: \"string\", name: \"name\", type: \"string\" }],\n name: \"available\",\n outputs: [{ internalType: \"bool\", name: \"\", type: \"bool\" }],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n components: [\n { internalType: \"string\", name: \"name\", type: \"string\" },\n { internalType: \"address\", name: \"owner\", type: \"address\" },\n { internalType: \"uint256\", name: \"duration\", type: \"uint256\" },\n { internalType: \"address\", name: \"resolver\", type: \"address\" },\n { internalType: \"bytes[]\", name: \"data\", type: \"bytes[]\" },\n { internalType: \"bool\", name: \"reverseRecord\", type: \"bool\" },\n { internalType: \"uint256[]\", name: \"coinTypes\", type: \"uint256[]\" },\n { internalType: \"uint256\", name: \"signatureExpiry\", type: \"uint256\" },\n { internalType: \"bytes\", name: \"signature\", type: \"bytes\" },\n ],\n internalType: \"struct UpgradeableRegistrarController.RegisterRequest\",\n name: \"request\",\n type: \"tuple\",\n },\n { internalType: \"bytes32\", name: \"discountKey\", type: \"bytes32\" },\n { internalType: \"bytes\", name: \"validationData\", type: \"bytes\" },\n ],\n name: \"discountedRegister\",\n outputs: [],\n stateMutability: \"payable\",\n type: \"function\",\n },\n {\n inputs: [\n { internalType: \"string\", name: \"name\", type: \"string\" },\n { internalType: \"uint256\", name: \"duration\", type: \"uint256\" },\n { internalType: \"bytes32\", name: \"discountKey\", type: \"bytes32\" },\n ],\n name: \"discountedRegisterPrice\",\n outputs: [{ internalType: \"uint256\", name: \"price\", type: \"uint256\" }],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [{ internalType: \"bytes32\", name: \"discountKey\", type: \"bytes32\" }],\n name: \"discounts\",\n outputs: [\n {\n components: [\n { internalType: \"bool\", name: \"active\", type: \"bool\" },\n { internalType: \"address\", name: \"discountValidator\", type: \"address\" },\n { internalType: \"bytes32\", name: \"key\", type: \"bytes32\" },\n { internalType: \"uint256\", name: \"discount\", type: \"uint256\" },\n ],\n internalType: \"struct UpgradeableRegistrarController.DiscountDetails\",\n name: \"\",\n type: \"tuple\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getActiveDiscounts\",\n outputs: [\n {\n components: [\n { internalType: \"bool\", name: \"active\", type: \"bool\" },\n { internalType: \"address\", name: \"discountValidator\", type: \"address\" },\n { internalType: \"bytes32\", name: \"key\", type: \"bytes32\" },\n { internalType: \"uint256\", name: \"discount\", type: \"uint256\" },\n ],\n internalType: \"struct UpgradeableRegistrarController.DiscountDetails[]\",\n name: \"\",\n type: \"tuple[]\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [{ internalType: \"address[]\", name: \"addresses\", type: \"address[]\" }],\n name: \"hasRegisteredWithDiscount\",\n outputs: [{ internalType: \"bool\", name: \"\", type: \"bool\" }],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n { internalType: \"contract IBaseRegistrar\", name: \"base_\", type: \"address\" },\n { internalType: \"contract IPriceOracle\", name: \"prices_\", type: \"address\" },\n { internalType: \"contract IReverseRegistrar\", name: \"reverseRegistrar_\", type: \"address\" },\n { internalType: \"address\", name: \"owner_\", type: \"address\" },\n { internalType: \"bytes32\", name: \"rootNode_\", type: \"bytes32\" },\n { internalType: \"string\", name: \"rootName_\", type: \"string\" },\n { internalType: \"address\", name: \"paymentReceiver_\", type: \"address\" },\n { internalType: \"address\", name: \"legacyRegistrarController_\", type: \"address\" },\n { internalType: \"address\", name: \"legacyL2Resolver_\", type: \"address\" },\n { internalType: \"address\", name: \"l2ReverseRegistrar_\", type: \"address\" },\n ],\n name: \"initialize\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"owner\",\n outputs: [{ internalType: \"address\", name: \"\", type: \"address\" }],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"paymentReceiver\",\n outputs: [{ internalType: \"address\", name: \"\", type: \"address\" }],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"pendingOwner\",\n outputs: [{ internalType: \"address\", name: \"\", type: \"address\" }],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"prices\",\n outputs: [{ internalType: \"contract IPriceOracle\", name: \"\", type: \"address\" }],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n components: [\n { internalType: \"string\", name: \"name\", type: \"string\" },\n { internalType: \"address\", name: \"owner\", type: \"address\" },\n { internalType: \"uint256\", name: \"duration\", type: \"uint256\" },\n { internalType: \"address\", name: \"resolver\", type: \"address\" },\n { internalType: \"bytes[]\", name: \"data\", type: \"bytes[]\" },\n { internalType: \"bool\", name: \"reverseRecord\", type: \"bool\" },\n { internalType: \"uint256[]\", name: \"coinTypes\", type: \"uint256[]\" },\n { internalType: \"uint256\", name: \"signatureExpiry\", type: \"uint256\" },\n { internalType: \"bytes\", name: \"signature\", type: \"bytes\" },\n ],\n internalType: \"struct UpgradeableRegistrarController.RegisterRequest\",\n name: \"request\",\n type: \"tuple\",\n },\n ],\n name: \"register\",\n outputs: [],\n stateMutability: \"payable\",\n type: \"function\",\n },\n {\n inputs: [\n { internalType: \"string\", name: \"name\", type: \"string\" },\n { internalType: \"uint256\", name: \"duration\", type: \"uint256\" },\n ],\n name: \"registerPrice\",\n outputs: [{ internalType: \"uint256\", name: \"\", type: \"uint256\" }],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n { internalType: \"string\", name: \"name\", type: \"string\" },\n { internalType: \"uint256\", name: \"duration\", type: \"uint256\" },\n ],\n name: \"renew\",\n outputs: [],\n stateMutability: \"payable\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"renounceOwnership\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n { internalType: \"string\", name: \"name\", type: \"string\" },\n { internalType: \"uint256\", name: \"duration\", type: \"uint256\" },\n ],\n name: \"rentPrice\",\n outputs: [\n {\n components: [\n { internalType: \"uint256\", name: \"base\", type: \"uint256\" },\n { internalType: \"uint256\", name: \"premium\", type: \"uint256\" },\n ],\n internalType: \"struct IPriceOracle.Price\",\n name: \"price\",\n type: \"tuple\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"reverseRegistrar\",\n outputs: [{ internalType: \"contract IReverseRegistrar\", name: \"\", type: \"address\" }],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n components: [\n { internalType: \"bool\", name: \"active\", type: \"bool\" },\n { internalType: \"address\", name: \"discountValidator\", type: \"address\" },\n { internalType: \"bytes32\", name: \"key\", type: \"bytes32\" },\n { internalType: \"uint256\", name: \"discount\", type: \"uint256\" },\n ],\n internalType: \"struct UpgradeableRegistrarController.DiscountDetails\",\n name: \"details\",\n type: \"tuple\",\n },\n ],\n name: \"setDiscountDetails\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [{ internalType: \"address\", name: \"l2ReverseRegistrar_\", type: \"address\" }],\n name: \"setL2ReverseRegistrar\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [{ internalType: \"address\", name: \"paymentReceiver_\", type: \"address\" }],\n name: \"setPaymentReceiver\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [{ internalType: \"contract IPriceOracle\", name: \"prices_\", type: \"address\" }],\n name: \"setPriceOracle\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n { internalType: \"string\", name: \"name\", type: \"string\" },\n { internalType: \"uint256\", name: \"signatureExpiry\", type: \"uint256\" },\n { internalType: \"uint256[]\", name: \"coinTypes\", type: \"uint256[]\" },\n { internalType: \"bytes\", name: \"signature\", type: \"bytes\" },\n ],\n name: \"setReverseRecord\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [{ internalType: \"contract IReverseRegistrar\", name: \"reverse_\", type: \"address\" }],\n name: \"setReverseRegistrar\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [{ internalType: \"address\", name: \"newOwner\", type: \"address\" }],\n name: \"transferOwnership\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [{ internalType: \"string\", name: \"name\", type: \"string\" }],\n name: \"valid\",\n outputs: [{ internalType: \"bool\", name: \"\", type: \"bool\" }],\n stateMutability: \"pure\",\n type: \"function\",\n },\n { inputs: [], name: \"withdrawETH\", outputs: [], stateMutability: \"nonpayable\", type: \"function\" },\n] as const satisfies Abi;\n","import type { Abi } from \"viem\";\n\nexport const EthRegistrarController = [\n {\n inputs: [\n {\n internalType: \"contract BaseRegistrarImplementation\",\n name: \"_base\",\n type: \"address\",\n },\n {\n internalType: \"contract IPriceOracle\",\n name: \"_prices\",\n type: \"address\",\n },\n { internalType: \"uint256\", name: \"_minCommitmentAge\", type: \"uint256\" },\n { internalType: \"uint256\", name: \"_maxCommitmentAge\", type: \"uint256\" },\n {\n internalType: \"contract ReverseRegistrar\",\n name: \"_reverseRegistrar\",\n type: \"address\",\n },\n {\n internalType: \"contract INameWrapper\",\n name: \"_nameWrapper\",\n type: \"address\",\n },\n { internalType: \"contract ENS\", name: \"_ens\", type: \"address\" },\n {\n internalType: \"contract PohVerifier\",\n name: \"_pohVerifier\",\n type: \"address\",\n },\n {\n internalType: \"contract PohRegistrationManager\",\n name: \"_pohRegistrationManager\",\n type: \"address\",\n },\n { internalType: \"bytes32\", name: \"_baseNode\", type: \"bytes32\" },\n { internalType: \"string\", name: \"_baseDomain\", type: \"string\" },\n ],\n stateMutability: \"nonpayable\",\n type: \"constructor\",\n },\n { inputs: [], name: \"BaseNodeAsETHNodeOrROOTNodeNotAllowed\", type: \"error\" },\n {\n inputs: [{ internalType: \"bytes32\", name: \"commitment\", type: \"bytes32\" }],\n name: \"CommitmentTooNew\",\n type: \"error\",\n },\n {\n inputs: [{ internalType: \"bytes32\", name: \"commitment\", type: \"bytes32\" }],\n name: \"CommitmentTooOld\",\n type: \"error\",\n },\n { inputs: [], name: \"DifferentBaseDomainBaseNode\", type: \"error\" },\n {\n inputs: [{ internalType: \"uint256\", name: \"duration\", type: \"uint256\" }],\n name: \"DurationTooShort\",\n type: \"error\",\n },\n { inputs: [], name: \"EmptyStringNotAllowed\", type: \"error\" },\n { inputs: [], name: \"InsufficientValue\", type: \"error\" },\n { inputs: [], name: \"MaxCommitmentAgeTooHigh\", type: \"error\" },\n { inputs: [], name: \"MaxCommitmentAgeTooLow\", type: \"error\" },\n {\n inputs: [{ internalType: \"string\", name: \"name\", type: \"string\" }],\n name: \"NameNotAvailable\",\n type: \"error\",\n },\n {\n inputs: [{ internalType: \"address\", name: \"owner\", type: \"address\" }],\n name: \"OwnerAlreadyRegistered\",\n type: \"error\",\n },\n {\n inputs: [{ internalType: \"address\", name: \"owner\", type: \"address\" }],\n name: \"PohVerificationFailed\",\n type: \"error\",\n },\n {\n inputs: [\n { internalType: \"uint256\", name: \"currentTime\", type: \"uint256\" },\n { internalType: \"uint256\", name: \"renewTimeStart\", type: \"uint256\" },\n ],\n name: \"RenewPOHNotStarted\",\n type: \"error\",\n },\n { inputs: [], name: \"ResolverRequiredWhenDataSupplied\", type: \"error\" },\n {\n inputs: [\n { internalType: \"address\", name: \"owner\", type: \"address\" },\n { internalType: \"address\", name: \"sender\", type: \"address\" },\n ],\n name: \"SenderNotOwner\",\n type: \"error\",\n },\n {\n inputs: [{ internalType: \"bytes32\", name: \"commitment\", type: \"bytes32\" }],\n name: \"UnexpiredCommitmentExists\",\n type: \"error\",\n },\n {\n inputs: [{ internalType: \"uint256\", name: \"duration\", type: \"uint256\" }],\n name: \"WrongPohRegistrationDuration\",\n type: \"error\",\n },\n { inputs: [], name: \"ZeroAddressNotAllowed\", type: \"error\" },\n {\n anonymous: false,\n inputs: [\n { indexed: false, internalType: \"string\", name: \"name\", type: \"string\" },\n {\n indexed: true,\n internalType: \"bytes32\",\n name: \"label\",\n type: \"bytes32\",\n },\n {\n indexed: true,\n internalType: \"address\",\n name: \"owner\",\n type: \"address\",\n },\n {\n indexed: false,\n internalType: \"uint256\",\n name: \"baseCost\",\n type: \"uint256\",\n },\n {\n indexed: false,\n internalType: \"uint256\",\n name: \"premium\",\n type: \"uint256\",\n },\n {\n indexed: false,\n internalType: \"uint256\",\n name: \"expires\",\n type: \"uint256\",\n },\n ],\n name: \"NameRegistered\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n { indexed: false, internalType: \"string\", name: \"name\", type: \"string\" },\n {\n indexed: true,\n internalType: \"bytes32\",\n name: \"label\",\n type: \"bytes32\",\n },\n {\n indexed: false,\n internalType: \"uint256\",\n name: \"cost\",\n type: \"uint256\",\n },\n {\n indexed: false,\n internalType: \"uint256\",\n name: \"expires\",\n type: \"uint256\",\n },\n ],\n name: \"NameRenewed\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n { indexed: false, internalType: \"string\", name: \"name\", type: \"string\" },\n {\n indexed: true,\n internalType: \"bytes32\",\n name: \"label\",\n type: \"bytes32\",\n },\n {\n indexed: false,\n internalType: \"uint256\",\n name: \"expires\",\n type: \"uint256\",\n },\n ],\n name: \"NameRenewedPoh\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n { indexed: false, internalType: \"string\", name: \"name\", type: \"string\" },\n {\n indexed: true,\n internalType: \"bytes32\",\n name: \"label\",\n type: \"bytes32\",\n },\n {\n indexed: true,\n internalType: \"address\",\n name: \"owner\",\n type: \"address\",\n },\n {\n indexed: false,\n internalType: \"uint256\",\n name: \"expires\",\n type: \"uint256\",\n },\n ],\n name: \"OwnerNameRegistered\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: true,\n internalType: \"address\",\n name: \"previousOwner\",\n type: \"address\",\n },\n {\n indexed: true,\n internalType: \"address\",\n name: \"newOwner\",\n type: \"address\",\n },\n ],\n name: \"OwnershipTransferred\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n { indexed: false, internalType: \"string\", name: \"name\", type: \"string\" },\n {\n indexed: true,\n internalType: \"bytes32\",\n name: \"label\",\n type: \"bytes32\",\n },\n {\n indexed: true,\n internalType: \"address\",\n name: \"owner\",\n type: \"address\",\n },\n {\n indexed: false,\n internalType: \"uint256\",\n name: \"expires\",\n type: \"uint256\",\n },\n ],\n name: \"PohNameRegistered\",\n type: \"event\",\n },\n {\n inputs: [],\n name: \"GRACE_PERIOD\",\n outputs: [{ internalType: \"uint256\", name: \"\", type: \"uint256\" }],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"MIN_REGISTRATION_DURATION\",\n outputs: [{ internalType: \"uint256\", name: \"\", type: \"uint256\" }],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"POH_REGISTRATION_DURATION\",\n outputs: [{ internalType: \"uint256\", name: \"\", type: \"uint256\" }],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [{ internalType: \"string\", name: \"name\", type: \"string\" }],\n name: \"available\",\n outputs: [{ internalType: \"bool\", name: \"\", type: \"bool\" }],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"baseDomain\",\n outputs: [{ internalType: \"string\", name: \"\", type: \"string\" }],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"baseNode\",\n outputs: [{ internalType: \"bytes32\", name: \"\", type: \"bytes32\" }],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [{ internalType: \"bytes32\", name: \"commitment\", type: \"bytes32\" }],\n name: \"commit\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [{ internalType: \"bytes32\", name: \"\", type: \"bytes32\" }],\n name: \"commitments\",\n outputs: [{ internalType: \"uint256\", name: \"\", type: \"uint256\" }],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n { internalType: \"string\", name: \"name\", type: \"string\" },\n { internalType: \"address\", name: \"owner\", type: \"address\" },\n { internalType: \"uint256\", name: \"duration\", type: \"uint256\" },\n { internalType: \"bytes32\", name: \"secret\", type: \"bytes32\" },\n { internalType: \"address\", name: \"resolver\", type: \"address\" },\n { internalType: \"bytes[]\", name: \"data\", type: \"bytes[]\" },\n { internalType: \"bool\", name: \"reverseRecord\", type: \"bool\" },\n { internalType: \"uint16\", name: \"ownerControlledFuses\", type: \"uint16\" },\n ],\n name: \"makeCommitment\",\n outputs: [{ internalType: \"bytes32\", name: \"\", type: \"bytes32\" }],\n stateMutability: \"pure\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"maxCommitmentAge\",\n outputs: [{ internalType: \"uint256\", name: \"\", type: \"uint256\" }],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"minCommitmentAge\",\n outputs: [{ internalType: \"uint256\", name: \"\", type: \"uint256\" }],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"nameWrapper\",\n outputs: [{ internalType: \"contract INameWrapper\", name: \"\", type: \"address\" }],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"owner\",\n outputs: [{ internalType: \"address\", name: \"\", type: \"address\" }],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n { internalType: \"string\", name: \"name\", type: \"string\" },\n { internalType: \"address\", name: \"owner\", type: \"address\" },\n { internalType: \"uint256\", name: \"duration\", type: \"uint256\" },\n { internalType: \"address\", name: \"resolver\", type: \"address\" },\n { internalType: \"bytes[]\", name: \"data\", type: \"bytes[]\" },\n { internalType: \"uint16\", name: \"ownerControlledFuses\", type: \"uint16\" },\n { internalType: \"bool\", name: \"reverseRecord\", type: \"bool\" },\n ],\n name: \"ownerRegister\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"pohRegistrationManager\",\n outputs: [\n {\n internalType: \"contract PohRegistrationManager\",\n name: \"\",\n type: \"address\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"pohVerifier\",\n outputs: [{ internalType: \"contract PohVerifier\", name: \"\", type: \"address\" }],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"prices\",\n outputs: [{ internalType: \"contract IPriceOracle\", name: \"\", type: \"address\" }],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n { internalType: \"address\", name: \"_token\", type: \"address\" },\n { internalType: \"address\", name: \"_to\", type: \"address\" },\n { internalType: \"uint256\", name: \"_amount\", type: \"uint256\" },\n ],\n name: \"recoverFunds\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [{ internalType: \"address\", name: \"_address\", type: \"address\" }],\n name: \"redeemed\",\n outputs: [{ internalType: \"bool\", name: \"\", type: \"bool\" }],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n { internalType: \"string\", name: \"name\", type: \"string\" },\n { internalType: \"address\", name: \"owner\", type: \"address\" },\n { internalType: \"uint256\", name: \"duration\", type: \"uint256\" },\n { internalType: \"bytes32\", name: \"secret\", type: \"bytes32\" },\n { internalType: \"address\", name: \"resolver\", type: \"address\" },\n { internalType: \"bytes[]\", name: \"data\", type: \"bytes[]\" },\n { internalType: \"bool\", name: \"reverseRecord\", type: \"bool\" },\n { internalType: \"uint16\", name: \"ownerControlledFuses\", type: \"uint16\" },\n ],\n name: \"register\",\n outputs: [],\n stateMutability: \"payable\",\n type: \"function\",\n },\n {\n inputs: [\n { internalType: \"string\", name: \"name\", type: \"string\" },\n { internalType: \"address\", name: \"owner\", type: \"address\" },\n { internalType: \"uint256\", name: \"duration\", type: \"uint256\" },\n { internalType: \"bytes32\", name: \"secret\", type: \"bytes32\" },\n { internalType: \"address\", name: \"resolver\", type: \"address\" },\n { internalType: \"bytes[]\", name: \"data\", type: \"bytes[]\" },\n { internalType: \"bool\", name: \"reverseRecord\", type: \"bool\" },\n { internalType: \"uint16\", name: \"ownerControlledFuses\", type: \"uint16\" },\n { internalType: \"bytes\", name: \"signature\", type: \"bytes\" },\n ],\n name: \"registerPoh\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n { internalType: \"string\", name: \"name\", type: \"string\" },\n { internalType: \"uint256\", name: \"duration\", type: \"uint256\" },\n ],\n name: \"renew\",\n outputs: [],\n stateMutability: \"payable\",\n type: \"function\",\n },\n {\n inputs: [\n { internalType: \"string\", name: \"name\", type: \"string\" },\n { internalType: \"bytes\", name: \"signature\", type: \"bytes\" },\n ],\n name: \"renewPoh\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"renounceOwnership\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n { internalType: \"string\", name: \"name\", type: \"string\" },\n { internalType: \"uint256\", name: \"duration\", type: \"uint256\" },\n ],\n name: \"rentPrice\",\n outputs: [\n {\n components: [\n { internalType: \"uint256\", name: \"base\", type: \"uint256\" },\n { internalType: \"uint256\", name: \"premium\", type: \"uint256\" },\n ],\n internalType: \"struct IPriceOracle.Price\",\n name: \"price\",\n type: \"tuple\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"reverseRegistrar\",\n outputs: [{ internalType: \"contract ReverseRegistrar\", name: \"\", type: \"address\" }],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [{ internalType: \"bytes4\", name: \"interfaceID\", type: \"bytes4\" }],\n name: \"supportsInterface\",\n outputs: [{ internalType: \"bool\", name: \"\", type: \"bool\" }],\n stateMutability: \"pure\",\n type: \"function\",\n },\n {\n inputs: [{ internalType: \"address\", name: \"newOwner\", type: \"address\" }],\n name: \"transferOwnership\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [{ internalType: \"string\", name: \"name\", type: \"string\" }],\n name: \"valid\",\n outputs: [{ internalType: \"bool\", name: \"\", type: \"bool\" }],\n stateMutability: \"pure\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"withdraw\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n] as const satisfies Abi;\n","import type { Abi } from \"viem\";\n\nexport const LegacyEthRegistrarController = [\n {\n constant: true,\n inputs: [{ name: \"interfaceID\", type: \"bytes4\" }],\n name: \"supportsInterface\",\n outputs: [{ name: \"\", type: \"bool\" }],\n payable: false,\n stateMutability: \"pure\",\n type: \"function\",\n },\n {\n constant: false,\n inputs: [],\n name: \"withdraw\",\n outputs: [],\n payable: false,\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n constant: false,\n inputs: [{ name: \"_prices\", type: \"address\" }],\n name: \"setPriceOracle\",\n outputs: [],\n payable: false,\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n constant: false,\n inputs: [],\n name: \"renounceOwnership\",\n outputs: [],\n payable: false,\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n constant: false,\n inputs: [\n { name: \"_minCommitmentAge\", type: \"uint256\" },\n { name: \"_maxCommitmentAge\", type: \"uint256\" },\n ],\n name: \"setCommitmentAges\",\n outputs: [],\n payable: false,\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n constant: true,\n inputs: [{ name: \"\", type: \"bytes32\" }],\n name: \"commitments\",\n outputs: [{ name: \"\", type: \"uint256\" }],\n payable: false,\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n constant: true,\n inputs: [\n { name: \"name\", type: \"string\" },\n { name: \"duration\", type: \"uint256\" },\n ],\n name: \"rentPrice\",\n outputs: [{ name: \"\", type: \"uint256\" }],\n payable: false,\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n constant: false,\n inputs: [\n { name: \"name\", type: \"string\" },\n { name: \"owner\", type: \"address\" },\n { name: \"duration\", type: \"uint256\" },\n { name: \"secret\", type: \"bytes32\" },\n ],\n name: \"register\",\n outputs: [],\n payable: true,\n stateMutability: \"payable\",\n type: \"function\",\n },\n {\n constant: true,\n inputs: [],\n name: \"MIN_REGISTRATION_DURATION\",\n outputs: [{ name: \"\", type: \"uint256\" }],\n payable: false,\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n constant: true,\n inputs: [],\n name: \"minCommitmentAge\",\n outputs: [{ name: \"\", type: \"uint256\" }],\n payable: false,\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n constant: true,\n inputs: [],\n name: \"owner\",\n outputs: [{ name: \"\", type: \"address\" }],\n payable: false,\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n constant: true,\n inputs: [],\n name: \"isOwner\",\n outputs: [{ name: \"\", type: \"bool\" }],\n payable: false,\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n constant: true,\n inputs: [{ name: \"name\", type: \"string\" }],\n name: \"valid\",\n outputs: [{ name: \"\", type: \"bool\" }],\n payable: false,\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n constant: false,\n inputs: [\n { name: \"name\", type: \"string\" },\n { name: \"duration\", type: \"uint256\" },\n ],\n name: \"renew\",\n outputs: [],\n payable: true,\n stateMutability: \"payable\",\n type: \"function\",\n },\n {\n constant: true,\n inputs: [{ name: \"name\", type: \"string\" }],\n name: \"available\",\n outputs: [{ name: \"\", type: \"bool\" }],\n payable: false,\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n constant: true,\n inputs: [],\n name: \"maxCommitmentAge\",\n outputs: [{ name: \"\", type: \"uint256\" }],\n payable: false,\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n constant: false,\n inputs: [{ name: \"commitment\", type: \"bytes32\" }],\n name: \"commit\",\n outputs: [],\n payable: false,\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n constant: false,\n inputs: [{ name: \"newOwner\", type: \"address\" }],\n name: \"transferOwnership\",\n outputs: [],\n payable: false,\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n constant: true,\n inputs: [\n { name: \"name\", type: \"string\" },\n { name: \"owner\", type: \"address\" },\n { name: \"secret\", type: \"bytes32\" },\n ],\n name: \"makeCommitment\",\n outputs: [{ name: \"\", type: \"bytes32\" }],\n payable: false,\n stateMutability: \"pure\",\n type: \"function\",\n },\n {\n inputs: [\n { name: \"_base\", type: \"address\" },\n { name: \"_prices\", type: \"address\" },\n { name: \"_minCommitmentAge\", type: \"uint256\" },\n { name: \"_maxCommitmentAge\", type: \"uint256\" },\n ],\n payable: false,\n stateMutability: \"nonpayable\",\n type: \"constructor\",\n },\n {\n anonymous: false,\n inputs: [\n { indexed: false, name: \"name\", type: \"string\" },\n { indexed: true, name: \"label\", type: \"bytes32\" },\n { indexed: true, name: \"owner\", type: \"address\" },\n { indexed: false, name: \"cost\", type: \"uint256\" },\n { indexed: false, name: \"expires\", type: \"uint256\" },\n ],\n name: \"NameRegistered\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n { indexed: false, name: \"name\", type: \"string\" },\n { indexed: true, name: \"label\", type: \"bytes32\" },\n { indexed: false, name: \"cost\", type: \"uint256\" },\n { indexed: false, name: \"expires\", type: \"uint256\" },\n ],\n name: \"NameRenewed\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [{ indexed: true, name: \"oracle\", type: \"address\" }],\n name: \"NewPriceOracle\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n { indexed: true, name: \"previousOwner\", type: \"address\" },\n { indexed: true, name: \"newOwner\", type: \"address\" },\n ],\n name: \"OwnershipTransferred\",\n type: \"event\",\n },\n] as const satisfies Abi;\n","import type { Abi } from \"viem\";\n\nexport const UnwrappedEthRegistrarController = [\n {\n inputs: [\n {\n internalType: \"contract BaseRegistrarImplementation\",\n name: \"_base\",\n type: \"address\",\n },\n {\n internalType: \"contract IPriceOracle\",\n name: \"_prices\",\n type: \"address\",\n },\n {\n internalType: \"uint256\",\n name: \"_minCommitmentAge\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"_maxCommitmentAge\",\n type: \"uint256\",\n },\n {\n internalType: \"contract IReverseRegistrar\",\n name: \"_reverseRegistrar\",\n type: \"address\",\n },\n {\n internalType: \"contract IDefaultReverseRegistrar\",\n name: \"_defaultReverseRegistrar\",\n type: \"address\",\n },\n {\n internalType: \"contract ENS\",\n name: \"_ens\",\n type: \"address\",\n },\n ],\n stateMutability: \"nonpayable\",\n type: \"constructor\",\n },\n {\n inputs: [\n {\n internalType: \"bytes32\",\n name: \"commitment\",\n type: \"bytes32\",\n },\n ],\n name: \"CommitmentNotFound\",\n type: \"error\",\n },\n {\n inputs: [\n {\n internalType: \"bytes32\",\n name: \"commitment\",\n type: \"bytes32\",\n },\n {\n internalType: \"uint256\",\n name: \"minimumCommitmentTimestamp\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"currentTimestamp\",\n type: \"uint256\",\n },\n ],\n name: \"CommitmentTooNew\",\n type: \"error\",\n },\n {\n inputs: [\n {\n internalType: \"bytes32\",\n name: \"commitment\",\n type: \"bytes32\",\n },\n {\n internalType: \"uint256\",\n name: \"maximumCommitmentTimestamp\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"currentTimestamp\",\n type: \"uint256\",\n },\n ],\n name: \"CommitmentTooOld\",\n type: \"error\",\n },\n {\n inputs: [\n {\n internalType: \"uint256\",\n name: \"duration\",\n type: \"uint256\",\n },\n ],\n name: \"DurationTooShort\",\n type: \"error\",\n },\n {\n inputs: [],\n name: \"InsufficientValue\",\n type: \"error\",\n },\n {\n inputs: [],\n name: \"MaxCommitmentAgeTooHigh\",\n type: \"error\",\n },\n {\n inputs: [],\n name: \"MaxCommitmentAgeTooLow\",\n type: \"error\",\n },\n {\n inputs: [\n {\n internalType: \"string\",\n name: \"name\",\n type: \"string\",\n },\n ],\n name: \"NameNotAvailable\",\n type: \"error\",\n },\n {\n inputs: [],\n name: \"ResolverRequiredForReverseRecord\",\n type: \"error\",\n },\n {\n inputs: [],\n name: \"ResolverRequiredWhenDataSupplied\",\n type: \"error\",\n },\n {\n inputs: [\n {\n internalType: \"bytes32\",\n name: \"commitment\",\n type: \"bytes32\",\n },\n ],\n name: \"UnexpiredCommitmentExists\",\n type: \"error\",\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: false,\n internalType: \"string\",\n name: \"label\",\n type: \"string\",\n },\n {\n indexed: true,\n internalType: \"bytes32\",\n name: \"labelhash\",\n type: \"bytes32\",\n },\n {\n indexed: true,\n internalType: \"address\",\n name: \"owner\",\n type: \"address\",\n },\n {\n indexed: false,\n internalType: \"uint256\",\n name: \"baseCost\",\n type: \"uint256\",\n },\n {\n indexed: false,\n internalType: \"uint256\",\n name: \"premium\",\n type: \"uint256\",\n },\n {\n indexed: false,\n internalType: \"uint256\",\n name: \"expires\",\n type: \"uint256\",\n },\n {\n indexed: false,\n internalType: \"bytes32\",\n name: \"referrer\",\n type: \"bytes32\",\n },\n ],\n name: \"NameRegistered\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: false,\n internalType: \"string\",\n name: \"label\",\n type: \"string\",\n },\n {\n indexed: true,\n internalType: \"bytes32\",\n name: \"labelhash\",\n type: \"bytes32\",\n },\n {\n indexed: false,\n internalType: \"uint256\",\n name: \"cost\",\n type: \"uint256\",\n },\n {\n indexed: false,\n internalType: \"uint256\",\n name: \"expires\",\n type: \"uint256\",\n },\n {\n indexed: false,\n internalType: \"bytes32\",\n name: \"referrer\",\n type: \"bytes32\",\n },\n ],\n name: \"NameRenewed\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: true,\n internalType: \"address\",\n name: \"previousOwner\",\n type: \"address\",\n },\n {\n indexed: true,\n internalType: \"address\",\n name: \"newOwner\",\n type: \"address\",\n },\n ],\n name: \"OwnershipTransferred\",\n type: \"event\",\n },\n {\n inputs: [],\n name: \"MIN_REGISTRATION_DURATION\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"string\",\n name: \"label\",\n type: \"string\",\n },\n ],\n name: \"available\",\n outputs: [\n {\n internalType: \"bool\",\n name: \"\",\n type: \"bool\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"bytes32\",\n name: \"commitment\",\n type: \"bytes32\",\n },\n ],\n name: \"commit\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"bytes32\",\n name: \"\",\n type: \"bytes32\",\n },\n ],\n name: \"commitments\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"defaultReverseRegistrar\",\n outputs: [\n {\n internalType: \"contract IDefaultReverseRegistrar\",\n name: \"\",\n type: \"address\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"ens\",\n outputs: [\n {\n internalType: \"contract ENS\",\n name: \"\",\n type: \"address\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n components: [\n {\n internalType: \"string\",\n name: \"label\",\n type: \"string\",\n },\n {\n internalType: \"address\",\n name: \"owner\",\n type: \"address\",\n },\n {\n internalType: \"uint256\",\n name: \"duration\",\n type: \"uint256\",\n },\n {\n internalType: \"bytes32\",\n name: \"secret\",\n type: \"bytes32\",\n },\n {\n internalType: \"address\",\n name: \"resolver\",\n type: \"address\",\n },\n {\n internalType: \"bytes[]\",\n name: \"data\",\n type: \"bytes[]\",\n },\n {\n internalType: \"uint8\",\n name: \"reverseRecord\",\n type: \"uint8\",\n },\n {\n internalType: \"bytes32\",\n name: \"referrer\",\n type: \"bytes32\",\n },\n ],\n internalType: \"struct IETHRegistrarController.Registration\",\n name: \"registration\",\n type: \"tuple\",\n },\n ],\n name: \"makeCommitment\",\n outputs: [\n {\n internalType: \"bytes32\",\n name: \"commitment\",\n type: \"bytes32\",\n },\n ],\n stateMutability: \"pure\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"maxCommitmentAge\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"minCommitmentAge\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"owner\",\n outputs: [\n {\n internalType: \"address\",\n name: \"\",\n type: \"address\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"prices\",\n outputs: [\n {\n internalType: \"contract IPriceOracle\",\n name: \"\",\n type: \"address\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"address\",\n name: \"_token\",\n type: \"address\",\n },\n {\n internalType: \"address\",\n name: \"_to\",\n type: \"address\",\n },\n {\n internalType: \"uint256\",\n name: \"_amount\",\n type: \"uint256\",\n },\n ],\n name: \"recoverFunds\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n components: [\n {\n internalType: \"string\",\n name: \"label\",\n type: \"string\",\n },\n {\n internalType: \"address\",\n name: \"owner\",\n type: \"address\",\n },\n {\n internalType: \"uint256\",\n name: \"duration\",\n type: \"uint256\",\n },\n {\n internalType: \"bytes32\",\n name: \"secret\",\n type: \"bytes32\",\n },\n {\n internalType: \"address\",\n name: \"resolver\",\n type: \"address\",\n },\n {\n internalType: \"bytes[]\",\n name: \"data\",\n type: \"bytes[]\",\n },\n {\n internalType: \"uint8\",\n name: \"reverseRecord\",\n type: \"uint8\",\n },\n {\n internalType: \"bytes32\",\n name: \"referrer\",\n type: \"bytes32\",\n },\n ],\n internalType: \"struct IETHRegistrarController.Registration\",\n name: \"registration\",\n type: \"tuple\",\n },\n ],\n name: \"register\",\n outputs: [],\n stateMutability: \"payable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"string\",\n name: \"label\",\n type: \"string\",\n },\n {\n internalType: \"uint256\",\n name: \"duration\",\n type: \"uint256\",\n },\n {\n internalType: \"bytes32\",\n name: \"referrer\",\n type: \"bytes32\",\n },\n ],\n name: \"renew\",\n outputs: [],\n stateMutability: \"payable\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"renounceOwnership\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"string\",\n name: \"label\",\n type: \"string\",\n },\n {\n internalType: \"uint256\",\n name: \"duration\",\n type: \"uint256\",\n },\n ],\n name: \"rentPrice\",\n outputs: [\n {\n components: [\n {\n internalType: \"uint256\",\n name: \"base\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"premium\",\n type: \"uint256\",\n },\n ],\n internalType: \"struct IPriceOracle.Price\",\n name: \"price\",\n type: \"tuple\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"reverseRegistrar\",\n outputs: [\n {\n internalType: \"contract IReverseRegistrar\",\n name: \"\",\n type: \"address\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"bytes4\",\n name: \"interfaceID\",\n type: \"bytes4\",\n },\n ],\n name: \"supportsInterface\",\n outputs: [\n {\n internalType: \"bool\",\n name: \"\",\n type: \"bool\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"address\",\n name: \"newOwner\",\n type: \"address\",\n },\n ],\n name: \"transferOwnership\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"string\",\n name: \"label\",\n type: \"string\",\n },\n ],\n name: \"valid\",\n outputs: [\n {\n internalType: \"bool\",\n name: \"\",\n type: \"bool\",\n },\n ],\n stateMutability: \"pure\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"withdraw\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n] as const satisfies Abi;\n","import type { Abi } from \"viem\";\n\nexport const WrappedEthRegistrarController = [\n {\n inputs: [\n {\n internalType: \"contract BaseRegistrarImplementation\",\n name: \"_base\",\n type: \"address\",\n },\n {\n internalType: \"contract IPriceOracle\",\n name: \"_prices\",\n type: \"address\",\n },\n {\n internalType: \"uint256\",\n name: \"_minCommitmentAge\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"_maxCommitmentAge\",\n type: \"uint256\",\n },\n {\n internalType: \"contract ReverseRegistrar\",\n name: \"_reverseRegistrar\",\n type: \"address\",\n },\n {\n internalType: \"contract INameWrapper\",\n name: \"_nameWrapper\",\n type: \"address\",\n },\n ],\n stateMutability: \"nonpayable\",\n type: \"constructor\",\n },\n {\n inputs: [\n {\n internalType: \"bytes32\",\n name: \"commitment\",\n type: \"bytes32\",\n },\n ],\n name: \"CommitmentTooNew\",\n type: \"error\",\n },\n {\n inputs: [\n {\n internalType: \"bytes32\",\n name: \"commitment\",\n type: \"bytes32\",\n },\n ],\n name: \"CommitmentTooOld\",\n type: \"error\",\n },\n {\n inputs: [\n {\n internalType: \"uint256\",\n name: \"duration\",\n type: \"uint256\",\n },\n ],\n name: \"DurationTooShort\",\n type: \"error\",\n },\n {\n inputs: [],\n name: \"InsufficientValue\",\n type: \"error\",\n },\n {\n inputs: [],\n name: \"MaxCommitmentAgeTooHigh\",\n type: \"error\",\n },\n {\n inputs: [],\n name: \"MaxCommitmentAgeTooLow\",\n type: \"error\",\n },\n {\n inputs: [\n {\n internalType: \"string\",\n name: \"name\",\n type: \"string\",\n },\n ],\n name: \"NameNotAvailable\",\n type: \"error\",\n },\n {\n inputs: [],\n name: \"ResolverRequiredWhenDataSupplied\",\n type: \"error\",\n },\n {\n inputs: [\n {\n internalType: \"bytes32\",\n name: \"commitment\",\n type: \"bytes32\",\n },\n ],\n name: \"UnexpiredCommitmentExists\",\n type: \"error\",\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: false,\n internalType: \"string\",\n name: \"name\",\n type: \"string\",\n },\n {\n indexed: true,\n internalType: \"bytes32\",\n name: \"label\",\n type: \"bytes32\",\n },\n {\n indexed: true,\n internalType: \"address\",\n name: \"owner\",\n type: \"address\",\n },\n {\n indexed: false,\n internalType: \"uint256\",\n name: \"baseCost\",\n type: \"uint256\",\n },\n {\n indexed: false,\n internalType: \"uint256\",\n name: \"premium\",\n type: \"uint256\",\n },\n {\n indexed: false,\n internalType: \"uint256\",\n name: \"expires\",\n type: \"uint256\",\n },\n ],\n name: \"NameRegistered\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: false,\n internalType: \"string\",\n name: \"name\",\n type: \"string\",\n },\n {\n indexed: true,\n internalType: \"bytes32\",\n name: \"label\",\n type: \"bytes32\",\n },\n {\n indexed: false,\n internalType: \"uint256\",\n name: \"cost\",\n type: \"uint256\",\n },\n {\n indexed: false,\n internalType: \"uint256\",\n name: \"expires\",\n type: \"uint256\",\n },\n ],\n name: \"NameRenewed\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: true,\n internalType: \"address\",\n name: \"previousOwner\",\n type: \"address\",\n },\n {\n indexed: true,\n internalType: \"address\",\n name: \"newOwner\",\n type: \"address\",\n },\n ],\n name: \"OwnershipTransferred\",\n type: \"event\",\n },\n {\n inputs: [],\n name: \"MIN_REGISTRATION_DURATION\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"string\",\n name: \"name\",\n type: \"string\",\n },\n ],\n name: \"available\",\n outputs: [\n {\n internalType: \"bool\",\n name: \"\",\n type: \"bool\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"bytes32\",\n name: \"commitment\",\n type: \"bytes32\",\n },\n ],\n name: \"commit\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"bytes32\",\n name: \"\",\n type: \"bytes32\",\n },\n ],\n name: \"commitments\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"string\",\n name: \"name\",\n type: \"string\",\n },\n {\n internalType: \"address\",\n name: \"owner\",\n type: \"address\",\n },\n {\n internalType: \"uint256\",\n name: \"duration\",\n type: \"uint256\",\n },\n {\n internalType: \"bytes32\",\n name: \"secret\",\n type: \"bytes32\",\n },\n {\n internalType: \"address\",\n name: \"resolver\",\n type: \"address\",\n },\n {\n internalType: \"bytes[]\",\n name: \"data\",\n type: \"bytes[]\",\n },\n {\n internalType: \"bool\",\n name: \"reverseRecord\",\n type: \"bool\",\n },\n {\n internalType: \"uint16\",\n name: \"ownerControlledFuses\",\n type: \"uint16\",\n },\n ],\n name: \"makeCommitment\",\n outputs: [\n {\n internalType: \"bytes32\",\n name: \"\",\n type: \"bytes32\",\n },\n ],\n stateMutability: \"pure\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"maxCommitmentAge\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"minCommitmentAge\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"nameWrapper\",\n outputs: [\n {\n internalType: \"contract INameWrapper\",\n name: \"\",\n type: \"address\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"owner\",\n outputs: [\n {\n internalType: \"address\",\n name: \"\",\n type: \"address\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"prices\",\n outputs: [\n {\n internalType: \"contract IPriceOracle\",\n name: \"\",\n type: \"address\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"address\",\n name: \"_token\",\n type: \"address\",\n },\n {\n internalType: \"address\",\n name: \"_to\",\n type: \"address\",\n },\n {\n internalType: \"uint256\",\n name: \"_amount\",\n type: \"uint256\",\n },\n ],\n name: \"recoverFunds\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"string\",\n name: \"name\",\n type: \"string\",\n },\n {\n internalType: \"address\",\n name: \"owner\",\n type: \"address\",\n },\n {\n internalType: \"uint256\",\n name: \"duration\",\n type: \"uint256\",\n },\n {\n internalType: \"bytes32\",\n name: \"secret\",\n type: \"bytes32\",\n },\n {\n internalType: \"address\",\n name: \"resolver\",\n type: \"address\",\n },\n {\n internalType: \"bytes[]\",\n name: \"data\",\n type: \"bytes[]\",\n },\n {\n internalType: \"bool\",\n name: \"reverseRecord\",\n type: \"bool\",\n },\n {\n internalType: \"uint16\",\n name: \"ownerControlledFuses\",\n type: \"uint16\",\n },\n ],\n name: \"register\",\n outputs: [],\n stateMutability: \"payable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"string\",\n name: \"name\",\n type: \"string\",\n },\n {\n internalType: \"uint256\",\n name: \"duration\",\n type: \"uint256\",\n },\n ],\n name: \"renew\",\n outputs: [],\n stateMutability: \"payable\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"renounceOwnership\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"string\",\n name: \"name\",\n type: \"string\",\n },\n {\n internalType: \"uint256\",\n name: \"duration\",\n type: \"uint256\",\n },\n ],\n name: \"rentPrice\",\n outputs: [\n {\n components: [\n {\n internalType: \"uint256\",\n name: \"base\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"premium\",\n type: \"uint256\",\n },\n ],\n internalType: \"struct IPriceOracle.Price\",\n name: \"price\",\n type: \"tuple\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"reverseRegistrar\",\n outputs: [\n {\n internalType: \"contract ReverseRegistrar\",\n name: \"\",\n type: \"address\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"bytes4\",\n name: \"interfaceID\",\n type: \"bytes4\",\n },\n ],\n name: \"supportsInterface\",\n outputs: [\n {\n internalType: \"bool\",\n name: \"\",\n type: \"bool\",\n },\n ],\n stateMutability: \"pure\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"address\",\n name: \"newOwner\",\n type: \"address\",\n },\n ],\n name: \"transferOwnership\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"string\",\n name: \"name\",\n type: \"string\",\n },\n ],\n name: \"valid\",\n outputs: [\n {\n internalType: \"bool\",\n name: \"\",\n type: \"bool\",\n },\n ],\n stateMutability: \"pure\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"withdraw\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n] as const satisfies Abi;\n","import { type Chain, localhost } from \"viem/chains\";\n\n/**\n * The Default Chain Id for Devnet\n * @see https://github.com/ensdomains/contracts-v2/blob/762de44d60b2588b2e92a6d29df941c4de821ae6/contracts/script/setup.ts#L40\n */\nconst DEVNET_DEFAULT_CHAIN_ID = 0xeeeeed;\n\nexport const ensTestEnvChain = {\n ...localhost,\n id: DEVNET_DEFAULT_CHAIN_ID,\n name: \"ens-test-env\",\n rpcUrls: { default: { http: [\"http://localhost:8545\"] } },\n} as const satisfies Chain;\n","import type { Abi } from \"viem\";\n\nexport const AbstractReverseResolver = [\n {\n inputs: [\n {\n internalType: \"bytes\",\n name: \"dns\",\n type: \"bytes\",\n },\n ],\n name: \"DNSDecodingFailed\",\n type: \"error\",\n },\n {\n inputs: [\n {\n internalType: \"bytes\",\n name: \"name\",\n type: \"bytes\",\n },\n ],\n name: \"UnreachableName\",\n type: \"error\",\n },\n {\n inputs: [\n {\n internalType: \"bytes4\",\n name: \"selector\",\n type: \"bytes4\",\n },\n ],\n name: \"UnsupportedResolverProfile\",\n type: \"error\",\n },\n {\n inputs: [],\n name: \"chainId\",\n outputs: [\n {\n internalType: \"uint32\",\n name: \"\",\n type: \"uint32\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"chainRegistrar\",\n outputs: [\n {\n internalType: \"address\",\n name: \"\",\n type: \"address\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"coinType\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"bytes\",\n name: \"name\",\n type: \"bytes\",\n },\n {\n internalType: \"bytes\",\n name: \"data\",\n type: \"bytes\",\n },\n ],\n name: \"resolve\",\n outputs: [\n {\n internalType: \"bytes\",\n name: \"result\",\n type: \"bytes\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"address[]\",\n name: \"addrs\",\n type: \"address[]\",\n },\n ],\n name: \"resolveNames\",\n outputs: [\n {\n internalType: \"string[]\",\n name: \"names\",\n type: \"string[]\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"bytes4\",\n name: \"interfaceId\",\n type: \"bytes4\",\n },\n ],\n name: \"supportsInterface\",\n outputs: [\n {\n internalType: \"bool\",\n name: \"\",\n type: \"bool\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n] as const satisfies Abi;\n","import type { Abi } from \"viem\";\n\nexport const LegacyPublicResolver = [\n {\n inputs: [\n {\n internalType: \"contract ENS\",\n name: \"_ens\",\n type: \"address\",\n },\n ],\n payable: false,\n stateMutability: \"nonpayable\",\n type: \"constructor\",\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: true,\n internalType: \"bytes32\",\n name: \"node\",\n type: \"bytes32\",\n },\n {\n indexed: true,\n internalType: \"uint256\",\n name: \"contentType\",\n type: \"uint256\",\n },\n ],\n name: \"ABIChanged\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: true,\n internalType: \"bytes32\",\n name: \"node\",\n type: \"bytes32\",\n },\n {\n indexed: false,\n internalType: \"address\",\n name: \"a\",\n type: \"address\",\n },\n ],\n name: \"AddrChanged\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: true,\n internalType: \"bytes32\",\n name: \"node\",\n type: \"bytes32\",\n },\n {\n indexed: false,\n internalType: \"uint256\",\n name: \"coinType\",\n type: \"uint256\",\n },\n {\n indexed: false,\n internalType: \"bytes\",\n name: \"newAddress\",\n type: \"bytes\",\n },\n ],\n name: \"AddressChanged\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: true,\n internalType: \"bytes32\",\n name: \"node\",\n type: \"bytes32\",\n },\n {\n indexed: true,\n internalType: \"address\",\n name: \"owner\",\n type: \"address\",\n },\n {\n indexed: true,\n internalType: \"address\",\n name: \"target\",\n type: \"address\",\n },\n {\n indexed: false,\n internalType: \"bool\",\n name: \"isAuthorised\",\n type: \"bool\",\n },\n ],\n name: \"AuthorisationChanged\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: true,\n internalType: \"bytes32\",\n name: \"node\",\n type: \"bytes32\",\n },\n {\n indexed: false,\n internalType: \"bytes\",\n name: \"hash\",\n type: \"bytes\",\n },\n ],\n name: \"ContenthashChanged\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: true,\n internalType: \"bytes32\",\n name: \"node\",\n type: \"bytes32\",\n },\n {\n indexed: false,\n internalType: \"bytes\",\n name: \"name\",\n type: \"bytes\",\n },\n {\n indexed: false,\n internalType: \"uint16\",\n name: \"resource\",\n type: \"uint16\",\n },\n {\n indexed: false,\n internalType: \"bytes\",\n name: \"record\",\n type: \"bytes\",\n },\n ],\n name: \"DNSRecordChanged\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: true,\n internalType: \"bytes32\",\n name: \"node\",\n type: \"bytes32\",\n },\n {\n indexed: false,\n internalType: \"bytes\",\n name: \"name\",\n type: \"bytes\",\n },\n {\n indexed: false,\n internalType: \"uint16\",\n name: \"resource\",\n type: \"uint16\",\n },\n ],\n name: \"DNSRecordDeleted\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: true,\n internalType: \"bytes32\",\n name: \"node\",\n type: \"bytes32\",\n },\n ],\n name: \"DNSZoneCleared\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: true,\n internalType: \"bytes32\",\n name: \"node\",\n type: \"bytes32\",\n },\n {\n indexed: true,\n internalType: \"bytes4\",\n name: \"interfaceID\",\n type: \"bytes4\",\n },\n {\n indexed: false,\n internalType: \"address\",\n name: \"implementer\",\n type: \"address\",\n },\n ],\n name: \"InterfaceChanged\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: true,\n internalType: \"bytes32\",\n name: \"node\",\n type: \"bytes32\",\n },\n {\n indexed: false,\n internalType: \"string\",\n name: \"name\",\n type: \"string\",\n },\n ],\n name: \"NameChanged\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: true,\n internalType: \"bytes32\",\n name: \"node\",\n type: \"bytes32\",\n },\n {\n indexed: false,\n internalType: \"bytes32\",\n name: \"x\",\n type: \"bytes32\",\n },\n {\n indexed: false,\n internalType: \"bytes32\",\n name: \"y\",\n type: \"bytes32\",\n },\n ],\n name: \"PubkeyChanged\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: true,\n internalType: \"bytes32\",\n name: \"node\",\n type: \"bytes32\",\n },\n {\n indexed: true,\n internalType: \"string\",\n name: \"indexedKey\",\n type: \"string\",\n },\n {\n indexed: false,\n internalType: \"string\",\n name: \"key\",\n type: \"string\",\n },\n ],\n name: \"TextChanged\",\n type: \"event\",\n },\n {\n constant: true,\n inputs: [\n {\n internalType: \"bytes32\",\n name: \"node\",\n type: \"bytes32\",\n },\n {\n internalType: \"uint256\",\n name: \"contentTypes\",\n type: \"uint256\",\n },\n ],\n name: \"ABI\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"\",\n type: \"uint256\",\n },\n {\n internalType: \"bytes\",\n name: \"\",\n type: \"bytes\",\n },\n ],\n payable: false,\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n constant: true,\n inputs: [\n {\n internalType: \"bytes32\",\n name: \"node\",\n type: \"bytes32\",\n },\n ],\n name: \"addr\",\n outputs: [\n {\n internalType: \"address payable\",\n name: \"\",\n type: \"address\",\n },\n ],\n payable: false,\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n constant: true,\n inputs: [\n {\n internalType: \"bytes32\",\n name: \"node\",\n type: \"bytes32\",\n },\n {\n internalType: \"uint256\",\n name: \"coinType\",\n type: \"uint256\",\n },\n ],\n name: \"addr\",\n outputs: [\n {\n internalType: \"bytes\",\n name: \"\",\n type: \"bytes\",\n },\n ],\n payable: false,\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n constant: true,\n inputs: [\n {\n internalType: \"bytes32\",\n name: \"\",\n type: \"bytes32\",\n },\n {\n internalType: \"address\",\n name: \"\",\n type: \"address\",\n },\n {\n internalType: \"address\",\n name: \"\",\n type: \"address\",\n },\n ],\n name: \"authorisations\",\n outputs: [\n {\n internalType: \"bool\",\n name: \"\",\n type: \"bool\",\n },\n ],\n payable: false,\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n constant: false,\n inputs: [\n {\n internalType: \"bytes32\",\n name: \"node\",\n type: \"bytes32\",\n },\n ],\n name: \"clearDNSZone\",\n outputs: [],\n payable: false,\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n constant: true,\n inputs: [\n {\n internalType: \"bytes32\",\n name: \"node\",\n type: \"bytes32\",\n },\n ],\n name: \"contenthash\",\n outputs: [\n {\n internalType: \"bytes\",\n name: \"\",\n type: \"bytes\",\n },\n ],\n payable: false,\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n constant: true,\n inputs: [\n {\n internalType: \"bytes32\",\n name: \"node\",\n type: \"bytes32\",\n },\n {\n internalType: \"bytes32\",\n name: \"name\",\n type: \"bytes32\",\n },\n {\n internalType: \"uint16\",\n name: \"resource\",\n type: \"uint16\",\n },\n ],\n name: \"dnsRecord\",\n outputs: [\n {\n internalType: \"bytes\",\n name: \"\",\n type: \"bytes\",\n },\n ],\n payable: false,\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n constant: true,\n inputs: [\n {\n internalType: \"bytes32\",\n name: \"node\",\n type: \"bytes32\",\n },\n {\n internalType: \"bytes32\",\n name: \"name\",\n type: \"bytes32\",\n },\n ],\n name: \"hasDNSRecords\",\n outputs: [\n {\n internalType: \"bool\",\n name: \"\",\n type: \"bool\",\n },\n ],\n payable: false,\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n constant: true,\n inputs: [\n {\n internalType: \"bytes32\",\n name: \"node\",\n type: \"bytes32\",\n },\n {\n internalType: \"bytes4\",\n name: \"interfaceID\",\n type: \"bytes4\",\n },\n ],\n name: \"interfaceImplementer\",\n outputs: [\n {\n internalType: \"address\",\n name: \"\",\n type: \"address\",\n },\n ],\n payable: false,\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n constant: false,\n inputs: [\n {\n internalType: \"bytes[]\",\n name: \"data\",\n type: \"bytes[]\",\n },\n ],\n name: \"multicall\",\n outputs: [\n {\n internalType: \"bytes[]\",\n name: \"results\",\n type: \"bytes[]\",\n },\n ],\n payable: false,\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n constant: true,\n inputs: [\n {\n internalType: \"bytes32\",\n name: \"node\",\n type: \"bytes32\",\n },\n ],\n name: \"name\",\n outputs: [\n {\n internalType: \"string\",\n name: \"\",\n type: \"string\",\n },\n ],\n payable: false,\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n constant: true,\n inputs: [\n {\n internalType: \"bytes32\",\n name: \"node\",\n type: \"bytes32\",\n },\n ],\n name: \"pubkey\",\n outputs: [\n {\n internalType: \"bytes32\",\n name: \"x\",\n type: \"bytes32\",\n },\n {\n internalType: \"bytes32\",\n name: \"y\",\n type: \"bytes32\",\n },\n ],\n payable: false,\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n constant: false,\n inputs: [\n {\n internalType: \"bytes32\",\n name: \"node\",\n type: \"bytes32\",\n },\n {\n internalType: \"uint256\",\n name: \"contentType\",\n type: \"uint256\",\n },\n {\n internalType: \"bytes\",\n name: \"data\",\n type: \"bytes\",\n },\n ],\n name: \"setABI\",\n outputs: [],\n payable: false,\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n constant: false,\n inputs: [\n {\n internalType: \"bytes32\",\n name: \"node\",\n type: \"bytes32\",\n },\n {\n internalType: \"uint256\",\n name: \"coinType\",\n type: \"uint256\",\n },\n {\n internalType: \"bytes\",\n name: \"a\",\n type: \"bytes\",\n },\n ],\n name: \"setAddr\",\n outputs: [],\n payable: false,\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n constant: false,\n inputs: [\n {\n internalType: \"bytes32\",\n name: \"node\",\n type: \"bytes32\",\n },\n {\n internalType: \"address\",\n name: \"a\",\n type: \"address\",\n },\n ],\n name: \"setAddr\",\n outputs: [],\n payable: false,\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n constant: false,\n inputs: [\n {\n internalType: \"bytes32\",\n name: \"node\",\n type: \"bytes32\",\n },\n {\n internalType: \"address\",\n name: \"target\",\n type: \"address\",\n },\n {\n internalType: \"bool\",\n name: \"isAuthorised\",\n type: \"bool\",\n },\n ],\n name: \"setAuthorisation\",\n outputs: [],\n payable: false,\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n constant: false,\n inputs: [\n {\n internalType: \"bytes32\",\n name: \"node\",\n type: \"bytes32\",\n },\n {\n internalType: \"bytes\",\n name: \"hash\",\n type: \"bytes\",\n },\n ],\n name: \"setContenthash\",\n outputs: [],\n payable: false,\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n constant: false,\n inputs: [\n {\n internalType: \"bytes32\",\n name: \"node\",\n type: \"bytes32\",\n },\n {\n internalType: \"bytes\",\n name: \"data\",\n type: \"bytes\",\n },\n ],\n name: \"setDNSRecords\",\n outputs: [],\n payable: false,\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n constant: false,\n inputs: [\n {\n internalType: \"bytes32\",\n name: \"node\",\n type: \"bytes32\",\n },\n {\n internalType: \"bytes4\",\n name: \"interfaceID\",\n type: \"bytes4\",\n },\n {\n internalType: \"address\",\n name: \"implementer\",\n type: \"address\",\n },\n ],\n name: \"setInterface\",\n outputs: [],\n payable: false,\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n constant: false,\n inputs: [\n {\n internalType: \"bytes32\",\n name: \"node\",\n type: \"bytes32\",\n },\n {\n internalType: \"string\",\n name: \"name\",\n type: \"string\",\n },\n ],\n name: \"setName\",\n outputs: [],\n payable: false,\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n constant: false,\n inputs: [\n {\n internalType: \"bytes32\",\n name: \"node\",\n type: \"bytes32\",\n },\n {\n internalType: \"bytes32\",\n name: \"x\",\n type: \"bytes32\",\n },\n {\n internalType: \"bytes32\",\n name: \"y\",\n type: \"bytes32\",\n },\n ],\n name: \"setPubkey\",\n outputs: [],\n payable: false,\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n constant: false,\n inputs: [\n {\n internalType: \"bytes32\",\n name: \"node\",\n type: \"bytes32\",\n },\n {\n internalType: \"string\",\n name: \"key\",\n type: \"string\",\n },\n {\n internalType: \"string\",\n name: \"value\",\n type: \"string\",\n },\n ],\n name: \"setText\",\n outputs: [],\n payable: false,\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n constant: true,\n inputs: [\n {\n internalType: \"bytes4\",\n name: \"interfaceID\",\n type: \"bytes4\",\n },\n ],\n name: \"supportsInterface\",\n outputs: [\n {\n internalType: \"bool\",\n name: \"\",\n type: \"bool\",\n },\n ],\n payable: false,\n stateMutability: \"pure\",\n type: \"function\",\n },\n {\n constant: true,\n inputs: [\n {\n internalType: \"bytes32\",\n name: \"node\",\n type: \"bytes32\",\n },\n {\n internalType: \"string\",\n name: \"key\",\n type: \"string\",\n },\n ],\n name: \"text\",\n outputs: [\n {\n internalType: \"string\",\n name: \"\",\n type: \"string\",\n },\n ],\n payable: false,\n stateMutability: \"view\",\n type: \"function\",\n },\n] as const satisfies Abi;\n","import type { Abi } from \"viem\";\n\nexport const Resolver = [\n {\n inputs: [\n {\n internalType: \"contract ENS\",\n name: \"_ens\",\n type: \"address\",\n },\n {\n internalType: \"contract INameWrapper\",\n name: \"wrapperAddress\",\n type: \"address\",\n },\n {\n internalType: \"address\",\n name: \"_trustedETHController\",\n type: \"address\",\n },\n {\n internalType: \"address\",\n name: \"_trustedReverseRegistrar\",\n type: \"address\",\n },\n ],\n stateMutability: \"nonpayable\",\n type: \"constructor\",\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: true,\n internalType: \"bytes32\",\n name: \"node\",\n type: \"bytes32\",\n },\n {\n indexed: true,\n internalType: \"uint256\",\n name: \"contentType\",\n type: \"uint256\",\n },\n ],\n name: \"ABIChanged\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: true,\n internalType: \"bytes32\",\n name: \"node\",\n type: \"bytes32\",\n },\n {\n indexed: false,\n internalType: \"address\",\n name: \"a\",\n type: \"address\",\n },\n ],\n name: \"AddrChanged\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: true,\n internalType: \"bytes32\",\n name: \"node\",\n type: \"bytes32\",\n },\n {\n indexed: false,\n internalType: \"uint256\",\n name: \"coinType\",\n type: \"uint256\",\n },\n {\n indexed: false,\n internalType: \"bytes\",\n name: \"newAddress\",\n type: \"bytes\",\n },\n ],\n name: \"AddressChanged\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: true,\n internalType: \"address\",\n name: \"owner\",\n type: \"address\",\n },\n {\n indexed: true,\n internalType: \"address\",\n name: \"operator\",\n type: \"address\",\n },\n {\n indexed: false,\n internalType: \"bool\",\n name: \"approved\",\n type: \"bool\",\n },\n ],\n name: \"ApprovalForAll\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: false,\n internalType: \"address\",\n name: \"owner\",\n type: \"address\",\n },\n {\n indexed: true,\n internalType: \"bytes32\",\n name: \"node\",\n type: \"bytes32\",\n },\n {\n indexed: true,\n internalType: \"address\",\n name: \"delegate\",\n type: \"address\",\n },\n {\n indexed: true,\n internalType: \"bool\",\n name: \"approved\",\n type: \"bool\",\n },\n ],\n name: \"Approved\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: true,\n internalType: \"bytes32\",\n name: \"node\",\n type: \"bytes32\",\n },\n {\n indexed: false,\n internalType: \"bytes\",\n name: \"hash\",\n type: \"bytes\",\n },\n ],\n name: \"ContenthashChanged\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: true,\n internalType: \"bytes32\",\n name: \"node\",\n type: \"bytes32\",\n },\n {\n indexed: false,\n internalType: \"bytes\",\n name: \"name\",\n type: \"bytes\",\n },\n {\n indexed: false,\n internalType: \"uint16\",\n name: \"resource\",\n type: \"uint16\",\n },\n {\n indexed: false,\n internalType: \"bytes\",\n name: \"record\",\n type: \"bytes\",\n },\n ],\n name: \"DNSRecordChanged\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: true,\n internalType: \"bytes32\",\n name: \"node\",\n type: \"bytes32\",\n },\n {\n indexed: false,\n internalType: \"bytes\",\n name: \"lastzonehash\",\n type: \"bytes\",\n },\n {\n indexed: false,\n internalType: \"bytes\",\n name: \"zonehash\",\n type: \"bytes\",\n },\n ],\n name: \"DNSZonehashChanged\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: true,\n internalType: \"bytes32\",\n name: \"node\",\n type: \"bytes32\",\n },\n {\n indexed: true,\n internalType: \"bytes4\",\n name: \"interfaceID\",\n type: \"bytes4\",\n },\n {\n indexed: false,\n internalType: \"address\",\n name: \"implementer\",\n type: \"address\",\n },\n ],\n name: \"InterfaceChanged\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: true,\n internalType: \"bytes32\",\n name: \"node\",\n type: \"bytes32\",\n },\n {\n indexed: false,\n internalType: \"string\",\n name: \"name\",\n type: \"string\",\n },\n ],\n name: \"NameChanged\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: true,\n internalType: \"bytes32\",\n name: \"node\",\n type: \"bytes32\",\n },\n {\n indexed: false,\n internalType: \"bytes32\",\n name: \"x\",\n type: \"bytes32\",\n },\n {\n indexed: false,\n internalType: \"bytes32\",\n name: \"y\",\n type: \"bytes32\",\n },\n ],\n name: \"PubkeyChanged\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: true,\n internalType: \"bytes32\",\n name: \"node\",\n type: \"bytes32\",\n },\n {\n indexed: true,\n internalType: \"string\",\n name: \"indexedKey\",\n type: \"string\",\n },\n {\n indexed: false,\n internalType: \"string\",\n name: \"key\",\n type: \"string\",\n },\n {\n indexed: false,\n internalType: \"string\",\n name: \"value\",\n type: \"string\",\n },\n ],\n name: \"TextChanged\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: true,\n internalType: \"bytes32\",\n name: \"node\",\n type: \"bytes32\",\n },\n {\n indexed: false,\n internalType: \"uint64\",\n name: \"newVersion\",\n type: \"uint64\",\n },\n ],\n name: \"VersionChanged\",\n type: \"event\",\n },\n {\n inputs: [\n {\n internalType: \"bytes32\",\n name: \"node\",\n type: \"bytes32\",\n },\n {\n internalType: \"uint256\",\n name: \"contentTypes\",\n type: \"uint256\",\n },\n ],\n name: \"ABI\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"\",\n type: \"uint256\",\n },\n {\n internalType: \"bytes\",\n name: \"\",\n type: \"bytes\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"bytes32\",\n name: \"node\",\n type: \"bytes32\",\n },\n ],\n name: \"addr\",\n outputs: [\n {\n internalType: \"address payable\",\n name: \"\",\n type: \"address\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"bytes32\",\n name: \"node\",\n type: \"bytes32\",\n },\n {\n internalType: \"uint256\",\n name: \"coinType\",\n type: \"uint256\",\n },\n ],\n name: \"addr\",\n outputs: [\n {\n internalType: \"bytes\",\n name: \"\",\n type: \"bytes\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"bytes32\",\n name: \"node\",\n type: \"bytes32\",\n },\n {\n internalType: \"address\",\n name: \"delegate\",\n type: \"address\",\n },\n {\n internalType: \"bool\",\n name: \"approved\",\n type: \"bool\",\n },\n ],\n name: \"approve\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"bytes32\",\n name: \"node\",\n type: \"bytes32\",\n },\n ],\n name: \"clearRecords\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"bytes32\",\n name: \"node\",\n type: \"bytes32\",\n },\n ],\n name: \"contenthash\",\n outputs: [\n {\n internalType: \"bytes\",\n name: \"\",\n type: \"bytes\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"bytes32\",\n name: \"node\",\n type: \"bytes32\",\n },\n {\n internalType: \"bytes32\",\n name: \"name\",\n type: \"bytes32\",\n },\n {\n internalType: \"uint16\",\n name: \"resource\",\n type: \"uint16\",\n },\n ],\n name: \"dnsRecord\",\n outputs: [\n {\n internalType: \"bytes\",\n name: \"\",\n type: \"bytes\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"bytes32\",\n name: \"node\",\n type: \"bytes32\",\n },\n {\n internalType: \"bytes32\",\n name: \"name\",\n type: \"bytes32\",\n },\n ],\n name: \"hasDNSRecords\",\n outputs: [\n {\n internalType: \"bool\",\n name: \"\",\n type: \"bool\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"bytes32\",\n name: \"node\",\n type: \"bytes32\",\n },\n {\n internalType: \"bytes4\",\n name: \"interfaceID\",\n type: \"bytes4\",\n },\n ],\n name: \"interfaceImplementer\",\n outputs: [\n {\n internalType: \"address\",\n name: \"\",\n type: \"address\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"address\",\n name: \"owner\",\n type: \"address\",\n },\n {\n internalType: \"bytes32\",\n name: \"node\",\n type: \"bytes32\",\n },\n {\n internalType: \"address\",\n name: \"delegate\",\n type: \"address\",\n },\n ],\n name: \"isApprovedFor\",\n outputs: [\n {\n internalType: \"bool\",\n name: \"\",\n type: \"bool\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"address\",\n name: \"account\",\n type: \"address\",\n },\n {\n internalType: \"address\",\n name: \"operator\",\n type: \"address\",\n },\n ],\n name: \"isApprovedForAll\",\n outputs: [\n {\n internalType: \"bool\",\n name: \"\",\n type: \"bool\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"bytes[]\",\n name: \"data\",\n type: \"bytes[]\",\n },\n ],\n name: \"multicall\",\n outputs: [\n {\n internalType: \"bytes[]\",\n name: \"results\",\n type: \"bytes[]\",\n },\n ],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"bytes32\",\n name: \"nodehash\",\n type: \"bytes32\",\n },\n {\n internalType: \"bytes[]\",\n name: \"data\",\n type: \"bytes[]\",\n },\n ],\n name: \"multicallWithNodeCheck\",\n outputs: [\n {\n internalType: \"bytes[]\",\n name: \"results\",\n type: \"bytes[]\",\n },\n ],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"bytes32\",\n name: \"node\",\n type: \"bytes32\",\n },\n ],\n name: \"name\",\n outputs: [\n {\n internalType: \"string\",\n name: \"\",\n type: \"string\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"bytes32\",\n name: \"node\",\n type: \"bytes32\",\n },\n ],\n name: \"pubkey\",\n outputs: [\n {\n internalType: \"bytes32\",\n name: \"x\",\n type: \"bytes32\",\n },\n {\n internalType: \"bytes32\",\n name: \"y\",\n type: \"bytes32\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"bytes32\",\n name: \"\",\n type: \"bytes32\",\n },\n ],\n name: \"recordVersions\",\n outputs: [\n {\n internalType: \"uint64\",\n name: \"\",\n type: \"uint64\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"bytes32\",\n name: \"node\",\n type: \"bytes32\",\n },\n {\n internalType: \"uint256\",\n name: \"contentType\",\n type: \"uint256\",\n },\n {\n internalType: \"bytes\",\n name: \"data\",\n type: \"bytes\",\n },\n ],\n name: \"setABI\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"bytes32\",\n name: \"node\",\n type: \"bytes32\",\n },\n {\n internalType: \"uint256\",\n name: \"coinType\",\n type: \"uint256\",\n },\n {\n internalType: \"bytes\",\n name: \"a\",\n type: \"bytes\",\n },\n ],\n name: \"setAddr\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"bytes32\",\n name: \"node\",\n type: \"bytes32\",\n },\n {\n internalType: \"address\",\n name: \"a\",\n type: \"address\",\n },\n ],\n name: \"setAddr\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"address\",\n name: \"operator\",\n type: \"address\",\n },\n {\n internalType: \"bool\",\n name: \"approved\",\n type: \"bool\",\n },\n ],\n name: \"setApprovalForAll\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"bytes32\",\n name: \"node\",\n type: \"bytes32\",\n },\n {\n internalType: \"bytes\",\n name: \"hash\",\n type: \"bytes\",\n },\n ],\n name: \"setContenthash\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"bytes32\",\n name: \"node\",\n type: \"bytes32\",\n },\n {\n internalType: \"bytes\",\n name: \"data\",\n type: \"bytes\",\n },\n ],\n name: \"setDNSRecords\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"bytes32\",\n name: \"node\",\n type: \"bytes32\",\n },\n {\n internalType: \"bytes4\",\n name: \"interfaceID\",\n type: \"bytes4\",\n },\n {\n internalType: \"address\",\n name: \"implementer\",\n type: \"address\",\n },\n ],\n name: \"setInterface\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"bytes32\",\n name: \"node\",\n type: \"bytes32\",\n },\n {\n internalType: \"string\",\n name: \"newName\",\n type: \"string\",\n },\n ],\n name: \"setName\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"bytes32\",\n name: \"node\",\n type: \"bytes32\",\n },\n {\n internalType: \"bytes32\",\n name: \"x\",\n type: \"bytes32\",\n },\n {\n internalType: \"bytes32\",\n name: \"y\",\n type: \"bytes32\",\n },\n ],\n name: \"setPubkey\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"bytes32\",\n name: \"node\",\n type: \"bytes32\",\n },\n {\n internalType: \"string\",\n name: \"key\",\n type: \"string\",\n },\n {\n internalType: \"string\",\n name: \"value\",\n type: \"string\",\n },\n ],\n name: \"setText\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"bytes32\",\n name: \"node\",\n type: \"bytes32\",\n },\n {\n internalType: \"bytes\",\n name: \"hash\",\n type: \"bytes\",\n },\n ],\n name: \"setZonehash\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"bytes4\",\n name: \"interfaceID\",\n type: \"bytes4\",\n },\n ],\n name: \"supportsInterface\",\n outputs: [\n {\n internalType: \"bool\",\n name: \"\",\n type: \"bool\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"bytes32\",\n name: \"node\",\n type: \"bytes32\",\n },\n {\n internalType: \"string\",\n name: \"key\",\n type: \"string\",\n },\n ],\n name: \"text\",\n outputs: [\n {\n internalType: \"string\",\n name: \"\",\n type: \"string\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"bytes32\",\n name: \"node\",\n type: \"bytes32\",\n },\n ],\n name: \"zonehash\",\n outputs: [\n {\n internalType: \"bytes\",\n name: \"\",\n type: \"bytes\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n type: \"event\",\n name: \"DNSRecordChanged\",\n inputs: [\n { name: \"node\", type: \"bytes32\", indexed: true, internalType: \"bytes32\" },\n { name: \"name\", type: \"bytes\", indexed: false, internalType: \"bytes\" },\n { name: \"resource\", type: \"uint16\", indexed: false, internalType: \"uint16\" },\n { name: \"ttl\", type: \"uint32\", indexed: false, internalType: \"uint32\" },\n { name: \"record\", type: \"bytes\", indexed: false, internalType: \"bytes\" },\n ],\n anonymous: false,\n },\n {\n type: \"event\",\n name: \"DNSRecordDeleted\",\n inputs: [\n { name: \"node\", type: \"bytes32\", indexed: true, internalType: \"bytes32\" },\n { name: \"name\", type: \"bytes\", indexed: false, internalType: \"bytes\" },\n { name: \"resource\", type: \"uint16\", indexed: false, internalType: \"uint16\" },\n ],\n anonymous: false,\n },\n {\n type: \"event\",\n name: \"DNSZoneUpdated\",\n inputs: [\n { name: \"node\", type: \"bytes32\", indexed: true, internalType: \"bytes32\" },\n { name: \"serial\", type: \"uint32\", indexed: false, internalType: \"uint32\" },\n ],\n anonymous: false,\n },\n {\n type: \"event\",\n name: \"ZoneCreated\",\n inputs: [\n { name: \"node\", type: \"bytes32\", indexed: true, internalType: \"bytes32\" },\n { name: \"version\", type: \"uint64\", indexed: true, internalType: \"uint64\" },\n ],\n anonymous: false,\n },\n {\n inputs: [\n {\n internalType: \"bytes\",\n name: \"name\",\n type: \"bytes\",\n },\n {\n internalType: \"bytes\",\n name: \"data\",\n type: \"bytes\",\n },\n ],\n name: \"resolve\",\n outputs: [\n {\n internalType: \"bytes\",\n name: \"\",\n type: \"bytes\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n] as const satisfies Abi;\n","import { mergeAbis } from \"@ponder/utils\";\n\nimport { AbstractReverseResolver } from \"../abis/shared/AbstractReverseResolver\";\nimport { LegacyPublicResolver } from \"../abis/shared/LegacyPublicResolver\";\nimport { Resolver } from \"../abis/shared/Resolver\";\n\n/**\n * This Resolver ABI represents the set of all well-known Resolver events/methods, including:\n * - LegacyPublicResolver\n * - TextChanged event without value\n * - IResolver\n * - modern Resolver ABI, TextChanged with value\n * - ReverseResolvers\n * - AbstractReverseResolver\n *\n * A Resolver contract is a contract that emits _any_ (not _all_) of the events specified here and\n * may or may not support any number of the methods available in this ABI.\n */\nexport const ResolverABI = mergeAbis([LegacyPublicResolver, Resolver, AbstractReverseResolver]);\n","import type { Abi, Address, Chain } from \"viem\";\n\n/**\n * ENSNamespaceIds encodes the set of identifiers for well-known ENS namespaces.\n *\n * Each ENS namespace is a single, unified set of ENS names with a distinct onchain root\n * Registry (the ensroot Datasource) and the capability of spanning from that root Registry across\n * other `Datasource`s that may be distributed across multiple chains and offchain resources.\n *\n * For example, as of 9-Feb-2025 the canonical ENS namespace on mainnet includes:\n * - A root Registry on mainnet.\n * - An onchain Registrar for direct subnames of 'eth' on mainnet.\n * - An onchain Registry and Registrar for direct subnames of 'base.eth' on Base.\n * - An onchain Registry and Registrar subregistry for direct subnames of 'linea.eth' on Linea.\n * - An offchain subregistry for subnames of '.cb.id'.\n * - An offchain subregistry for subnames of '.uni.eth'.\n * - Etc..\n *\n * Each ENS namespace is logically independent of & isolated from the others, and not exclusively\n * correlated with a specific L1 chain. For example, the Sepolia testnet ENS namepace\n * is independent of the canonical ENS namespace on mainnet, and there could be an additional\n * deployment of the ENS protocol to mainnet, configured with different Datasources, resulting in a\n * logically isolated set of ENS names.\n *\n * 'ens-test-env' represents an ENS namespace running on a local Anvil chain for testing\n * protocol changes, running deterministic test suites, and local development.\n * https://github.com/ensdomains/ens-test-env\n */\nexport const ENSNamespaceIds = {\n Mainnet: \"mainnet\",\n Sepolia: \"sepolia\",\n SepoliaV2: \"sepolia-v2\",\n EnsTestEnv: \"ens-test-env\",\n} as const;\n\n/**\n * ENSNamespaceId is the derived string union of possible ENS namespace identifiers.\n */\nexport type ENSNamespaceId = (typeof ENSNamespaceIds)[keyof typeof ENSNamespaceIds];\n\n/**\n * A Datasource describes a set of contracts on a given chain that interact with the ENS protocol.\n */\nexport interface Datasource {\n chain: Chain;\n\n // map of contract name to config\n contracts: Record<string, ContractConfig>;\n}\n\n/**\n * DatasourceNames encodes a unique id for each known Datasource.\n */\nexport const DatasourceNames = {\n ENSRoot: \"ensroot\",\n Basenames: \"basenames\",\n Lineanames: \"lineanames\",\n Seaport: \"seaport\",\n ThreeDNSOptimism: \"threednsOptimism\",\n ThreeDNSBase: \"threednsBase\",\n ReverseResolverRoot: \"rrRoot\",\n ReverseResolverBase: \"rrBase\",\n ReverseResolverLinea: \"rrLinea\",\n ReverseResolverOptimism: \"rrOptimism\",\n ReverseResolverArbitrum: \"rrArbitrum\",\n ReverseResolverScroll: \"rrScroll\",\n ENSv2Root: \"ENSv2Root\",\n} as const;\n\nexport type DatasourceName = (typeof DatasourceNames)[keyof typeof DatasourceNames];\n\n/**\n * EventFilter specifies a given event's name and arguments to filter that event by.\n * This type is intentionally a subset of Ponder's `ContractConfig['filter']`.\n */\nexport interface EventFilter {\n event: string;\n args: Record<string, unknown>;\n}\n\n/**\n * Defines the abi, address, and startBlock of a contract relevant to a Datasource.\n *\n * A contract is located onchain either by\n * 1. a single Address in `address`,\n * 2. a set of Address[] in `address`,\n * 3. or any contract that emits events as defined in `abi`.\n *\n * This type is intentionally a subset of Ponder's ContractConfig.\n *\n * @param abi - the ABI of the contract\n * @param address - (optional) Address of the contract or Address[] of each contract to be indexed\n * @param startBlock - block number the contract was deployed in\n */\nexport type ContractConfig = {\n readonly abi: Abi;\n readonly address?: Address | Address[];\n readonly startBlock: number;\n readonly endBlock?: number;\n};\n\n/**\n * ENSNamespace encodes a set of known Datasources associated with the same ENS namespace.\n *\n * The ENSRoot Datasource is required (this formally defines an ENS namespace). All other Datasources\n * within the ENSNamespace are optional.\n */\nexport type ENSNamespace = {\n [DatasourceNames.ENSRoot]: Datasource;\n} & Partial<Record<Exclude<DatasourceName, \"ensroot\">, Datasource>>;\n\n/**\n * Helper type to extract the datasource type for a specific datasource name across all namespaces.\n * Returns the union of all possible datasource types for that datasource name, or never if not found.\n */\nexport type ExtractDatasourceType<\n Namespaces extends ENSNamespace,\n D extends DatasourceName,\n> = Namespaces extends any ? (D extends keyof Namespaces ? Namespaces[D] : never) : never;\n","import { zeroAddress } from \"viem\";\n\nimport { EnhancedAccessControl } from \"./abis/ensv2/EnhancedAccessControl\";\nimport { ETHRegistrar } from \"./abis/ensv2/ETHRegistrar\";\nimport { Registry } from \"./abis/ensv2/Registry\";\nimport { UniversalResolverV2 } from \"./abis/ensv2/UniversalResolverV2\";\n// ABIs for ENSRoot Datasource\nimport { BaseRegistrar as root_BaseRegistrar } from \"./abis/root/BaseRegistrar\";\nimport { LegacyEthRegistrarController as root_LegacyEthRegistrarController } from \"./abis/root/LegacyEthRegistrarController\";\nimport { NameWrapper as root_NameWrapper } from \"./abis/root/NameWrapper\";\nimport { Registry as root_Registry } from \"./abis/root/Registry\";\nimport { UniversalRegistrarRenewalWithReferrer as root_UniversalRegistrarRenewalWithReferrer } from \"./abis/root/UniversalRegistrarRenewalWithReferrer\";\nimport { UniversalResolverV1 } from \"./abis/root/UniversalResolverV1\";\nimport { UnwrappedEthRegistrarController as root_UnwrappedEthRegistrarController } from \"./abis/root/UnwrappedEthRegistrarController\";\nimport { WrappedEthRegistrarController as root_WrappedEthRegistrarController } from \"./abis/root/WrappedEthRegistrarController\";\nimport { StandaloneReverseRegistrar } from \"./abis/shared/StandaloneReverseRegistrar\";\nimport { ensTestEnvChain } from \"./lib/chains\";\n// Shared ABIs\nimport { ResolverABI } from \"./lib/ResolverABI\";\n// Types\nimport { DatasourceNames, type ENSNamespace } from \"./lib/types\";\n\n/**\n * The ens-test-env ENSNamespace\n *\n * 'ens-test-env' represents a deterministic deployment of the ENS protocol to a local Anvil chain\n * for development and testing.\n *\n * @see https://github.com/ensdomains/ens-test-env\n * @see https://github.com/ensdomains/contracts-v2\n *\n * NOTE: The ens-test-env ENS namespace does not support Basenames, Lineanames, or 3DNS.\n * NOTE: The ens-test-env ENS namespace does not (yet) support ENSIP-19 Reverse Resolvers.\n */\nexport default {\n /**\n * ENSRoot Datasource\n *\n * Addresses and Start Blocks from ENSv2 devnet\n * https://github.com/ensdomains/contracts-v2\n */\n [DatasourceNames.ENSRoot]: {\n chain: ensTestEnvChain,\n contracts: {\n // NOTE: named LegacyENSRegistry in devnet\n ENSv1RegistryOld: {\n abi: root_Registry, // Registry was redeployed, same abi\n address: \"0x9fe46736679d2d9a65f0992f2272de9f3c7fa6e0\",\n startBlock: 0,\n },\n // NOTE: named ENSRegistry in devnet\n ENSv1Registry: {\n abi: root_Registry, // Registry was redeployed, same abi\n address: \"0xcf7ed3acca5a467e9e704c703e8d87f634fb0fc9\",\n startBlock: 0,\n },\n Resolver: {\n abi: ResolverABI,\n startBlock: 0,\n },\n // NOTE: named BaseRegistrarImplementation in devnet\n BaseRegistrar: {\n abi: root_BaseRegistrar,\n address: \"0xcd8a1c3ba11cf5ecfa6267617243239504a98d90\",\n startBlock: 0,\n },\n // NOTE: named LegacyETHRegistrarController in devnet\n LegacyEthRegistrarController: {\n abi: root_LegacyEthRegistrarController,\n address: \"0xd8a5a9b31c3c0232e196d518e89fd8bf83acad43\",\n startBlock: 0,\n },\n // NOTE: named WrappedETHRegistrarController in devnet\n WrappedEthRegistrarController: {\n abi: root_WrappedEthRegistrarController,\n address: \"0x253553366da8546fc250f225fe3d25d0c782303b\",\n startBlock: 0,\n },\n // NOTE: named ETHRegistrarController in devnet\n UnwrappedEthRegistrarController: {\n abi: root_UnwrappedEthRegistrarController,\n address: \"0x36b58f5c1969b7b6591d752ea6f5486d069010ab\",\n startBlock: 0,\n },\n // NOTE: not in devnet, set to zeroAddress\n UniversalRegistrarRenewalWithReferrer: {\n abi: root_UniversalRegistrarRenewalWithReferrer,\n address: zeroAddress,\n startBlock: 0,\n },\n NameWrapper: {\n abi: root_NameWrapper,\n address: \"0xcbeaf3bde82155f56486fb5a1072cb8baaf547cc\",\n startBlock: 0,\n },\n UniversalResolver: {\n abi: UniversalResolverV1,\n address: \"0xd84379ceae14aa33c123af12424a37803f885889\",\n startBlock: 0,\n },\n // NOTE: named UniversalResolverV2 in devnet\n UniversalResolverV2: {\n abi: UniversalResolverV2,\n address: \"0x162a433068f51e18b7d13932f27e66a3f99e6890\",\n startBlock: 0,\n },\n },\n },\n\n [DatasourceNames.ENSv2Root]: {\n chain: ensTestEnvChain,\n contracts: {\n Resolver: { abi: ResolverABI, startBlock: 0 },\n Registry: { abi: Registry, startBlock: 0 },\n EnhancedAccessControl: { abi: EnhancedAccessControl, startBlock: 0 },\n RootRegistry: {\n abi: Registry,\n address: \"0x2279b7a0a67db372996a5fab50d91eaa73d2ebe6\",\n startBlock: 0,\n },\n ETHRegistry: {\n abi: Registry,\n address: \"0x9e545e3c0baab3e08cdfd552c960a1050f373042\",\n startBlock: 0,\n },\n ETHRegistrar: {\n abi: ETHRegistrar,\n address: \"0x5f3f1dbd7b74c6b46e8c44f98792a1daf8d69154\",\n startBlock: 0,\n },\n },\n },\n\n [DatasourceNames.ReverseResolverRoot]: {\n chain: ensTestEnvChain,\n contracts: {\n DefaultReverseRegistrar: {\n abi: StandaloneReverseRegistrar,\n address: \"0x998abeb3e57409262ae5b751f60747921b33613e\",\n startBlock: 0,\n },\n\n // NOTE: named DefaultReverseResolver in devnet\n DefaultReverseResolver3: {\n abi: ResolverABI,\n address: \"0x4826533b4897376654bb4d4ad88b7fafd0c98528\",\n startBlock: 0,\n },\n\n // NOTE: named LegacyPublicResolver in devnet\n DefaultPublicResolver4: {\n abi: ResolverABI,\n address: \"0x4ee6ecad1c2dae9f525404de8555724e3c35d07b\",\n startBlock: 0,\n },\n\n // NOTE: named PublicResolver in devnet\n DefaultPublicResolver5: {\n abi: ResolverABI,\n address: \"0xbec49fa140acaa83533fb00a2bb19bddd0290f25\",\n startBlock: 0,\n },\n },\n },\n} satisfies ENSNamespace;\n","import type { Abi } from \"viem\";\n\nexport const NameWrapper = [\n {\n inputs: [\n {\n internalType: \"contract ENS\",\n name: \"_ens\",\n type: \"address\",\n },\n {\n internalType: \"contract IBaseRegistrar\",\n name: \"_registrar\",\n type: \"address\",\n },\n {\n internalType: \"contract IMetadataService\",\n name: \"_metadataService\",\n type: \"address\",\n },\n ],\n stateMutability: \"nonpayable\",\n type: \"constructor\",\n },\n {\n inputs: [],\n name: \"CannotUpgrade\",\n type: \"error\",\n },\n {\n inputs: [],\n name: \"IncompatibleParent\",\n type: \"error\",\n },\n {\n inputs: [\n {\n internalType: \"address\",\n name: \"owner\",\n type: \"address\",\n },\n ],\n name: \"IncorrectTargetOwner\",\n type: \"error\",\n },\n {\n inputs: [],\n name: \"IncorrectTokenType\",\n type: \"error\",\n },\n {\n inputs: [\n {\n internalType: \"bytes32\",\n name: \"labelHash\",\n type: \"bytes32\",\n },\n {\n internalType: \"bytes32\",\n name: \"expectedLabelhash\",\n type: \"bytes32\",\n },\n ],\n name: \"LabelMismatch\",\n type: \"error\",\n },\n {\n inputs: [\n {\n internalType: \"string\",\n name: \"label\",\n type: \"string\",\n },\n ],\n name: \"LabelTooLong\",\n type: \"error\",\n },\n {\n inputs: [],\n name: \"LabelTooShort\",\n type: \"error\",\n },\n {\n inputs: [],\n name: \"NameIsNotWrapped\",\n type: \"error\",\n },\n {\n inputs: [\n {\n internalType: \"uint256\",\n name: \"offset\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"length\",\n type: \"uint256\",\n },\n ],\n name: \"OffsetOutOfBoundsError\",\n type: \"error\",\n },\n {\n inputs: [\n {\n internalType: \"bytes32\",\n name: \"node\",\n type: \"bytes32\",\n },\n ],\n name: \"OperationProhibited\",\n type: \"error\",\n },\n {\n inputs: [\n {\n internalType: \"bytes32\",\n name: \"node\",\n type: \"bytes32\",\n },\n {\n internalType: \"address\",\n name: \"addr\",\n type: \"address\",\n },\n ],\n name: \"Unauthorised\",\n type: \"error\",\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: true,\n internalType: \"address\",\n name: \"owner\",\n type: \"address\",\n },\n {\n indexed: true,\n internalType: \"address\",\n name: \"approved\",\n type: \"address\",\n },\n {\n indexed: true,\n internalType: \"uint256\",\n name: \"tokenId\",\n type: \"uint256\",\n },\n ],\n name: \"Approval\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: true,\n internalType: \"address\",\n name: \"account\",\n type: \"address\",\n },\n {\n indexed: true,\n internalType: \"address\",\n name: \"operator\",\n type: \"address\",\n },\n {\n indexed: false,\n internalType: \"bool\",\n name: \"approved\",\n type: \"bool\",\n },\n ],\n name: \"ApprovalForAll\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: true,\n internalType: \"address\",\n name: \"controller\",\n type: \"address\",\n },\n {\n indexed: false,\n internalType: \"bool\",\n name: \"active\",\n type: \"bool\",\n },\n ],\n name: \"ControllerChanged\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: true,\n internalType: \"bytes32\",\n name: \"node\",\n type: \"bytes32\",\n },\n {\n indexed: false,\n internalType: \"uint64\",\n name: \"expiry\",\n type: \"uint64\",\n },\n ],\n name: \"ExpiryExtended\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: true,\n internalType: \"bytes32\",\n name: \"node\",\n type: \"bytes32\",\n },\n {\n indexed: false,\n internalType: \"uint32\",\n name: \"fuses\",\n type: \"uint32\",\n },\n ],\n name: \"FusesSet\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: true,\n internalType: \"bytes32\",\n name: \"node\",\n type: \"bytes32\",\n },\n {\n indexed: false,\n internalType: \"address\",\n name: \"owner\",\n type: \"address\",\n },\n ],\n name: \"NameUnwrapped\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: true,\n internalType: \"bytes32\",\n name: \"node\",\n type: \"bytes32\",\n },\n {\n indexed: false,\n internalType: \"bytes\",\n name: \"name\",\n type: \"bytes\",\n },\n {\n indexed: false,\n internalType: \"address\",\n name: \"owner\",\n type: \"address\",\n },\n {\n indexed: false,\n internalType: \"uint32\",\n name: \"fuses\",\n type: \"uint32\",\n },\n {\n indexed: false,\n internalType: \"uint64\",\n name: \"expiry\",\n type: \"uint64\",\n },\n ],\n name: \"NameWrapped\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: true,\n internalType: \"address\",\n name: \"previousOwner\",\n type: \"address\",\n },\n {\n indexed: true,\n internalType: \"address\",\n name: \"newOwner\",\n type: \"address\",\n },\n ],\n name: \"OwnershipTransferred\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: true,\n internalType: \"address\",\n name: \"operator\",\n type: \"address\",\n },\n {\n indexed: true,\n internalType: \"address\",\n name: \"from\",\n type: \"address\",\n },\n {\n indexed: true,\n internalType: \"address\",\n name: \"to\",\n type: \"address\",\n },\n {\n indexed: false,\n internalType: \"uint256[]\",\n name: \"ids\",\n type: \"uint256[]\",\n },\n {\n indexed: false,\n internalType: \"uint256[]\",\n name: \"values\",\n type: \"uint256[]\",\n },\n ],\n name: \"TransferBatch\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: true,\n internalType: \"address\",\n name: \"operator\",\n type: \"address\",\n },\n {\n indexed: true,\n internalType: \"address\",\n name: \"from\",\n type: \"address\",\n },\n {\n indexed: true,\n internalType: \"address\",\n name: \"to\",\n type: \"address\",\n },\n {\n indexed: false,\n internalType: \"uint256\",\n name: \"id\",\n type: \"uint256\",\n },\n {\n indexed: false,\n internalType: \"uint256\",\n name: \"value\",\n type: \"uint256\",\n },\n ],\n name: \"TransferSingle\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: false,\n internalType: \"string\",\n name: \"value\",\n type: \"string\",\n },\n {\n indexed: true,\n internalType: \"uint256\",\n name: \"id\",\n type: \"uint256\",\n },\n ],\n name: \"URI\",\n type: \"event\",\n },\n {\n inputs: [\n {\n internalType: \"uint256\",\n name: \"\",\n type: \"uint256\",\n },\n ],\n name: \"_tokens\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"bytes32\",\n name: \"node\",\n type: \"bytes32\",\n },\n {\n internalType: \"uint32\",\n name: \"fuseMask\",\n type: \"uint32\",\n },\n ],\n name: \"allFusesBurned\",\n outputs: [\n {\n internalType: \"bool\",\n name: \"\",\n type: \"bool\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"address\",\n name: \"to\",\n type: \"address\",\n },\n {\n internalType: \"uint256\",\n name: \"tokenId\",\n type: \"uint256\",\n },\n ],\n name: \"approve\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"address\",\n name: \"account\",\n type: \"address\",\n },\n {\n internalType: \"uint256\",\n name: \"id\",\n type: \"uint256\",\n },\n ],\n name: \"balanceOf\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"address[]\",\n name: \"accounts\",\n type: \"address[]\",\n },\n {\n internalType: \"uint256[]\",\n name: \"ids\",\n type: \"uint256[]\",\n },\n ],\n name: \"balanceOfBatch\",\n outputs: [\n {\n internalType: \"uint256[]\",\n name: \"\",\n type: \"uint256[]\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"bytes32\",\n name: \"node\",\n type: \"bytes32\",\n },\n {\n internalType: \"address\",\n name: \"addr\",\n type: \"address\",\n },\n ],\n name: \"canExtendSubnames\",\n outputs: [\n {\n internalType: \"bool\",\n name: \"\",\n type: \"bool\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"bytes32\",\n name: \"node\",\n type: \"bytes32\",\n },\n {\n internalType: \"address\",\n name: \"addr\",\n type: \"address\",\n },\n ],\n name: \"canModifyName\",\n outputs: [\n {\n internalType: \"bool\",\n name: \"\",\n type: \"bool\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"address\",\n name: \"\",\n type: \"address\",\n },\n ],\n name: \"controllers\",\n outputs: [\n {\n internalType: \"bool\",\n name: \"\",\n type: \"bool\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"ens\",\n outputs: [\n {\n internalType: \"contract ENS\",\n name: \"\",\n type: \"address\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"bytes32\",\n name: \"parentNode\",\n type: \"bytes32\",\n },\n {\n internalType: \"bytes32\",\n name: \"labelhash\",\n type: \"bytes32\",\n },\n {\n internalType: \"uint64\",\n name: \"expiry\",\n type: \"uint64\",\n },\n ],\n name: \"extendExpiry\",\n outputs: [\n {\n internalType: \"uint64\",\n name: \"\",\n type: \"uint64\",\n },\n ],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"uint256\",\n name: \"id\",\n type: \"uint256\",\n },\n ],\n name: \"getApproved\",\n outputs: [\n {\n internalType: \"address\",\n name: \"operator\",\n type: \"address\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"uint256\",\n name: \"id\",\n type: \"uint256\",\n },\n ],\n name: \"getData\",\n outputs: [\n {\n internalType: \"address\",\n name: \"owner\",\n type: \"address\",\n },\n {\n internalType: \"uint32\",\n name: \"fuses\",\n type: \"uint32\",\n },\n {\n internalType: \"uint64\",\n name: \"expiry\",\n type: \"uint64\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"address\",\n name: \"account\",\n type: \"address\",\n },\n {\n internalType: \"address\",\n name: \"operator\",\n type: \"address\",\n },\n ],\n name: \"isApprovedForAll\",\n outputs: [\n {\n internalType: \"bool\",\n name: \"\",\n type: \"bool\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"bytes32\",\n name: \"parentNode\",\n type: \"bytes32\",\n },\n {\n internalType: \"bytes32\",\n name: \"labelhash\",\n type: \"bytes32\",\n },\n ],\n name: \"isWrapped\",\n outputs: [\n {\n internalType: \"bool\",\n name: \"\",\n type: \"bool\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"bytes32\",\n name: \"node\",\n type: \"bytes32\",\n },\n ],\n name: \"isWrapped\",\n outputs: [\n {\n internalType: \"bool\",\n name: \"\",\n type: \"bool\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"metadataService\",\n outputs: [\n {\n internalType: \"contract IMetadataService\",\n name: \"\",\n type: \"address\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"name\",\n outputs: [\n {\n internalType: \"string\",\n name: \"\",\n type: \"string\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"bytes32\",\n name: \"\",\n type: \"bytes32\",\n },\n ],\n name: \"names\",\n outputs: [\n {\n internalType: \"bytes\",\n name: \"\",\n type: \"bytes\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"address\",\n name: \"to\",\n type: \"address\",\n },\n {\n internalType: \"address\",\n name: \"\",\n type: \"address\",\n },\n {\n internalType: \"uint256\",\n name: \"tokenId\",\n type: \"uint256\",\n },\n {\n internalType: \"bytes\",\n name: \"data\",\n type: \"bytes\",\n },\n ],\n name: \"onERC721Received\",\n outputs: [\n {\n internalType: \"bytes4\",\n name: \"\",\n type: \"bytes4\",\n },\n ],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"owner\",\n outputs: [\n {\n internalType: \"address\",\n name: \"\",\n type: \"address\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"uint256\",\n name: \"id\",\n type: \"uint256\",\n },\n ],\n name: \"ownerOf\",\n outputs: [\n {\n internalType: \"address\",\n name: \"owner\",\n type: \"address\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"address\",\n name: \"_token\",\n type: \"address\",\n },\n {\n internalType: \"address\",\n name: \"_to\",\n type: \"address\",\n },\n {\n internalType: \"uint256\",\n name: \"_amount\",\n type: \"uint256\",\n },\n ],\n name: \"recoverFunds\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"string\",\n name: \"label\",\n type: \"string\",\n },\n {\n internalType: \"address\",\n name: \"wrappedOwner\",\n type: \"address\",\n },\n {\n internalType: \"uint256\",\n name: \"duration\",\n type: \"uint256\",\n },\n {\n internalType: \"address\",\n name: \"resolver\",\n type: \"address\",\n },\n {\n internalType: \"uint16\",\n name: \"ownerControlledFuses\",\n type: \"uint16\",\n },\n ],\n name: \"registerAndWrapETH2LD\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"registrarExpiry\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"registrar\",\n outputs: [\n {\n internalType: \"contract IBaseRegistrar\",\n name: \"\",\n type: \"address\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"uint256\",\n name: \"tokenId\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"duration\",\n type: \"uint256\",\n },\n ],\n name: \"renew\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"expires\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"renounceOwnership\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"address\",\n name: \"from\",\n type: \"address\",\n },\n {\n internalType: \"address\",\n name: \"to\",\n type: \"address\",\n },\n {\n internalType: \"uint256[]\",\n name: \"ids\",\n type: \"uint256[]\",\n },\n {\n internalType: \"uint256[]\",\n name: \"amounts\",\n type: \"uint256[]\",\n },\n {\n internalType: \"bytes\",\n name: \"data\",\n type: \"bytes\",\n },\n ],\n name: \"safeBatchTransferFrom\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"address\",\n name: \"from\",\n type: \"address\",\n },\n {\n internalType: \"address\",\n name: \"to\",\n type: \"address\",\n },\n {\n internalType: \"uint256\",\n name: \"id\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"amount\",\n type: \"uint256\",\n },\n {\n internalType: \"bytes\",\n name: \"data\",\n type: \"bytes\",\n },\n ],\n name: \"safeTransferFrom\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"address\",\n name: \"operator\",\n type: \"address\",\n },\n {\n internalType: \"bool\",\n name: \"approved\",\n type: \"bool\",\n },\n ],\n name: \"setApprovalForAll\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"bytes32\",\n name: \"parentNode\",\n type: \"bytes32\",\n },\n {\n internalType: \"bytes32\",\n name: \"labelhash\",\n type: \"bytes32\",\n },\n {\n internalType: \"uint32\",\n name: \"fuses\",\n type: \"uint32\",\n },\n {\n internalType: \"uint64\",\n name: \"expiry\",\n type: \"uint64\",\n },\n ],\n name: \"setChildFuses\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"address\",\n name: \"controller\",\n type: \"address\",\n },\n {\n internalType: \"bool\",\n name: \"active\",\n type: \"bool\",\n },\n ],\n name: \"setController\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"bytes32\",\n name: \"node\",\n type: \"bytes32\",\n },\n {\n internalType: \"uint16\",\n name: \"ownerControlledFuses\",\n type: \"uint16\",\n },\n ],\n name: \"setFuses\",\n outputs: [\n {\n internalType: \"uint32\",\n name: \"\",\n type: \"uint32\",\n },\n ],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"contract IMetadataService\",\n name: \"_metadataService\",\n type: \"address\",\n },\n ],\n name: \"setMetadataService\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"bytes32\",\n name: \"node\",\n type: \"bytes32\",\n },\n {\n internalType: \"address\",\n name: \"owner\",\n type: \"address\",\n },\n {\n internalType: \"address\",\n name: \"resolver\",\n type: \"address\",\n },\n {\n internalType: \"uint64\",\n name: \"ttl\",\n type: \"uint64\",\n },\n ],\n name: \"setRecord\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"bytes32\",\n name: \"node\",\n type: \"bytes32\",\n },\n {\n internalType: \"address\",\n name: \"resolver\",\n type: \"address\",\n },\n ],\n name: \"setResolver\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"bytes32\",\n name: \"parentNode\",\n type: \"bytes32\",\n },\n {\n internalType: \"string\",\n name: \"label\",\n type: \"string\",\n },\n {\n internalType: \"address\",\n name: \"owner\",\n type: \"address\",\n },\n {\n internalType: \"uint32\",\n name: \"fuses\",\n type: \"uint32\",\n },\n {\n internalType: \"uint64\",\n name: \"expiry\",\n type: \"uint64\",\n },\n ],\n name: \"setSubnodeOwner\",\n outputs: [\n {\n internalType: \"bytes32\",\n name: \"node\",\n type: \"bytes32\",\n },\n ],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"bytes32\",\n name: \"parentNode\",\n type: \"bytes32\",\n },\n {\n internalType: \"string\",\n name: \"label\",\n type: \"string\",\n },\n {\n internalType: \"address\",\n name: \"owner\",\n type: \"address\",\n },\n {\n internalType: \"address\",\n name: \"resolver\",\n type: \"address\",\n },\n {\n internalType: \"uint64\",\n name: \"ttl\",\n type: \"uint64\",\n },\n {\n internalType: \"uint32\",\n name: \"fuses\",\n type: \"uint32\",\n },\n {\n internalType: \"uint64\",\n name: \"expiry\",\n type: \"uint64\",\n },\n ],\n name: \"setSubnodeRecord\",\n outputs: [\n {\n internalType: \"bytes32\",\n name: \"node\",\n type: \"bytes32\",\n },\n ],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"bytes32\",\n name: \"node\",\n type: \"bytes32\",\n },\n {\n internalType: \"uint64\",\n name: \"ttl\",\n type: \"uint64\",\n },\n ],\n name: \"setTTL\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"contract INameWrapperUpgrade\",\n name: \"_upgradeAddress\",\n type: \"address\",\n },\n ],\n name: \"setUpgradeContract\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"bytes4\",\n name: \"interfaceId\",\n type: \"bytes4\",\n },\n ],\n name: \"supportsInterface\",\n outputs: [\n {\n internalType: \"bool\",\n name: \"\",\n type: \"bool\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"address\",\n name: \"newOwner\",\n type: \"address\",\n },\n ],\n name: \"transferOwnership\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"bytes32\",\n name: \"parentNode\",\n type: \"bytes32\",\n },\n {\n internalType: \"bytes32\",\n name: \"labelhash\",\n type: \"bytes32\",\n },\n {\n internalType: \"address\",\n name: \"controller\",\n type: \"address\",\n },\n ],\n name: \"unwrap\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"bytes32\",\n name: \"labelhash\",\n type: \"bytes32\",\n },\n {\n internalType: \"address\",\n name: \"registrant\",\n type: \"address\",\n },\n {\n internalType: \"address\",\n name: \"controller\",\n type: \"address\",\n },\n ],\n name: \"unwrapETH2LD\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"bytes\",\n name: \"name\",\n type: \"bytes\",\n },\n {\n internalType: \"bytes\",\n name: \"extraData\",\n type: \"bytes\",\n },\n ],\n name: \"upgrade\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"upgradeContract\",\n outputs: [\n {\n internalType: \"contract INameWrapperUpgrade\",\n name: \"\",\n type: \"address\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"uint256\",\n name: \"tokenId\",\n type: \"uint256\",\n },\n ],\n name: \"uri\",\n outputs: [\n {\n internalType: \"string\",\n name: \"\",\n type: \"string\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"bytes\",\n name: \"name\",\n type: \"bytes\",\n },\n {\n internalType: \"address\",\n name: \"wrappedOwner\",\n type: \"address\",\n },\n {\n internalType: \"address\",\n name: \"resolver\",\n type: \"address\",\n },\n ],\n name: \"wrap\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"string\",\n name: \"label\",\n type: \"string\",\n },\n {\n internalType: \"address\",\n name: \"wrappedOwner\",\n type: \"address\",\n },\n {\n internalType: \"uint16\",\n name: \"ownerControlledFuses\",\n type: \"uint16\",\n },\n {\n internalType: \"address\",\n name: \"resolver\",\n type: \"address\",\n },\n ],\n name: \"wrapETH2LD\",\n outputs: [\n {\n internalType: \"uint64\",\n name: \"expiry\",\n type: \"uint64\",\n },\n ],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n] as const satisfies Abi;\n","import type { Abi } from \"viem\";\n\nexport const Registry = [\n {\n inputs: [\n {\n internalType: \"contract ENS\",\n name: \"_old\",\n type: \"address\",\n },\n ],\n stateMutability: \"nonpayable\",\n type: \"constructor\",\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: true,\n internalType: \"address\",\n name: \"owner\",\n type: \"address\",\n },\n {\n indexed: true,\n internalType: \"address\",\n name: \"operator\",\n type: \"address\",\n },\n {\n indexed: false,\n internalType: \"bool\",\n name: \"approved\",\n type: \"bool\",\n },\n ],\n name: \"ApprovalForAll\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: true,\n internalType: \"bytes32\",\n name: \"node\",\n type: \"bytes32\",\n },\n {\n indexed: true,\n internalType: \"bytes32\",\n name: \"label\",\n type: \"bytes32\",\n },\n {\n indexed: false,\n internalType: \"address\",\n name: \"owner\",\n type: \"address\",\n },\n ],\n name: \"NewOwner\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: true,\n internalType: \"bytes32\",\n name: \"node\",\n type: \"bytes32\",\n },\n {\n indexed: false,\n internalType: \"address\",\n name: \"resolver\",\n type: \"address\",\n },\n ],\n name: \"NewResolver\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: true,\n internalType: \"bytes32\",\n name: \"node\",\n type: \"bytes32\",\n },\n {\n indexed: false,\n internalType: \"uint64\",\n name: \"ttl\",\n type: \"uint64\",\n },\n ],\n name: \"NewTTL\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: true,\n internalType: \"bytes32\",\n name: \"node\",\n type: \"bytes32\",\n },\n {\n indexed: false,\n internalType: \"address\",\n name: \"owner\",\n type: \"address\",\n },\n ],\n name: \"Transfer\",\n type: \"event\",\n },\n {\n inputs: [\n {\n internalType: \"address\",\n name: \"owner\",\n type: \"address\",\n },\n {\n internalType: \"address\",\n name: \"operator\",\n type: \"address\",\n },\n ],\n name: \"isApprovedForAll\",\n outputs: [\n {\n internalType: \"bool\",\n name: \"\",\n type: \"bool\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"old\",\n outputs: [\n {\n internalType: \"contract ENS\",\n name: \"\",\n type: \"address\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"bytes32\",\n name: \"node\",\n type: \"bytes32\",\n },\n ],\n name: \"owner\",\n outputs: [\n {\n internalType: \"address\",\n name: \"\",\n type: \"address\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"bytes32\",\n name: \"node\",\n type: \"bytes32\",\n },\n ],\n name: \"recordExists\",\n outputs: [\n {\n internalType: \"bool\",\n name: \"\",\n type: \"bool\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"bytes32\",\n name: \"node\",\n type: \"bytes32\",\n },\n ],\n name: \"resolver\",\n outputs: [\n {\n internalType: \"address\",\n name: \"\",\n type: \"address\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"address\",\n name: \"operator\",\n type: \"address\",\n },\n {\n internalType: \"bool\",\n name: \"approved\",\n type: \"bool\",\n },\n ],\n name: \"setApprovalForAll\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"bytes32\",\n name: \"node\",\n type: \"bytes32\",\n },\n {\n internalType: \"address\",\n name: \"owner\",\n type: \"address\",\n },\n ],\n name: \"setOwner\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"bytes32\",\n name: \"node\",\n type: \"bytes32\",\n },\n {\n internalType: \"address\",\n name: \"owner\",\n type: \"address\",\n },\n {\n internalType: \"address\",\n name: \"resolver\",\n type: \"address\",\n },\n {\n internalType: \"uint64\",\n name: \"ttl\",\n type: \"uint64\",\n },\n ],\n name: \"setRecord\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"bytes32\",\n name: \"node\",\n type: \"bytes32\",\n },\n {\n internalType: \"address\",\n name: \"resolver\",\n type: \"address\",\n },\n ],\n name: \"setResolver\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"bytes32\",\n name: \"node\",\n type: \"bytes32\",\n },\n {\n internalType: \"bytes32\",\n name: \"label\",\n type: \"bytes32\",\n },\n {\n internalType: \"address\",\n name: \"owner\",\n type: \"address\",\n },\n ],\n name: \"setSubnodeOwner\",\n outputs: [\n {\n internalType: \"bytes32\",\n name: \"\",\n type: \"bytes32\",\n },\n ],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"bytes32\",\n name: \"node\",\n type: \"bytes32\",\n },\n {\n internalType: \"bytes32\",\n name: \"label\",\n type: \"bytes32\",\n },\n {\n internalType: \"address\",\n name: \"owner\",\n type: \"address\",\n },\n {\n internalType: \"address\",\n name: \"resolver\",\n type: \"address\",\n },\n {\n internalType: \"uint64\",\n name: \"ttl\",\n type: \"uint64\",\n },\n ],\n name: \"setSubnodeRecord\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"bytes32\",\n name: \"node\",\n type: \"bytes32\",\n },\n {\n internalType: \"uint64\",\n name: \"ttl\",\n type: \"uint64\",\n },\n ],\n name: \"setTTL\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"bytes32\",\n name: \"node\",\n type: \"bytes32\",\n },\n ],\n name: \"ttl\",\n outputs: [\n {\n internalType: \"uint64\",\n name: \"\",\n type: \"uint64\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n] as const satisfies Abi;\n","import type { Abi } from \"viem\";\n\nexport const UniversalRegistrarRenewalWithReferrer = [\n {\n inputs: [\n { internalType: \"contract ENS\", name: \"ens\", type: \"address\" },\n {\n internalType: \"contract IWrappedEthRegistrarController\",\n name: \"_wrappedEthRegistrarController\",\n type: \"address\",\n },\n ],\n stateMutability: \"nonpayable\",\n type: \"constructor\",\n },\n {\n anonymous: false,\n inputs: [\n { indexed: false, internalType: \"string\", name: \"label\", type: \"string\" },\n { indexed: true, internalType: \"bytes32\", name: \"labelHash\", type: \"bytes32\" },\n { indexed: false, internalType: \"uint256\", name: \"cost\", type: \"uint256\" },\n { indexed: false, internalType: \"uint256\", name: \"duration\", type: \"uint256\" },\n { indexed: false, internalType: \"bytes32\", name: \"referrer\", type: \"bytes32\" },\n ],\n name: \"RenewalReferred\",\n type: \"event\",\n },\n {\n inputs: [\n { internalType: \"string\", name: \"label\", type: \"string\" },\n { internalType: \"uint256\", name: \"duration\", type: \"uint256\" },\n { internalType: \"bytes32\", name: \"referrer\", type: \"bytes32\" },\n ],\n name: \"renew\",\n outputs: [],\n stateMutability: \"payable\",\n type: \"function\",\n },\n { stateMutability: \"payable\", type: \"receive\" },\n] as const satisfies Abi;\n","import { arbitrum, base, linea, mainnet, optimism, scroll } from \"viem/chains\";\n\n// ABIs for Basenames Datasource\nimport { BaseRegistrar as base_BaseRegistrar } from \"./abis/basenames/BaseRegistrar\";\nimport { EarlyAccessRegistrarController as base_EARegistrarController } from \"./abis/basenames/EARegistrarController\";\nimport { RegistrarController as base_RegistrarController } from \"./abis/basenames/RegistrarController\";\nimport { Registry as base_Registry } from \"./abis/basenames/Registry\";\nimport { UpgradeableRegistrarController as base_UpgradeableRegistrarController } from \"./abis/basenames/UpgradeableRegistrarController\";\n// ABIs for Lineanames Datasource\nimport { BaseRegistrar as linea_BaseRegistrar } from \"./abis/lineanames/BaseRegistrar\";\nimport { EthRegistrarController as linea_EthRegistrarController } from \"./abis/lineanames/EthRegistrarController\";\nimport { NameWrapper as linea_NameWrapper } from \"./abis/lineanames/NameWrapper\";\nimport { Registry as linea_Registry } from \"./abis/lineanames/Registry\";\n// ABIs for ENSRoot Datasource\nimport { BaseRegistrar as root_BaseRegistrar } from \"./abis/root/BaseRegistrar\";\nimport { LegacyEthRegistrarController as root_LegacyEthRegistrarController } from \"./abis/root/LegacyEthRegistrarController\";\nimport { NameWrapper as root_NameWrapper } from \"./abis/root/NameWrapper\";\nimport { Registry as root_Registry } from \"./abis/root/Registry\";\nimport { UniversalRegistrarRenewalWithReferrer as root_UniversalRegistrarRenewalWithReferrer } from \"./abis/root/UniversalRegistrarRenewalWithReferrer\";\nimport { UniversalResolverV1 } from \"./abis/root/UniversalResolverV1\";\nimport { UnwrappedEthRegistrarController as root_UnwrappedEthRegistrarController } from \"./abis/root/UnwrappedEthRegistrarController\";\nimport { WrappedEthRegistrarController as root_WrappedEthRegistrarController } from \"./abis/root/WrappedEthRegistrarController\";\nimport { Seaport as Seaport1_5 } from \"./abis/seaport/Seaport1.5\";\n// Shared ABIs\nimport { StandaloneReverseRegistrar } from \"./abis/shared/StandaloneReverseRegistrar\";\nimport { ThreeDNSToken } from \"./abis/threedns/ThreeDNSToken\";\nimport { ResolverABI } from \"./lib/ResolverABI\";\n// Types\nimport { DatasourceNames, type ENSNamespace } from \"./lib/types\";\n\n/**\n * The Mainnet ENSNamespace\n */\nexport default {\n /**\n * ENSRoot Datasource\n *\n * Addresses and Start Blocks from ENS Mainnet Subgraph Manifest\n * https://ipfs.io/ipfs/Qmd94vseLpkUrSFvJ3GuPubJSyHz8ornhNrwEAt6pjcbex\n */\n [DatasourceNames.ENSRoot]: {\n chain: mainnet,\n contracts: {\n ENSv1RegistryOld: {\n abi: root_Registry, // Registry was redeployed, same abi\n address: \"0x314159265dd8dbb310642f98f50c066173c1259b\",\n startBlock: 3327417,\n },\n ENSv1Registry: {\n abi: root_Registry, // Registry was redeployed, same abi\n address: \"0x00000000000c2e074ec69a0dfb2997ba6c7d2e1e\",\n startBlock: 9380380,\n },\n Resolver: {\n abi: ResolverABI,\n startBlock: 3327417, // ignores any Resolver events prior to `startBlock` of ENSv1RegistryOld on Mainnet\n },\n BaseRegistrar: {\n abi: root_BaseRegistrar,\n address: \"0x57f1887a8bf19b14fc0df6fd9b2acc9af147ea85\",\n startBlock: 9380410,\n },\n LegacyEthRegistrarController: {\n abi: root_LegacyEthRegistrarController,\n address: \"0x283af0b28c62c092c9727f1ee09c02ca627eb7f5\",\n startBlock: 9380471,\n },\n WrappedEthRegistrarController: {\n abi: root_WrappedEthRegistrarController,\n address: \"0x253553366da8546fc250f225fe3d25d0c782303b\",\n startBlock: 16925618,\n },\n UnwrappedEthRegistrarController: {\n abi: root_UnwrappedEthRegistrarController,\n address: \"0x59e16fccd424cc24e280be16e11bcd56fb0ce547\",\n startBlock: 22764821,\n },\n UniversalRegistrarRenewalWithReferrer: {\n abi: root_UniversalRegistrarRenewalWithReferrer,\n address: \"0xf55575bde5953ee4272d5ce7cdd924c74d8fa81a\",\n startBlock: 23784217,\n },\n NameWrapper: {\n abi: root_NameWrapper,\n address: \"0xd4416b13d2b3a9abae7acd5d6c2bbdbe25686401\",\n startBlock: 16925608,\n },\n UniversalResolver: {\n abi: UniversalResolverV1,\n address: \"0xabd80e8a13596feea40fd26fd6a24c3fe76f05fb\",\n startBlock: 22671701,\n },\n BasenamesL1Resolver: {\n abi: ResolverABI,\n address: \"0xde9049636f4a1dfe0a64d1bfe3155c0a14c54f31\",\n startBlock: 20420641,\n },\n LineanamesL1Resolver: {\n abi: ResolverABI,\n address: \"0xde16ee87b0c019499cebdde29c9f7686560f679a\",\n startBlock: 20410692,\n },\n\n // the Resolver for *.argent.xyz names\n ArgentResolver: {\n abi: ResolverABI,\n address: \"0xda1756bb923af5d1a05e277cb1e54f1d0a127890\",\n startBlock: 7173574,\n },\n\n // the Resolver for *.loopring.eth names\n LoopringResolver: {\n abi: ResolverABI,\n address: \"0xf58d55f06bb92f083e78bb5063a2dd3544f9b6a3\",\n startBlock: 10170681,\n },\n },\n },\n\n /**\n * Basenames Datasource\n *\n * Addresses and Start Blocks from Basenames\n * https://github.com/base-org/basenames\n */\n [DatasourceNames.Basenames]: {\n /**\n * As of 9-Feb-2025 the Resolver for 'base.eth' in the mainnet ENS namespace is\n * 0xde9049636F4a1dfE0a64d1bFe3155C0A14C54F31.\n *\n * This Resolver uses ENSIP-10 (Wildcard Resolution) and EIP-3668 (CCIP Read) to delegate\n * the forward resolution of data associated with subnames of 'base.eth' to an offchain\n * gateway server operated by Coinbase that uses the following subregistry contracts on\n * Base as its source of truth.\n *\n * The owner of 'base.eth' in the ENS Registry in the mainnet ENS namespace (e.g. Coinbase)\n * has the ability to change this configuration at any time.\n *\n * See the reference documentation for additional context:\n * docs/ensnode/src/content/docs/reference/mainnet-registered-subnames-of-subregistries.mdx\n */\n chain: base,\n contracts: {\n Registry: {\n abi: base_Registry,\n address: \"0xb94704422c2a1e396835a571837aa5ae53285a95\",\n startBlock: 17571480,\n },\n Resolver: {\n abi: ResolverABI,\n startBlock: 17571480, // based on startBlock of Registry on Base\n },\n BaseRegistrar: {\n abi: base_BaseRegistrar,\n address: \"0x03c4738ee98ae44591e1a4a4f3cab6641d95dd9a\",\n startBlock: 17571486,\n },\n EARegistrarController: {\n abi: base_EARegistrarController,\n address: \"0xd3e6775ed9b7dc12b205c8e608dc3767b9e5efda\",\n startBlock: 17575699,\n },\n /**\n * This controller was removed from BaseRegistrar contract\n * https://basescan.org/tx/0x88a3cc03291bb1a4b2bd9ccfe6b770988470001905d96c32bd41b866797b684b\n */\n RegistrarController: {\n abi: base_RegistrarController,\n address: \"0x4ccb0bb02fcaba27e82a56646e81d8c5bc4119a5\",\n startBlock: 18619035,\n endBlock: 35936564,\n },\n /**\n * This controller was added to BaseRegistrar contract\n * with the following tx:\n * https://basescan.org/tx/0x52aed4dc975ba6c2b8b54d94f5b0b86a9cc0f27e81e78deb4a0b8b568f5e71ed\n */\n UpgradeableRegistrarController: {\n abi: base_UpgradeableRegistrarController,\n address: \"0xa7d2607c6bd39ae9521e514026cbb078405ab322\", // a proxy contract\n startBlock: 35286620,\n },\n\n // NOTE: not indexed, but referenced for Protocol Acceleration\n L2Resolver1: {\n abi: ResolverABI,\n address: \"0xc6d566a56a1aff6508b41f6c90ff131615583bcd\",\n startBlock: 17575714,\n },\n // NOTE: not indexed, but referenced for Protocol Acceleration\n L2Resolver2: {\n abi: ResolverABI,\n address: \"0x426fa03fb86e510d0dd9f70335cf102a98b10875\",\n startBlock: 35286620,\n },\n },\n },\n\n /**\n * Lineanames Datasource\n *\n * Addresses and Start Blocks from Lineanames\n * https://github.com/Consensys/linea-ens\n */\n [DatasourceNames.Lineanames]: {\n /**\n * As of 9-Feb-2025 the Resolver for 'linea.eth' in the mainnet ENS namespace is\n * 0xde16ee87B0C019499cEBDde29c9F7686560f679a.\n *\n * This Resolver uses ENSIP-10 (Wildcard Resolution) and EIP-3668 (CCIP Read) to delegate\n * the forward resolution of data associated with subnames of 'linea.eth' to an offchain\n * gateway server operated by Consensys that uses the following subregistry contracts on\n * Linea as its source of truth.\n *\n * The owner of 'linea.eth' in the ENS Registry in the mainnet ENS namespace (e.g. Consensys)\n * has the ability to change this configuration at any time.\n *\n * See the reference documentation for additional context:\n * docs/ensnode/src/content/docs/reference/mainnet-registered-subnames-of-subregistries.mdx\n */\n chain: linea,\n contracts: {\n Registry: {\n abi: linea_Registry,\n address: \"0x50130b669b28c339991d8676fa73cf122a121267\",\n startBlock: 6682888,\n },\n Resolver: {\n abi: ResolverABI,\n startBlock: 6682888, // based on startBlock of Registry on Linea\n },\n BaseRegistrar: {\n abi: linea_BaseRegistrar,\n address: \"0x6e84390dcc5195414ec91a8c56a5c91021b95704\",\n startBlock: 6682892,\n },\n EthRegistrarController: {\n abi: linea_EthRegistrarController,\n address: \"0xdb75db974b1f2bd3b5916d503036208064d18295\",\n startBlock: 6682978,\n },\n NameWrapper: {\n abi: linea_NameWrapper,\n address: \"0xa53cca02f98d590819141aa85c891e2af713c223\",\n startBlock: 6682956,\n },\n\n // this is Linea's Default Public Resolver\n DefaultPublicResolver: {\n abi: ResolverABI,\n address: \"0x86c5aed9f27837074612288610fb98ccc1733126\",\n startBlock: 6682994,\n },\n },\n },\n\n /**\n * The 3DNS Datasource on Optimism.\n * https://opensea.io/collection/3dns-powered-domains\n */\n [DatasourceNames.ThreeDNSOptimism]: {\n chain: optimism,\n contracts: {\n ThreeDNSToken: {\n abi: ThreeDNSToken,\n address: \"0xbb7b805b257d7c76ca9435b3ffe780355e4c4b17\",\n startBlock: 110393959,\n },\n Resolver: {\n abi: ResolverABI,\n // NOTE: 3DNSToken on Optimism has a hardcoded protocol-wide Resolver at this address\n address: \"0xf97aac6c8dbaebcb54ff166d79706e3af7a813c8\",\n startBlock: 110393959,\n },\n },\n },\n\n /**\n * The 3DNS Datasource on Base.\n * https://opensea.io/collection/3dns-powered-domains-base\n */\n [DatasourceNames.ThreeDNSBase]: {\n chain: base,\n contracts: {\n ThreeDNSToken: {\n abi: ThreeDNSToken,\n address: \"0xbb7b805b257d7c76ca9435b3ffe780355e4c4b17\",\n startBlock: 17522624,\n },\n Resolver: {\n abi: ResolverABI,\n // NOTE: 3DNSToken on Base has a hardcoded protocol-wide Resolver at this address\n address: \"0xf97aac6c8dbaebcb54ff166d79706e3af7a813c8\",\n startBlock: 17522624,\n },\n },\n },\n\n /**\n * Contracts that power Reverse Resolution on the ENS Root chain.\n */\n [DatasourceNames.ReverseResolverRoot]: {\n chain: mainnet,\n contracts: {\n DefaultReverseRegistrar: {\n abi: StandaloneReverseRegistrar,\n address: \"0x283f227c4bd38ece252c4ae7ece650b0e913f1f9\",\n startBlock: 22764819,\n },\n\n // NOTE: the DefaultReverseResolver1 (aka LegacyDefaultReverseResolver) does NOT emit events\n // and is effectively unindexable for the purposes of Reverse Resolution. We document it here\n // for completeness, but/and explicity do not index it.\n DefaultReverseResolver1: {\n abi: ResolverABI,\n address: \"0xa2c122be93b0074270ebee7f6b7292c7deb45047\",\n startBlock: 9380501,\n },\n\n // this DefaultReverseResolver was enabled in the following proposal:\n // https://discuss.ens.domains/t/ep3-5-executable-activate-new-eth-controller-and-reverse-registrar/16776\n // https://www.tally.xyz/gov/ens/proposal/42973781582803845389836855775840822719678533376883030929209752909248937768242\n // DefaultReverseResolver2 is the pre-ENSIP-19 DefaultReverseResolver and it emits\n // Resolver#NameChanged events. We index these events to power aspects of Protocol Acceleration.\n DefaultReverseResolver2: {\n abi: ResolverABI,\n address: \"0x231b0ee14048e9dccd1d247744d114a4eb5e8e63\",\n startBlock: 16925619,\n },\n\n // this DefaultReverseResolver was enabled in the following proposal:\n // https://discuss.ens.domains/t/executable-enable-l2-reverse-registrars-and-new-eth-registrar-controller/20969\n // https://www.tally.xyz/gov/ens/proposal/42524979896803285837776370636134389407867034021879791462477783237030656381157\n // NOTE: DefaultReverseResolver3 is not directly indexed: it simply reads data from\n // DefaultReverseRegistrar, which IS indexed. We document it here for completeness.\n DefaultReverseResolver3: {\n abi: ResolverABI,\n address: \"0xa7d635c8de9a58a228aa69353a1699c7cc240dcf\",\n startBlock: 22764871,\n },\n\n // this resolver uses a TextChanged event that does not include the `value` parameter\n DefaultPublicResolver0: {\n abi: ResolverABI,\n address: \"0x1da022710df5002339274aadee8d58218e9d6ab5\",\n startBlock: 3648359,\n },\n\n // this resolver uses a TextChanged event that does not include the `value` parameter\n DefaultPublicResolver1: {\n abi: ResolverABI,\n address: \"0x5ffc014343cd971b7eb70732021e26c35b744cc4\",\n startBlock: 3733668,\n },\n\n // this resolver uses a TextChanged event that does not include the `value` parameter\n DefaultPublicResolver2: {\n abi: ResolverABI,\n address: \"0x226159d592e2b063810a10ebf6dcbada94ed68b8\",\n startBlock: 8659893,\n },\n\n // aka 'LegacyPublicResolver' in the ENS Subgraph terminology\n // this resolver uses a TextChanged event that does not include the `value` parameter\n DefaultPublicResolver3: {\n abi: ResolverABI,\n address: \"0x4976fb03c32e5b8cfe2b6ccb31c09ba78ebaba41\",\n startBlock: 9412610,\n },\n\n // this PublicResolver was enabled in the following proposal:\n // https://discuss.ens.domains/t/ep3-5-executable-activate-new-eth-controller-and-reverse-registrar/16776\n // https://www.tally.xyz/gov/ens/proposal/42973781582803845389836855775840822719678533376883030929209752909248937768242\n DefaultPublicResolver4: {\n abi: ResolverABI,\n address: \"0x231b0ee14048e9dccd1d247744d114a4eb5e8e63\",\n startBlock: 16925619,\n },\n\n // this PublicResolver was enabled in the following proposal\n // https://discuss.ens.domains/t/executable-enable-l2-reverse-registrars-and-new-eth-registrar-controller/20969\n // https://www.tally.xyz/gov/ens/proposal/42524979896803285837776370636134389407867034021879791462477783237030656381157\n DefaultPublicResolver5: {\n abi: ResolverABI,\n address: \"0xf29100983e058b709f3d539b0c765937b804ac15\",\n startBlock: 22764828,\n },\n\n BaseReverseResolver: {\n abi: ResolverABI,\n // https://adraffy.github.io/ens-normalize.js/test/resolver.html#80002105.reverse\n address: \"0xc800dbc8ff9796e58efba2d7b35028ddd1997e5e\",\n startBlock: 22764838,\n },\n\n LineaReverseResolver: {\n abi: ResolverABI,\n // https://adraffy.github.io/ens-normalize.js/test/resolver.html#8000e708.reverse\n address: \"0x0ce08a41bdb10420fb5cac7da8ca508ea313aef8\",\n startBlock: 22764840,\n },\n\n OptimismReverseResolver: {\n abi: ResolverABI,\n // https://adraffy.github.io/ens-normalize.js/test/resolver.html#8000000a.reverse\n address: \"0xf9edb1a21867ac11b023ce34abad916d29abf107\",\n startBlock: 22764854,\n },\n\n ArbitrumReverseResolver: {\n abi: ResolverABI,\n // https://adraffy.github.io/ens-normalize.js/test/resolver.html#8000a4b1.reverse\n address: \"0x4b9572c03aaa8b0efa4b4b0f0cc0f0992bedb898\",\n startBlock: 22764837,\n },\n\n ScrollReverseResolver: {\n abi: ResolverABI,\n // https://adraffy.github.io/ens-normalize.js/test/resolver.html#80082750.reverse\n address: \"0xc4842814ca523e481ca5aa85f719fed1e9cac614\",\n startBlock: 22921284,\n },\n },\n },\n\n /**\n * Contracts that power Reverse Resolution on Base.\n */\n [DatasourceNames.ReverseResolverBase]: {\n chain: base,\n contracts: {\n L2ReverseRegistrar: {\n abi: StandaloneReverseRegistrar,\n address: \"0x0000000000d8e504002cc26e3ec46d81971c1664\",\n startBlock: 31808582,\n },\n },\n },\n\n /**\n * Contracts that power Reverse Resolution on Linea.\n */\n [DatasourceNames.ReverseResolverLinea]: {\n chain: linea,\n contracts: {\n L2ReverseRegistrar: {\n abi: StandaloneReverseRegistrar,\n address: \"0x0000000000d8e504002cc26e3ec46d81971c1664\",\n startBlock: 20173340,\n },\n },\n },\n\n /**\n * Contracts that power Reverse Resolution on Optimism.\n */\n [DatasourceNames.ReverseResolverOptimism]: {\n chain: optimism,\n contracts: {\n L2ReverseRegistrar: {\n abi: StandaloneReverseRegistrar,\n address: \"0x0000000000d8e504002cc26e3ec46d81971c1664\",\n startBlock: 137403854,\n },\n },\n },\n\n /**\n * Contracts that power Reverse Resolution on Arbitrum.\n */\n [DatasourceNames.ReverseResolverArbitrum]: {\n chain: arbitrum,\n contracts: {\n L2ReverseRegistrar: {\n abi: StandaloneReverseRegistrar,\n address: \"0x0000000000d8e504002cc26e3ec46d81971c1664\",\n startBlock: 349263357,\n },\n },\n },\n\n /**\n * Contracts that power Reverse Resolution on Scroll.\n */\n [DatasourceNames.ReverseResolverScroll]: {\n chain: scroll,\n contracts: {\n L2ReverseRegistrar: {\n abi: StandaloneReverseRegistrar,\n address: \"0x0000000000d8e504002cc26e3ec46d81971c1664\",\n startBlock: 16604272,\n },\n },\n },\n\n [DatasourceNames.Seaport]: {\n chain: mainnet,\n contracts: {\n Seaport1_5: {\n abi: Seaport1_5, // Seaport 1.5\n address: \"0x00000000000000adc04c56bf30ac9d3c0aaf14dc\",\n startBlock: 17129405,\n },\n },\n },\n} satisfies ENSNamespace;\n","import type { Abi } from \"viem\";\n\nexport const Registry = [\n {\n inputs: [{ internalType: \"address\", name: \"rootOwner\", type: \"address\" }],\n stateMutability: \"nonpayable\",\n type: \"constructor\",\n },\n { inputs: [], name: \"Unauthorized\", type: \"error\" },\n {\n anonymous: false,\n inputs: [\n {\n indexed: true,\n internalType: \"address\",\n name: \"owner\",\n type: \"address\",\n },\n {\n indexed: true,\n internalType: \"address\",\n name: \"operator\",\n type: \"address\",\n },\n { indexed: false, internalType: \"bool\", name: \"approved\", type: \"bool\" },\n ],\n name: \"ApprovalForAll\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n { indexed: true, internalType: \"bytes32\", name: \"node\", type: \"bytes32\" },\n {\n indexed: true,\n internalType: \"bytes32\",\n name: \"label\",\n type: \"bytes32\",\n },\n {\n indexed: false,\n internalType: \"address\",\n name: \"owner\",\n type: \"address\",\n },\n ],\n name: \"NewOwner\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n { indexed: true, internalType: \"bytes32\", name: \"node\", type: \"bytes32\" },\n {\n indexed: false,\n internalType: \"address\",\n name: \"resolver\",\n type: \"address\",\n },\n ],\n name: \"NewResolver\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n { indexed: true, internalType: \"bytes32\", name: \"node\", type: \"bytes32\" },\n { indexed: false, internalType: \"uint64\", name: \"ttl\", type: \"uint64\" },\n ],\n name: \"NewTTL\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n { indexed: true, internalType: \"bytes32\", name: \"node\", type: \"bytes32\" },\n {\n indexed: false,\n internalType: \"address\",\n name: \"owner\",\n type: \"address\",\n },\n ],\n name: \"Transfer\",\n type: \"event\",\n },\n {\n inputs: [\n { internalType: \"address\", name: \"owner_\", type: \"address\" },\n { internalType: \"address\", name: \"operator\", type: \"address\" },\n ],\n name: \"isApprovedForAll\",\n outputs: [{ internalType: \"bool\", name: \"\", type: \"bool\" }],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [{ internalType: \"bytes32\", name: \"node\", type: \"bytes32\" }],\n name: \"owner\",\n outputs: [{ internalType: \"address\", name: \"\", type: \"address\" }],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [{ internalType: \"bytes32\", name: \"node\", type: \"bytes32\" }],\n name: \"recordExists\",\n outputs: [{ internalType: \"bool\", name: \"\", type: \"bool\" }],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [{ internalType: \"bytes32\", name: \"node\", type: \"bytes32\" }],\n name: \"resolver\",\n outputs: [{ internalType: \"address\", name: \"\", type: \"address\" }],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n { internalType: \"address\", name: \"operator\", type: \"address\" },\n { internalType: \"bool\", name: \"approved\", type: \"bool\" },\n ],\n name: \"setApprovalForAll\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n { internalType: \"bytes32\", name: \"node\", type: \"bytes32\" },\n { internalType: \"address\", name: \"owner_\", type: \"address\" },\n ],\n name: \"setOwner\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n { internalType: \"bytes32\", name: \"node\", type: \"bytes32\" },\n { internalType: \"address\", name: \"owner_\", type: \"address\" },\n { internalType: \"address\", name: \"resolver_\", type: \"address\" },\n { internalType: \"uint64\", name: \"ttl_\", type: \"uint64\" },\n ],\n name: \"setRecord\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n { internalType: \"bytes32\", name: \"node\", type: \"bytes32\" },\n { internalType: \"address\", name: \"resolver_\", type: \"address\" },\n ],\n name: \"setResolver\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n { internalType: \"bytes32\", name: \"node\", type: \"bytes32\" },\n { internalType: \"bytes32\", name: \"label\", type: \"bytes32\" },\n { internalType: \"address\", name: \"owner_\", type: \"address\" },\n ],\n name: \"setSubnodeOwner\",\n outputs: [{ internalType: \"bytes32\", name: \"\", type: \"bytes32\" }],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n { internalType: \"bytes32\", name: \"node\", type: \"bytes32\" },\n { internalType: \"bytes32\", name: \"label\", type: \"bytes32\" },\n { internalType: \"address\", name: \"owner_\", type: \"address\" },\n { internalType: \"address\", name: \"resolver_\", type: \"address\" },\n { internalType: \"uint64\", name: \"ttl_\", type: \"uint64\" },\n ],\n name: \"setSubnodeRecord\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n { internalType: \"bytes32\", name: \"node\", type: \"bytes32\" },\n { internalType: \"uint64\", name: \"ttl_\", type: \"uint64\" },\n ],\n name: \"setTTL\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [{ internalType: \"bytes32\", name: \"node\", type: \"bytes32\" }],\n name: \"ttl\",\n outputs: [{ internalType: \"uint64\", name: \"\", type: \"uint64\" }],\n stateMutability: \"view\",\n type: \"function\",\n },\n] as const satisfies Abi;\n","import type { Abi } from \"viem\";\n\nexport const NameWrapper = [\n {\n inputs: [\n { internalType: \"contract ENS\", name: \"_ens\", type: \"address\" },\n {\n internalType: \"contract IBaseRegistrar\",\n name: \"_registrar\",\n type: \"address\",\n },\n {\n internalType: \"contract IMetadataService\",\n name: \"_metadataService\",\n type: \"address\",\n },\n { internalType: \"bytes32\", name: \"_baseNode\", type: \"bytes32\" },\n { internalType: \"bytes\", name: \"_baseNodeDnsEncoded\", type: \"bytes\" },\n ],\n stateMutability: \"nonpayable\",\n type: \"constructor\",\n },\n { inputs: [], name: \"BaseNodeAsETHNodeOrROOTNodeNotAllowed\", type: \"error\" },\n { inputs: [], name: \"CannotUpgrade\", type: \"error\" },\n { inputs: [], name: \"DifferentBaseNodeBaseNodeDnsEncoded\", type: \"error\" },\n { inputs: [], name: \"EmptyDataNotAllowed\", type: \"error\" },\n { inputs: [], name: \"IncompatibleParent\", type: \"error\" },\n {\n inputs: [{ internalType: \"address\", name: \"owner\", type: \"address\" }],\n name: \"IncorrectTargetOwner\",\n type: \"error\",\n },\n { inputs: [], name: \"IncorrectTokenType\", type: \"error\" },\n {\n inputs: [\n { internalType: \"bytes32\", name: \"labelHash\", type: \"bytes32\" },\n { internalType: \"bytes32\", name: \"expectedLabelhash\", type: \"bytes32\" },\n ],\n name: \"LabelMismatch\",\n type: \"error\",\n },\n {\n inputs: [{ internalType: \"string\", name: \"label\", type: \"string\" }],\n name: \"LabelTooLong\",\n type: \"error\",\n },\n { inputs: [], name: \"LabelTooShort\", type: \"error\" },\n { inputs: [], name: \"NameIsNotWrapped\", type: \"error\" },\n {\n inputs: [{ internalType: \"bytes32\", name: \"node\", type: \"bytes32\" }],\n name: \"OperationProhibited\",\n type: \"error\",\n },\n {\n inputs: [\n { internalType: \"bytes32\", name: \"node\", type: \"bytes32\" },\n { internalType: \"address\", name: \"addr\", type: \"address\" },\n ],\n name: \"Unauthorised\",\n type: \"error\",\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: true,\n internalType: \"address\",\n name: \"owner\",\n type: \"address\",\n },\n {\n indexed: true,\n internalType: \"address\",\n name: \"approved\",\n type: \"address\",\n },\n {\n indexed: true,\n internalType: \"uint256\",\n name: \"tokenId\",\n type: \"uint256\",\n },\n ],\n name: \"Approval\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: true,\n internalType: \"address\",\n name: \"account\",\n type: \"address\",\n },\n {\n indexed: true,\n internalType: \"address\",\n name: \"operator\",\n type: \"address\",\n },\n { indexed: false, internalType: \"bool\", name: \"approved\", type: \"bool\" },\n ],\n name: \"ApprovalForAll\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: true,\n internalType: \"address\",\n name: \"controller\",\n type: \"address\",\n },\n { indexed: false, internalType: \"bool\", name: \"active\", type: \"bool\" },\n ],\n name: \"ControllerChanged\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n { indexed: true, internalType: \"bytes32\", name: \"node\", type: \"bytes32\" },\n {\n indexed: false,\n internalType: \"uint64\",\n name: \"expiry\",\n type: \"uint64\",\n },\n ],\n name: \"ExpiryExtended\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n { indexed: true, internalType: \"bytes32\", name: \"node\", type: \"bytes32\" },\n { indexed: false, internalType: \"uint32\", name: \"fuses\", type: \"uint32\" },\n ],\n name: \"FusesSet\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n { indexed: true, internalType: \"bytes32\", name: \"node\", type: \"bytes32\" },\n {\n indexed: false,\n internalType: \"address\",\n name: \"owner\",\n type: \"address\",\n },\n ],\n name: \"NameUnwrapped\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n { indexed: true, internalType: \"bytes32\", name: \"node\", type: \"bytes32\" },\n { indexed: false, internalType: \"bytes\", name: \"name\", type: \"bytes\" },\n {\n indexed: false,\n internalType: \"address\",\n name: \"owner\",\n type: \"address\",\n },\n { indexed: false, internalType: \"uint32\", name: \"fuses\", type: \"uint32\" },\n {\n indexed: false,\n internalType: \"uint64\",\n name: \"expiry\",\n type: \"uint64\",\n },\n ],\n name: \"NameWrapped\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: true,\n internalType: \"address\",\n name: \"previousOwner\",\n type: \"address\",\n },\n {\n indexed: true,\n internalType: \"address\",\n name: \"newOwner\",\n type: \"address\",\n },\n ],\n name: \"OwnershipTransferred\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: true,\n internalType: \"address\",\n name: \"operator\",\n type: \"address\",\n },\n { indexed: true, internalType: \"address\", name: \"from\", type: \"address\" },\n { indexed: true, internalType: \"address\", name: \"to\", type: \"address\" },\n {\n indexed: false,\n internalType: \"uint256[]\",\n name: \"ids\",\n type: \"uint256[]\",\n },\n {\n indexed: false,\n internalType: \"uint256[]\",\n name: \"values\",\n type: \"uint256[]\",\n },\n ],\n name: \"TransferBatch\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: true,\n internalType: \"address\",\n name: \"operator\",\n type: \"address\",\n },\n { indexed: true, internalType: \"address\", name: \"from\", type: \"address\" },\n { indexed: true, internalType: \"address\", name: \"to\", type: \"address\" },\n { indexed: false, internalType: \"uint256\", name: \"id\", type: \"uint256\" },\n {\n indexed: false,\n internalType: \"uint256\",\n name: \"value\",\n type: \"uint256\",\n },\n ],\n name: \"TransferSingle\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n { indexed: false, internalType: \"string\", name: \"value\", type: \"string\" },\n { indexed: true, internalType: \"uint256\", name: \"id\", type: \"uint256\" },\n ],\n name: \"URI\",\n type: \"event\",\n },\n {\n inputs: [{ internalType: \"uint256\", name: \"\", type: \"uint256\" }],\n name: \"_tokens\",\n outputs: [{ internalType: \"uint256\", name: \"\", type: \"uint256\" }],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n { internalType: \"bytes32\", name: \"node\", type: \"bytes32\" },\n { internalType: \"uint32\", name: \"fuseMask\", type: \"uint32\" },\n ],\n name: \"allFusesBurned\",\n outputs: [{ internalType: \"bool\", name: \"\", type: \"bool\" }],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n { internalType: \"address\", name: \"to\", type: \"address\" },\n { internalType: \"uint256\", name: \"tokenId\", type: \"uint256\" },\n ],\n name: \"approve\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n { internalType: \"address\", name: \"account\", type: \"address\" },\n { internalType: \"uint256\", name: \"id\", type: \"uint256\" },\n ],\n name: \"balanceOf\",\n outputs: [{ internalType: \"uint256\", name: \"\", type: \"uint256\" }],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n { internalType: \"address[]\", name: \"accounts\", type: \"address[]\" },\n { internalType: \"uint256[]\", name: \"ids\", type: \"uint256[]\" },\n ],\n name: \"balanceOfBatch\",\n outputs: [{ internalType: \"uint256[]\", name: \"\", type: \"uint256[]\" }],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"baseNode\",\n outputs: [{ internalType: \"bytes32\", name: \"\", type: \"bytes32\" }],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n { internalType: \"bytes32\", name: \"node\", type: \"bytes32\" },\n { internalType: \"address\", name: \"addr\", type: \"address\" },\n ],\n name: \"canExtendSubnames\",\n outputs: [{ internalType: \"bool\", name: \"\", type: \"bool\" }],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n { internalType: \"bytes32\", name: \"node\", type: \"bytes32\" },\n { internalType: \"address\", name: \"addr\", type: \"address\" },\n ],\n name: \"canModifyName\",\n outputs: [{ internalType: \"bool\", name: \"\", type: \"bool\" }],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [{ internalType: \"address\", name: \"\", type: \"address\" }],\n name: \"controllers\",\n outputs: [{ internalType: \"bool\", name: \"\", type: \"bool\" }],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"ens\",\n outputs: [{ internalType: \"contract ENS\", name: \"\", type: \"address\" }],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n { internalType: \"bytes32\", name: \"parentNode\", type: \"bytes32\" },\n { internalType: \"bytes32\", name: \"labelhash\", type: \"bytes32\" },\n { internalType: \"uint64\", name: \"expiry\", type: \"uint64\" },\n ],\n name: \"extendExpiry\",\n outputs: [{ internalType: \"uint64\", name: \"\", type: \"uint64\" }],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [{ internalType: \"uint256\", name: \"id\", type: \"uint256\" }],\n name: \"getApproved\",\n outputs: [{ internalType: \"address\", name: \"operator\", type: \"address\" }],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [{ internalType: \"uint256\", name: \"id\", type: \"uint256\" }],\n name: \"getData\",\n outputs: [\n { internalType: \"address\", name: \"owner\", type: \"address\" },\n { internalType: \"uint32\", name: \"fuses\", type: \"uint32\" },\n { internalType: \"uint64\", name: \"expiry\", type: \"uint64\" },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n { internalType: \"address\", name: \"account\", type: \"address\" },\n { internalType: \"address\", name: \"operator\", type: \"address\" },\n ],\n name: \"isApprovedForAll\",\n outputs: [{ internalType: \"bool\", name: \"\", type: \"bool\" }],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n { internalType: \"bytes32\", name: \"parentNode\", type: \"bytes32\" },\n { internalType: \"bytes32\", name: \"labelhash\", type: \"bytes32\" },\n ],\n name: \"isWrapped\",\n outputs: [{ internalType: \"bool\", name: \"\", type: \"bool\" }],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [{ internalType: \"bytes32\", name: \"node\", type: \"bytes32\" }],\n name: \"isWrapped\",\n outputs: [{ internalType: \"bool\", name: \"\", type: \"bool\" }],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"metadataService\",\n outputs: [{ internalType: \"contract IMetadataService\", name: \"\", type: \"address\" }],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"name\",\n outputs: [{ internalType: \"string\", name: \"\", type: \"string\" }],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [{ internalType: \"bytes32\", name: \"\", type: \"bytes32\" }],\n name: \"names\",\n outputs: [{ internalType: \"bytes\", name: \"\", type: \"bytes\" }],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n { internalType: \"address\", name: \"to\", type: \"address\" },\n { internalType: \"address\", name: \"\", type: \"address\" },\n { internalType: \"uint256\", name: \"tokenId\", type: \"uint256\" },\n { internalType: \"bytes\", name: \"data\", type: \"bytes\" },\n ],\n name: \"onERC721Received\",\n outputs: [{ internalType: \"bytes4\", name: \"\", type: \"bytes4\" }],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"owner\",\n outputs: [{ internalType: \"address\", name: \"\", type: \"address\" }],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [{ internalType: \"uint256\", name: \"id\", type: \"uint256\" }],\n name: \"ownerOf\",\n outputs: [{ internalType: \"address\", name: \"owner\", type: \"address\" }],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n { internalType: \"address\", name: \"_token\", type: \"address\" },\n { internalType: \"address\", name: \"_to\", type: \"address\" },\n { internalType: \"uint256\", name: \"_amount\", type: \"uint256\" },\n ],\n name: \"recoverFunds\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n { internalType: \"string\", name: \"label\", type: \"string\" },\n { internalType: \"address\", name: \"wrappedOwner\", type: \"address\" },\n { internalType: \"uint256\", name: \"duration\", type: \"uint256\" },\n { internalType: \"address\", name: \"resolver\", type: \"address\" },\n { internalType: \"uint16\", name: \"ownerControlledFuses\", type: \"uint16\" },\n ],\n name: \"registerAndWrap\",\n outputs: [{ internalType: \"uint256\", name: \"registrarExpiry\", type: \"uint256\" }],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"registrar\",\n outputs: [{ internalType: \"contract IBaseRegistrar\", name: \"\", type: \"address\" }],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n { internalType: \"uint256\", name: \"tokenId\", type: \"uint256\" },\n { internalType: \"uint256\", name: \"duration\", type: \"uint256\" },\n ],\n name: \"renew\",\n outputs: [{ internalType: \"uint256\", name: \"expires\", type: \"uint256\" }],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"renounceOwnership\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n { internalType: \"address\", name: \"from\", type: \"address\" },\n { internalType: \"address\", name: \"to\", type: \"address\" },\n { internalType: \"uint256[]\", name: \"ids\", type: \"uint256[]\" },\n { internalType: \"uint256[]\", name: \"amounts\", type: \"uint256[]\" },\n { internalType: \"bytes\", name: \"data\", type: \"bytes\" },\n ],\n name: \"safeBatchTransferFrom\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n { internalType: \"address\", name: \"from\", type: \"address\" },\n { internalType: \"address\", name: \"to\", type: \"address\" },\n { internalType: \"uint256\", name: \"id\", type: \"uint256\" },\n { internalType: \"uint256\", name: \"amount\", type: \"uint256\" },\n { internalType: \"bytes\", name: \"data\", type: \"bytes\" },\n ],\n name: \"safeTransferFrom\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n { internalType: \"address\", name: \"operator\", type: \"address\" },\n { internalType: \"bool\", name: \"approved\", type: \"bool\" },\n ],\n name: \"setApprovalForAll\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n { internalType: \"bytes32\", name: \"parentNode\", type: \"bytes32\" },\n { internalType: \"bytes32\", name: \"labelhash\", type: \"bytes32\" },\n { internalType: \"uint32\", name: \"fuses\", type: \"uint32\" },\n { internalType: \"uint64\", name: \"expiry\", type: \"uint64\" },\n ],\n name: \"setChildFuses\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n { internalType: \"address\", name: \"controller\", type: \"address\" },\n { internalType: \"bool\", name: \"active\", type: \"bool\" },\n ],\n name: \"setController\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n { internalType: \"bytes32\", name: \"node\", type: \"bytes32\" },\n { internalType: \"uint16\", name: \"ownerControlledFuses\", type: \"uint16\" },\n ],\n name: \"setFuses\",\n outputs: [{ internalType: \"uint32\", name: \"\", type: \"uint32\" }],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"contract IMetadataService\",\n name: \"_metadataService\",\n type: \"address\",\n },\n ],\n name: \"setMetadataService\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n { internalType: \"bytes32\", name: \"node\", type: \"bytes32\" },\n { internalType: \"address\", name: \"owner\", type: \"address\" },\n { internalType: \"address\", name: \"resolver\", type: \"address\" },\n { internalType: \"uint64\", name: \"ttl\", type: \"uint64\" },\n ],\n name: \"setRecord\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n { internalType: \"bytes32\", name: \"node\", type: \"bytes32\" },\n { internalType: \"address\", name: \"resolver\", type: \"address\" },\n ],\n name: \"setResolver\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n { internalType: \"bytes32\", name: \"parentNode\", type: \"bytes32\" },\n { internalType: \"string\", name: \"label\", type: \"string\" },\n { internalType: \"address\", name: \"owner\", type: \"address\" },\n { internalType: \"uint32\", name: \"fuses\", type: \"uint32\" },\n { internalType: \"uint64\", name: \"expiry\", type: \"uint64\" },\n ],\n name: \"setSubnodeOwner\",\n outputs: [{ internalType: \"bytes32\", name: \"node\", type: \"bytes32\" }],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n { internalType: \"bytes32\", name: \"parentNode\", type: \"bytes32\" },\n { internalType: \"string\", name: \"label\", type: \"string\" },\n { internalType: \"address\", name: \"owner\", type: \"address\" },\n { internalType: \"address\", name: \"resolver\", type: \"address\" },\n { internalType: \"uint64\", name: \"ttl\", type: \"uint64\" },\n { internalType: \"uint32\", name: \"fuses\", type: \"uint32\" },\n { internalType: \"uint64\", name: \"expiry\", type: \"uint64\" },\n ],\n name: \"setSubnodeRecord\",\n outputs: [{ internalType: \"bytes32\", name: \"node\", type: \"bytes32\" }],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n { internalType: \"bytes32\", name: \"node\", type: \"bytes32\" },\n { internalType: \"uint64\", name: \"ttl\", type: \"uint64\" },\n ],\n name: \"setTTL\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"contract INameWrapperUpgrade\",\n name: \"_upgradeAddress\",\n type: \"address\",\n },\n ],\n name: \"setUpgradeContract\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [{ internalType: \"bytes4\", name: \"interfaceId\", type: \"bytes4\" }],\n name: \"supportsInterface\",\n outputs: [{ internalType: \"bool\", name: \"\", type: \"bool\" }],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [{ internalType: \"address\", name: \"newOwner\", type: \"address\" }],\n name: \"transferOwnership\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n { internalType: \"bytes32\", name: \"parentNode\", type: \"bytes32\" },\n { internalType: \"bytes32\", name: \"labelhash\", type: \"bytes32\" },\n { internalType: \"address\", name: \"controller\", type: \"address\" },\n ],\n name: \"unwrap\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n { internalType: \"bytes32\", name: \"labelhash\", type: \"bytes32\" },\n { internalType: \"address\", name: \"registrant\", type: \"address\" },\n { internalType: \"address\", name: \"controller\", type: \"address\" },\n ],\n name: \"unwrapAnyLD\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n { internalType: \"bytes\", name: \"name\", type: \"bytes\" },\n { internalType: \"bytes\", name: \"extraData\", type: \"bytes\" },\n ],\n name: \"upgrade\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"upgradeContract\",\n outputs: [\n {\n internalType: \"contract INameWrapperUpgrade\",\n name: \"\",\n type: \"address\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [{ internalType: \"uint256\", name: \"tokenId\", type: \"uint256\" }],\n name: \"uri\",\n outputs: [{ internalType: \"string\", name: \"\", type: \"string\" }],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n { internalType: \"bytes\", name: \"name\", type: \"bytes\" },\n { internalType: \"address\", name: \"wrappedOwner\", type: \"address\" },\n { internalType: \"address\", name: \"resolver\", type: \"address\" },\n ],\n name: \"wrap\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n { internalType: \"string\", name: \"label\", type: \"string\" },\n { internalType: \"address\", name: \"wrappedOwner\", type: \"address\" },\n { internalType: \"uint16\", name: \"ownerControlledFuses\", type: \"uint16\" },\n { internalType: \"address\", name: \"resolver\", type: \"address\" },\n ],\n name: \"wrapAnyLD\",\n outputs: [{ internalType: \"uint64\", name: \"expiry\", type: \"uint64\" }],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n] as const satisfies Abi;\n","import type { Abi } from \"viem\";\n\nexport const Registry = [\n { inputs: [], stateMutability: \"nonpayable\", type: \"constructor\" },\n {\n anonymous: false,\n inputs: [\n {\n indexed: true,\n internalType: \"address\",\n name: \"owner\",\n type: \"address\",\n },\n {\n indexed: true,\n internalType: \"address\",\n name: \"operator\",\n type: \"address\",\n },\n { indexed: false, internalType: \"bool\", name: \"approved\", type: \"bool\" },\n ],\n name: \"ApprovalForAll\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n { indexed: true, internalType: \"bytes32\", name: \"node\", type: \"bytes32\" },\n {\n indexed: true,\n internalType: \"bytes32\",\n name: \"label\",\n type: \"bytes32\",\n },\n {\n indexed: false,\n internalType: \"address\",\n name: \"owner\",\n type: \"address\",\n },\n ],\n name: \"NewOwner\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n { indexed: true, internalType: \"bytes32\", name: \"node\", type: \"bytes32\" },\n {\n indexed: false,\n internalType: \"address\",\n name: \"resolver\",\n type: \"address\",\n },\n ],\n name: \"NewResolver\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n { indexed: true, internalType: \"bytes32\", name: \"node\", type: \"bytes32\" },\n { indexed: false, internalType: \"uint64\", name: \"ttl\", type: \"uint64\" },\n ],\n name: \"NewTTL\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n { indexed: true, internalType: \"bytes32\", name: \"node\", type: \"bytes32\" },\n {\n indexed: false,\n internalType: \"address\",\n name: \"owner\",\n type: \"address\",\n },\n ],\n name: \"Transfer\",\n type: \"event\",\n },\n {\n inputs: [\n { internalType: \"address\", name: \"owner\", type: \"address\" },\n { internalType: \"address\", name: \"operator\", type: \"address\" },\n ],\n name: \"isApprovedForAll\",\n outputs: [{ internalType: \"bool\", name: \"\", type: \"bool\" }],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [{ internalType: \"bytes32\", name: \"node\", type: \"bytes32\" }],\n name: \"owner\",\n outputs: [{ internalType: \"address\", name: \"\", type: \"address\" }],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [{ internalType: \"bytes32\", name: \"node\", type: \"bytes32\" }],\n name: \"recordExists\",\n outputs: [{ internalType: \"bool\", name: \"\", type: \"bool\" }],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [{ internalType: \"bytes32\", name: \"node\", type: \"bytes32\" }],\n name: \"resolver\",\n outputs: [{ internalType: \"address\", name: \"\", type: \"address\" }],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n { internalType: \"address\", name: \"operator\", type: \"address\" },\n { internalType: \"bool\", name: \"approved\", type: \"bool\" },\n ],\n name: \"setApprovalForAll\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n { internalType: \"bytes32\", name: \"node\", type: \"bytes32\" },\n { internalType: \"address\", name: \"owner\", type: \"address\" },\n ],\n name: \"setOwner\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n { internalType: \"bytes32\", name: \"node\", type: \"bytes32\" },\n { internalType: \"address\", name: \"owner\", type: \"address\" },\n { internalType: \"address\", name: \"resolver\", type: \"address\" },\n { internalType: \"uint64\", name: \"ttl\", type: \"uint64\" },\n ],\n name: \"setRecord\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n { internalType: \"bytes32\", name: \"node\", type: \"bytes32\" },\n { internalType: \"address\", name: \"resolver\", type: \"address\" },\n ],\n name: \"setResolver\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n { internalType: \"bytes32\", name: \"node\", type: \"bytes32\" },\n { internalType: \"bytes32\", name: \"label\", type: \"bytes32\" },\n { internalType: \"address\", name: \"owner\", type: \"address\" },\n ],\n name: \"setSubnodeOwner\",\n outputs: [{ internalType: \"bytes32\", name: \"\", type: \"bytes32\" }],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n { internalType: \"bytes32\", name: \"node\", type: \"bytes32\" },\n { internalType: \"bytes32\", name: \"label\", type: \"bytes32\" },\n { internalType: \"address\", name: \"owner\", type: \"address\" },\n { internalType: \"address\", name: \"resolver\", type: \"address\" },\n { internalType: \"uint64\", name: \"ttl\", type: \"uint64\" },\n ],\n name: \"setSubnodeRecord\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n { internalType: \"bytes32\", name: \"node\", type: \"bytes32\" },\n { internalType: \"uint64\", name: \"ttl\", type: \"uint64\" },\n ],\n name: \"setTTL\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [{ internalType: \"bytes32\", name: \"node\", type: \"bytes32\" }],\n name: \"ttl\",\n outputs: [{ internalType: \"uint64\", name: \"\", type: \"uint64\" }],\n stateMutability: \"view\",\n type: \"function\",\n },\n] as const satisfies Abi;\n","import type { Abi } from \"viem\";\n\nexport const Seaport = [\n {\n inputs: [{ internalType: \"address\", name: \"conduitController\", type: \"address\" }],\n stateMutability: \"nonpayable\",\n type: \"constructor\",\n },\n { inputs: [], name: \"BadContractSignature\", type: \"error\" },\n {\n inputs: [],\n name: \"BadFraction\",\n type: \"error\",\n },\n {\n inputs: [\n { internalType: \"address\", name: \"token\", type: \"address\" },\n {\n internalType: \"address\",\n name: \"from\",\n type: \"address\",\n },\n { internalType: \"address\", name: \"to\", type: \"address\" },\n {\n internalType: \"uint256\",\n name: \"amount\",\n type: \"uint256\",\n },\n ],\n name: \"BadReturnValueFromERC20OnTransfer\",\n type: \"error\",\n },\n {\n inputs: [{ internalType: \"uint8\", name: \"v\", type: \"uint8\" }],\n name: \"BadSignatureV\",\n type: \"error\",\n },\n { inputs: [], name: \"CannotCancelOrder\", type: \"error\" },\n {\n inputs: [],\n name: \"ConsiderationCriteriaResolverOutOfRange\",\n type: \"error\",\n },\n {\n inputs: [],\n name: \"ConsiderationLengthNotEqualToTotalOriginal\",\n type: \"error\",\n },\n {\n inputs: [\n { internalType: \"uint256\", name: \"orderIndex\", type: \"uint256\" },\n {\n internalType: \"uint256\",\n name: \"considerationIndex\",\n type: \"uint256\",\n },\n { internalType: \"uint256\", name: \"shortfallAmount\", type: \"uint256\" },\n ],\n name: \"ConsiderationNotMet\",\n type: \"error\",\n },\n { inputs: [], name: \"CriteriaNotEnabledForItem\", type: \"error\" },\n {\n inputs: [\n {\n internalType: \"address\",\n name: \"token\",\n type: \"address\",\n },\n { internalType: \"address\", name: \"from\", type: \"address\" },\n {\n internalType: \"address\",\n name: \"to\",\n type: \"address\",\n },\n { internalType: \"uint256[]\", name: \"identifiers\", type: \"uint256[]\" },\n {\n internalType: \"uint256[]\",\n name: \"amounts\",\n type: \"uint256[]\",\n },\n ],\n name: \"ERC1155BatchTransferGenericFailure\",\n type: \"error\",\n },\n { inputs: [], name: \"InexactFraction\", type: \"error\" },\n {\n inputs: [],\n name: \"InsufficientNativeTokensSupplied\",\n type: \"error\",\n },\n { inputs: [], name: \"Invalid1155BatchTransferEncoding\", type: \"error\" },\n {\n inputs: [],\n name: \"InvalidBasicOrderParameterEncoding\",\n type: \"error\",\n },\n {\n inputs: [{ internalType: \"address\", name: \"conduit\", type: \"address\" }],\n name: \"InvalidCallToConduit\",\n type: \"error\",\n },\n {\n inputs: [\n { internalType: \"bytes32\", name: \"conduitKey\", type: \"bytes32\" },\n {\n internalType: \"address\",\n name: \"conduit\",\n type: \"address\",\n },\n ],\n name: \"InvalidConduit\",\n type: \"error\",\n },\n {\n inputs: [{ internalType: \"bytes32\", name: \"orderHash\", type: \"bytes32\" }],\n name: \"InvalidContractOrder\",\n type: \"error\",\n },\n {\n inputs: [{ internalType: \"uint256\", name: \"amount\", type: \"uint256\" }],\n name: \"InvalidERC721TransferAmount\",\n type: \"error\",\n },\n { inputs: [], name: \"InvalidFulfillmentComponentData\", type: \"error\" },\n {\n inputs: [\n {\n internalType: \"uint256\",\n name: \"value\",\n type: \"uint256\",\n },\n ],\n name: \"InvalidMsgValue\",\n type: \"error\",\n },\n { inputs: [], name: \"InvalidNativeOfferItem\", type: \"error\" },\n {\n inputs: [],\n name: \"InvalidProof\",\n type: \"error\",\n },\n {\n inputs: [{ internalType: \"bytes32\", name: \"orderHash\", type: \"bytes32\" }],\n name: \"InvalidRestrictedOrder\",\n type: \"error\",\n },\n { inputs: [], name: \"InvalidSignature\", type: \"error\" },\n {\n inputs: [],\n name: \"InvalidSigner\",\n type: \"error\",\n },\n {\n inputs: [\n { internalType: \"uint256\", name: \"startTime\", type: \"uint256\" },\n {\n internalType: \"uint256\",\n name: \"endTime\",\n type: \"uint256\",\n },\n ],\n name: \"InvalidTime\",\n type: \"error\",\n },\n {\n inputs: [{ internalType: \"uint256\", name: \"fulfillmentIndex\", type: \"uint256\" }],\n name: \"MismatchedFulfillmentOfferAndConsiderationComponents\",\n type: \"error\",\n },\n {\n inputs: [{ internalType: \"enum Side\", name: \"side\", type: \"uint8\" }],\n name: \"MissingFulfillmentComponentOnAggregation\",\n type: \"error\",\n },\n { inputs: [], name: \"MissingItemAmount\", type: \"error\" },\n {\n inputs: [],\n name: \"MissingOriginalConsiderationItems\",\n type: \"error\",\n },\n {\n inputs: [\n { internalType: \"address\", name: \"account\", type: \"address\" },\n {\n internalType: \"uint256\",\n name: \"amount\",\n type: \"uint256\",\n },\n ],\n name: \"NativeTokenTransferGenericFailure\",\n type: \"error\",\n },\n {\n inputs: [{ internalType: \"address\", name: \"account\", type: \"address\" }],\n name: \"NoContract\",\n type: \"error\",\n },\n { inputs: [], name: \"NoReentrantCalls\", type: \"error\" },\n {\n inputs: [],\n name: \"NoSpecifiedOrdersAvailable\",\n type: \"error\",\n },\n { inputs: [], name: \"OfferAndConsiderationRequiredOnFulfillment\", type: \"error\" },\n {\n inputs: [],\n name: \"OfferCriteriaResolverOutOfRange\",\n type: \"error\",\n },\n {\n inputs: [{ internalType: \"bytes32\", name: \"orderHash\", type: \"bytes32\" }],\n name: \"OrderAlreadyFilled\",\n type: \"error\",\n },\n {\n inputs: [{ internalType: \"enum Side\", name: \"side\", type: \"uint8\" }],\n name: \"OrderCriteriaResolverOutOfRange\",\n type: \"error\",\n },\n {\n inputs: [{ internalType: \"bytes32\", name: \"orderHash\", type: \"bytes32\" }],\n name: \"OrderIsCancelled\",\n type: \"error\",\n },\n {\n inputs: [{ internalType: \"bytes32\", name: \"orderHash\", type: \"bytes32\" }],\n name: \"OrderPartiallyFilled\",\n type: \"error\",\n },\n { inputs: [], name: \"PartialFillsNotEnabledForOrder\", type: \"error\" },\n {\n inputs: [\n {\n internalType: \"address\",\n name: \"token\",\n type: \"address\",\n },\n { internalType: \"address\", name: \"from\", type: \"address\" },\n {\n internalType: \"address\",\n name: \"to\",\n type: \"address\",\n },\n { internalType: \"uint256\", name: \"identifier\", type: \"uint256\" },\n {\n internalType: \"uint256\",\n name: \"amount\",\n type: \"uint256\",\n },\n ],\n name: \"TokenTransferGenericFailure\",\n type: \"error\",\n },\n {\n inputs: [\n { internalType: \"uint256\", name: \"orderIndex\", type: \"uint256\" },\n {\n internalType: \"uint256\",\n name: \"considerationIndex\",\n type: \"uint256\",\n },\n ],\n name: \"UnresolvedConsiderationCriteria\",\n type: \"error\",\n },\n {\n inputs: [\n { internalType: \"uint256\", name: \"orderIndex\", type: \"uint256\" },\n {\n internalType: \"uint256\",\n name: \"offerIndex\",\n type: \"uint256\",\n },\n ],\n name: \"UnresolvedOfferCriteria\",\n type: \"error\",\n },\n { inputs: [], name: \"UnusedItemParameters\", type: \"error\" },\n {\n anonymous: false,\n inputs: [\n { indexed: false, internalType: \"uint256\", name: \"newCounter\", type: \"uint256\" },\n {\n indexed: true,\n internalType: \"address\",\n name: \"offerer\",\n type: \"address\",\n },\n ],\n name: \"CounterIncremented\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n { indexed: false, internalType: \"bytes32\", name: \"orderHash\", type: \"bytes32\" },\n {\n indexed: true,\n internalType: \"address\",\n name: \"offerer\",\n type: \"address\",\n },\n { indexed: true, internalType: \"address\", name: \"zone\", type: \"address\" },\n ],\n name: \"OrderCancelled\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n { indexed: false, internalType: \"bytes32\", name: \"orderHash\", type: \"bytes32\" },\n {\n indexed: true,\n internalType: \"address\",\n name: \"offerer\",\n type: \"address\",\n },\n { indexed: true, internalType: \"address\", name: \"zone\", type: \"address\" },\n {\n indexed: false,\n internalType: \"address\",\n name: \"recipient\",\n type: \"address\",\n },\n {\n components: [\n {\n internalType: \"enum ItemType\",\n name: \"itemType\",\n type: \"uint8\",\n },\n { internalType: \"address\", name: \"token\", type: \"address\" },\n {\n internalType: \"uint256\",\n name: \"identifier\",\n type: \"uint256\",\n },\n { internalType: \"uint256\", name: \"amount\", type: \"uint256\" },\n ],\n indexed: false,\n internalType: \"struct SpentItem[]\",\n name: \"offer\",\n type: \"tuple[]\",\n },\n {\n components: [\n {\n internalType: \"enum ItemType\",\n name: \"itemType\",\n type: \"uint8\",\n },\n { internalType: \"address\", name: \"token\", type: \"address\" },\n {\n internalType: \"uint256\",\n name: \"identifier\",\n type: \"uint256\",\n },\n { internalType: \"uint256\", name: \"amount\", type: \"uint256\" },\n {\n internalType: \"address payable\",\n name: \"recipient\",\n type: \"address\",\n },\n ],\n indexed: false,\n internalType: \"struct ReceivedItem[]\",\n name: \"consideration\",\n type: \"tuple[]\",\n },\n ],\n name: \"OrderFulfilled\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n { indexed: false, internalType: \"bytes32\", name: \"orderHash\", type: \"bytes32\" },\n {\n components: [\n { internalType: \"address\", name: \"offerer\", type: \"address\" },\n {\n internalType: \"address\",\n name: \"zone\",\n type: \"address\",\n },\n {\n components: [\n {\n internalType: \"enum ItemType\",\n name: \"itemType\",\n type: \"uint8\",\n },\n { internalType: \"address\", name: \"token\", type: \"address\" },\n {\n internalType: \"uint256\",\n name: \"identifierOrCriteria\",\n type: \"uint256\",\n },\n { internalType: \"uint256\", name: \"startAmount\", type: \"uint256\" },\n {\n internalType: \"uint256\",\n name: \"endAmount\",\n type: \"uint256\",\n },\n ],\n internalType: \"struct OfferItem[]\",\n name: \"offer\",\n type: \"tuple[]\",\n },\n {\n components: [\n {\n internalType: \"enum ItemType\",\n name: \"itemType\",\n type: \"uint8\",\n },\n { internalType: \"address\", name: \"token\", type: \"address\" },\n {\n internalType: \"uint256\",\n name: \"identifierOrCriteria\",\n type: \"uint256\",\n },\n { internalType: \"uint256\", name: \"startAmount\", type: \"uint256\" },\n {\n internalType: \"uint256\",\n name: \"endAmount\",\n type: \"uint256\",\n },\n { internalType: \"address payable\", name: \"recipient\", type: \"address\" },\n ],\n internalType: \"struct ConsiderationItem[]\",\n name: \"consideration\",\n type: \"tuple[]\",\n },\n { internalType: \"enum OrderType\", name: \"orderType\", type: \"uint8\" },\n {\n internalType: \"uint256\",\n name: \"startTime\",\n type: \"uint256\",\n },\n { internalType: \"uint256\", name: \"endTime\", type: \"uint256\" },\n {\n internalType: \"bytes32\",\n name: \"zoneHash\",\n type: \"bytes32\",\n },\n { internalType: \"uint256\", name: \"salt\", type: \"uint256\" },\n {\n internalType: \"bytes32\",\n name: \"conduitKey\",\n type: \"bytes32\",\n },\n { internalType: \"uint256\", name: \"totalOriginalConsiderationItems\", type: \"uint256\" },\n ],\n indexed: false,\n internalType: \"struct OrderParameters\",\n name: \"orderParameters\",\n type: \"tuple\",\n },\n ],\n name: \"OrderValidated\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [{ indexed: false, internalType: \"bytes32[]\", name: \"orderHashes\", type: \"bytes32[]\" }],\n name: \"OrdersMatched\",\n type: \"event\",\n },\n {\n inputs: [\n {\n components: [\n { internalType: \"address\", name: \"offerer\", type: \"address\" },\n {\n internalType: \"address\",\n name: \"zone\",\n type: \"address\",\n },\n {\n components: [\n {\n internalType: \"enum ItemType\",\n name: \"itemType\",\n type: \"uint8\",\n },\n { internalType: \"address\", name: \"token\", type: \"address\" },\n {\n internalType: \"uint256\",\n name: \"identifierOrCriteria\",\n type: \"uint256\",\n },\n { internalType: \"uint256\", name: \"startAmount\", type: \"uint256\" },\n {\n internalType: \"uint256\",\n name: \"endAmount\",\n type: \"uint256\",\n },\n ],\n internalType: \"struct OfferItem[]\",\n name: \"offer\",\n type: \"tuple[]\",\n },\n {\n components: [\n {\n internalType: \"enum ItemType\",\n name: \"itemType\",\n type: \"uint8\",\n },\n { internalType: \"address\", name: \"token\", type: \"address\" },\n {\n internalType: \"uint256\",\n name: \"identifierOrCriteria\",\n type: \"uint256\",\n },\n { internalType: \"uint256\", name: \"startAmount\", type: \"uint256\" },\n {\n internalType: \"uint256\",\n name: \"endAmount\",\n type: \"uint256\",\n },\n { internalType: \"address payable\", name: \"recipient\", type: \"address\" },\n ],\n internalType: \"struct ConsiderationItem[]\",\n name: \"consideration\",\n type: \"tuple[]\",\n },\n { internalType: \"enum OrderType\", name: \"orderType\", type: \"uint8\" },\n {\n internalType: \"uint256\",\n name: \"startTime\",\n type: \"uint256\",\n },\n { internalType: \"uint256\", name: \"endTime\", type: \"uint256\" },\n {\n internalType: \"bytes32\",\n name: \"zoneHash\",\n type: \"bytes32\",\n },\n { internalType: \"uint256\", name: \"salt\", type: \"uint256\" },\n {\n internalType: \"bytes32\",\n name: \"conduitKey\",\n type: \"bytes32\",\n },\n { internalType: \"uint256\", name: \"counter\", type: \"uint256\" },\n ],\n internalType: \"struct OrderComponents[]\",\n name: \"orders\",\n type: \"tuple[]\",\n },\n ],\n name: \"cancel\",\n outputs: [{ internalType: \"bool\", name: \"cancelled\", type: \"bool\" }],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n components: [\n {\n components: [\n {\n internalType: \"address\",\n name: \"offerer\",\n type: \"address\",\n },\n {\n internalType: \"address\",\n name: \"zone\",\n type: \"address\",\n },\n {\n components: [\n {\n internalType: \"enum ItemType\",\n name: \"itemType\",\n type: \"uint8\",\n },\n { internalType: \"address\", name: \"token\", type: \"address\" },\n {\n internalType: \"uint256\",\n name: \"identifierOrCriteria\",\n type: \"uint256\",\n },\n { internalType: \"uint256\", name: \"startAmount\", type: \"uint256\" },\n {\n internalType: \"uint256\",\n name: \"endAmount\",\n type: \"uint256\",\n },\n ],\n internalType: \"struct OfferItem[]\",\n name: \"offer\",\n type: \"tuple[]\",\n },\n {\n components: [\n {\n internalType: \"enum ItemType\",\n name: \"itemType\",\n type: \"uint8\",\n },\n { internalType: \"address\", name: \"token\", type: \"address\" },\n {\n internalType: \"uint256\",\n name: \"identifierOrCriteria\",\n type: \"uint256\",\n },\n { internalType: \"uint256\", name: \"startAmount\", type: \"uint256\" },\n {\n internalType: \"uint256\",\n name: \"endAmount\",\n type: \"uint256\",\n },\n { internalType: \"address payable\", name: \"recipient\", type: \"address\" },\n ],\n internalType: \"struct ConsiderationItem[]\",\n name: \"consideration\",\n type: \"tuple[]\",\n },\n { internalType: \"enum OrderType\", name: \"orderType\", type: \"uint8\" },\n {\n internalType: \"uint256\",\n name: \"startTime\",\n type: \"uint256\",\n },\n { internalType: \"uint256\", name: \"endTime\", type: \"uint256\" },\n {\n internalType: \"bytes32\",\n name: \"zoneHash\",\n type: \"bytes32\",\n },\n { internalType: \"uint256\", name: \"salt\", type: \"uint256\" },\n {\n internalType: \"bytes32\",\n name: \"conduitKey\",\n type: \"bytes32\",\n },\n { internalType: \"uint256\", name: \"totalOriginalConsiderationItems\", type: \"uint256\" },\n ],\n internalType: \"struct OrderParameters\",\n name: \"parameters\",\n type: \"tuple\",\n },\n { internalType: \"uint120\", name: \"numerator\", type: \"uint120\" },\n {\n internalType: \"uint120\",\n name: \"denominator\",\n type: \"uint120\",\n },\n { internalType: \"bytes\", name: \"signature\", type: \"bytes\" },\n {\n internalType: \"bytes\",\n name: \"extraData\",\n type: \"bytes\",\n },\n ],\n internalType: \"struct AdvancedOrder\",\n name: \"\",\n type: \"tuple\",\n },\n {\n components: [\n {\n internalType: \"uint256\",\n name: \"orderIndex\",\n type: \"uint256\",\n },\n { internalType: \"enum Side\", name: \"side\", type: \"uint8\" },\n {\n internalType: \"uint256\",\n name: \"index\",\n type: \"uint256\",\n },\n { internalType: \"uint256\", name: \"identifier\", type: \"uint256\" },\n {\n internalType: \"bytes32[]\",\n name: \"criteriaProof\",\n type: \"bytes32[]\",\n },\n ],\n internalType: \"struct CriteriaResolver[]\",\n name: \"\",\n type: \"tuple[]\",\n },\n { internalType: \"bytes32\", name: \"fulfillerConduitKey\", type: \"bytes32\" },\n {\n internalType: \"address\",\n name: \"recipient\",\n type: \"address\",\n },\n ],\n name: \"fulfillAdvancedOrder\",\n outputs: [{ internalType: \"bool\", name: \"fulfilled\", type: \"bool\" }],\n stateMutability: \"payable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n components: [\n {\n components: [\n {\n internalType: \"address\",\n name: \"offerer\",\n type: \"address\",\n },\n {\n internalType: \"address\",\n name: \"zone\",\n type: \"address\",\n },\n {\n components: [\n {\n internalType: \"enum ItemType\",\n name: \"itemType\",\n type: \"uint8\",\n },\n { internalType: \"address\", name: \"token\", type: \"address\" },\n {\n internalType: \"uint256\",\n name: \"identifierOrCriteria\",\n type: \"uint256\",\n },\n { internalType: \"uint256\", name: \"startAmount\", type: \"uint256\" },\n {\n internalType: \"uint256\",\n name: \"endAmount\",\n type: \"uint256\",\n },\n ],\n internalType: \"struct OfferItem[]\",\n name: \"offer\",\n type: \"tuple[]\",\n },\n {\n components: [\n {\n internalType: \"enum ItemType\",\n name: \"itemType\",\n type: \"uint8\",\n },\n { internalType: \"address\", name: \"token\", type: \"address\" },\n {\n internalType: \"uint256\",\n name: \"identifierOrCriteria\",\n type: \"uint256\",\n },\n { internalType: \"uint256\", name: \"startAmount\", type: \"uint256\" },\n {\n internalType: \"uint256\",\n name: \"endAmount\",\n type: \"uint256\",\n },\n { internalType: \"address payable\", name: \"recipient\", type: \"address\" },\n ],\n internalType: \"struct ConsiderationItem[]\",\n name: \"consideration\",\n type: \"tuple[]\",\n },\n { internalType: \"enum OrderType\", name: \"orderType\", type: \"uint8\" },\n {\n internalType: \"uint256\",\n name: \"startTime\",\n type: \"uint256\",\n },\n { internalType: \"uint256\", name: \"endTime\", type: \"uint256\" },\n {\n internalType: \"bytes32\",\n name: \"zoneHash\",\n type: \"bytes32\",\n },\n { internalType: \"uint256\", name: \"salt\", type: \"uint256\" },\n {\n internalType: \"bytes32\",\n name: \"conduitKey\",\n type: \"bytes32\",\n },\n { internalType: \"uint256\", name: \"totalOriginalConsiderationItems\", type: \"uint256\" },\n ],\n internalType: \"struct OrderParameters\",\n name: \"parameters\",\n type: \"tuple\",\n },\n { internalType: \"uint120\", name: \"numerator\", type: \"uint120\" },\n {\n internalType: \"uint120\",\n name: \"denominator\",\n type: \"uint120\",\n },\n { internalType: \"bytes\", name: \"signature\", type: \"bytes\" },\n {\n internalType: \"bytes\",\n name: \"extraData\",\n type: \"bytes\",\n },\n ],\n internalType: \"struct AdvancedOrder[]\",\n name: \"\",\n type: \"tuple[]\",\n },\n {\n components: [\n {\n internalType: \"uint256\",\n name: \"orderIndex\",\n type: \"uint256\",\n },\n { internalType: \"enum Side\", name: \"side\", type: \"uint8\" },\n {\n internalType: \"uint256\",\n name: \"index\",\n type: \"uint256\",\n },\n { internalType: \"uint256\", name: \"identifier\", type: \"uint256\" },\n {\n internalType: \"bytes32[]\",\n name: \"criteriaProof\",\n type: \"bytes32[]\",\n },\n ],\n internalType: \"struct CriteriaResolver[]\",\n name: \"\",\n type: \"tuple[]\",\n },\n {\n components: [\n { internalType: \"uint256\", name: \"orderIndex\", type: \"uint256\" },\n {\n internalType: \"uint256\",\n name: \"itemIndex\",\n type: \"uint256\",\n },\n ],\n internalType: \"struct FulfillmentComponent[][]\",\n name: \"\",\n type: \"tuple[][]\",\n },\n {\n components: [\n { internalType: \"uint256\", name: \"orderIndex\", type: \"uint256\" },\n {\n internalType: \"uint256\",\n name: \"itemIndex\",\n type: \"uint256\",\n },\n ],\n internalType: \"struct FulfillmentComponent[][]\",\n name: \"\",\n type: \"tuple[][]\",\n },\n { internalType: \"bytes32\", name: \"fulfillerConduitKey\", type: \"bytes32\" },\n {\n internalType: \"address\",\n name: \"recipient\",\n type: \"address\",\n },\n { internalType: \"uint256\", name: \"maximumFulfilled\", type: \"uint256\" },\n ],\n name: \"fulfillAvailableAdvancedOrders\",\n outputs: [\n {\n internalType: \"bool[]\",\n name: \"\",\n type: \"bool[]\",\n },\n {\n components: [\n {\n components: [\n {\n internalType: \"enum ItemType\",\n name: \"itemType\",\n type: \"uint8\",\n },\n { internalType: \"address\", name: \"token\", type: \"address\" },\n {\n internalType: \"uint256\",\n name: \"identifier\",\n type: \"uint256\",\n },\n { internalType: \"uint256\", name: \"amount\", type: \"uint256\" },\n {\n internalType: \"address payable\",\n name: \"recipient\",\n type: \"address\",\n },\n ],\n internalType: \"struct ReceivedItem\",\n name: \"item\",\n type: \"tuple\",\n },\n { internalType: \"address\", name: \"offerer\", type: \"address\" },\n {\n internalType: \"bytes32\",\n name: \"conduitKey\",\n type: \"bytes32\",\n },\n ],\n internalType: \"struct Execution[]\",\n name: \"\",\n type: \"tuple[]\",\n },\n ],\n stateMutability: \"payable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n components: [\n {\n components: [\n {\n internalType: \"address\",\n name: \"offerer\",\n type: \"address\",\n },\n {\n internalType: \"address\",\n name: \"zone\",\n type: \"address\",\n },\n {\n components: [\n {\n internalType: \"enum ItemType\",\n name: \"itemType\",\n type: \"uint8\",\n },\n { internalType: \"address\", name: \"token\", type: \"address\" },\n {\n internalType: \"uint256\",\n name: \"identifierOrCriteria\",\n type: \"uint256\",\n },\n { internalType: \"uint256\", name: \"startAmount\", type: \"uint256\" },\n {\n internalType: \"uint256\",\n name: \"endAmount\",\n type: \"uint256\",\n },\n ],\n internalType: \"struct OfferItem[]\",\n name: \"offer\",\n type: \"tuple[]\",\n },\n {\n components: [\n {\n internalType: \"enum ItemType\",\n name: \"itemType\",\n type: \"uint8\",\n },\n { internalType: \"address\", name: \"token\", type: \"address\" },\n {\n internalType: \"uint256\",\n name: \"identifierOrCriteria\",\n type: \"uint256\",\n },\n { internalType: \"uint256\", name: \"startAmount\", type: \"uint256\" },\n {\n internalType: \"uint256\",\n name: \"endAmount\",\n type: \"uint256\",\n },\n { internalType: \"address payable\", name: \"recipient\", type: \"address\" },\n ],\n internalType: \"struct ConsiderationItem[]\",\n name: \"consideration\",\n type: \"tuple[]\",\n },\n { internalType: \"enum OrderType\", name: \"orderType\", type: \"uint8\" },\n {\n internalType: \"uint256\",\n name: \"startTime\",\n type: \"uint256\",\n },\n { internalType: \"uint256\", name: \"endTime\", type: \"uint256\" },\n {\n internalType: \"bytes32\",\n name: \"zoneHash\",\n type: \"bytes32\",\n },\n { internalType: \"uint256\", name: \"salt\", type: \"uint256\" },\n {\n internalType: \"bytes32\",\n name: \"conduitKey\",\n type: \"bytes32\",\n },\n { internalType: \"uint256\", name: \"totalOriginalConsiderationItems\", type: \"uint256\" },\n ],\n internalType: \"struct OrderParameters\",\n name: \"parameters\",\n type: \"tuple\",\n },\n { internalType: \"bytes\", name: \"signature\", type: \"bytes\" },\n ],\n internalType: \"struct Order[]\",\n name: \"\",\n type: \"tuple[]\",\n },\n {\n components: [\n { internalType: \"uint256\", name: \"orderIndex\", type: \"uint256\" },\n {\n internalType: \"uint256\",\n name: \"itemIndex\",\n type: \"uint256\",\n },\n ],\n internalType: \"struct FulfillmentComponent[][]\",\n name: \"\",\n type: \"tuple[][]\",\n },\n {\n components: [\n { internalType: \"uint256\", name: \"orderIndex\", type: \"uint256\" },\n {\n internalType: \"uint256\",\n name: \"itemIndex\",\n type: \"uint256\",\n },\n ],\n internalType: \"struct FulfillmentComponent[][]\",\n name: \"\",\n type: \"tuple[][]\",\n },\n { internalType: \"bytes32\", name: \"fulfillerConduitKey\", type: \"bytes32\" },\n {\n internalType: \"uint256\",\n name: \"maximumFulfilled\",\n type: \"uint256\",\n },\n ],\n name: \"fulfillAvailableOrders\",\n outputs: [\n {\n internalType: \"bool[]\",\n name: \"\",\n type: \"bool[]\",\n },\n {\n components: [\n {\n components: [\n {\n internalType: \"enum ItemType\",\n name: \"itemType\",\n type: \"uint8\",\n },\n { internalType: \"address\", name: \"token\", type: \"address\" },\n {\n internalType: \"uint256\",\n name: \"identifier\",\n type: \"uint256\",\n },\n { internalType: \"uint256\", name: \"amount\", type: \"uint256\" },\n {\n internalType: \"address payable\",\n name: \"recipient\",\n type: \"address\",\n },\n ],\n internalType: \"struct ReceivedItem\",\n name: \"item\",\n type: \"tuple\",\n },\n { internalType: \"address\", name: \"offerer\", type: \"address\" },\n {\n internalType: \"bytes32\",\n name: \"conduitKey\",\n type: \"bytes32\",\n },\n ],\n internalType: \"struct Execution[]\",\n name: \"\",\n type: \"tuple[]\",\n },\n ],\n stateMutability: \"payable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n components: [\n {\n internalType: \"address\",\n name: \"considerationToken\",\n type: \"address\",\n },\n {\n internalType: \"uint256\",\n name: \"considerationIdentifier\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"considerationAmount\",\n type: \"uint256\",\n },\n { internalType: \"address payable\", name: \"offerer\", type: \"address\" },\n {\n internalType: \"address\",\n name: \"zone\",\n type: \"address\",\n },\n { internalType: \"address\", name: \"offerToken\", type: \"address\" },\n {\n internalType: \"uint256\",\n name: \"offerIdentifier\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"offerAmount\",\n type: \"uint256\",\n },\n {\n internalType: \"enum BasicOrderType\",\n name: \"basicOrderType\",\n type: \"uint8\",\n },\n { internalType: \"uint256\", name: \"startTime\", type: \"uint256\" },\n {\n internalType: \"uint256\",\n name: \"endTime\",\n type: \"uint256\",\n },\n { internalType: \"bytes32\", name: \"zoneHash\", type: \"bytes32\" },\n {\n internalType: \"uint256\",\n name: \"salt\",\n type: \"uint256\",\n },\n { internalType: \"bytes32\", name: \"offererConduitKey\", type: \"bytes32\" },\n {\n internalType: \"bytes32\",\n name: \"fulfillerConduitKey\",\n type: \"bytes32\",\n },\n {\n internalType: \"uint256\",\n name: \"totalOriginalAdditionalRecipients\",\n type: \"uint256\",\n },\n {\n components: [\n {\n internalType: \"uint256\",\n name: \"amount\",\n type: \"uint256\",\n },\n { internalType: \"address payable\", name: \"recipient\", type: \"address\" },\n ],\n internalType: \"struct AdditionalRecipient[]\",\n name: \"additionalRecipients\",\n type: \"tuple[]\",\n },\n { internalType: \"bytes\", name: \"signature\", type: \"bytes\" },\n ],\n internalType: \"struct BasicOrderParameters\",\n name: \"parameters\",\n type: \"tuple\",\n },\n ],\n name: \"fulfillBasicOrder\",\n outputs: [{ internalType: \"bool\", name: \"fulfilled\", type: \"bool\" }],\n stateMutability: \"payable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n components: [\n {\n internalType: \"address\",\n name: \"considerationToken\",\n type: \"address\",\n },\n {\n internalType: \"uint256\",\n name: \"considerationIdentifier\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"considerationAmount\",\n type: \"uint256\",\n },\n { internalType: \"address payable\", name: \"offerer\", type: \"address\" },\n {\n internalType: \"address\",\n name: \"zone\",\n type: \"address\",\n },\n { internalType: \"address\", name: \"offerToken\", type: \"address\" },\n {\n internalType: \"uint256\",\n name: \"offerIdentifier\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"offerAmount\",\n type: \"uint256\",\n },\n {\n internalType: \"enum BasicOrderType\",\n name: \"basicOrderType\",\n type: \"uint8\",\n },\n { internalType: \"uint256\", name: \"startTime\", type: \"uint256\" },\n {\n internalType: \"uint256\",\n name: \"endTime\",\n type: \"uint256\",\n },\n { internalType: \"bytes32\", name: \"zoneHash\", type: \"bytes32\" },\n {\n internalType: \"uint256\",\n name: \"salt\",\n type: \"uint256\",\n },\n { internalType: \"bytes32\", name: \"offererConduitKey\", type: \"bytes32\" },\n {\n internalType: \"bytes32\",\n name: \"fulfillerConduitKey\",\n type: \"bytes32\",\n },\n {\n internalType: \"uint256\",\n name: \"totalOriginalAdditionalRecipients\",\n type: \"uint256\",\n },\n {\n components: [\n {\n internalType: \"uint256\",\n name: \"amount\",\n type: \"uint256\",\n },\n { internalType: \"address payable\", name: \"recipient\", type: \"address\" },\n ],\n internalType: \"struct AdditionalRecipient[]\",\n name: \"additionalRecipients\",\n type: \"tuple[]\",\n },\n { internalType: \"bytes\", name: \"signature\", type: \"bytes\" },\n ],\n internalType: \"struct BasicOrderParameters\",\n name: \"parameters\",\n type: \"tuple\",\n },\n ],\n name: \"fulfillBasicOrder_efficient_6GL6yc\",\n outputs: [{ internalType: \"bool\", name: \"fulfilled\", type: \"bool\" }],\n stateMutability: \"payable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n components: [\n {\n components: [\n {\n internalType: \"address\",\n name: \"offerer\",\n type: \"address\",\n },\n {\n internalType: \"address\",\n name: \"zone\",\n type: \"address\",\n },\n {\n components: [\n {\n internalType: \"enum ItemType\",\n name: \"itemType\",\n type: \"uint8\",\n },\n { internalType: \"address\", name: \"token\", type: \"address\" },\n {\n internalType: \"uint256\",\n name: \"identifierOrCriteria\",\n type: \"uint256\",\n },\n { internalType: \"uint256\", name: \"startAmount\", type: \"uint256\" },\n {\n internalType: \"uint256\",\n name: \"endAmount\",\n type: \"uint256\",\n },\n ],\n internalType: \"struct OfferItem[]\",\n name: \"offer\",\n type: \"tuple[]\",\n },\n {\n components: [\n {\n internalType: \"enum ItemType\",\n name: \"itemType\",\n type: \"uint8\",\n },\n { internalType: \"address\", name: \"token\", type: \"address\" },\n {\n internalType: \"uint256\",\n name: \"identifierOrCriteria\",\n type: \"uint256\",\n },\n { internalType: \"uint256\", name: \"startAmount\", type: \"uint256\" },\n {\n internalType: \"uint256\",\n name: \"endAmount\",\n type: \"uint256\",\n },\n { internalType: \"address payable\", name: \"recipient\", type: \"address\" },\n ],\n internalType: \"struct ConsiderationItem[]\",\n name: \"consideration\",\n type: \"tuple[]\",\n },\n { internalType: \"enum OrderType\", name: \"orderType\", type: \"uint8\" },\n {\n internalType: \"uint256\",\n name: \"startTime\",\n type: \"uint256\",\n },\n { internalType: \"uint256\", name: \"endTime\", type: \"uint256\" },\n {\n internalType: \"bytes32\",\n name: \"zoneHash\",\n type: \"bytes32\",\n },\n { internalType: \"uint256\", name: \"salt\", type: \"uint256\" },\n {\n internalType: \"bytes32\",\n name: \"conduitKey\",\n type: \"bytes32\",\n },\n { internalType: \"uint256\", name: \"totalOriginalConsiderationItems\", type: \"uint256\" },\n ],\n internalType: \"struct OrderParameters\",\n name: \"parameters\",\n type: \"tuple\",\n },\n { internalType: \"bytes\", name: \"signature\", type: \"bytes\" },\n ],\n internalType: \"struct Order\",\n name: \"\",\n type: \"tuple\",\n },\n { internalType: \"bytes32\", name: \"fulfillerConduitKey\", type: \"bytes32\" },\n ],\n name: \"fulfillOrder\",\n outputs: [{ internalType: \"bool\", name: \"fulfilled\", type: \"bool\" }],\n stateMutability: \"payable\",\n type: \"function\",\n },\n {\n inputs: [{ internalType: \"address\", name: \"contractOfferer\", type: \"address\" }],\n name: \"getContractOffererNonce\",\n outputs: [{ internalType: \"uint256\", name: \"nonce\", type: \"uint256\" }],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [{ internalType: \"address\", name: \"offerer\", type: \"address\" }],\n name: \"getCounter\",\n outputs: [{ internalType: \"uint256\", name: \"counter\", type: \"uint256\" }],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n components: [\n { internalType: \"address\", name: \"offerer\", type: \"address\" },\n {\n internalType: \"address\",\n name: \"zone\",\n type: \"address\",\n },\n {\n components: [\n {\n internalType: \"enum ItemType\",\n name: \"itemType\",\n type: \"uint8\",\n },\n { internalType: \"address\", name: \"token\", type: \"address\" },\n {\n internalType: \"uint256\",\n name: \"identifierOrCriteria\",\n type: \"uint256\",\n },\n { internalType: \"uint256\", name: \"startAmount\", type: \"uint256\" },\n {\n internalType: \"uint256\",\n name: \"endAmount\",\n type: \"uint256\",\n },\n ],\n internalType: \"struct OfferItem[]\",\n name: \"offer\",\n type: \"tuple[]\",\n },\n {\n components: [\n {\n internalType: \"enum ItemType\",\n name: \"itemType\",\n type: \"uint8\",\n },\n { internalType: \"address\", name: \"token\", type: \"address\" },\n {\n internalType: \"uint256\",\n name: \"identifierOrCriteria\",\n type: \"uint256\",\n },\n { internalType: \"uint256\", name: \"startAmount\", type: \"uint256\" },\n {\n internalType: \"uint256\",\n name: \"endAmount\",\n type: \"uint256\",\n },\n { internalType: \"address payable\", name: \"recipient\", type: \"address\" },\n ],\n internalType: \"struct ConsiderationItem[]\",\n name: \"consideration\",\n type: \"tuple[]\",\n },\n { internalType: \"enum OrderType\", name: \"orderType\", type: \"uint8\" },\n {\n internalType: \"uint256\",\n name: \"startTime\",\n type: \"uint256\",\n },\n { internalType: \"uint256\", name: \"endTime\", type: \"uint256\" },\n {\n internalType: \"bytes32\",\n name: \"zoneHash\",\n type: \"bytes32\",\n },\n { internalType: \"uint256\", name: \"salt\", type: \"uint256\" },\n {\n internalType: \"bytes32\",\n name: \"conduitKey\",\n type: \"bytes32\",\n },\n { internalType: \"uint256\", name: \"counter\", type: \"uint256\" },\n ],\n internalType: \"struct OrderComponents\",\n name: \"\",\n type: \"tuple\",\n },\n ],\n name: \"getOrderHash\",\n outputs: [{ internalType: \"bytes32\", name: \"orderHash\", type: \"bytes32\" }],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [{ internalType: \"bytes32\", name: \"orderHash\", type: \"bytes32\" }],\n name: \"getOrderStatus\",\n outputs: [\n { internalType: \"bool\", name: \"isValidated\", type: \"bool\" },\n {\n internalType: \"bool\",\n name: \"isCancelled\",\n type: \"bool\",\n },\n { internalType: \"uint256\", name: \"totalFilled\", type: \"uint256\" },\n {\n internalType: \"uint256\",\n name: \"totalSize\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"incrementCounter\",\n outputs: [{ internalType: \"uint256\", name: \"newCounter\", type: \"uint256\" }],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"information\",\n outputs: [\n { internalType: \"string\", name: \"version\", type: \"string\" },\n {\n internalType: \"bytes32\",\n name: \"domainSeparator\",\n type: \"bytes32\",\n },\n { internalType: \"address\", name: \"conduitController\", type: \"address\" },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n components: [\n {\n components: [\n {\n internalType: \"address\",\n name: \"offerer\",\n type: \"address\",\n },\n {\n internalType: \"address\",\n name: \"zone\",\n type: \"address\",\n },\n {\n components: [\n {\n internalType: \"enum ItemType\",\n name: \"itemType\",\n type: \"uint8\",\n },\n { internalType: \"address\", name: \"token\", type: \"address\" },\n {\n internalType: \"uint256\",\n name: \"identifierOrCriteria\",\n type: \"uint256\",\n },\n { internalType: \"uint256\", name: \"startAmount\", type: \"uint256\" },\n {\n internalType: \"uint256\",\n name: \"endAmount\",\n type: \"uint256\",\n },\n ],\n internalType: \"struct OfferItem[]\",\n name: \"offer\",\n type: \"tuple[]\",\n },\n {\n components: [\n {\n internalType: \"enum ItemType\",\n name: \"itemType\",\n type: \"uint8\",\n },\n { internalType: \"address\", name: \"token\", type: \"address\" },\n {\n internalType: \"uint256\",\n name: \"identifierOrCriteria\",\n type: \"uint256\",\n },\n { internalType: \"uint256\", name: \"startAmount\", type: \"uint256\" },\n {\n internalType: \"uint256\",\n name: \"endAmount\",\n type: \"uint256\",\n },\n { internalType: \"address payable\", name: \"recipient\", type: \"address\" },\n ],\n internalType: \"struct ConsiderationItem[]\",\n name: \"consideration\",\n type: \"tuple[]\",\n },\n { internalType: \"enum OrderType\", name: \"orderType\", type: \"uint8\" },\n {\n internalType: \"uint256\",\n name: \"startTime\",\n type: \"uint256\",\n },\n { internalType: \"uint256\", name: \"endTime\", type: \"uint256\" },\n {\n internalType: \"bytes32\",\n name: \"zoneHash\",\n type: \"bytes32\",\n },\n { internalType: \"uint256\", name: \"salt\", type: \"uint256\" },\n {\n internalType: \"bytes32\",\n name: \"conduitKey\",\n type: \"bytes32\",\n },\n { internalType: \"uint256\", name: \"totalOriginalConsiderationItems\", type: \"uint256\" },\n ],\n internalType: \"struct OrderParameters\",\n name: \"parameters\",\n type: \"tuple\",\n },\n { internalType: \"uint120\", name: \"numerator\", type: \"uint120\" },\n {\n internalType: \"uint120\",\n name: \"denominator\",\n type: \"uint120\",\n },\n { internalType: \"bytes\", name: \"signature\", type: \"bytes\" },\n {\n internalType: \"bytes\",\n name: \"extraData\",\n type: \"bytes\",\n },\n ],\n internalType: \"struct AdvancedOrder[]\",\n name: \"\",\n type: \"tuple[]\",\n },\n {\n components: [\n {\n internalType: \"uint256\",\n name: \"orderIndex\",\n type: \"uint256\",\n },\n { internalType: \"enum Side\", name: \"side\", type: \"uint8\" },\n {\n internalType: \"uint256\",\n name: \"index\",\n type: \"uint256\",\n },\n { internalType: \"uint256\", name: \"identifier\", type: \"uint256\" },\n {\n internalType: \"bytes32[]\",\n name: \"criteriaProof\",\n type: \"bytes32[]\",\n },\n ],\n internalType: \"struct CriteriaResolver[]\",\n name: \"\",\n type: \"tuple[]\",\n },\n {\n components: [\n {\n components: [\n {\n internalType: \"uint256\",\n name: \"orderIndex\",\n type: \"uint256\",\n },\n { internalType: \"uint256\", name: \"itemIndex\", type: \"uint256\" },\n ],\n internalType: \"struct FulfillmentComponent[]\",\n name: \"offerComponents\",\n type: \"tuple[]\",\n },\n {\n components: [\n {\n internalType: \"uint256\",\n name: \"orderIndex\",\n type: \"uint256\",\n },\n { internalType: \"uint256\", name: \"itemIndex\", type: \"uint256\" },\n ],\n internalType: \"struct FulfillmentComponent[]\",\n name: \"considerationComponents\",\n type: \"tuple[]\",\n },\n ],\n internalType: \"struct Fulfillment[]\",\n name: \"\",\n type: \"tuple[]\",\n },\n { internalType: \"address\", name: \"recipient\", type: \"address\" },\n ],\n name: \"matchAdvancedOrders\",\n outputs: [\n {\n components: [\n {\n components: [\n {\n internalType: \"enum ItemType\",\n name: \"itemType\",\n type: \"uint8\",\n },\n { internalType: \"address\", name: \"token\", type: \"address\" },\n {\n internalType: \"uint256\",\n name: \"identifier\",\n type: \"uint256\",\n },\n { internalType: \"uint256\", name: \"amount\", type: \"uint256\" },\n {\n internalType: \"address payable\",\n name: \"recipient\",\n type: \"address\",\n },\n ],\n internalType: \"struct ReceivedItem\",\n name: \"item\",\n type: \"tuple\",\n },\n { internalType: \"address\", name: \"offerer\", type: \"address\" },\n {\n internalType: \"bytes32\",\n name: \"conduitKey\",\n type: \"bytes32\",\n },\n ],\n internalType: \"struct Execution[]\",\n name: \"\",\n type: \"tuple[]\",\n },\n ],\n stateMutability: \"payable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n components: [\n {\n components: [\n {\n internalType: \"address\",\n name: \"offerer\",\n type: \"address\",\n },\n {\n internalType: \"address\",\n name: \"zone\",\n type: \"address\",\n },\n {\n components: [\n {\n internalType: \"enum ItemType\",\n name: \"itemType\",\n type: \"uint8\",\n },\n { internalType: \"address\", name: \"token\", type: \"address\" },\n {\n internalType: \"uint256\",\n name: \"identifierOrCriteria\",\n type: \"uint256\",\n },\n { internalType: \"uint256\", name: \"startAmount\", type: \"uint256\" },\n {\n internalType: \"uint256\",\n name: \"endAmount\",\n type: \"uint256\",\n },\n ],\n internalType: \"struct OfferItem[]\",\n name: \"offer\",\n type: \"tuple[]\",\n },\n {\n components: [\n {\n internalType: \"enum ItemType\",\n name: \"itemType\",\n type: \"uint8\",\n },\n { internalType: \"address\", name: \"token\", type: \"address\" },\n {\n internalType: \"uint256\",\n name: \"identifierOrCriteria\",\n type: \"uint256\",\n },\n { internalType: \"uint256\", name: \"startAmount\", type: \"uint256\" },\n {\n internalType: \"uint256\",\n name: \"endAmount\",\n type: \"uint256\",\n },\n { internalType: \"address payable\", name: \"recipient\", type: \"address\" },\n ],\n internalType: \"struct ConsiderationItem[]\",\n name: \"consideration\",\n type: \"tuple[]\",\n },\n { internalType: \"enum OrderType\", name: \"orderType\", type: \"uint8\" },\n {\n internalType: \"uint256\",\n name: \"startTime\",\n type: \"uint256\",\n },\n { internalType: \"uint256\", name: \"endTime\", type: \"uint256\" },\n {\n internalType: \"bytes32\",\n name: \"zoneHash\",\n type: \"bytes32\",\n },\n { internalType: \"uint256\", name: \"salt\", type: \"uint256\" },\n {\n internalType: \"bytes32\",\n name: \"conduitKey\",\n type: \"bytes32\",\n },\n { internalType: \"uint256\", name: \"totalOriginalConsiderationItems\", type: \"uint256\" },\n ],\n internalType: \"struct OrderParameters\",\n name: \"parameters\",\n type: \"tuple\",\n },\n { internalType: \"bytes\", name: \"signature\", type: \"bytes\" },\n ],\n internalType: \"struct Order[]\",\n name: \"\",\n type: \"tuple[]\",\n },\n {\n components: [\n {\n components: [\n {\n internalType: \"uint256\",\n name: \"orderIndex\",\n type: \"uint256\",\n },\n { internalType: \"uint256\", name: \"itemIndex\", type: \"uint256\" },\n ],\n internalType: \"struct FulfillmentComponent[]\",\n name: \"offerComponents\",\n type: \"tuple[]\",\n },\n {\n components: [\n {\n internalType: \"uint256\",\n name: \"orderIndex\",\n type: \"uint256\",\n },\n { internalType: \"uint256\", name: \"itemIndex\", type: \"uint256\" },\n ],\n internalType: \"struct FulfillmentComponent[]\",\n name: \"considerationComponents\",\n type: \"tuple[]\",\n },\n ],\n internalType: \"struct Fulfillment[]\",\n name: \"\",\n type: \"tuple[]\",\n },\n ],\n name: \"matchOrders\",\n outputs: [\n {\n components: [\n {\n components: [\n {\n internalType: \"enum ItemType\",\n name: \"itemType\",\n type: \"uint8\",\n },\n { internalType: \"address\", name: \"token\", type: \"address\" },\n {\n internalType: \"uint256\",\n name: \"identifier\",\n type: \"uint256\",\n },\n { internalType: \"uint256\", name: \"amount\", type: \"uint256\" },\n {\n internalType: \"address payable\",\n name: \"recipient\",\n type: \"address\",\n },\n ],\n internalType: \"struct ReceivedItem\",\n name: \"item\",\n type: \"tuple\",\n },\n { internalType: \"address\", name: \"offerer\", type: \"address\" },\n {\n internalType: \"bytes32\",\n name: \"conduitKey\",\n type: \"bytes32\",\n },\n ],\n internalType: \"struct Execution[]\",\n name: \"\",\n type: \"tuple[]\",\n },\n ],\n stateMutability: \"payable\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"name\",\n outputs: [{ internalType: \"string\", name: \"\", type: \"string\" }],\n stateMutability: \"pure\",\n type: \"function\",\n },\n {\n inputs: [\n {\n components: [\n {\n components: [\n {\n internalType: \"address\",\n name: \"offerer\",\n type: \"address\",\n },\n {\n internalType: \"address\",\n name: \"zone\",\n type: \"address\",\n },\n {\n components: [\n {\n internalType: \"enum ItemType\",\n name: \"itemType\",\n type: \"uint8\",\n },\n { internalType: \"address\", name: \"token\", type: \"address\" },\n {\n internalType: \"uint256\",\n name: \"identifierOrCriteria\",\n type: \"uint256\",\n },\n { internalType: \"uint256\", name: \"startAmount\", type: \"uint256\" },\n {\n internalType: \"uint256\",\n name: \"endAmount\",\n type: \"uint256\",\n },\n ],\n internalType: \"struct OfferItem[]\",\n name: \"offer\",\n type: \"tuple[]\",\n },\n {\n components: [\n {\n internalType: \"enum ItemType\",\n name: \"itemType\",\n type: \"uint8\",\n },\n { internalType: \"address\", name: \"token\", type: \"address\" },\n {\n internalType: \"uint256\",\n name: \"identifierOrCriteria\",\n type: \"uint256\",\n },\n { internalType: \"uint256\", name: \"startAmount\", type: \"uint256\" },\n {\n internalType: \"uint256\",\n name: \"endAmount\",\n type: \"uint256\",\n },\n { internalType: \"address payable\", name: \"recipient\", type: \"address\" },\n ],\n internalType: \"struct ConsiderationItem[]\",\n name: \"consideration\",\n type: \"tuple[]\",\n },\n { internalType: \"enum OrderType\", name: \"orderType\", type: \"uint8\" },\n {\n internalType: \"uint256\",\n name: \"startTime\",\n type: \"uint256\",\n },\n { internalType: \"uint256\", name: \"endTime\", type: \"uint256\" },\n {\n internalType: \"bytes32\",\n name: \"zoneHash\",\n type: \"bytes32\",\n },\n { internalType: \"uint256\", name: \"salt\", type: \"uint256\" },\n {\n internalType: \"bytes32\",\n name: \"conduitKey\",\n type: \"bytes32\",\n },\n { internalType: \"uint256\", name: \"totalOriginalConsiderationItems\", type: \"uint256\" },\n ],\n internalType: \"struct OrderParameters\",\n name: \"parameters\",\n type: \"tuple\",\n },\n { internalType: \"bytes\", name: \"signature\", type: \"bytes\" },\n ],\n internalType: \"struct Order[]\",\n name: \"\",\n type: \"tuple[]\",\n },\n ],\n name: \"validate\",\n outputs: [{ internalType: \"bool\", name: \"\", type: \"bool\" }],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n { stateMutability: \"payable\", type: \"receive\" },\n] as const satisfies Abi;\n","import {\n arbitrumSepolia,\n baseSepolia,\n lineaSepolia,\n optimismSepolia,\n scrollSepolia,\n sepolia,\n} from \"viem/chains\";\n\n// ABIs for Basenames Datasource\nimport { BaseRegistrar as base_BaseRegistrar } from \"./abis/basenames/BaseRegistrar\";\nimport { EarlyAccessRegistrarController as base_EARegistrarController } from \"./abis/basenames/EARegistrarController\";\nimport { RegistrarController as base_RegistrarController } from \"./abis/basenames/RegistrarController\";\nimport { Registry as base_Registry } from \"./abis/basenames/Registry\";\nimport { UpgradeableRegistrarController as base_UpgradeableRegistrarController } from \"./abis/basenames/UpgradeableRegistrarController\";\n// ABIs for Lineanames Datasource\nimport { BaseRegistrar as linea_BaseRegistrar } from \"./abis/lineanames/BaseRegistrar\";\nimport { EthRegistrarController as linea_EthRegistrarController } from \"./abis/lineanames/EthRegistrarController\";\nimport { NameWrapper as linea_NameWrapper } from \"./abis/lineanames/NameWrapper\";\nimport { Registry as linea_Registry } from \"./abis/lineanames/Registry\";\n// ABIs for ENSRoot Datasource\nimport { BaseRegistrar as root_BaseRegistrar } from \"./abis/root/BaseRegistrar\";\nimport { LegacyEthRegistrarController as root_LegacyEthRegistrarController } from \"./abis/root/LegacyEthRegistrarController\";\nimport { NameWrapper as root_NameWrapper } from \"./abis/root/NameWrapper\";\nimport { Registry as root_Registry } from \"./abis/root/Registry\";\nimport { UniversalRegistrarRenewalWithReferrer as root_UniversalRegistrarRenewalWithReferrer } from \"./abis/root/UniversalRegistrarRenewalWithReferrer\";\nimport { UniversalResolverV1 } from \"./abis/root/UniversalResolverV1\";\nimport { UnwrappedEthRegistrarController as root_UnwrappedEthRegistrarController } from \"./abis/root/UnwrappedEthRegistrarController\";\nimport { WrappedEthRegistrarController as root_WrappedEthRegistrarController } from \"./abis/root/WrappedEthRegistrarController\";\nimport { Seaport as Seaport1_5 } from \"./abis/seaport/Seaport1.5\";\n// Shared ABIs\nimport { StandaloneReverseRegistrar } from \"./abis/shared/StandaloneReverseRegistrar\";\nimport { ResolverABI } from \"./lib/ResolverABI\";\n// Types\nimport { DatasourceNames, type ENSNamespace } from \"./lib/types\";\n\n/**\n * The Sepolia ENSNamespace\n *\n * NOTE: The Sepolia ENS namespace does not support 3DNS.\n */\nexport default {\n /**\n * ENSRoot Datasource\n *\n * Addresses and Start Blocks from ENS Sepolia Subgraph Manifest\n * https://ipfs.io/ipfs/QmdDtoN9QCRsBUsyoiiUUMQPPmPp5jimUQe81828UyWLtg\n */\n [DatasourceNames.ENSRoot]: {\n chain: sepolia,\n contracts: {\n ENSv1RegistryOld: {\n abi: root_Registry, // Registry was redeployed, same abi\n address: \"0x94f523b8261b815b87effcf4d18e6abef18d6e4b\",\n startBlock: 3702721,\n },\n ENSv1Registry: {\n abi: root_Registry, // Registry was redeployed, same abi\n address: \"0x00000000000c2e074ec69a0dfb2997ba6c7d2e1e\",\n startBlock: 3702728,\n },\n Resolver: {\n abi: ResolverABI,\n startBlock: 3702721, // ignores any Resolver events prior to `startBlock` of RegistryOld on Sepolia\n },\n BaseRegistrar: {\n abi: root_BaseRegistrar,\n address: \"0x57f1887a8bf19b14fc0df6fd9b2acc9af147ea85\",\n startBlock: 3702731,\n },\n LegacyEthRegistrarController: {\n abi: root_LegacyEthRegistrarController,\n address: \"0x7e02892cfc2bfd53a75275451d73cf620e793fc0\",\n startBlock: 3790197,\n },\n WrappedEthRegistrarController: {\n abi: root_WrappedEthRegistrarController,\n address: \"0xfed6a969aaa60e4961fcd3ebf1a2e8913ac65b72\",\n startBlock: 3790244,\n },\n UnwrappedEthRegistrarController: {\n abi: root_UnwrappedEthRegistrarController,\n address: \"0xfb3ce5d01e0f33f41dbb39035db9745962f1f968\",\n startBlock: 8579988,\n },\n UniversalRegistrarRenewalWithReferrer: {\n abi: root_UniversalRegistrarRenewalWithReferrer,\n address: \"0x7ab2947592c280542e680ba8f08a589009da8644\",\n startBlock: 9447519,\n },\n NameWrapper: {\n abi: root_NameWrapper,\n address: \"0x0635513f179d50a207757e05759cbd106d7dfce8\",\n startBlock: 3790153,\n },\n UniversalResolver: {\n abi: UniversalResolverV1,\n address: \"0xb7b7dadf4d42a08b3ec1d3a1079959dfbc8cffcc\",\n startBlock: 8515717,\n },\n },\n },\n\n /**\n * Basenames Datasource\n *\n * Addresses and Start Blocks from Basenames\n * https://github.com/base-org/basenames\n */\n [DatasourceNames.Basenames]: {\n /**\n * As of 5-Jun-2025 the Resolver for 'basetest.eth' in the Sepolia ENS namespace is\n * 0x084D10C07EfEecD9fFc73DEb38ecb72f9eEb65aB.\n *\n * This Resolver uses ENSIP-10 (Wildcard Resolution) and EIP-3668 (CCIP Read) to delegate\n * the forward resolution of data associated with subnames of 'basetest.eth' to an offchain\n * gateway server operated by Coinbase that uses the following subregistry contracts on\n * Base Sepolia as its source of truth.\n *\n * The owner of 'basetest.eth' in the ENS Registry on the Sepolia ENS namespace\n * (e.g. Coinbase) has the ability to change this configuration at any time.\n *\n * See the reference documentation for additional context:\n * docs/ensnode/src/content/docs/reference/mainnet-registered-subnames-of-subregistries.mdx\n */\n chain: baseSepolia,\n contracts: {\n Registry: {\n abi: base_Registry,\n address: \"0x1493b2567056c2181630115660963e13a8e32735\",\n startBlock: 13012458,\n },\n Resolver: {\n abi: ResolverABI,\n startBlock: 13012458,\n },\n BaseRegistrar: {\n abi: base_BaseRegistrar,\n address: \"0xa0c70ec36c010b55e3c434d6c6ebeec50c705794\",\n startBlock: 13012465,\n },\n EARegistrarController: {\n abi: base_EARegistrarController,\n address: \"0x3a0e8c2a0a28f396a5e5b69edb2e630311f1517a\",\n startBlock: 13041164,\n },\n RegistrarController: {\n abi: base_RegistrarController,\n address: \"0x49ae3cc2e3aa768b1e5654f5d3c6002144a59581\",\n startBlock: 13298580,\n },\n /**\n * This controller was added to BaseRegistrar contract\n * with the following tx:\n * https://sepolia.basescan.org/tx/0x648d984c1a379a6c300851b9561fe98a9b5282a26ca8c2c7660b11c53f0564bc\n */\n UpgradeableRegistrarController: {\n abi: base_UpgradeableRegistrarController,\n address: \"0x82c858cdf64b3d893fe54962680edfddc37e94c8\", // a proxy contract\n startBlock: 29896051,\n },\n },\n },\n\n /**\n * Lineanames Datasource\n *\n * Addresses and Start Blocks from Lineanames\n * https://github.com/Consensys/linea-ens\n */\n [DatasourceNames.Lineanames]: {\n /**\n * As of 5-Jun-2025 the Resolver for 'linea-sepolia.eth' in the Sepolia ENS namespace is\n * 0x64884ED06241c059497aEdB2C7A44CcaE6bc7937.\n *\n * This Resolver uses ENSIP-10 (Wildcard Resolution) and EIP-3668 (CCIP Read) to delegate\n * the forward resolution of data associated with subnames of 'linea-sepolia.eth' to an offchain\n * gateway server operated by Consensys that uses the following subregistry contracts on\n * Linea Sepolia as its source of truth.\n *\n * The owner of 'linea-sepolia.eth' in the ENS Registry on the Sepolia ENS namespace\n * (e.g. Consensys) has the ability to change this configuration at any time.\n *\n * See the reference documentation for additional context:\n * docs/ensnode/src/content/docs/reference/mainnet-registered-subnames-of-subregistries.mdx\n */\n chain: lineaSepolia,\n contracts: {\n Registry: {\n abi: linea_Registry,\n address: \"0x5b2636f0f2137b4ae722c01dd5122d7d3e9541f7\",\n startBlock: 2395094,\n },\n Resolver: {\n abi: ResolverABI,\n startBlock: 2395094, // based on startBlock of Registry on Linea Sepolia\n },\n BaseRegistrar: {\n abi: linea_BaseRegistrar,\n address: \"0x83475a84c0ea834f06c8e636a62631e7d2e07a44\",\n startBlock: 2395099,\n },\n EthRegistrarController: {\n abi: linea_EthRegistrarController,\n address: \"0x0f81e3b3a32dfe1b8a08d3c0061d852337a09338\",\n startBlock: 2395231,\n },\n NameWrapper: {\n abi: linea_NameWrapper,\n address: \"0xf127de9e039a789806fed4c6b1c0f3affea9425e\",\n startBlock: 2395202,\n },\n },\n },\n\n /**\n * Contracts that power Reverse Resolution on the (Sepolia) ENS Root chain.\n */\n [DatasourceNames.ReverseResolverRoot]: {\n chain: sepolia,\n contracts: {\n DefaultReverseRegistrar: {\n abi: StandaloneReverseRegistrar,\n address: \"0x4f382928805ba0e23b30cfb75fc9e848e82dfd47\",\n startBlock: 8579966,\n },\n\n DefaultReverseResolver1: {\n abi: ResolverABI,\n address: \"0x8fade66b79cc9f707ab26799354482eb93a5b7dd\",\n startBlock: 3790251,\n },\n DefaultReverseResolver2: {\n abi: ResolverABI,\n address: \"0x8948458626811dd0c23eb25cc74291247077cc51\",\n startBlock: 7035086,\n },\n DefaultReverseResolver3: {\n abi: ResolverABI,\n address: \"0x9dc60e7bd81ccc96774c55214ff389d42ae5e9ac\",\n startBlock: 8580041,\n },\n\n DefaultPublicResolver3: {\n abi: ResolverABI,\n address: \"0x8fade66b79cc9f707ab26799354482eb93a5b7dd\",\n startBlock: 3790251,\n },\n DefaultPublicResolver4: {\n abi: ResolverABI,\n address: \"0x8948458626811dd0c23eb25cc74291247077cc51\",\n startBlock: 7035086,\n },\n DefaultPublicResolver5: {\n abi: ResolverABI,\n address: \"0xe99638b40e4fff0129d56f03b55b6bbc4bbe49b5\",\n startBlock: 8580001,\n },\n\n BaseReverseResolver: {\n abi: ResolverABI,\n // https://adraffy.github.io/ens-normalize.js/test/resolver.html?sepolia#80014a34.reverse\n address: \"0xaf3b3f636be80b6709f5bd3a374d6ac0d0a7c7aa\",\n startBlock: 8580004,\n },\n\n LineaReverseResolver: {\n abi: ResolverABI,\n // https://adraffy.github.io/ens-normalize.js/test/resolver.html?sepolia#8000e705.reverse\n address: \"0x083da1dbc0f379ccda6ac81a934207c3d8a8a205\",\n startBlock: 8580005,\n },\n\n OptimismReverseResolver: {\n abi: ResolverABI,\n // https://adraffy.github.io/ens-normalize.js/test/resolver.html?sepolia#80aa37dc.reverse\n address: \"0xc9ae189772bd48e01410ab3be933637ee9d3aa5f\",\n startBlock: 8580026,\n },\n\n ArbitrumReverseResolver: {\n abi: ResolverABI,\n // https://adraffy.github.io/ens-normalize.js/test/resolver.html?sepolia#80066eee.reverse\n address: \"0x926f94d2adc77c86cb0050892097d49aadd02e8b\",\n startBlock: 8580003,\n },\n\n ScrollReverseResolver: {\n abi: ResolverABI,\n // https://adraffy.github.io/ens-normalize.js/test/resolver.html?sepolia#8008274f.reverse\n address: \"0x9fa59673e43f15bdb8722fdaf5c2107574b99062\",\n startBlock: 8580040,\n },\n },\n },\n\n /**\n * Contracts that power Reverse Resolution on Base Sepolia.\n */\n [DatasourceNames.ReverseResolverBase]: {\n chain: baseSepolia,\n contracts: {\n L2ReverseRegistrar: {\n abi: ResolverABI,\n address: \"0x00000beef055f7934784d6d81b6bc86665630dba\",\n startBlock: 21788010,\n },\n },\n },\n\n /**\n * Contracts that power Reverse Resolution on Optimism Sepolia.\n */\n [DatasourceNames.ReverseResolverOptimism]: {\n chain: optimismSepolia,\n contracts: {\n L2ReverseRegistrar: {\n abi: ResolverABI,\n address: \"0x00000beef055f7934784d6d81b6bc86665630dba\",\n startBlock: 23770766,\n },\n },\n },\n\n /**\n * Contracts that power Reverse Resolution on Arbitrum Sepolia.\n */\n [DatasourceNames.ReverseResolverArbitrum]: {\n chain: arbitrumSepolia,\n contracts: {\n L2ReverseRegistrar: {\n abi: ResolverABI,\n address: \"0x00000beef055f7934784d6d81b6bc86665630dba\",\n startBlock: 123142726,\n },\n },\n },\n\n /**\n * Contracts that power Reverse Resolution on Scroll Sepolia.\n */\n [DatasourceNames.ReverseResolverScroll]: {\n chain: scrollSepolia,\n contracts: {\n L2ReverseRegistrar: {\n abi: ResolverABI,\n address: \"0x00000beef055f7934784d6d81b6bc86665630dba\",\n startBlock: 8175276,\n },\n },\n },\n\n /**\n * Contracts that power Reverse Resolution on Linea Sepolia.\n */\n [DatasourceNames.ReverseResolverLinea]: {\n chain: lineaSepolia,\n contracts: {\n L2ReverseRegistrar: {\n abi: ResolverABI,\n address: \"0x00000beef055f7934784d6d81b6bc86665630dba\",\n startBlock: 9267966,\n },\n },\n },\n\n [DatasourceNames.Seaport]: {\n chain: sepolia,\n contracts: {\n Seaport1_5: {\n abi: Seaport1_5, // Seaport 1.5\n address: \"0x00000000000000adc04c56bf30ac9d3c0aaf14dc\",\n startBlock: 3365529,\n },\n },\n },\n} satisfies ENSNamespace;\n","import { zeroAddress } from \"viem\";\nimport { sepolia } from \"viem/chains\";\n\n// ABIs for ENSv2 Datasource\nimport { EnhancedAccessControl } from \"./abis/ensv2/EnhancedAccessControl\";\nimport { ETHRegistrar } from \"./abis/ensv2/ETHRegistrar\";\nimport { Registry } from \"./abis/ensv2/Registry\";\n// ABIs for ENSRoot Datasource\nimport { BaseRegistrar as root_BaseRegistrar } from \"./abis/root/BaseRegistrar\";\nimport { LegacyEthRegistrarController as root_LegacyEthRegistrarController } from \"./abis/root/LegacyEthRegistrarController\";\nimport { NameWrapper as root_NameWrapper } from \"./abis/root/NameWrapper\";\nimport { Registry as root_Registry } from \"./abis/root/Registry\";\nimport { UniversalRegistrarRenewalWithReferrer as root_UniversalRegistrarRenewalWithReferrer } from \"./abis/root/UniversalRegistrarRenewalWithReferrer\";\nimport { UniversalResolverV1 } from \"./abis/root/UniversalResolverV1\";\nimport { UnwrappedEthRegistrarController as root_UnwrappedEthRegistrarController } from \"./abis/root/UnwrappedEthRegistrarController\";\nimport { WrappedEthRegistrarController as root_WrappedEthRegistrarController } from \"./abis/root/WrappedEthRegistrarController\";\n// Shared ABIs\nimport { StandaloneReverseRegistrar } from \"./abis/shared/StandaloneReverseRegistrar\";\nimport { ResolverABI } from \"./lib/ResolverABI\";\n// Types\nimport { DatasourceNames, type ENSNamespace } from \"./lib/types\";\n\n/**\n * The Sepolia V2 ENSNamespace\n *\n * This represents a testing deployment of ENSv1 w/ ENSv2 on Sepolia.\n *\n * @dev we use the earliest start block for simplicity (it's just for efficiency re: log fetches).\n */\nexport default {\n /**\n * ENS Root contracts deployed on Sepolia for the ENSv1 + ENSv2 test deployment.\n *\n * NOTE: `UniversalRegistrarRenewalWithReferrer` is a placeholder entry required by the typesystem\n * due to the registrar plugin; it does not exist on Sepolia V2 and therefore uses the zero address.\n */\n [DatasourceNames.ENSRoot]: {\n chain: sepolia,\n contracts: {\n ENSv1RegistryOld: {\n abi: root_Registry,\n address: \"0x4355f1c6b5b59818dc56e336d1584df35d47ad86\",\n startBlock: 9374708,\n },\n ENSv1Registry: {\n abi: root_Registry,\n address: \"0x17795c119b8155ab9d3357c77747ba509695d7cb\",\n startBlock: 9374708,\n },\n Resolver: {\n abi: ResolverABI,\n startBlock: 9374708,\n },\n BaseRegistrar: {\n abi: root_BaseRegistrar,\n address: \"0xb16870800de7444f6b2ebd885465412a5e581614\",\n startBlock: 9374708,\n },\n LegacyEthRegistrarController: {\n abi: root_LegacyEthRegistrarController,\n address: \"0x25da9aa54dae4afa6534ba829c6288039d4f5ebb\",\n startBlock: 9374708,\n },\n WrappedEthRegistrarController: {\n abi: root_WrappedEthRegistrarController,\n address: \"0x4f1d36f2c1382a01006077a42de53f7c843d1a83\",\n startBlock: 9374708,\n },\n UnwrappedEthRegistrarController: {\n abi: root_UnwrappedEthRegistrarController,\n address: \"0x99e517db3db5ec5424367b8b50cd11ddcb0008f1\",\n startBlock: 9374708,\n },\n NameWrapper: {\n abi: root_NameWrapper,\n address: \"0xca7e6d0ddc5f373197bbe6fc2f09c2314399f028\",\n startBlock: 9374708,\n },\n UniversalResolver: {\n abi: UniversalResolverV1,\n address: \"0x198827b2316e020c48b500fc3cebdbcaf58787ce\",\n startBlock: 9374708,\n },\n UniversalRegistrarRenewalWithReferrer: {\n abi: root_UniversalRegistrarRenewalWithReferrer,\n address: zeroAddress,\n startBlock: 9374708,\n },\n },\n },\n\n [DatasourceNames.ENSv2Root]: {\n chain: sepolia,\n contracts: {\n Resolver: { abi: ResolverABI, startBlock: 9374708 },\n Registry: { abi: Registry, startBlock: 9374708 },\n EnhancedAccessControl: { abi: EnhancedAccessControl, startBlock: 9374708 },\n RootRegistry: {\n abi: Registry,\n address: \"0x245de1984f9bb890c5db0b1fb839470c6a4c7e08\",\n startBlock: 9374708,\n },\n ETHRegistry: {\n abi: Registry,\n address: \"0x3f0920aa92c5f9bce54643c09955c5f241f1f763\",\n startBlock: 9374708,\n },\n ETHRegistrar: {\n abi: ETHRegistrar,\n address: \"0x3334f0ebcbc4b5b7067f3aff25c6da8973690d54\",\n startBlock: 9374708,\n },\n },\n },\n\n [DatasourceNames.ReverseResolverRoot]: {\n chain: sepolia,\n contracts: {\n DefaultReverseRegistrar: {\n abi: StandaloneReverseRegistrar,\n address: \"0xf7fca8d7b8b802d07a1011b69a5e39395197b730\",\n startBlock: 9374708,\n },\n DefaultReverseResolver3: {\n abi: ResolverABI,\n address: \"0xa238d3aca667210d272391a119125d38816af4b1\",\n startBlock: 9374708,\n },\n DefaultPublicResolver5: {\n abi: ResolverABI,\n address: \"0x0e14ee0592da66bb4c8a8090066bc8a5af15f3e6\",\n startBlock: 9374708,\n },\n BaseReverseResolver: {\n abi: ResolverABI,\n address: \"0xf849bc9d818ac09a629ae981b03bcbcdca750e8f\",\n startBlock: 9374708,\n },\n LineaReverseResolver: {\n abi: ResolverABI,\n address: \"0xc8e393f59be1ec4d44ea9190e6831d3c4a94dfa7\",\n startBlock: 9374708,\n },\n OptimismReverseResolver: {\n abi: ResolverABI,\n address: \"0x05e889ba6c7a2399ea9ce4e9666f1e863b0f1728\",\n startBlock: 9374708,\n },\n ArbitrumReverseResolver: {\n abi: ResolverABI,\n address: \"0x18b9b7158c16194b6d4c4fde85de92b035a3ce77\",\n startBlock: 9374708,\n },\n ScrollReverseResolver: {\n abi: ResolverABI,\n address: \"0xd854f312888d0a5d64b646932a2ed8e8bad8de87\",\n startBlock: 9374708,\n },\n },\n },\n} satisfies ENSNamespace;\n","import ensTestEnv from \"./ens-test-env\";\nimport {\n type DatasourceName,\n DatasourceNames,\n type ENSNamespaceId,\n type ExtractDatasourceType,\n} from \"./lib/types\";\nimport mainnet from \"./mainnet\";\nimport sepolia from \"./sepolia\";\nimport sepoliaV2 from \"./sepolia-v2\";\n\n// internal map ENSNamespaceId -> ENSNamespace\nconst ENSNamespacesById: {\n readonly mainnet: typeof mainnet;\n readonly sepolia: typeof sepolia;\n readonly \"sepolia-v2\": typeof sepoliaV2;\n readonly \"ens-test-env\": typeof ensTestEnv;\n} = {\n mainnet,\n sepolia,\n \"sepolia-v2\": sepoliaV2,\n \"ens-test-env\": ensTestEnv,\n} as const;\n\n/**\n * Returns the ENSNamespace for a specified `namespaceId`.\n *\n * @param namespaceId - The ENSNamespace identifier (e.g. 'mainnet', 'sepolia', 'ens-test-env')\n * @returns the ENSNamespace\n */\nexport const getENSNamespace = <N extends ENSNamespaceId>(\n namespaceId: N,\n): (typeof ENSNamespacesById)[N] => ENSNamespacesById[namespaceId];\n\n/**\n * Returns the `datasourceName` Datasource within the specified `namespaceId` namespace.\n *\n * NOTE: the typescript typechecker _will_ enforce validity. i.e. using an invalid `datasourceName`\n * within the specified `namespaceId` will be a type error.\n *\n * @param namespaceId - The ENSNamespace identifier (e.g. 'mainnet', 'sepolia', 'ens-test-env')\n * @param datasourceName - The name of the Datasource to retrieve\n * @returns The Datasource object for the given name within the specified namespace\n */\nexport const getDatasource = <\n N extends ENSNamespaceId,\n D extends keyof ReturnType<typeof getENSNamespace<N>>,\n>(\n namespaceId: N,\n datasourceName: D,\n) => getENSNamespace(namespaceId)[datasourceName];\n\n/**\n * Returns the `datasourceName` Datasource within the specified `namespaceId` namespace, or undefined\n * if it does not exist.\n *\n * This is useful when you want to retrieve a Datasource from an arbitrary namespace where it may\n * or may not actually be defined. For example, if using {@link getDatasource}, with a\n * `namespaceId: ENSNamespaceId`, the typechecker will enforce that the only valid `datasourceName`\n * is ENSRoot (the only Datasource present in all namespaces). This method allows you to receive\n * the const Datasource or undefined for a specified `datasourceName`.\n *\n * @param namespaceId - The ENSNamespace identifier (e.g. 'mainnet', 'sepolia', 'ens-test-env')\n * @param datasourceName - The name of the Datasource to retrieve\n * @returns The Datasource object for the given name within the specified namespace, or undefined if it does not exist\n */\nexport const maybeGetDatasource = <\n N extends ENSNamespaceId,\n D extends DatasourceName = DatasourceName,\n>(\n namespaceId: N,\n datasourceName: D,\n): ExtractDatasourceType<ReturnType<typeof getENSNamespace<N>>, D> | undefined =>\n (getENSNamespace(namespaceId) as any)[datasourceName];\n\n/**\n * Returns the chain for the ENS Root Datasource within the selected namespace.\n *\n * @returns the chain that hosts the ENS Root\n */\nexport const getENSRootChain = (namespaceId: ENSNamespaceId) =>\n getDatasource(namespaceId, DatasourceNames.ENSRoot).chain;\n\n/**\n * Returns the chain id for the ENS Root Datasource within the selected namespace.\n *\n * @returns the chain ID that hosts the ENS Root\n */\nexport const getENSRootChainId = (namespaceId: ENSNamespaceId) => getENSRootChain(namespaceId).id;\n","import type { Address } from \"viem\";\n\n/**\n * Converts an EVM address to its lowercase representation.\n *\n * @param address - EVM address to convert.\n * @returns The lowercase representation of the EVM address.\n */\nexport function asLowerCaseAddress(address: Address): Address {\n return address.toLowerCase() as Address;\n}\n","import { parseUnits } from \"viem\";\n\nimport { scaleBigintByNumber } from \"./numbers\";\n\n/**\n * Identifiers for supported currencies.\n *\n * TODO: Add support for WETH\n */\nexport const CurrencyIds = {\n ETH: \"ETH\",\n USDC: \"USDC\",\n DAI: \"DAI\",\n} as const;\n\nexport type CurrencyId = (typeof CurrencyIds)[keyof typeof CurrencyIds];\n\n/**\n * The amount of the currency in the smallest unit of the currency\n * (see {@link CurrencyInfo.decimals} for the currency).\n *\n * Guaranteed to be non-negative.\n */\nexport type CurrencyAmount = bigint;\n\n/**\n * Serialized representation of {@link CurrencyAmount}.\n */\nexport type SerializedCurrencyAmount = string;\n\nexport interface PriceEth {\n currency: typeof CurrencyIds.ETH;\n\n amount: CurrencyAmount;\n}\n\nexport interface PriceDai {\n currency: typeof CurrencyIds.DAI;\n\n amount: CurrencyAmount;\n}\n\nexport interface PriceUsdc {\n currency: typeof CurrencyIds.USDC;\n\n amount: CurrencyAmount;\n}\n\nexport type Price = PriceEth | PriceDai | PriceUsdc;\n\n/**\n * Serialized representation of {@link PriceEth}.\n */\nexport interface SerializedPriceEth extends Omit<PriceEth, \"amount\"> {\n amount: SerializedCurrencyAmount;\n}\n\n/**\n * Serialized representation of {@link PriceDai}.\n */\nexport interface SerializedPriceDai extends Omit<PriceDai, \"amount\"> {\n amount: SerializedCurrencyAmount;\n}\n\n/**\n * Serialized representation of {@link PriceUsdc}.\n */\nexport interface SerializedPriceUsdc extends Omit<PriceUsdc, \"amount\"> {\n amount: SerializedCurrencyAmount;\n}\n\n/**\n * Serialized representation of {@link Price}.\n */\nexport type SerializedPrice = SerializedPriceEth | SerializedPriceDai | SerializedPriceUsdc;\n\nexport interface CurrencyInfo {\n id: CurrencyId;\n name: string;\n decimals: number;\n}\n\nconst currencyInfo: Record<CurrencyId, CurrencyInfo> = {\n [CurrencyIds.ETH]: {\n id: CurrencyIds.ETH,\n name: \"ETH\",\n decimals: 18,\n },\n [CurrencyIds.USDC]: {\n id: CurrencyIds.USDC,\n name: \"USDC\",\n decimals: 6,\n },\n [CurrencyIds.DAI]: {\n id: CurrencyIds.DAI,\n name: \"Dai Stablecoin\",\n decimals: 18,\n },\n};\n\n/**\n * Get currency info for a provided currency.\n */\nexport function getCurrencyInfo(currencyId: CurrencyId): CurrencyInfo {\n return currencyInfo[currencyId];\n}\n\n/**\n * Create price in ETH for given amount.\n */\nexport function priceEth(amount: Price[\"amount\"]): PriceEth {\n return {\n amount,\n currency: CurrencyIds.ETH,\n };\n}\n\n/**\n * Create price in USDC for given amount.\n */\nexport function priceUsdc(amount: Price[\"amount\"]): PriceUsdc {\n return {\n amount,\n currency: CurrencyIds.USDC,\n };\n}\n\n/**\n * Create price in DAI for given amount.\n */\nexport function priceDai(amount: Price[\"amount\"]): PriceDai {\n return {\n amount,\n currency: CurrencyIds.DAI,\n };\n}\n\n/**\n * Check if two prices have the same currency.\n */\nexport function isPriceCurrencyEqual(priceA: Price, priceB: Price): boolean {\n return priceA.currency === priceB.currency;\n}\n\n/**\n * Check if two {@link Price} values have the same currency and amount.\n */\nexport function isPriceEqual(priceA: Price, priceB: Price): boolean {\n return isPriceCurrencyEqual(priceA, priceB) && priceA.amount === priceB.amount;\n}\n\n/**\n * Add prices\n *\n * @param prices at least two {@link Price} values to be added together.\n * @returns total of all prices.\n * @throws if not all prices have the same currency.\n */\nexport function addPrices<const PriceType extends Price = Price>(\n ...prices: [PriceType, PriceType, ...PriceType[]]\n): PriceType {\n const firstPrice = prices[0];\n const allPricesInSameCurrency = prices.every((price) => isPriceCurrencyEqual(firstPrice, price));\n\n if (allPricesInSameCurrency === false) {\n throw new Error(\"All prices must have the same currency to be added together.\");\n }\n\n const { currency } = firstPrice;\n\n return prices.reduce(\n (acc, price) => ({\n amount: acc.amount + price.amount,\n currency,\n }),\n {\n amount: 0n,\n currency: firstPrice.currency,\n },\n ) as PriceType;\n}\n\n/**\n * Scales a Price object by a floating-point number while maintaining precision.\n *\n * **Important:** The precision of this method is bound to the precision of float\n * in JavaScript. For more information, see {@link scaleBigintByNumber}.\n *\n * @param price - The Price object to scale\n * @param scaleFactor - The number to multiply by (can be a decimal like 0.5)\n * @returns A new Price object with the scaled amount and same currency\n *\n * @throws {Error} If scaleFactor is negative, NaN, or infinite\n * @throws {Error} If price amount is negative\n *\n * @example\n * // Scale USDC price by 0.5\n * const price = priceUsdc(1000000n); // 1 USDC\n * const scaled = scalePrice(price, 0.5); // 0.5 USDC\n * // scaled = { currency: \"USDC\", amount: 500000n }\n *\n * @example\n * // Calculate 33.3% of ETH price\n * const ethPrice = priceEth(1000000000000000000n); // 1 ETH\n * const share = scalePrice(ethPrice, 0.333);\n * // share = { currency: \"ETH\", amount: 333000000000000000n }\n */\nexport function scalePrice<T extends Price>(price: T, scaleFactor: number): T {\n const scaledAmount = scaleBigintByNumber(price.amount, scaleFactor);\n\n return {\n ...price,\n amount: scaledAmount,\n };\n}\n\n/**\n * Validates a decimal string for currency parsing.\n *\n * @param value - The decimal string to validate\n * @throws {Error} If value is empty, whitespace-only or untrimmed\n * @throws {Error} If value represents a negative number\n */\nfunction validateAmountToParse(value: string): void {\n const trimmed = value.trim();\n if (trimmed === \"\") {\n throw new Error(\"amount must be a non-negative decimal string\");\n }\n if (value !== trimmed) {\n throw new Error(\"amount must not have leading or trailing whitespace\");\n }\n if (trimmed.startsWith(\"-\")) {\n throw new Error(\"amount must be a non-negative decimal string\");\n }\n}\n\n/**\n * Parses a string representation of ETH into a {@link PriceEth} object.\n *\n * Uses {@link getCurrencyInfo} to get the correct number of decimals (18) for ETH\n * and {@link parseUnits} from viem to convert the decimal string to a bigint.\n *\n * **Note:** Values with more than 18 decimal places will be truncated/rounded by viem's `parseUnits`.\n *\n * @param value - The decimal string to parse (e.g., \"0.015\" for 0.015 ETH)\n * @returns A PriceEth object with the amount in wei (smallest unit)\n *\n * @throws {Error} If value is empty, whitespace-only or untrimmed\n * @throws {Error} If value represents a negative number\n * @throws {Error} If value is not a valid decimal string (e.g., \"abc\", \"1.2.3\")\n *\n * @example\n * parseEth(\"0.015\") // returns { currency: \"ETH\", amount: 15000000000000000n }\n * parseEth(\"1\") // returns { currency: \"ETH\", amount: 1000000000000000000n }\n * parseEth(\"123.456789012345678\") // returns { currency: \"ETH\", amount: 123456789012345678000n }\n */\nexport function parseEth(value: string): PriceEth {\n validateAmountToParse(value);\n const currencyInfo = getCurrencyInfo(CurrencyIds.ETH);\n const amount = parseUnits(value, currencyInfo.decimals);\n return priceEth(amount);\n}\n\n/**\n * Parses a string representation of USDC into a {@link PriceUsdc} object.\n *\n * Uses {@link getCurrencyInfo} to get the correct number of decimals (6) for USDC\n * and {@link parseUnits} from viem to convert the decimal string to a bigint.\n *\n * **Note:** Values with more than 6 decimal places will be truncated/rounded by viem's `parseUnits`.\n *\n * @param value - The decimal string to parse (e.g., \"123.45678\" for $123.45678)\n * @returns A PriceUsdc object with the amount in the smallest unit (6 decimals)\n *\n * @throws {Error} If value is empty, whitespace-only or untrimmed\n * @throws {Error} If value represents a negative number\n * @throws {Error} If value is not a valid decimal string (e.g., \"abc\", \"1.2.3\")\n *\n * @example\n * parseUsdc(\"123.45678\") // returns { currency: \"USDC\", amount: 123456780n }\n * parseUsdc(\"1\") // returns { currency: \"USDC\", amount: 1000000n }\n * parseUsdc(\"0.001\") // returns { currency: \"USDC\", amount: 1000n }\n */\nexport function parseUsdc(value: string): PriceUsdc {\n validateAmountToParse(value);\n const currencyInfo = getCurrencyInfo(CurrencyIds.USDC);\n const amount = parseUnits(value, currencyInfo.decimals);\n return priceUsdc(amount);\n}\n\n/**\n * Parses a string representation of DAI into a {@link PriceDai} object.\n *\n * Uses {@link getCurrencyInfo} to get the correct number of decimals (18) for DAI\n * and {@link parseUnits} from viem to convert the decimal string to a bigint.\n *\n * **Note:** Values with more than 18 decimal places will be truncated/rounded by viem's `parseUnits`.\n *\n * @param value - The decimal string to parse (e.g., \"123.456789012345678\" for 123.456789012345678 DAI)\n * @returns A PriceDai object with the amount in the smallest unit (18 decimals)\n *\n * @throws {Error} If value is empty, whitespace-only or untrimmed\n * @throws {Error} If value represents a negative number\n * @throws {Error} If value is not a valid decimal string (e.g., \"abc\", \"1.2.3\")\n *\n * @example\n * parseDai(\"123.456789012345678\") // returns { currency: \"DAI\", amount: 123456789012345678000n }\n * parseDai(\"1\") // returns { currency: \"DAI\", amount: 1000000000000000000n }\n * parseDai(\"0.001\") // returns { currency: \"DAI\", amount: 1000000000000000n }\n */\nexport function parseDai(value: string): PriceDai {\n validateAmountToParse(value);\n const currencyInfo = getCurrencyInfo(CurrencyIds.DAI);\n const amount = parseUnits(value, currencyInfo.decimals);\n return priceDai(amount);\n}\n","/**\n * Converts a bigint value into a number value.\n *\n * @throws when value is outside the range of `Number.MIN_SAFE_INTEGER` and\n * `Number.MAX_SAFE_INTEGER`.\n */\nexport function bigIntToNumber(n: bigint): number {\n if (n < Number.MIN_SAFE_INTEGER) {\n throw new Error(\n `The bigint '${n.toString()}' value is too low to be to converted into a number.'`,\n );\n }\n\n if (n > Number.MAX_SAFE_INTEGER) {\n throw new Error(\n `The bigint '${n.toString()}' value is too high to be to converted into a number.'`,\n );\n }\n\n return Number(n);\n}\n\n/**\n * Scales a bigint value by a floating-point number while maintaining precision.\n *\n * **How it works:**\n * Converts the float to a fixed-point decimal string, extracts the decimal digits,\n * and performs multiplication using bigint arithmetic: `(value * numerator) / denominator`.\n *\n * **Important:** JavaScript floats (IEEE 754 double-precision) have ~15-17 significant\n * decimal digits. Any imprecision in the input `scaleFactor` will be reflected in the result.\n * For example, `1/3` in JavaScript is `0.3333333333333333...` (not infinite threes), and\n * this function accurately preserves that limitation.\n *\n * @param value - The bigint value to scale (must be non-negative)\n * @param scaleFactor - The non-negative number to multiply by (can be a decimal like 0.5 or 0.333)\n * @returns The scaled bigint value, rounded down via integer division\n *\n * @throws {Error} If value is negative\n * @throws {Error} If scaleFactor is negative, NaN, infinite, or >= 1e21\n *\n * @example\n * // Scale by 0.5\n * scaleBigintByNumber(1000n, 0.5) // returns 500n\n *\n * @example\n * // Scale by 1/3 (uses JavaScript's float representation)\n * scaleBigintByNumber(1000n, 1/3) // returns 333n\n *\n * @example\n * // Scale USDC amount (6 decimals) by percentage\n * scaleBigintByNumber(5000000000n, 0.4) // 5000 USDC * 0.4 = 2000000000n (2000 USDC)\n */\nexport function scaleBigintByNumber(value: bigint, scaleFactor: number): bigint {\n // Validate inputs\n if (value < 0n) {\n throw new Error(`scaleBigintByNumber: value must be non-negative, got: ${value.toString()}`);\n }\n\n if (!Number.isFinite(scaleFactor)) {\n throw new Error(\n `scaleBigintByNumber: scaleFactor must be a finite number, got: ${scaleFactor}`,\n );\n }\n\n if (scaleFactor < 0) {\n throw new Error(`scaleBigintByNumber: scaleFactor must be non-negative, got: ${scaleFactor}`);\n }\n\n // Reject scaleFactor >= 1e21 to prevent toFixed(20) from producing exponential notation that breaks BigInt parsing\n if (scaleFactor >= 1e21) {\n throw new Error(`scaleBigintByNumber: scaleFactor must be less than 1e21, got: ${scaleFactor}`);\n }\n\n // Handle special cases\n if (value === 0n || scaleFactor === 0) {\n return 0n;\n }\n\n if (scaleFactor === 1) {\n return value;\n }\n\n // Convert the float to a fixed-point decimal string with 20 decimal places.\n // Why 20?\n // - JavaScript floats have ~15-17 significant digits of precision (IEEE 754)\n // - Using 20 ensures we capture all meaningful precision\n // - Avoids scientific notation (e.g., \"1e-10\") which would break our parsing\n // - Extra digits beyond float precision are deterministic (not random noise)\n const fixedStr = scaleFactor.toFixed(20);\n\n // Split into integer and decimal parts\n // Example: \"0.50000000000000000000\" -> [\"0\", \"50000000000000000000\"]\n const [integerPart, decimalPart = \"\"] = fixedStr.split(\".\");\n\n // Remove trailing zeros to get the minimal precision needed\n // Example: \"50000000000000000000\" -> \"5\"\n // This optimization reduces the size of numerator/denominator\n const trimmedDecimal = decimalPart.replace(/0+$/, \"\") || \"0\";\n\n // Construct the numerator by concatenating integer and decimal parts\n // Example: integerPart=\"0\", trimmedDecimal=\"5\" -> \"05\" -> BigInt = 5n\n const numerator = BigInt(integerPart + trimmedDecimal);\n\n // Denominator is 10^(number of decimal digits we kept)\n // Example: trimmedDecimal.length = 1 -> 10^1 = 10n\n const denominator = 10n ** BigInt(trimmedDecimal.length);\n\n // Perform the multiplication and division in bigint space\n // Formula: (value * numerator) / denominator\n // Example: (1000n * 5n) / 10n = 5000n / 10n = 500n\n // Integer division automatically floors the result\n return (value * numerator) / denominator;\n}\n","import { AccountId as CaipAccountId, AssetId as CaipAssetId } from \"caip\";\n\nimport { uint256ToHex32 } from \"../ens\";\nimport type {\n Price,\n PriceDai,\n PriceEth,\n PriceUsdc,\n SerializedPrice,\n SerializedPriceDai,\n SerializedPriceEth,\n SerializedPriceUsdc,\n} from \"./currencies\";\nimport type {\n AccountIdString,\n AssetIdString,\n ChainIdString,\n DatetimeISO8601,\n UrlString,\n} from \"./serialized-types\";\nimport type { AccountId, AssetId, ChainId, Datetime } from \"./types\";\n\n/**\n * Serializes a {@link ChainId} value into its string representation.\n */\nexport function serializeChainId(chainId: ChainId): ChainIdString {\n return chainId.toString();\n}\n\n/**\n * Serializes a {@link Datetime} value into its string representation.\n */\nexport function serializeDatetime(datetime: Datetime): DatetimeISO8601 {\n return datetime.toISOString();\n}\n\n/**\n * Serializes a {@link URL} value into its string representation.\n */\nexport function serializeUrl(url: URL): UrlString {\n return url.toString();\n}\n\n/**\n * Serializes a {@link Price} object.\n */\nexport function serializePrice(price: Price): SerializedPrice {\n return {\n currency: price.currency,\n amount: price.amount.toString(),\n };\n}\n\n/**\n * Serializes a {@link PriceEth} object.\n */\nexport function serializePriceEth(price: PriceEth): SerializedPriceEth {\n return serializePrice(price) as SerializedPriceEth;\n}\n\n/**\n * Serializes a {@link PriceUsdc} object.\n */\nexport function serializePriceUsdc(price: PriceUsdc): SerializedPriceUsdc {\n return serializePrice(price) as SerializedPriceUsdc;\n}\n\n/**\n * Serializes a {@link PriceDai} object.\n */\nexport function serializePriceDai(price: PriceDai): SerializedPriceDai {\n return serializePrice(price) as SerializedPriceDai;\n}\n\n/**\n * Format {@link AccountId} object as a string.\n *\n * Formatted as a fully lowercase CAIP-10 AccountId.\n *\n * @see https://chainagnostic.org/CAIPs/caip-10\n */\nexport function formatAccountId(accountId: AccountId): AccountIdString {\n return CaipAccountId.format({\n chainId: { namespace: \"eip155\", reference: accountId.chainId.toString() },\n address: accountId.address,\n }).toLowerCase();\n}\n\n/**\n * Format {@link AssetId} object as a string.\n *\n * Formatted as a fully lowercase CAIP-19 AssetId.\n *\n * @see https://chainagnostic.org/CAIPs/caip-19\n */\nexport function formatAssetId({\n assetNamespace,\n contract: { chainId, address },\n tokenId,\n}: AssetId): AssetIdString {\n return CaipAssetId.format({\n chainId: { namespace: \"eip155\", reference: chainId.toString() },\n assetName: { namespace: assetNamespace, reference: address },\n tokenId: uint256ToHex32(tokenId),\n }).toLowerCase();\n}\n","import {\n DatasourceNames,\n type ENSNamespaceId,\n ENSNamespaceIds,\n maybeGetDatasource,\n} from \"@ensnode/datasources\";\n\nimport type { Name } from \"../ens\";\nimport type { AccountId } from \"../shared/types\";\n\n/**\n * Gets the SubregistryId (an AccountId) of the Ethnames Subregistry contract (this is the\n * \"BaseRegistrar\" contract for direct subnames of .eth) for the provided namespace.\n *\n * @param namespace The ENS namespace to get the Ethnames Subregistry ID for\n * @returns The AccountId for the Ethnames Subregistry contract for the provided namespace.\n * @throws Error if the contract is not found for the given namespace.\n */\nexport function getEthnamesSubregistryId(namespace: ENSNamespaceId): AccountId {\n const datasource = maybeGetDatasource(namespace, DatasourceNames.ENSRoot);\n if (!datasource) {\n throw new Error(`Datasource not found for ${namespace} ${DatasourceNames.ENSRoot}`);\n }\n\n const address = datasource.contracts.BaseRegistrar?.address;\n if (address === undefined || Array.isArray(address)) {\n throw new Error(`BaseRegistrar contract not found or has multiple addresses for ${namespace}`);\n }\n\n return {\n chainId: datasource.chain.id,\n address,\n };\n}\n\n/**\n * Get the managed name for the Ethnames subregistry for the selected ENS namespace.\n *\n * @param namespaceId\n * @returns registrar managed name\n */\nexport function getEthnamesSubregistryManagedName(namespaceId: ENSNamespaceId): Name {\n switch (namespaceId) {\n case ENSNamespaceIds.Mainnet:\n case ENSNamespaceIds.Sepolia:\n case ENSNamespaceIds.SepoliaV2:\n case ENSNamespaceIds.EnsTestEnv:\n return \"eth\";\n }\n}\n","/**\n * @module constants\n * @summary Useful constants\n * @description\n * Collection of useful date constants.\n *\n * The constants could be imported from `date-fns/constants`:\n *\n * ```ts\n * import { maxTime, minTime } from \"./constants/date-fns/constants\";\n *\n * function isAllowedTime(time) {\n * return time <= maxTime && time >= minTime;\n * }\n * ```\n */\n\n/**\n * @constant\n * @name daysInWeek\n * @summary Days in 1 week.\n */\nexport const daysInWeek = 7;\n\n/**\n * @constant\n * @name daysInYear\n * @summary Days in 1 year.\n *\n * @description\n * How many days in a year.\n *\n * One years equals 365.2425 days according to the formula:\n *\n * > Leap year occurs every 4 years, except for years that are divisible by 100 and not divisible by 400.\n * > 1 mean year = (365+1/4-1/100+1/400) days = 365.2425 days\n */\nexport const daysInYear = 365.2425;\n\n/**\n * @constant\n * @name maxTime\n * @summary Maximum allowed time.\n *\n * @example\n * import { maxTime } from \"./constants/date-fns/constants\";\n *\n * const isValid = 8640000000000001 <= maxTime;\n * //=> false\n *\n * new Date(8640000000000001);\n * //=> Invalid Date\n */\nexport const maxTime = Math.pow(10, 8) * 24 * 60 * 60 * 1000;\n\n/**\n * @constant\n * @name minTime\n * @summary Minimum allowed time.\n *\n * @example\n * import { minTime } from \"./constants/date-fns/constants\";\n *\n * const isValid = -8640000000000001 >= minTime;\n * //=> false\n *\n * new Date(-8640000000000001)\n * //=> Invalid Date\n */\nexport const minTime = -maxTime;\n\n/**\n * @constant\n * @name millisecondsInWeek\n * @summary Milliseconds in 1 week.\n */\nexport const millisecondsInWeek = 604800000;\n\n/**\n * @constant\n * @name millisecondsInDay\n * @summary Milliseconds in 1 day.\n */\nexport const millisecondsInDay = 86400000;\n\n/**\n * @constant\n * @name millisecondsInMinute\n * @summary Milliseconds in 1 minute\n */\nexport const millisecondsInMinute = 60000;\n\n/**\n * @constant\n * @name millisecondsInHour\n * @summary Milliseconds in 1 hour\n */\nexport const millisecondsInHour = 3600000;\n\n/**\n * @constant\n * @name millisecondsInSecond\n * @summary Milliseconds in 1 second\n */\nexport const millisecondsInSecond = 1000;\n\n/**\n * @constant\n * @name minutesInYear\n * @summary Minutes in 1 year.\n */\nexport const minutesInYear = 525600;\n\n/**\n * @constant\n * @name minutesInMonth\n * @summary Minutes in 1 month.\n */\nexport const minutesInMonth = 43200;\n\n/**\n * @constant\n * @name minutesInDay\n * @summary Minutes in 1 day.\n */\nexport const minutesInDay = 1440;\n\n/**\n * @constant\n * @name minutesInHour\n * @summary Minutes in 1 hour.\n */\nexport const minutesInHour = 60;\n\n/**\n * @constant\n * @name monthsInQuarter\n * @summary Months in 1 quarter.\n */\nexport const monthsInQuarter = 3;\n\n/**\n * @constant\n * @name monthsInYear\n * @summary Months in 1 year.\n */\nexport const monthsInYear = 12;\n\n/**\n * @constant\n * @name quartersInYear\n * @summary Quarters in 1 year\n */\nexport const quartersInYear = 4;\n\n/**\n * @constant\n * @name secondsInHour\n * @summary Seconds in 1 hour.\n */\nexport const secondsInHour = 3600;\n\n/**\n * @constant\n * @name secondsInMinute\n * @summary Seconds in 1 minute.\n */\nexport const secondsInMinute = 60;\n\n/**\n * @constant\n * @name secondsInDay\n * @summary Seconds in 1 day.\n */\nexport const secondsInDay = secondsInHour * 24;\n\n/**\n * @constant\n * @name secondsInWeek\n * @summary Seconds in 1 week.\n */\nexport const secondsInWeek = secondsInDay * 7;\n\n/**\n * @constant\n * @name secondsInYear\n * @summary Seconds in 1 year.\n */\nexport const secondsInYear = secondsInDay * daysInYear;\n\n/**\n * @constant\n * @name secondsInMonth\n * @summary Seconds in 1 month\n */\nexport const secondsInMonth = secondsInYear / 12;\n\n/**\n * @constant\n * @name secondsInQuarter\n * @summary Seconds in 1 quarter.\n */\nexport const secondsInQuarter = secondsInMonth * 3;\n\n/**\n * @constant\n * @name constructFromSymbol\n * @summary Symbol enabling Date extensions to inherit properties from the reference date.\n *\n * The symbol is used to enable the `constructFrom` function to construct a date\n * using a reference date and a value. It allows to transfer extra properties\n * from the reference date to the new date. It's useful for extensions like\n * [`TZDate`](https://github.com/date-fns/tz) that accept a time zone as\n * a constructor argument.\n */\nexport const constructFromSymbol = Symbol.for(\"constructDateFrom\");\n","import { constructFromSymbol } from \"./constants.js\";\n\n/**\n * @name constructFrom\n * @category Generic Helpers\n * @summary Constructs a date using the reference date and the value\n *\n * @description\n * The function constructs a new date using the constructor from the reference\n * date and the given value. It helps to build generic functions that accept\n * date extensions.\n *\n * It defaults to `Date` if the passed reference date is a number or a string.\n *\n * Starting from v3.7.0, it allows to construct a date using `[Symbol.for(\"constructDateFrom\")]`\n * enabling to transfer extra properties from the reference date to the new date.\n * It's useful for extensions like [`TZDate`](https://github.com/date-fns/tz)\n * that accept a time zone as a constructor argument.\n *\n * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc).\n *\n * @param date - The reference date to take constructor from\n * @param value - The value to create the date\n *\n * @returns Date initialized using the given date and value\n *\n * @example\n * import { constructFrom } from \"./constructFrom/date-fns\";\n *\n * // A function that clones a date preserving the original type\n * function cloneDate<DateType extends Date>(date: DateType): DateType {\n * return constructFrom(\n * date, // Use constructor from the given date\n * date.getTime() // Use the date value to create a new date\n * );\n * }\n */\nexport function constructFrom(date, value) {\n if (typeof date === \"function\") return date(value);\n\n if (date && typeof date === \"object\" && constructFromSymbol in date)\n return date[constructFromSymbol](value);\n\n if (date instanceof Date) return new date.constructor(value);\n\n return new Date(value);\n}\n\n// Fallback for modularized imports:\nexport default constructFrom;\n","import { constructFrom } from \"./constructFrom.js\";\n\n/**\n * @name toDate\n * @category Common Helpers\n * @summary Convert the given argument to an instance of Date.\n *\n * @description\n * Convert the given argument to an instance of Date.\n *\n * If the argument is an instance of Date, the function returns its clone.\n *\n * If the argument is a number, it is treated as a timestamp.\n *\n * If the argument is none of the above, the function returns Invalid Date.\n *\n * Starting from v3.7.0, it clones a date using `[Symbol.for(\"constructDateFrom\")]`\n * enabling to transfer extra properties from the reference date to the new date.\n * It's useful for extensions like [`TZDate`](https://github.com/date-fns/tz)\n * that accept a time zone as a constructor argument.\n *\n * **Note**: *all* Date arguments passed to any *date-fns* function is processed by `toDate`.\n *\n * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc).\n * @typeParam ResultDate - The result `Date` type, it is the type returned from the context function if it is passed, or inferred from the arguments.\n *\n * @param argument - The value to convert\n *\n * @returns The parsed date in the local time zone\n *\n * @example\n * // Clone the date:\n * const result = toDate(new Date(2014, 1, 11, 11, 30, 30))\n * //=> Tue Feb 11 2014 11:30:30\n *\n * @example\n * // Convert the timestamp to date:\n * const result = toDate(1392098430000)\n * //=> Tue Feb 11 2014 11:30:30\n */\nexport function toDate(argument, context) {\n // [TODO] Get rid of `toDate` or `constructFrom`?\n return constructFrom(context || argument, argument);\n}\n\n// Fallback for modularized imports:\nexport default toDate;\n","import { toDate } from \"./toDate.js\";\n\n/**\n * @name getUnixTime\n * @category Timestamp Helpers\n * @summary Get the seconds timestamp of the given date.\n *\n * @description\n * Get the seconds timestamp of the given date.\n *\n * @param date - The given date\n *\n * @returns The timestamp\n *\n * @example\n * // Get the timestamp of 29 February 2012 11:45:05 CET:\n * const result = getUnixTime(new Date(2012, 1, 29, 11, 45, 5))\n * //=> 1330512305\n */\nexport function getUnixTime(date) {\n return Math.trunc(+toDate(date) / 1000);\n}\n\n// Fallback for modularized imports:\nexport default getUnixTime;\n","import z, { prettifyError } from \"zod/v4\";\n\nimport type { PriceDai, PriceEth, PriceUsdc } from \"./currencies\";\nimport type { ChainIdString, UrlString } from \"./serialized-types\";\nimport type { AccountId, BlockNumber, BlockRef, ChainId, Datetime, Duration } from \"./types\";\nimport {\n makeAccountIdStringSchema,\n makeBlockNumberSchema,\n makeBlockRefSchema,\n makeChainIdStringSchema,\n makeDatetimeSchema,\n makeDurationSchema,\n makePriceDaiSchema,\n makePriceEthSchema,\n makePriceUsdcSchema,\n makeUnixTimestampSchema,\n makeUrlSchema,\n} from \"./zod-schemas\";\n\nexport function deserializeChainId(maybeChainId: ChainIdString, valueLabel?: string): ChainId {\n const schema = makeChainIdStringSchema(valueLabel);\n const parsed = schema.safeParse(maybeChainId);\n\n if (parsed.error) {\n throw new Error(`Cannot deserialize ChainId:\\n${prettifyError(parsed.error)}\\n`);\n }\n\n return parsed.data;\n}\n\nexport function deserializeDatetime(maybeDatetime: string, valueLabel?: string): Datetime {\n const schema = makeDatetimeSchema(valueLabel);\n const parsed = schema.safeParse(maybeDatetime);\n\n if (parsed.error) {\n throw new Error(`Cannot deserialize Datetime:\\n${prettifyError(parsed.error)}\\n`);\n }\n\n return parsed.data;\n}\n\nexport function deserializeUnixTimestamp(maybeTimestamp: number, valueLabel?: string) {\n const schema = makeUnixTimestampSchema(valueLabel);\n const parsed = schema.safeParse(maybeTimestamp);\n\n if (parsed.error) {\n throw new Error(`Cannot deserialize Unix Timestamp:\\n${prettifyError(parsed.error)}\\n`);\n }\n\n return parsed.data;\n}\n\nexport function deserializeUrl(maybeUrl: UrlString, valueLabel?: string): URL {\n const schema = makeUrlSchema(valueLabel);\n const parsed = schema.safeParse(maybeUrl);\n\n if (parsed.error) {\n throw new Error(`Cannot deserialize URL:\\n${prettifyError(parsed.error)}\\n`);\n }\n\n return parsed.data;\n}\n\nexport function deserializeBlockNumber(maybeBlockNumber: number, valueLabel?: string): BlockNumber {\n const schema = makeBlockNumberSchema(valueLabel);\n const parsed = schema.safeParse(maybeBlockNumber);\n\n if (parsed.error) {\n throw new Error(`Cannot deserialize BlockNumber:\\n${prettifyError(parsed.error)}\\n`);\n }\n\n return parsed.data;\n}\n\nexport function deserializeBlockRef(\n maybeBlockRef: Partial<BlockRef>,\n valueLabel?: string,\n): BlockRef {\n const schema = makeBlockRefSchema(valueLabel);\n const parsed = schema.safeParse(maybeBlockRef);\n\n if (parsed.error) {\n throw new Error(`Cannot deserialize BlockRef:\\n${prettifyError(parsed.error)}\\n`);\n }\n\n return parsed.data;\n}\n\nexport function deserializeDuration(maybeDuration: unknown, valueLabel?: string): Duration {\n const schema = z.coerce.number().pipe(makeDurationSchema(valueLabel));\n const parsed = schema.safeParse(maybeDuration);\n\n if (parsed.error) {\n throw new RangeError(`Cannot deserialize Duration:\\n${prettifyError(parsed.error)}\\n`);\n }\n\n return parsed.data;\n}\n\nexport function parseAccountId(maybeAccountId: unknown, valueLabel?: string): AccountId {\n const schema = makeAccountIdStringSchema(valueLabel);\n const parsed = schema.safeParse(maybeAccountId);\n\n if (parsed.error) {\n throw new RangeError(`Cannot deserialize AccountId:\\n${prettifyError(parsed.error)}\\n`);\n }\n\n return parsed.data;\n}\n\nexport function deserializePriceEth(maybePrice: unknown, valueLabel?: string): PriceEth {\n const schema = makePriceEthSchema(valueLabel);\n const parsed = schema.safeParse(maybePrice);\n\n if (parsed.error) {\n throw new Error(`Cannot deserialize PriceEth:\\n${prettifyError(parsed.error)}\\n`);\n }\n\n return parsed.data;\n}\n\nexport function deserializePriceUsdc(maybePrice: unknown, valueLabel?: string): PriceUsdc {\n const schema = makePriceUsdcSchema(valueLabel);\n const parsed = schema.safeParse(maybePrice);\n\n if (parsed.error) {\n throw new Error(`Cannot deserialize PriceUsdc:\\n${prettifyError(parsed.error)}\\n`);\n }\n\n return parsed.data;\n}\n\nexport function deserializePriceDai(maybePrice: unknown, valueLabel?: string): PriceDai {\n const schema = makePriceDaiSchema(valueLabel);\n const parsed = schema.safeParse(maybePrice);\n\n if (parsed.error) {\n throw new Error(`Cannot deserialize PriceDai:\\n${prettifyError(parsed.error)}\\n`);\n }\n\n return parsed.data;\n}\n","import { getUnixTime } from \"date-fns/getUnixTime\";\n\nimport { deserializeDuration, deserializeUnixTimestamp } from \"./deserialize\";\nimport type { Duration, UnixTimestamp } from \"./types\";\n\n/**\n * Duration between two moments in time.\n */\nexport function durationBetween(start: UnixTimestamp, end: UnixTimestamp): Duration {\n return deserializeDuration(end - start, \"Duration\");\n}\n\n/**\n * Add a duration to a timestamp.\n */\nexport function addDuration(timestamp: UnixTimestamp, duration: Duration): UnixTimestamp {\n return deserializeUnixTimestamp(timestamp + duration, \"UnixTimestamp\");\n}\n\n/**\n * Parses an ISO 8601 date string into a {@link UnixTimestamp}.\n *\n * Accepts date strings in ISO 8601 format with an explicit timezone designator\n * (trailing 'Z' or offset like +HH:MM/-HH:MM), e.g., \"2025-12-01T00:00:00Z\".\n *\n * @param isoDateString - The ISO 8601 date string to parse (must include timezone)\n * @returns The Unix timestamp (seconds since epoch)\n *\n * @throws {Error} If the date string is missing a timezone designator or cannot be parsed\n *\n * @example\n * parseTimestamp(\"2025-12-01T00:00:00Z\") // returns 1764547200\n * parseTimestamp(\"2026-03-31T23:59:59Z\") // returns 1775001599\n */\nexport function parseTimestamp(isoDateString: string): UnixTimestamp {\n if (!/Z$|[+-]\\d{2}:\\d{2}$/.test(isoDateString)) {\n throw new Error(`Timezone required: provide Z or offset`);\n }\n\n const date = new Date(isoDateString);\n\n if (Number.isNaN(date.getTime())) {\n throw new Error(`Invalid date string: ${isoDateString}`);\n }\n\n return deserializeUnixTimestamp(getUnixTime(date), \"UnixTimestamp\");\n}\n","import z from \"zod/v4\";\n\nimport {\n makeDurationSchema,\n makeFiniteNonNegativeNumberSchema,\n makeLowercaseAddressSchema,\n makeNonNegativeIntegerSchema,\n makePositiveIntegerSchema,\n makePriceEthSchema,\n makePriceUsdcSchema,\n makeUnixTimestampSchema,\n} from \"@ensnode/ensnode-sdk/internal\";\n\nimport {\n makeBaseReferralProgramEditionSummarySchema,\n makeBaseReferralProgramRulesSchema,\n makeBaseReferrerLeaderboardPageSchema,\n makeReferralProgramStatusSchema,\n} from \"../../shared/api/zod-schemas\";\nimport { ReferrerEditionMetricsTypeIds } from \"../../shared/edition-metrics\";\nimport { ReferralProgramAwardModels } from \"../../shared/rules\";\n\n/**\n * Schema for {@link ReferralProgramRulesPieSplit}.\n */\nexport const makeReferralProgramRulesPieSplitSchema = (\n valueLabel: string = \"ReferralProgramRulesPieSplit\",\n) =>\n makeBaseReferralProgramRulesSchema(valueLabel).safeExtend({\n awardModel: z.literal(ReferralProgramAwardModels.PieSplit),\n totalAwardPoolValue: makePriceUsdcSchema(`${valueLabel}.totalAwardPoolValue`),\n maxQualifiedReferrers: makeNonNegativeIntegerSchema(`${valueLabel}.maxQualifiedReferrers`),\n });\n\n/**\n * Schema for {@link AwardedReferrerMetricsPieSplit} (with numeric rank).\n */\nexport const makeAwardedReferrerMetricsPieSplitSchema = (\n valueLabel: string = \"AwardedReferrerMetricsPieSplit\",\n) =>\n z.object({\n referrer: makeLowercaseAddressSchema(`${valueLabel}.referrer`),\n totalReferrals: makeNonNegativeIntegerSchema(`${valueLabel}.totalReferrals`),\n totalIncrementalDuration: makeDurationSchema(`${valueLabel}.totalIncrementalDuration`),\n totalRevenueContribution: makePriceEthSchema(`${valueLabel}.totalRevenueContribution`),\n score: makeFiniteNonNegativeNumberSchema(`${valueLabel}.score`),\n rank: makePositiveIntegerSchema(`${valueLabel}.rank`),\n isQualified: z.boolean(),\n finalScoreBoost: makeFiniteNonNegativeNumberSchema(`${valueLabel}.finalScoreBoost`).max(\n 1,\n `${valueLabel}.finalScoreBoost must be <= 1`,\n ),\n finalScore: makeFiniteNonNegativeNumberSchema(`${valueLabel}.finalScore`),\n awardPoolShare: makeFiniteNonNegativeNumberSchema(`${valueLabel}.awardPoolShare`).max(\n 1,\n `${valueLabel}.awardPoolShare must be <= 1`,\n ),\n awardPoolApproxValue: makePriceUsdcSchema(`${valueLabel}.awardPoolApproxValue`),\n });\n\n/**\n * Schema for {@link UnrankedReferrerMetricsPieSplit} (with null rank).\n */\nexport const makeUnrankedReferrerMetricsPieSplitSchema = (\n valueLabel: string = \"UnrankedReferrerMetricsPieSplit\",\n) =>\n z.object({\n referrer: makeLowercaseAddressSchema(`${valueLabel}.referrer`),\n totalReferrals: makeNonNegativeIntegerSchema(`${valueLabel}.totalReferrals`),\n totalIncrementalDuration: makeDurationSchema(`${valueLabel}.totalIncrementalDuration`),\n totalRevenueContribution: makePriceEthSchema(`${valueLabel}.totalRevenueContribution`),\n score: makeFiniteNonNegativeNumberSchema(`${valueLabel}.score`),\n rank: z.null(),\n isQualified: z.literal(false),\n finalScoreBoost: makeFiniteNonNegativeNumberSchema(`${valueLabel}.finalScoreBoost`).max(\n 1,\n `${valueLabel}.finalScoreBoost must be <= 1`,\n ),\n finalScore: makeFiniteNonNegativeNumberSchema(`${valueLabel}.finalScore`),\n awardPoolShare: makeFiniteNonNegativeNumberSchema(`${valueLabel}.awardPoolShare`).max(\n 1,\n `${valueLabel}.awardPoolShare must be <= 1`,\n ),\n awardPoolApproxValue: makePriceUsdcSchema(`${valueLabel}.awardPoolApproxValue`),\n });\n\n/**\n * Schema for {@link AggregatedReferrerMetricsPieSplit}.\n */\nexport const makeAggregatedReferrerMetricsPieSplitSchema = (\n valueLabel: string = \"AggregatedReferrerMetricsPieSplit\",\n) =>\n z.object({\n grandTotalReferrals: makeNonNegativeIntegerSchema(`${valueLabel}.grandTotalReferrals`),\n grandTotalIncrementalDuration: makeDurationSchema(\n `${valueLabel}.grandTotalIncrementalDuration`,\n ),\n grandTotalRevenueContribution: makePriceEthSchema(\n `${valueLabel}.grandTotalRevenueContribution`,\n ),\n grandTotalQualifiedReferrersFinalScore: makeFiniteNonNegativeNumberSchema(\n `${valueLabel}.grandTotalQualifiedReferrersFinalScore`,\n ),\n minFinalScoreToQualify: makeFiniteNonNegativeNumberSchema(\n `${valueLabel}.minFinalScoreToQualify`,\n ),\n });\n\n/**\n * Schema for {@link ReferrerEditionMetricsRankedPieSplit}.\n */\nexport const makeReferrerEditionMetricsRankedPieSplitSchema = (\n valueLabel: string = \"ReferrerEditionMetricsRankedPieSplit\",\n) =>\n z\n .object({\n awardModel: z.literal(ReferralProgramAwardModels.PieSplit),\n type: z.literal(ReferrerEditionMetricsTypeIds.Ranked),\n rules: makeReferralProgramRulesPieSplitSchema(`${valueLabel}.rules`),\n referrer: makeAwardedReferrerMetricsPieSplitSchema(`${valueLabel}.referrer`),\n aggregatedMetrics: makeAggregatedReferrerMetricsPieSplitSchema(\n `${valueLabel}.aggregatedMetrics`,\n ),\n status: makeReferralProgramStatusSchema(`${valueLabel}.status`),\n accurateAsOf: makeUnixTimestampSchema(`${valueLabel}.accurateAsOf`),\n })\n .refine((data) => data.awardModel === data.rules.awardModel, {\n message: `${valueLabel}.awardModel must equal ${valueLabel}.rules.awardModel`,\n path: [\"awardModel\"],\n });\n\n/**\n * Schema for {@link ReferrerEditionMetricsUnrankedPieSplit}.\n */\nexport const makeReferrerEditionMetricsUnrankedPieSplitSchema = (\n valueLabel: string = \"ReferrerEditionMetricsUnrankedPieSplit\",\n) =>\n z\n .object({\n awardModel: z.literal(ReferralProgramAwardModels.PieSplit),\n type: z.literal(ReferrerEditionMetricsTypeIds.Unranked),\n rules: makeReferralProgramRulesPieSplitSchema(`${valueLabel}.rules`),\n referrer: makeUnrankedReferrerMetricsPieSplitSchema(`${valueLabel}.referrer`),\n aggregatedMetrics: makeAggregatedReferrerMetricsPieSplitSchema(\n `${valueLabel}.aggregatedMetrics`,\n ),\n status: makeReferralProgramStatusSchema(`${valueLabel}.status`),\n accurateAsOf: makeUnixTimestampSchema(`${valueLabel}.accurateAsOf`),\n })\n .refine((data) => data.awardModel === data.rules.awardModel, {\n message: `${valueLabel}.awardModel must equal ${valueLabel}.rules.awardModel`,\n path: [\"awardModel\"],\n });\n\n/**\n * Schema for all {@link ReferrerEditionMetrics} variants of the pie-split award model\n * (both ranked and unranked).\n */\nexport const makeReferrerEditionMetricsPieSplitSchema = (\n valueLabel: string = \"ReferrerEditionMetricsPieSplit\",\n) =>\n z.discriminatedUnion(\"type\", [\n makeReferrerEditionMetricsRankedPieSplitSchema(valueLabel),\n makeReferrerEditionMetricsUnrankedPieSplitSchema(valueLabel),\n ]);\n\n/**\n * Schema for {@link ReferralProgramEditionSummaryPieSplit}.\n */\nexport const makeReferralProgramEditionSummaryPieSplitSchema = (\n valueLabel: string = \"ReferralProgramEditionSummaryPieSplit\",\n) =>\n makeBaseReferralProgramEditionSummarySchema(valueLabel)\n .safeExtend({\n awardModel: z.literal(ReferralProgramAwardModels.PieSplit),\n rules: makeReferralProgramRulesPieSplitSchema(`${valueLabel}.rules`),\n })\n .refine((data) => data.awardModel === data.rules.awardModel, {\n message: `${valueLabel}.awardModel must equal ${valueLabel}.rules.awardModel`,\n path: [\"awardModel\"],\n });\n\n/**\n * Schema for {@link ReferrerLeaderboardPagePieSplit}.\n */\nexport const makeReferrerLeaderboardPagePieSplitSchema = (\n valueLabel: string = \"ReferrerLeaderboardPagePieSplit\",\n) =>\n makeBaseReferrerLeaderboardPageSchema(valueLabel)\n .safeExtend({\n awardModel: z.literal(ReferralProgramAwardModels.PieSplit),\n rules: makeReferralProgramRulesPieSplitSchema(`${valueLabel}.rules`),\n referrers: z.array(\n makeAwardedReferrerMetricsPieSplitSchema(`${valueLabel}.referrers[record]`),\n ),\n aggregatedMetrics: makeAggregatedReferrerMetricsPieSplitSchema(\n `${valueLabel}.aggregatedMetrics`,\n ),\n })\n .refine((data) => data.awardModel === data.rules.awardModel, {\n message: `${valueLabel}.awardModel must equal ${valueLabel}.rules.awardModel`,\n path: [\"awardModel\"],\n });\n","import z from \"zod/v4\";\n\nimport {\n makeAccountIdSchema,\n makeNonNegativeIntegerSchema,\n makePositiveIntegerSchema,\n makeUnixTimestampSchema,\n makeUrlSchema,\n} from \"@ensnode/ensnode-sdk/internal\";\n\nimport { REFERRERS_PER_LEADERBOARD_PAGE_MAX } from \"../leaderboard-page\";\nimport { ReferralProgramEditionStatuses } from \"../status\";\n\n/**\n * Loose base schema for {@link BaseReferralProgramRules}.\n *\n * Accepts any string for `awardModel` to support forward-compatible parsing of unrecognized\n * models. Model-specific schemas override `awardModel` with a literal.\n */\nexport const makeBaseReferralProgramRulesSchema = (valueLabel: string) =>\n z\n .object({\n awardModel: z.string(),\n startTime: makeUnixTimestampSchema(`${valueLabel}.startTime`),\n endTime: makeUnixTimestampSchema(`${valueLabel}.endTime`),\n subregistryId: makeAccountIdSchema(`${valueLabel}.subregistryId`),\n rulesUrl: makeUrlSchema(`${valueLabel}.rulesUrl`),\n areAwardsDistributed: z.boolean(),\n })\n .refine((data) => data.endTime >= data.startTime, {\n message: `${valueLabel}.endTime must be >= ${valueLabel}.startTime`,\n path: [\"endTime\"],\n });\n\n/**\n * Schema for {@link ReferrerLeaderboardPageContext}.\n */\nexport const makeReferrerLeaderboardPageContextSchema = (\n valueLabel: string = \"ReferrerLeaderboardPageContext\",\n) =>\n z.object({\n page: makePositiveIntegerSchema(`${valueLabel}.page`),\n recordsPerPage: makePositiveIntegerSchema(`${valueLabel}.recordsPerPage`).max(\n REFERRERS_PER_LEADERBOARD_PAGE_MAX,\n `${valueLabel}.recordsPerPage must not exceed ${REFERRERS_PER_LEADERBOARD_PAGE_MAX}`,\n ),\n totalRecords: makeNonNegativeIntegerSchema(`${valueLabel}.totalRecords`),\n totalPages: makePositiveIntegerSchema(`${valueLabel}.totalPages`),\n hasNext: z.boolean(),\n hasPrev: z.boolean(),\n startIndex: z.optional(makeNonNegativeIntegerSchema(`${valueLabel}.startIndex`)),\n endIndex: z.optional(makeNonNegativeIntegerSchema(`${valueLabel}.endIndex`)),\n });\n\n/**\n * Schema for referral program status field.\n * Validates that the status is one of the values in {@link ReferralProgramEditionStatuses}.\n */\nexport const makeReferralProgramStatusSchema = (_valueLabel: string = \"status\") =>\n z.enum(ReferralProgramEditionStatuses);\n\n/**\n * Loose base schema for {@link BaseReferralProgramEditionSummary}.\n *\n * Accepts any string for `rules.awardModel` to support forward-compatible parsing.\n */\nexport const makeBaseReferralProgramEditionSummarySchema = (valueLabel: string) =>\n z.object({\n awardModel: z.string(),\n slug: z.string().min(1, `${valueLabel}.slug must not be empty`),\n displayName: z.string().min(1, `${valueLabel}.displayName must not be empty`),\n status: makeReferralProgramStatusSchema(`${valueLabel}.status`),\n rules: makeBaseReferralProgramRulesSchema(`${valueLabel}.rules`),\n });\n\n/**\n * Loose base schema for {@link BaseReferrerLeaderboardPage}.\n *\n * Accepts any string for `awardModel` to support forward-compatible parsing of unrecognized\n * models. Model-specific schemas override `awardModel` with a literal.\n */\nexport const makeBaseReferrerLeaderboardPageSchema = (valueLabel: string) =>\n z.object({\n awardModel: z.string(),\n pageContext: makeReferrerLeaderboardPageContextSchema(`${valueLabel}.pageContext`),\n status: makeReferralProgramStatusSchema(`${valueLabel}.status`),\n accurateAsOf: makeUnixTimestampSchema(`${valueLabel}.accurateAsOf`),\n });\n","export const isInteger = (value: number): boolean => {\n return Number.isInteger(value);\n};\n\nexport const isNonNegativeInteger = (value: number): boolean => {\n return value >= 0 && Number.isInteger(value);\n};\n\nexport const isPositiveInteger = (value: number): boolean => {\n return value >= 1 && Number.isInteger(value);\n};\n\nexport const validateNonNegativeInteger = (value: number): void => {\n if (!isNonNegativeInteger(value)) {\n throw new Error(`Invalid non-negative integer: ${value}.`);\n }\n};\n\nexport const isFiniteNonNegativeNumber = (value: number): boolean => {\n return value >= 0 && Number.isFinite(value);\n};\n","import type { Address } from \"viem\";\n\nimport type { UnixTimestamp } from \"@ensnode/ensnode-sdk\";\n\nimport type { ReferrerLeaderboard } from \"../../leaderboard\";\nimport { isNonNegativeInteger, isPositiveInteger } from \"../../number\";\nimport type { ReferralProgramAwardModel, ReferralProgramAwardModels } from \"./rules\";\nimport type { ReferralProgramEditionStatusId } from \"./status\";\n\n/**\n * The default number of referrers per leaderboard page.\n */\nexport const REFERRERS_PER_LEADERBOARD_PAGE_DEFAULT = 25;\n\n/**\n * The maximum number of referrers per leaderboard page.\n */\n\nexport const REFERRERS_PER_LEADERBOARD_PAGE_MAX = 100;\n\n/**\n * Pagination params for leaderboard queries.\n */\nexport interface ReferrerLeaderboardPageParams {\n /**\n * Requested referrer leaderboard page number (1-indexed)\n * @invariant Must be a positive integer (>= 1)\n * @default 1\n */\n page?: number;\n\n /**\n * Maximum number of referrers to return per leaderboard page\n * @invariant Must be a positive integer (>= 1) and less than or equal to {@link REFERRERS_PER_LEADERBOARD_PAGE_MAX}\n * @default {@link REFERRERS_PER_LEADERBOARD_PAGE_DEFAULT}\n */\n recordsPerPage?: number;\n}\n\nconst validateReferrerLeaderboardPageParams = (params: ReferrerLeaderboardPageParams): void => {\n if (params.page !== undefined && !isPositiveInteger(params.page)) {\n throw new Error(\n `Invalid ReferrerLeaderboardPageParams: ${params.page}. page must be a positive integer.`,\n );\n }\n if (params.recordsPerPage !== undefined && !isPositiveInteger(params.recordsPerPage)) {\n throw new Error(\n `Invalid ReferrerLeaderboardPageParams: ${params.recordsPerPage}. recordsPerPage must be a positive integer.`,\n );\n }\n if (\n params.recordsPerPage !== undefined &&\n params.recordsPerPage > REFERRERS_PER_LEADERBOARD_PAGE_MAX\n ) {\n throw new Error(\n `Invalid ReferrerLeaderboardPageParams: ${params.recordsPerPage}. recordsPerPage must be less than or equal to ${REFERRERS_PER_LEADERBOARD_PAGE_MAX}.`,\n );\n }\n};\n\nexport const buildReferrerLeaderboardPageParams = (\n params: ReferrerLeaderboardPageParams,\n): Required<ReferrerLeaderboardPageParams> => {\n const result = {\n page: params.page ?? 1,\n recordsPerPage: params.recordsPerPage ?? REFERRERS_PER_LEADERBOARD_PAGE_DEFAULT,\n } satisfies Required<ReferrerLeaderboardPageParams>;\n validateReferrerLeaderboardPageParams(result);\n return result;\n};\n\nexport interface ReferrerLeaderboardPageContext extends Required<ReferrerLeaderboardPageParams> {\n /**\n * Total number of referrers across all leaderboard pages\n * @invariant Guaranteed to be a non-negative integer (>= 0)\n */\n totalRecords: number;\n\n /**\n * Total number of pages in the leaderboard\n * @invariant Guaranteed to be a positive integer (>= 1)\n */\n totalPages: number;\n\n /**\n * Indicates if there is a next page available\n * @invariant true if and only if (`page` * `recordsPerPage` < `totalRecords`)\n */\n hasNext: boolean;\n\n /**\n * Indicates if there is a previous page available\n * @invariant true if and only if (`page` > 1)\n */\n hasPrev: boolean;\n\n /**\n * The start index of the referrers on the page (0-indexed)\n *\n * `undefined` if and only if `totalRecords` is 0.\n *\n * @invariant Guaranteed to be a non-negative integer (>= 0)\n */\n startIndex?: number;\n\n /**\n * The end index of the referrers on the page (0-indexed)\n *\n * `undefined` if and only if `totalRecords` is 0.\n *\n * @invariant Guaranteed to be a non-negative integer (>= 0)\n * @invariant If `totalRecords` is > 0:\n * - Guaranteed to be greater than or equal to `startIndex`.\n * - Guaranteed to be less than `totalRecords`.\n */\n endIndex?: number;\n}\n\nexport const validateReferrerLeaderboardPageContext = (\n context: ReferrerLeaderboardPageContext,\n): void => {\n validateReferrerLeaderboardPageParams(context);\n if (!isNonNegativeInteger(context.totalRecords)) {\n throw new Error(\n `Invalid ReferrerLeaderboardPageContext: totalRecords must be a non-negative integer but is ${context.totalRecords}.`,\n );\n }\n\n // Validate totalPages\n if (!isPositiveInteger(context.totalPages)) {\n throw new Error(\n `Invalid ReferrerLeaderboardPageContext: totalPages must be a positive integer (>= 1) but is ${context.totalPages}.`,\n );\n }\n\n const expectedTotalPages =\n context.totalRecords === 0 ? 1 : Math.ceil(context.totalRecords / context.recordsPerPage);\n\n if (context.totalPages !== expectedTotalPages) {\n throw new Error(\n `Invalid ReferrerLeaderboardPageContext: totalPages is ${context.totalPages} but expected ${expectedTotalPages} based on totalRecords (${context.totalRecords}) and recordsPerPage (${context.recordsPerPage}).`,\n );\n }\n\n if (context.page > context.totalPages) {\n throw new Error(\n `Invalid ReferrerLeaderboardPageContext: page ${context.page} exceeds totalPages ${context.totalPages}.`,\n );\n }\n\n // Validate startIndex and endIndex\n const expectedStartIndex = (context.page - 1) * context.recordsPerPage;\n const expectedEndIndex = Math.min(\n expectedStartIndex + context.recordsPerPage - 1,\n context.totalRecords - 1,\n );\n\n if (context.totalRecords === 0) {\n if (context.startIndex !== undefined) {\n throw new Error(\n `Invalid ReferrerLeaderboardPageContext: startIndex must be undefined when totalRecords is 0 but is ${context.startIndex}.`,\n );\n }\n if (context.endIndex !== undefined) {\n throw new Error(\n `Invalid ReferrerLeaderboardPageContext: endIndex must be undefined when totalRecords is 0 but is ${context.endIndex}.`,\n );\n }\n } else {\n if (context.startIndex !== expectedStartIndex) {\n throw new Error(\n `Invalid ReferrerLeaderboardPageContext: startIndex is ${context.startIndex} but expected ${expectedStartIndex} based on page (${context.page}) and recordsPerPage (${context.recordsPerPage}).`,\n );\n }\n if (context.endIndex !== expectedEndIndex) {\n throw new Error(\n `Invalid ReferrerLeaderboardPageContext: endIndex is ${context.endIndex} but expected ${expectedEndIndex} based on startIndex (${expectedStartIndex}), recordsPerPage (${context.recordsPerPage}), and totalRecords (${context.totalRecords}).`,\n );\n }\n if (\n typeof context.endIndex !== \"undefined\" &&\n typeof context.startIndex !== \"undefined\" &&\n context.endIndex < context.startIndex\n ) {\n throw new Error(\n `Invalid ReferrerLeaderboardPageContext: endIndex (${context.endIndex}) must be greater than or equal to startIndex (${context.startIndex}).`,\n );\n }\n }\n\n const startIndex = (context.page - 1) * context.recordsPerPage;\n const endIndex = startIndex + context.recordsPerPage;\n\n if (!context.hasNext && endIndex < context.totalRecords) {\n throw new Error(\n `Invalid ReferrerLeaderboardPageContext: if hasNext is false, endIndex (${endIndex}) must be greater than or equal to totalRecords (${context.totalRecords}).`,\n );\n } else if (context.hasNext && context.page * context.recordsPerPage >= context.totalRecords) {\n throw new Error(\n `Invalid ReferrerLeaderboardPageContext: if hasNext is true, endIndex (${endIndex}) must be less than totalRecords (${context.totalRecords}).`,\n );\n }\n if (!context.hasPrev && context.page !== 1) {\n throw new Error(\n `Invalid ReferrerLeaderboardPageContext: if hasPrev is false, page must be the first page (1) but is ${context.page}.`,\n );\n } else if (context.hasPrev && context.page === 1) {\n throw new Error(\n `Invalid ReferrerLeaderboardPageContext: if hasPrev is true, page must not be the first page (1) but is ${context.page}.`,\n );\n }\n};\n\nexport const buildReferrerLeaderboardPageContext = (\n optionalParams: ReferrerLeaderboardPageParams,\n leaderboard: ReferrerLeaderboard,\n): ReferrerLeaderboardPageContext => {\n const materializedParams = buildReferrerLeaderboardPageParams(optionalParams);\n\n const totalRecords = leaderboard.referrers.size;\n\n const totalPages = Math.max(1, Math.ceil(totalRecords / materializedParams.recordsPerPage));\n\n if (materializedParams.page > totalPages) {\n throw new Error(\n `Invalid ReferrerLeaderboardPageContext: page ${materializedParams.page} exceeds total pages ${totalPages}.`,\n );\n }\n\n if (totalRecords === 0) {\n return {\n ...materializedParams,\n totalRecords: 0,\n totalPages: 1,\n hasNext: false,\n hasPrev: false,\n startIndex: undefined,\n endIndex: undefined,\n } satisfies ReferrerLeaderboardPageContext;\n }\n\n const startIndex = (materializedParams.page - 1) * materializedParams.recordsPerPage;\n const maxTheoreticalIndexOnPage = startIndex + (materializedParams.recordsPerPage - 1);\n const endIndex = Math.min(maxTheoreticalIndexOnPage, totalRecords - 1);\n const hasNext = maxTheoreticalIndexOnPage < totalRecords - 1;\n const hasPrev = materializedParams.page > 1;\n\n const result = {\n ...materializedParams,\n totalRecords,\n totalPages,\n hasNext,\n hasPrev,\n startIndex,\n endIndex,\n } satisfies ReferrerLeaderboardPageContext;\n validateReferrerLeaderboardPageContext(result);\n return result;\n};\n\n/**\n * Base fields shared by all leaderboard page variants.\n */\nexport interface BaseReferrerLeaderboardPage {\n /**\n * Discriminant identifying the award model for this leaderboard page.\n */\n awardModel: ReferralProgramAwardModel;\n\n /**\n * The {@link ReferrerLeaderboardPageContext} of this page relative to the overall leaderboard.\n */\n pageContext: ReferrerLeaderboardPageContext;\n\n /**\n * The status of the referral program edition.\n */\n status: ReferralProgramEditionStatusId;\n\n /**\n * The {@link UnixTimestamp} of when the data used to build this page was accurate as of.\n */\n accurateAsOf: UnixTimestamp;\n}\n\n/**\n * A leaderboard page whose `awardModel` is not recognized by this client version.\n *\n * @remarks\n * This is a **client-side forward-compatibility** type only. It is never serialized or processed\n * by business logic on the backend. When the server introduces a new award model type, older\n * clients preserve the page rather than throwing, and downstream code that encounters this type\n * should handle it gracefully rather than crashing.\n */\nexport interface ReferrerLeaderboardPageUnrecognized extends BaseReferrerLeaderboardPage {\n /**\n * Discriminant — always `\"unrecognized\"`.\n */\n awardModel: typeof ReferralProgramAwardModels.Unrecognized;\n\n /**\n * The original, unrecognized `awardModel` string received from the server.\n *\n * @remarks Preserved for logging and debugging. Never used for business logic.\n */\n originalAwardModel: string;\n}\n\n/**\n * Extracts the referrers for the current page from a fully-ranked Map.\n * Generic over the referrer type so each model variant retains its specific type.\n */\nexport function sliceReferrers<T>(\n referrers: Map<Address, T>,\n pageContext: ReferrerLeaderboardPageContext,\n): T[] {\n // pageContext invariants: startIndex and endIndex are defined iff totalRecords > 0\n if (\n pageContext.totalRecords === 0 ||\n pageContext.startIndex === undefined ||\n pageContext.endIndex === undefined\n ) {\n return [];\n }\n const all = [...referrers.values()];\n return all.slice(pageContext.startIndex, pageContext.endIndex + 1);\n}\n","import type { UnixTimestamp } from \"@ensnode/ensnode-sdk\";\n\nimport type { BaseReferralProgramRules } from \"./rules\";\n\n/**\n * The type of referral program edition's status.\n */\nexport const ReferralProgramEditionStatuses = {\n /**\n * Represents a referral program edition that has been announced, but hasn't started yet.\n */\n Scheduled: \"Scheduled\",\n\n /**\n * Represents a currently ongoing referral program edition.\n */\n Active: \"Active\",\n\n /**\n * Represents a referral program edition that is still within its active window\n * but whose award pool has been fully consumed.\n *\n * @note Not all award models may support this status.\n */\n Exhausted: \"Exhausted\",\n\n /**\n * Represents a referral program edition that has passed its end time but whose awards have not yet\n * been distributed. The edition is in a review window before full closure.\n *\n * Transitions to {@link ReferralProgramEditionStatuses.Closed} once `areAwardsDistributed` is set to `true`.\n */\n AwardsReview: \"AwardsReview\",\n\n /**\n * Represents a referral program edition that has already ended and whose awards have been distributed.\n */\n Closed: \"Closed\",\n} as const;\n\n/**\n * The derived string union of possible {@link ReferralProgramEditionStatuses}.\n */\nexport type ReferralProgramEditionStatusId =\n (typeof ReferralProgramEditionStatuses)[keyof typeof ReferralProgramEditionStatuses];\n\n/**\n * Calculate the base status of a referral program edition using only its rules and\n * the current time (makes no consideration of the awards possibly being exhausted).\n *\n * @param rules - Related referral program's rules containing program's start/end date and\n * `areAwardsDistributed` flag.\n * @param now - Current date in {@link UnixTimestamp} format.\n */\nexport const calcBaseReferralProgramEditionStatus = (\n rules: BaseReferralProgramRules,\n now: UnixTimestamp,\n): ReferralProgramEditionStatusId => {\n // if the program has not started return \"Scheduled\"\n if (now < rules.startTime) return ReferralProgramEditionStatuses.Scheduled;\n\n // if the program has ended, return \"Closed\" if awards are distributed, else \"AwardsReview\"\n if (now > rules.endTime)\n return rules.areAwardsDistributed\n ? ReferralProgramEditionStatuses.Closed\n : ReferralProgramEditionStatuses.AwardsReview;\n\n // otherwise, return \"Active\"\n return ReferralProgramEditionStatuses.Active;\n};\n","import type { ReferralProgramAwardModels } from \"./rules\";\n\n/**\n * The type of referrer edition metrics data.\n */\nexport const ReferrerEditionMetricsTypeIds = {\n /**\n * Represents a referrer who is ranked on the leaderboard.\n */\n Ranked: \"ranked\",\n\n /**\n * Represents a referrer who is not ranked on the leaderboard.\n */\n Unranked: \"unranked\",\n} as const;\n\n/**\n * The derived string union of possible {@link ReferrerEditionMetricsTypeIds}.\n */\nexport type ReferrerEditionMetricsTypeId =\n (typeof ReferrerEditionMetricsTypeIds)[keyof typeof ReferrerEditionMetricsTypeIds];\n\n/**\n * Referrer edition metrics for an edition whose `awardModel` is not recognized by this client version.\n *\n * @remarks\n * This is a **client-side forward-compatibility** type only. It is never serialized or processed\n * by business logic on the backend. When the server introduces a new award model type, older\n * clients preserve the metrics rather than throwing, and downstream code that encounters this type\n * should handle it gracefully rather than crashing.\n */\nexport interface ReferrerEditionMetricsUnrecognized {\n /**\n * Discriminant — always `\"unrecognized\"`.\n */\n awardModel: typeof ReferralProgramAwardModels.Unrecognized;\n\n /**\n * The original, unrecognized `awardModel` string received from the server.\n *\n * @remarks Preserved for logging and debugging. Never used for business logic.\n */\n originalAwardModel: string;\n}\n","import type { Duration, UnixTimestamp } from \"@ensnode/ensnode-sdk\";\n\nimport { isInteger, isNonNegativeInteger } from \"./number\";\n\nexport const validateUnixTimestamp = (timestamp: UnixTimestamp): void => {\n if (!isInteger(timestamp)) {\n throw new Error(`Invalid Unix timestamp: ${timestamp}. Unix timestamp must be an integer.`);\n }\n};\n\n/**\n * The number of seconds in a year.\n *\n * (60 seconds per minute * 60 minutes per hour *\n * 24 hours per day * 365.2425 days on average per year).\n */\nexport const SECONDS_PER_YEAR: Duration = 31556952;\n\nexport function isValidDuration(duration: Duration): boolean {\n return isNonNegativeInteger(duration);\n}\n\nexport function validateDuration(duration: Duration): void {\n if (!isValidDuration(duration)) {\n throw new Error(`Invalid duration: ${duration}. Duration must be a non-negative integer.`);\n }\n}\n","import type { AccountId, UnixTimestamp } from \"@ensnode/ensnode-sdk\";\nimport { makeAccountIdSchema } from \"@ensnode/ensnode-sdk/internal\";\n\nimport { validateUnixTimestamp } from \"../../time\";\n\n/**\n * Discriminant values for the award model used in a referral program edition.\n *\n * @remarks Clients MUST check `awardModel` before accessing model-specific fields.\n * Editions with unrecognized `awardModel` values are preserved as\n * {@link ReferralProgramRulesUnrecognized} during parsing (see\n * `makeReferralProgramEditionConfigSetArraySchema`). Clients must handle this variant — typically\n * by skipping those editions with a warning log rather than crashing.\n */\nexport const ReferralProgramAwardModels = {\n PieSplit: \"pie-split\",\n RevShareLimit: \"rev-share-limit\",\n Unrecognized: \"unrecognized\",\n} as const;\n\nexport type ReferralProgramAwardModel =\n (typeof ReferralProgramAwardModels)[keyof typeof ReferralProgramAwardModels];\n\n/**\n * Base fields shared across all referral program rule types.\n *\n * Both `ReferralProgramRulesPieSplit` and `ReferralProgramRulesRevShareLimit` are structurally\n * compatible with this interface, so it can be used wherever only the common fields are needed\n * (e.g., `assertLeaderboardInputs`).\n */\nexport interface BaseReferralProgramRules {\n /**\n * Discriminant: identifies the award model for this edition.\n */\n awardModel: ReferralProgramAwardModel;\n\n /**\n * The start time of the referral program.\n */\n startTime: UnixTimestamp;\n\n /**\n * The end time of the referral program.\n * @invariant Guaranteed to be greater than or equal to `startTime`\n */\n endTime: UnixTimestamp;\n\n /**\n * The account ID of the subregistry for the referral program.\n */\n subregistryId: AccountId;\n\n /**\n * URL to the full rules document for these rules.\n * @example new URL(\"https://ensawards.org/ens-holiday-awards-rules\")\n */\n rulesUrl: URL;\n\n /**\n * Whether the awards for this edition have been distributed.\n *\n * When `true` and `now > endTime`, the status transitions from `AwardsReview` to `Closed`.\n */\n areAwardsDistributed: boolean;\n}\n\n/**\n * Rules for a referral program edition whose `awardModel` is not recognized by this client version.\n *\n * @remarks\n * This is a **client-side forward-compatibility** type only. It is never serialized or processed\n * by business logic on the backend. When the server introduces a new award model type, older\n * clients preserve the edition rather than silently dropping it, and downstream code that\n * encounters this type should skip it with a warning log rather than crashing.\n */\nexport interface ReferralProgramRulesUnrecognized extends BaseReferralProgramRules {\n /**\n * Discriminant — always `\"unrecognized\"`.\n */\n awardModel: typeof ReferralProgramAwardModels.Unrecognized;\n\n /**\n * The original, unrecognized `awardModel` string received from the server.\n *\n * @remarks Preserved for logging and debugging. Never used for business logic.\n */\n originalAwardModel: string;\n}\n\nexport const validateBaseReferralProgramRules = (rules: BaseReferralProgramRules): void => {\n makeAccountIdSchema(\"BaseReferralProgramRules.subregistryId\").parse(rules.subregistryId);\n\n validateUnixTimestamp(rules.startTime);\n validateUnixTimestamp(rules.endTime);\n\n if (!(rules.rulesUrl instanceof URL)) {\n throw new Error(\n `BaseReferralProgramRules: rulesUrl must be a URL instance, got ${typeof rules.rulesUrl}.`,\n );\n }\n\n if (rules.endTime < rules.startTime) {\n throw new Error(\n `BaseReferralProgramRules: startTime: ${rules.startTime} is after endTime: ${rules.endTime}.`,\n );\n }\n};\n","import z from \"zod/v4\";\n\nimport {\n makeDurationSchema,\n makeFiniteNonNegativeNumberSchema,\n makeLowercaseAddressSchema,\n makeNonNegativeIntegerSchema,\n makePositiveIntegerSchema,\n makePriceEthSchema,\n makePriceUsdcSchema,\n makeUnixTimestampSchema,\n} from \"@ensnode/ensnode-sdk/internal\";\n\nimport { normalizeAddress } from \"../../../address\";\nimport {\n makeBaseReferralProgramEditionSummarySchema,\n makeBaseReferralProgramRulesSchema,\n makeBaseReferrerLeaderboardPageSchema,\n makeReferralProgramStatusSchema,\n} from \"../../shared/api/zod-schemas\";\nimport { ReferrerEditionMetricsTypeIds } from \"../../shared/edition-metrics\";\nimport { ReferralProgramAwardModels } from \"../../shared/rules\";\n\n/**\n * Schema for {@link ReferralProgramEditionDisqualification}.\n */\nexport const makeReferralProgramEditionDisqualificationSchema = (\n valueLabel = \"ReferralProgramEditionDisqualification\",\n) =>\n z.object({\n referrer: makeLowercaseAddressSchema(`${valueLabel}.referrer`),\n reason: z.string().trim().min(1, `${valueLabel}.reason must not be empty`),\n });\n\n/**\n * Schema for {@link ReferralProgramRulesRevShareLimit}.\n */\nexport const makeReferralProgramRulesRevShareLimitSchema = (\n valueLabel: string = \"ReferralProgramRulesRevShareLimit\",\n) =>\n makeBaseReferralProgramRulesSchema(valueLabel).safeExtend({\n awardModel: z.literal(ReferralProgramAwardModels.RevShareLimit),\n totalAwardPoolValue: makePriceUsdcSchema(`${valueLabel}.totalAwardPoolValue`),\n minQualifiedRevenueContribution: makePriceUsdcSchema(\n `${valueLabel}.minQualifiedRevenueContribution`,\n ),\n qualifiedRevenueShare: makeFiniteNonNegativeNumberSchema(\n `${valueLabel}.qualifiedRevenueShare`,\n ).max(1, `${valueLabel}.qualifiedRevenueShare must be <= 1`),\n disqualifications: z\n .array(\n makeReferralProgramEditionDisqualificationSchema(`${valueLabel}.disqualifications[item]`),\n )\n .refine(\n (items) => {\n const addresses = items.map((item) => normalizeAddress(item.referrer));\n return new Set(addresses).size === addresses.length;\n },\n {\n message: `${valueLabel}.disqualifications must not contain duplicate referrer addresses`,\n },\n )\n .default([]),\n });\n\n/**\n * Schema for {@link AwardedReferrerMetricsRevShareLimit} (with numeric rank).\n */\nexport const makeAwardedReferrerMetricsRevShareLimitSchema = (\n valueLabel: string = \"AwardedReferrerMetricsRevShareLimit\",\n) =>\n z\n .object({\n referrer: makeLowercaseAddressSchema(`${valueLabel}.referrer`),\n totalReferrals: makeNonNegativeIntegerSchema(`${valueLabel}.totalReferrals`),\n totalIncrementalDuration: makeDurationSchema(`${valueLabel}.totalIncrementalDuration`),\n totalRevenueContribution: makePriceEthSchema(`${valueLabel}.totalRevenueContribution`),\n totalBaseRevenueContribution: makePriceUsdcSchema(\n `${valueLabel}.totalBaseRevenueContribution`,\n ),\n rank: makePositiveIntegerSchema(`${valueLabel}.rank`),\n isQualified: z.boolean(),\n standardAwardValue: makePriceUsdcSchema(`${valueLabel}.standardAwardValue`),\n awardPoolApproxValue: makePriceUsdcSchema(`${valueLabel}.awardPoolApproxValue`),\n isAdminDisqualified: z.boolean(),\n adminDisqualificationReason: z\n .string()\n .trim()\n .min(1, `${valueLabel}.adminDisqualificationReason must not be empty`)\n .nullable(),\n })\n .refine((data) => data.awardPoolApproxValue.amount <= data.standardAwardValue.amount, {\n message: `${valueLabel}.awardPoolApproxValue must be <= ${valueLabel}.standardAwardValue`,\n path: [\"awardPoolApproxValue\"],\n })\n .refine(\n (data) =>\n !data.isAdminDisqualified ||\n (data.isQualified === false && data.awardPoolApproxValue.amount === 0n),\n {\n message: `When ${valueLabel}.isAdminDisqualified is true, isQualified must be false and awardPoolApproxValue.amount must be 0`,\n path: [\"isAdminDisqualified\"],\n },\n )\n .refine((data) => data.isAdminDisqualified === (data.adminDisqualificationReason !== null), {\n message: `${valueLabel}.adminDisqualificationReason must be non-null iff isAdminDisqualified is true`,\n path: [\"adminDisqualificationReason\"],\n });\n\n/**\n * Schema for {@link UnrankedReferrerMetricsRevShareLimit} (with null rank).\n */\nexport const makeUnrankedReferrerMetricsRevShareLimitSchema = (\n valueLabel: string = \"UnrankedReferrerMetricsRevShareLimit\",\n) =>\n z\n .object({\n referrer: makeLowercaseAddressSchema(`${valueLabel}.referrer`),\n totalReferrals: makeNonNegativeIntegerSchema(`${valueLabel}.totalReferrals`),\n totalIncrementalDuration: makeDurationSchema(`${valueLabel}.totalIncrementalDuration`),\n totalRevenueContribution: makePriceEthSchema(`${valueLabel}.totalRevenueContribution`),\n totalBaseRevenueContribution: makePriceUsdcSchema(\n `${valueLabel}.totalBaseRevenueContribution`,\n ),\n rank: z.null(),\n isQualified: z.literal(false),\n standardAwardValue: makePriceUsdcSchema(`${valueLabel}.standardAwardValue`),\n awardPoolApproxValue: makePriceUsdcSchema(`${valueLabel}.awardPoolApproxValue`),\n isAdminDisqualified: z.boolean(),\n adminDisqualificationReason: z\n .string()\n .trim()\n .min(1, `${valueLabel}.adminDisqualificationReason must not be empty`)\n .nullable(),\n })\n .refine((data) => data.awardPoolApproxValue.amount <= data.standardAwardValue.amount, {\n message: `${valueLabel}.awardPoolApproxValue must be <= ${valueLabel}.standardAwardValue`,\n path: [\"awardPoolApproxValue\"],\n })\n .refine((data) => data.isAdminDisqualified === (data.adminDisqualificationReason !== null), {\n message: `${valueLabel}.adminDisqualificationReason must be non-null iff isAdminDisqualified is true`,\n path: [\"adminDisqualificationReason\"],\n });\n\n/**\n * Schema for {@link AggregatedReferrerMetricsRevShareLimit}.\n */\nexport const makeAggregatedReferrerMetricsRevShareLimitSchema = (\n valueLabel: string = \"AggregatedReferrerMetricsRevShareLimit\",\n) =>\n z.object({\n grandTotalReferrals: makeNonNegativeIntegerSchema(`${valueLabel}.grandTotalReferrals`),\n grandTotalIncrementalDuration: makeDurationSchema(\n `${valueLabel}.grandTotalIncrementalDuration`,\n ),\n grandTotalRevenueContribution: makePriceEthSchema(\n `${valueLabel}.grandTotalRevenueContribution`,\n ),\n awardPoolRemaining: makePriceUsdcSchema(`${valueLabel}.awardPoolRemaining`),\n });\n\n/**\n * Schema for {@link ReferrerEditionMetricsRankedRevShareLimit}.\n */\nexport const makeReferrerEditionMetricsRankedRevShareLimitSchema = (\n valueLabel: string = \"ReferrerEditionMetricsRankedRevShareLimit\",\n) =>\n z\n .object({\n awardModel: z.literal(ReferralProgramAwardModels.RevShareLimit),\n type: z.literal(ReferrerEditionMetricsTypeIds.Ranked),\n rules: makeReferralProgramRulesRevShareLimitSchema(`${valueLabel}.rules`),\n referrer: makeAwardedReferrerMetricsRevShareLimitSchema(`${valueLabel}.referrer`),\n aggregatedMetrics: makeAggregatedReferrerMetricsRevShareLimitSchema(\n `${valueLabel}.aggregatedMetrics`,\n ),\n status: makeReferralProgramStatusSchema(`${valueLabel}.status`),\n accurateAsOf: makeUnixTimestampSchema(`${valueLabel}.accurateAsOf`),\n })\n .refine((data) => data.awardModel === data.rules.awardModel, {\n message: `${valueLabel}.awardModel must equal ${valueLabel}.rules.awardModel`,\n path: [\"awardModel\"],\n });\n\n/**\n * Schema for {@link ReferrerEditionMetricsUnrankedRevShareLimit}.\n */\nexport const makeReferrerEditionMetricsUnrankedRevShareLimitSchema = (\n valueLabel: string = \"ReferrerEditionMetricsUnrankedRevShareLimit\",\n) =>\n z\n .object({\n awardModel: z.literal(ReferralProgramAwardModels.RevShareLimit),\n type: z.literal(ReferrerEditionMetricsTypeIds.Unranked),\n rules: makeReferralProgramRulesRevShareLimitSchema(`${valueLabel}.rules`),\n referrer: makeUnrankedReferrerMetricsRevShareLimitSchema(`${valueLabel}.referrer`),\n aggregatedMetrics: makeAggregatedReferrerMetricsRevShareLimitSchema(\n `${valueLabel}.aggregatedMetrics`,\n ),\n status: makeReferralProgramStatusSchema(`${valueLabel}.status`),\n accurateAsOf: makeUnixTimestampSchema(`${valueLabel}.accurateAsOf`),\n })\n .refine((data) => data.awardModel === data.rules.awardModel, {\n message: `${valueLabel}.awardModel must equal ${valueLabel}.rules.awardModel`,\n path: [\"awardModel\"],\n });\n\n/**\n * Schema for all {@link ReferrerEditionMetrics} variants of the rev-share-limit award model\n * (both ranked and unranked).\n */\nexport const makeReferrerEditionMetricsRevShareLimitSchema = (\n valueLabel: string = \"ReferrerEditionMetricsRevShareLimit\",\n) =>\n z.discriminatedUnion(\"type\", [\n makeReferrerEditionMetricsRankedRevShareLimitSchema(valueLabel),\n makeReferrerEditionMetricsUnrankedRevShareLimitSchema(valueLabel),\n ]);\n\n/**\n * Schema for {@link ReferralProgramEditionSummaryRevShareLimit}.\n */\nexport const makeReferralProgramEditionSummaryRevShareLimitSchema = (\n valueLabel: string = \"ReferralProgramEditionSummaryRevShareLimit\",\n) =>\n makeBaseReferralProgramEditionSummarySchema(valueLabel)\n .safeExtend({\n awardModel: z.literal(ReferralProgramAwardModels.RevShareLimit),\n rules: makeReferralProgramRulesRevShareLimitSchema(`${valueLabel}.rules`),\n awardPoolRemaining: makePriceUsdcSchema(`${valueLabel}.awardPoolRemaining`),\n })\n .refine((data) => data.awardModel === data.rules.awardModel, {\n message: `${valueLabel}.awardModel must equal ${valueLabel}.rules.awardModel`,\n path: [\"awardModel\"],\n });\n\n/**\n * Schema for {@link ReferrerLeaderboardPageRevShareLimit}.\n */\nexport const makeReferrerLeaderboardPageRevShareLimitSchema = (\n valueLabel: string = \"ReferrerLeaderboardPageRevShareLimit\",\n) =>\n makeBaseReferrerLeaderboardPageSchema(valueLabel)\n .safeExtend({\n awardModel: z.literal(ReferralProgramAwardModels.RevShareLimit),\n rules: makeReferralProgramRulesRevShareLimitSchema(`${valueLabel}.rules`),\n referrers: z.array(\n makeAwardedReferrerMetricsRevShareLimitSchema(`${valueLabel}.referrers[record]`),\n ),\n aggregatedMetrics: makeAggregatedReferrerMetricsRevShareLimitSchema(\n `${valueLabel}.aggregatedMetrics`,\n ),\n })\n .refine((data) => data.awardModel === data.rules.awardModel, {\n message: `${valueLabel}.awardModel must equal ${valueLabel}.rules.awardModel`,\n path: [\"awardModel\"],\n });\n","import type { Address } from \"viem\";\n\nimport type { ReferrerLeaderboardPageParams } from \"../award-models/shared/leaderboard-page\";\nimport type { ReferralProgramEditionSlug } from \"../edition\";\nimport type { ReferrerEditionMetrics } from \"../edition-metrics\";\nimport type { ReferralProgramEditionSummary } from \"../edition-summary\";\nimport type { ReferrerLeaderboardPage } from \"../leaderboard-page\";\n\n/**\n * Request parameters for a referrer leaderboard page query.\n */\nexport interface ReferrerLeaderboardPageRequest extends ReferrerLeaderboardPageParams {\n /** The referral program edition slug */\n edition: ReferralProgramEditionSlug;\n}\n\n/**\n * A status code for a referrer leaderboard page API response.\n */\nexport const ReferrerLeaderboardPageResponseCodes = {\n /**\n * Represents that the requested referrer leaderboard page is available.\n */\n Ok: \"ok\",\n\n /**\n * Represents that the referrer leaderboard data is not available.\n */\n Error: \"error\",\n} as const;\n\n/**\n * The derived string union of possible {@link ReferrerLeaderboardPageResponseCodes}.\n */\nexport type ReferrerLeaderboardPageResponseCode =\n (typeof ReferrerLeaderboardPageResponseCodes)[keyof typeof ReferrerLeaderboardPageResponseCodes];\n\n/**\n * A referrer leaderboard page response when the data is available.\n */\nexport type ReferrerLeaderboardPageResponseOk = {\n responseCode: typeof ReferrerLeaderboardPageResponseCodes.Ok;\n data: ReferrerLeaderboardPage;\n};\n\n/**\n * A referrer leaderboard page response when the data is not available.\n */\nexport type ReferrerLeaderboardPageResponseError = {\n responseCode: typeof ReferrerLeaderboardPageResponseCodes.Error;\n error: string;\n errorMessage: string;\n};\n\n/**\n * A referrer leaderboard page API response.\n *\n * Use the `responseCode` field to determine the specific type interpretation\n * at runtime.\n */\nexport type ReferrerLeaderboardPageResponse =\n | ReferrerLeaderboardPageResponseOk\n | ReferrerLeaderboardPageResponseError;\n\n/**\n * Maximum number of editions that can be requested in a single {@link ReferrerMetricsEditionsRequest}.\n */\nexport const MAX_EDITIONS_PER_REQUEST = 20;\n\n/**\n * Request parameters for referrer metrics query.\n */\nexport interface ReferrerMetricsEditionsRequest {\n /** The Ethereum address of the referrer to query */\n referrer: Address;\n /** Array of edition slugs to query (min 1, max {@link MAX_EDITIONS_PER_REQUEST}, must be distinct) */\n editions: ReferralProgramEditionSlug[];\n}\n\n/**\n * A status code for referrer metrics API responses.\n */\nexport const ReferrerMetricsEditionsResponseCodes = {\n /**\n * Represents that the referrer metrics data for the requested editions is available.\n */\n Ok: \"ok\",\n\n /**\n * Represents that an error occurred while fetching the data.\n */\n Error: \"error\",\n} as const;\n\n/**\n * The derived string union of possible {@link ReferrerMetricsEditionsResponseCodes}.\n */\nexport type ReferrerMetricsEditionsResponseCode =\n (typeof ReferrerMetricsEditionsResponseCodes)[keyof typeof ReferrerMetricsEditionsResponseCodes];\n\n/**\n * Referrer metrics data for requested editions.\n *\n * Maps each requested edition slug to the referrer's metrics for that edition.\n * Uses Partial because TypeScript cannot know at compile time which specific edition\n * slugs are requested. At runtime, when responseCode is Ok, all requested edition slugs\n * are guaranteed to be present in this record.\n */\nexport type ReferrerMetricsEditionsData = Partial<\n Record<ReferralProgramEditionSlug, ReferrerEditionMetrics>\n>;\n\n/**\n * A successful response containing referrer metrics for the requested editions.\n */\nexport type ReferrerMetricsEditionsResponseOk = {\n responseCode: typeof ReferrerMetricsEditionsResponseCodes.Ok;\n data: ReferrerMetricsEditionsData;\n};\n\n/**\n * A referrer metrics editions response when an error occurs.\n */\nexport type ReferrerMetricsEditionsResponseError = {\n responseCode: typeof ReferrerMetricsEditionsResponseCodes.Error;\n error: string;\n errorMessage: string;\n};\n\n/**\n * A referrer metrics editions API response.\n *\n * Use the `responseCode` field to determine the specific type interpretation\n * at runtime.\n */\nexport type ReferrerMetricsEditionsResponse =\n | ReferrerMetricsEditionsResponseOk\n | ReferrerMetricsEditionsResponseError;\n\n/**\n * A status code for referral program edition summaries API responses.\n */\nexport const ReferralProgramEditionSummariesResponseCodes = {\n /**\n * Represents that the edition summaries are available.\n */\n Ok: \"ok\",\n\n /**\n * Represents that the edition summaries are not available.\n */\n Error: \"error\",\n} as const;\n\n/**\n * The derived string union of possible {@link ReferralProgramEditionSummariesResponseCodes}.\n */\nexport type ReferralProgramEditionSummariesResponseCode =\n (typeof ReferralProgramEditionSummariesResponseCodes)[keyof typeof ReferralProgramEditionSummariesResponseCodes];\n\n/**\n * The data payload containing edition summaries.\n * Editions are sorted in descending order by start timestamp.\n */\nexport type ReferralProgramEditionSummariesData = {\n editions: ReferralProgramEditionSummary[];\n};\n\n/**\n * A successful response containing edition summaries.\n */\nexport type ReferralProgramEditionSummariesResponseOk = {\n responseCode: typeof ReferralProgramEditionSummariesResponseCodes.Ok;\n data: ReferralProgramEditionSummariesData;\n};\n\n/**\n * An edition summaries response when an error occurs.\n */\nexport type ReferralProgramEditionSummariesResponseError = {\n responseCode: typeof ReferralProgramEditionSummariesResponseCodes.Error;\n error: string;\n errorMessage: string;\n};\n\n/**\n * A referral program edition summaries API response.\n *\n * Use the `responseCode` field to determine the specific type interpretation\n * at runtime.\n */\nexport type ReferralProgramEditionSummariesResponse =\n | ReferralProgramEditionSummariesResponseOk\n | ReferralProgramEditionSummariesResponseError;\n","import { serializePriceEth, serializePriceUsdc } from \"@ensnode/ensnode-sdk\";\n\nimport { ReferrerEditionMetricsTypeIds } from \"../../shared/edition-metrics\";\nimport type { AggregatedReferrerMetricsPieSplit } from \"../aggregations\";\nimport type {\n ReferrerEditionMetricsPieSplit,\n ReferrerEditionMetricsRankedPieSplit,\n ReferrerEditionMetricsUnrankedPieSplit,\n} from \"../edition-metrics\";\nimport type { ReferralProgramEditionSummaryPieSplit } from \"../edition-summary\";\nimport type { ReferrerLeaderboardPagePieSplit } from \"../leaderboard-page\";\nimport type { AwardedReferrerMetricsPieSplit, UnrankedReferrerMetricsPieSplit } from \"../metrics\";\nimport type { ReferralProgramRulesPieSplit } from \"../rules\";\nimport type {\n SerializedAggregatedReferrerMetricsPieSplit,\n SerializedAwardedReferrerMetricsPieSplit,\n SerializedReferralProgramEditionSummaryPieSplit,\n SerializedReferralProgramRulesPieSplit,\n SerializedReferrerEditionMetricsPieSplit,\n SerializedReferrerEditionMetricsRankedPieSplit,\n SerializedReferrerEditionMetricsUnrankedPieSplit,\n SerializedReferrerLeaderboardPagePieSplit,\n SerializedUnrankedReferrerMetricsPieSplit,\n} from \"./serialized-types\";\n\n/**\n * Serializes a {@link ReferralProgramRulesPieSplit} object.\n */\nexport function serializeReferralProgramRulesPieSplit(\n rules: ReferralProgramRulesPieSplit,\n): SerializedReferralProgramRulesPieSplit {\n return {\n awardModel: rules.awardModel,\n totalAwardPoolValue: serializePriceUsdc(rules.totalAwardPoolValue),\n maxQualifiedReferrers: rules.maxQualifiedReferrers,\n startTime: rules.startTime,\n endTime: rules.endTime,\n subregistryId: rules.subregistryId,\n rulesUrl: rules.rulesUrl.toString(),\n areAwardsDistributed: rules.areAwardsDistributed,\n };\n}\n\n/**\n * Serializes a {@link AggregatedReferrerMetricsPieSplit} object.\n */\nexport function serializeAggregatedReferrerMetricsPieSplit(\n metrics: AggregatedReferrerMetricsPieSplit,\n): SerializedAggregatedReferrerMetricsPieSplit {\n return {\n grandTotalReferrals: metrics.grandTotalReferrals,\n grandTotalIncrementalDuration: metrics.grandTotalIncrementalDuration,\n grandTotalRevenueContribution: serializePriceEth(metrics.grandTotalRevenueContribution),\n grandTotalQualifiedReferrersFinalScore: metrics.grandTotalQualifiedReferrersFinalScore,\n minFinalScoreToQualify: metrics.minFinalScoreToQualify,\n };\n}\n\n/**\n * Serializes a {@link AwardedReferrerMetricsPieSplit} object.\n */\nexport function serializeAwardedReferrerMetricsPieSplit(\n metrics: AwardedReferrerMetricsPieSplit,\n): SerializedAwardedReferrerMetricsPieSplit {\n return {\n referrer: metrics.referrer,\n totalReferrals: metrics.totalReferrals,\n totalIncrementalDuration: metrics.totalIncrementalDuration,\n totalRevenueContribution: serializePriceEth(metrics.totalRevenueContribution),\n score: metrics.score,\n rank: metrics.rank,\n isQualified: metrics.isQualified,\n finalScoreBoost: metrics.finalScoreBoost,\n finalScore: metrics.finalScore,\n awardPoolShare: metrics.awardPoolShare,\n awardPoolApproxValue: serializePriceUsdc(metrics.awardPoolApproxValue),\n };\n}\n\n/**\n * Serializes a {@link UnrankedReferrerMetricsPieSplit} object.\n */\nexport function serializeUnrankedReferrerMetricsPieSplit(\n metrics: UnrankedReferrerMetricsPieSplit,\n): SerializedUnrankedReferrerMetricsPieSplit {\n return {\n referrer: metrics.referrer,\n totalReferrals: metrics.totalReferrals,\n totalIncrementalDuration: metrics.totalIncrementalDuration,\n totalRevenueContribution: serializePriceEth(metrics.totalRevenueContribution),\n score: metrics.score,\n rank: metrics.rank,\n isQualified: metrics.isQualified,\n finalScoreBoost: metrics.finalScoreBoost,\n finalScore: metrics.finalScore,\n awardPoolShare: metrics.awardPoolShare,\n awardPoolApproxValue: serializePriceUsdc(metrics.awardPoolApproxValue),\n };\n}\n\n/**\n * Serializes a {@link ReferrerEditionMetricsRankedPieSplit} object.\n */\nexport function serializeReferrerEditionMetricsRankedPieSplit(\n detail: ReferrerEditionMetricsRankedPieSplit,\n): SerializedReferrerEditionMetricsRankedPieSplit {\n return {\n awardModel: detail.awardModel,\n type: detail.type,\n rules: serializeReferralProgramRulesPieSplit(detail.rules),\n referrer: serializeAwardedReferrerMetricsPieSplit(detail.referrer),\n aggregatedMetrics: serializeAggregatedReferrerMetricsPieSplit(detail.aggregatedMetrics),\n status: detail.status,\n accurateAsOf: detail.accurateAsOf,\n };\n}\n\n/**\n * Serializes a {@link ReferrerEditionMetricsUnrankedPieSplit} object.\n */\nexport function serializeReferrerEditionMetricsUnrankedPieSplit(\n detail: ReferrerEditionMetricsUnrankedPieSplit,\n): SerializedReferrerEditionMetricsUnrankedPieSplit {\n return {\n awardModel: detail.awardModel,\n type: detail.type,\n rules: serializeReferralProgramRulesPieSplit(detail.rules),\n referrer: serializeUnrankedReferrerMetricsPieSplit(detail.referrer),\n aggregatedMetrics: serializeAggregatedReferrerMetricsPieSplit(detail.aggregatedMetrics),\n status: detail.status,\n accurateAsOf: detail.accurateAsOf,\n };\n}\n\n/**\n * Serializes a {@link ReferrerEditionMetricsPieSplit} object (ranked or unranked).\n */\nexport function serializeReferrerEditionMetricsPieSplit(\n detail: ReferrerEditionMetricsPieSplit,\n): SerializedReferrerEditionMetricsPieSplit {\n switch (detail.type) {\n case ReferrerEditionMetricsTypeIds.Ranked:\n return serializeReferrerEditionMetricsRankedPieSplit(detail);\n case ReferrerEditionMetricsTypeIds.Unranked:\n return serializeReferrerEditionMetricsUnrankedPieSplit(detail);\n default: {\n const _exhaustiveCheck: never = detail;\n throw new Error(`Unknown type: ${(_exhaustiveCheck as ReferrerEditionMetricsPieSplit).type}`);\n }\n }\n}\n\n/**\n * Serializes a {@link ReferrerLeaderboardPagePieSplit} object.\n */\nexport function serializeReferrerLeaderboardPagePieSplit(\n page: ReferrerLeaderboardPagePieSplit,\n): SerializedReferrerLeaderboardPagePieSplit {\n return {\n awardModel: page.awardModel,\n rules: serializeReferralProgramRulesPieSplit(page.rules),\n referrers: page.referrers.map(serializeAwardedReferrerMetricsPieSplit),\n aggregatedMetrics: serializeAggregatedReferrerMetricsPieSplit(page.aggregatedMetrics),\n pageContext: page.pageContext,\n status: page.status,\n accurateAsOf: page.accurateAsOf,\n };\n}\n\n/**\n * Serializes a {@link ReferralProgramEditionSummaryPieSplit} object.\n */\nexport function serializeReferralProgramEditionSummaryPieSplit(\n summary: ReferralProgramEditionSummaryPieSplit,\n): SerializedReferralProgramEditionSummaryPieSplit {\n return {\n awardModel: summary.awardModel,\n slug: summary.slug,\n displayName: summary.displayName,\n status: summary.status,\n rules: serializeReferralProgramRulesPieSplit(summary.rules),\n };\n}\n","import { serializePriceEth, serializePriceUsdc } from \"@ensnode/ensnode-sdk\";\n\nimport { ReferrerEditionMetricsTypeIds } from \"../../shared/edition-metrics\";\nimport type { AggregatedReferrerMetricsRevShareLimit } from \"../aggregations\";\nimport type {\n ReferrerEditionMetricsRankedRevShareLimit,\n ReferrerEditionMetricsRevShareLimit,\n ReferrerEditionMetricsUnrankedRevShareLimit,\n} from \"../edition-metrics\";\nimport type { ReferralProgramEditionSummaryRevShareLimit } from \"../edition-summary\";\nimport type { ReferrerLeaderboardPageRevShareLimit } from \"../leaderboard-page\";\nimport type {\n AwardedReferrerMetricsRevShareLimit,\n UnrankedReferrerMetricsRevShareLimit,\n} from \"../metrics\";\nimport type { ReferralProgramRulesRevShareLimit } from \"../rules\";\nimport type {\n SerializedAggregatedReferrerMetricsRevShareLimit,\n SerializedAwardedReferrerMetricsRevShareLimit,\n SerializedReferralProgramEditionSummaryRevShareLimit,\n SerializedReferralProgramRulesRevShareLimit,\n SerializedReferrerEditionMetricsRankedRevShareLimit,\n SerializedReferrerEditionMetricsRevShareLimit,\n SerializedReferrerEditionMetricsUnrankedRevShareLimit,\n SerializedReferrerLeaderboardPageRevShareLimit,\n SerializedUnrankedReferrerMetricsRevShareLimit,\n} from \"./serialized-types\";\n\n/**\n * Serializes a {@link ReferralProgramRulesRevShareLimit} object.\n */\nexport function serializeReferralProgramRulesRevShareLimit(\n rules: ReferralProgramRulesRevShareLimit,\n): SerializedReferralProgramRulesRevShareLimit {\n return {\n awardModel: rules.awardModel,\n totalAwardPoolValue: serializePriceUsdc(rules.totalAwardPoolValue),\n minQualifiedRevenueContribution: serializePriceUsdc(rules.minQualifiedRevenueContribution),\n qualifiedRevenueShare: rules.qualifiedRevenueShare,\n startTime: rules.startTime,\n endTime: rules.endTime,\n subregistryId: rules.subregistryId,\n rulesUrl: rules.rulesUrl.toString(),\n areAwardsDistributed: rules.areAwardsDistributed,\n disqualifications: rules.disqualifications,\n };\n}\n\n/**\n * Serializes a {@link AggregatedReferrerMetricsRevShareLimit} object.\n */\nexport function serializeAggregatedReferrerMetricsRevShareLimit(\n metrics: AggregatedReferrerMetricsRevShareLimit,\n): SerializedAggregatedReferrerMetricsRevShareLimit {\n return {\n grandTotalReferrals: metrics.grandTotalReferrals,\n grandTotalIncrementalDuration: metrics.grandTotalIncrementalDuration,\n grandTotalRevenueContribution: serializePriceEth(metrics.grandTotalRevenueContribution),\n awardPoolRemaining: serializePriceUsdc(metrics.awardPoolRemaining),\n };\n}\n\n/**\n * Serializes a {@link AwardedReferrerMetricsRevShareLimit} object.\n */\nexport function serializeAwardedReferrerMetricsRevShareLimit(\n metrics: AwardedReferrerMetricsRevShareLimit,\n): SerializedAwardedReferrerMetricsRevShareLimit {\n return {\n referrer: metrics.referrer,\n totalReferrals: metrics.totalReferrals,\n totalIncrementalDuration: metrics.totalIncrementalDuration,\n totalRevenueContribution: serializePriceEth(metrics.totalRevenueContribution),\n totalBaseRevenueContribution: serializePriceUsdc(metrics.totalBaseRevenueContribution),\n rank: metrics.rank,\n isQualified: metrics.isQualified,\n standardAwardValue: serializePriceUsdc(metrics.standardAwardValue),\n awardPoolApproxValue: serializePriceUsdc(metrics.awardPoolApproxValue),\n isAdminDisqualified: metrics.isAdminDisqualified,\n adminDisqualificationReason: metrics.adminDisqualificationReason,\n };\n}\n\n/**\n * Serializes a {@link UnrankedReferrerMetricsRevShareLimit} object.\n */\nexport function serializeUnrankedReferrerMetricsRevShareLimit(\n metrics: UnrankedReferrerMetricsRevShareLimit,\n): SerializedUnrankedReferrerMetricsRevShareLimit {\n return {\n referrer: metrics.referrer,\n totalReferrals: metrics.totalReferrals,\n totalIncrementalDuration: metrics.totalIncrementalDuration,\n totalRevenueContribution: serializePriceEth(metrics.totalRevenueContribution),\n totalBaseRevenueContribution: serializePriceUsdc(metrics.totalBaseRevenueContribution),\n rank: metrics.rank,\n isQualified: metrics.isQualified,\n standardAwardValue: serializePriceUsdc(metrics.standardAwardValue),\n awardPoolApproxValue: serializePriceUsdc(metrics.awardPoolApproxValue),\n isAdminDisqualified: metrics.isAdminDisqualified,\n adminDisqualificationReason: metrics.adminDisqualificationReason,\n };\n}\n\n/**\n * Serializes a {@link ReferrerEditionMetricsRankedRevShareLimit} object.\n */\nexport function serializeReferrerEditionMetricsRankedRevShareLimit(\n detail: ReferrerEditionMetricsRankedRevShareLimit,\n): SerializedReferrerEditionMetricsRankedRevShareLimit {\n return {\n awardModel: detail.awardModel,\n type: detail.type,\n rules: serializeReferralProgramRulesRevShareLimit(detail.rules),\n referrer: serializeAwardedReferrerMetricsRevShareLimit(detail.referrer),\n aggregatedMetrics: serializeAggregatedReferrerMetricsRevShareLimit(detail.aggregatedMetrics),\n status: detail.status,\n accurateAsOf: detail.accurateAsOf,\n };\n}\n\n/**\n * Serializes a {@link ReferrerEditionMetricsUnrankedRevShareLimit} object.\n */\nexport function serializeReferrerEditionMetricsUnrankedRevShareLimit(\n detail: ReferrerEditionMetricsUnrankedRevShareLimit,\n): SerializedReferrerEditionMetricsUnrankedRevShareLimit {\n return {\n awardModel: detail.awardModel,\n type: detail.type,\n rules: serializeReferralProgramRulesRevShareLimit(detail.rules),\n referrer: serializeUnrankedReferrerMetricsRevShareLimit(detail.referrer),\n aggregatedMetrics: serializeAggregatedReferrerMetricsRevShareLimit(detail.aggregatedMetrics),\n status: detail.status,\n accurateAsOf: detail.accurateAsOf,\n };\n}\n\n/**\n * Serializes a {@link ReferrerEditionMetricsRevShareLimit} object (ranked or unranked).\n */\nexport function serializeReferrerEditionMetricsRevShareLimit(\n detail: ReferrerEditionMetricsRevShareLimit,\n): SerializedReferrerEditionMetricsRevShareLimit {\n switch (detail.type) {\n case ReferrerEditionMetricsTypeIds.Ranked:\n return serializeReferrerEditionMetricsRankedRevShareLimit(detail);\n case ReferrerEditionMetricsTypeIds.Unranked:\n return serializeReferrerEditionMetricsUnrankedRevShareLimit(detail);\n default: {\n const _exhaustiveCheck: never = detail;\n throw new Error(\n `Unknown type: ${(_exhaustiveCheck as ReferrerEditionMetricsRevShareLimit).type}`,\n );\n }\n }\n}\n\n/**\n * Serializes a {@link ReferrerLeaderboardPageRevShareLimit} object.\n */\nexport function serializeReferrerLeaderboardPageRevShareLimit(\n page: ReferrerLeaderboardPageRevShareLimit,\n): SerializedReferrerLeaderboardPageRevShareLimit {\n return {\n awardModel: page.awardModel,\n rules: serializeReferralProgramRulesRevShareLimit(page.rules),\n referrers: page.referrers.map(serializeAwardedReferrerMetricsRevShareLimit),\n aggregatedMetrics: serializeAggregatedReferrerMetricsRevShareLimit(page.aggregatedMetrics),\n pageContext: page.pageContext,\n status: page.status,\n accurateAsOf: page.accurateAsOf,\n };\n}\n\n/**\n * Serializes a {@link ReferralProgramEditionSummaryRevShareLimit} object.\n */\nexport function serializeReferralProgramEditionSummaryRevShareLimit(\n summary: ReferralProgramEditionSummaryRevShareLimit,\n): SerializedReferralProgramEditionSummaryRevShareLimit {\n return {\n awardModel: summary.awardModel,\n slug: summary.slug,\n displayName: summary.displayName,\n status: summary.status,\n rules: serializeReferralProgramRulesRevShareLimit(summary.rules),\n awardPoolRemaining: serializePriceUsdc(summary.awardPoolRemaining),\n };\n}\n","import {\n serializeReferralProgramEditionSummaryPieSplit,\n serializeReferralProgramRulesPieSplit,\n serializeReferrerEditionMetricsPieSplit,\n serializeReferrerLeaderboardPagePieSplit,\n} from \"../award-models/pie-split/api/serialize\";\nimport {\n serializeReferralProgramEditionSummaryRevShareLimit,\n serializeReferralProgramRulesRevShareLimit,\n serializeReferrerEditionMetricsRevShareLimit,\n serializeReferrerLeaderboardPageRevShareLimit,\n} from \"../award-models/rev-share-limit/api/serialize\";\nimport type { ReferrerEditionMetricsUnrecognized } from \"../award-models/shared/edition-metrics\";\nimport type { ReferralProgramEditionSummaryUnrecognized } from \"../award-models/shared/edition-summary\";\nimport type { ReferrerLeaderboardPageUnrecognized } from \"../award-models/shared/leaderboard-page\";\nimport type { ReferralProgramRulesUnrecognized } from \"../award-models/shared/rules\";\nimport { ReferralProgramAwardModels } from \"../award-models/shared/rules\";\nimport type { ReferrerEditionMetrics } from \"../edition-metrics\";\nimport type { ReferralProgramEditionSummary } from \"../edition-summary\";\nimport type { ReferrerLeaderboardPage } from \"../leaderboard-page\";\nimport type { ReferralProgramRules } from \"../rules\";\nimport type {\n SerializedReferralProgramEditionSummariesResponse,\n SerializedReferralProgramEditionSummary,\n SerializedReferralProgramRules,\n SerializedReferrerEditionMetrics,\n SerializedReferrerLeaderboardPage,\n SerializedReferrerLeaderboardPageResponse,\n SerializedReferrerMetricsEditionsData,\n SerializedReferrerMetricsEditionsResponse,\n} from \"./serialized-types\";\nimport {\n type ReferralProgramEditionSummariesResponse,\n ReferralProgramEditionSummariesResponseCodes,\n type ReferrerLeaderboardPageResponse,\n ReferrerLeaderboardPageResponseCodes,\n type ReferrerMetricsEditionsResponse,\n ReferrerMetricsEditionsResponseCodes,\n} from \"./types\";\n\n/**\n * Serializes a {@link ReferralProgramRules} object.\n *\n * @throws if called with a {@link ReferralProgramRulesUnrecognized} — unrecognized editions are\n * client-side forward-compatibility placeholders and must never be serialized.\n */\nexport function serializeReferralProgramRules(\n rules: ReferralProgramRules,\n): SerializedReferralProgramRules {\n switch (rules.awardModel) {\n case ReferralProgramAwardModels.PieSplit:\n return serializeReferralProgramRulesPieSplit(rules);\n\n case ReferralProgramAwardModels.RevShareLimit:\n return serializeReferralProgramRulesRevShareLimit(rules);\n\n case ReferralProgramAwardModels.Unrecognized: {\n const unrecognized = rules as ReferralProgramRulesUnrecognized;\n throw new Error(\n `ReferralProgramRulesUnrecognized (originalAwardModel: '${unrecognized.originalAwardModel}') must not be serialized — it is a client-side forward-compatibility placeholder only.`,\n );\n }\n\n default: {\n const _exhaustiveCheck: never = rules;\n throw new Error(\n `Unknown award model: ${(_exhaustiveCheck as ReferralProgramRules).awardModel}`,\n );\n }\n }\n}\n\n/**\n * Serializes a {@link ReferrerLeaderboardPage} object.\n *\n * @throws if called with a {@link ReferrerLeaderboardPageUnrecognized} — unrecognized pages are\n * client-side forward-compatibility placeholders and must never be serialized.\n */\nfunction serializeReferrerLeaderboardPage(\n page: ReferrerLeaderboardPage,\n): SerializedReferrerLeaderboardPage {\n switch (page.awardModel) {\n case ReferralProgramAwardModels.PieSplit:\n return serializeReferrerLeaderboardPagePieSplit(page);\n case ReferralProgramAwardModels.RevShareLimit:\n return serializeReferrerLeaderboardPageRevShareLimit(page);\n case ReferralProgramAwardModels.Unrecognized: {\n const unrecognized = page as ReferrerLeaderboardPageUnrecognized;\n throw new Error(\n `ReferrerLeaderboardPageUnrecognized (originalAwardModel: '${unrecognized.originalAwardModel}') must not be serialized — it is a client-side forward-compatibility placeholder only.`,\n );\n }\n default: {\n const _exhaustiveCheck: never = page;\n throw new Error(\n `Unknown award model: ${(_exhaustiveCheck as ReferrerLeaderboardPage).awardModel}`,\n );\n }\n }\n}\n\n/**\n * Serializes a {@link ReferrerEditionMetrics} object.\n *\n * @throws if called with a {@link ReferrerEditionMetricsUnrecognized} — unrecognized metrics are\n * client-side forward-compatibility placeholders and must never be serialized.\n */\nfunction serializeReferrerEditionMetrics(\n detail: ReferrerEditionMetrics,\n): SerializedReferrerEditionMetrics {\n switch (detail.awardModel) {\n case ReferralProgramAwardModels.PieSplit:\n return serializeReferrerEditionMetricsPieSplit(detail);\n case ReferralProgramAwardModels.RevShareLimit:\n return serializeReferrerEditionMetricsRevShareLimit(detail);\n case ReferralProgramAwardModels.Unrecognized: {\n const unrecognized = detail as ReferrerEditionMetricsUnrecognized;\n throw new Error(\n `ReferrerEditionMetricsUnrecognized (originalAwardModel: '${unrecognized.originalAwardModel}') must not be serialized — it is a client-side forward-compatibility placeholder only.`,\n );\n }\n default: {\n const _exhaustiveCheck: never = detail;\n throw new Error(\n `Unknown award model: ${(_exhaustiveCheck as ReferrerEditionMetrics).awardModel}`,\n );\n }\n }\n}\n\n/**\n * Serializes a {@link ReferralProgramEditionSummary} object.\n *\n * @throws if called with a {@link ReferralProgramEditionSummaryUnrecognized} — unrecognized\n * summaries are client-side forward-compatibility placeholders and must never be serialized.\n */\nexport function serializeReferralProgramEditionSummary(\n summary: ReferralProgramEditionSummary,\n): SerializedReferralProgramEditionSummary {\n switch (summary.awardModel) {\n case ReferralProgramAwardModels.PieSplit:\n return serializeReferralProgramEditionSummaryPieSplit(summary);\n\n case ReferralProgramAwardModels.RevShareLimit:\n return serializeReferralProgramEditionSummaryRevShareLimit(summary);\n\n case ReferralProgramAwardModels.Unrecognized: {\n const unrecognized = summary as ReferralProgramEditionSummaryUnrecognized;\n throw new Error(\n `ReferralProgramEditionSummaryUnrecognized (originalAwardModel: '${unrecognized.rules.originalAwardModel}') must not be serialized — it is a client-side forward-compatibility placeholder only.`,\n );\n }\n\n default: {\n const _exhaustiveCheck: never = summary;\n throw new Error(\n `Unknown award model: ${(_exhaustiveCheck as ReferralProgramEditionSummary).awardModel}`,\n );\n }\n }\n}\n\n/**\n * Serialize a {@link ReferrerLeaderboardPageResponse} object.\n */\nexport function serializeReferrerLeaderboardPageResponse(\n response: ReferrerLeaderboardPageResponse,\n): SerializedReferrerLeaderboardPageResponse {\n switch (response.responseCode) {\n case ReferrerLeaderboardPageResponseCodes.Ok:\n return {\n responseCode: response.responseCode,\n data: serializeReferrerLeaderboardPage(response.data),\n };\n\n case ReferrerLeaderboardPageResponseCodes.Error:\n return response;\n }\n}\n\n/**\n * Serialize a {@link ReferrerMetricsEditionsResponse} object.\n */\nexport function serializeReferrerMetricsEditionsResponse(\n response: ReferrerMetricsEditionsResponse,\n): SerializedReferrerMetricsEditionsResponse {\n switch (response.responseCode) {\n case ReferrerMetricsEditionsResponseCodes.Ok: {\n const serializedData = Object.fromEntries(\n Object.entries(response.data).map(([editionSlug, detail]) => [\n editionSlug,\n serializeReferrerEditionMetrics(detail as ReferrerEditionMetrics),\n ]),\n ) as SerializedReferrerMetricsEditionsData;\n\n return {\n responseCode: response.responseCode,\n data: serializedData,\n };\n }\n\n case ReferrerMetricsEditionsResponseCodes.Error:\n return response;\n\n default: {\n const _exhaustiveCheck: never = response;\n throw new Error(\n `Unknown response code: ${(_exhaustiveCheck as ReferrerMetricsEditionsResponse).responseCode}`,\n );\n }\n }\n}\n\n/**\n * Serialize a {@link ReferralProgramEditionSummariesResponse} object.\n */\nexport function serializeReferralProgramEditionSummariesResponse(\n response: ReferralProgramEditionSummariesResponse,\n): SerializedReferralProgramEditionSummariesResponse {\n switch (response.responseCode) {\n case ReferralProgramEditionSummariesResponseCodes.Ok:\n return {\n responseCode: response.responseCode,\n data: {\n editions: response.data.editions.map(serializeReferralProgramEditionSummary),\n },\n };\n\n case ReferralProgramEditionSummariesResponseCodes.Error:\n return response;\n\n default: {\n const _exhaustiveCheck: never = response;\n throw new Error(\n `Unknown response code: ${(_exhaustiveCheck as ReferralProgramEditionSummariesResponse).responseCode}`,\n );\n }\n }\n}\n","/**\n * The score of a referrer.\n *\n * @invariant Guaranteed to be a finite non-negative number (>= 0)\n */\nexport type ReferrerScore = number;\n\nexport const isValidReferrerScore = (score: ReferrerScore): boolean => {\n return score >= 0 && Number.isFinite(score);\n};\n\nexport const validateReferrerScore = (score: ReferrerScore): void => {\n if (!isValidReferrerScore(score)) {\n throw new Error(\n `Invalid referrer score: ${score}. Referrer score must be a finite non-negative number.`,\n );\n }\n};\n","import { type Duration, type PriceEth, priceEth } from \"@ensnode/ensnode-sdk\";\nimport { makePriceEthSchema } from \"@ensnode/ensnode-sdk/internal\";\n\nimport { validateNonNegativeInteger } from \"../../number\";\nimport { validateDuration } from \"../../time\";\nimport { type ReferrerScore, validateReferrerScore } from \"../shared/score\";\nimport type { RankedReferrerMetricsPieSplit } from \"./metrics\";\nimport type { ReferralProgramRulesPieSplit } from \"./rules\";\n\n/**\n * Represents aggregated metrics for a list of {@link RankedReferrerMetricsPieSplit}.\n */\nexport interface AggregatedReferrerMetricsPieSplit {\n /**\n * @invariant The sum of `totalReferrals` across all {@link RankedReferrerMetricsPieSplit} in the list.\n * @invariant Guaranteed to be a non-negative integer (>= 0)\n */\n grandTotalReferrals: number;\n\n /**\n * @invariant The sum of `totalIncrementalDuration` across all {@link RankedReferrerMetricsPieSplit} in the list.\n */\n grandTotalIncrementalDuration: Duration;\n\n /**\n * The total revenue contribution in ETH to the ENS DAO from all referrals\n * across all referrers on the leaderboard.\n *\n * This is the sum of `totalRevenueContribution` across all {@link RankedReferrerMetricsPieSplit} in the list.\n *\n * @invariant Guaranteed to be a valid PriceEth with non-negative amount (>= 0n)\n */\n grandTotalRevenueContribution: PriceEth;\n\n /**\n * @invariant The sum of `finalScore` across all {@link RankedReferrerMetricsPieSplit} where `isQualified` is `true`.\n */\n grandTotalQualifiedReferrersFinalScore: ReferrerScore;\n\n /**\n * @invariant Identifies the minimum final score required to become a qualified referrer.\n * @invariant If `rules.maxQualifiedReferrers` is 0, then `minFinalScoreToQualify` is guaranteed to\n * be `Number.MAX_SAFE_INTEGER`.\n * @invariant If `rules.maxQualifiedReferrers` is greater than 0, and there are no current referrers\n * matching the `rules`, then `minFinalScoreToQualify` is guaranteed to be `0`.\n */\n minFinalScoreToQualify: ReferrerScore;\n}\n\nexport const validateAggregatedReferrerMetricsPieSplit = (\n metrics: AggregatedReferrerMetricsPieSplit,\n): void => {\n validateNonNegativeInteger(metrics.grandTotalReferrals);\n validateDuration(metrics.grandTotalIncrementalDuration);\n\n makePriceEthSchema(\"AggregatedReferrerMetricsPieSplit.grandTotalRevenueContribution\").parse(\n metrics.grandTotalRevenueContribution,\n );\n\n validateReferrerScore(metrics.grandTotalQualifiedReferrersFinalScore);\n validateReferrerScore(metrics.minFinalScoreToQualify);\n};\n\n/**\n * Builds aggregated pie-split metrics from a complete, globally ranked list of referrers.\n *\n * **IMPORTANT: This function expects a complete ranking of all referrers.**\n *\n * @param referrers - Must be a complete, globally ranked list of {@link RankedReferrerMetricsPieSplit}\n * where ranks start at 1 and are consecutive.\n * **This must NOT be a paginated or partial slice of the rankings.**\n *\n * @param rules - The {@link ReferralProgramRulesPieSplit} object that define qualification criteria,\n * including `maxQualifiedReferrers` (the maximum number of referrers\n * that can qualify for rewards).\n *\n * @returns Aggregated metrics including totals across all referrers and the minimum\n * score required to qualify.\n *\n * @remarks\n * - If you need to work with paginated data, aggregate the full ranking first before\n * calling this function, or call this function on the complete dataset and then paginate\n * the results.\n * - If `rules.maxQualifiedReferrers === 0`, no referrers can qualify and\n * `minFinalScoreToQualify` will be set to `Number.MAX_SAFE_INTEGER`.\n * - If `referrers` is empty and `rules.maxQualifiedReferrers > 0`,\n * `minFinalScoreToQualify` will be set to `0` (anyone can qualify).\n */\nexport const buildAggregatedReferrerMetricsPieSplit = (\n referrers: RankedReferrerMetricsPieSplit[],\n rules: ReferralProgramRulesPieSplit,\n): AggregatedReferrerMetricsPieSplit => {\n let grandTotalReferrals = 0;\n let grandTotalIncrementalDuration = 0;\n let grandTotalRevenueContributionAmount = 0n;\n let grandTotalQualifiedReferrersFinalScore = 0;\n let minFinalScoreToQualify = Number.MAX_SAFE_INTEGER;\n\n for (const referrer of referrers) {\n grandTotalReferrals += referrer.totalReferrals;\n grandTotalIncrementalDuration += referrer.totalIncrementalDuration;\n grandTotalRevenueContributionAmount += referrer.totalRevenueContribution.amount;\n if (referrer.isQualified) {\n grandTotalQualifiedReferrersFinalScore += referrer.finalScore;\n if (referrer.finalScore < minFinalScoreToQualify) {\n minFinalScoreToQualify = referrer.finalScore;\n }\n }\n }\n\n if (minFinalScoreToQualify === Number.MAX_SAFE_INTEGER) {\n if (rules.maxQualifiedReferrers === 0) {\n // ... because it's impossible to qualify based on the rules\n // therefore keep minFinalScoreToQualify as Number.MAX_SAFE_INTEGER\n } else {\n // ... because there are no referrers at all on the leaderboard\n if (referrers.length !== 0) {\n // invariant sanity check\n throw new Error(\n \"AggregatedReferrerMetricsPieSplit: There are referrers on the leaderboard, and the rules allow for qualified referrers, but no qualified referrers.\",\n );\n }\n\n minFinalScoreToQualify = 0;\n }\n }\n\n const result = {\n grandTotalReferrals,\n grandTotalIncrementalDuration,\n grandTotalRevenueContribution: priceEth(grandTotalRevenueContributionAmount),\n grandTotalQualifiedReferrersFinalScore,\n minFinalScoreToQualify,\n } satisfies AggregatedReferrerMetricsPieSplit;\n\n validateAggregatedReferrerMetricsPieSplit(result);\n\n return result;\n};\n","import type { ReferralProgramRules } from \"./rules\";\n\n/**\n * Referral program edition slug.\n *\n * A URL-safe identifier for a referral program edition. Each edition represents\n * a distinct referral program period with its own rules, leaderboard, and\n * award distribution.\n *\n * @invariant Must contain only lowercase letters (a-z), digits (0-9), and hyphens (-).\n * Must not start or end with a hyphen. Pattern: `^[a-z0-9]+(-[a-z0-9]+)*$`\n *\n * @example \"2025-12\" // December 2025 edition\n * @example \"2026-03\" // March 2026 edition\n * @example \"holiday-special\" // Custom named edition\n */\nexport type ReferralProgramEditionSlug = string;\n\n/**\n * Regex pattern that all {@link ReferralProgramEditionSlug} values must match.\n *\n * Allows lowercase letters (a-z), digits (0-9), and hyphens (-).\n * Must not start or end with a hyphen.\n */\nexport const REFERRAL_PROGRAM_EDITION_SLUG_PATTERN = /^[a-z0-9]+(-[a-z0-9]+)*$/;\n\n/**\n * Represents a referral program edition configuration.\n */\nexport interface ReferralProgramEditionConfig {\n /**\n * Unique slug identifier for the edition.\n */\n slug: ReferralProgramEditionSlug;\n\n /**\n * Human-readable display name for the edition.\n * @example \"ENS Holiday Awards\"\n */\n displayName: string;\n\n /**\n * The rules that govern this referral program edition.\n */\n rules: ReferralProgramRules;\n}\n\n/**\n * A map from edition slug to edition configuration.\n *\n * Used to store and look up all configured referral program editions.\n *\n * @invariant For each key-value pair in the map, the key must equal the value's slug property.\n * That is, for all entries: `map.get(key)?.slug === key`\n */\nexport type ReferralProgramEditionConfigSet = Map<\n ReferralProgramEditionSlug,\n ReferralProgramEditionConfig\n>;\n\n/**\n * Validates that a ReferralProgramEditionConfigSet maintains the invariant\n * that each map key equals the corresponding config's slug.\n *\n * @param configSet - The edition config set to validate\n * @throws {Error} If any entry violates the invariant (key !== value.slug)\n */\nexport function validateReferralProgramEditionConfigSet(\n configSet: ReferralProgramEditionConfigSet,\n): void {\n const violation = Array.from(configSet.entries()).find(([key, config]) => key !== config.slug);\n\n if (violation) {\n const [key, config] = violation;\n throw new Error(\n `Edition config set invariant violation: map key \"${key}\" does not match config.slug \"${config.slug}\"`,\n );\n }\n}\n\n/**\n * Builds a new ReferralProgramEditionConfigSet from an array of configs and validates the invariant.\n *\n * @param configs - Array of edition configurations to add to the set\n * @returns A validated edition config set\n * @throws {Error} If duplicate slugs are detected or if any config would violate the invariant\n */\nexport function buildReferralProgramEditionConfigSet(\n configs: ReferralProgramEditionConfig[],\n): ReferralProgramEditionConfigSet {\n // Check for duplicate slugs before creating the Map\n const slugCounts = configs.reduce((counts, config) => {\n counts.set(config.slug, (counts.get(config.slug) || 0) + 1);\n return counts;\n }, new Map<ReferralProgramEditionSlug, number>());\n\n const duplicates = Array.from(slugCounts.entries())\n .filter(([_, count]) => count > 1)\n .map(([slug, count]) => `\"${slug}\" (${count} occurrences)`);\n\n if (duplicates.length > 0) {\n throw new Error(`Duplicate edition config slugs detected: ${duplicates.join(\", \")}`);\n }\n\n const configSet = new Map(configs.map((config) => [config.slug, config]));\n validateReferralProgramEditionConfigSet(configSet);\n return configSet;\n}\n","import {\n REFERRAL_PROGRAM_EDITION_SLUG_PATTERN,\n type ReferralProgramEditionSlug,\n} from \"../../edition\";\nimport type {\n BaseReferralProgramRules,\n ReferralProgramAwardModel,\n ReferralProgramAwardModels,\n ReferralProgramRulesUnrecognized,\n} from \"./rules\";\nimport type { ReferralProgramEditionStatusId } from \"./status\";\n\n/**\n * Base fields shared by all edition summary variants.\n */\nexport interface BaseReferralProgramEditionSummary {\n /**\n * Discriminant: identifies the award model for this edition.\n *\n * @invariant Always equals `rules.awardModel`.\n */\n awardModel: ReferralProgramAwardModel;\n\n /**\n * Unique slug identifier for the edition.\n */\n slug: ReferralProgramEditionSlug;\n\n /**\n * Human-readable display name for the edition.\n */\n displayName: string;\n\n /**\n * The current runtime status of the edition.\n */\n status: ReferralProgramEditionStatusId;\n\n /**\n * The rules for this edition. Per-model subtypes narrow this to their specific rules type.\n */\n rules: BaseReferralProgramRules;\n}\n\n/**\n * Edition summary for an edition whose `awardModel` is not recognized by this client version.\n *\n * @remarks\n * This is a **client-side forward-compatibility** type only. It is never serialized or produced\n * by the server. When the server sends a new award model, older clients preserve the edition\n * summary rather than crashing, and downstream code should handle it gracefully.\n */\nexport interface ReferralProgramEditionSummaryUnrecognized\n extends BaseReferralProgramEditionSummary {\n /**\n * Discriminant — always `\"unrecognized\"`.\n */\n awardModel: typeof ReferralProgramAwardModels.Unrecognized;\n\n /**\n * The unrecognized rules — preserves `originalAwardModel` for logging/debugging.\n */\n rules: ReferralProgramRulesUnrecognized;\n}\n\nexport const validateBaseReferralProgramEditionSummary = (\n summary: BaseReferralProgramEditionSummary,\n): void => {\n if (!REFERRAL_PROGRAM_EDITION_SLUG_PATTERN.test(summary.slug)) {\n throw new Error(\n `BaseReferralProgramEditionSummary: slug \"${summary.slug}\" does not match required pattern ${REFERRAL_PROGRAM_EDITION_SLUG_PATTERN}.`,\n );\n }\n\n if (summary.displayName.length === 0) {\n throw new Error(\"BaseReferralProgramEditionSummary: displayName must not be empty.\");\n }\n\n if (summary.awardModel !== summary.rules.awardModel) {\n throw new Error(\n `BaseReferralProgramEditionSummary: awardModel (${summary.awardModel}) must equal rules.awardModel (${summary.rules.awardModel}).`,\n );\n }\n};\n","import type { AccountId, PriceUsdc, UnixTimestamp } from \"@ensnode/ensnode-sdk\";\nimport { makePriceUsdcSchema } from \"@ensnode/ensnode-sdk/internal\";\n\nimport { validateNonNegativeInteger } from \"../../number\";\nimport {\n type BaseReferralProgramRules,\n ReferralProgramAwardModels,\n validateBaseReferralProgramRules,\n} from \"../shared/rules\";\n\nexport interface ReferralProgramRulesPieSplit extends BaseReferralProgramRules {\n /**\n * Discriminant: identifies this as a \"pie-split\" award model edition.\n *\n * In pie-split, the top-N referrers split an award pool proportionally\n * based on their scored duration (with rank-based boost).\n */\n awardModel: typeof ReferralProgramAwardModels.PieSplit;\n\n /**\n * The total value of the award pool in USDC.\n *\n * NOTE: Awards will actually be distributed in $ENS tokens.\n */\n totalAwardPoolValue: PriceUsdc;\n\n /**\n * The maximum number of referrers that will qualify to receive a non-zero `awardPoolShare`.\n *\n * @invariant Guaranteed to be a non-negative integer (>= 0)\n */\n maxQualifiedReferrers: number;\n}\n\nexport const validateReferralProgramRulesPieSplit = (rules: ReferralProgramRulesPieSplit): void => {\n makePriceUsdcSchema(\"ReferralProgramRulesPieSplit.totalAwardPoolValue\").parse(\n rules.totalAwardPoolValue,\n );\n\n validateNonNegativeInteger(rules.maxQualifiedReferrers);\n\n validateBaseReferralProgramRules(rules);\n};\n\nexport const buildReferralProgramRulesPieSplit = (\n totalAwardPoolValue: PriceUsdc,\n maxQualifiedReferrers: number,\n startTime: UnixTimestamp,\n endTime: UnixTimestamp,\n subregistryId: AccountId,\n rulesUrl: URL,\n areAwardsDistributed: boolean,\n): ReferralProgramRulesPieSplit => {\n const result = {\n awardModel: ReferralProgramAwardModels.PieSplit,\n totalAwardPoolValue,\n maxQualifiedReferrers,\n startTime,\n endTime,\n subregistryId,\n rulesUrl,\n areAwardsDistributed,\n } satisfies ReferralProgramRulesPieSplit;\n\n validateReferralProgramRulesPieSplit(result);\n\n return result;\n};\n","import type { UnixTimestamp } from \"@ensnode/ensnode-sdk\";\n\nimport {\n calcBaseReferralProgramEditionStatus,\n type ReferralProgramEditionStatusId,\n} from \"../shared/status\";\nimport type { ReferralProgramRulesPieSplit } from \"./rules\";\n\n/**\n * Calculate the status of a `pie-split` referral program.\n *\n * Delegates entirely to {@link calcBaseReferralProgramEditionStatus} — pie-split has no additional\n * runtime conditions that affect status beyond the time-based lifecycle.\n *\n * @param rules - The pie-split rules for the edition.\n * @param now - Current date in {@link UnixTimestamp} format.\n */\nexport const calcReferralProgramEditionStatusPieSplit = (\n rules: ReferralProgramRulesPieSplit,\n now: UnixTimestamp,\n): ReferralProgramEditionStatusId => calcBaseReferralProgramEditionStatus(rules, now);\n","import type { ReferralProgramEditionSlug } from \"../../edition\";\nimport type { BaseReferralProgramEditionSummary } from \"../shared/edition-summary\";\nimport { validateBaseReferralProgramEditionSummary } from \"../shared/edition-summary\";\nimport type { ReferralProgramAwardModels } from \"../shared/rules\";\nimport type { ReferrerLeaderboardPieSplit } from \"./leaderboard\";\nimport type { ReferralProgramRulesPieSplit } from \"./rules\";\nimport { validateReferralProgramRulesPieSplit } from \"./rules\";\nimport { calcReferralProgramEditionStatusPieSplit } from \"./status\";\n\n/**\n * Edition summary for a `pie-split` referral program edition.\n */\nexport interface ReferralProgramEditionSummaryPieSplit extends BaseReferralProgramEditionSummary {\n /**\n * Discriminant — always `\"pie-split\"`.\n *\n * @invariant Always equals `rules.awardModel` ({@link ReferralProgramAwardModels.PieSplit}).\n */\n awardModel: typeof ReferralProgramAwardModels.PieSplit;\n\n /**\n * The pie-split rules for this edition.\n */\n rules: ReferralProgramRulesPieSplit;\n}\n\nexport const validateEditionSummaryPieSplit = (\n summary: ReferralProgramEditionSummaryPieSplit,\n): void => {\n validateReferralProgramRulesPieSplit(summary.rules);\n validateBaseReferralProgramEditionSummary(summary);\n};\n\n/**\n * Build a {@link ReferralProgramEditionSummaryPieSplit} from a pie-split edition config and the\n * edition's leaderboard.\n */\nexport function buildEditionSummaryPieSplit(\n slug: ReferralProgramEditionSlug,\n displayName: string,\n rules: ReferralProgramRulesPieSplit,\n leaderboard: ReferrerLeaderboardPieSplit,\n): ReferralProgramEditionSummaryPieSplit {\n const status = calcReferralProgramEditionStatusPieSplit(rules, leaderboard.accurateAsOf);\n const result = { awardModel: rules.awardModel, slug, displayName, status, rules };\n\n validateEditionSummaryPieSplit(result);\n\n return result;\n}\n","import type { UnixTimestamp } from \"@ensnode/ensnode-sdk\";\n\nimport type { ReferrerMetrics } from \"../../referrer-metrics\";\nimport type { BaseReferralProgramRules } from \"./rules\";\n\n/**\n * Asserts invariants that must hold for any leaderboard builder regardless of award model.\n */\nexport const assertLeaderboardInputs = (\n allReferrers: ReferrerMetrics[],\n rules: BaseReferralProgramRules,\n accurateAsOf: UnixTimestamp,\n): void => {\n const uniqueReferrers = new Set(allReferrers.map((r) => r.referrer));\n if (uniqueReferrers.size !== allReferrers.length) {\n throw new Error(\n \"ReferrerLeaderboard: Cannot build a leaderboard containing duplicate referrers\",\n );\n }\n\n if (accurateAsOf < rules.startTime && allReferrers.length > 0) {\n throw new Error(\n `ReferrerLeaderboard: accurateAsOf (${accurateAsOf}) is before startTime (${rules.startTime}) which indicates allReferrers should be empty, but allReferrers is not empty.`,\n );\n }\n};\n","import type { Address } from \"viem\";\n\nimport type { Duration } from \"@ensnode/ensnode-sdk\";\n\nimport { isPositiveInteger } from \"../../number\";\nimport type { ReferrerMetrics } from \"../../referrer-metrics\";\n\n/**\n * The rank of a referrer relative to all other referrers, where 1 is the\n * top-ranked referrer.\n *\n * @invariant Guaranteed to be a positive integer (> 0)\n */\nexport type ReferrerRank = number;\n\nexport const validateReferrerRank = (rank: ReferrerRank): void => {\n if (!isPositiveInteger(rank)) {\n throw new Error(`Invalid ReferrerRank: ${rank}. ReferrerRank must be a positive integer.`);\n }\n};\n\nexport interface ReferrerMetricsForComparison {\n /**\n * The total incremental duration (in seconds) of all referrals made by the referrer within\n * the {@link ReferralProgramRules}.\n */\n totalIncrementalDuration: Duration;\n\n /**\n * The fully lowercase Ethereum address of the referrer.\n *\n * @invariant Guaranteed to be a valid EVM address in lowercase format.\n */\n referrer: Address;\n}\n\nexport const compareReferrerMetrics = (\n a: ReferrerMetricsForComparison,\n b: ReferrerMetricsForComparison,\n): number => {\n // Primary sort: totalIncrementalDuration (descending)\n if (a.totalIncrementalDuration !== b.totalIncrementalDuration) {\n return b.totalIncrementalDuration - a.totalIncrementalDuration;\n }\n\n // Secondary sort: referrer address using lexicographic comparison of ASCII hex strings (descending)\n if (b.referrer > a.referrer) return 1;\n if (b.referrer < a.referrer) return -1;\n return 0;\n};\n\n/**\n * Sorts a list of referrers for leaderboard ranking.\n * Returns a new array — does not mutate the input.\n */\nexport const sortReferrerMetrics = (referrers: ReferrerMetrics[]): ReferrerMetrics[] => {\n return [...referrers].sort(compareReferrerMetrics);\n};\n","import type { Address } from \"viem\";\n\nimport type { Duration, PriceEth } from \"@ensnode/ensnode-sdk\";\nimport { makePriceEthSchema } from \"@ensnode/ensnode-sdk/internal\";\n\nimport { normalizeAddress, validateLowercaseAddress } from \"./address\";\nimport { validateNonNegativeInteger } from \"./number\";\nimport { ReferralProgramRules } from \"./rules\";\nimport { validateDuration } from \"./time\";\n\n/**\n * Metrics for a single referrer, as aggregated from the DB layer.\n * Independent of other referrers and award model; does not carry an `awardModel` discriminant.\n */\nexport interface ReferrerMetrics {\n /**\n * The fully lowercase Ethereum address of the referrer.\n *\n * @invariant Guaranteed to be a valid EVM address in lowercase format\n */\n referrer: Address;\n\n /**\n * The total number of referrals made by the referrer within the {@link ReferralProgramRules}.\n * @invariant Guaranteed to be a non-negative integer (>= 0)\n */\n totalReferrals: number;\n\n /**\n * The total incremental duration (in seconds) of all referrals made by the referrer within\n * the {@link ReferralProgramRules}.\n */\n totalIncrementalDuration: Duration;\n\n /**\n * The total revenue contribution in ETH made to the ENS DAO by all referrals\n * from this referrer.\n *\n * This is the sum of the total cost paid by registrants for all registrar actions\n * where this address was the referrer.\n *\n * @invariant Guaranteed to be a valid PriceEth with non-negative amount (>= 0n)\n * @invariant Never null (records with null `total` in the database are treated as 0 when summing)\n */\n totalRevenueContribution: PriceEth;\n}\n\nexport const buildReferrerMetrics = (\n referrer: Address,\n totalReferrals: number,\n totalIncrementalDuration: Duration,\n totalRevenueContribution: PriceEth,\n): ReferrerMetrics => {\n const result = {\n referrer: normalizeAddress(referrer),\n totalReferrals,\n totalIncrementalDuration,\n totalRevenueContribution,\n } satisfies ReferrerMetrics;\n\n validateReferrerMetrics(result);\n return result;\n};\n\nexport const validateReferrerMetrics = (metrics: ReferrerMetrics): void => {\n validateLowercaseAddress(metrics.referrer);\n validateNonNegativeInteger(metrics.totalReferrals);\n validateDuration(metrics.totalIncrementalDuration);\n\n makePriceEthSchema(\"ReferrerMetrics.totalRevenueContribution\").parse(\n metrics.totalRevenueContribution,\n );\n};\n","import type { Duration } from \"@ensnode/ensnode-sdk\";\n\nimport { SECONDS_PER_YEAR } from \"../../time\";\nimport type { ReferrerScore } from \"../shared/score\";\n\n/**\n * Calculate the score of a referrer based on the total incremental duration\n * (in seconds) of registrations and renewals for direct subnames of .eth\n * referred by the referrer within the referral program edition.\n *\n * Used exclusively in the pie-split award model pipeline.\n *\n * @param totalIncrementalDuration - The total incremental duration (in seconds)\n * of referrals made by a referrer within the {@link ReferralProgramRulesPieSplit}.\n */\nexport const calcReferrerScorePieSplit = (totalIncrementalDuration: Duration): ReferrerScore => {\n return totalIncrementalDuration / SECONDS_PER_YEAR;\n};\n","import type { Duration } from \"@ensnode/ensnode-sdk\";\n\nimport type { ReferrerRank } from \"../shared/rank\";\nimport type { ReferrerScore } from \"../shared/score\";\nimport type { ReferralProgramRulesPieSplit } from \"./rules\";\nimport { calcReferrerScorePieSplit } from \"./score\";\n\n/**\n * Determine if a referrer with the given `rank` is qualified to receive a non-zero\n * `awardPoolShare` under pie-split rules.\n *\n * @param rank - The rank of the referrer relative to all other referrers on a leaderboard.\n * @param rules - The pie-split rules of the referral program.\n */\nexport function isReferrerQualifiedPieSplit(\n rank: ReferrerRank,\n rules: ReferralProgramRulesPieSplit,\n): boolean {\n return rank <= rules.maxQualifiedReferrers;\n}\n\n/**\n * Calculate the final score boost of a referrer based on their rank (pie-split only).\n *\n * @param rank - The rank of the referrer relative to all other referrers, where 1 is the\n * top-ranked referrer.\n * @returns The final score boost of the referrer as a number between 0 and 1 (inclusive).\n */\nexport function calcReferrerFinalScoreBoostPieSplit(\n rank: ReferrerRank,\n rules: ReferralProgramRulesPieSplit,\n): number {\n if (!isReferrerQualifiedPieSplit(rank, rules)) return 0;\n\n // Avoid division by zero when only a single referrer is qualified.\n // In this case, that single referrer (rank 1) should receive the maximum boost.\n if (rules.maxQualifiedReferrers === 1) return 1;\n\n return 1 - (rank - 1) / (rules.maxQualifiedReferrers - 1);\n}\n\n/**\n * Calculate the final score multiplier of a referrer based on their rank (pie-split only).\n *\n * @param rank - The rank of the referrer relative to all other referrers, where 1 is the\n * top-ranked referrer.\n * @returns The final score multiplier of the referrer as a number between 1 and 2 (inclusive).\n */\nexport function calcReferrerFinalScoreMultiplierPieSplit(\n rank: ReferrerRank,\n rules: ReferralProgramRulesPieSplit,\n): number {\n return 1 + calcReferrerFinalScoreBoostPieSplit(rank, rules);\n}\n\n/**\n * Calculate the final score of a referrer based on their score and final score boost (pie-split only).\n *\n * @param rank - The rank of the referrer relative to all other referrers.\n * @param totalIncrementalDuration - The total incremental duration (in seconds)\n * of referrals made by the referrer within the `rules`.\n * @param rules - The pie-split rules of the referral program.\n */\nexport function calcReferrerFinalScorePieSplit(\n rank: ReferrerRank,\n totalIncrementalDuration: Duration,\n rules: ReferralProgramRulesPieSplit,\n): ReferrerScore {\n return (\n calcReferrerScorePieSplit(totalIncrementalDuration) *\n calcReferrerFinalScoreMultiplierPieSplit(rank, rules)\n );\n}\n","import type { Address } from \"viem\";\n\nimport { type PriceUsdc, priceEth, priceUsdc, scalePrice } from \"@ensnode/ensnode-sdk\";\nimport { makePriceEthSchema, makePriceUsdcSchema } from \"@ensnode/ensnode-sdk/internal\";\n\nimport type { ReferrerMetrics } from \"../../referrer-metrics\";\nimport { buildReferrerMetrics, validateReferrerMetrics } from \"../../referrer-metrics\";\nimport type { ReferrerRank } from \"../shared/rank\";\nimport { validateReferrerRank } from \"../shared/rank\";\nimport { type ReferrerScore, validateReferrerScore } from \"../shared/score\";\nimport type { AggregatedReferrerMetricsPieSplit } from \"./aggregations\";\nimport {\n calcReferrerFinalScoreBoostPieSplit,\n calcReferrerFinalScorePieSplit,\n isReferrerQualifiedPieSplit,\n} from \"./rank\";\nimport type { ReferralProgramRulesPieSplit } from \"./rules\";\nimport { calcReferrerScorePieSplit } from \"./score\";\n\n/**\n * Represents metrics for a single referrer independent of other referrers,\n * including a calculation of the referrer's score.\n */\nexport interface ScoredReferrerMetricsPieSplit extends ReferrerMetrics {\n /**\n * The referrer's score.\n *\n * @invariant Guaranteed to be `calcReferrerScorePieSplit(totalIncrementalDuration)`\n */\n score: ReferrerScore;\n}\n\nexport const buildScoredReferrerMetricsPieSplit = (\n referrer: ReferrerMetrics,\n): ScoredReferrerMetricsPieSplit => {\n const result = {\n ...referrer,\n score: calcReferrerScorePieSplit(referrer.totalIncrementalDuration),\n } satisfies ScoredReferrerMetricsPieSplit;\n\n validateScoredReferrerMetricsPieSplit(result);\n return result;\n};\n\nexport const validateScoredReferrerMetricsPieSplit = (\n metrics: ScoredReferrerMetricsPieSplit,\n): void => {\n validateReferrerMetrics(metrics);\n validateReferrerScore(metrics.score);\n\n const expectedScore = calcReferrerScorePieSplit(metrics.totalIncrementalDuration);\n if (metrics.score !== expectedScore) {\n throw new Error(`Referrer: Invalid score: ${metrics.score}, expected: ${expectedScore}.`);\n }\n};\n\n/**\n * Extends {@link ScoredReferrerMetricsPieSplit} to include additional metrics relative to all\n * other referrers on a {@link ReferrerLeaderboardPieSplit} and {@link ReferralProgramRulesPieSplit}.\n */\nexport interface RankedReferrerMetricsPieSplit extends ScoredReferrerMetricsPieSplit {\n /**\n * The referrer's rank on the {@link ReferrerLeaderboardPieSplit} relative to all other referrers.\n */\n rank: ReferrerRank;\n\n /**\n * Identifies if the referrer meets the qualifications of the {@link ReferralProgramRulesPieSplit} to receive a non-zero `awardPoolShare`.\n *\n * @invariant true if and only if `rank` is less than or equal to {@link ReferralProgramRulesPieSplit.maxQualifiedReferrers}\n */\n isQualified: boolean;\n\n /**\n * The referrer's final score boost.\n *\n * @invariant Guaranteed to be a number between 0 and 1 (inclusive)\n * @invariant Calculated as: `1-((rank-1)/({@link ReferralProgramRulesPieSplit.maxQualifiedReferrers}-1))` if `isQualified` is `true`, else `0`\n */\n finalScoreBoost: number;\n\n /**\n * The referrer's final score.\n *\n * @invariant Calculated as: `score * (1 + finalScoreBoost)`\n */\n finalScore: ReferrerScore;\n}\n\nexport const validateRankedReferrerMetricsPieSplit = (\n metrics: RankedReferrerMetricsPieSplit,\n rules: ReferralProgramRulesPieSplit,\n): void => {\n validateScoredReferrerMetricsPieSplit(metrics);\n validateReferrerRank(metrics.rank);\n\n if (metrics.finalScoreBoost < 0 || metrics.finalScoreBoost > 1) {\n throw new Error(\n `Invalid RankedReferrerMetricsPieSplit: Invalid finalScoreBoost: ${metrics.finalScoreBoost}. finalScoreBoost must be between 0 and 1 (inclusive).`,\n );\n }\n\n validateReferrerScore(metrics.finalScore);\n\n const expectedIsQualified = isReferrerQualifiedPieSplit(metrics.rank, rules);\n if (metrics.isQualified !== expectedIsQualified) {\n throw new Error(\n `RankedReferrerMetricsPieSplit: Invalid isQualified: ${metrics.isQualified}, expected: ${expectedIsQualified}.`,\n );\n }\n\n const expectedFinalScoreBoost = calcReferrerFinalScoreBoostPieSplit(metrics.rank, rules);\n if (metrics.finalScoreBoost !== expectedFinalScoreBoost) {\n throw new Error(\n `RankedReferrerMetricsPieSplit: Invalid finalScoreBoost: ${metrics.finalScoreBoost}, expected: ${expectedFinalScoreBoost}.`,\n );\n }\n\n const expectedFinalScore = calcReferrerFinalScorePieSplit(\n metrics.rank,\n metrics.totalIncrementalDuration,\n rules,\n );\n if (metrics.finalScore !== expectedFinalScore) {\n throw new Error(\n `RankedReferrerMetricsPieSplit: Invalid finalScore: ${metrics.finalScore}, expected: ${expectedFinalScore}.`,\n );\n }\n};\n\nexport const buildRankedReferrerMetricsPieSplit = (\n referrer: ScoredReferrerMetricsPieSplit,\n rank: ReferrerRank,\n rules: ReferralProgramRulesPieSplit,\n): RankedReferrerMetricsPieSplit => {\n const result = {\n ...referrer,\n rank,\n isQualified: isReferrerQualifiedPieSplit(rank, rules),\n finalScoreBoost: calcReferrerFinalScoreBoostPieSplit(rank, rules),\n finalScore: calcReferrerFinalScorePieSplit(rank, referrer.totalIncrementalDuration, rules),\n } satisfies RankedReferrerMetricsPieSplit;\n validateRankedReferrerMetricsPieSplit(result, rules);\n return result;\n};\n\n/**\n * Calculate the share of the award pool for a referrer.\n * @param referrer - The referrer to calculate the award pool share for.\n * @param aggregatedMetrics - Aggregated metrics for all referrers.\n * @returns The referrer's share of the award pool as a number between 0 and 1 (inclusive).\n */\nexport const calcReferrerAwardPoolSharePieSplit = (\n referrer: RankedReferrerMetricsPieSplit,\n aggregatedMetrics: AggregatedReferrerMetricsPieSplit,\n): number => {\n if (!referrer.isQualified) return 0;\n if (aggregatedMetrics.grandTotalQualifiedReferrersFinalScore === 0) return 0;\n\n return referrer.finalScore / aggregatedMetrics.grandTotalQualifiedReferrersFinalScore;\n};\n\n/**\n * Extends {@link RankedReferrerMetricsPieSplit} to include additional metrics\n * relative to {@link AggregatedReferrerMetricsPieSplit}.\n */\nexport interface AwardedReferrerMetricsPieSplit extends RankedReferrerMetricsPieSplit {\n /**\n * The referrer's share of the award pool.\n *\n * @invariant Guaranteed to be a number between 0 and 1 (inclusive)\n * @invariant Calculated as: `finalScore / {@link AggregatedReferrerMetricsPieSplit.grandTotalQualifiedReferrersFinalScore}` if `isQualified` is `true`, else `0`\n */\n awardPoolShare: number;\n\n /**\n * The approximate USDC value of the referrer's share of the {@link ReferralProgramRulesPieSplit.totalAwardPoolValue}.\n *\n * @invariant Guaranteed to be a valid PriceUsdc with amount between 0 and {@link ReferralProgramRulesPieSplit.totalAwardPoolValue.amount} (inclusive)\n * @invariant Calculated as: `awardPoolShare` * {@link ReferralProgramRulesPieSplit.totalAwardPoolValue.amount}\n */\n awardPoolApproxValue: PriceUsdc;\n}\n\nexport const validateAwardedReferrerMetricsPieSplit = (\n referrer: AwardedReferrerMetricsPieSplit,\n rules: ReferralProgramRulesPieSplit,\n): void => {\n validateRankedReferrerMetricsPieSplit(referrer, rules);\n if (referrer.awardPoolShare < 0 || referrer.awardPoolShare > 1) {\n throw new Error(\n `Invalid AwardedReferrerMetricsPieSplit: ${referrer.awardPoolShare}. awardPoolShare must be between 0 and 1 (inclusive).`,\n );\n }\n\n makePriceUsdcSchema(\"AwardedReferrerMetricsPieSplit.awardPoolApproxValue\").parse(\n referrer.awardPoolApproxValue,\n );\n\n if (referrer.awardPoolApproxValue.amount > rules.totalAwardPoolValue.amount) {\n throw new Error(\n `AwardedReferrerMetricsPieSplit: awardPoolApproxValue.amount ${referrer.awardPoolApproxValue.amount.toString()} exceeds totalAwardPoolValue.amount ${rules.totalAwardPoolValue.amount.toString()}.`,\n );\n }\n};\n\nexport const buildAwardedReferrerMetricsPieSplit = (\n referrer: RankedReferrerMetricsPieSplit,\n aggregatedMetrics: AggregatedReferrerMetricsPieSplit,\n rules: ReferralProgramRulesPieSplit,\n): AwardedReferrerMetricsPieSplit => {\n const awardPoolShare = calcReferrerAwardPoolSharePieSplit(referrer, aggregatedMetrics);\n\n // Calculate the approximate USDC value by multiplying the share by the total award pool value\n const awardPoolApproxValue = scalePrice(rules.totalAwardPoolValue, awardPoolShare);\n\n const result = {\n ...referrer,\n awardPoolShare,\n awardPoolApproxValue,\n } satisfies AwardedReferrerMetricsPieSplit;\n validateAwardedReferrerMetricsPieSplit(result, rules);\n return result;\n};\n\n/**\n * Extends {@link AwardedReferrerMetricsPieSplit} but with rank set to null to represent\n * a referrer who is not on the leaderboard (has zero referrals within the rules associated with the leaderboard).\n */\nexport interface UnrankedReferrerMetricsPieSplit\n extends Omit<AwardedReferrerMetricsPieSplit, \"rank\" | \"isQualified\"> {\n /**\n * The referrer is not on the leaderboard and therefore has no rank.\n */\n rank: null;\n\n /**\n * Always false for unranked referrers.\n */\n isQualified: false;\n}\n\nexport const validateUnrankedReferrerMetricsPieSplit = (\n metrics: UnrankedReferrerMetricsPieSplit,\n): void => {\n validateScoredReferrerMetricsPieSplit(metrics);\n\n if (metrics.rank !== null) {\n throw new Error(\n `Invalid UnrankedReferrerMetricsPieSplit: rank must be null, got: ${metrics.rank}.`,\n );\n }\n if (metrics.isQualified !== false) {\n throw new Error(\n `Invalid UnrankedReferrerMetricsPieSplit: isQualified must be false, got: ${metrics.isQualified}.`,\n );\n }\n if (metrics.totalReferrals !== 0) {\n throw new Error(\n `Invalid UnrankedReferrerMetricsPieSplit: totalReferrals must be 0, got: ${metrics.totalReferrals}.`,\n );\n }\n if (metrics.totalIncrementalDuration !== 0) {\n throw new Error(\n `Invalid UnrankedReferrerMetricsPieSplit: totalIncrementalDuration must be 0, got: ${metrics.totalIncrementalDuration}.`,\n );\n }\n\n makePriceEthSchema(\"UnrankedReferrerMetricsPieSplit.totalRevenueContribution\").parse(\n metrics.totalRevenueContribution,\n );\n if (metrics.totalRevenueContribution.amount !== 0n) {\n throw new Error(\n `Invalid UnrankedReferrerMetricsPieSplit: totalRevenueContribution.amount must be 0n, got: ${metrics.totalRevenueContribution.amount.toString()}.`,\n );\n }\n\n if (metrics.score !== 0) {\n throw new Error(\n `Invalid UnrankedReferrerMetricsPieSplit: score must be 0, got: ${metrics.score}.`,\n );\n }\n if (metrics.finalScoreBoost !== 0) {\n throw new Error(\n `Invalid UnrankedReferrerMetricsPieSplit: finalScoreBoost must be 0, got: ${metrics.finalScoreBoost}.`,\n );\n }\n if (metrics.finalScore !== 0) {\n throw new Error(\n `Invalid UnrankedReferrerMetricsPieSplit: finalScore must be 0, got: ${metrics.finalScore}.`,\n );\n }\n if (metrics.awardPoolShare !== 0) {\n throw new Error(\n `Invalid UnrankedReferrerMetricsPieSplit: awardPoolShare must be 0, got: ${metrics.awardPoolShare}.`,\n );\n }\n\n makePriceUsdcSchema(\"UnrankedReferrerMetricsPieSplit.awardPoolApproxValue\").parse(\n metrics.awardPoolApproxValue,\n );\n if (metrics.awardPoolApproxValue.amount !== 0n) {\n throw new Error(\n `Invalid UnrankedReferrerMetricsPieSplit: awardPoolApproxValue must be 0n, got: ${metrics.awardPoolApproxValue.amount.toString()}.`,\n );\n }\n};\n\n/**\n * Build an unranked zero-score referrer record for a referrer address that is not in the leaderboard.\n *\n * This is useful when you want to return a referrer record for an address that has no referrals\n * and is not qualified for the leaderboard.\n *\n * @param referrer - The referrer address\n * @returns An {@link UnrankedReferrerMetricsPieSplit} with zero values for all metrics and null rank\n */\nexport const buildUnrankedReferrerMetricsPieSplit = (\n referrer: Address,\n): UnrankedReferrerMetricsPieSplit => {\n const metrics = buildReferrerMetrics(referrer, 0, 0, priceEth(0n));\n const scoredMetrics = buildScoredReferrerMetricsPieSplit(metrics);\n\n const result = {\n ...scoredMetrics,\n rank: null,\n isQualified: false,\n finalScoreBoost: 0,\n finalScore: 0,\n awardPoolShare: 0,\n awardPoolApproxValue: priceUsdc(0n),\n } satisfies UnrankedReferrerMetricsPieSplit;\n\n validateUnrankedReferrerMetricsPieSplit(result);\n return result;\n};\n","import type { Address } from \"viem\";\n\nimport type { UnixTimestamp } from \"@ensnode/ensnode-sdk\";\n\nimport type { ReferrerMetrics } from \"../../referrer-metrics\";\nimport { assertLeaderboardInputs } from \"../shared/leaderboard-guards\";\nimport { sortReferrerMetrics } from \"../shared/rank\";\nimport type { ReferralProgramAwardModels } from \"../shared/rules\";\nimport type { AggregatedReferrerMetricsPieSplit } from \"./aggregations\";\nimport { buildAggregatedReferrerMetricsPieSplit } from \"./aggregations\";\nimport type { AwardedReferrerMetricsPieSplit } from \"./metrics\";\nimport {\n buildAwardedReferrerMetricsPieSplit,\n buildRankedReferrerMetricsPieSplit,\n buildScoredReferrerMetricsPieSplit,\n} from \"./metrics\";\nimport type { ReferralProgramRulesPieSplit } from \"./rules\";\n\n/**\n * Represents a leaderboard with the pie-split award model for any number of referrers.\n */\nexport interface ReferrerLeaderboardPieSplit {\n /**\n * Discriminant identifying this as a pie-split leaderboard.\n *\n * @invariant Always equals `rules.awardModel` ({@link ReferralProgramAwardModels.PieSplit}).\n */\n awardModel: typeof ReferralProgramAwardModels.PieSplit;\n\n /**\n * The rules of the referral program that generated the {@link ReferrerLeaderboardPieSplit}.\n */\n rules: ReferralProgramRulesPieSplit;\n\n /**\n * The {@link AggregatedReferrerMetricsPieSplit} for all {@link RankedReferrerMetricsPieSplit} values in `referrers`.\n */\n aggregatedMetrics: AggregatedReferrerMetricsPieSplit;\n\n /**\n * Ordered map containing `AwardedReferrerMetricsPieSplit` for all referrers with 1 or more\n * `totalReferrals` within the `rules` as of `accurateAsOf`.\n *\n * @invariant Map entries are ordered by `rank` (ascending).\n * @invariant Map is empty if there are no referrers with 1 or more `totalReferrals`\n * within the `rules` as of `accurateAsOf`.\n * @invariant If a fully-lowercase `Address` is not a key in this map then that `Address` had\n * 0 `totalReferrals`, `totalIncrementalDuration`, and `score` within the\n * `rules` as of `accurateAsOf`.\n * @invariant Each value in this map is guaranteed to have a non-zero\n * `totalReferrals`, `totalIncrementalDuration`, and `score`.\n */\n referrers: Map<Address, AwardedReferrerMetricsPieSplit>;\n\n /**\n * The {@link UnixTimestamp} of when the data used to build the {@link ReferrerLeaderboardPieSplit} was accurate as of.\n */\n accurateAsOf: UnixTimestamp;\n}\n\nexport const buildReferrerLeaderboardPieSplit = (\n allReferrers: ReferrerMetrics[],\n rules: ReferralProgramRulesPieSplit,\n accurateAsOf: UnixTimestamp,\n): ReferrerLeaderboardPieSplit => {\n assertLeaderboardInputs(allReferrers, rules, accurateAsOf);\n\n const sortedReferrers = sortReferrerMetrics(allReferrers);\n\n const scoredReferrers = sortedReferrers.map((r) => buildScoredReferrerMetricsPieSplit(r));\n\n const rankedReferrers = scoredReferrers.map((r, index) =>\n buildRankedReferrerMetricsPieSplit(r, index + 1, rules),\n );\n\n const aggregatedMetrics = buildAggregatedReferrerMetricsPieSplit(rankedReferrers, rules);\n\n const awardedReferrers = rankedReferrers.map((r) =>\n buildAwardedReferrerMetricsPieSplit(r, aggregatedMetrics, rules),\n );\n\n const referrers = new Map(awardedReferrers.map((r) => [r.referrer, r]));\n\n return { awardModel: rules.awardModel, rules, aggregatedMetrics, referrers, accurateAsOf };\n};\n","import {\n type BaseReferrerLeaderboardPage,\n type ReferrerLeaderboardPageContext,\n sliceReferrers,\n} from \"../shared/leaderboard-page\";\nimport type { ReferralProgramAwardModels } from \"../shared/rules\";\nimport type { AggregatedReferrerMetricsPieSplit } from \"./aggregations\";\nimport type { ReferrerLeaderboardPieSplit } from \"./leaderboard\";\nimport type { AwardedReferrerMetricsPieSplit } from \"./metrics\";\nimport type { ReferralProgramRulesPieSplit } from \"./rules\";\nimport { calcReferralProgramEditionStatusPieSplit } from \"./status\";\n\n/**\n * A page of referrers from the pie-split referrer leaderboard.\n */\nexport interface ReferrerLeaderboardPagePieSplit extends BaseReferrerLeaderboardPage {\n /**\n * Discriminant identifying this as a page from a pie-split leaderboard.\n *\n * @invariant Always equals `rules.awardModel` ({@link ReferralProgramAwardModels.PieSplit}).\n */\n awardModel: typeof ReferralProgramAwardModels.PieSplit;\n\n /**\n * The {@link ReferralProgramRulesPieSplit} used to generate the {@link ReferrerLeaderboardPieSplit}\n * that this {@link ReferrerLeaderboardPagePieSplit} comes from.\n */\n rules: ReferralProgramRulesPieSplit;\n\n /**\n * Ordered list of {@link AwardedReferrerMetricsPieSplit} for the {@link ReferrerLeaderboardPagePieSplit}\n * described by {@link pageContext} within the related {@link ReferrerLeaderboardPieSplit}.\n *\n * @invariant Array will be empty if `pageContext.totalRecords` is 0.\n * @invariant Array entries are ordered by `rank` (ascending).\n */\n referrers: AwardedReferrerMetricsPieSplit[];\n\n /**\n * The aggregated metrics for all referrers on the leaderboard.\n */\n aggregatedMetrics: AggregatedReferrerMetricsPieSplit;\n}\n\nexport function buildLeaderboardPagePieSplit(\n pageContext: ReferrerLeaderboardPageContext,\n leaderboard: ReferrerLeaderboardPieSplit,\n): ReferrerLeaderboardPagePieSplit {\n const status = calcReferralProgramEditionStatusPieSplit(\n leaderboard.rules,\n leaderboard.accurateAsOf,\n );\n return {\n awardModel: leaderboard.awardModel,\n rules: leaderboard.rules,\n referrers: sliceReferrers(leaderboard.referrers, pageContext),\n aggregatedMetrics: leaderboard.aggregatedMetrics,\n pageContext,\n status,\n accurateAsOf: leaderboard.accurateAsOf,\n };\n}\n","import { type Duration, type PriceEth, type PriceUsdc, priceEth } from \"@ensnode/ensnode-sdk\";\nimport { makePriceEthSchema, makePriceUsdcSchema } from \"@ensnode/ensnode-sdk/internal\";\n\nimport { validateNonNegativeInteger } from \"../../number\";\nimport { validateDuration } from \"../../time\";\nimport type { AwardedReferrerMetricsRevShareLimit } from \"./metrics\";\n\n/**\n * Represents aggregated metrics for a list of referrers on a rev-share-limit leaderboard.\n */\nexport interface AggregatedReferrerMetricsRevShareLimit {\n /**\n * @invariant The sum of `totalReferrals` across all referrers in the list.\n * @invariant Guaranteed to be a non-negative integer (>= 0)\n */\n grandTotalReferrals: number;\n\n /**\n * @invariant The sum of `totalIncrementalDuration` across all referrers in the list.\n */\n grandTotalIncrementalDuration: Duration;\n\n /**\n * The total revenue contribution in ETH to the ENS DAO from all referrals\n * across all referrers on the leaderboard.\n *\n * This is the sum of `totalRevenueContribution` across all referrers in the list.\n *\n * @invariant Guaranteed to be a valid PriceEth with non-negative amount (>= 0n)\n */\n grandTotalRevenueContribution: PriceEth;\n\n /**\n * The remaining amount in the award pool after subtracting all qualified awards\n * claimed during the sequential race processing.\n *\n * @invariant Guaranteed to be a valid PriceUsdc with non-negative amount (>= 0n)\n */\n awardPoolRemaining: PriceUsdc;\n}\n\nexport const validateAggregatedReferrerMetricsRevShareLimit = (\n metrics: AggregatedReferrerMetricsRevShareLimit,\n): void => {\n validateNonNegativeInteger(metrics.grandTotalReferrals);\n validateDuration(metrics.grandTotalIncrementalDuration);\n\n makePriceEthSchema(\"AggregatedReferrerMetricsRevShareLimit.grandTotalRevenueContribution\").parse(\n metrics.grandTotalRevenueContribution,\n );\n\n makePriceUsdcSchema(\"AggregatedReferrerMetricsRevShareLimit.awardPoolRemaining\").parse(\n metrics.awardPoolRemaining,\n );\n};\n\n/**\n * Builds aggregated rev-share-limit metrics from a complete list of referrers and\n * the award pool remaining after sequential race processing.\n *\n * **IMPORTANT: This function expects a complete list of all referrers.**\n *\n * @param referrers - Must be a complete list of referrers with their totals.\n * **This must NOT be a paginated or partial slice.**\n *\n * @param awardPoolRemaining - The amount remaining in the award pool after the sequential\n * race algorithm has processed all events.\n *\n * @returns Aggregated metrics including totals across all referrers and the award pool remaining.\n */\nexport const buildAggregatedReferrerMetricsRevShareLimit = (\n referrers: AwardedReferrerMetricsRevShareLimit[],\n awardPoolRemaining: PriceUsdc,\n): AggregatedReferrerMetricsRevShareLimit => {\n let grandTotalReferrals = 0;\n let grandTotalIncrementalDuration = 0;\n let grandTotalRevenueContributionAmount = 0n;\n\n for (const referrer of referrers) {\n grandTotalReferrals += referrer.totalReferrals;\n grandTotalIncrementalDuration += referrer.totalIncrementalDuration;\n grandTotalRevenueContributionAmount += referrer.totalRevenueContribution.amount;\n }\n\n const aggregatedMetrics = {\n grandTotalReferrals,\n grandTotalIncrementalDuration,\n grandTotalRevenueContribution: priceEth(grandTotalRevenueContributionAmount),\n awardPoolRemaining,\n } satisfies AggregatedReferrerMetricsRevShareLimit;\n\n validateAggregatedReferrerMetricsRevShareLimit(aggregatedMetrics);\n\n return aggregatedMetrics;\n};\n","import type { Address } from \"viem\";\n\nimport {\n type AccountId,\n type PriceUsdc,\n parseUsdc,\n type UnixTimestamp,\n} from \"@ensnode/ensnode-sdk\";\nimport { makePriceUsdcSchema } from \"@ensnode/ensnode-sdk/internal\";\n\nimport { normalizeAddress, validateLowercaseAddress } from \"../../address\";\nimport {\n type BaseReferralProgramRules,\n ReferralProgramAwardModels,\n validateBaseReferralProgramRules,\n} from \"../shared/rules\";\n\n/**\n * An admin-imposed disqualification entry of a specific referrer in an edition.\n */\nexport interface ReferralProgramEditionDisqualification {\n /**\n * The address of the disqualified referrer.\n *\n * @invariant Guaranteed to be a valid EVM address in lowercase format.\n */\n referrer: Address;\n\n /**\n * A human-readable explanation of why the referrer was disqualified.\n *\n * @invariant Must be a non-empty string.\n */\n reason: string;\n}\n\n/**\n * Base revenue contribution per year of incremental duration.\n *\n * Used in `rev-share-limit` qualification and award calculations:\n * 1 year of incremental duration = $5 in base revenue (base-fee-only, excluding premiums).\n */\nexport const BASE_REVENUE_CONTRIBUTION_PER_YEAR: PriceUsdc = parseUsdc(\"5\");\n\nexport interface ReferralProgramRulesRevShareLimit extends BaseReferralProgramRules {\n /**\n * Discriminant: identifies this as a \"rev-share-limit\" award model edition.\n *\n * In rev-share-limit, each qualified referrer receives a share of their base revenue\n * contribution (base-fee-only: $5 × years of incremental duration), subject to a\n * pool cap and a minimum qualification threshold.\n */\n awardModel: typeof ReferralProgramAwardModels.RevShareLimit;\n\n /**\n * The total value of the award pool in USDC (acts as a cap on total payouts).\n */\n totalAwardPoolValue: PriceUsdc;\n\n /**\n * The minimum base revenue contribution required for a referrer to qualify.\n */\n minQualifiedRevenueContribution: PriceUsdc;\n\n /**\n * The fraction of the referrer's base revenue contribution that constitutes their potential award.\n *\n * @invariant Guaranteed to be a number between 0 and 1 (inclusive)\n */\n qualifiedRevenueShare: number;\n\n /**\n * Admin-imposed disqualifications for this edition.\n * Disqualified referrers receive no awards.\n *\n * @invariant No duplicate referrer addresses.\n */\n disqualifications: ReferralProgramEditionDisqualification[];\n}\n\nexport const validateReferralProgramRulesRevShareLimit = (\n rules: ReferralProgramRulesRevShareLimit,\n): void => {\n makePriceUsdcSchema(\"ReferralProgramRulesRevShareLimit.totalAwardPoolValue\").parse(\n rules.totalAwardPoolValue,\n );\n\n makePriceUsdcSchema(\"ReferralProgramRulesRevShareLimit.minQualifiedRevenueContribution\").parse(\n rules.minQualifiedRevenueContribution,\n );\n\n if (\n !Number.isFinite(rules.qualifiedRevenueShare) ||\n rules.qualifiedRevenueShare < 0 ||\n rules.qualifiedRevenueShare > 1\n ) {\n throw new Error(\n `ReferralProgramRulesRevShareLimit: qualifiedRevenueShare must be between 0 and 1 (inclusive), got ${rules.qualifiedRevenueShare}.`,\n );\n }\n\n for (const d of rules.disqualifications) {\n validateLowercaseAddress(d.referrer);\n if (d.reason.trim().length === 0) {\n throw new Error(\n \"ReferralProgramRulesRevShareLimit: disqualification reason must not be empty.\",\n );\n }\n }\n\n const disqualificationAddresses = rules.disqualifications.map((d) => d.referrer);\n const uniqueDisqualificationAddresses = new Set(disqualificationAddresses);\n if (uniqueDisqualificationAddresses.size !== disqualificationAddresses.length) {\n throw new Error(\n \"ReferralProgramRulesRevShareLimit: disqualifications must not contain duplicate referrer addresses.\",\n );\n }\n\n validateBaseReferralProgramRules(rules);\n};\n\nexport const buildReferralProgramRulesRevShareLimit = (\n totalAwardPoolValue: PriceUsdc,\n minQualifiedRevenueContribution: PriceUsdc,\n qualifiedRevenueShare: number,\n startTime: UnixTimestamp,\n endTime: UnixTimestamp,\n subregistryId: AccountId,\n rulesUrl: URL,\n areAwardsDistributed: boolean,\n disqualifications: ReferralProgramEditionDisqualification[] = [],\n): ReferralProgramRulesRevShareLimit => {\n const result = {\n awardModel: ReferralProgramAwardModels.RevShareLimit,\n totalAwardPoolValue,\n minQualifiedRevenueContribution,\n qualifiedRevenueShare,\n startTime,\n endTime,\n subregistryId,\n rulesUrl,\n areAwardsDistributed,\n disqualifications,\n } satisfies ReferralProgramRulesRevShareLimit;\n\n validateReferralProgramRulesRevShareLimit(result);\n\n return result;\n};\n\n/**\n * Determine if a referrer is qualified under rev-share-limit rules.\n *\n * A referrer is qualified if they meet the revenue threshold AND are not admin-disqualified.\n *\n * @param referrer - The referrer's address.\n * @param totalBaseRevenueContribution - The referrer's total base revenue contribution.\n * @param rules - The rev-share-limit rules of the referral program.\n */\nexport function isReferrerQualifiedRevShareLimit(\n referrer: Address,\n totalBaseRevenueContribution: PriceUsdc,\n rules: ReferralProgramRulesRevShareLimit,\n): boolean {\n const normalizedReferrer = normalizeAddress(referrer);\n const isAdminDisqualified = rules.disqualifications.some(\n (d) => d.referrer === normalizedReferrer,\n );\n return (\n totalBaseRevenueContribution.amount >= rules.minQualifiedRevenueContribution.amount &&\n !isAdminDisqualified\n );\n}\n","import type { UnixTimestamp } from \"@ensnode/ensnode-sdk\";\n\nimport {\n calcBaseReferralProgramEditionStatus,\n ReferralProgramEditionStatuses,\n type ReferralProgramEditionStatusId,\n} from \"../shared/status\";\nimport type { AggregatedReferrerMetricsRevShareLimit } from \"./aggregations\";\nimport type { ReferralProgramRulesRevShareLimit } from \"./rules\";\n\n/**\n * Calculate the status of a `rev-share-limit` referral program.\n *\n * Returns `Exhausted` when the program is `Active` but its award pool has been fully consumed\n * (`awardPoolRemaining.amount === 0n`). Otherwise delegates to {@link calcBaseReferralProgramEditionStatus}.\n *\n * @param rules - The rev-share-limit rules for the edition.\n * @param now - Current date in {@link UnixTimestamp} format.\n * @param aggregatedMetrics - The aggregated leaderboard metrics, used to check `awardPoolRemaining`.\n */\nexport const calcReferralProgramEditionStatusRevShareLimit = (\n rules: ReferralProgramRulesRevShareLimit,\n now: UnixTimestamp,\n aggregatedMetrics: AggregatedReferrerMetricsRevShareLimit,\n): ReferralProgramEditionStatusId => {\n const base = calcBaseReferralProgramEditionStatus(rules, now);\n if (\n base === ReferralProgramEditionStatuses.Active &&\n aggregatedMetrics.awardPoolRemaining.amount === 0n\n ) {\n return ReferralProgramEditionStatuses.Exhausted;\n }\n return base;\n};\n","import type { PriceUsdc } from \"@ensnode/ensnode-sdk\";\nimport { makePriceUsdcSchema } from \"@ensnode/ensnode-sdk/internal\";\n\nimport type { ReferralProgramEditionSlug } from \"../../edition\";\nimport type { BaseReferralProgramEditionSummary } from \"../shared/edition-summary\";\nimport { validateBaseReferralProgramEditionSummary } from \"../shared/edition-summary\";\nimport type { ReferralProgramAwardModels } from \"../shared/rules\";\nimport type { ReferrerLeaderboardRevShareLimit } from \"./leaderboard\";\nimport type { ReferralProgramRulesRevShareLimit } from \"./rules\";\nimport { validateReferralProgramRulesRevShareLimit } from \"./rules\";\nimport { calcReferralProgramEditionStatusRevShareLimit } from \"./status\";\n\n/**\n * Edition summary for a `rev-share-limit` referral program edition.\n *\n * Includes `awardPoolRemaining` so consumers can display pool exhaustion state\n * without needing to fetch the full leaderboard.\n */\nexport interface ReferralProgramEditionSummaryRevShareLimit\n extends BaseReferralProgramEditionSummary {\n /**\n * Discriminant — always `\"rev-share-limit\"`.\n *\n * @invariant Always equals `rules.awardModel` ({@link ReferralProgramAwardModels.RevShareLimit}).\n */\n awardModel: typeof ReferralProgramAwardModels.RevShareLimit;\n\n /**\n * The rev-share-limit rules for this edition.\n */\n rules: ReferralProgramRulesRevShareLimit;\n\n /**\n * The remaining award pool after sequential race processing.\n *\n * When `0n`, the edition's status will be {@link ReferralProgramEditionStatuses.Exhausted}\n * if the edition is still within its active window.\n */\n awardPoolRemaining: PriceUsdc;\n}\n\nexport const validateEditionSummaryRevShareLimit = (\n summary: ReferralProgramEditionSummaryRevShareLimit,\n): void => {\n validateReferralProgramRulesRevShareLimit(summary.rules);\n\n makePriceUsdcSchema(\"ReferralProgramEditionSummaryRevShareLimit.awardPoolRemaining\").parse(\n summary.awardPoolRemaining,\n );\n\n validateBaseReferralProgramEditionSummary(summary);\n};\n\n/**\n * Build a {@link ReferralProgramEditionSummaryRevShareLimit} from a rev-share-limit edition\n * config and the edition's leaderboard.\n */\nexport function buildEditionSummaryRevShareLimit(\n slug: ReferralProgramEditionSlug,\n displayName: string,\n rules: ReferralProgramRulesRevShareLimit,\n leaderboard: ReferrerLeaderboardRevShareLimit,\n): ReferralProgramEditionSummaryRevShareLimit {\n const status = calcReferralProgramEditionStatusRevShareLimit(\n rules,\n leaderboard.accurateAsOf,\n leaderboard.aggregatedMetrics,\n );\n const result = {\n awardModel: rules.awardModel,\n slug,\n displayName,\n status,\n rules,\n awardPoolRemaining: leaderboard.aggregatedMetrics.awardPoolRemaining,\n };\n\n validateEditionSummaryRevShareLimit(result);\n\n return result;\n}\n","import type { Address } from \"viem\";\n\nimport { type PriceUsdc, priceEth, priceUsdc } from \"@ensnode/ensnode-sdk\";\nimport { makePriceEthSchema, makePriceUsdcSchema } from \"@ensnode/ensnode-sdk/internal\";\n\nimport type { ReferrerMetrics } from \"../../referrer-metrics\";\nimport { buildReferrerMetrics, validateReferrerMetrics } from \"../../referrer-metrics\";\nimport { SECONDS_PER_YEAR } from \"../../time\";\nimport type { ReferrerRank } from \"../shared/rank\";\nimport { validateReferrerRank } from \"../shared/rank\";\nimport {\n BASE_REVENUE_CONTRIBUTION_PER_YEAR,\n isReferrerQualifiedRevShareLimit,\n type ReferralProgramRulesRevShareLimit,\n} from \"./rules\";\n\n/**\n * Extends {@link ReferrerMetrics} with computed base revenue contribution.\n */\nexport interface ReferrerMetricsRevShareLimit extends ReferrerMetrics {\n /**\n * The referrer's base revenue contribution (base-fee-only: $5 × years of incremental duration).\n * Used for qualification and award calculation in the rev-share-limit model.\n *\n * @invariant Guaranteed to be `priceUsdc(BASE_REVENUE_CONTRIBUTION_PER_YEAR.amount * BigInt(totalIncrementalDuration) / BigInt(SECONDS_PER_YEAR))`\n */\n totalBaseRevenueContribution: PriceUsdc;\n}\n\nexport const validateReferrerMetricsRevShareLimit = (\n metrics: ReferrerMetricsRevShareLimit,\n): void => {\n validateReferrerMetrics(metrics);\n\n const expectedTotalBaseRevenueContribution = priceUsdc(\n (BASE_REVENUE_CONTRIBUTION_PER_YEAR.amount * BigInt(metrics.totalIncrementalDuration)) /\n BigInt(SECONDS_PER_YEAR),\n );\n if (metrics.totalBaseRevenueContribution.amount !== expectedTotalBaseRevenueContribution.amount) {\n throw new Error(\n `ReferrerMetricsRevShareLimit: Invalid totalBaseRevenueContribution: ${metrics.totalBaseRevenueContribution.amount.toString()}, expected: ${expectedTotalBaseRevenueContribution.amount.toString()}.`,\n );\n }\n};\n\nexport const buildReferrerMetricsRevShareLimit = (\n metrics: ReferrerMetrics,\n): ReferrerMetricsRevShareLimit => {\n const totalBaseRevenueContribution = priceUsdc(\n (BASE_REVENUE_CONTRIBUTION_PER_YEAR.amount * BigInt(metrics.totalIncrementalDuration)) /\n BigInt(SECONDS_PER_YEAR),\n );\n\n const result = {\n ...metrics,\n totalBaseRevenueContribution,\n } satisfies ReferrerMetricsRevShareLimit;\n\n validateReferrerMetricsRevShareLimit(result);\n return result;\n};\n\n/**\n * Extends {@link ReferrerMetricsRevShareLimit} with rank, qualification status, and admin disqualification.\n */\nexport interface RankedReferrerMetricsRevShareLimit extends ReferrerMetricsRevShareLimit {\n /**\n * The referrer's rank on the {@link ReferrerLeaderboardRevShareLimit} relative to all other referrers.\n */\n rank: ReferrerRank;\n\n /**\n * Identifies if the referrer meets the qualifications of the {@link ReferralProgramRulesRevShareLimit} to receive a non-zero `awardPoolShare`.\n *\n * @invariant true if and only if `totalBaseRevenueContribution` is greater than or equal to\n * {@link ReferralProgramRulesRevShareLimit.minQualifiedRevenueContribution} AND\n * {@link isAdminDisqualified} is false.\n */\n isQualified: boolean;\n\n /**\n * Whether this referrer has been admin-disqualified from the edition.\n *\n * @invariant When true, {@link isQualified} is false.\n */\n isAdminDisqualified: boolean;\n\n /**\n * The reason for admin disqualification, or null if not disqualified.\n *\n * @invariant null when {@link isAdminDisqualified} is false.\n * @invariant Non-empty string when {@link isAdminDisqualified} is true.\n */\n adminDisqualificationReason: string | null;\n}\n\nexport const validateRankedReferrerMetricsRevShareLimit = (\n metrics: RankedReferrerMetricsRevShareLimit,\n rules: ReferralProgramRulesRevShareLimit,\n): void => {\n validateReferrerMetricsRevShareLimit(metrics);\n validateReferrerRank(metrics.rank);\n\n const expectedIsQualified = isReferrerQualifiedRevShareLimit(\n metrics.referrer,\n metrics.totalBaseRevenueContribution,\n rules,\n );\n if (metrics.isQualified !== expectedIsQualified) {\n throw new Error(\n `RankedReferrerMetricsRevShareLimit: Invalid isQualified: ${metrics.isQualified}, expected: ${expectedIsQualified}.`,\n );\n }\n\n const disqualification =\n rules.disqualifications.find((d) => d.referrer === metrics.referrer) ?? null;\n\n if (metrics.isAdminDisqualified !== (disqualification !== null)) {\n throw new Error(\n `RankedReferrerMetricsRevShareLimit: Invalid isAdminDisqualified: ${metrics.isAdminDisqualified}, expected: ${disqualification !== null}.`,\n );\n }\n\n const expectedReason = disqualification?.reason ?? null;\n if (metrics.adminDisqualificationReason !== expectedReason) {\n throw new Error(\n `RankedReferrerMetricsRevShareLimit: Invalid adminDisqualificationReason: ${metrics.adminDisqualificationReason}, expected: ${expectedReason}.`,\n );\n }\n};\n\nexport const buildRankedReferrerMetricsRevShareLimit = (\n referrer: ReferrerMetricsRevShareLimit,\n rank: ReferrerRank,\n rules: ReferralProgramRulesRevShareLimit,\n): RankedReferrerMetricsRevShareLimit => {\n const disqualification =\n rules.disqualifications.find((d) => d.referrer === referrer.referrer) ?? null;\n\n const result = {\n ...referrer,\n rank,\n isQualified: isReferrerQualifiedRevShareLimit(\n referrer.referrer,\n referrer.totalBaseRevenueContribution,\n rules,\n ),\n isAdminDisqualified: disqualification !== null,\n adminDisqualificationReason: disqualification?.reason ?? null,\n } satisfies RankedReferrerMetricsRevShareLimit;\n\n validateRankedReferrerMetricsRevShareLimit(result, rules);\n return result;\n};\n\n/**\n * Extends {@link RankedReferrerMetricsRevShareLimit} with approximate award value.\n */\nexport interface AwardedReferrerMetricsRevShareLimit extends RankedReferrerMetricsRevShareLimit {\n /**\n * The standard (uncapped) USDC award value for this referrer, computed as\n * `qualifiedRevenueShare × totalBaseRevenueContribution`.\n *\n * Represents what the referrer would receive if the pool were unlimited and the referrer were qualified.\n * Independent of the pool state and qualification status.\n */\n standardAwardValue: PriceUsdc;\n\n /**\n * The approximate USDC value of the referrer's award.\n *\n * This is the amount actually claimed from the pool by this referrer, capped by\n * the remaining pool at the time of their qualifying events.\n *\n * @invariant Guaranteed to be a valid PriceUsdc with amount between 0 and {@link ReferralProgramRulesRevShareLimit.totalAwardPoolValue.amount} (inclusive)\n * @invariant Always <= standardAwardValue.amount\n * @invariant Amount equal to 0 when {@link isAdminDisqualified} is true.\n */\n awardPoolApproxValue: PriceUsdc;\n}\n\nexport const validateAwardedReferrerMetricsRevShareLimit = (\n metrics: AwardedReferrerMetricsRevShareLimit,\n rules: ReferralProgramRulesRevShareLimit,\n): void => {\n validateRankedReferrerMetricsRevShareLimit(metrics, rules);\n\n makePriceUsdcSchema(\"AwardedReferrerMetricsRevShareLimit.standardAwardValue\").parse(\n metrics.standardAwardValue,\n );\n\n makePriceUsdcSchema(\"AwardedReferrerMetricsRevShareLimit.awardPoolApproxValue\").parse(\n metrics.awardPoolApproxValue,\n );\n\n if (metrics.isAdminDisqualified && metrics.awardPoolApproxValue.amount !== 0n) {\n throw new Error(\n `AwardedReferrerMetricsRevShareLimit: awardPoolApproxValue.amount must be 0n for admin-disqualified referrers, got ${metrics.awardPoolApproxValue.amount.toString()}.`,\n );\n }\n\n if (metrics.awardPoolApproxValue.amount > rules.totalAwardPoolValue.amount) {\n throw new Error(\n `AwardedReferrerMetricsRevShareLimit: awardPoolApproxValue.amount ${metrics.awardPoolApproxValue.amount.toString()} exceeds totalAwardPoolValue.amount ${rules.totalAwardPoolValue.amount.toString()}.`,\n );\n }\n\n if (metrics.awardPoolApproxValue.amount > metrics.standardAwardValue.amount) {\n throw new Error(\n `AwardedReferrerMetricsRevShareLimit: awardPoolApproxValue.amount ${metrics.awardPoolApproxValue.amount.toString()} exceeds standardAwardValue.amount ${metrics.standardAwardValue.amount.toString()}.`,\n );\n }\n};\n\nexport const buildAwardedReferrerMetricsRevShareLimit = (\n referrer: RankedReferrerMetricsRevShareLimit,\n standardAwardValue: PriceUsdc,\n awardPoolApproxValue: PriceUsdc,\n rules: ReferralProgramRulesRevShareLimit,\n): AwardedReferrerMetricsRevShareLimit => {\n const result = {\n ...referrer,\n standardAwardValue,\n awardPoolApproxValue,\n } satisfies AwardedReferrerMetricsRevShareLimit;\n\n validateAwardedReferrerMetricsRevShareLimit(result, rules);\n return result;\n};\n\n/**\n * Extends {@link AwardedReferrerMetricsRevShareLimit} but with rank set to null to represent\n * a referrer who is not on the leaderboard (has zero referrals within the rules associated with the leaderboard).\n */\nexport interface UnrankedReferrerMetricsRevShareLimit\n extends Omit<AwardedReferrerMetricsRevShareLimit, \"rank\" | \"isQualified\"> {\n /**\n * The referrer is not on the leaderboard and therefore has no rank.\n */\n rank: null;\n\n /**\n * Always false for unranked referrers.\n */\n isQualified: false;\n}\n\nexport const validateUnrankedReferrerMetricsRevShareLimit = (\n metrics: UnrankedReferrerMetricsRevShareLimit,\n rules: ReferralProgramRulesRevShareLimit,\n): void => {\n validateReferrerMetrics(metrics);\n\n if (metrics.rank !== null) {\n throw new Error(\n `Invalid UnrankedReferrerMetricsRevShareLimit: rank must be null, got: ${metrics.rank}.`,\n );\n }\n if (metrics.isQualified !== false) {\n throw new Error(\n `Invalid UnrankedReferrerMetricsRevShareLimit: isQualified must be false, got: ${metrics.isQualified}.`,\n );\n }\n\n const disqualification =\n rules.disqualifications.find((d) => d.referrer === metrics.referrer) ?? null;\n\n if (metrics.isAdminDisqualified !== (disqualification !== null)) {\n throw new Error(\n `Invalid UnrankedReferrerMetricsRevShareLimit: isAdminDisqualified: ${metrics.isAdminDisqualified}, expected: ${disqualification !== null}.`,\n );\n }\n\n const expectedReason = disqualification?.reason ?? null;\n if (metrics.adminDisqualificationReason !== expectedReason) {\n throw new Error(\n `Invalid UnrankedReferrerMetricsRevShareLimit: adminDisqualificationReason: ${metrics.adminDisqualificationReason}, expected: ${expectedReason}.`,\n );\n }\n\n if (metrics.totalReferrals !== 0) {\n throw new Error(\n `Invalid UnrankedReferrerMetricsRevShareLimit: totalReferrals must be 0, got: ${metrics.totalReferrals}.`,\n );\n }\n if (metrics.totalIncrementalDuration !== 0) {\n throw new Error(\n `Invalid UnrankedReferrerMetricsRevShareLimit: totalIncrementalDuration must be 0, got: ${metrics.totalIncrementalDuration}.`,\n );\n }\n\n makePriceEthSchema(\"UnrankedReferrerMetricsRevShareLimit.totalRevenueContribution\").parse(\n metrics.totalRevenueContribution,\n );\n if (metrics.totalRevenueContribution.amount !== 0n) {\n throw new Error(\n `Invalid UnrankedReferrerMetricsRevShareLimit: totalRevenueContribution.amount must be 0n, got: ${metrics.totalRevenueContribution.amount.toString()}.`,\n );\n }\n\n makePriceUsdcSchema(\"UnrankedReferrerMetricsRevShareLimit.totalBaseRevenueContribution\").parse(\n metrics.totalBaseRevenueContribution,\n );\n if (metrics.totalBaseRevenueContribution.amount !== 0n) {\n throw new Error(\n `Invalid UnrankedReferrerMetricsRevShareLimit: totalBaseRevenueContribution.amount must be 0n, got: ${metrics.totalBaseRevenueContribution.amount.toString()}.`,\n );\n }\n\n makePriceUsdcSchema(\"UnrankedReferrerMetricsRevShareLimit.standardAwardValue\").parse(\n metrics.standardAwardValue,\n );\n if (metrics.standardAwardValue.amount !== 0n) {\n throw new Error(\n `Invalid UnrankedReferrerMetricsRevShareLimit: standardAwardValue.amount must be 0n, got: ${metrics.standardAwardValue.amount.toString()}.`,\n );\n }\n\n makePriceUsdcSchema(\"UnrankedReferrerMetricsRevShareLimit.awardPoolApproxValue\").parse(\n metrics.awardPoolApproxValue,\n );\n if (metrics.awardPoolApproxValue.amount !== 0n) {\n throw new Error(\n `Invalid UnrankedReferrerMetricsRevShareLimit: awardPoolApproxValue.amount must be 0n, got: ${metrics.awardPoolApproxValue.amount.toString()}.`,\n );\n }\n};\n\n/**\n * Build an unranked zero-metrics rev-share-limit referrer record for an address not on the leaderboard.\n */\nexport const buildUnrankedReferrerMetricsRevShareLimit = (\n referrer: Address,\n rules: ReferralProgramRulesRevShareLimit,\n): UnrankedReferrerMetricsRevShareLimit => {\n const metrics = buildReferrerMetrics(referrer, 0, 0, priceEth(0n));\n\n const disqualification =\n rules.disqualifications.find((d) => d.referrer === metrics.referrer) ?? null;\n\n const result = {\n ...metrics,\n totalBaseRevenueContribution: priceUsdc(0n),\n rank: null,\n isQualified: false,\n standardAwardValue: priceUsdc(0n),\n awardPoolApproxValue: priceUsdc(0n),\n isAdminDisqualified: disqualification !== null,\n adminDisqualificationReason: disqualification?.reason ?? null,\n } satisfies UnrankedReferrerMetricsRevShareLimit;\n\n validateUnrankedReferrerMetricsRevShareLimit(result, rules);\n return result;\n};\n","import type { ReferralEvent } from \"./referral-event\";\n\n/**\n * Sorts referral events into the chronological order in which each registrar action\n * was executed onchain.\n */\nexport function sortReferralEvents(events: ReferralEvent[]): ReferralEvent[] {\n return [...events].sort((a, b) => (a.id < b.id ? -1 : a.id > b.id ? 1 : 0));\n}\n","import type { Address } from \"viem\";\n\nimport {\n type Duration,\n priceEth,\n priceUsdc,\n scalePrice,\n type UnixTimestamp,\n} from \"@ensnode/ensnode-sdk\";\n\nimport { normalizeAddress } from \"../../address\";\nimport { buildReferrerMetrics } from \"../../referrer-metrics\";\nimport { SECONDS_PER_YEAR } from \"../../time\";\nimport type { ReferralProgramAwardModels } from \"../shared/rules\";\nimport type { AggregatedReferrerMetricsRevShareLimit } from \"./aggregations\";\nimport { buildAggregatedReferrerMetricsRevShareLimit } from \"./aggregations\";\nimport type { AwardedReferrerMetricsRevShareLimit } from \"./metrics\";\nimport {\n buildAwardedReferrerMetricsRevShareLimit,\n buildRankedReferrerMetricsRevShareLimit,\n buildReferrerMetricsRevShareLimit,\n} from \"./metrics\";\nimport type { ReferralEvent } from \"./referral-event\";\nimport {\n BASE_REVENUE_CONTRIBUTION_PER_YEAR,\n isReferrerQualifiedRevShareLimit,\n type ReferralProgramRulesRevShareLimit,\n} from \"./rules\";\nimport { sortReferralEvents } from \"./sort-referral-events\";\n\n/**\n * Represents a leaderboard with the rev-share-limit award model for any number of referrers.\n */\nexport interface ReferrerLeaderboardRevShareLimit {\n /**\n * Discriminant identifying this as a rev-share-limit leaderboard.\n *\n * @invariant Always equals `rules.awardModel` ({@link ReferralProgramAwardModels.RevShareLimit}).\n */\n awardModel: typeof ReferralProgramAwardModels.RevShareLimit;\n\n /**\n * The rules of the referral program that generated the {@link ReferrerLeaderboardRevShareLimit}.\n */\n rules: ReferralProgramRulesRevShareLimit;\n\n /**\n * The {@link AggregatedReferrerMetricsRevShareLimit} for all {@link AwardedReferrerMetricsRevShareLimit} values in `referrers`.\n */\n aggregatedMetrics: AggregatedReferrerMetricsRevShareLimit;\n\n /**\n * Ordered map containing {@link AwardedReferrerMetricsRevShareLimit} for all referrers with 1 or more\n * `totalReferrals` within the `rules` as of `accurateAsOf`.\n *\n * @invariant Map entries are ordered by `rank` (ascending).\n * @invariant Map is empty if there are no referrers with 1 or more `totalReferrals`\n * within the `rules` as of `accurateAsOf`.\n * @invariant If a fully-lowercase `Address` is not a key in this map then that `Address` had\n * 0 `totalReferrals`, `totalIncrementalDuration`, and `totalRevenueContribution` within the\n * `rules` as of `accurateAsOf`.\n * @invariant Each value in this map is guaranteed to have a non-zero\n * `totalReferrals` and `totalIncrementalDuration`.\n */\n referrers: Map<Address, AwardedReferrerMetricsRevShareLimit>;\n\n /**\n * The {@link UnixTimestamp} of when the data used to build the {@link ReferrerLeaderboardRevShareLimit} was accurate as of.\n */\n accurateAsOf: UnixTimestamp;\n}\n\n/**\n * Per-referrer mutable state used during sequential race processing.\n */\ninterface ReferrerRaceState {\n totalReferrals: number;\n totalIncrementalDuration: Duration;\n totalRevenueContributionAmount: bigint;\n /** Whether this referrer has ever crossed the qualification threshold. */\n wasQualified: boolean;\n /** Amount actually claimed from the award pool. */\n qualifiedAwardValueAmount: bigint;\n}\n\n/**\n * Builds a {@link ReferrerLeaderboardRevShareLimit} using a sequential \"first-come, first-served\"\n * race algorithm over individual referral events.\n *\n * Events are processed in chronological order. When a referrer first crosses the qualification\n * threshold, they claim ALL accumulated standard award value at once (capped by remaining pool).\n * After qualifying, each subsequent event claims that event's incremental standard award (also\n * capped). Once the pool reaches $0, no further awards are issued to anyone.\n *\n * @param events - Raw referral events from the database (unsorted; will be sorted internally).\n * @param rules - The {@link ReferralProgramRulesRevShareLimit} defining the program parameters.\n * @param accurateAsOf - Timestamp indicating data freshness.\n */\nexport const buildReferrerLeaderboardRevShareLimit = (\n events: ReferralEvent[],\n rules: ReferralProgramRulesRevShareLimit,\n accurateAsOf: UnixTimestamp,\n): ReferrerLeaderboardRevShareLimit => {\n // 1. Sort events into chronological order by onchain execution order.\n const sortedEvents = sortReferralEvents(events);\n\n // 2. Process events sequentially to run the race.\n const referrerStates = new Map<Address, ReferrerRaceState>();\n let poolRemainingAmount = rules.totalAwardPoolValue.amount;\n\n for (const event of sortedEvents) {\n const referrer = normalizeAddress(event.referrer);\n\n let state = referrerStates.get(referrer);\n if (!state) {\n state = {\n totalReferrals: 0,\n totalIncrementalDuration: 0,\n totalRevenueContributionAmount: 0n,\n wasQualified: false,\n qualifiedAwardValueAmount: 0n,\n };\n referrerStates.set(referrer, state);\n }\n\n // Update raw totals.\n state.totalReferrals += 1;\n state.totalIncrementalDuration += event.incrementalDuration;\n state.totalRevenueContributionAmount += event.incrementalRevenueContribution.amount;\n\n // Compute totalBaseRevenue from aggregated duration (single division — avoids per-event\n // truncation that would compound into a sum lower than the correct aggregated value).\n const totalBaseRevenueAmount =\n (BASE_REVENUE_CONTRIBUTION_PER_YEAR.amount * BigInt(state.totalIncrementalDuration)) /\n BigInt(SECONDS_PER_YEAR);\n\n // Determine if newly qualifying or already qualified.\n const isNowQualified = isReferrerQualifiedRevShareLimit(\n referrer,\n priceUsdc(totalBaseRevenueAmount),\n rules,\n );\n\n if (isNowQualified && !state.wasQualified) {\n // First time crossing the qualification threshold: claim all accumulated standard award.\n // Compute from aggregated totals to match the single-division used in final output.\n const accumulatedStandardAwardAmount = scalePrice(\n priceUsdc(totalBaseRevenueAmount),\n rules.qualifiedRevenueShare,\n ).amount;\n const claimAmount =\n accumulatedStandardAwardAmount < poolRemainingAmount\n ? accumulatedStandardAwardAmount\n : poolRemainingAmount;\n state.qualifiedAwardValueAmount += claimAmount;\n poolRemainingAmount -= claimAmount;\n state.wasQualified = true;\n } else if (state.wasQualified) {\n // Already qualified: claim this event's incremental standard award.\n const incrementalBaseRevenueAmount =\n (BASE_REVENUE_CONTRIBUTION_PER_YEAR.amount * BigInt(event.incrementalDuration)) /\n BigInt(SECONDS_PER_YEAR);\n const incrementalStandardAwardAmount = scalePrice(\n priceUsdc(incrementalBaseRevenueAmount),\n rules.qualifiedRevenueShare,\n ).amount;\n const claimAmount =\n incrementalStandardAwardAmount < poolRemainingAmount\n ? incrementalStandardAwardAmount\n : poolRemainingAmount;\n state.qualifiedAwardValueAmount += claimAmount;\n poolRemainingAmount -= claimAmount;\n }\n // If not yet qualified, nothing is claimed from the pool.\n }\n\n // 3. Sort referrers to assign ranks:\n // 1. qualifiedAwardValue (awardPoolApproxValue) desc — actual pool claims, race winners first\n // 2. totalIncrementalDuration desc — tie-break for pool-depleted referrers\n // 3. referrer address desc — deterministic tie-break\n // Both `a` and `b` are keys from `referrerStates`, so lookups are always defined.\n const sortedAddresses = [...referrerStates.keys()].sort((a, b) => {\n const stateA = referrerStates.get(a) as ReferrerRaceState;\n const stateB = referrerStates.get(b) as ReferrerRaceState;\n\n // Primary: qualifiedAwardValue desc (bigint comparison)\n if (stateB.qualifiedAwardValueAmount !== stateA.qualifiedAwardValueAmount) {\n return stateB.qualifiedAwardValueAmount > stateA.qualifiedAwardValueAmount ? 1 : -1;\n }\n\n // Secondary: totalIncrementalDuration desc (used directly as the tie-breaker).\n if (stateB.totalIncrementalDuration !== stateA.totalIncrementalDuration) {\n return stateB.totalIncrementalDuration - stateA.totalIncrementalDuration;\n }\n\n // Tertiary: referrer address desc (lexicographic)\n if (b > a) return 1;\n if (b < a) return -1;\n return 0;\n });\n\n // 4. Build AwardedReferrerMetricsRevShareLimit for each referrer.\n const awardedReferrers: AwardedReferrerMetricsRevShareLimit[] = sortedAddresses.map(\n (referrerAddr, index) => {\n // `sortedAddresses` is derived directly from `referrerStates.keys()`, so\n // the state entry is always present.\n const state = referrerStates.get(referrerAddr) as ReferrerRaceState;\n\n const baseMetrics = buildReferrerMetrics(\n referrerAddr,\n state.totalReferrals,\n state.totalIncrementalDuration,\n priceEth(state.totalRevenueContributionAmount),\n );\n\n const revShareMetrics = buildReferrerMetricsRevShareLimit(baseMetrics);\n\n const rankedMetrics = buildRankedReferrerMetricsRevShareLimit(\n revShareMetrics,\n index + 1,\n rules,\n );\n\n const standardAwardValue = scalePrice(\n revShareMetrics.totalBaseRevenueContribution,\n rules.qualifiedRevenueShare,\n );\n\n return buildAwardedReferrerMetricsRevShareLimit(\n rankedMetrics,\n standardAwardValue,\n priceUsdc(state.qualifiedAwardValueAmount),\n rules,\n );\n },\n );\n\n const awardPoolRemaining = priceUsdc(poolRemainingAmount);\n\n const aggregatedMetrics = buildAggregatedReferrerMetricsRevShareLimit(\n awardedReferrers,\n awardPoolRemaining,\n );\n\n const referrers = new Map(awardedReferrers.map((r) => [r.referrer, r]));\n\n return { awardModel: rules.awardModel, rules, aggregatedMetrics, referrers, accurateAsOf };\n};\n","import {\n type BaseReferrerLeaderboardPage,\n type ReferrerLeaderboardPageContext,\n sliceReferrers,\n} from \"../shared/leaderboard-page\";\nimport type { ReferralProgramAwardModels } from \"../shared/rules\";\nimport type { AggregatedReferrerMetricsRevShareLimit } from \"./aggregations\";\nimport type { ReferrerLeaderboardRevShareLimit } from \"./leaderboard\";\nimport type { AwardedReferrerMetricsRevShareLimit } from \"./metrics\";\nimport type { ReferralProgramRulesRevShareLimit } from \"./rules\";\nimport { calcReferralProgramEditionStatusRevShareLimit } from \"./status\";\n\n/**\n * A page of referrers from the rev-share-limit referrer leaderboard.\n */\nexport interface ReferrerLeaderboardPageRevShareLimit extends BaseReferrerLeaderboardPage {\n /**\n * Discriminant identifying this as a page from a rev-share-limit leaderboard.\n *\n * @invariant Always equals `rules.awardModel` ({@link ReferralProgramAwardModels.RevShareLimit}).\n */\n awardModel: typeof ReferralProgramAwardModels.RevShareLimit;\n\n /**\n * The {@link ReferralProgramRulesRevShareLimit} used to generate the {@link ReferrerLeaderboardRevShareLimit}\n * that this {@link ReferrerLeaderboardPageRevShareLimit} comes from.\n */\n rules: ReferralProgramRulesRevShareLimit;\n\n /**\n * Ordered list of {@link AwardedReferrerMetricsRevShareLimit} for the {@link ReferrerLeaderboardPageRevShareLimit}\n * described by {@link pageContext} within the related {@link ReferrerLeaderboard}.\n *\n * @invariant Array will be empty if `pageContext.totalRecords` is 0.\n * @invariant Array entries are ordered by `rank` (ascending).\n */\n referrers: AwardedReferrerMetricsRevShareLimit[];\n\n /**\n * The aggregated metrics for all referrers on the leaderboard.\n */\n aggregatedMetrics: AggregatedReferrerMetricsRevShareLimit;\n}\n\nexport function buildLeaderboardPageRevShareLimit(\n pageContext: ReferrerLeaderboardPageContext,\n leaderboard: ReferrerLeaderboardRevShareLimit,\n): ReferrerLeaderboardPageRevShareLimit {\n const status = calcReferralProgramEditionStatusRevShareLimit(\n leaderboard.rules,\n leaderboard.accurateAsOf,\n leaderboard.aggregatedMetrics,\n );\n return {\n awardModel: leaderboard.awardModel,\n rules: leaderboard.rules,\n referrers: sliceReferrers(leaderboard.referrers, pageContext),\n aggregatedMetrics: leaderboard.aggregatedMetrics,\n pageContext,\n status,\n accurateAsOf: leaderboard.accurateAsOf,\n };\n}\n","import {\n deserializeReferralProgramEditionConfigSetArray,\n deserializeReferralProgramEditionSummariesResponse,\n deserializeReferrerLeaderboardPageResponse,\n deserializeReferrerMetricsEditionsResponse,\n type ReferralProgramEditionSummariesResponse,\n type ReferrerLeaderboardPageRequest,\n type ReferrerLeaderboardPageResponse,\n type ReferrerMetricsEditionsRequest,\n type ReferrerMetricsEditionsResponse,\n type SerializedReferralProgramEditionSummariesResponse,\n type SerializedReferrerLeaderboardPageResponse,\n type SerializedReferrerMetricsEditionsResponse,\n} from \"./api\";\nimport {\n buildReferralProgramEditionConfigSet,\n type ReferralProgramEditionConfigSet,\n} from \"./edition\";\n\n/**\n * Default ENSNode API endpoint URL\n */\nexport const DEFAULT_ENSNODE_API_URL = \"https://api.alpha.ensnode.io\" as const;\n\n/**\n * Configuration options for ENS Referrals API client\n */\nexport interface ClientOptions {\n /** The ENSNode API URL */\n url: URL;\n}\n\n/**\n * ENS Referrals API Client\n *\n * Provides access to ENS Referrals data and leaderboard information.\n *\n * @example\n * ```typescript\n * // Create client with default options\n * const client = new ENSReferralsClient();\n *\n * // Get referrer leaderboard for December 2025 edition\n * const leaderboardPage = await client.getReferrerLeaderboardPage({\n * edition: \"2025-12\",\n * page: 1,\n * recordsPerPage: 25\n * });\n * ```\n *\n * @example\n * ```typescript\n * // Custom configuration\n * const client = new ENSReferralsClient({\n * url: new URL(\"https://my-ensnode-instance.com\"),\n * });\n * ```\n */\nexport class ENSReferralsClient {\n private readonly options: ClientOptions;\n\n static defaultOptions(): ClientOptions {\n return {\n url: new URL(DEFAULT_ENSNODE_API_URL),\n };\n }\n\n constructor(options: Partial<ClientOptions> = {}) {\n this.options = {\n ...ENSReferralsClient.defaultOptions(),\n ...options,\n };\n }\n\n getOptions(): Readonly<ClientOptions> {\n return Object.freeze({\n url: new URL(this.options.url.href),\n });\n }\n\n /**\n * Get Referral Program Edition Config Set\n *\n * Fetches and deserializes a referral program edition config set from a remote URL.\n *\n * @param url - The URL to fetch the edition config set from\n * @returns A ReferralProgramEditionConfigSet (Map of edition slugs to edition configurations)\n *\n * @remarks Editions whose `rules.awardModel` is not recognized by this client version are\n * preserved as {@link ReferralProgramRulesUnrecognized}. The returned map includes all\n * editions — recognized and unrecognized alike. Callers should check `editionConfig.rules.awardModel`\n * and skip editions with `\"unrecognized\"` as appropriate. At least one edition of any kind must\n * be present, otherwise deserialization throws.\n *\n * @throws if the fetch fails\n * @throws if the response is not valid JSON\n * @throws if the data doesn't match the expected schema\n *\n * @example\n * ```typescript\n * const url = new URL(\"https://example.com/editions.json\");\n * const editionConfigSet = await ENSReferralsClient.getReferralProgramEditionConfigSet(url);\n * console.log(`Loaded ${editionConfigSet.size} editions`);\n * ```\n */\n static async getReferralProgramEditionConfigSet(\n url: URL,\n ): Promise<ReferralProgramEditionConfigSet> {\n const response = await fetch(url);\n\n if (!response.ok) {\n throw new Error(`HTTP ${response.status}: ${response.statusText}`);\n }\n\n let json: unknown;\n try {\n json = await response.json();\n } catch {\n throw new Error(\"Malformed response data: invalid JSON\");\n }\n\n const editionConfigs = deserializeReferralProgramEditionConfigSetArray(json);\n\n return buildReferralProgramEditionConfigSet(editionConfigs);\n }\n\n /**\n * Fetch Referrer Leaderboard Page\n *\n * Retrieves a paginated list of referrer leaderboard metrics for a specific referral program edition.\n *\n * @param request - Request parameters including edition and pagination\n * @param request.edition - The referral program edition slug (e.g., \"2025-12\", \"2026-03\", or any other configured edition slug)\n * @param request.page - The page number to retrieve (1-indexed, default: 1)\n * @param request.recordsPerPage - Number of records per page (default: 25, max: 100)\n * @returns {ReferrerLeaderboardPageResponse}\n *\n * @remarks If the server returns a leaderboard page whose `awardModel` is not recognized by\n * this client version, it is preserved as {@link ReferrerLeaderboardPageUnrecognized}. Callers\n * should check `response.data.awardModel` and handle the `\"unrecognized\"` case accordingly.\n *\n * @throws if the ENSNode request fails\n * @throws if the ENSNode API returns an error response\n * @throws if the ENSNode response breaks required invariants\n *\n * @example\n * ```typescript\n * // Get first page of 2025-12 leaderboard with default page size (25 records)\n * const editionSlug = \"2025-12\";\n * const response = await client.getReferrerLeaderboardPage({ edition: editionSlug });\n * if (response.responseCode === ReferrerLeaderboardPageResponseCodes.Ok) {\n * const { awardModel, pageContext, accurateAsOf } = response.data;\n * if (awardModel === ReferralProgramAwardModels.Unrecognized) {\n * console.log(`Unrecognized award model: ${response.data.originalAwardModel} — skipping`);\n * } else {\n * const { aggregatedMetrics, referrers, rules } = response.data;\n * console.log(`Edition: ${editionSlug}`);\n * console.log(`Subregistry: ${rules.subregistryId}`);\n * console.log(`Total Referrers: ${pageContext.totalRecords}`);\n * console.log(`Page ${pageContext.page} of ${pageContext.totalPages}`);\n * }\n * }\n * ```\n *\n * @example\n * ```typescript\n * // Get second page of 2026-03 with 50 records per page\n * const response = await client.getReferrerLeaderboardPage({\n * edition: \"2026-03\",\n * page: 2,\n * recordsPerPage: 50\n * });\n * ```\n *\n * @example\n * ```typescript\n * // Handle error response (e.g., unknown edition or data not available)\n * const response = await client.getReferrerLeaderboardPage({ edition: \"2025-12\" });\n *\n * if (response.responseCode === ReferrerLeaderboardPageResponseCodes.Error) {\n * console.error(response.error);\n * console.error(response.errorMessage);\n * }\n * ```\n */\n async getReferrerLeaderboardPage(\n request: ReferrerLeaderboardPageRequest,\n ): Promise<ReferrerLeaderboardPageResponse> {\n const url = new URL(`/v1/ensanalytics/referral-leaderboard`, this.options.url);\n\n url.searchParams.set(\"edition\", request.edition);\n if (request.page) url.searchParams.set(\"page\", request.page.toString());\n if (request.recordsPerPage)\n url.searchParams.set(\"recordsPerPage\", request.recordsPerPage.toString());\n\n const response = await fetch(url);\n\n // ENSNode API should always allow parsing a response as JSON object.\n // If for some reason it's not the case, throw an error.\n let responseData: unknown;\n try {\n responseData = await response.json();\n } catch {\n throw new Error(\"Malformed response data: invalid JSON\");\n }\n\n // The API can return errors with various status codes, but they're still in the\n // ReferrerLeaderboardPageResponse format with responseCode: 'error'\n // So we don't need to check response.ok here, just deserialize and let\n // the caller handle the responseCode\n\n return deserializeReferrerLeaderboardPageResponse(\n responseData as SerializedReferrerLeaderboardPageResponse,\n );\n }\n\n /**\n * Fetch Referrer Metrics for Specific Editions\n *\n * Retrieves detailed information about a specific referrer for the requested\n * referral program editions. Returns a record mapping each requested edition slug\n * to the referrer's metrics for that edition.\n *\n * The response data maps edition slugs to referrer metrics. Each edition's entry is a\n * {@link ReferrerEditionMetrics} discriminated union. Narrow on `awardModel` first to\n * exclude unrecognized models, then on `type` to distinguish ranked from unranked:\n *\n * - `awardModel: \"unrecognized\"` ({@link ReferrerEditionMetricsUnrecognized}): the server\n * returned an award model this client does not recognize. Only `originalAwardModel` is\n * available; no model-specific fields are present.\n * - `type: \"ranked\"` ({@link ReferrerEditionMetricsTypeIds.Ranked}): the referrer appears on\n * the leaderboard. `referrer` contains rank, qualification status, and award share.\n * - `type: \"unranked\"` ({@link ReferrerEditionMetricsTypeIds.Unranked}): the referrer has no\n * activity in this edition. `referrer` contains zero-value placeholders.\n *\n * **Note:** This endpoint does not allow partial success. When `responseCode === Ok`,\n * all requested editions are guaranteed to be present in the response data. If any\n * requested edition cannot be returned, the entire request fails with an error.\n *\n * @see {@link https://www.npmjs.com/package/@namehash/ens-referrals|@namehash/ens-referrals} for calculation details\n *\n * @param request The referrer address and edition slugs to query\n * @returns {ReferrerMetricsEditionsResponse} Returns the referrer metrics for requested editions\n *\n * @remarks If the server returns metrics for an edition whose `awardModel` is not recognized by\n * this client version, that edition's entry in `response.data` is preserved as\n * {@link ReferrerEditionMetricsUnrecognized}. Callers should check each edition's `awardModel`\n * and handle the `\"unrecognized\"` case accordingly.\n *\n * @throws if the ENSNode request fails\n * @throws if the response data is malformed\n *\n * @example\n * ```typescript\n * // Get referrer metrics for specific editions\n * const response = await client.getReferrerMetricsEditions({\n * referrer: \"0x1234567890123456789012345678901234567890\",\n * editions: [\"2025-12\", \"2026-01\"]\n * });\n * if (response.responseCode === ReferrerMetricsEditionsResponseCodes.Ok) {\n * // All requested editions are present in response.data\n * for (const [editionSlug, detail] of Object.entries(response.data)) {\n * console.log(`Edition: ${editionSlug}`);\n * if (detail.awardModel === ReferralProgramAwardModels.Unrecognized) {\n * console.log(`Unrecognized award model: ${detail.originalAwardModel} — skipping`);\n * continue;\n * }\n * console.log(`Type: ${detail.type}`);\n * if (detail.type === ReferrerEditionMetricsTypeIds.Ranked) {\n * console.log(`Rank: ${detail.referrer.rank}`);\n * console.log(`Award Share: ${detail.referrer.awardPoolShare * 100}%`);\n * }\n * }\n * }\n * ```\n *\n * @example\n * ```typescript\n * // Access specific edition data directly (edition is guaranteed to exist when OK)\n * const response = await client.getReferrerMetricsEditions({\n * referrer: \"0x1234567890123456789012345678901234567890\",\n * editions: [\"2025-12\"]\n * });\n * if (response.responseCode === ReferrerMetricsEditionsResponseCodes.Ok) {\n * const detail = response.data[\"2025-12\"];\n * if (detail && detail.awardModel === ReferralProgramAwardModels.Unrecognized) {\n * console.log(`Unrecognized award model: ${detail.originalAwardModel} — skipping`);\n * } else if (detail && detail.type === ReferrerEditionMetricsTypeIds.Ranked) {\n * console.log(`Edition 2025-12 Rank: ${detail.referrer.rank}`);\n * } else if (detail) {\n * console.log(\"Referrer is not on the leaderboard for 2025-12\");\n * }\n * }\n * ```\n *\n * @example\n * ```typescript\n * // Handle error response (e.g., unknown edition or data not available)\n * const response = await client.getReferrerMetricsEditions({\n * referrer: \"0x1234567890123456789012345678901234567890\",\n * editions: [\"2025-12\", \"invalid-edition\"]\n * });\n *\n * if (response.responseCode === ReferrerMetricsEditionsResponseCodes.Error) {\n * console.error(response.error);\n * console.error(response.errorMessage);\n * }\n * ```\n */\n async getReferrerMetricsEditions(\n request: ReferrerMetricsEditionsRequest,\n ): Promise<ReferrerMetricsEditionsResponse> {\n const url = new URL(\n `/v1/ensanalytics/referrer/${encodeURIComponent(request.referrer)}`,\n this.options.url,\n );\n\n // Add editions as comma-separated query parameter\n url.searchParams.set(\"editions\", request.editions.join(\",\"));\n\n const response = await fetch(url);\n\n // ENSNode API should always allow parsing a response as JSON object.\n // If for some reason it's not the case, throw an error.\n let responseData: unknown;\n try {\n responseData = await response.json();\n } catch {\n throw new Error(\"Malformed response data: invalid JSON\");\n }\n\n // The API can return errors with various status codes, but they're still in the\n // ReferrerMetricsEditionsResponse format with responseCode: 'error'\n // So we don't need to check response.ok here, just deserialize and let\n // the caller handle the responseCode\n\n return deserializeReferrerMetricsEditionsResponse(\n responseData as SerializedReferrerMetricsEditionsResponse,\n );\n }\n\n /**\n * Get the currently configured referral program edition summaries.\n * Editions are sorted in descending order by start timestamp (most recent first).\n *\n * @returns A response containing edition summaries, or an error response if unavailable.\n *\n * @remarks Editions whose `rules.awardModel` is not recognized by this client version are\n * preserved as {@link ReferralProgramEditionSummaryUnrecognized}. The returned response includes all\n * editions — recognized and unrecognized alike. Callers should check `edition.awardModel`\n * and skip editions with `\"unrecognized\"` as appropriate. At least one edition of any kind must\n * be present, otherwise deserialization throws.\n *\n * @example\n * ```typescript\n * const response = await client.getEditionSummaries();\n *\n * if (response.responseCode === ReferralProgramEditionSummariesResponseCodes.Ok) {\n * console.log(`Found ${response.data.editions.length} editions`);\n * for (const edition of response.data.editions) {\n * console.log(`${edition.slug}: ${edition.displayName}`);\n * }\n * }\n * ```\n *\n * @example\n * ```typescript\n * // Handle error response\n * const response = await client.getEditionSummaries();\n *\n * if (response.responseCode === ReferralProgramEditionSummariesResponseCodes.Error) {\n * console.error(response.error);\n * console.error(response.errorMessage);\n * }\n * ```\n */\n async getEditionSummaries(): Promise<ReferralProgramEditionSummariesResponse> {\n const url = new URL(`/v1/ensanalytics/editions`, this.options.url);\n\n const response = await fetch(url);\n\n // ENSNode API should always allow parsing a response as JSON object.\n // If for some reason it's not the case, throw an error.\n let responseData: unknown;\n try {\n responseData = await response.json();\n } catch {\n throw new Error(\"Malformed response data: invalid JSON\");\n }\n\n // The API can return errors with various status codes, but they're still in the\n // ReferralProgramEditionSummariesResponse format with responseCode: 'error'\n // So we don't need to check response.ok here, just deserialize and let\n // the caller handle the responseCode\n\n return deserializeReferralProgramEditionSummariesResponse(\n responseData as SerializedReferralProgramEditionSummariesResponse,\n );\n }\n}\n","import {\n type ENSNamespaceId,\n getEthnamesSubregistryId,\n parseTimestamp,\n parseUsdc,\n} from \"@ensnode/ensnode-sdk\";\n\nimport { buildReferralProgramRulesPieSplit } from \"./award-models/pie-split/rules\";\nimport { buildReferralProgramRulesRevShareLimit } from \"./award-models/rev-share-limit/rules\";\nimport {\n buildReferralProgramEditionConfigSet,\n type ReferralProgramEditionConfig,\n type ReferralProgramEditionConfigSet,\n} from \"./edition\";\n\n/**\n * Returns the default referral program edition set with pre-built edition configurations.\n *\n * This function maps from an ENS namespace to the appropriate subregistry (BaseRegistrar)\n * and builds the default referral program editions for that namespace.\n *\n * @param ensNamespaceId - The ENS namespace slug to get the default editions for\n * @returns A map of edition slugs to their pre-built edition configurations\n * @throws Error if the subregistry contract is not found for the given namespace\n */\nexport function getDefaultReferralProgramEditionConfigSet(\n ensNamespaceId: ENSNamespaceId,\n): ReferralProgramEditionConfigSet {\n const subregistryId = getEthnamesSubregistryId(ensNamespaceId);\n\n const edition1: ReferralProgramEditionConfig = {\n slug: \"2025-12\",\n displayName: \"ENS Holiday Awards\",\n rules: buildReferralProgramRulesPieSplit(\n parseUsdc(\"10000\"),\n 10,\n parseTimestamp(\"2025-12-01T00:00:00Z\"),\n parseTimestamp(\"2025-12-31T23:59:59Z\"),\n subregistryId,\n new URL(\"https://ensawards.org/ens-holiday-awards-rules\"),\n true,\n ),\n };\n\n const edition2: ReferralProgramEditionConfig = {\n slug: \"2026-03\",\n displayName: \"March 2026\",\n rules: buildReferralProgramRulesRevShareLimit(\n parseUsdc(\"10000\"),\n parseUsdc(\"500\"),\n 0.5,\n parseTimestamp(\"2026-03-01T00:00:00Z\"),\n parseTimestamp(\"2026-03-31T23:59:59Z\"),\n subregistryId,\n // TODO: replace this with the dedicated March 2026 rules URL once published\n new URL(\"https://ensawards.org/ens-holiday-awards-rules\"),\n false,\n ),\n };\n\n return buildReferralProgramEditionConfigSet([edition1, edition2]);\n}\n","import type { Address } from \"viem\";\n\nimport type {\n ReferrerEditionMetricsPieSplit,\n ReferrerEditionMetricsRankedPieSplit,\n ReferrerEditionMetricsUnrankedPieSplit,\n} from \"./award-models/pie-split/edition-metrics\";\nimport { buildUnrankedReferrerMetricsPieSplit } from \"./award-models/pie-split/metrics\";\nimport { calcReferralProgramEditionStatusPieSplit } from \"./award-models/pie-split/status\";\nimport type {\n ReferrerEditionMetricsRankedRevShareLimit,\n ReferrerEditionMetricsRevShareLimit,\n ReferrerEditionMetricsUnrankedRevShareLimit,\n} from \"./award-models/rev-share-limit/edition-metrics\";\nimport { buildUnrankedReferrerMetricsRevShareLimit } from \"./award-models/rev-share-limit/metrics\";\nimport { calcReferralProgramEditionStatusRevShareLimit } from \"./award-models/rev-share-limit/status\";\nimport {\n ReferrerEditionMetricsTypeIds,\n type ReferrerEditionMetricsUnrecognized,\n} from \"./award-models/shared/edition-metrics\";\nimport { ReferralProgramAwardModels } from \"./award-models/shared/rules\";\nimport type { ReferrerLeaderboard } from \"./leaderboard\";\n\n/**\n * Referrer edition metrics data for a specific referrer address.\n *\n * Use `awardModel` to narrow the award model variant, then `type` to narrow ranked vs unranked.\n * When `awardModel` is `\"unrecognized\"`, the data was produced by a server running a newer\n * version — use {@link ReferrerEditionMetricsUnrecognized} to access `originalAwardModel`.\n */\nexport type ReferrerEditionMetrics =\n | ReferrerEditionMetricsPieSplit\n | ReferrerEditionMetricsRevShareLimit\n | ReferrerEditionMetricsUnrecognized;\n\n/**\n * Get the edition metrics for a specific referrer from the leaderboard.\n *\n * Returns a {@link ReferrerEditionMetricsPieSplit} or {@link ReferrerEditionMetricsRevShareLimit}\n * with `type: \"ranked\"` if the referrer is on the leaderboard, or `type: \"unranked\"` otherwise.\n *\n * @param referrer - The referrer address to look up\n * @param leaderboard - The referrer leaderboard to query\n * @returns The appropriate {@link ReferrerEditionMetrics}\n */\nexport const getReferrerEditionMetrics = (\n referrer: Address,\n leaderboard: ReferrerLeaderboard,\n): ReferrerEditionMetrics => {\n switch (leaderboard.awardModel) {\n case ReferralProgramAwardModels.PieSplit: {\n const status = calcReferralProgramEditionStatusPieSplit(\n leaderboard.rules,\n leaderboard.accurateAsOf,\n );\n const awardedReferrerMetrics = leaderboard.referrers.get(referrer);\n if (awardedReferrerMetrics) {\n return {\n awardModel: leaderboard.awardModel,\n type: ReferrerEditionMetricsTypeIds.Ranked,\n rules: leaderboard.rules,\n referrer: awardedReferrerMetrics,\n aggregatedMetrics: leaderboard.aggregatedMetrics,\n status,\n accurateAsOf: leaderboard.accurateAsOf,\n } satisfies ReferrerEditionMetricsRankedPieSplit;\n }\n return {\n awardModel: leaderboard.awardModel,\n type: ReferrerEditionMetricsTypeIds.Unranked,\n rules: leaderboard.rules,\n referrer: buildUnrankedReferrerMetricsPieSplit(referrer),\n aggregatedMetrics: leaderboard.aggregatedMetrics,\n status,\n accurateAsOf: leaderboard.accurateAsOf,\n } satisfies ReferrerEditionMetricsUnrankedPieSplit;\n }\n\n case ReferralProgramAwardModels.RevShareLimit: {\n const status = calcReferralProgramEditionStatusRevShareLimit(\n leaderboard.rules,\n leaderboard.accurateAsOf,\n leaderboard.aggregatedMetrics,\n );\n const awardedReferrerMetrics = leaderboard.referrers.get(referrer);\n if (awardedReferrerMetrics) {\n return {\n awardModel: leaderboard.awardModel,\n type: ReferrerEditionMetricsTypeIds.Ranked,\n rules: leaderboard.rules,\n referrer: awardedReferrerMetrics,\n aggregatedMetrics: leaderboard.aggregatedMetrics,\n status,\n accurateAsOf: leaderboard.accurateAsOf,\n } satisfies ReferrerEditionMetricsRankedRevShareLimit;\n }\n return {\n awardModel: leaderboard.awardModel,\n type: ReferrerEditionMetricsTypeIds.Unranked,\n rules: leaderboard.rules,\n referrer: buildUnrankedReferrerMetricsRevShareLimit(referrer, leaderboard.rules),\n aggregatedMetrics: leaderboard.aggregatedMetrics,\n status,\n accurateAsOf: leaderboard.accurateAsOf,\n } satisfies ReferrerEditionMetricsUnrankedRevShareLimit;\n }\n\n default: {\n const _exhaustiveCheck: never = leaderboard;\n throw new Error(\n `Unknown award model: ${(_exhaustiveCheck as ReferrerLeaderboard).awardModel}`,\n );\n }\n }\n};\n","import {\n buildEditionSummaryPieSplit,\n type ReferralProgramEditionSummaryPieSplit,\n} from \"./award-models/pie-split/edition-summary\";\nimport {\n buildEditionSummaryRevShareLimit,\n type ReferralProgramEditionSummaryRevShareLimit,\n} from \"./award-models/rev-share-limit/edition-summary\";\nimport type { ReferralProgramEditionSummaryUnrecognized } from \"./award-models/shared/edition-summary\";\nimport { ReferralProgramAwardModels } from \"./award-models/shared/rules\";\nimport type { ReferralProgramEditionConfig } from \"./edition\";\nimport type { ReferrerLeaderboard } from \"./leaderboard\";\n\n/**\n * Runtime summary of a referral program edition, enriched with current status and pool data.\n *\n * Use `awardModel` to discriminate between variants at runtime.\n */\nexport type ReferralProgramEditionSummary =\n | ReferralProgramEditionSummaryPieSplit\n | ReferralProgramEditionSummaryRevShareLimit\n | ReferralProgramEditionSummaryUnrecognized;\n\n/**\n * Build a runtime edition summary from an edition config and the edition's leaderboard.\n * Dispatches to the appropriate per-model builder based on `leaderboard.awardModel`.\n *\n * @param config - The edition configuration (provides `slug` and `displayName`).\n * @param leaderboard - The resolved leaderboard for this edition.\n */\nexport function buildEditionSummary(\n config: ReferralProgramEditionConfig,\n leaderboard: ReferrerLeaderboard,\n): ReferralProgramEditionSummary {\n const { slug, displayName } = config;\n\n switch (leaderboard.awardModel) {\n case ReferralProgramAwardModels.PieSplit:\n return buildEditionSummaryPieSplit(slug, displayName, leaderboard.rules, leaderboard);\n\n case ReferralProgramAwardModels.RevShareLimit:\n return buildEditionSummaryRevShareLimit(slug, displayName, leaderboard.rules, leaderboard);\n\n default: {\n const _exhaustiveCheck: never = leaderboard;\n throw new Error(\n `Unknown award model: ${(_exhaustiveCheck as ReferrerLeaderboard).awardModel}`,\n );\n }\n }\n}\n","import {\n buildLeaderboardPagePieSplit,\n type ReferrerLeaderboardPagePieSplit,\n} from \"./award-models/pie-split/leaderboard-page\";\nimport {\n buildLeaderboardPageRevShareLimit,\n type ReferrerLeaderboardPageRevShareLimit,\n} from \"./award-models/rev-share-limit/leaderboard-page\";\nimport {\n buildReferrerLeaderboardPageContext,\n type ReferrerLeaderboardPageParams,\n type ReferrerLeaderboardPageUnrecognized,\n} from \"./award-models/shared/leaderboard-page\";\nimport { ReferralProgramAwardModels } from \"./award-models/shared/rules\";\nimport type { ReferrerLeaderboard } from \"./leaderboard\";\n\n/**\n * A page of referrers from the referrer leaderboard.\n *\n * Use `awardModel` to narrow the specific variant at runtime. Within each variant,\n * `rules`, `referrers`, and `aggregatedMetrics` are all guaranteed to be from the same model.\n * When `awardModel` is `\"unrecognized\"`, the page was produced by a server running a newer\n * version — use {@link ReferrerLeaderboardPageUnrecognized} to access `originalAwardModel`.\n */\nexport type ReferrerLeaderboardPage =\n | ReferrerLeaderboardPagePieSplit\n | ReferrerLeaderboardPageRevShareLimit\n | ReferrerLeaderboardPageUnrecognized;\n\nexport const getReferrerLeaderboardPage = (\n pageParams: ReferrerLeaderboardPageParams,\n leaderboard: ReferrerLeaderboard,\n): ReferrerLeaderboardPage => {\n const pageContext = buildReferrerLeaderboardPageContext(pageParams, leaderboard);\n\n switch (leaderboard.awardModel) {\n case ReferralProgramAwardModels.PieSplit:\n return buildLeaderboardPagePieSplit(pageContext, leaderboard);\n case ReferralProgramAwardModels.RevShareLimit:\n return buildLeaderboardPageRevShareLimit(pageContext, leaderboard);\n\n default: {\n const _exhaustiveCheck: never = leaderboard;\n throw new Error(\n `Unknown award model: ${(_exhaustiveCheck as ReferrerLeaderboard).awardModel}`,\n );\n }\n }\n};\n","import { type Address, getAddress } from \"viem\";\n\n/**\n * Build a URL to the official ENS manager app\n * where the given {@link Address} is set as the referrer.\n */\nexport function buildEnsReferralUrl(address: Address): URL {\n const ensAppUrl = new URL(\"https://app.ens.domains\");\n\n ensAppUrl.searchParams.set(\"referrer\", getAddress(address));\n\n return ensAppUrl;\n}\n"],"mappings":"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","names":["import_v4","import_v4","CAIP2","name","regex","parameters","delimiter","values","CAIP10","AssetName","CAIP19AssetType","CAIP19AssetId","CAIP","assetName","assetType","assetId","splitParams","id","spec","split","getParams","arr","params","forEach","value","index","joinParams","Object","map","parameter","param","join","isValidId","RegExp","test","length","keys","matches","filter","x","ChainId","parse","namespace","reference","Error","toJSON","format","toString","AccountId","chainId","address","AssetType","AssetId","tokenId","import_viem","import_viem","BaseRegistrar","BaseRegistrar","import_viem","Registry","Registry","BaseRegistrar","import_chains","Registry","NameWrapper","Registry","Registry","BaseRegistrar","NameWrapper","import_chains","Registry","BaseRegistrar","NameWrapper","import_viem","import_chains","Registry","BaseRegistrar","import_viem","currencyInfo","import_v4","import_v4","import_v4","z","z","import_v4","z","z","parsed","z","parsed","base","import_viem"]}
|