@parabolicfamily/mcp 0.1.7 → 0.2.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.
Files changed (80) hide show
  1. package/README.md +91 -12
  2. package/abi/ParabolicAggregatorRouter.json +2259 -0
  3. package/abi/ParabolicLaunchFactoryV2.json +2542 -0
  4. package/abi/ParabolicPairProbe.json +429 -0
  5. package/abi/ParabolicRouterV2.json +1171 -0
  6. package/abi/ParabolicSessionModule.json +1955 -0
  7. package/abi/deployments.json +258 -0
  8. package/dist/abi.d.ts +3 -1
  9. package/dist/abi.js +3 -1
  10. package/dist/abi.js.map +1 -1
  11. package/dist/chain.d.ts +12 -1
  12. package/dist/chain.js +13 -4
  13. package/dist/chain.js.map +1 -1
  14. package/dist/chains.d.ts +17 -10
  15. package/dist/chains.js +25 -13
  16. package/dist/chains.js.map +1 -1
  17. package/dist/coins.d.ts +38 -3
  18. package/dist/coins.js +54 -4
  19. package/dist/coins.js.map +1 -1
  20. package/dist/config.d.ts +36 -11
  21. package/dist/config.js +98 -20
  22. package/dist/config.js.map +1 -1
  23. package/dist/curve.d.ts +2 -1
  24. package/dist/curve.js +2 -1
  25. package/dist/curve.js.map +1 -1
  26. package/dist/deployed.d.ts +80 -0
  27. package/dist/deployed.js +95 -0
  28. package/dist/deployed.js.map +1 -0
  29. package/dist/docs.d.ts +13 -0
  30. package/dist/docs.js +75 -14
  31. package/dist/docs.js.map +1 -1
  32. package/dist/parabolic.d.ts +120 -3
  33. package/dist/parabolic.js +309 -41
  34. package/dist/parabolic.js.map +1 -1
  35. package/dist/quote-unit.d.ts +77 -0
  36. package/dist/quote-unit.js +143 -0
  37. package/dist/quote-unit.js.map +1 -0
  38. package/dist/referrals.d.ts +77 -0
  39. package/dist/referrals.js +55 -0
  40. package/dist/referrals.js.map +1 -0
  41. package/dist/restapi.d.ts +23 -0
  42. package/dist/restapi.js +60 -4
  43. package/dist/restapi.js.map +1 -1
  44. package/dist/routed.d.ts +389 -0
  45. package/dist/routed.js +413 -0
  46. package/dist/routed.js.map +1 -0
  47. package/dist/server.d.ts +1 -1
  48. package/dist/server.js +117 -10
  49. package/dist/server.js.map +1 -1
  50. package/dist/subgraph.d.ts +18 -6
  51. package/dist/subgraph.js +13 -1
  52. package/dist/subgraph.js.map +1 -1
  53. package/dist/ticker.d.ts +97 -0
  54. package/dist/ticker.js +109 -0
  55. package/dist/ticker.js.map +1 -0
  56. package/dist/tx.d.ts +6 -0
  57. package/dist/tx.js +12 -2
  58. package/dist/tx.js.map +1 -1
  59. package/dist/venues.d.ts +49 -0
  60. package/dist/venues.js +44 -0
  61. package/dist/venues.js.map +1 -0
  62. package/package.json +2 -2
  63. package/src/abi.ts +3 -1
  64. package/src/chain.ts +19 -4
  65. package/src/chains.ts +37 -17
  66. package/src/coins.ts +67 -5
  67. package/src/config.ts +112 -22
  68. package/src/curve.ts +2 -1
  69. package/src/deployed.ts +128 -0
  70. package/src/docs.ts +78 -15
  71. package/src/parabolic.ts +323 -42
  72. package/src/quote-unit.ts +194 -0
  73. package/src/referrals.ts +61 -0
  74. package/src/restapi.ts +66 -4
  75. package/src/routed.ts +499 -0
  76. package/src/server.ts +154 -10
  77. package/src/subgraph.ts +22 -4
  78. package/src/ticker.ts +148 -0
  79. package/src/tx.ts +13 -2
  80. package/src/venues.ts +93 -0
package/dist/coins.js CHANGED
@@ -1,9 +1,30 @@
1
1
  import { formatUnits, getAddress } from "viem";
2
+ import { chainFor } from "./chains.js";
2
3
  import { NATIVE_QUOTE } from "./config.js";
3
4
  import { toNumber } from "./curve.js";
5
+ import { quoteBlock, quoteUnitByAddress, quoteUnitOf } from "./quote-unit.js";
4
6
  export const SORT_KEYS = ["trending", "new", "near_graduation", "market_cap"];
5
7
  export const isNative = (pairToken) => pairToken.toLowerCase() === NATIVE_QUOTE;
6
- export const quoteDecimalsOf = (pairToken) => (isNative(pairToken) ? 18 : 6);
8
+ /**
9
+ * The scale a coin's quote amounts are written at, from the only two sources that have ever read it.
10
+ *
11
+ * This was `isNative(pairToken) ? 18 : 6` — Arc's own two answers, typed out, and the same pair of literals
12
+ * web/lib/data.ts and bot/src/chain.ts carried until 18 September 2026. The 18 is right only where the gas
13
+ * token is an 18-decimal dollar, and the 6 is right only for EURC on Arc: USDC is a **6-decimal ERC-20** on
14
+ * Base, Ethereum and BNB, all three of them chains on the plan, so every `raisedRaw` and `thresholdRaw` this
15
+ * produced there was out by a factor of a trillion — inside calldata an agent signs, with nothing to say so.
16
+ *
17
+ * `indexed` is the coin's own `Coin.quoteDecimals`, which the indexer writes at launch from the factory's
18
+ * re-read of the asset's `decimals()` — the chain's answer for *that launch*. Without it, a gas-asset quote
19
+ * falls back to the chain registry, whose figures were read off the chain when the chain was added. Neither
20
+ * available means **nothing is returned**: a caller must refuse a figure it cannot scale rather than pick a
21
+ * number (docs/20-multichain.md §3).
22
+ */
23
+ export function quoteDecimalsOf(pairToken, indexed, chainId) {
24
+ if (typeof indexed === "number" && Number.isInteger(indexed) && indexed > 0 && indexed <= 36)
25
+ return indexed;
26
+ return isNative(pairToken) ? chainFor(chainId)?.native?.decimals : undefined;
27
+ }
7
28
  /** Curve progress in percent with three decimals, capped at 100. */
8
29
  export const progressPct = (raised, threshold) => (threshold <= 0n ? 0 : Math.min(100, Number((raised * 100000n) / threshold) / 1000));
9
30
  const dayOf = (sec) => Math.floor(sec / 86_400);
@@ -22,22 +43,51 @@ export function dayStats(g, now, quoteDecimals) {
22
43
  const change24h = ref > 0 && current > 0 ? ((current - ref) / ref) * 100 : 0;
23
44
  return { volume24h, change24h };
24
45
  }
