sablier 3.12.1 → 4.0.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/CHANGELOG.md +27 -0
- package/dist/cjs/evm/chains/builder.js +8 -1
- package/dist/cjs/evm/chains/builder.js.map +1 -1
- package/dist/cjs/evm/chains/chains.js +2 -2
- package/dist/cjs/evm/chains/chains.js.map +1 -1
- package/dist/cjs/evm/chains/custom.js +7 -27
- package/dist/cjs/evm/chains/custom.js.map +1 -1
- package/dist/cjs/evm/chains/specs.js +8 -24
- package/dist/cjs/evm/chains/specs.js.map +1 -1
- package/dist/cjs/evm/comptroller/deployments.js +0 -6
- package/dist/cjs/evm/comptroller/deployments.js.map +1 -1
- package/dist/cjs/evm/contracts/queries.js +1 -1
- package/dist/cjs/evm/contracts/queries.js.map +1 -1
- package/dist/cjs/evm/releases/airdrops/v2.0/deployments.js +0 -9
- package/dist/cjs/evm/releases/airdrops/v2.0/deployments.js.map +1 -1
- package/dist/cjs/evm/releases/airdrops/v3.0/deployments.js +0 -23
- package/dist/cjs/evm/releases/airdrops/v3.0/deployments.js.map +1 -1
- package/dist/cjs/evm/releases/flow/v2.0/deployments.js +0 -4
- package/dist/cjs/evm/releases/flow/v2.0/deployments.js.map +1 -1
- package/dist/cjs/evm/releases/flow/v3.0/deployments.js +0 -8
- package/dist/cjs/evm/releases/flow/v3.0/deployments.js.map +1 -1
- package/dist/cjs/evm/releases/lockup/v2.0/deployments.js +1 -1
- package/dist/cjs/evm/releases/lockup/v2.0/deployments.js.map +1 -1
- package/dist/cjs/evm/releases/lockup/v3.0/deployments.js +0 -7
- package/dist/cjs/evm/releases/lockup/v3.0/deployments.js.map +1 -1
- package/dist/cjs/evm/releases/lockup/v4.0/deployments.js +0 -14
- package/dist/cjs/evm/releases/lockup/v4.0/deployments.js.map +1 -1
- package/dist/cjs/evm/releases/resolvers.js +14 -22
- package/dist/cjs/evm/releases/resolvers.js.map +1 -1
- package/dist/cjs/evm/types.js.map +1 -1
- package/dist/cjs/internal/factories/chains.js +5 -15
- package/dist/cjs/internal/factories/chains.js.map +1 -1
- package/dist/cjs/internal/factories/queries.js +3 -9
- package/dist/cjs/internal/factories/queries.js.map +1 -1
- package/dist/cjs/internal/utils/object-path.js +3 -3
- package/dist/cjs/internal/utils/object-path.js.map +1 -1
- package/dist/cjs/sablier.js +2 -6
- package/dist/cjs/sablier.js.map +1 -1
- package/dist/cjs/solana/chains/chains.js +13 -13
- package/dist/cjs/solana/chains/chains.js.map +1 -1
- package/dist/cjs/solana/programs/catalog.js +1 -1
- package/dist/cjs/solana/programs/catalog.js.map +1 -1
- package/dist/cjs/solana/programs/queries.js +1 -1
- package/dist/cjs/solana/programs/queries.js.map +1 -1
- package/dist/cjs/solana/releases/resolvers.js +5 -6
- package/dist/cjs/solana/releases/resolvers.js.map +1 -1
- package/dist/esm/evm/chains/builder.js +8 -1
- package/dist/esm/evm/chains/builder.js.map +1 -1
- package/dist/esm/evm/chains/chains.js +1 -1
- package/dist/esm/evm/chains/chains.js.map +1 -1
- package/dist/esm/evm/chains/custom.js +6 -26
- package/dist/esm/evm/chains/custom.js.map +1 -1
- package/dist/esm/evm/chains/specs.js +10 -26
- package/dist/esm/evm/chains/specs.js.map +1 -1
- package/dist/esm/evm/comptroller/deployments.js +0 -6
- package/dist/esm/evm/comptroller/deployments.js.map +1 -1
- package/dist/esm/evm/contracts/queries.js +1 -1
- package/dist/esm/evm/contracts/queries.js.map +1 -1
- package/dist/esm/evm/releases/airdrops/v2.0/deployments.js +0 -9
- package/dist/esm/evm/releases/airdrops/v2.0/deployments.js.map +1 -1
- package/dist/esm/evm/releases/airdrops/v3.0/deployments.js +0 -23
- package/dist/esm/evm/releases/airdrops/v3.0/deployments.js.map +1 -1
- package/dist/esm/evm/releases/flow/v2.0/deployments.js +0 -4
- package/dist/esm/evm/releases/flow/v2.0/deployments.js.map +1 -1
- package/dist/esm/evm/releases/flow/v3.0/deployments.js +0 -8
- package/dist/esm/evm/releases/flow/v3.0/deployments.js.map +1 -1
- package/dist/esm/evm/releases/lockup/v2.0/deployments.js +1 -1
- package/dist/esm/evm/releases/lockup/v2.0/deployments.js.map +1 -1
- package/dist/esm/evm/releases/lockup/v3.0/deployments.js +0 -7
- package/dist/esm/evm/releases/lockup/v3.0/deployments.js.map +1 -1
- package/dist/esm/evm/releases/lockup/v4.0/deployments.js +0 -14
- package/dist/esm/evm/releases/lockup/v4.0/deployments.js.map +1 -1
- package/dist/esm/evm/releases/resolvers.js +14 -22
- package/dist/esm/evm/releases/resolvers.js.map +1 -1
- package/dist/esm/evm/types.js.map +1 -1
- package/dist/esm/internal/factories/chains.js +5 -15
- package/dist/esm/internal/factories/chains.js.map +1 -1
- package/dist/esm/internal/factories/queries.js +3 -9
- package/dist/esm/internal/factories/queries.js.map +1 -1
- package/dist/esm/internal/utils/object-path.js +3 -3
- package/dist/esm/internal/utils/object-path.js.map +1 -1
- package/dist/esm/sablier.js +2 -6
- package/dist/esm/sablier.js.map +1 -1
- package/dist/esm/solana/chains/chains.js +13 -13
- package/dist/esm/solana/chains/chains.js.map +1 -1
- package/dist/esm/solana/programs/catalog.js +1 -1
- package/dist/esm/solana/programs/catalog.js.map +1 -1
- package/dist/esm/solana/programs/queries.js +1 -1
- package/dist/esm/solana/programs/queries.js.map +1 -1
- package/dist/esm/solana/releases/resolvers.js +5 -6
- package/dist/esm/solana/releases/resolvers.js.map +1 -1
- package/dist/types/evm/chains/builder.d.ts.map +1 -1
- package/dist/types/evm/chains/chains.d.ts +1 -1
- package/dist/types/evm/chains/chains.d.ts.map +1 -1
- package/dist/types/evm/chains/custom.d.ts +6 -47
- package/dist/types/evm/chains/custom.d.ts.map +1 -1
- package/dist/types/evm/chains/specs.d.ts +308 -598
- package/dist/types/evm/chains/specs.d.ts.map +1 -1
- package/dist/types/evm/comptroller/deployments.d.ts.map +1 -1
- package/dist/types/evm/releases/airdrops/v2.0/deployments.d.ts.map +1 -1
- package/dist/types/evm/releases/airdrops/v3.0/deployments.d.ts.map +1 -1
- package/dist/types/evm/releases/flow/v2.0/deployments.d.ts.map +1 -1
- package/dist/types/evm/releases/flow/v3.0/deployments.d.ts.map +1 -1
- package/dist/types/evm/releases/lockup/v3.0/deployments.d.ts.map +1 -1
- package/dist/types/evm/releases/lockup/v4.0/deployments.d.ts.map +1 -1
- package/dist/types/evm/releases/resolvers.d.ts.map +1 -1
- package/dist/types/evm/types.d.ts +4 -0
- package/dist/types/evm/types.d.ts.map +1 -1
- package/dist/types/internal/factories/chains.d.ts.map +1 -1
- package/dist/types/internal/factories/queries.d.ts.map +1 -1
- package/dist/types/sablier.d.ts.map +1 -1
- package/dist/types/solana/releases/resolvers.d.ts.map +1 -1
- package/package.json +63 -63
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"chains.js","sourceRoot":"","sources":["../../../../src/internal/factories/chains.ts"],"names":[],"mappings":";;AAgBA,
|
|
1
|
+
{"version":3,"file":"chains.js","sourceRoot":"","sources":["../../../../src/internal/factories/chains.ts"],"names":[],"mappings":";;AAgBA,gDAwDC;AAxED,wEAAiE;AAgBjE,SAAgB,kBAAkB,CAAyB,MAAyB;IAClF,MAAM,WAAW,GAAG,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;IAE1C,OAAO;QAOL,GAAG,EAAE,CAAC,OAAe,EAAiB,EAAE,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,OAAO,CAAC;QAOlF,MAAM,EAAE,GAAQ,EAAE,CAAC,IAAA,2BAAU,EAAC,WAAW,CAAC;QAQ1C,SAAS,EAAE,CAAC,IAAY,EAAiB,EAAE,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC;QAOpF,WAAW,EAAE,GAAQ,EAAE,CAAC,IAAA,2BAAU,EAAC,WAAW,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;QAS3E,UAAU,EAAE,CAAC,OAAe,EAAK,EAAE;YACjC,MAAM,KAAK,GAAG,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,OAAO,CAAC,CAAC;YACxD,IAAI,CAAC,KAAK,EAAE,CAAC;gBACX,MAAM,IAAI,KAAK,CAAC,8BAA8B,OAAO,YAAY,CAAC,CAAC;YACrE,CAAC;YACD,OAAO,KAAK,CAAC;QACf,CAAC;QAOD,WAAW,EAAE,GAAQ,EAAE,CAAC,IAAA,2BAAU,EAAC,WAAW,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;KAC3E,CAAC;AACJ,CAAC","sourcesContent":["import { sortChains } from \"@/src/internal/utils/sort-chains.js\";\nimport type { Shared } from \"@/src/shared/types.js\";\n\n/**\n * Generic factory function to create type-safe chain query objects.\n *\n * @template T - Chain type extending ChainCommon constraint\n * @param chains - Record of chain definitions keyed by chain identifier\n * @returns Query object with type-safe methods for chain operations\n *\n * @example\n * ```typescript\n * const evmQueries = createChainQueries<Sablier.EVM.Chain>(evmChains);\n * const solanaQueries = createChainQueries<Sablier.Solana.Chain>(solanaChains);\n * ```\n */\nexport function createChainQueries<T extends Shared.Chain>(chains: Record<string, T>) {\n const chainValues = Object.values(chains);\n\n return {\n /**\n * Find a chain by its numeric ID.\n *\n * @param chainId - The numeric chain identifier\n * @returns The chain if found, undefined otherwise\n */\n get: (chainId: number): T | undefined => chainValues.find((c) => c.id === chainId),\n\n /**\n * Get all chains sorted by name.\n *\n * @returns Array of all chains sorted alphabetically\n */\n getAll: (): T[] => sortChains(chainValues),\n\n /**\n * Find a chain by its slug identifier.\n *\n * @param slug - The chain slug (e.g., \"ethereum\", \"solana-mainnet\")\n * @returns The chain if found, undefined otherwise\n */\n getBySlug: (slug: string): T | undefined => chainValues.find((c) => c.slug === slug),\n\n /**\n * Get all mainnet chains sorted by name.\n *\n * @returns Array of mainnet chains sorted alphabetically\n */\n getMainnets: (): T[] => sortChains(chainValues.filter((c) => !c.isTestnet)),\n\n /**\n * Find a chain by its numeric ID, throwing an error if not found.\n *\n * @param chainId - The numeric chain identifier\n * @returns The chain\n * @throws Error if chain with the given ID is not found\n */\n getOrThrow: (chainId: number): T => {\n const chain = chainValues.find((c) => c.id === chainId);\n if (!chain) {\n throw new Error(`Sablier SDK: Chain with ID ${chainId} not found`);\n }\n return chain;\n },\n\n /**\n * Get all testnet chains sorted by name.\n *\n * @returns Array of testnet chains sorted alphabetically\n */\n getTestnets: (): T[] => sortChains(chainValues.filter((c) => c.isTestnet)),\n };\n}\n"]}
|
|
@@ -47,15 +47,9 @@ function createContractsQueries(config) {
|
|
|
47
47
|
const dep = release.deployments.find((d) => d.chainId === chainId);
|
|
48
48
|
return getItems(dep);
|
|
49
49
|
};
|
|
50
|
-
const findByName = (release, chainId, name) =>
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
const findByAddress = (release, chainId, address) => {
|
|
54
|
-
return getDeploymentItems(release, chainId).find((c) => normalizeAddress(c.address) === address);
|
|
55
|
-
};
|
|
56
|
-
const releaseHasAddress = (release, chainId, address) => {
|
|
57
|
-
return getDeploymentItems(release, chainId).some((c) => normalizeAddress(c.address) === address);
|
|
58
|
-
};
|
|
50
|
+
const findByName = (release, chainId, name) => getDeploymentItems(release, chainId).find((c) => c.name === name);
|
|
51
|
+
const findByAddress = (release, chainId, address) => getDeploymentItems(release, chainId).find((c) => normalizeAddress(c.address) === address);
|
|
52
|
+
const releaseHasAddress = (release, chainId, address) => getDeploymentItems(release, chainId).some((c) => normalizeAddress(c.address) === address);
|
|
59
53
|
const searchCatalog = (chainId, address) => {
|
|
60
54
|
for (const p of protocols) {
|
|
61
55
|
const contract = (0, object_path_js_1.getPath)(catalog, [p, chainId, address]);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"queries.js","sourceRoot":"","sources":["../../../../src/internal/factories/queries.ts"],"names":[],"mappings":"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","sourcesContent":["import { getPath } from \"@/src/internal/utils/object-path.js\";\n\n/**\n * Factory function to create releases queries with platform-specific configuration.\n * This eliminates code duplication between EVM and Solana implementations.\n */\nexport function createReleasesQueries<\n TProtocol extends string,\n TVersion extends string,\n TRelease extends {\n version: TVersion;\n deployments: Array<{ chainId: number }>;\n isLatest?: boolean;\n },\n>(config: {\n releases: Record<TProtocol, Record<string, TRelease>>;\n ProtocolEnum: Record<string, TProtocol>;\n}) {\n const { releases, ProtocolEnum } = config;\n\n return {\n get: (opts: { protocol: TProtocol; version: TVersion }): TRelease | undefined => {\n const { protocol, version } = opts;\n return getPath<TRelease>(releases, [protocol, version]);\n },\n /**\n * Get all releases for a protocol.\n * - {} ⇒ all releases for all protocols\n * - {protocol} ⇒ all releases for that protocol\n */\n getAll: (opts?: { protocol?: TProtocol }): TRelease[] => {\n const { protocol } = opts || {};\n if (protocol) {\n return Object.values(releases[protocol]) as TRelease[];\n }\n // Recursively get all releases from all protocols in the enum\n return Object.values(ProtocolEnum).flatMap((protocolName) =>\n Object.values(releases[protocolName])\n ) as TRelease[];\n },\n /**\n * Get the first release:\n * - {protocol} ⇒ first overall\n * - {protocol,chainId} ⇒ first on that chain\n */\n getFirst: (opts: { protocol: TProtocol; chainId?: number }): TRelease | undefined => {\n const { protocol, chainId } = opts;\n const list = Object.values(releases[protocol]) as TRelease[];\n\n if (chainId) {\n return list.find((r) => r.deployments.some((d) => d.chainId === chainId));\n }\n\n return list[0];\n },\n /**\n * Get the latest release for a protocol.\n * - {protocol}\n */\n getLatest: (opts: { protocol: TProtocol }): TRelease => {\n const list = Object.values(releases[opts.protocol]) as TRelease[];\n const latest = list.at(-1);\n if (!latest?.isLatest) {\n throw new Error(\n `Sablier SDK: No latest release found for Sablier ${opts.protocol}. Please report on GitHub.`\n );\n }\n return latest;\n },\n };\n}\n\n/**\n * Factory function to create contract queries with platform-specific configuration.\n * This eliminates code duplication between EVM and Solana implementations.\n *\n * @template TProtocol - The protocol type\n * @template TContract - The contract/program type with name and address fields\n * @template TDeployment - The deployment type containing contracts or programs\n * @template TRelease - The release type\n * @template TCatalog - The catalog type for reverse lookups\n * @template TAliasCatalog - The alias catalog type for alias-based lookups\n */\nexport function createContractsQueries<\n TProtocol extends string,\n TContract extends { name: string; address: string; alias?: string },\n TDeployment extends { chainId: number; contracts?: TContract[]; programs?: TContract[] },\n TRelease extends { version: string; deployments: TDeployment[] },\n TCatalog,\n TAliasCatalog = undefined,\n>(config: {\n getAliasCatalog?: () => TAliasCatalog;\n catalog: TCatalog;\n releasesQueries: {\n getAll: (opts?: { protocol?: TProtocol }) => TRelease[];\n getLatest: (opts: { protocol: TProtocol }) => TRelease;\n };\n protocols: TProtocol[];\n normalizeAddress: (address: string) => string;\n /** Field name for contracts (e.g., 'contracts' for EVM, 'programs' for Solana) */\n contractsField: \"contracts\" | \"programs\";\n}) {\n const { getAliasCatalog, catalog, releasesQueries, protocols, normalizeAddress, contractsField } =\n config;\n\n // Helper to safely get contracts/programs from deployment\n const getItems = (deployment: TDeployment | undefined): TContract[] => {\n if (!deployment) {\n return [];\n }\n return (deployment[contractsField] as TContract[]) || [];\n };\n\n // Helper to find deployment by chainId and get its contracts\n const getDeploymentItems = (release: TRelease, chainId: number): TContract[] => {\n const dep = release.deployments.find((d) => d.chainId === chainId) as TDeployment | undefined;\n return getItems(dep);\n };\n\n // Helper to find contract by name in a release\n const findByName = (release: TRelease, chainId: number, name: string): TContract | undefined => {\n return getDeploymentItems(release, chainId).find((c) => c.name === name);\n };\n\n // Helper to find contract by address in a release\n const findByAddress = (\n release: TRelease,\n chainId: number,\n address: string\n ): TContract | undefined => {\n return getDeploymentItems(release, chainId).find(\n (c) => normalizeAddress(c.address) === address\n );\n };\n\n // Helper to check if release contains address on chain\n const releaseHasAddress = (release: TRelease, chainId: number, address: string): boolean => {\n return getDeploymentItems(release, chainId).some(\n (c) => normalizeAddress(c.address) === address\n );\n };\n\n // Helper to search catalog across all protocols\n const searchCatalog = (chainId: number, address: string): TContract | undefined => {\n for (const p of protocols) {\n const contract = getPath<TContract>(catalog, [p, chainId, address]);\n if (contract) {\n return contract;\n }\n }\n return undefined;\n };\n\n // Helper to find contract by address scoped to protocol (with duplicate check)\n const findByAddressInProtocol = (\n protocol: TProtocol,\n chainId: number,\n address: string,\n originalAddress: string\n ): TContract | undefined => {\n const releases = releasesQueries.getAll({ protocol });\n const matches = releases.filter((rel) => releaseHasAddress(rel, chainId, address));\n\n if (matches.length > 1) {\n const versions = matches.map((r) => r.version).join(\", \");\n throw new Error(\n `Sablier SDK: Contract ${originalAddress} exists in multiple releases (${versions}) for \"${protocol}\". ` +\n \"Specify release: { chainId, contractAddress, release }\"\n );\n }\n\n return getPath<TContract>(catalog, [protocol, chainId, address]);\n };\n\n // Helper to filter deployments by chainId and extract contracts\n const filterDeploymentsAndGetItems = (\n deployments: TDeployment[],\n chainId?: number\n ): TContract[] | undefined => {\n const filtered = chainId ? deployments.filter((d) => d.chainId === chainId) : deployments;\n if (chainId && filtered.length === 0) {\n return undefined;\n }\n return filtered.flatMap(getItems);\n };\n\n return {\n /**\n * Get a single contract using the following options:\n *\n * - { chainId, contractName, release }\n * - { chainId, contractAddress, protocol }\n * - { chainId, contractAddress, release }\n * - { chainId, contractAddress, protocol, release }\n *\n * Note: If a contract address exists in multiple releases for the same protocol, you must specify the release.\n */\n get: (opts: {\n chainId: number;\n contractAddress?: string;\n contractName?: string;\n protocol?: TProtocol;\n release?: TRelease;\n }): TContract | undefined => {\n const { chainId, contractAddress, contractName, protocol, release } = opts;\n\n // Validation\n if (contractAddress && contractName) {\n throw new Error(\"Sablier SDK: Cannot specify both contractAddress and contractName\");\n }\n\n // Query by name requires release\n if (contractName) {\n if (!release) {\n throw new Error(\"Sablier SDK: contractName requires release to be specified\");\n }\n return findByName(release, chainId, contractName);\n }\n\n // Query by address\n if (!contractAddress) {\n return undefined;\n }\n\n const address = normalizeAddress(contractAddress);\n\n // Scoped to specific release\n if (release) {\n return findByAddress(release, chainId, address);\n }\n\n // Scoped to protocol - check for duplicates across releases\n if (protocol) {\n return findByAddressInProtocol(protocol, chainId, address, contractAddress);\n }\n\n // Fallback: search all protocols\n return searchCatalog(chainId, address);\n },\n\n /**\n * Get many contracts.\n * - no options ⇒ all\n * - { chainId } ⇒ all for that chain\n * - { protocol } ⇒ all for that protocol\n * - { protocol, chainId } ⇒ all for that protocol and chain\n * - { release } ⇒ all deployments of that release\n * - { release, chainId } ⇒ all for that release and chain\n */\n getAll: (opts?: {\n chainId?: number;\n protocol?: TProtocol;\n release?: TRelease;\n }): TContract[] | undefined => {\n const { protocol, chainId, release } = opts || {};\n\n if (protocol && release) {\n throw new Error(\"Sablier SDK: Cannot specify both protocol and release as query options\");\n }\n\n // by protocol\n if (protocol) {\n const releases = releasesQueries.getAll({ protocol });\n const deployments = releases.flatMap((r) => r.deployments);\n return filterDeploymentsAndGetItems(deployments, chainId);\n }\n\n // by explicit release\n if (release) {\n return filterDeploymentsAndGetItems(release.deployments, chainId);\n }\n\n // by chain id or no filters\n const deployments = releasesQueries.getAll().flatMap((r) => r.deployments);\n return filterDeploymentsAndGetItems(deployments, chainId);\n },\n\n /**\n * Get a contract by its alias.\n * Aliases are version-specific (e.g., LK = Lockup v2.0, LK2 = Lockup v3.0, LK3 = Lockup v4.0).\n *\n * @example\n * contractsQueries.getByAlias({ alias: \"LK2\", chainId: 1 })\n * contractsQueries.getByAlias({ alias: \"FL3\", chainId: 137, protocol: \"flow\" })\n */\n getByAlias: (opts: {\n alias: string;\n chainId: number;\n protocol?: TProtocol;\n }): TContract | undefined => {\n const { alias, chainId, protocol } = opts;\n\n if (!getAliasCatalog) {\n return undefined;\n }\n\n const aliasCatalog = getAliasCatalog();\n if (!aliasCatalog) {\n return undefined;\n }\n\n if (protocol) {\n return getPath<TContract>(aliasCatalog, [protocol, chainId, alias]);\n }\n\n // Search all protocols\n for (const p of protocols) {\n const contract = getPath<TContract>(aliasCatalog, [p, chainId, alias]);\n if (contract) {\n return contract;\n }\n }\n return undefined;\n },\n\n /**\n * Get the latest contract by name for a protocol.\n * - { chainId, contractName, protocol }\n */\n getLatestByName: (opts: {\n chainId: number;\n contractName: string;\n protocol: TProtocol;\n }): TContract | undefined => {\n const { chainId, contractName, protocol } = opts;\n const release = releasesQueries.getLatest({ protocol });\n const dep = release.deployments.find((d) => d.chainId === chainId) as TDeployment | undefined;\n const items = getItems(dep);\n return items.find((c) => c.name === contractName);\n },\n };\n}\n"]}
|
|
1
|
+
{"version":3,"file":"queries.js","sourceRoot":"","sources":["../../../../src/internal/factories/queries.ts"],"names":[],"mappings":"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","sourcesContent":["import { getPath } from \"@/src/internal/utils/object-path.js\";\n\n/**\n * Factory function to create releases queries with platform-specific configuration.\n * This eliminates code duplication between EVM and Solana implementations.\n */\nexport function createReleasesQueries<\n TProtocol extends string,\n TVersion extends string,\n TRelease extends {\n version: TVersion;\n deployments: Array<{ chainId: number }>;\n isLatest?: boolean;\n },\n>(config: {\n releases: Record<TProtocol, Record<string, TRelease>>;\n ProtocolEnum: Record<string, TProtocol>;\n}) {\n const { releases, ProtocolEnum } = config;\n\n return {\n get: (opts: { protocol: TProtocol; version: TVersion }): TRelease | undefined => {\n const { protocol, version } = opts;\n return getPath<TRelease>(releases, [protocol, version]);\n },\n /**\n * Get all releases for a protocol.\n * - {} ⇒ all releases for all protocols\n * - {protocol} ⇒ all releases for that protocol\n */\n getAll: (opts?: { protocol?: TProtocol }): TRelease[] => {\n const { protocol } = opts || {};\n if (protocol) {\n return Object.values(releases[protocol]) as TRelease[];\n }\n // Recursively get all releases from all protocols in the enum\n return Object.values(ProtocolEnum).flatMap((protocolName) =>\n Object.values(releases[protocolName])\n ) as TRelease[];\n },\n /**\n * Get the first release:\n * - {protocol} ⇒ first overall\n * - {protocol,chainId} ⇒ first on that chain\n */\n getFirst: (opts: { protocol: TProtocol; chainId?: number }): TRelease | undefined => {\n const { protocol, chainId } = opts;\n const list = Object.values(releases[protocol]) as TRelease[];\n\n if (chainId) {\n return list.find((r) => r.deployments.some((d) => d.chainId === chainId));\n }\n\n return list[0];\n },\n /**\n * Get the latest release for a protocol.\n * - {protocol}\n */\n getLatest: (opts: { protocol: TProtocol }): TRelease => {\n const list = Object.values(releases[opts.protocol]) as TRelease[];\n const latest = list.at(-1);\n if (!latest?.isLatest) {\n throw new Error(\n `Sablier SDK: No latest release found for Sablier ${opts.protocol}. Please report on GitHub.`\n );\n }\n return latest;\n },\n };\n}\n\n/**\n * Factory function to create contract queries with platform-specific configuration.\n * This eliminates code duplication between EVM and Solana implementations.\n *\n * @template TProtocol - The protocol type\n * @template TContract - The contract/program type with name and address fields\n * @template TDeployment - The deployment type containing contracts or programs\n * @template TRelease - The release type\n * @template TCatalog - The catalog type for reverse lookups\n * @template TAliasCatalog - The alias catalog type for alias-based lookups\n */\nexport function createContractsQueries<\n TProtocol extends string,\n TContract extends { name: string; address: string; alias?: string },\n TDeployment extends { chainId: number; contracts?: TContract[]; programs?: TContract[] },\n TRelease extends { version: string; deployments: TDeployment[] },\n TCatalog,\n TAliasCatalog = undefined,\n>(config: {\n getAliasCatalog?: () => TAliasCatalog;\n catalog: TCatalog;\n releasesQueries: {\n getAll: (opts?: { protocol?: TProtocol }) => TRelease[];\n getLatest: (opts: { protocol: TProtocol }) => TRelease;\n };\n protocols: TProtocol[];\n normalizeAddress: (address: string) => string;\n /** Field name for contracts (e.g., 'contracts' for EVM, 'programs' for Solana) */\n contractsField: \"contracts\" | \"programs\";\n}) {\n const { getAliasCatalog, catalog, releasesQueries, protocols, normalizeAddress, contractsField } =\n config;\n\n // Helper to safely get contracts/programs from deployment\n const getItems = (deployment: TDeployment | undefined): TContract[] => {\n if (!deployment) {\n return [];\n }\n return (deployment[contractsField] as TContract[]) || [];\n };\n\n // Helper to find deployment by chainId and get its contracts\n const getDeploymentItems = (release: TRelease, chainId: number): TContract[] => {\n const dep = release.deployments.find((d) => d.chainId === chainId) as TDeployment | undefined;\n return getItems(dep);\n };\n\n // Helper to find contract by name in a release\n const findByName = (release: TRelease, chainId: number, name: string): TContract | undefined =>\n getDeploymentItems(release, chainId).find((c) => c.name === name);\n\n // Helper to find contract by address in a release\n const findByAddress = (\n release: TRelease,\n chainId: number,\n address: string\n ): TContract | undefined =>\n getDeploymentItems(release, chainId).find((c) => normalizeAddress(c.address) === address);\n\n // Helper to check if release contains address on chain\n const releaseHasAddress = (release: TRelease, chainId: number, address: string): boolean =>\n getDeploymentItems(release, chainId).some((c) => normalizeAddress(c.address) === address);\n\n // Helper to search catalog across all protocols\n const searchCatalog = (chainId: number, address: string): TContract | undefined => {\n for (const p of protocols) {\n const contract = getPath<TContract>(catalog, [p, chainId, address]);\n if (contract) {\n return contract;\n }\n }\n return undefined;\n };\n\n // Helper to find contract by address scoped to protocol (with duplicate check)\n const findByAddressInProtocol = (\n protocol: TProtocol,\n chainId: number,\n address: string,\n originalAddress: string\n ): TContract | undefined => {\n const releases = releasesQueries.getAll({ protocol });\n const matches = releases.filter((rel) => releaseHasAddress(rel, chainId, address));\n\n if (matches.length > 1) {\n const versions = matches.map((r) => r.version).join(\", \");\n throw new Error(\n `Sablier SDK: Contract ${originalAddress} exists in multiple releases (${versions}) for \"${protocol}\". ` +\n \"Specify release: { chainId, contractAddress, release }\"\n );\n }\n\n return getPath<TContract>(catalog, [protocol, chainId, address]);\n };\n\n // Helper to filter deployments by chainId and extract contracts\n const filterDeploymentsAndGetItems = (\n deployments: TDeployment[],\n chainId?: number\n ): TContract[] | undefined => {\n const filtered = chainId ? deployments.filter((d) => d.chainId === chainId) : deployments;\n if (chainId && filtered.length === 0) {\n return undefined;\n }\n return filtered.flatMap(getItems);\n };\n\n return {\n /**\n * Get a single contract using the following options:\n *\n * - { chainId, contractName, release }\n * - { chainId, contractAddress, protocol }\n * - { chainId, contractAddress, release }\n * - { chainId, contractAddress, protocol, release }\n *\n * Note: If a contract address exists in multiple releases for the same protocol, you must specify the release.\n */\n get: (opts: {\n chainId: number;\n contractAddress?: string;\n contractName?: string;\n protocol?: TProtocol;\n release?: TRelease;\n }): TContract | undefined => {\n const { chainId, contractAddress, contractName, protocol, release } = opts;\n\n // Validation\n if (contractAddress && contractName) {\n throw new Error(\"Sablier SDK: Cannot specify both contractAddress and contractName\");\n }\n\n // Query by name requires release\n if (contractName) {\n if (!release) {\n throw new Error(\"Sablier SDK: contractName requires release to be specified\");\n }\n return findByName(release, chainId, contractName);\n }\n\n // Query by address\n if (!contractAddress) {\n return undefined;\n }\n\n const address = normalizeAddress(contractAddress);\n\n // Scoped to specific release\n if (release) {\n return findByAddress(release, chainId, address);\n }\n\n // Scoped to protocol - check for duplicates across releases\n if (protocol) {\n return findByAddressInProtocol(protocol, chainId, address, contractAddress);\n }\n\n // Fallback: search all protocols\n return searchCatalog(chainId, address);\n },\n\n /**\n * Get many contracts.\n * - no options ⇒ all\n * - { chainId } ⇒ all for that chain\n * - { protocol } ⇒ all for that protocol\n * - { protocol, chainId } ⇒ all for that protocol and chain\n * - { release } ⇒ all deployments of that release\n * - { release, chainId } ⇒ all for that release and chain\n */\n getAll: (opts?: {\n chainId?: number;\n protocol?: TProtocol;\n release?: TRelease;\n }): TContract[] | undefined => {\n const { protocol, chainId, release } = opts || {};\n\n if (protocol && release) {\n throw new Error(\"Sablier SDK: Cannot specify both protocol and release as query options\");\n }\n\n // by protocol\n if (protocol) {\n const releases = releasesQueries.getAll({ protocol });\n const deployments = releases.flatMap((r) => r.deployments);\n return filterDeploymentsAndGetItems(deployments, chainId);\n }\n\n // by explicit release\n if (release) {\n return filterDeploymentsAndGetItems(release.deployments, chainId);\n }\n\n // by chain id or no filters\n const deployments = releasesQueries.getAll().flatMap((r) => r.deployments);\n return filterDeploymentsAndGetItems(deployments, chainId);\n },\n\n /**\n * Get a contract by its alias.\n * Aliases are version-specific (e.g., LK = Lockup v2.0, LK2 = Lockup v3.0, LK3 = Lockup v4.0).\n *\n * @example\n * contractsQueries.getByAlias({ alias: \"LK2\", chainId: 1 })\n * contractsQueries.getByAlias({ alias: \"FL3\", chainId: 137, protocol: \"flow\" })\n */\n getByAlias: (opts: {\n alias: string;\n chainId: number;\n protocol?: TProtocol;\n }): TContract | undefined => {\n const { alias, chainId, protocol } = opts;\n\n if (!getAliasCatalog) {\n return undefined;\n }\n\n const aliasCatalog = getAliasCatalog();\n if (!aliasCatalog) {\n return undefined;\n }\n\n if (protocol) {\n return getPath<TContract>(aliasCatalog, [protocol, chainId, alias]);\n }\n\n // Search all protocols\n for (const p of protocols) {\n const contract = getPath<TContract>(aliasCatalog, [p, chainId, alias]);\n if (contract) {\n return contract;\n }\n }\n return undefined;\n },\n\n /**\n * Get the latest contract by name for a protocol.\n * - { chainId, contractName, protocol }\n */\n getLatestByName: (opts: {\n chainId: number;\n contractName: string;\n protocol: TProtocol;\n }): TContract | undefined => {\n const { chainId, contractName, protocol } = opts;\n const release = releasesQueries.getLatest({ protocol });\n const dep = release.deployments.find((d) => d.chainId === chainId) as TDeployment | undefined;\n const items = getItems(dep);\n return items.find((c) => c.name === contractName);\n },\n };\n}\n"]}
|
|
@@ -5,7 +5,7 @@ exports.setPath = setPath;
|
|
|
5
5
|
function getPath(obj, path) {
|
|
6
6
|
let result = obj;
|
|
7
7
|
for (const key of path) {
|
|
8
|
-
if (result
|
|
8
|
+
if (result === null || result === undefined) {
|
|
9
9
|
return undefined;
|
|
10
10
|
}
|
|
11
11
|
result = result[key];
|
|
@@ -17,9 +17,9 @@ function setPath(obj, path, value) {
|
|
|
17
17
|
return obj;
|
|
18
18
|
}
|
|
19
19
|
let current = obj;
|
|
20
|
-
for (let i = 0; i < path.length - 1; i
|
|
20
|
+
for (let i = 0; i < path.length - 1; i += 1) {
|
|
21
21
|
const key = path[i];
|
|
22
|
-
if (current[key]
|
|
22
|
+
if (current[key] === null || current[key] === undefined) {
|
|
23
23
|
current[key] = {};
|
|
24
24
|
}
|
|
25
25
|
current = current[key];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"object-path.js","sourceRoot":"","sources":["../../../../src/internal/utils/object-path.ts"],"names":[],"mappings":";;AAKA,0BASC;AAQD,0BAsBC;AAvCD,SAAgB,OAAO,CAAI,GAAY,EAAE,IAAkC;IACzE,IAAI,MAAM,GAAY,GAAG,CAAC;IAC1B,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;QACvB,IAAI,MAAM,IAAI,IAAI,EAAE,CAAC;
|
|
1
|
+
{"version":3,"file":"object-path.js","sourceRoot":"","sources":["../../../../src/internal/utils/object-path.ts"],"names":[],"mappings":";;AAKA,0BASC;AAQD,0BAsBC;AAvCD,SAAgB,OAAO,CAAI,GAAY,EAAE,IAAkC;IACzE,IAAI,MAAM,GAAY,GAAG,CAAC;IAC1B,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;QACvB,IAAI,MAAM,KAAK,IAAI,IAAI,MAAM,KAAK,SAAS,EAAE,CAAC;YAC5C,OAAO,SAAS,CAAC;QACnB,CAAC;QACD,MAAM,GAAI,MAA2C,CAAC,GAAG,CAAC,CAAC;IAC7D,CAAC;IACD,OAAO,MAAuB,CAAC;AACjC,CAAC;AAQD,SAAgB,OAAO,CACrB,GAAM,EACN,IAAkC,EAClC,KAAc;IAEd,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACtB,OAAO,GAAG,CAAC;IACb,CAAC;IACD,IAAI,OAAO,GAAqC,GAAuC,CAAC;IACxF,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC;QAC5C,MAAM,GAAG,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;QACpB,IAAI,OAAO,CAAC,GAAG,CAAC,KAAK,IAAI,IAAI,OAAO,CAAC,GAAG,CAAC,KAAK,SAAS,EAAE,CAAC;YACxD,OAAO,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC;QACpB,CAAC;QACD,OAAO,GAAG,OAAO,CAAC,GAAG,CAAqC,CAAC;IAC7D,CAAC;IACD,MAAM,OAAO,GAAG,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;IAC5B,IAAI,OAAO,KAAK,SAAS,EAAE,CAAC;QAC1B,OAAO,GAAG,CAAC;IACb,CAAC;IACD,OAAO,CAAC,OAAO,CAAC,GAAG,KAAK,CAAC;IACzB,OAAO,GAAG,CAAC;AACb,CAAC","sourcesContent":["/**\n * Get a nested value from an object by path.\n * @example\n * getPath(obj, [\"a\", \"b\", \"c\"]) // obj.a.b.c\n */\nexport function getPath<T>(obj: unknown, path: readonly (string | number)[]): T | undefined {\n let result: unknown = obj;\n for (const key of path) {\n if (result === null || result === undefined) {\n return undefined;\n }\n result = (result as Record<string | number, unknown>)[key];\n }\n return result as T | undefined;\n}\n\n/**\n * Set a nested value in an object by path, creating intermediate objects as needed.\n * Mutates and returns the original object.\n * @example\n * setPath(obj, [\"a\", \"b\", \"c\"], value) // obj.a.b.c = value\n */\nexport function setPath<T extends object>(\n obj: T,\n path: readonly (string | number)[],\n value: unknown\n): T {\n if (path.length === 0) {\n return obj;\n }\n let current: Record<string | number, unknown> = obj as Record<string | number, unknown>;\n for (let i = 0; i < path.length - 1; i += 1) {\n const key = path[i];\n if (current[key] === null || current[key] === undefined) {\n current[key] = {};\n }\n current = current[key] as Record<string | number, unknown>;\n }\n const lastKey = path.at(-1);\n if (lastKey === undefined) {\n return obj;\n }\n current[lastKey] = value;\n return obj;\n}\n"]}
|
package/dist/cjs/sablier.js
CHANGED
|
@@ -13,18 +13,14 @@ const evmDeploymentsQueries = {
|
|
|
13
13
|
const { release, chainId } = opts || {};
|
|
14
14
|
return release.deployments.find((d) => d.chainId === chainId);
|
|
15
15
|
},
|
|
16
|
-
getAll: () =>
|
|
17
|
-
return queries_js_4.releasesQueries.getAll().flatMap((r) => r.deployments);
|
|
18
|
-
},
|
|
16
|
+
getAll: () => queries_js_4.releasesQueries.getAll().flatMap((r) => r.deployments),
|
|
19
17
|
};
|
|
20
18
|
const solanaDeploymentsQueries = {
|
|
21
19
|
get: (opts) => {
|
|
22
20
|
const { release, chainId } = opts || {};
|
|
23
21
|
return release.deployments.find((d) => d.chainId === chainId);
|
|
24
22
|
},
|
|
25
|
-
getAll: () =>
|
|
26
|
-
return queries_js_7.releasesQueries.getAll().flatMap((r) => r.deployments);
|
|
27
|
-
},
|
|
23
|
+
getAll: () => queries_js_7.releasesQueries.getAll().flatMap((r) => r.deployments),
|
|
28
24
|
};
|
|
29
25
|
const evm = {
|
|
30
26
|
chains: queries_js_1.chainsQueries,
|
package/dist/cjs/sablier.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sablier.js","sourceRoot":"","sources":["../../src/sablier.ts"],"names":[],"mappings":";;;AA0BA,wDAA4E;AAC5E,6DAAkE;AAClE,2DAAqF;AACrF,0DAAkF;AAClF,2DAAkF;AAClF,6DAAwF;AACxF,6DAAwF;AAMxF,MAAM,qBAAqB,GAAG;IAM5B,GAAG,EAAE,CAAC,IAGL,EAAsC,EAAE;
|
|
1
|
+
{"version":3,"file":"sablier.js","sourceRoot":"","sources":["../../src/sablier.ts"],"names":[],"mappings":";;;AA0BA,wDAA4E;AAC5E,6DAAkE;AAClE,2DAAqF;AACrF,0DAAkF;AAClF,2DAAkF;AAClF,6DAAwF;AACxF,6DAAwF;AAMxF,MAAM,qBAAqB,GAAG;IAM5B,GAAG,EAAE,CAAC,IAGL,EAAsC,EAAE;QAEvC,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,GAAG,IAAI,IAAI,EAAE,CAAC;QACxC,OAAO,OAAO,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,KAAK,OAAO,CAAC,CAAC;IAChE,CAAC;IACD,MAAM,EAAE,GAA6B,EAAE,CAAC,4BAAkB,CAAC,MAAM,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,WAAW,CAAC;CAClG,CAAC;AAEF,MAAM,wBAAwB,GAAG;IAM/B,GAAG,EAAE,CAAC,IAGL,EAAyC,EAAE;QAE1C,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,GAAG,IAAI,IAAI,EAAE,CAAC;QACxC,OAAO,OAAO,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,KAAK,OAAO,CAAC,CAAC;IAChE,CAAC;IACD,MAAM,EAAE,GAAgC,EAAE,CACxC,4BAAqB,CAAC,MAAM,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,WAAW,CAAC;CAC/D,CAAC;AAEF,MAAM,GAAG,GAAG;IACV,MAAM,EAAE,0BAAgB;IACxB,WAAW,EAAE,+BAAkB;IAC/B,SAAS,EAAE,6BAAmB;IAC9B,WAAW,EAAE,qBAAqB;IAClC,QAAQ,EAAE,4BAAkB;CAC7B,CAAC;AAEF,MAAM,MAAM,GAAG;IACb,MAAM,EAAE,0BAAmB;IAC3B,WAAW,EAAE,wBAAwB;IACrC,QAAQ,EAAE,4BAAqB;IAC/B,QAAQ,EAAE,4BAAqB;CAChC,CAAC;AAEW,QAAA,OAAO,GAAG;IACrB,GAAG,GAAG;IACN,GAAG;IACH,MAAM;CACP,CAAC","sourcesContent":["/**\n * @file This file exports the Sablier object, singleton that contains the queries for the\n * chains, contracts, and releases for both evm and solana compatible chains.\n *\n * @example\n * ```typescript\n * import { sablier } from \"sablier\";\n *\n * // EVM\n * const lockupRelease = sablier.evm.releases.getLatest({ protocol: \"lockup\" });\n * let lockupContract = sablier.evm.contracts.get({\n * chainId: mainnet.id,\n * contractName: \"SablierLockup\",\n * release: lockupRelease,\n * });\n *\n * // Can also be accessed like this:\n * lockupContract = sablier.contracts.get({\n * chainId: mainnet.id,\n * contractName: \"SablierLockup\",\n * release: lockupRelease,\n * });\n * const { address } = lockupContract;\n * ```\n */\n\nimport { chainsQueries as evmChainsQueries } from \"./evm/chains/queries.js\";\nimport { comptrollerQueries } from \"./evm/comptroller/queries.js\";\nimport { contractsQueries as evmContractsQueries } from \"./evm/contracts/queries.js\";\nimport { releasesQueries as evmReleasesQueries } from \"./evm/releases/queries.js\";\nimport { chainsQueries as solanaChainsQueries } from \"./solana/chains/queries.js\";\nimport { programsQueries as solanaProgramsQueries } from \"./solana/programs/queries.js\";\nimport { releasesQueries as solanaReleasesQueries } from \"./solana/releases/queries.js\";\nimport type { Sablier } from \"./types.js\";\n\n/**\n * Has to be defined here to avoid circular dependencies.\n */\nconst evmDeploymentsQueries = {\n /**\n * Get many deployments.\n * - default ⇒ all across all releases\n * - release ⇒ that release's deployments\n */\n get: (opts: {\n chainId: number;\n release: Sablier.EVM.Release;\n }): Sablier.EVM.Deployment | undefined => {\n // biome-ignore lint/suspicious/noUnnecessaryConditions: defensive fallback for untyped JS callers at this public API boundary\n const { release, chainId } = opts || {};\n return release.deployments.find((d) => d.chainId === chainId);\n },\n getAll: (): Sablier.EVM.Deployment[] => evmReleasesQueries.getAll().flatMap((r) => r.deployments),\n};\n\nconst solanaDeploymentsQueries = {\n /**\n * Get many deployments.\n * - default ⇒ all across all releases\n * - release ⇒ that release's deployments\n */\n get: (opts: {\n chainId: number;\n release: Sablier.Solana.Release;\n }): Sablier.Solana.Deployment | undefined => {\n // biome-ignore lint/suspicious/noUnnecessaryConditions: defensive fallback for untyped JS callers at this public API boundary\n const { release, chainId } = opts || {};\n return release.deployments.find((d) => d.chainId === chainId);\n },\n getAll: (): Sablier.Solana.Deployment[] =>\n solanaReleasesQueries.getAll().flatMap((r) => r.deployments),\n};\n\nconst evm = {\n chains: evmChainsQueries,\n comptroller: comptrollerQueries,\n contracts: evmContractsQueries,\n deployments: evmDeploymentsQueries,\n releases: evmReleasesQueries,\n};\n\nconst solana = {\n chains: solanaChainsQueries,\n deployments: solanaDeploymentsQueries,\n programs: solanaProgramsQueries,\n releases: solanaReleasesQueries,\n};\n\nexport const sablier = {\n ...evm, // re-exporting for pre-v1.7 backward compatibility\n evm,\n solana,\n};\n"]}
|
|
@@ -5,6 +5,12 @@ exports.CHAIN_ID_SOLANA_MAINNET_BETA = 900_000_010;
|
|
|
5
5
|
exports.CHAIN_ID_SOLANA_DEVNET = 900_000_020;
|
|
6
6
|
exports.SOLANA_CHAIN_IDS = new Set([exports.CHAIN_ID_SOLANA_MAINNET_BETA, exports.CHAIN_ID_SOLANA_DEVNET]);
|
|
7
7
|
exports.solanaDevnet = {
|
|
8
|
+
contracts: {},
|
|
9
|
+
id: exports.CHAIN_ID_SOLANA_DEVNET,
|
|
10
|
+
isSupportedByUI: true,
|
|
11
|
+
isTestnet: true,
|
|
12
|
+
name: "Devnet",
|
|
13
|
+
slug: "solana-devnet",
|
|
8
14
|
blockExplorers: {
|
|
9
15
|
default: { name: "Orb", url: "https://orb.helius.dev?cluster=devnet" },
|
|
10
16
|
solanaFm: { name: "Solana FM", url: "https://solana.fm?cluster=devnet-alpha" },
|
|
@@ -14,16 +20,11 @@ exports.solanaDevnet = {
|
|
|
14
20
|
feed: "99B2bTijsU6f1GCT73HmdR7HCFFjGMBcPZY6jZ96ynrR",
|
|
15
21
|
program: "HEvSKofvBgfaexv23kMabbYqxasxU3mQ4ibBMEmJWHny",
|
|
16
22
|
},
|
|
17
|
-
contracts: {},
|
|
18
23
|
definition: {
|
|
19
24
|
chainCode: "SOLDEV",
|
|
20
25
|
chainId: exports.CHAIN_ID_SOLANA_DEVNET,
|
|
21
26
|
cluster: "devnet",
|
|
22
27
|
},
|
|
23
|
-
id: exports.CHAIN_ID_SOLANA_DEVNET,
|
|
24
|
-
isSupportedByUI: true,
|
|
25
|
-
isTestnet: true,
|
|
26
|
-
name: "Devnet",
|
|
27
28
|
nativeCurrency: {
|
|
28
29
|
coinGeckoId: "solana",
|
|
29
30
|
decimals: 9,
|
|
@@ -39,9 +40,15 @@ exports.solanaDevnet = {
|
|
|
39
40
|
http: ["https://api.devnet-beta.solana.com/"],
|
|
40
41
|
},
|
|
41
42
|
},
|
|
42
|
-
slug: "solana-devnet",
|
|
43
43
|
};
|
|
44
44
|
exports.solanaMainnetBeta = {
|
|
45
|
+
coinGeckoPlatformId: "solana",
|
|
46
|
+
contracts: {},
|
|
47
|
+
id: exports.CHAIN_ID_SOLANA_MAINNET_BETA,
|
|
48
|
+
isSupportedByUI: true,
|
|
49
|
+
isTestnet: false,
|
|
50
|
+
name: "Solana",
|
|
51
|
+
slug: "solana-mainnet-beta",
|
|
45
52
|
blockExplorers: {
|
|
46
53
|
default: { name: "Orb", url: "https://orb.helius.dev" },
|
|
47
54
|
solanaFm: { name: "Solana FM", url: "https://solana.fm" },
|
|
@@ -51,17 +58,11 @@ exports.solanaMainnetBeta = {
|
|
|
51
58
|
feed: "99B2bTijsU6f1GCT73HmdR7HCFFjGMBcPZY6jZ96ynrR",
|
|
52
59
|
program: "HEvSKofvBgfaexv23kMabbYqxasxU3mQ4ibBMEmJWHny",
|
|
53
60
|
},
|
|
54
|
-
coinGeckoPlatformId: "solana",
|
|
55
|
-
contracts: {},
|
|
56
61
|
definition: {
|
|
57
62
|
chainCode: "SOL",
|
|
58
63
|
chainId: exports.CHAIN_ID_SOLANA_MAINNET_BETA,
|
|
59
64
|
cluster: "mainnet-beta",
|
|
60
65
|
},
|
|
61
|
-
id: exports.CHAIN_ID_SOLANA_MAINNET_BETA,
|
|
62
|
-
isSupportedByUI: true,
|
|
63
|
-
isTestnet: false,
|
|
64
|
-
name: "Solana",
|
|
65
66
|
nativeCurrency: {
|
|
66
67
|
coinGeckoId: "solana",
|
|
67
68
|
decimals: 9,
|
|
@@ -77,6 +78,5 @@ exports.solanaMainnetBeta = {
|
|
|
77
78
|
http: ["https://api.mainnet-beta.solana.com/"],
|
|
78
79
|
},
|
|
79
80
|
},
|
|
80
|
-
slug: "solana-mainnet-beta",
|
|
81
81
|
};
|
|
82
82
|
//# sourceMappingURL=chains.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"chains.js","sourceRoot":"","sources":["../../../../src/solana/chains/chains.ts"],"names":[],"mappings":";;;AAKa,QAAA,4BAA4B,GAAG,WAAW,CAAC;AAC3C,QAAA,sBAAsB,GAAG,WAAW,CAAC;AAErC,QAAA,gBAAgB,GAAG,IAAI,GAAG,CAAC,CAAC,oCAA4B,EAAE,8BAAsB,CAAC,CAAC,CAAC;AAEnF,QAAA,YAAY,GAAyB;IAChD,cAAc,EAAE;QACd,OAAO,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,EAAE,uCAAuC,EAAE;QACtE,QAAQ,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE,GAAG,EAAE,wCAAwC,EAAE;QAC9E,OAAO,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,GAAG,EAAE,mCAAmC,EAAE;KACvE;IACD,SAAS,EAAE;QACT,IAAI,EAAE,8CAA8C;QACpD,OAAO,EAAE,8CAA8C;KACxD;IACD,
|
|
1
|
+
{"version":3,"file":"chains.js","sourceRoot":"","sources":["../../../../src/solana/chains/chains.ts"],"names":[],"mappings":";;;AAKa,QAAA,4BAA4B,GAAG,WAAW,CAAC;AAC3C,QAAA,sBAAsB,GAAG,WAAW,CAAC;AAErC,QAAA,gBAAgB,GAAG,IAAI,GAAG,CAAC,CAAC,oCAA4B,EAAE,8BAAsB,CAAC,CAAC,CAAC;AAEnF,QAAA,YAAY,GAAyB;IAChD,SAAS,EAAE,EAAE;IACb,EAAE,EAAE,8BAAsB;IAC1B,eAAe,EAAE,IAAI;IACrB,SAAS,EAAE,IAAI;IACf,IAAI,EAAE,QAAQ;IACd,IAAI,EAAE,eAAe;IACrB,cAAc,EAAE;QACd,OAAO,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,EAAE,uCAAuC,EAAE;QACtE,QAAQ,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE,GAAG,EAAE,wCAAwC,EAAE;QAC9E,OAAO,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,GAAG,EAAE,mCAAmC,EAAE;KACvE;IACD,SAAS,EAAE;QACT,IAAI,EAAE,8CAA8C;QACpD,OAAO,EAAE,8CAA8C;KACxD;IACD,UAAU,EAAE;QACV,SAAS,EAAE,QAAQ;QACnB,OAAO,EAAE,8BAAsB;QAC/B,OAAO,EAAE,QAAQ;KAClB;IACD,cAAc,EAAE;QACd,WAAW,EAAE,QAAQ;QACrB,QAAQ,EAAE,CAAC;QACX,IAAI,EAAE,QAAQ;QACd,MAAM,EAAE,KAAK;KACd;IACD,GAAG,EAAE;QACH,QAAQ,EAAE,CAAC,qCAAqC,CAAC;QACjD,MAAM,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,0CAA0C,GAAG,EAAE;KACjE;IACD,OAAO,EAAE;QACP,OAAO,EAAE;YACP,IAAI,EAAE,CAAC,qCAAqC,CAAC;SAC9C;KACF;CACO,CAAC;AAEE,QAAA,iBAAiB,GAAyB;IACrD,mBAAmB,EAAE,QAAQ;IAC7B,SAAS,EAAE,EAAE;IACb,EAAE,EAAE,oCAA4B;IAChC,eAAe,EAAE,IAAI;IACrB,SAAS,EAAE,KAAK;IAChB,IAAI,EAAE,QAAQ;IACd,IAAI,EAAE,qBAAqB;IAC3B,cAAc,EAAE;QACd,OAAO,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,EAAE,wBAAwB,EAAE;QACvD,QAAQ,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE,GAAG,EAAE,mBAAmB,EAAE;QACzD,OAAO,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,GAAG,EAAE,oBAAoB,EAAE;KACxD;IACD,SAAS,EAAE;QACT,IAAI,EAAE,8CAA8C;QACpD,OAAO,EAAE,8CAA8C;KACxD;IACD,UAAU,EAAE;QACV,SAAS,EAAE,KAAK;QAChB,OAAO,EAAE,oCAA4B;QACrC,OAAO,EAAE,cAAc;KACxB;IACD,cAAc,EAAE;QACd,WAAW,EAAE,QAAQ;QACrB,QAAQ,EAAE,CAAC;QACX,IAAI,EAAE,QAAQ;QACd,MAAM,EAAE,KAAK;KACd;IACD,GAAG,EAAE;QACH,QAAQ,EAAE,CAAC,sCAAsC,CAAC;QAClD,MAAM,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,2CAA2C,GAAG,EAAE;KAClE;IACD,OAAO,EAAE;QACP,OAAO,EAAE;YACP,IAAI,EAAE,CAAC,sCAAsC,CAAC;SAC/C;KACF;CACO,CAAC","sourcesContent":["import type { Sablier } from \"@/src/types.js\";\n\n/**\n * Solana does not have chain IDs. These are made-up numbers so that we can use the same type for EVM and Solana chains.\n */\nexport const CHAIN_ID_SOLANA_MAINNET_BETA = 900_000_010;\nexport const CHAIN_ID_SOLANA_DEVNET = 900_000_020;\n\nexport const SOLANA_CHAIN_IDS = new Set([CHAIN_ID_SOLANA_MAINNET_BETA, CHAIN_ID_SOLANA_DEVNET]);\n\nexport const solanaDevnet: Sablier.Solana.Chain = {\n contracts: {},\n id: CHAIN_ID_SOLANA_DEVNET,\n isSupportedByUI: true,\n isTestnet: true,\n name: \"Devnet\",\n slug: \"solana-devnet\",\n blockExplorers: {\n default: { name: \"Orb\", url: \"https://orb.helius.dev?cluster=devnet\" },\n solanaFm: { name: \"Solana FM\", url: \"https://solana.fm?cluster=devnet-alpha\" },\n solscan: { name: \"Solscan\", url: \"https://solscan.io?cluster=devnet\" },\n },\n chainlink: {\n feed: \"99B2bTijsU6f1GCT73HmdR7HCFFjGMBcPZY6jZ96ynrR\",\n program: \"HEvSKofvBgfaexv23kMabbYqxasxU3mQ4ibBMEmJWHny\",\n },\n definition: {\n chainCode: \"SOLDEV\",\n chainId: CHAIN_ID_SOLANA_DEVNET,\n cluster: \"devnet\",\n },\n nativeCurrency: {\n coinGeckoId: \"solana\",\n decimals: 9,\n name: \"Solana\",\n symbol: \"SOL\",\n },\n rpc: {\n defaults: [\"https://api.devnet-beta.solana.com/\"],\n helius: (key) => `https://devnet.helius-rpc.com/?api-key=${key}`,\n },\n rpcUrls: {\n default: {\n http: [\"https://api.devnet-beta.solana.com/\"],\n },\n },\n} as const;\n\nexport const solanaMainnetBeta: Sablier.Solana.Chain = {\n coinGeckoPlatformId: \"solana\",\n contracts: {},\n id: CHAIN_ID_SOLANA_MAINNET_BETA,\n isSupportedByUI: true,\n isTestnet: false,\n name: \"Solana\",\n slug: \"solana-mainnet-beta\",\n blockExplorers: {\n default: { name: \"Orb\", url: \"https://orb.helius.dev\" },\n solanaFm: { name: \"Solana FM\", url: \"https://solana.fm\" },\n solscan: { name: \"Solscan\", url: \"https://solscan.io\" },\n },\n chainlink: {\n feed: \"99B2bTijsU6f1GCT73HmdR7HCFFjGMBcPZY6jZ96ynrR\",\n program: \"HEvSKofvBgfaexv23kMabbYqxasxU3mQ4ibBMEmJWHny\",\n },\n definition: {\n chainCode: \"SOL\",\n chainId: CHAIN_ID_SOLANA_MAINNET_BETA,\n cluster: \"mainnet-beta\",\n },\n nativeCurrency: {\n coinGeckoId: \"solana\",\n decimals: 9,\n name: \"Solana\",\n symbol: \"SOL\",\n },\n rpc: {\n defaults: [\"https://api.mainnet-beta.solana.com/\"],\n helius: (key) => `https://mainnet.helius-rpc.com/?api-key=${key}`,\n },\n rpcUrls: {\n default: {\n http: [\"https://api.mainnet-beta.solana.com/\"],\n },\n },\n} as const;\n"]}
|
|
@@ -18,7 +18,7 @@ function getCatalog() {
|
|
|
18
18
|
for (const deployment of deployments) {
|
|
19
19
|
const { chainId, programs } = deployment;
|
|
20
20
|
for (const contract of programs) {
|
|
21
|
-
const address = contract
|
|
21
|
+
const { address } = contract;
|
|
22
22
|
const entry = { ...contract, protocol, version };
|
|
23
23
|
(0, object_path_js_1.setPath)(_catalog, [protocol, chainId, address], entry);
|
|
24
24
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"catalog.js","sourceRoot":"","sources":["../../../../src/solana/programs/catalog.ts"],"names":[],"mappings":";;;AAAA,wEAA8D;AAC9D,oDAAiD;AACjD,iEAAmE;AAGnE,IAAI,QAAmD,CAAC;AAExD,SAAS,UAAU;IACjB,IAAI,QAAQ,EAAE,CAAC;QACb,OAAO,QAAQ,CAAC;IAClB,CAAC;IAED,QAAQ,GAAG;QACT,CAAC,mBAAQ,CAAC,QAAQ,CAAC,EAAE,EAAE;QACvB,CAAC,mBAAQ,CAAC,MAAM,CAAC,EAAE,EAAE;KACtB,CAAC;IAEF,KAAK,MAAM,OAAO,IAAI,4BAAe,CAAC,MAAM,EAAE,EAAE,CAAC;QAC/C,MAAM,EAAE,QAAQ,EAAE,OAAO,EAAE,WAAW,EAAE,GAAG,OAAO,CAAC;QAEnD,KAAK,MAAM,UAAU,IAAI,WAAW,EAAE,CAAC;YACrC,MAAM,EAAE,OAAO,EAAE,QAAQ,EAAE,GAAG,UAAU,CAAC;YAEzC,KAAK,MAAM,QAAQ,IAAI,QAAQ,EAAE,CAAC;gBAChC,MAAM,OAAO,GAAG,QAAQ,CAAC
|
|
1
|
+
{"version":3,"file":"catalog.js","sourceRoot":"","sources":["../../../../src/solana/programs/catalog.ts"],"names":[],"mappings":";;;AAAA,wEAA8D;AAC9D,oDAAiD;AACjD,iEAAmE;AAGnE,IAAI,QAAmD,CAAC;AAExD,SAAS,UAAU;IACjB,IAAI,QAAQ,EAAE,CAAC;QACb,OAAO,QAAQ,CAAC;IAClB,CAAC;IAED,QAAQ,GAAG;QACT,CAAC,mBAAQ,CAAC,QAAQ,CAAC,EAAE,EAAE;QACvB,CAAC,mBAAQ,CAAC,MAAM,CAAC,EAAE,EAAE;KACtB,CAAC;IAEF,KAAK,MAAM,OAAO,IAAI,4BAAe,CAAC,MAAM,EAAE,EAAE,CAAC;QAC/C,MAAM,EAAE,QAAQ,EAAE,OAAO,EAAE,WAAW,EAAE,GAAG,OAAO,CAAC;QAEnD,KAAK,MAAM,UAAU,IAAI,WAAW,EAAE,CAAC;YACrC,MAAM,EAAE,OAAO,EAAE,QAAQ,EAAE,GAAG,UAAU,CAAC;YAEzC,KAAK,MAAM,QAAQ,IAAI,QAAQ,EAAE,CAAC;gBAChC,MAAM,EAAE,OAAO,EAAE,GAAG,QAAQ,CAAC;gBAC7B,MAAM,KAAK,GAAG,EAAE,GAAG,QAAQ,EAAE,QAAQ,EAAE,OAAO,EAAE,CAAC;gBACjD,IAAA,wBAAO,EAAC,QAAQ,EAAE,CAAC,QAAQ,EAAE,OAAO,EAAE,OAAO,CAAC,EAAE,KAAK,CAAC,CAAC;YACzD,CAAC;QACH,CAAC;IACH,CAAC;IACD,OAAO,QAAQ,CAAC;AAClB,CAAC;AAWY,QAAA,OAAO,GAAG,IAAI,KAAK,CAAC,EAAmC,EAAE;IAEpE,GAAG,CAAC,CAAC,EAAE,IAAI;QACT,OAAO,UAAU,EAAE,CAAC,IAA2C,CAAC,CAAC;IACnE,CAAC;IAGD,wBAAwB,CAAC,CAAC,EAAE,IAAI;QAC9B,OAAO,MAAM,CAAC,wBAAwB,CAAC,UAAU,EAAE,EAAE,IAAI,CAAC,CAAC;IAC7D,CAAC;IAGD,OAAO;QACL,OAAO,OAAO,CAAC,OAAO,CAAC,UAAU,EAAE,CAAC,CAAC;IACvC,CAAC;CACF,CAAC,CAAC","sourcesContent":["import { setPath } from \"@/src/internal/utils/object-path.js\";\nimport { Protocol } from \"@/src/solana/enums.js\";\nimport { releasesQueries } from \"@/src/solana/releases/queries.js\";\nimport type { Sablier } from \"@/src/types.js\";\n\nlet _catalog: Sablier.Solana.ProgramCatalog | undefined;\n\nfunction getCatalog(): Sablier.Solana.ProgramCatalog {\n if (_catalog) {\n return _catalog;\n }\n\n _catalog = {\n [Protocol.Airdrops]: {},\n [Protocol.Lockup]: {},\n };\n\n for (const release of releasesQueries.getAll()) {\n const { protocol, version, deployments } = release;\n\n for (const deployment of deployments) {\n const { chainId, programs } = deployment;\n\n for (const contract of programs) {\n const { address } = contract;\n const entry = { ...contract, protocol, version };\n setPath(_catalog, [protocol, chainId, address], entry);\n }\n }\n }\n return _catalog;\n}\n\n/**\n * Lazily initialized catalog for reverse address lookups.\n *\n * Uses an ES6 Proxy object to defer getCatalog() execution until the catalog is actually accessed.\n * The Proxy intercepts property access and forwards it to the real catalog, which is built on first use.\n * This avoids iterating all releases at module load time.\n *\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Proxy\n */\nexport const catalog = new Proxy({} as Sablier.Solana.ProgramCatalog, {\n // Intercept property access (e.g., catalog.lockup)\n get(_, prop) {\n return getCatalog()[prop as keyof Sablier.Solana.ProgramCatalog];\n },\n // Required for Object.keys(), JSON.stringify(), spread operator\n // Returns property descriptor (writable, enumerable, etc.) for a key\n getOwnPropertyDescriptor(_, prop) {\n return Object.getOwnPropertyDescriptor(getCatalog(), prop);\n },\n // Required for Object.keys(), for...in, Object.getOwnPropertyNames()\n // Returns all property keys (strings and symbols) of the target\n ownKeys() {\n return Reflect.ownKeys(getCatalog());\n },\n});\n"]}
|
|
@@ -10,8 +10,8 @@ exports.programsQueries = (0, queries_js_1.createContractsQueries)({
|
|
|
10
10
|
catalog: catalog_js_1.catalog,
|
|
11
11
|
contractsField: "programs",
|
|
12
12
|
getAliasCatalog: alias_catalog_js_1.getAliasCatalog,
|
|
13
|
-
normalizeAddress: (address) => address,
|
|
14
13
|
protocols: [enums_js_1.Protocol.Airdrops, enums_js_1.Protocol.Lockup],
|
|
14
|
+
normalizeAddress: (address) => address,
|
|
15
15
|
releasesQueries: queries_js_2.releasesQueries,
|
|
16
16
|
});
|
|
17
17
|
//# sourceMappingURL=queries.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"queries.js","sourceRoot":"","sources":["../../../../src/solana/programs/queries.ts"],"names":[],"mappings":";;;AAAA,oEAA6E;AAC7E,oDAAiD;AACjD,iEAAmE;AAEnE,yDAAqD;AACrD,6CAAuC;AAE1B,QAAA,eAAe,GAAG,IAAA,mCAAsB,EAOnD;IACA,OAAO,EAAP,oBAAO;IACP,cAAc,EAAE,UAAU;IAC1B,eAAe,EAAf,kCAAe;IACf,
|
|
1
|
+
{"version":3,"file":"queries.js","sourceRoot":"","sources":["../../../../src/solana/programs/queries.ts"],"names":[],"mappings":";;;AAAA,oEAA6E;AAC7E,oDAAiD;AACjD,iEAAmE;AAEnE,yDAAqD;AACrD,6CAAuC;AAE1B,QAAA,eAAe,GAAG,IAAA,mCAAsB,EAOnD;IACA,OAAO,EAAP,oBAAO;IACP,cAAc,EAAE,UAAU;IAC1B,eAAe,EAAf,kCAAe;IACf,SAAS,EAAE,CAAC,mBAAQ,CAAC,QAAQ,EAAE,mBAAQ,CAAC,MAAM,CAAC;IAC/C,gBAAgB,EAAE,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO;IACtC,eAAe,EAAf,4BAAe;CAChB,CAAC,CAAC","sourcesContent":["import { createContractsQueries } from \"@/src/internal/factories/queries.js\";\nimport { Protocol } from \"@/src/solana/enums.js\";\nimport { releasesQueries } from \"@/src/solana/releases/queries.js\";\nimport type { Sablier } from \"@/src/types.js\";\nimport { getAliasCatalog } from \"./alias-catalog.js\";\nimport { catalog } from \"./catalog.js\";\n\nexport const programsQueries = createContractsQueries<\n Sablier.Solana.Protocol,\n Sablier.Solana.Program,\n Sablier.Solana.Deployment,\n Sablier.Solana.Release,\n Sablier.Solana.ProgramCatalog,\n Sablier.Solana.AliasCatalog\n>({\n catalog,\n contractsField: \"programs\",\n getAliasCatalog,\n protocols: [Protocol.Airdrops, Protocol.Lockup],\n normalizeAddress: (address) => address, // Solana addresses are case-sensitive\n releasesQueries,\n});\n"]}
|
|
@@ -8,14 +8,13 @@ const contractMapper = (0, resolver_js_1.createContractMapper)(queries_js_1.chai
|
|
|
8
8
|
const standardDeploymentResolver = (0, resolver_js_1.createStandardDeploymentResolver)(contractMapper, "programs");
|
|
9
9
|
exports.resolvers = {
|
|
10
10
|
deployment: {
|
|
11
|
-
standard: (params) =>
|
|
12
|
-
return standardDeploymentResolver(params);
|
|
13
|
-
},
|
|
11
|
+
standard: (params) => standardDeploymentResolver(params),
|
|
14
12
|
},
|
|
15
13
|
release: {
|
|
16
|
-
standard: (params) => {
|
|
17
|
-
|
|
18
|
-
|
|
14
|
+
standard: (params) => ({
|
|
15
|
+
...params,
|
|
16
|
+
programNames: (0, nested_values_js_1.getNestedValues)(params.manifest),
|
|
17
|
+
}),
|
|
19
18
|
},
|
|
20
19
|
};
|
|
21
20
|
//# sourceMappingURL=resolvers.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"resolvers.js","sourceRoot":"","sources":["../../../../src/solana/releases/resolvers.ts"],"names":[],"mappings":";;;AAAA,sEAG8C;AAC9C,4EAAwE;AAExE,+DAA+D;AAqB/D,MAAM,cAAc,GAAG,IAAA,kCAAoB,EAKzC,0BAAa,CAAC,CAAC;AAEjB,MAAM,0BAA0B,GAAG,IAAA,8CAAgC,EAMjE,cAAc,EAAE,UAAU,CAAC,CAAC;AAMjB,QAAA,SAAS,GAAG;IACvB,UAAU,EAAE;QAIV,QAAQ,EAAE,CAAC,MAAwB,EAA6B,EAAE
|
|
1
|
+
{"version":3,"file":"resolvers.js","sourceRoot":"","sources":["../../../../src/solana/releases/resolvers.ts"],"names":[],"mappings":";;;AAAA,sEAG8C;AAC9C,4EAAwE;AAExE,+DAA+D;AAqB/D,MAAM,cAAc,GAAG,IAAA,kCAAoB,EAKzC,0BAAa,CAAC,CAAC;AAEjB,MAAM,0BAA0B,GAAG,IAAA,8CAAgC,EAMjE,cAAc,EAAE,UAAU,CAAC,CAAC;AAMjB,QAAA,SAAS,GAAG;IACvB,UAAU,EAAE;QAIV,QAAQ,EAAE,CAAC,MAAwB,EAA6B,EAAE,CAChE,0BAA0B,CAAC,MAAM,CAAC;KACrC;IAED,OAAO,EAAE;QAIP,QAAQ,EAAE,CAAC,MAAqB,EAA0B,EAAE,CAAC,CAAC;YAC5D,GAAG,MAAM;YACT,YAAY,EAAE,IAAA,kCAAe,EAAC,MAAM,CAAC,QAAQ,CAAC;SAC/C,CAAC;KACH;CACF,CAAC","sourcesContent":["import {\n createContractMapper,\n createStandardDeploymentResolver,\n} from \"@/src/internal/factories/resolver.js\";\nimport { getNestedValues } from \"@/src/internal/utils/nested-values.js\";\nimport type { AliasMap } from \"@/src/shared/types.js\";\nimport { chainsQueries } from \"@/src/solana/chains/queries.js\";\nimport type { Sablier } from \"@/src/types.js\";\n\n/* -------------------------------------------------------------------------- */\n/* TYPES */\n/* -------------------------------------------------------------------------- */\n\ntype DeploymentParams = {\n protocol: Sablier.Solana.Protocol;\n version: Sablier.Solana.Version;\n chainId: number;\n aliasMap: AliasMap;\n contractMap: Sablier.Solana.ProgramMap;\n};\n\ntype ReleaseParams = Omit<Sablier.Solana.Release, \"programNames\">;\n\n/* -------------------------------------------------------------------------- */\n/* PLATFORM SETUP */\n/* -------------------------------------------------------------------------- */\n\nconst contractMapper = createContractMapper<\n Sablier.Solana.Program,\n Sablier.Solana.Protocol,\n Sablier.Solana.Version,\n Sablier.Solana.Address\n>(chainsQueries);\n\nconst standardDeploymentResolver = createStandardDeploymentResolver<\n Sablier.Solana.Deployment,\n Sablier.Solana.Program,\n Sablier.Solana.Protocol,\n Sablier.Solana.Version,\n Sablier.Solana.Address\n>(contractMapper, \"programs\");\n\n/* -------------------------------------------------------------------------- */\n/* RESOLVERS */\n/* -------------------------------------------------------------------------- */\n\nexport const resolvers = {\n deployment: {\n /**\n * Creates a standard Solana deployment\n */\n standard: (params: DeploymentParams): Sablier.Solana.Deployment =>\n standardDeploymentResolver(params),\n },\n\n release: {\n /**\n * Creates a Solana release with contract names extracted from manifest\n */\n standard: (params: ReleaseParams): Sablier.Solana.Release => ({\n ...params,\n programNames: getNestedValues(params.manifest),\n }),\n },\n};\n"]}
|
|
@@ -18,6 +18,9 @@ const buildChain = (key, spec) => {
|
|
|
18
18
|
if (!chain.blockExplorers) {
|
|
19
19
|
throw new Error(`Chain ${chain.name} has no block explorers`);
|
|
20
20
|
}
|
|
21
|
+
if (!chain.contracts?.multicall3) {
|
|
22
|
+
throw new Error(`Chain ${chain.name} has no Multicall3 contract`);
|
|
23
|
+
}
|
|
21
24
|
const defaultRPCs = chain.rpcUrls.default.http;
|
|
22
25
|
if (!defaultRPCs) {
|
|
23
26
|
throw new Error(`Chain ${chain.name} has no default RPC`);
|
|
@@ -35,10 +38,15 @@ const buildChain = (key, spec) => {
|
|
|
35
38
|
...chain,
|
|
36
39
|
blockExplorers: chain.blockExplorers,
|
|
37
40
|
coinGeckoPlatformId: spec.meta.coinGeckoPlatformId,
|
|
41
|
+
contracts: {
|
|
42
|
+
...chain.contracts,
|
|
43
|
+
multicall3: chain.contracts.multicall3,
|
|
44
|
+
},
|
|
38
45
|
isSupportedByUI,
|
|
39
46
|
isTestnet,
|
|
40
47
|
isZK: Boolean(spec.meta.isZk),
|
|
41
48
|
name: spec.meta.name ?? chain.name,
|
|
49
|
+
slug: spec.meta.slug ?? key,
|
|
42
50
|
nativeCurrency: {
|
|
43
51
|
...chain.nativeCurrency,
|
|
44
52
|
coinGeckoId: spec.nativeCurrency.coinGeckoId,
|
|
@@ -50,7 +58,6 @@ const buildChain = (key, spec) => {
|
|
|
50
58
|
infura: infuraNetwork ? (apiKey) => infuraUrl(infuraNetwork, apiKey) : undefined,
|
|
51
59
|
routemesh: routemeshEnabled ? (apiKey) => routemeshUrl(chain.id, apiKey) : undefined,
|
|
52
60
|
},
|
|
53
|
-
slug: spec.meta.slug ?? key,
|
|
54
61
|
};
|
|
55
62
|
};
|
|
56
63
|
export const buildChains = (specs) => {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"builder.js","sourceRoot":"","sources":["../../../../src/evm/chains/builder.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"builder.js","sourceRoot":"","sources":["../../../../src/evm/chains/builder.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,WAAW,IAAI,UAAU,EAAE,MAAM,MAAM,CAAC;AAEjD,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAiCrE,MAAM,UAAU,GAAG,CAAC,IAAe,EAAE,SAA8B,EAAa,EAAE;IAChF,IAAI,CAAC,SAAS,EAAE,CAAC;QACf,OAAO,IAAI,CAAC;IACd,CAAC;IAID,OAAO,UAAU,CAAC;QAChB,GAAG,IAAI;QACP,GAAG,SAAS;QACZ,cAAc,EAAE,SAAS,CAAC,cAAc,IAAI,IAAI,CAAC,cAAc;QAC/D,SAAS,EAAE,SAAS,CAAC,SAAS,IAAI,IAAI,CAAC,SAAS;QAChD,cAAc,EAAE,SAAS,CAAC,cAAc,IAAI,IAAI,CAAC,cAAc;QAC/D,OAAO,EAAE,SAAS,CAAC,OAAO,IAAI,IAAI,CAAC,OAAO;KAC3C,CAAC,CAAC;AACL,CAAC,CAAC;AAQF,MAAM,UAAU,GAAG,CAAC,GAAW,EAAE,IAAe,EAAqB,EAAE;IACrE,MAAM,KAAK,GAAG,UAAU,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC;IAGpD,IAAI,CAAC,KAAK,CAAC,cAAc,EAAE,CAAC;QAC1B,MAAM,IAAI,KAAK,CAAC,SAAS,KAAK,CAAC,IAAI,yBAAyB,CAAC,CAAC;IAChE,CAAC;IAED,IAAI,CAAC,KAAK,CAAC,SAAS,EAAE,UAAU,EAAE,CAAC;QACjC,MAAM,IAAI,KAAK,CAAC,SAAS,KAAK,CAAC,IAAI,6BAA6B,CAAC,CAAC;IACpE,CAAC;IAED,MAAM,WAAW,GAAG,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC;IAC/C,IAAI,CAAC,WAAW,EAAE,CAAC;QACjB,MAAM,IAAI,KAAK,CAAC,SAAS,KAAK,CAAC,IAAI,qBAAqB,CAAC,CAAC;IAC5D,CAAC;IAGD,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC,WAAW,EAAE,CAAC;QACrC,MAAM,IAAI,KAAK,CAAC,SAAS,KAAK,CAAC,IAAI,sBAAsB,CAAC,CAAC;IAC7D,CAAC;IAED,MAAM,cAAc,GAAG,IAAI,CAAC,GAAG,EAAE,OAAO,CAAC;IACzC,MAAM,aAAa,GAAG,IAAI,CAAC,GAAG,EAAE,MAAM,CAAC;IACvC,MAAM,gBAAgB,GAAG,IAAI,CAAC,GAAG,EAAE,SAAS,KAAK,KAAK,CAAC;IAGvD,MAAM,SAAS,GAAG,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;IACzC,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;IAChC,MAAM,eAAe,GAAG,UAAU,CAAC,CAAC,CAAC,UAAU,KAAK,WAAW,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;IAE7E,OAAO;QACL,GAAG,KAAK;QACR,cAAc,EAAE,KAAK,CAAC,cAAc;QACpC,mBAAmB,EAAE,IAAI,CAAC,IAAI,CAAC,mBAAmB;QAClD,SAAS,EAAE;YACT,GAAG,KAAK,CAAC,SAAS;YAClB,UAAU,EAAE,KAAK,CAAC,SAAS,CAAC,UAAU;SACvC;QACD,eAAe;QACf,SAAS;QACT,IAAI,EAAE,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC;QAC7B,IAAI,EAAE,IAAI,CAAC,IAAI,CAAC,IAAI,IAAI,KAAK,CAAC,IAAI;QAClC,IAAI,EAAE,IAAI,CAAC,IAAI,CAAC,IAAI,IAAI,GAAG;QAC3B,cAAc,EAAE;YACd,GAAG,KAAK,CAAC,cAAc;YACvB,WAAW,EAAE,IAAI,CAAC,cAAc,CAAC,WAAW;YAC5C,eAAe,EAAE,IAAI,CAAC,cAAc,CAAC,eAAe;SACrD;QACD,GAAG,EAAE;YAEH,OAAO,EAAE,cAAc,CAAC,CAAC,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,UAAU,CAAC,cAAc,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,SAAS;YACpF,QAAQ,EAAE,WAAuB;YACjC,MAAM,EAAE,aAAa,CAAC,CAAC,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,SAAS,CAAC,aAAa,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,SAAS;YAChF,SAAS,EAAE,gBAAgB,CAAC,CAAC,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,YAAY,CAAC,KAAK,CAAC,EAAE,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,SAAS;SACrF;KACF,CAAC;AACJ,CAAC,CAAC;AAUF,MAAM,CAAC,MAAM,WAAW,GAAG,CACzB,KAAQ,EAC+B,EAAE;IACzC,MAAM,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,EAAE,UAAU,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC;IAEzF,OAAO,MAAM,CAAC,WAAW,CAAC,OAAO,CAA0C,CAAC;AAC9E,CAAC,CAAC","sourcesContent":["import type { Chain as ViemChain } from \"viem\";\nimport { defineChain as viemDefine } from \"viem\";\nimport type { Sablier } from \"@/src/types.js\";\nimport { alchemyUrl, infuraUrl, routemeshUrl } from \"./providers.js\";\n\nexport type ChainSpec = {\n base: ViemChain;\n meta: {\n // Optional display overrides and metadata specific to Sablier.\n coinGeckoPlatformId?: string;\n name?: string;\n isZk?: boolean;\n ui?: \"SUPPORTED\" | \"NOT_SUPPORTED\";\n slug?: string;\n };\n nativeCurrency: {\n // CoinGecko API ID for price lookups.\n coinGeckoId: string;\n // Wrapper contract for native token (if applicable).\n wrapperContract?: string;\n };\n rpc?: {\n alchemy?: string;\n infura?: string;\n routemesh?: boolean;\n };\n overrides?: Partial<ViemChain>;\n};\n\n/**\n * Merge a base viem chain with overrides while preserving core structure.\n *\n * We use `viemDefine` to keep any derived properties consistent with viem's\n * expected shape, while also allowing us to override partial fields like\n * block explorers or RPC URLs without losing the base chain data.\n */\nconst mergeChain = (base: ViemChain, overrides?: Partial<ViemChain>): ViemChain => {\n if (!overrides) {\n return base;\n }\n\n // Shallow merge: nested objects like blockExplorers are replaced, not deep-merged.\n // viemDefine normalizes the chain object and preserves derived fields.\n return viemDefine({\n ...base,\n ...overrides,\n blockExplorers: overrides.blockExplorers ?? base.blockExplorers,\n contracts: overrides.contracts ?? base.contracts,\n nativeCurrency: overrides.nativeCurrency ?? base.nativeCurrency,\n rpcUrls: overrides.rpcUrls ?? base.rpcUrls,\n });\n};\n\n/**\n * Build a Sablier chain from a spec, enforcing required metadata invariants.\n *\n * This centralizes validation (e.g. CoinGecko id presence), derives UI support\n * defaults, and wires provider RPC generators so the spec table can stay lean.\n */\nconst buildChain = (key: string, spec: ChainSpec): Sablier.EVM.Chain => {\n const chain = mergeChain(spec.base, spec.overrides);\n\n // Ensure viem-provided fields we rely on are present.\n if (!chain.blockExplorers) {\n throw new Error(`Chain ${chain.name} has no block explorers`);\n }\n\n if (!chain.contracts?.multicall3) {\n throw new Error(`Chain ${chain.name} has no Multicall3 contract`);\n }\n\n const defaultRPCs = chain.rpcUrls.default.http;\n if (!defaultRPCs) {\n throw new Error(`Chain ${chain.name} has no default RPC`);\n }\n\n // CoinGecko id is required for pricing across the SDK.\n if (!spec.nativeCurrency.coinGeckoId) {\n throw new Error(`Chain ${chain.name} has no coinGecko ID`);\n }\n\n const alchemyNetwork = spec.rpc?.alchemy;\n const infuraNetwork = spec.rpc?.infura;\n const routemeshEnabled = spec.rpc?.routemesh !== false;\n\n // UI support is opt-in for testnets. Mainnets are supported by default unless flagged.\n const isTestnet = Boolean(chain.testnet);\n const uiOverride = spec.meta.ui;\n const isSupportedByUI = uiOverride ? uiOverride === \"SUPPORTED\" : !isTestnet;\n\n return {\n ...chain,\n blockExplorers: chain.blockExplorers,\n coinGeckoPlatformId: spec.meta.coinGeckoPlatformId,\n contracts: {\n ...chain.contracts,\n multicall3: chain.contracts.multicall3,\n },\n isSupportedByUI,\n isTestnet,\n isZK: Boolean(spec.meta.isZk),\n name: spec.meta.name ?? chain.name,\n slug: spec.meta.slug ?? key,\n nativeCurrency: {\n ...chain.nativeCurrency,\n coinGeckoId: spec.nativeCurrency.coinGeckoId,\n wrapperContract: spec.nativeCurrency.wrapperContract,\n },\n rpc: {\n // Provider URLs are generated from network slugs to avoid duplication.\n alchemy: alchemyNetwork ? (apiKey) => alchemyUrl(alchemyNetwork, apiKey) : undefined,\n defaults: defaultRPCs as string[],\n infura: infuraNetwork ? (apiKey) => infuraUrl(infuraNetwork, apiKey) : undefined,\n routemesh: routemeshEnabled ? (apiKey) => routemeshUrl(chain.id, apiKey) : undefined,\n },\n };\n};\n\n/**\n * Build the full chain registry from the specs object.\n *\n * We intentionally derive the registry from a single spec source so the type,\n * metadata, and provider configuration are assembled in one pass. This keeps\n * exports consistent and makes it hard to forget required metadata when a new\n * chain is added.\n */\nexport const buildChains = <T extends Record<string, ChainSpec>>(\n specs: T\n): { [K in keyof T]: Sablier.EVM.Chain } => {\n const entries = Object.entries(specs).map(([key, spec]) => [key, buildChain(key, spec)]);\n\n return Object.fromEntries(entries) as { [K in keyof T]: Sablier.EVM.Chain };\n};\n"]}
|
|
@@ -2,5 +2,5 @@ import { buildChains } from "./builder.js";
|
|
|
2
2
|
import { chainSpecs } from "./specs.js";
|
|
3
3
|
const chains = buildChains(chainSpecs);
|
|
4
4
|
export const { abstract, arbitrum, arbitrumSepolia, avalanche, base, baseSepolia, berachain, blast, bsc, coreDao, gnosis, hyperevm, lightlink, linea, lineaSepolia, mainnet, mode, morph, optimism, optimismSepolia, polygon, ronin, scroll, sepolia, sonic, superseed, superseedSepolia, taiko, unichain, xdc, } = chains;
|
|
5
|
-
export const {
|
|
5
|
+
export const { chiliz, monad, robinhood, sei, sophon, tangle, zksync, zksyncSepolia } = chains;
|
|
6
6
|
//# sourceMappingURL=chains.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"chains.js","sourceRoot":"","sources":["../../../../src/evm/chains/chains.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAC3C,OAAO,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAExC,MAAM,MAAM,GAAG,WAAW,CAAC,UAAU,CAAC,CAAC;AAMvC,MAAM,CAAC,MAAM,EACX,QAAQ,EACR,QAAQ,EACR,eAAe,EACf,SAAS,EACT,IAAI,EACJ,WAAW,EACX,SAAS,EACT,KAAK,EAEL,GAAG,EACH,OAAO,EACP,MAAM,EACN,QAAQ,EACR,SAAS,EACT,KAAK,EACL,YAAY,EACZ,OAAO,EACP,IAAI,EAEJ,KAAK,EACL,QAAQ,EACR,eAAe,EACf,OAAO,EACP,KAAK,EACL,MAAM,EACN,OAAO,EACP,KAAK,EACL,SAAS,EACT,gBAAgB,EAChB,KAAK,EACL,QAAQ,EACR,GAAG,GACJ,GAAG,MAAM,CAAC;AAMX,MAAM,CAAC,MAAM,
|
|
1
|
+
{"version":3,"file":"chains.js","sourceRoot":"","sources":["../../../../src/evm/chains/chains.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAC3C,OAAO,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAExC,MAAM,MAAM,GAAG,WAAW,CAAC,UAAU,CAAC,CAAC;AAMvC,MAAM,CAAC,MAAM,EACX,QAAQ,EACR,QAAQ,EACR,eAAe,EACf,SAAS,EACT,IAAI,EACJ,WAAW,EACX,SAAS,EACT,KAAK,EAEL,GAAG,EACH,OAAO,EACP,MAAM,EACN,QAAQ,EACR,SAAS,EACT,KAAK,EACL,YAAY,EACZ,OAAO,EACP,IAAI,EAEJ,KAAK,EACL,QAAQ,EACR,eAAe,EACf,OAAO,EACP,KAAK,EACL,MAAM,EACN,OAAO,EACP,KAAK,EACL,SAAS,EACT,gBAAgB,EAChB,KAAK,EACL,QAAQ,EACR,GAAG,GACJ,GAAG,MAAM,CAAC;AAMX,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,SAAS,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,aAAa,EAAE,GAAG,MAAM,CAAC","sourcesContent":["import { buildChains } from \"./builder.js\";\nimport { chainSpecs } from \"./specs.js\";\n\nconst chains = buildChains(chainSpecs);\n\n/* -------------------------------------------------------------------------- */\n/* NORMAL DEFINITIONS */\n/* -------------------------------------------------------------------------- */\n\nexport const {\n abstract,\n arbitrum,\n arbitrumSepolia,\n avalanche,\n base,\n baseSepolia,\n berachain,\n blast,\n\n bsc,\n coreDao,\n gnosis,\n hyperevm,\n lightlink,\n linea,\n lineaSepolia,\n mainnet,\n mode,\n\n morph,\n optimism,\n optimismSepolia,\n polygon,\n ronin,\n scroll,\n sepolia,\n sonic,\n superseed,\n superseedSepolia,\n taiko,\n unichain,\n xdc,\n} = chains;\n\n/* -------------------------------------------------------------------------- */\n/* CUSTOM DEFINITIONS */\n/* -------------------------------------------------------------------------- */\n\nexport const { chiliz, monad, robinhood, sei, sophon, tangle, zksync, zksyncSepolia } = chains;\n"]}
|
|
@@ -1,27 +1,10 @@
|
|
|
1
1
|
import { defineChain as viemDefine } from "viem";
|
|
2
|
-
const DENERGY_CHAIN_ID = 369_369;
|
|
3
|
-
const DENERGY_NATIVE_CURRENCY_SYMBOL = "WATT";
|
|
4
2
|
const ROBINHOOD_CHAIN_ID = 4663;
|
|
5
3
|
const TANGLE_NATIVE_CURRENCY_SYMBOL = "TNT";
|
|
6
|
-
export const denergy = viemDefine({
|
|
7
|
-
blockExplorers: {
|
|
8
|
-
default: { name: "Explorer", url: "https://explorer.denergychain.com" },
|
|
9
|
-
},
|
|
10
|
-
id: DENERGY_CHAIN_ID,
|
|
11
|
-
name: "Denergy",
|
|
12
|
-
nativeCurrency: {
|
|
13
|
-
decimals: 18,
|
|
14
|
-
name: "Watt",
|
|
15
|
-
symbol: DENERGY_NATIVE_CURRENCY_SYMBOL,
|
|
16
|
-
},
|
|
17
|
-
rpcUrls: {
|
|
18
|
-
default: {
|
|
19
|
-
http: ["https://rpc.d.energy"],
|
|
20
|
-
},
|
|
21
|
-
},
|
|
22
|
-
testnet: false,
|
|
23
|
-
});
|
|
24
4
|
export const robinhood = viemDefine({
|
|
5
|
+
id: ROBINHOOD_CHAIN_ID,
|
|
6
|
+
name: "Robinhood",
|
|
7
|
+
testnet: false,
|
|
25
8
|
blockExplorers: {
|
|
26
9
|
default: {
|
|
27
10
|
apiUrl: "https://robinhoodchain.blockscout.com/api",
|
|
@@ -29,8 +12,6 @@ export const robinhood = viemDefine({
|
|
|
29
12
|
url: "https://robinhoodchain.blockscout.com",
|
|
30
13
|
},
|
|
31
14
|
},
|
|
32
|
-
id: ROBINHOOD_CHAIN_ID,
|
|
33
|
-
name: "Robinhood",
|
|
34
15
|
nativeCurrency: {
|
|
35
16
|
decimals: 18,
|
|
36
17
|
name: "Ether",
|
|
@@ -41,9 +22,11 @@ export const robinhood = viemDefine({
|
|
|
41
22
|
http: ["https://rpc.mainnet.chain.robinhood.com"],
|
|
42
23
|
},
|
|
43
24
|
},
|
|
44
|
-
testnet: false,
|
|
45
25
|
});
|
|
46
26
|
export const tangle = viemDefine({
|
|
27
|
+
id: 5845,
|
|
28
|
+
name: "Tangle",
|
|
29
|
+
testnet: false,
|
|
47
30
|
blockExplorers: {
|
|
48
31
|
default: { name: "Explorer", url: "https://explorer.tangle.tools" },
|
|
49
32
|
},
|
|
@@ -53,8 +36,6 @@ export const tangle = viemDefine({
|
|
|
53
36
|
blockCreated: 2_790_914,
|
|
54
37
|
},
|
|
55
38
|
},
|
|
56
|
-
id: 5845,
|
|
57
|
-
name: "Tangle",
|
|
58
39
|
nativeCurrency: {
|
|
59
40
|
decimals: 18,
|
|
60
41
|
name: "Tangle",
|
|
@@ -65,6 +46,5 @@ export const tangle = viemDefine({
|
|
|
65
46
|
http: ["https://rpc.tangle.tools"],
|
|
66
47
|
},
|
|
67
48
|
},
|
|
68
|
-
testnet: false,
|
|
69
49
|
});
|
|
70
50
|
//# sourceMappingURL=custom.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"custom.js","sourceRoot":"","sources":["../../../../src/evm/chains/custom.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,IAAI,UAAU,EAAE,MAAM,MAAM,CAAC;AAEjD,MAAM,
|
|
1
|
+
{"version":3,"file":"custom.js","sourceRoot":"","sources":["../../../../src/evm/chains/custom.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,IAAI,UAAU,EAAE,MAAM,MAAM,CAAC;AAEjD,MAAM,kBAAkB,GAAG,IAAI,CAAC;AAChC,MAAM,6BAA6B,GAAG,KAAK,CAAC;AAE5C,MAAM,CAAC,MAAM,SAAS,GAAG,UAAU,CAAC;IAClC,EAAE,EAAE,kBAAkB;IACtB,IAAI,EAAE,WAAW;IACjB,OAAO,EAAE,KAAK;IACd,cAAc,EAAE;QACd,OAAO,EAAE;YACP,MAAM,EAAE,2CAA2C;YACnD,IAAI,EAAE,0BAA0B;YAChC,GAAG,EAAE,uCAAuC;SAC7C;KACF;IACD,cAAc,EAAE;QACd,QAAQ,EAAE,EAAE;QACZ,IAAI,EAAE,OAAO;QACb,MAAM,EAAE,KAAK;KACd;IACD,OAAO,EAAE;QACP,OAAO,EAAE;YACP,IAAI,EAAE,CAAC,yCAAyC,CAAC;SAClD;KACF;CACF,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,MAAM,GAAG,UAAU,CAAC;IAC/B,EAAE,EAAE,IAAI;IACR,IAAI,EAAE,QAAQ;IACd,OAAO,EAAE,KAAK;IACd,cAAc,EAAE;QACd,OAAO,EAAE,EAAE,IAAI,EAAE,UAAU,EAAE,GAAG,EAAE,+BAA+B,EAAE;KACpE;IACD,SAAS,EAAE;QACT,UAAU,EAAE;YACV,OAAO,EAAE,4CAA4C;YACrD,YAAY,EAAE,SAAS;SACxB;KACF;IACD,cAAc,EAAE;QACd,QAAQ,EAAE,EAAE;QACZ,IAAI,EAAE,QAAQ;QACd,MAAM,EAAE,6BAA6B;KACtC;IACD,OAAO,EAAE;QACP,OAAO,EAAE;YACP,IAAI,EAAE,CAAC,0BAA0B,CAAC;SACnC;KACF;CACF,CAAC,CAAC","sourcesContent":["import { defineChain as viemDefine } from \"viem\";\n\nconst ROBINHOOD_CHAIN_ID = 4663;\nconst TANGLE_NATIVE_CURRENCY_SYMBOL = \"TNT\";\n\nexport const robinhood = viemDefine({\n id: ROBINHOOD_CHAIN_ID,\n name: \"Robinhood\",\n testnet: false,\n blockExplorers: {\n default: {\n apiUrl: \"https://robinhoodchain.blockscout.com/api\",\n name: \"Robinhood Chain Explorer\",\n url: \"https://robinhoodchain.blockscout.com\",\n },\n },\n nativeCurrency: {\n decimals: 18,\n name: \"Ether\",\n symbol: \"ETH\",\n },\n rpcUrls: {\n default: {\n http: [\"https://rpc.mainnet.chain.robinhood.com\"],\n },\n },\n});\n\nexport const tangle = viemDefine({\n id: 5845,\n name: \"Tangle\",\n testnet: false,\n blockExplorers: {\n default: { name: \"Explorer\", url: \"https://explorer.tangle.tools\" },\n },\n contracts: {\n multicall3: {\n address: \"0xd595D34ed96b253E7c7a934a7624F330a8411953\",\n blockCreated: 2_790_914,\n },\n },\n nativeCurrency: {\n decimals: 18,\n name: \"Tangle\",\n symbol: TANGLE_NATIVE_CURRENCY_SYMBOL,\n },\n rpcUrls: {\n default: {\n http: [\"https://rpc.tangle.tools\"],\n },\n },\n});\n"]}
|