@parabolicfamily/mcp 0.1.5 → 0.1.7
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +24 -2
- package/dist/chains.d.ts +79 -0
- package/dist/chains.js +68 -0
- package/dist/chains.js.map +1 -0
- package/dist/config.d.ts +5 -1
- package/dist/config.js +7 -5
- package/dist/config.js.map +1 -1
- package/dist/docs.d.ts +11 -1
- package/dist/docs.js +51 -19
- package/dist/docs.js.map +1 -1
- package/dist/parabolic.d.ts +127 -6
- package/dist/parabolic.js +98 -6
- package/dist/parabolic.js.map +1 -1
- package/dist/restapi.d.ts +29 -2
- package/dist/restapi.js +56 -10
- package/dist/restapi.js.map +1 -1
- package/dist/server.js +36 -17
- package/dist/server.js.map +1 -1
- package/dist/tx.d.ts +25 -0
- package/dist/tx.js +29 -0
- package/dist/tx.js.map +1 -1
- package/package.json +1 -1
- package/src/chains.ts +114 -0
- package/src/config.ts +7 -5
- package/src/docs.ts +53 -19
- package/src/parabolic.ts +103 -9
- package/src/restapi.ts +62 -12
- package/src/server.ts +36 -17
- package/src/tx.ts +32 -0
package/README.md
CHANGED
|
@@ -14,11 +14,28 @@ npx -y @parabolicfamily/mcp # starts the server on stdio
|
|
|
14
14
|
|
|
15
15
|
The ABIs ship with the package, so it works offline against any Arc RPC you point it at.
|
|
16
16
|
|
|
17
|
+
## What changed in 0.1.7 (for an existing consumer: nothing has to)
|
|
18
|
+
|
|
19
|
+
0.1.7 makes the server chain-aware. **Every call that worked in 0.1.6 works unchanged and means the same
|
|
20
|
+
chain it meant**, because an unqualified identifier means Arc, permanently (`docs/20-multichain.md` §3).
|
|
21
|
+
|
|
22
|
+
- **Added, optional, on every tool: `chain`.** A chain key (`"arc"`) or an id (`5042`). Left out, it is the
|
|
23
|
+
chain the server is configured for — Arc with no configuration at all. Arguments are strict, so this had
|
|
24
|
+
to be declared rather than tolerated; passing nothing is what every existing caller does.
|
|
25
|
+
- **Added: `address` accepts a reference.** `0x…` is still a coin on this server's chain. `rhc:0x…` names a
|
|
26
|
+
coin on another one and is **refused by name** ("…is on Robinhood Chain (chain 4663); this server is
|
|
27
|
+
configured for Arc"), never looked up here: the same address is a different token on every chain.
|
|
28
|
+
- **Added to answers: `chain: { id, key, name }`** on `get_coin`, `list_coins`, both quotes, all three
|
|
29
|
+
builders and `protocol_stats`, plus `ref` on `get_coin` and on each listed coin. Nothing was renamed,
|
|
30
|
+
nothing changed type: `address` is the address, `tx.chainId` is the same scalar a wallet reads.
|
|
31
|
+
- One server still serves one chain. A second chain is a second server with its own `PARABOLIC_CHAIN_ID`,
|
|
32
|
+
RPC and factory.
|
|
33
|
+
|
|
17
34
|
## Configure
|
|
18
35
|
|
|
19
36
|
Nothing is required. Out of the box the server talks to the newest Arc chain it has addresses for,
|
|
20
37
|
with those addresses already built in, so `npx -y @parabolicfamily/mcp` is a working install. Since
|
|
21
|
-
0.1.
|
|
38
|
+
0.1.6 that is **Arc mainnet** (5042), live since 16 September 2026; set `PARABOLIC_CHAIN_ID=5042002`
|
|
22
39
|
for Arc Testnet.
|
|
23
40
|
|
|
24
41
|
Set `PARABOLIC_CHAIN_ID` and the RPC and contract addresses for that chain follow it. Every unsigned
|
|
@@ -135,7 +152,12 @@ Arguments are strict: a key a tool does not know fails with `Unrecognized key` i
|
|
|
135
152
|
| `parabolic.protocol_stats` | Subgraph totals (launches, graduations, trades, volume, fees, daily series) plus the factory's live launch fee, curve preset, snipe-tax terms and contract addresses. |
|
|
136
153
|
| `parabolic.docs` | The adopted parameters, curve mechanics, verified Arc facts and this server's configuration, as text. |
|
|
137
154
|
|
|
138
|
-
|
|
155
|
+
Every tool above also takes an optional `chain` (see "What changed in 0.1.7"), and every coin argument
|
|
156
|
+
takes a reference: `0x…` for a coin on this server's chain, `rhc:0x…` for one elsewhere. A wallet argument
|
|
157
|
+
(`recipient`, `buyer`, `creator`, `from`, `agent_status`'s `address`) stays a plain address — a wallet is
|
|
158
|
+
the same person on every EVM chain.
|
|
159
|
+
|
|
160
|
+
Resources: `parabolic://docs/parameters` (same text as `parabolic.docs`) and `parabolic://coins/{address}` (same JSON as `parabolic.get_coin`; the address may be a reference).
|
|
139
161
|
|
|
140
162
|
### Examples
|
|
141
163
|
|
package/dist/chains.d.ts
ADDED
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
import { type Address } from "viem";
|
|
2
|
+
/**
|
|
3
|
+
* The chain registry and the chain-qualified reference.
|
|
4
|
+
*
|
|
5
|
+
* One rule, from docs/20-multichain.md §3: **`arc` is the empty prefix. An unqualified identifier means
|
|
6
|
+
* Arc, permanently.** `parabolic.get_coin({ address: "0x552F…4073" })` is the Arc coin it has always been,
|
|
7
|
+
* for every consumer of `@parabolicfamily/mcp` already installed; a coin on another chain is named
|
|
8
|
+
* `rhc:0x552F…4073`. Nothing an agent already sends changes meaning, which is the only way to widen a
|
|
9
|
+
* published tool's input without a version break.
|
|
10
|
+
*
|
|
11
|
+
* The registry is small on purpose. It carries what a *reference* needs — an id, a prefix, a name, an
|
|
12
|
+
* explorer — while the deployed addresses stay in `DEPLOYMENTS` (src/config.ts), keyed by the same chain
|
|
13
|
+
* id and written from `contracts/deployments/<chainId>.json`. A chain can be nameable here long before
|
|
14
|
+
* anything of ours is deployed on it, which is exactly the state Robinhood Chain is in.
|
|
15
|
+
*/
|
|
16
|
+
/**
|
|
17
|
+
* A chain's stable name in configuration, logs and the `chain` field of an answer. The same set
|
|
18
|
+
* web/lib/chains.ts uses, with Arc Testnet spelled `arc-testnet` here and `arct` there; `chainByName`
|
|
19
|
+
* reads both. Solana is absent on purpose (see the note above `KEY_ALIASES`).
|
|
20
|
+
*/
|
|
21
|
+
export type ChainKey = "arc" | "arc-testnet" | "rhc" | "base" | "eth" | "bnb" | "anvil";
|
|
22
|
+
export type ChainInfo = {
|
|
23
|
+
id: number;
|
|
24
|
+
key: ChainKey;
|
|
25
|
+
/** What precedes the colon in a reference. Empty for Arc, which is what makes a bare address mean Arc. */
|
|
26
|
+
prefix: string;
|
|
27
|
+
name: string;
|
|
28
|
+
/**
|
|
29
|
+
* The gas token, where it has been read from the chain. Undefined otherwise: a symbol and a decimal
|
|
30
|
+
* count are measurements, and this server quotes money to agents that act on it.
|
|
31
|
+
*/
|
|
32
|
+
native?: {
|
|
33
|
+
name: string;
|
|
34
|
+
symbol: string;
|
|
35
|
+
decimals: number;
|
|
36
|
+
dollar: boolean;
|
|
37
|
+
};
|
|
38
|
+
explorer?: string;
|
|
39
|
+
testnet: boolean;
|
|
40
|
+
/** Whether Parabolic is deployed and served there today. */
|
|
41
|
+
live: boolean;
|
|
42
|
+
};
|
|
43
|
+
/**
|
|
44
|
+
* Arc mainnet and Arc Testnet, with the explorer hosts this package has always used (Arc mainnet's is
|
|
45
|
+
* Circle's `explorer.arc.io`, published 16 Sep 2026, behind a login at launch; `PARABOLIC_EXPLORER_URL`
|
|
46
|
+
* still overrides both).
|
|
47
|
+
*
|
|
48
|
+
* Robinhood Chain (4663, from docs/20-multichain.md §1, verified 18 Sep 2026 against chain docs) is here
|
|
49
|
+
* so a reference and an error message can name it. It has no gas token and no explorer written down,
|
|
50
|
+
* because neither has been read in this repo, and nothing here invents either.
|
|
51
|
+
*/
|
|
52
|
+
export declare const CHAINS: Record<number, ChainInfo>;
|
|
53
|
+
/** Arc mainnet: the chain an unqualified identifier means. */
|
|
54
|
+
export declare const ARC = 5042;
|
|
55
|
+
export declare const chainFor: (chainId: number) => ChainInfo | undefined;
|
|
56
|
+
/** "Arc", "Arc Testnet", "Robinhood Chain", else `chain 8453`. */
|
|
57
|
+
export declare const chainName: (chainId: number) => string;
|
|
58
|
+
/** A chain by key ("arc"), by prefix ("rhc") or by id ("5042" / 5042); undefined for anything else. */
|
|
59
|
+
export declare function chainByName(value: string | number): ChainInfo | undefined;
|
|
60
|
+
/** A coin: the chain it is on and its address there. `chainId` stays a scalar, as every payload's does. */
|
|
61
|
+
export type Ref = {
|
|
62
|
+
chainId: number;
|
|
63
|
+
address: Address;
|
|
64
|
+
};
|
|
65
|
+
/**
|
|
66
|
+
* Parses a coin reference. `0x…` is the coin on `home`; `rhc:0x…` is the coin on the chain that prefix
|
|
67
|
+
* names. Null for anything else, including a prefix no chain claims — an agent handed `rhc:0x…` by the
|
|
68
|
+
* site must be told which chain that is, not answered from Arc, because the same address is a different
|
|
69
|
+
* token on every chain (docs/20-multichain.md §2).
|
|
70
|
+
*/
|
|
71
|
+
export declare function parseRef(input: string, home: number): Ref | null;
|
|
72
|
+
/** A reference as it is written: the bare address on Arc, `rhc:0x…` anywhere else. */
|
|
73
|
+
export declare function formatRef(ref: Ref): string;
|
|
74
|
+
/** The chain block every payload carries, so an answer always says which chain it is about. */
|
|
75
|
+
export declare const chainBlock: (chainId: number) => {
|
|
76
|
+
id: number;
|
|
77
|
+
key: string;
|
|
78
|
+
name: string;
|
|
79
|
+
};
|
package/dist/chains.js
ADDED
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
import { getAddress, isAddress } from "viem";
|
|
2
|
+
/**
|
|
3
|
+
* Arc mainnet and Arc Testnet, with the explorer hosts this package has always used (Arc mainnet's is
|
|
4
|
+
* Circle's `explorer.arc.io`, published 16 Sep 2026, behind a login at launch; `PARABOLIC_EXPLORER_URL`
|
|
5
|
+
* still overrides both).
|
|
6
|
+
*
|
|
7
|
+
* Robinhood Chain (4663, from docs/20-multichain.md §1, verified 18 Sep 2026 against chain docs) is here
|
|
8
|
+
* so a reference and an error message can name it. It has no gas token and no explorer written down,
|
|
9
|
+
* because neither has been read in this repo, and nothing here invents either.
|
|
10
|
+
*/
|
|
11
|
+
export const CHAINS = {
|
|
12
|
+
5042: { id: 5042, key: "arc", prefix: "", name: "Arc", native: { name: "USDC", symbol: "USDC", decimals: 18, dollar: true }, explorer: "https://explorer.arc.io", testnet: false, live: true },
|
|
13
|
+
5042002: { id: 5042002, key: "arc-testnet", prefix: "", name: "Arc Testnet", native: { name: "USDC", symbol: "USDC", decimals: 18, dollar: true }, explorer: "https://testnet.arcscan.app", testnet: true, live: true },
|
|
14
|
+
4663: { id: 4663, key: "rhc", prefix: "rhc", name: "Robinhood Chain", testnet: false, live: false },
|
|
15
|
+
8453: { id: 8453, key: "base", prefix: "base", name: "Base", testnet: false, live: false },
|
|
16
|
+
1: { id: 1, key: "eth", prefix: "eth", name: "Ethereum", testnet: false, live: false },
|
|
17
|
+
56: { id: 56, key: "bnb", prefix: "bnb", name: "BNB Chain", testnet: false, live: false },
|
|
18
|
+
31337: { id: 31337, key: "anvil", prefix: "anvil", name: "Anvil", testnet: true, live: false },
|
|
19
|
+
};
|
|
20
|
+
/** Arc mainnet: the chain an unqualified identifier means. */
|
|
21
|
+
export const ARC = 5042;
|
|
22
|
+
export const chainFor = (chainId) => CHAINS[chainId];
|
|
23
|
+
/** "Arc", "Arc Testnet", "Robinhood Chain", else `chain 8453`. */
|
|
24
|
+
export const chainName = (chainId) => CHAINS[chainId]?.name ?? `chain ${chainId}`;
|
|
25
|
+
/**
|
|
26
|
+
* `arct` is what web/lib/chains.ts calls Arc Testnet, and this calls it `arc-testnet`. Both are read
|
|
27
|
+
* wherever a chain is named by key, so neither surface has to remember which spelling the other chose.
|
|
28
|
+
* Solana has no entry at all: its addresses are base58 and it has no EVM chain id, so a `sol:` reference
|
|
29
|
+
* cannot be parsed into the `{ chainId, address }` this file is built on, and answering "not a coin" is
|
|
30
|
+
* more honest than half-parsing it.
|
|
31
|
+
*/
|
|
32
|
+
const KEY_ALIASES = { arct: 5042002, "arc-testnet": 5042002 };
|
|
33
|
+
/** A chain by key ("arc"), by prefix ("rhc") or by id ("5042" / 5042); undefined for anything else. */
|
|
34
|
+
export function chainByName(value) {
|
|
35
|
+
const s = String(value).trim().toLowerCase();
|
|
36
|
+
if (/^\d+$/.test(s))
|
|
37
|
+
return CHAINS[Number(s)];
|
|
38
|
+
const alias = KEY_ALIASES[s];
|
|
39
|
+
if (alias !== undefined)
|
|
40
|
+
return CHAINS[alias];
|
|
41
|
+
return Object.values(CHAINS).find((c) => c.key === s || (c.prefix !== "" && c.prefix === s));
|
|
42
|
+
}
|
|
43
|
+
/**
|
|
44
|
+
* Parses a coin reference. `0x…` is the coin on `home`; `rhc:0x…` is the coin on the chain that prefix
|
|
45
|
+
* names. Null for anything else, including a prefix no chain claims — an agent handed `rhc:0x…` by the
|
|
46
|
+
* site must be told which chain that is, not answered from Arc, because the same address is a different
|
|
47
|
+
* token on every chain (docs/20-multichain.md §2).
|
|
48
|
+
*/
|
|
49
|
+
export function parseRef(input, home) {
|
|
50
|
+
const s = input.trim();
|
|
51
|
+
const at = s.indexOf(":");
|
|
52
|
+
if (at === -1)
|
|
53
|
+
return isAddress(s, { strict: false }) ? { chainId: home, address: getAddress(s) } : null;
|
|
54
|
+
const prefix = s.slice(0, at).toLowerCase();
|
|
55
|
+
const rest = s.slice(at + 1);
|
|
56
|
+
if (prefix === "" || !isAddress(rest, { strict: false }))
|
|
57
|
+
return null;
|
|
58
|
+
const chain = Object.values(CHAINS).find((c) => c.prefix === prefix);
|
|
59
|
+
return chain ? { chainId: chain.id, address: getAddress(rest) } : null;
|
|
60
|
+
}
|
|
61
|
+
/** A reference as it is written: the bare address on Arc, `rhc:0x…` anywhere else. */
|
|
62
|
+
export function formatRef(ref) {
|
|
63
|
+
const prefix = CHAINS[ref.chainId]?.prefix ?? "";
|
|
64
|
+
return prefix ? `${prefix}:${ref.address}` : ref.address;
|
|
65
|
+
}
|
|
66
|
+
/** The chain block every payload carries, so an answer always says which chain it is about. */
|
|
67
|
+
export const chainBlock = (chainId) => ({ id: chainId, key: CHAINS[chainId]?.key ?? String(chainId), name: chainName(chainId) });
|
|
68
|
+
//# sourceMappingURL=chains.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"chains.js","sourceRoot":"","sources":["../src/chains.ts"],"names":[],"mappings":"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"}
|
package/dist/config.d.ts
CHANGED
|
@@ -75,7 +75,11 @@ export type Config = {
|
|
|
75
75
|
/** Environment variables the server reads, with their meaning (also rendered by `parabolic.docs`). */
|
|
76
76
|
export declare const ENV_VARS: Array<[name: string, meaning: string]>;
|
|
77
77
|
export declare function configFromEnv(env?: Record<string, string | undefined>): Config;
|
|
78
|
-
|
|
78
|
+
/**
|
|
79
|
+
* Re-exported rather than defined here since 18 Sep 2026: the same two strings for the same two chains,
|
|
80
|
+
* from the registry that now also knows how a coin on a third one is named (src/chains.ts).
|
|
81
|
+
*/
|
|
82
|
+
export { chainName } from "./chains.js";
|
|
79
83
|
/**
|
|
80
84
|
* The Parabolic site that serves this chain's deployment, with no trailing slash.
|
|
81
85
|
*
|
package/dist/config.js
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { getAddress, isAddress } from "viem";
|
|
2
|
+
import { CHAINS, chainName } from "./chains.js";
|
|
2
3
|
/** Arc's system `Memo` contract (CREATE2, zero salt), verified on Arc Testnet; expected to match on mainnet. */
|
|
3
4
|
export const ARC_MEMO_DEFAULT = "0x5294E9927c3306DcBaDb03fe70b92e01cCede505";
|
|
4
5
|
/** ERC-20 view of native USDC on Arc (6 decimals, same balance as the 18-decimal native asset). */
|
|
@@ -99,10 +100,11 @@ export function configFromEnv(env = process.env) {
|
|
|
99
100
|
factoryStartBlock: BigInt(int("PARABOLIC_FACTORY_START_BLOCK", env.PARABOLIC_FACTORY_START_BLOCK, known?.startBlock ?? 0)),
|
|
100
101
|
};
|
|
101
102
|
}
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
103
|
+
/**
|
|
104
|
+
* Re-exported rather than defined here since 18 Sep 2026: the same two strings for the same two chains,
|
|
105
|
+
* from the registry that now also knows how a coin on a third one is named (src/chains.ts).
|
|
106
|
+
*/
|
|
107
|
+
export { chainName } from "./chains.js";
|
|
106
108
|
/**
|
|
107
109
|
* The Parabolic site that serves this chain's deployment, with no trailing slash.
|
|
108
110
|
*
|
|
@@ -130,7 +132,7 @@ export function explorerBase(chainId) {
|
|
|
130
132
|
const override = process.env.PARABOLIC_EXPLORER_URL?.trim();
|
|
131
133
|
if (override && /^https?:\/\//i.test(override))
|
|
132
134
|
return override.replace(/\/+$/, "");
|
|
133
|
-
return chainId
|
|
135
|
+
return CHAINS[chainId]?.explorer;
|
|
134
136
|
}
|
|
135
137
|
export const explorerUrl = (chainId, kind, value) => {
|
|
136
138
|
const base = explorerBase(chainId);
|
package/dist/config.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,SAAS,EAAgB,MAAM,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"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"}
|
package/dist/docs.d.ts
CHANGED
|
@@ -1,3 +1,13 @@
|
|
|
1
1
|
import { type Config } from "./config.js";
|
|
2
|
-
/**
|
|
2
|
+
/**
|
|
3
|
+
* Adopted product parameters (adopted 2026-09-06, graduation threshold revised to $8,000 on 2026-09-16; published
|
|
4
|
+
* at https://www.parabolic.family/docs#parameters) and the chain's own facts, as text.
|
|
5
|
+
*
|
|
6
|
+
* Two things stopped being written here on 18 Sep 2026 (docs/20-multichain.md §4). **"Dollar-native"** meant one
|
|
7
|
+
* asset is both the money and the gas, which is Arc's property and nobody else's; what travels is that the curve
|
|
8
|
+
* is priced in a dollar asset rather than in the gas token, which is what every incumbent elsewhere does. And the
|
|
9
|
+
* **launch fee** is `msg.value` on the factory, so a written "$1.00 USDC" is a dollar on Arc and one ETH on an ETH
|
|
10
|
+
* chain; an agent that reads this document acts on it, so it now says where to read the figure instead of being
|
|
11
|
+
* the figure. The Arc network block is printed only on an Arc chain, for the same reason.
|
|
12
|
+
*/
|
|
3
13
|
export declare function docsText(config: Config): string;
|
package/dist/docs.js
CHANGED
|
@@ -1,25 +1,48 @@
|
|
|
1
1
|
import { ARC_MEMO_DEFAULT, ENV_VARS, USDC_VIEW, chainName } from "./config.js";
|
|
2
|
+
import { chainFor } from "./chains.js";
|
|
2
3
|
import { endpointHost } from "./format.js";
|
|
3
|
-
/**
|
|
4
|
+
/**
|
|
5
|
+
* Adopted product parameters (adopted 2026-09-06, graduation threshold revised to $8,000 on 2026-09-16; published
|
|
6
|
+
* at https://www.parabolic.family/docs#parameters) and the chain's own facts, as text.
|
|
7
|
+
*
|
|
8
|
+
* Two things stopped being written here on 18 Sep 2026 (docs/20-multichain.md §4). **"Dollar-native"** meant one
|
|
9
|
+
* asset is both the money and the gas, which is Arc's property and nobody else's; what travels is that the curve
|
|
10
|
+
* is priced in a dollar asset rather than in the gas token, which is what every incumbent elsewhere does. And the
|
|
11
|
+
* **launch fee** is `msg.value` on the factory, so a written "$1.00 USDC" is a dollar on Arc and one ETH on an ETH
|
|
12
|
+
* chain; an agent that reads this document acts on it, so it now says where to read the figure instead of being
|
|
13
|
+
* the figure. The Arc network block is printed only on an Arc chain, for the same reason.
|
|
14
|
+
*/
|
|
4
15
|
export function docsText(config) {
|
|
5
16
|
const set = (v) => v ?? "(not configured)";
|
|
17
|
+
const chain = chainFor(config.chainId);
|
|
18
|
+
// Which chain family, from the registry rather than from a pair of written ids: everything in the Arc block
|
|
19
|
+
// below is Arc's own, and an id comparison here is the same kind of hardcoded chain fact this file is losing.
|
|
20
|
+
const onArc = chain?.key === "arc" || chain?.key === "arc-testnet";
|
|
21
|
+
const gas = chain?.native ? `${chain.native.symbol}${chain.native.dollar ? " (itself a dollar, so a figure in it is a figure in dollars)" : " (not a dollar: a figure in it is not a figure in dollars)"}` : "not read from this chain in this repo, so nothing here prices it";
|
|
6
22
|
return [
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
23
|
+
`PARABOLIC — bonding-curve token launchpad on ${chainName(config.chainId)}; curves priced in dollars${chain?.native?.dollar === true
|
|
24
|
+
? ", which on this chain is also the gas asset"
|
|
25
|
+
: ", not in the gas token"}`,
|
|
26
|
+
"parabolic.family · contact@parabolic.family · the people's launchpad; the goal is the betterment of the community.",
|
|
27
|
+
"Category: bonding-curve launchpad (pump.fun / fomo.family), not a fundraising venue. Non-custodial: every launch and trade is a wallet-signed transaction; no custody, no warranties, no advice; coins are user-created and experimental.",
|
|
10
28
|
"",
|
|
11
29
|
"ADOPTED PARAMETERS (2026-09-06, graduation threshold revised 2026-09-16)",
|
|
12
30
|
"- Supply: 1,000,000,000 tokens (18 decimals), all minted to the curve.",
|
|
13
|
-
|
|
31
|
+
onArc
|
|
32
|
+
? "- Quote asset: native USDC (Arc's gas token; 18-decimal native accounting). EURC (6-decimal ERC-20) pairs when approved on the factory."
|
|
33
|
+
: `- Quote asset: read it from the coin's curve (\`pairToken\`) and the factory's \`pairTokenEconomics\`. A chain's dollar is its own — never assume USDC, and never assume decimals: a token's symbol() is not the name of the money. Gas on this chain: ${gas}.`,
|
|
14
34
|
"- Opening: phantom quote reserve $5,000 against the full supply → ≈ $0.000005 per token, ≈ $5,000 opening market cap.",
|
|
15
|
-
"- Graduation: when the curve's real quote reserve reaches $8,000. Terminal curve price = (5,000 + 8,000) / reservedTokens → fully diluted market cap at graduation = 13,000² / 5,000 = $33,800 (constant product over the whole 1e9 supply).",
|
|
35
|
+
"- Graduation: when the curve's real quote reserve reaches $8,000. Terminal curve price = (5,000 + 8,000) / reservedTokens → fully diluted market cap at graduation = 13,000² / 5,000 = $33,800 (constant product over the whole 1e9 supply). Both figures are the launch config's, so read `getLaunchConfig(launchConfigId)` rather than taking them from here: Arc Testnet's factory still answers 12,500.",
|
|
16
36
|
"- Reserved tokens: supply × phantom / (phantom + threshold) = 5,000 / 13,000 ≈ 38.46% of supply is never sold on the curve and is still held by it at graduation. Of that, ≈ 23.7% of supply (reserved × 8,000 / 13,000) seeds the Uniswap v4 full-range position together with the $8,000 raised, at the same terminal price, and the remaining ≈ 14.8% of supply is permanently locked (GraduationTokensPermanentlyLocked). The position itself is locked forever in ParabolicLaunchLocker.",
|
|
17
|
-
"- Launch fee:
|
|
18
|
-
"-
|
|
37
|
+
"- Launch fee: whatever `launchFee()` on the factory answers. It is charged as `msg.value` on launchToken, so it is denominated in the chain's gas asset and is a dollar only where that asset is one. Read the figure and never assume it: the intended direction is zero everywhere (docs/20 §4), but Arc's factory still answers 1e18 as of 18 Sep 2026, so the intent is not the state of any chain. `parabolic.protocol_stats` reports it as `launchFee` with `launchFeeAsset` and `launchFeeSource`, and `build_launch_tx` puts the read value into the transaction.",
|
|
38
|
+
"- Agents page: parabolic.family/agents lists coins launched by wallets holding an ERC-8004 identity where the chain publishes a registry (Arc Testnet today), and, on every chain, coins whose launch memo carries the note \"mcp\": build_launch_tx returns that variant as `memo` (EOA-only). Sign it to be listed.",
|
|
39
|
+
"- Trade fee: 1.00% (100 bps) on the quote leg, before and after graduation (ParabolicHook takes it on the pool). The split is a per-chain parameter, not a constant: read `protocolFeeShareBps` and `buybackBurnBps` on the hook for the next launch, and the coin's own curve for an existing one, which carries the terms it copied at launch. On Arc the hook has answered 5,000 / 0 — creator 50 / protocol 50 — since 17 Sep 2026.",
|
|
19
40
|
"- Creator tax: optional 0–5% (0–500 bps), fixed at launch, charged like the fee on buys and sells, paid entirely to the creator.",
|
|
20
41
|
"- Snipe tax: 93% (9,300 bps) at launch decaying to 0 over 5 s along a quadratic ease-out (remaining² / window²); capped at 10,000 − fee − creatorTax − 1 bps, which 9,300 stays below at every legal creator tax, so it is charged as written. Buys only. Only the creator's own address is exempt, and it stays exempt for every buy inside the window, not just the opening one; there is no other exemption pathway. Snipe revenue is split like the base fee.",
|
|
21
|
-
|
|
22
|
-
|
|
42
|
+
onArc
|
|
43
|
+
? "- Referral: a bytes8 referral code (first 8 bytes of the referrer's address) carried in the Arc memo of a routed buy earns 10% of the fee."
|
|
44
|
+
: "- Referral: carried in an Arc transaction memo, so it exists on Arc only; a chain without that precompile has no referral attribution.",
|
|
45
|
+
"- Dev buy (fair launch): the creator's opening buy is snipe-tax exempt. ParabolicMemoRouter.launchAndBuy (native quote; value = launch fee + buy) and launchAndBuyWithToken (ERC-20 quote; value = launch fee, buy pulled after an approval) place it inside the launch transaction, before anyone else can trade. The router forwards no exemption list and requires creatorFeeRecipient to be zero or the signer (FeeRecipientMustBeCreator); buyQuoteIn must be non-zero (ZeroBuyAmount). Without the router the buy is a second transaction to the new curve right after launch.",
|
|
23
46
|
"",
|
|
24
47
|
"CURVE MECHANICS (what the tools compute)",
|
|
25
48
|
"- Constant product over (phantomQuote + trackedQuote − pending fees) and trackedTokens. Buy: fee, creator tax and snipe tax come off the input first; tokensOut = net × tokenReserve / (quoteReserve + net).",
|
|
@@ -28,15 +51,24 @@ export function docsText(config) {
|
|
|
28
51
|
"- Slippage on buys is a price bound: the curve requires spent × minTokensOut ≤ received × tokensOut, so a clamped fill still honours the caller's terms.",
|
|
29
52
|
"- Graduated coins trade on Uniswap v4 (pool id = keccak256(PoolKey{currency0 < currency1, poolFee, tickSpacing, hook})); the curve refuses buys and sells after graduation.",
|
|
30
53
|
"",
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
54
|
+
...(onArc
|
|
55
|
+
? [
|
|
56
|
+
"ARC NETWORK FACTS (verified against Arc Testnet)",
|
|
57
|
+
"- Testnet: chain id 5042002, RPC https://rpc.testnet.arc.io, explorer https://testnet.arcscan.app. Mainnet: chain id 5042 (unofficial until Circle publishes it), public launch 16 Sep 2026.",
|
|
58
|
+
`- USDC is the native gas asset (18-decimal native accounting); its 6-decimal ERC-20 view is ${USDC_VIEW}. Base fee target ≈ $0.01, floor 20 Gwei, ceiling 20,000 Gwei (EWMA-smoothed).`,
|
|
59
|
+
"- Malachite BFT consensus, deterministic finality < 1 s, proof of authority with 12 institutional validators. Osaka EVM on Reth. PREVRANDAO = 0 (no on-chain randomness). Mempool not observable.",
|
|
60
|
+
`- System contracts on testnet: Memo (${ARC_MEMO_DEFAULT}; EOA-only, no value forwarding), Multicall3From, Permit2 (canonical), CREATE2, CCTP v2 (domain 26), Gateway, EURC, USYC, StableFX FxEscrow.`,
|
|
61
|
+
"- Native transfers to address(0) and to blocklisted addresses revert (protocol-level USDC blocklist); Parabolic pays creators through a claim-based fee escrow for that reason.",
|
|
62
|
+
"- Uniswap v4 is live on Arc from day one; PoolManager / PositionManager addresses are deployment configuration (none official on testnet).",
|
|
63
|
+
"- The privacy sector is not live at mainnet.",
|
|
64
|
+
"",
|
|
65
|
+
]
|
|
66
|
+
: [
|
|
67
|
+
`${chainName(config.chainId).toUpperCase()} NETWORK FACTS`,
|
|
68
|
+
`- Nothing about this chain is written down here. Gas asset: ${gas}. Read the chain for anything else, and treat an unread figure as unknown rather than as Arc's.`,
|
|
69
|
+
"- The Arc `Memo` precompile does not exist off Arc, so buy notes, on-chain forum posts and referral attribution are Arc-only features.",
|
|
70
|
+
"",
|
|
71
|
+
]),
|
|
40
72
|
"THIS SERVER",
|
|
41
73
|
`- Chain: ${chainName(config.chainId)} (${config.chainId}), RPC ${endpointHost(config.rpcUrl)}.`,
|
|
42
74
|
`- Factory: ${set(config.factory)} · Memo router: ${set(config.memoRouter)} · Subgraph: ${config.subgraphUrl ? endpointHost(config.subgraphUrl) : "(not configured)"} · EURC: ${set(config.eurc)} · Hook: ${config.hook ?? "(read from factory)"} · Launch config id: ${config.launchConfigId}.`,
|
package/dist/docs.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"docs.js","sourceRoot":"","sources":["../src/docs.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,QAAQ,EAAE,SAAS,EAAE,SAAS,EAAe,MAAM,aAAa,CAAC;AAC5F,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAE3C
|
|
1
|
+
{"version":3,"file":"docs.js","sourceRoot":"","sources":["../src/docs.ts"],"names":[],"mappings":"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"}
|