25
- export function summaryFromGql(g, now = Math.floor(Date.now() / 1000)) {
46
+ /**
47
+ * A subgraph row as a coin summary.
48
+ *
49
+ * `chainId` is the chain the subgraph is indexing, and it is required because the scale of the row's amounts
50
+ * is not inferable from the row: `Coin.quoteDecimals` when the endpoint carries it (subgraph 0.3.0 and later),
51
+ * and otherwise that chain's gas asset for a native-quoted coin. A row nothing can scale **throws**, because
52
+ * every figure below it — raised, threshold, price, volume — would be wrong by orders of magnitude and would
53
+ * look entirely ordinary.
54
+ */
55
+ export function summaryFromGql(g, now = Math.floor(Date.now() / 1000), chainId = 5042, knownDecimals) {
26
56
  const native = isNative(g.pairToken);
27
- const quoteDecimals = native ? 18 : 6;
57
+ /* `knownDecimals` is the scale a caller has ALREADY read off the chain, and it is the authoritative one.
58
+ `get_coin` reads the curve and the subgraph in one `Promise.all`, so when the indexed row carries no scale
59
+ and this package's registry cannot name the asset, the answer is nonetheless sitting in the caller's hand
60
+ — it scales `volumeQuote` with it on the next line. Without this parameter that row was thrown away and
61
+ the tool reported it as unscalable, which treated the symptom of a scale it did not need to look for. */
62
+ const quoteDecimals = knownDecimals ?? quoteDecimalsOf(g.pairToken, g.quoteDecimals, chainId);
63
+ if (quoteDecimals === undefined) {
64
+ throw new Error(native
65
+ ? `Coin ${g.id} is quoted in the gas token of chain ${chainId} and neither the indexer nor this package's chain registry says how many decimals it has, so its figures cannot be scaled`
66
+ : `Coin ${g.id} is quoted in ${g.pairToken} and the indexer does not carry its quoteDecimals (subgraph 0.3.0 or later), so its figures cannot be scaled`);
67
+ }
28
68
  const graduated = g.status !== "CLIMBING";
29
69
  const raisedRaw = BigInt(g.raised);
30
70
  const thresholdRaw = BigInt(g.graduationThreshold);
31
71
  const { volume24h, change24h } = dayStats(g, now, quoteDecimals);
72
+ const gas = chainFor(chainId)?.native;
73
+ /* The asset by its ADDRESS first, because that is what the subgraph carries and what a deploy approves. The
74
+ shortened-address string below is a display fallback for an asset this package has not been told about —
75
+ and until 20 September 2026 it was fed into `quoteUnitOf`, a SYMBOL lookup, which no shortened address can
76
+ ever match: USDG, a dollar, was published to every model as `dollar: false`. */
77
+ const byAddress = native ? undefined : quoteUnitByAddress(g.pairToken, chainId);
78
+ const quoteSymbol = native ? gas?.symbol ?? "" : byAddress?.symbol ?? `${g.pairToken.slice(0, 6)}\u2026${g.pairToken.slice(-4)}`;
32
79
  return {
33
80
  address: getAddress(g.id),
34
81
  curve: getAddress(g.curve),
35
82
  name: g.name,
36
83
  ticker: g.symbol,
37
84
  creator: getAddress(g.deployer),
38
- pair: native ? "USDC" : "EURC",
85
+ // The chain's own asset, not Arc's two. `symbol` is on the subgraph's Coin only for the coin itself, so an
86
+ // ERC-20 quote falls back to its address until the caller resolves it on chain (src/parabolic.ts).
87
+ pair: quoteSymbol,
39
88
  pairToken: getAddress(g.pairToken),
40
89
  quoteDecimals,
90
+ quote: quoteBlock(byAddress ?? quoteUnitOf(quoteSymbol, chainId), getAddress(g.pairToken), quoteDecimals, native),
41
91
  status: graduated ? "graduated" : "climbing",
42
92
  raised: formatUnits(graduated ? thresholdRaw : raisedRaw, quoteDecimals),
43
93
  raisedRaw: graduated ? thresholdRaw : raisedRaw,
package/dist/coins.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"coins.js","sourceRoot":"","sources":["../src/coins.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"coins.js","sourceRoot":"","sources":["../src/coins.ts"],"names":[],"mappings":"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"}
package/dist/config.d.ts CHANGED
@@ -1,4 +1,5 @@
1
1
  import { type Address } from "viem";
2
+ import { type VenueKey } from "./venues.js";
2
3
  /** Arc's system `Memo` contract (CREATE2, zero salt), verified on Arc Testnet; expected to match on mainnet. */
3
4
  export declare const ARC_MEMO_DEFAULT: Address;
4
5
  /** ERC-20 view of native USDC on Arc (6 decimals, same balance as the 18-decimal native asset). */
@@ -9,10 +10,17 @@ export declare const DEFAULT_API_URL = "https://www.parabolic.family/api/v1";
9
10
  /**
10
11
  * Deployed Parabolic addresses per chain, so the server is useful with no configuration at all.
11
12
  * The source repository is private; these are the same addresses the site publishes at
12
- * https://www.parabolic.family/docs#contracts and that are verified on Arcscan.
13
+ * https://www.parabolic.family/docs#contracts and that are verified on Sourcify.
13
14
  *
14
- * Arc mainnet (5042) opened on 16 September 2026; Parabolic deployed at block 21,105,294 and these are
15
- * the live addresses (contracts/deployments/5042.json). With them in place the default chain is Arc.
15
+ * **No address is written here** (23 Sep 2026, finding F50). Every one is read out of the deployment
16
+ * record the deploy itself produced, through `abi/deployments.json` (src/deployed.ts). This table was
17
+ * three chains typed by hand and chain two was never typed, so the package shipped for four days telling
18
+ * every agent Parabolic was not deployed on Robinhood Chain; syncing a record is now the whole of adding
19
+ * a chain, and `CHAINS[id].live` follows the same file.
20
+ *
21
+ * What stays written here is what no deploy can answer: the **public** JSON-RPC endpoint an unconfigured
22
+ * agent may call (a record holds the deploy machine's endpoint, which on Arc is a keyed provider's), the
23
+ * site that serves the chain, and Arc's ERC-8004 registry, which is Arc's contract and not one of ours.
16
24
  */
17
25
  export declare const DEPLOYMENTS: Record<number, {
18
26
  rpcUrl: string;
@@ -42,11 +50,11 @@ export declare const DEPLOYMENTS: Record<number, {
42
50
  export declare const DEFAULT_CHAIN_ID: number;
43
51
  export declare const DEFAULT_RPC_URL: string;
44
52
  export type Config = {
45
- /** JSON-RPC endpoint for Arc. */
53
+ /** JSON-RPC endpoint for the chain this server serves, which is not always Arc (23 Sep 2026). */
46
54
  rpcUrl: string;
47
55
  /** PARABOLIC_RPC_URL was set to something other than the deployment's own endpoint (a fork, a private node). */
48
56
  rpcOverridden?: boolean;
49
- /** 5042002 = Arc Testnet, 5042 = Arc mainnet (id unofficial until Circle publishes it). */
57
+ /** The chain this server serves: 5042 Arc, 5042002 Arc Testnet, 4663 Robinhood Chain. */
50
58
  chainId: number;
51
59
  /** ParabolicLaunchFactory. Required for on-chain coin lookups and for building launch transactions. */
52
60
  factory?: Address;
@@ -71,10 +79,27 @@ export type Config = {
71
79
  launchConfigId: bigint;
72
80
  /** First block to scan for `TokenLaunched` logs when listing without a subgraph. */
73
81
  factoryStartBlock: bigint;
82
+ /**
83
+ * ParabolicAggregatorRouter, for routed trades on another launchpad's coin (src/routed.ts). From the chain's
84
+ * deployment record (`aggregator`), or from PARABOLIC_AGGREGATOR_ROUTER only where the record names none AND the
85
+ * chain is Anvil or a testnet (`aggregatorEnvHonoured`), never on 5042 or 4663; never both, so an environment variable can never stand in for a deployed router.
86
+ */
87
+ aggregatorRouter?: Address;
88
+ /** Where `aggregatorRouter` came from: the deployment record, or the variable (a rehearsal, said so in every answer). */
89
+ aggregatorSource?: "record" | "env";
90
+ /** Venue subgraph endpoints for this chain, keyed by venue (PARABOLIC_SUBGRAPH_URL_<VENUE>_<CHAIN>). */
91
+ venueSubgraphs?: Partial<Record<VenueKey, string>>;
74
92
  };
75
93
  /** Environment variables the server reads, with their meaning (also rendered by `parabolic.docs`). */
76
94
  export declare const ENV_VARS: Array<[name: string, meaning: string]>;
77
95
  export declare function configFromEnv(env?: Record<string, string | undefined>): Config;
96
+ /**
97
+ * Whether PARABOLIC_AGGREGATOR_ROUTER may stand in for a router on this chain: Anvil and the testnets only (RE-30B-4).
98
+ * On a live chain (Arc 5042, Robinhood Chain 4663, any id this registry does not call a testnet) the deployment record
99
+ * is the only source, so an install snippet carrying the variable can never aim a trade at an address the record does
100
+ * not carry. A fork proof on a live chain's id sets the router on its own config, in the test, not through this.
101
+ */
102
+ export declare const aggregatorEnvHonoured: (chainId: number) => boolean;
78
103
  /**
79
104
  * Re-exported rather than defined here since 18 Sep 2026: the same two strings for the same two chains,
80
105
  * from the registry that now also knows how a coin on a third one is named (src/chains.ts).
@@ -89,13 +114,13 @@ export { chainName } from "./chains.js";
89
114
  */
90
115
  export declare function siteBase(chainId: number): string | undefined;
91
116
  /**
92
- * Arcscan base URL for the chain, undefined where there is no explorer (Anvil).
117
+ * The explorer base URL for the chain, undefined where there is no explorer (Anvil).
93
118
  *
94
- * Arc mainnet's host is a guess: Circle has published an explorer for Arc Testnet only, and
95
- * `https://explorer.arc.io` is Circle's published explorer (16 Sep 2026), behind a login at launch. `PARABOLIC_EXPLORER_URL` overrides it so a wrong guess
96
- * costs an environment variable rather than a republish of this package. Read from `process.env`
97
- * directly, unlike every other setting here, because this is called from `arcChain()` which builds a
98
- * viem chain from a chain id alone and never sees a Config.
119
+ * Arc mainnet's is Circle's `explorer.arc.io`, published 16 Sep 2026 and behind a login on the day;
120
+ * Robinhood Chain's is the Blockscout instance that chain lists. `PARABOLIC_EXPLORER_URL` overrides both,
121
+ * so a host that moves costs an environment variable rather than a republish of this package. Read from
122
+ * `process.env` directly, unlike every other setting here, because this is called from `arcChain()` which
123
+ * builds a viem chain from a chain id alone and never sees a Config.
99
124
  */
100
125
  export declare function explorerBase(chainId: number): string | undefined;
101
126
  export declare const explorerUrl: (chainId: number, kind: "address" | "tx", value: string) => string | undefined;
package/dist/config.js CHANGED
@@ -1,5 +1,7 @@
1
1
  import { getAddress, isAddress } from "viem";
2
2
  import { CHAINS, chainName } from "./chains.js";
3
+ import { deployedAt, factoryBlock, recordedAggregator, recordedEurc } from "./deployed.js";
4
+ import { VENUE_ENV_VARS, venueSubgraphsFrom } from "./venues.js";
3
5
  /** Arc's system `Memo` contract (CREATE2, zero salt), verified on Arc Testnet; expected to match on mainnet. */
4
6
  export const ARC_MEMO_DEFAULT = "0x5294E9927c3306DcBaDb03fe70b92e01cCede505";
5
7
  /** ERC-20 view of native USDC on Arc (6 decimals, same balance as the 18-decimal native asset). */
@@ -10,29 +12,65 @@ export const DEFAULT_API_URL = "https://www.parabolic.family/api/v1";
10
12
  /**
11
13
  * Deployed Parabolic addresses per chain, so the server is useful with no configuration at all.
12
14
  * The source repository is private; these are the same addresses the site publishes at
13
- * https://www.parabolic.family/docs#contracts and that are verified on Arcscan.
15
+ * https://www.parabolic.family/docs#contracts and that are verified on Sourcify.
14
16
  *
15
- * Arc mainnet (5042) opened on 16 September 2026; Parabolic deployed at block 21,105,294 and these are
16
- * the live addresses (contracts/deployments/5042.json). With them in place the default chain is Arc.
17
+ * **No address is written here** (23 Sep 2026, finding F50). Every one is read out of the deployment
18
+ * record the deploy itself produced, through `abi/deployments.json` (src/deployed.ts). This table was
19
+ * three chains typed by hand and chain two was never typed, so the package shipped for four days telling
20
+ * every agent Parabolic was not deployed on Robinhood Chain; syncing a record is now the whole of adding
21
+ * a chain, and `CHAINS[id].live` follows the same file.
22
+ *
23
+ * What stays written here is what no deploy can answer: the **public** JSON-RPC endpoint an unconfigured
24
+ * agent may call (a record holds the deploy machine's endpoint, which on Arc is a keyed provider's), the
25
+ * site that serves the chain, and Arc's ERC-8004 registry, which is Arc's contract and not one of ours.
17
26
  */
18
27
  export const DEPLOYMENTS = {
19
28
  5042002: {
20
29
  rpcUrl: "https://rpc.testnet.arc.io",
21
- factory: "0x2E06eD99bD7D164458847D186B282B23700b2C63",
22
- memoRouter: "0x1381567ea31a094e64f6B39Bd880d0b59c48e08F",
23
- eurc: "0x89B50855Aa3bE2F677cD6303Cec089B5F319D72a",
24
- startBlock: 61736670,
30
+ factory: deployedAt(5042002, "ParabolicLaunchFactory"),
31
+ memoRouter: deployedAt(5042002, "ParabolicMemoRouter"),
32
+ eurc: recordedEurc(5042002),
33
+ startBlock: factoryBlock(5042002),
25
34
  apiUrl: "https://parabolic-testnet.vercel.app/api/v1",
26
35
  agentRegistry: "0x8004A818BFB912233c491871b3d84c89A494BD9e",
27
36
  },
28
37
  5042: {
29
38
  rpcUrl: "https://rpc.mainnet.arc.io",
30
- factory: "0x27EAeC564fd049E6920C73323ffA7eb6a32A4B1e",
31
- memoRouter: "0x7d642150A222D0F6c98e2fC6bBe86E8Bb6DC90d0",
32
- startBlock: 21105294,
39
+ factory: deployedAt(5042, "ParabolicLaunchFactory"),
40
+ memoRouter: deployedAt(5042, "ParabolicMemoRouter"),
41
+ eurc: recordedEurc(5042),
42
+ startBlock: factoryBlock(5042),
33
43
  apiUrl: DEFAULT_API_URL,
34
44
  // No EURC pair is approved at launch and Arc has published no ERC-8004 registry for mainnet.
35
45
  },
46
+ /*
47
+ * Robinhood Chain, deployed 19 September 2026 and served here since the 23rd.
48
+ *
49
+ * `rpcUrl` is the chain's own public host (CLAUDE.md §4): keyless, and what the indexer, the keeper and
50
+ * the site all read. It prunes state at ten to thirteen minutes of chain time, which is a real limit on a
51
+ * historical read and none at all on the head reads these tools make.
52
+ *
53
+ * `apiUrl` is production, the same host Arc's entry names, because one site serves both boards — which is
54
+ * why `RestApi` sends `chain=rhc` (src/restapi.ts). Without that parameter the host answers for Arc, the
55
+ * `meta.chainId` check refuses it, and a listing on this chain came back empty however many coins existed.
56
+ *
57
+ * **`memoRouter` is deliberately absent, and it must stay absent.** This chain deploys `ParabolicRouter`,
58
+ * not `ParabolicMemoRouter`: the two share no function selector (`buy` is memo 0x3f60b633 against router
59
+ * 0xe6eef0e5) and this package carries only the memo router's ABI, so filling this field with the router's
60
+ * address would encode calldata for functions that address does not have and every routed build would
61
+ * revert. Without it `build_buy_tx` goes straight to the curve and `build_launch_tx` to the factory, both
62
+ * of which are the same on every chain. A `ParabolicRouter` encoder is what this field is waiting on.
63
+ *
64
+ * No `agentRegistry`: Arc publishes one for Arc Testnet and nobody publishes one here, so `agent_status`
65
+ * says there is no registry rather than reading an address that is not a registry.
66
+ */
67
+ 4663: {
68
+ rpcUrl: "https://rpc.mainnet.chain.robinhood.com",
69
+ factory: deployedAt(4663, "ParabolicLaunchFactory"),
70
+ eurc: recordedEurc(4663),
71
+ startBlock: factoryBlock(4663),
72
+ apiUrl: DEFAULT_API_URL,
73
+ },
36
74
  };
37
75
  /**
38
76
  * The chain an agent gets with no configuration at all: Arc mainnet once its addresses are in
@@ -47,8 +85,13 @@ export const DEFAULT_CHAIN_ID = DEPLOYMENTS[5042].factory ? 5042 : 5042002;
47
85
  export const DEFAULT_RPC_URL = DEPLOYMENTS[DEFAULT_CHAIN_ID].rpcUrl;
48
86
  /** Environment variables the server reads, with their meaning (also rendered by `parabolic.docs`). */
49
87
  export const ENV_VARS = [
50
- ["PARABOLIC_RPC_URL", `Arc JSON-RPC endpoint (default ${DEFAULT_RPC_URL})`],
51
- ["PARABOLIC_CHAIN_ID", `chain id: 5042002 for Arc Testnet, 5042 for Arc (default ${DEFAULT_CHAIN_ID}, ${chainName(DEFAULT_CHAIN_ID)})`],
88
+ // Not "Arc JSON-RPC endpoint": `configFromEnv` defaults this to the CONFIGURED chain's own public host
89
+ // (`known.rpcUrl`), so on a 4663 server the old line named Arc twice over — the wrong chain and a default
90
+ // that is not the one taken (second review of 23 September 2026). The default is stated for the chain the
91
+ // line can name at module load, which is the unconfigured one.
92
+ ["PARABOLIC_RPC_URL", `JSON-RPC endpoint for the configured chain (default: that chain's public endpoint, ${DEFAULT_RPC_URL} on ${chainName(DEFAULT_CHAIN_ID)})`],
93
+ // Named from the registry rather than typed, so a chain whose record ships is a chain this line offers.
94
+ ["PARABOLIC_CHAIN_ID", `chain id: ${Object.values(CHAINS).filter((c) => c.live).map((c) => `${c.id} for ${c.name}`).join(", ")} (default ${DEFAULT_CHAIN_ID}, ${chainName(DEFAULT_CHAIN_ID)})`],
52
95
  ["PARABOLIC_FACTORY", "ParabolicLaunchFactory address (on-chain lookups, launch transactions, log-scan listing)"],
53
96
  ["PARABOLIC_MEMO_ROUTER", "ParabolicMemoRouter address (memo-routed buys carrying a referral code; EOA-only)"],
54
97
  ["PARABOLIC_SUBGRAPH_URL", "Parabolic subgraph endpoint (listing, holders, volume, protocol stats)"],
@@ -59,7 +102,9 @@ export const ENV_VARS = [
59
102
  ["PARABOLIC_AGENT_REGISTRY", `Arc's ERC-8004 IdentityRegistry (agent_status, build_register_agent_tx and the list_coins pair "Agents" filter). Arc's, not ours, and Arc has published one for Arc Testnet only, so on ${chainName(DEFAULT_CHAIN_ID)} the default is ${DEPLOYMENTS[DEFAULT_CHAIN_ID].agentRegistry ?? "none and those tools say so instead of answering"}`],
60
103
  ["PARABOLIC_LAUNCH_CONFIG_ID", "factory launch config index (default 0)"],
61
104
  ["PARABOLIC_FACTORY_START_BLOCK", "first block for the TokenLaunched log scan (default: the factory's deployment block for this chain)"],
62
- ["PARABOLIC_EXPLORER_URL", `block explorer base URL for building address and transaction links (default ${explorerBase(DEFAULT_CHAIN_ID) ?? "none for this chain"}; Arc mainnet's host is unconfirmed)`],
105
+ ["PARABOLIC_AGGREGATOR_ROUTER", "ParabolicAggregatorRouter address, read ONLY on Anvil (31337) and the testnets, and only where the chain's deployment record names no router; ignored on Arc (5042) and Robinhood Chain (4663), where the record's router is the only one. Routed trades on another launchpad's coin refuse without one"],
106
+ ...VENUE_ENV_VARS.map((name) => [name, `subgraph endpoint for that launchpad's coins on that chain (parabolic.list_venue_coins); unset lists none`]),
107
+ ["PARABOLIC_EXPLORER_URL", `block explorer base URL for building address and transaction links (default ${explorerBase(DEFAULT_CHAIN_ID) ?? "none for this chain"})`],
63
108
  ];
64
109
  function addr(name, v) {
65
110
  if (v === undefined || v.trim() === "")
@@ -69,6 +114,23 @@ function addr(name, v) {
69
114
  throw new Error(`${name} is not an address: ${s}`);
70
115
  return getAddress(s);
71
116
  }
117
+ /**
118
+ * `PARABOLIC_MEMO_ROUTER`, refused on a chain whose own record says it routes through `ParabolicRouter`.
119
+ *
120
+ * Second review of 23 September 2026. `build_buy_tx` used to throw "Memo-routed buys need
121
+ * PARABOLIC_MEMO_ROUTER" on every chain, which reads as an instruction; an operator on Robinhood Chain who
122
+ * followed it would set this to that chain's `ParabolicRouter` and every routed build would encode calldata
123
+ * for functions that address does not have (`buy` is memo 0x3f60b633 against router 0xe6eef0e5), reverting
124
+ * after the caller had already approved the quote asset. Refusing at start-up is the only place that costs
125
+ * nobody a transaction. A chain with no record of either contract is left alone: a private deployment of the
126
+ * memo router is a real case, and this is not the place to judge it.
127
+ */
128
+ function memoRouterFrom(chainId, given) {
129
+ if (given !== undefined && deployedAt(chainId, "ParabolicMemoRouter") === undefined && deployedAt(chainId, "ParabolicRouter") !== undefined) {
130
+ throw new Error(`PARABOLIC_MEMO_ROUTER is set on ${chainName(chainId)}, which deploys ParabolicRouter and no ParabolicMemoRouter. The two share no function selector, so a routed build against that address would encode calldata it does not have and revert. Unset it: buys here go straight to the curve.`);
131
+ }
132
+ return given;
133
+ }
72
134
  function int(name, v, fallback) {
73
135
  if (v === undefined || v.trim() === "")
74
136
  return fallback;
@@ -89,7 +151,7 @@ export function configFromEnv(env = process.env) {
89
151
  rpcOverridden: Boolean(env.PARABOLIC_RPC_URL?.trim()) && env.PARABOLIC_RPC_URL.trim() !== known?.rpcUrl,
90
152
  chainId,
91
153
  factory: addr("PARABOLIC_FACTORY", env.PARABOLIC_FACTORY) ?? known?.factory,
92
- memoRouter: addr("PARABOLIC_MEMO_ROUTER", env.PARABOLIC_MEMO_ROUTER) ?? known?.memoRouter,
154
+ memoRouter: memoRouterFrom(chainId, addr("PARABOLIC_MEMO_ROUTER", env.PARABOLIC_MEMO_ROUTER)) ?? known?.memoRouter,
93
155
  apiUrl: env.PARABOLIC_API_URL === undefined ? known?.apiUrl ?? DEFAULT_API_URL : env.PARABOLIC_API_URL.trim() || undefined,
94
156
  subgraphUrl: env.PARABOLIC_SUBGRAPH_URL?.trim() || undefined,
95
157
  eurc: addr("PARABOLIC_EURC", env.PARABOLIC_EURC) ?? known?.eurc,
@@ -98,8 +160,24 @@ export function configFromEnv(env = process.env) {
98
160
  agentRegistry: addr("PARABOLIC_AGENT_REGISTRY", env.PARABOLIC_AGENT_REGISTRY) ?? known?.agentRegistry,
99
161
  launchConfigId: BigInt(int("PARABOLIC_LAUNCH_CONFIG_ID", env.PARABOLIC_LAUNCH_CONFIG_ID, 0)),
100
162
  factoryStartBlock: BigInt(int("PARABOLIC_FACTORY_START_BLOCK", env.PARABOLIC_FACTORY_START_BLOCK, known?.startBlock ?? 0)),
163
+ ...aggregatorFrom(chainId, addr("PARABOLIC_AGGREGATOR_ROUTER", env.PARABOLIC_AGGREGATOR_ROUTER)),
164
+ venueSubgraphs: venueSubgraphsFrom(env, chainId),
101
165
  };
102
166
  }
167
+ /**
168
+ * Whether PARABOLIC_AGGREGATOR_ROUTER may stand in for a router on this chain: Anvil and the testnets only (RE-30B-4).
169
+ * On a live chain (Arc 5042, Robinhood Chain 4663, any id this registry does not call a testnet) the deployment record
170
+ * is the only source, so an install snippet carrying the variable can never aim a trade at an address the record does
171
+ * not carry. A fork proof on a live chain's id sets the router on its own config, in the test, not through this.
172
+ */
173
+ export const aggregatorEnvHonoured = (chainId) => chainId === 31337 || CHAINS[chainId]?.testnet === true;
174
+ /** The record's router, or the variable's where the record names none on a rehearsal chain. See `Config.aggregatorRouter`. */
175
+ function aggregatorFrom(chainId, given) {
176
+ const recorded = recordedAggregator(chainId)?.address;
177
+ if (recorded)
178
+ return { aggregatorRouter: recorded, aggregatorSource: "record" };
179
+ return given && aggregatorEnvHonoured(chainId) ? { aggregatorRouter: given, aggregatorSource: "env" } : {};
180
+ }
103
181
  /**
104
182
  * Re-exported rather than defined here since 18 Sep 2026: the same two strings for the same two chains,
105
183
  * from the registry that now also knows how a coin on a third one is named (src/chains.ts).
@@ -120,13 +198,13 @@ export function siteBase(chainId) {
120
198
  return at === -1 ? api.replace(/\/+$/, "") : api.slice(0, at);
121
199
  }
122
200
  /**
123
- * Arcscan base URL for the chain, undefined where there is no explorer (Anvil).
201
+ * The explorer base URL for the chain, undefined where there is no explorer (Anvil).
124
202
  *
125
- * Arc mainnet's host is a guess: Circle has published an explorer for Arc Testnet only, and
126
- * `https://explorer.arc.io` is Circle's published explorer (16 Sep 2026), behind a login at launch. `PARABOLIC_EXPLORER_URL` overrides it so a wrong guess
127
- * costs an environment variable rather than a republish of this package. Read from `process.env`
128
- * directly, unlike every other setting here, because this is called from `arcChain()` which builds a
129
- * viem chain from a chain id alone and never sees a Config.
203
+ * Arc mainnet's is Circle's `explorer.arc.io`, published 16 Sep 2026 and behind a login on the day;
204
+ * Robinhood Chain's is the Blockscout instance that chain lists. `PARABOLIC_EXPLORER_URL` overrides both,
205
+ * so a host that moves costs an environment variable rather than a republish of this package. Read from
206
+ * `process.env` directly, unlike every other setting here, because this is called from `arcChain()` which
207
+ * builds a viem chain from a chain id alone and never sees a Config.
130
208
  */
131
209
  export function explorerBase(chainId) {
132
210
  const override = process.env.PARABOLIC_EXPLORER_URL?.trim();
@@ -1 +1 @@
1
- {"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,SAAS,EAAgB,MAAM,MAAM,CAAC;AAC3D,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAChD,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,kBAAkB,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAC3F,OAAO,EAAE,cAAc,EAAE,kBAAkB,EAAiB,MAAM,aAAa,CAAC;AAEhF,gHAAgH;AAChH,MAAM,CAAC,MAAM,gBAAgB,GAAY,4CAA4C,CAAC;AACtF,mGAAmG;AACnG,MAAM,CAAC,MAAM,SAAS,GAAY,4CAA4C,CAAC;AAC/E,+EAA+E;AAC/E,MAAM,CAAC,MAAM,YAAY,GAAY,4CAA4C,CAAC;AAElF,MAAM,CAAC,MAAM,eAAe,GAAG,qCAAqC,CAAC;AAErE;;;;;;;;;;;;;;GAcG;AACH,MAAM,CAAC,MAAM,WAAW,GAenB;IACH,OAAO,EAAE;QACP,MAAM,EAAE,4BAA4B;QACpC,OAAO,EAAE,UAAU,CAAC,OAAO,EAAE,wBAAwB,CAAC;QACtD,UAAU,EAAE,UAAU,CAAC,OAAO,EAAE,qBAAqB,CAAC;QACtD,IAAI,EAAE,YAAY,CAAC,OAAO,CAAC;QAC3B,UAAU,EAAE,YAAY,CAAC,OAAO,CAAC;QACjC,MAAM,EAAE,6CAA6C;QACrD,aAAa,EAAE,4CAA4C;KAC5D;IACD,IAAI,EAAE;QACJ,MAAM,EAAE,4BAA4B;QACpC,OAAO,EAAE,UAAU,CAAC,IAAI,EAAE,wBAAwB,CAAC;QACnD,UAAU,EAAE,UAAU,CAAC,IAAI,EAAE,qBAAqB,CAAC;QACnD,IAAI,EAAE,YAAY,CAAC,IAAI,CAAC;QACxB,UAAU,EAAE,YAAY,CAAC,IAAI,CAAC;QAC9B,MAAM,EAAE,eAAe;QACvB,6FAA6F;KAC9F;IACD;;;;;;;;;;;;;;;;;;;;OAoBG;IACH,IAAI,EAAE;QACJ,MAAM,EAAE,yCAAyC;QACjD,OAAO,EAAE,UAAU,CAAC,IAAI,EAAE,wBAAwB,CAAC;QACnD,IAAI,EAAE,YAAY,CAAC,IAAI,CAAC;QACxB,UAAU,EAAE,YAAY,CAAC,IAAI,CAAC;QAC9B,MAAM,EAAE,eAAe;KACxB;CACF,CAAC;AAEF;;;;;;;;GAQG;AACH,MAAM,CAAC,MAAM,gBAAgB,GAAG,WAAW,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC;AAC3E,MAAM,CAAC,MAAM,eAAe,GAAG,WAAW,CAAC,gBAAgB,CAAC,CAAC,MAAM,CAAC;AA4CpE,sGAAsG;AACtG,MAAM,CAAC,MAAM,QAAQ,GAA2C;IAC9D,uGAAuG;IACvG,0GAA0G;IAC1G,0GAA0G;IAC1G,+DAA+D;IAC/D,CAAC,mBAAmB,EAAE,sFAAsF,eAAe,OAAO,SAAS,CAAC,gBAAgB,CAAC,GAAG,CAAC;IACjK,wGAAwG;IACxG,CAAC,oBAAoB,EAAE,aAAa,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,aAAa,gBAAgB,KAAK,SAAS,CAAC,gBAAgB,CAAC,GAAG,CAAC;IAC/L,CAAC,mBAAmB,EAAE,0FAA0F,CAAC;IACjH,CAAC,uBAAuB,EAAE,mFAAmF,CAAC;IAC9G,CAAC,wBAAwB,EAAE,wEAAwE,CAAC;IACpG,CAAC,gBAAgB,EAAE,iDAAiD,CAAC;IACrE,CAAC,gBAAgB,EAAE,oEAAoE,CAAC;IACxF,CAAC,mBAAmB,EAAE,iGAAiG,WAAW,CAAC,gBAAgB,CAAC,CAAC,MAAM,OAAO,SAAS,CAAC,gBAAgB,CAAC,iCAAiC,CAAC;IAC/N,CAAC,oBAAoB,EAAE,qCAAqC,gBAAgB,GAAG,CAAC;IAChF,CAAC,0BAA0B,EAAE,2LAA2L,SAAS,CAAC,gBAAgB,CAAC,mBAAmB,WAAW,CAAC,gBAAgB,CAAC,CAAC,aAAa,IAAI,kDAAkD,EAAE,CAAC;IAC1W,CAAC,4BAA4B,EAAE,yCAAyC,CAAC;IACzE,CAAC,+BAA+B,EAAE,qGAAqG,CAAC;IACxI,CAAC,6BAA6B,EAAE,ySAAyS,CAAC;IAC1U,GAAG,cAAc,CAAC,GAAG,CAAC,CAAC,IAAI,EAAoB,EAAE,CAAC,CAAC,IAAI,EAAE,2GAA2G,CAAC,CAAC;IACtK,CAAC,wBAAwB,EAAE,+EAA+E,YAAY,CAAC,gBAAgB,CAAC,IAAI,qBAAqB,GAAG,CAAC;CACtK,CAAC;AAEF,SAAS,IAAI,CAAC,IAAY,EAAE,CAAqB;IAC/C,IAAI,CAAC,KAAK,SAAS,IAAI,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE;QAAE,OAAO,SAAS,CAAC;IACzD,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC;IACnB,IAAI,CAAC,SAAS,CAAC,CAAC,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC;QAAE,MAAM,IAAI,KAAK,CAAC,GAAG,IAAI,uBAAuB,CAAC,EAAE,CAAC,CAAC;IACzF,OAAO,UAAU,CAAC,CAAC,CAAC,CAAC;AACvB,CAAC;AAED;;;;;;;;;;GAUG;AACH,SAAS,cAAc,CAAC,OAAe,EAAE,KAA0B;IACjE,IAAI,KAAK,KAAK,SAAS,IAAI,UAAU,CAAC,OAAO,EAAE,qBAAqB,CAAC,KAAK,SAAS,IAAI,UAAU,CAAC,OAAO,EAAE,iBAAiB,CAAC,KAAK,SAAS,EAAE,CAAC;QAC5I,MAAM,IAAI,KAAK,CAAC,mCAAmC,SAAS,CAAC,OAAO,CAAC,yOAAyO,CAAC,CAAC;IAClT,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED,SAAS,GAAG,CAAC,IAAY,EAAE,CAAqB,EAAE,QAAgB;IAChE,IAAI,CAAC,KAAK,SAAS,IAAI,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE;QAAE,OAAO,QAAQ,CAAC;IACxD,MAAM,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;IAC3B,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC;QAAE,MAAM,IAAI,KAAK,CAAC,GAAG,IAAI,wCAAwC,CAAC,EAAE,CAAC,CAAC;IACvG,OAAO,CAAC,CAAC;AACX,CAAC;AAED,MAAM,UAAU,aAAa,CAAC,MAA0C,OAAO,CAAC,GAAG;IACjF,4FAA4F;IAC5F,8FAA8F;IAC9F,oDAAoD;IACpD,MAAM,OAAO,GAAG,GAAG,CAAC,oBAAoB,EAAE,GAAG,CAAC,kBAAkB,EAAE,gBAAgB,CAAC,CAAC;IACpF,MAAM,KAAK,GAAG,WAAW,CAAC,OAAO,CAAC,CAAC;IACnC,OAAO;QACL,MAAM,EAAE,GAAG,CAAC,iBAAiB,EAAE,IAAI,EAAE,IAAI,KAAK,EAAE,MAAM,IAAI,eAAe;QACzE,+FAA+F;QAC/F,aAAa,EAAE,OAAO,CAAC,GAAG,CAAC,iBAAiB,EAAE,IAAI,EAAE,CAAC,IAAI,GAAG,CAAC,iBAAkB,CAAC,IAAI,EAAE,KAAK,KAAK,EAAE,MAAM;QACxG,OAAO;QACP,OAAO,EAAE,IAAI,CAAC,mBAAmB,EAAE,GAAG,CAAC,iBAAiB,CAAC,IAAI,KAAK,EAAE,OAAO;QAC3E,UAAU,EAAE,cAAc,CAAC,OAAO,EAAE,IAAI,CAAC,uBAAuB,EAAE,GAAG,CAAC,qBAAqB,CAAC,CAAC,IAAI,KAAK,EAAE,UAAU;QAClH,MAAM,EAAE,GAAG,CAAC,iBAAiB,KAAK,SAAS,CAAC,CAAC,CAAC,KAAK,EAAE,MAAM,IAAI,eAAe,CAAC,CAAC,CAAC,GAAG,CAAC,iBAAiB,CAAC,IAAI,EAAE,IAAI,SAAS;QAC1H,WAAW,EAAE,GAAG,CAAC,sBAAsB,EAAE,IAAI,EAAE,IAAI,SAAS;QAC5D,IAAI,EAAE,IAAI,CAAC,gBAAgB,EAAE,GAAG,CAAC,cAAc,CAAC,IAAI,KAAK,EAAE,IAAI;QAC/D,IAAI,EAAE,IAAI,CAAC,gBAAgB,EAAE,GAAG,CAAC,cAAc,CAAC;QAChD,OAAO,EAAE,IAAI,CAAC,oBAAoB,EAAE,GAAG,CAAC,kBAAkB,CAAC,IAAI,gBAAgB;QAC/E,aAAa,EAAE,IAAI,CAAC,0BAA0B,EAAE,GAAG,CAAC,wBAAwB,CAAC,IAAI,KAAK,EAAE,aAAa;QACrG,cAAc,EAAE,MAAM,CAAC,GAAG,CAAC,4BAA4B,EAAE,GAAG,CAAC,0BAA0B,EAAE,CAAC,CAAC,CAAC;QAC5F,iBAAiB,EAAE,MAAM,CAAC,GAAG,CAAC,+BAA+B,EAAE,GAAG,CAAC,6BAA6B,EAAE,KAAK,EAAE,UAAU,IAAI,CAAC,CAAC,CAAC;QAC1H,GAAG,cAAc,CAAC,OAAO,EAAE,IAAI,CAAC,6BAA6B,EAAE,GAAG,CAAC,2BAA2B,CAAC,CAAC;QAChG,cAAc,EAAE,kBAAkB,CAAC,GAAG,EAAE,OAAO,CAAC;KACjD,CAAC;AACJ,CAAC;AAED;;;;;GAKG;AACH,MAAM,CAAC,MAAM,qBAAqB,GAAG,CAAC,OAAe,EAAW,EAAE,CAAC,OAAO,KAAK,KAAK,IAAI,MAAM,CAAC,OAAO,CAAC,EAAE,OAAO,KAAK,IAAI,CAAC;AAE1H,8HAA8H;AAC9H,SAAS,cAAc,CAAC,OAAe,EAAE,KAA0B;IACjE,MAAM,QAAQ,GAAG,kBAAkB,CAAC,OAAO,CAAC,EAAE,OAAO,CAAC;IACtD,IAAI,QAAQ;QAAE,OAAO,EAAE,gBAAgB,EAAE,QAAQ,EAAE,gBAAgB,EAAE,QAAQ,EAAE,CAAC;IAChF,OAAO,KAAK,IAAI,qBAAqB,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,EAAE,gBAAgB,EAAE,KAAK,EAAE,gBAAgB,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;AAC7G,CAAC;AAED;;;GAGG;AACH,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAExC;;;;;;GAMG;AACH,MAAM,UAAU,QAAQ,CAAC,OAAe;IACtC,MAAM,GAAG,GAAG,WAAW,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC;IACzC,IAAI,CAAC,GAAG;QAAE,OAAO,SAAS,CAAC;IAC3B,MAAM,EAAE,GAAG,GAAG,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;IAChC,OAAO,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;AAChE,CAAC;AAED;;;;;;;;GAQG;AACH,MAAM,UAAU,YAAY,CAAC,OAAe;IAC1C,MAAM,QAAQ,GAAG,OAAO,CAAC,GAAG,CAAC,sBAAsB,EAAE,IAAI,EAAE,CAAC;IAC5D,IAAI,QAAQ,IAAI,eAAe,CAAC,IAAI,CAAC,QAAQ,CAAC;QAAE,OAAO,QAAQ,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;IACpF,OAAO,MAAM,CAAC,OAAO,CAAC,EAAE,QAAQ,CAAC;AACnC,CAAC;AAED,MAAM,CAAC,MAAM,WAAW,GAAG,CAAC,OAAe,EAAE,IAAsB,EAAE,KAAa,EAAsB,EAAE;IACxG,MAAM,IAAI,GAAG,YAAY,CAAC,OAAO,CAAC,CAAC;IACnC,OAAO,IAAI,CAAC,CAAC,CAAC,GAAG,IAAI,IAAI,IAAI,IAAI,KAAK,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC;AACvD,CAAC,CAAC"}
package/dist/curve.d.ts CHANGED
@@ -80,7 +80,8 @@ export declare const graduationSplit: (reservedTokens: bigint, phantomQuote: big
80
80
  */
81
81
  export declare function snipeTaxBpsAt(elapsedSeconds: bigint, windowSeconds: bigint, startBps: bigint, feeBps: bigint, creatorTaxBps: bigint): bigint;
82
82
  export declare const toNumber: (v: bigint, decimals?: number) => number;
83
- /** Spot market cap in whole quote units for `supply` at the current curve price (quoteDecimals 18 for native USDC, 6 for EURC). */
83
+ /** Spot market cap in whole quote units for `supply` at the current curve price. `quoteDecimals` is the quote
84
+ * asset's own, read off it by the caller (src/parabolic.ts `readQuoteAsset`) and never derived from a flag. */
84
85
  export declare const marketCap: (quoteReserve: bigint, tokenReserve: bigint, supply: bigint, quoteDecimals?: number) => number;
85
86
  /** Market cap at the price the v4 pool is seeded with: (phantomQuote + graduationThreshold) / reservedTokens. */
86
87
  export declare const graduationMarketCap: (phantomQuote: bigint, graduationThreshold: bigint, reservedTokens: bigint, supply: bigint, quoteDecimals?: number) => number;
package/dist/curve.js CHANGED
@@ -104,7 +104,8 @@ export function snipeTaxBpsAt(elapsedSeconds, windowSeconds, startBps, feeBps, c
104
104
  return bps > ceiling ? ceiling : bps;
105
105
  }
106
106
  export const toNumber = (v, decimals = TOKEN_DECIMALS) => Number(formatUnits(v, decimals));
107
- /** Spot market cap in whole quote units for `supply` at the current curve price (quoteDecimals 18 for native USDC, 6 for EURC). */
107
+ /** Spot market cap in whole quote units for `supply` at the current curve price. `quoteDecimals` is the quote
108
+ * asset's own, read off it by the caller (src/parabolic.ts `readQuoteAsset`) and never derived from a flag. */
108
109
  export const marketCap = (quoteReserve, tokenReserve, supply, quoteDecimals = TOKEN_DECIMALS) => tokenReserve === 0n ? 0 : toNumber((quoteReserve * supply) / tokenReserve, quoteDecimals);
109
110
  /** Market cap at the price the v4 pool is seeded with: (phantomQuote + graduationThreshold) / reservedTokens. */
110
111
  export const graduationMarketCap = (phantomQuote, graduationThreshold, reservedTokens, supply, quoteDecimals = TOKEN_DECIMALS) => reservedTokens === 0n ? 0 : toNumber(((phantomQuote + graduationThreshold) * supply) / reservedTokens, quoteDecimals);
package/dist/curve.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"curve.js","sourceRoot":"","sources":["../src/curve.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"curve.js","sourceRoot":"","sources":["../src/curve.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,80 @@
1
+ import { type Address } from "viem";
2
+ type Deployed = {
3
+ address: string;
4
+ block: number | null;
5
+ };
6
+ type Record_ = {
7
+ chainId: number;
8
+ network: string;
9
+ timestamp?: string;
10
+ commit?: string;
11
+ contracts: Record<string, Deployed>;
12
+ config: {
13
+ launchConfigId?: number | null;
14
+ launchForwarder?: string | null;
15
+ quoteToken?: string | null;
16
+ quoteEconomics?: {
17
+ decimals?: number | null;
18
+ } | null;
19
+ eurc?: string | null;
20
+ arcMemo?: string | null;
21
+ nativeDecimals?: number | null;
22
+ quoteAssets?: {
23
+ address?: string | null;
24
+ symbol?: string | null;
25
+ }[] | null;
26
+ } | null;
27
+ /** The chain's Uniswap v4 periphery as the deploy recorded it; null on a record that names none. */
28
+ v4?: Record<string, {
29
+ address?: string | null;
30
+ } | undefined> | null;
31
+ /** The aggregator router (docs/33 §A11). Absent means no router on that chain, never "unknown". */
32
+ aggregator?: {
33
+ address?: string | null;
34
+ block?: number | null;
35
+ } | null;
36
+ };
37
+ /** The record for a chain, or undefined where this package ships none. */
38
+ export declare const recordFor: (chainId: number) => Record_ | undefined;
39
+ /** A deployed contract's address by its Solidity name, or undefined where that chain's record has none. */
40
+ export declare const deployedAt: (chainId: number, name: string) => Address | undefined;
41
+ /**
42
+ * The block the factory itself was deployed at, which is where a `TokenLaunched` scan starts.
43
+ *
44
+ * The factory's own block rather than the record's `startBlock`: the record's is the first transaction of
45
+ * the whole deploy, and no coin can exist before the contract that launches them does.
46
+ */
47
+ export declare const factoryBlock: (chainId: number) => number | undefined;
48
+ /** EURC where a chain's deploy recorded one, undefined otherwise. Arc mainnet's record names none. */
49
+ export declare const recordedEurc: (chainId: number) => Address | undefined;
50
+ /** Chain ids this package ships addresses for, ascending. */
51
+ export type RecordedQuoteAsset = {
52
+ address: Address;
53
+ symbol: string;
54
+ };
55
+ /**
56
+ * Every quote asset a chain's deployment record names, checksummed. `config.quoteAssets` since the 4663 record
57
+ * (USDG and the three shares approved on 21 Sep 2026); Arc's record predates the field and names its ERC-20
58
+ * quote in `config.eurc` alone, null on mainnet, which is what "EURC pairs off at launch" looks like in a record.
59
+ * Read, never typed: a share named by hand here is the copy that goes stale (23 Sep 2026, the bot had exactly
60
+ * that gap and this package had it too, answering a 4663 share by its address alone).
61
+ */
62
+ export declare function recordedQuoteAssets(chainId: number): RecordedQuoteAsset[];
63
+ export declare const deployedChainIds: () => number[];
64
+ /**
65
+ * Whether Parabolic is deployed on this chain, which is what `live` means in src/chains.ts: a factory
66
+ * this package can read with no configuration at all, not merely a chain a reference can name.
67
+ */
68
+ export declare const isDeployedOn: (chainId: number) => boolean;
69
+ /**
70
+ * The ParabolicAggregatorRouter a chain's deployment record names under `aggregator`, or undefined. Undefined is the
71
+ * ordinary state until the founder deploys it (docs/33 §A11), and every routed tool then refuses by name: nothing in
72
+ * this package builds a routed trade against an address the record does not carry (src/routed.ts).
73
+ */
74
+ export declare const recordedAggregator: (chainId: number) => {
75
+ address: Address;
76
+ block: number | null;
77
+ } | undefined;
78
+ /** One v4 periphery contract by the record's own key (`v4Quoter`, `stateView`, `permit2`, `universalRouter`). */
79
+ export declare const recordedV4: (chainId: number, name: string) => Address | undefined;
80
+ export {};