@parabolicfamily/mcp 0.1.3 → 0.1.4

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 CHANGED
@@ -32,6 +32,7 @@ Set `PARABOLIC_CHAIN_ID` and the RPC and contract addresses for that chain follo
32
32
  | `PARABOLIC_SUBGRAPH_URL` | Subgraph endpoint: richer listings, holders, 24h volume, protocol stats | unset (the public API is used instead) |
33
33
  | `PARABOLIC_HOOK` | `ParabolicHook` address | read from `factory.memeHook()` |
34
34
  | `PARABOLIC_ARC_MEMO` | Arc `Memo` system contract | `0x5294E9927c3306DcBaDb03fe70b92e01cCede505` |
35
+ | `PARABOLIC_AGENT_REGISTRY` | Arc's ERC-8004 `IdentityRegistry`: `agent_status`, `build_register_agent_tx` and the `pair: "Agents"` listing filter | the registry Arc publishes for the chain id (Arc Testnet only, today) |
35
36
  | `PARABOLIC_LAUNCH_CONFIG_ID` | Factory launch-config index (0 = the $5K open / $12,500 graduation curve) | `0` |
36
37
  | `PARABOLIC_FACTORY_START_BLOCK` | First block of the `TokenLaunched` scan, used only when neither a subgraph nor the API is available | the factory's deployment block |
37
38
 
@@ -51,8 +52,15 @@ with source, before you sign anything:
51
52
  | `ParabolicMemoRouter` | [`0x1381567ea31a094e64f6B39Bd880d0b59c48e08F`](https://testnet.arcscan.app/address/0x1381567ea31a094e64f6B39Bd880d0b59c48e08F) |
52
53
  | EURC (test token) | [`0x89B50855Aa3bE2F677cD6303Cec089B5F319D72a`](https://testnet.arcscan.app/address/0x89B50855Aa3bE2F677cD6303Cec089B5F319D72a) |
53
54
  | Arc `Memo` (system) | [`0x5294E9927c3306DcBaDb03fe70b92e01cCede505`](https://testnet.arcscan.app/address/0x5294E9927c3306DcBaDb03fe70b92e01cCede505) |
55
+ | ERC-8004 `IdentityRegistry` (Arc's) | [`0x8004A818BFB912233c491871b3d84c89A494BD9e`](https://testnet.arcscan.app/address/0x8004A818BFB912233c491871b3d84c89A494BD9e) |
54
56
 
55
- Arc mainnet (5042) addresses ship in the release that follows the 16 September 2026 deployment.
57
+ The identity registry is **Arc's contract, not ours**: Arc deploys it, documents it and can change it.
58
+ It is an ERC-1967 proxy, so the implementation behind that address is upgradeable by Arc. Parabolic only
59
+ reads it (and builds the registration for your wallet to sign); nothing on the launchpad depends on it.
60
+
61
+ Arc mainnet (5042) addresses ship in the release that follows the 16 September 2026 deployment. That
62
+ includes the identity registry: Arc has published no mainnet address for it yet, so on chain 5042
63
+ `agent_status` says there is no registry rather than reporting a wallet as unregistered.
56
64
 
57
65
  ### Claude Code
58
66
 
@@ -110,13 +118,15 @@ Arguments are strict: a key a tool does not know fails with `Unrecognized key` i
110
118
 
111
119
  | Tool | Purpose |
112
120
  |---|---|
113
- | `parabolic.list_coins` | `{ status?: "climbing" \| "graduated", sort?: "trending" \| "new" \| "near_graduation" \| "market_cap", limit? }`. Subgraph when configured, otherwise Parabolic's public read API; a `TokenLaunched` log scan only when both are unavailable. |
121
+ | `parabolic.list_coins` | `{ status?: "climbing" \| "graduated", sort?: "trending" \| "new" \| "near_graduation" \| "market_cap", limit?, pair?: "USDC" \| "EURC" \| "Agents" }`. Subgraph when configured, otherwise Parabolic's public read API; a `TokenLaunched` log scan only when both are unavailable. `pair` is the quote asset, except `"Agents"`, which means the coin's creator holds an ERC-8004 identity: that is read from Arc's registry (one `balanceOf` per creator, over the top 100 of the sort) whatever the listing source is. Without a registry for the chain the result sets `pairFilterApplied: false` and the `source` line says the filter did not run. |
114
122
  | `parabolic.get_coin` | `{ address }` (token or curve). Name, ticker, creator, curve, status/phase, raised/threshold/progress, price, market cap, holders, pool id, fee terms and 50/30/20 split, snipe-tax window and `currentSnipeTaxBps()`. |
115
123
  | `parabolic.quote_buy` | `{ address, quoteIn, buyer?, slippageBps? }`. Exact curve math on live reserves: fee, creator tax and snipe tax legs, spot vs effective price, price impact, whether the buy graduates the coin, suggested `minTokensOut`. `buyer` checks the snipe-tax exemption. |
116
124
  | `parabolic.quote_sell` | `{ address, tokensIn, slippageBps? }`. Gross, fee, creator tax, effective price, price impact, suggested `minQuoteOut`. |
117
125
  | `parabolic.build_buy_tx` | `{ address, quoteIn, minTokensOut?, recipient, buyer?, slippageBps?, memo? }` → unsigned `curve.buy(...)` (value = quote on native-USDC curves; an approval step for EURC pairs). `memo: { referral, note? }` returns the memo-routed variant instead (see below). |
118
126
  | `parabolic.build_sell_tx` | `{ address, tokensIn, minQuoteOut?, recipient, slippageBps? }` → unsigned ERC-20 approval + `curve.sell(...)`. |
119
127
  | `parabolic.build_launch_tx` | `{ name, ticker, image?, description?, socials?, pair?, devBuy?, creatorTaxBps?, creator, buybackEnabled? }`. The `TokenParams` are built exactly like the web Create form (economics pinned with `previewLaunchEconomics`, random salt). With `devBuy` and `PARABOLIC_MEMO_ROUTER` set: one unsigned `ParabolicMemoRouter.launchAndBuy` (value = launch fee + dev buy, `creatorFeeRecipient` zero, `minTokensOut` from the curve math on the launch config; `launchAndBuyWithToken` plus an approval for EURC). Otherwise: unsigned `factory.launchToken(...)` with the launch fee as value and, for a `devBuy`, the follow-up buy calldata to send to the curve from the `TokenLaunched` event. |
128
+ | `parabolic.agent_status` | `{ address }`. Whether the wallet holds an ERC-8004 agent identity on Arc's `IdentityRegistry` (`balanceOf`), how many it holds, and the registry address and chain. On a chain where Arc has published no registry the answer is that fact, with `registered` and `identities` null. |
129
+ | `parabolic.build_register_agent_tx` | `{ from, metadataURI? }` → unsigned `IdentityRegistry.register(metadataURI)` (no value). The registry mints the ERC-721 identity to the signer, so `from` is the wallet that sends it, and returns the agent id; read it from the `Transfer` log in the receipt. `metadataURI` is a pointer to the agent's metadata stored as `tokenURI` and may be empty. Warns when the wallet already holds an identity. |
120
130
  | `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. |
121
131
  | `parabolic.docs` | The adopted parameters, curve mechanics, verified Arc facts and this server's configuration, as text. |
122
132
 
@@ -162,6 +172,28 @@ Launch a coin with a $200 dev buy:
162
172
 
163
173
  With `PARABOLIC_MEMO_ROUTER` set the result is `kind: "launch_and_buy"`: one `tx` to the router (`value` = $1 launch fee + $200), the encoded `params` (`creatorFeeRecipient` zero, as the router requires), the curve `terms` (opening and fully diluted graduation market caps, reserved / pool-seed / locked token shares, snipe-tax window) and `devBuy` (expected and minimum tokens, snipe-tax exempt). Without the router it is `kind: "launch"`: `tx` to the factory (value = the launch fee) and `devBuy` with the calldata for the second, snipe-tax-exempt transaction to the new curve. There is no exemption list: only the creator's own address is exempt from the snipe tax.
164
174
 
175
+ Check whether a wallet is a registered agent, then register it:
176
+
177
+ ```json
178
+ { "name": "parabolic.agent_status", "arguments": { "address": "0xYourWallet" } }
179
+ ```
180
+ ```json
181
+ {
182
+ "address": "0xYourWallet",
183
+ "chain": { "id": 5042002, "name": "Arc Testnet" },
184
+ "registry": { "address": "0x8004A818BFB912233c491871b3d84c89A494BD9e", "contract": "ERC-8004 IdentityRegistry", "operator": "Arc" },
185
+ "registered": false, "identities": 0
186
+ }
187
+ ```
188
+ ```json
189
+ { "name": "parabolic.build_register_agent_tx", "arguments": { "from": "0xYourWallet", "metadataURI": "ipfs://…/agent-card.json" } }
190
+ ```
191
+
192
+ The result is `kind: "register_agent"`: one unsigned `tx` to the registry carrying no value, the
193
+ `metadataURI` as encoded, and `currentIdentities` for the wallet. Send it from `from`, because the
194
+ registry mints to `msg.sender`. Once it lands, `parabolic.list_coins` with `pair: "Agents"` keeps the
195
+ coins launched from that wallet, and the site tags them `[ Agent ]`.
196
+
165
197
  ## Notes on the mechanics
166
198
 
167
199
  - Curve math is a port of `ParabolicBondingCurve` / `ParabolicBondingCurveMath` (and of `web/lib/curve.ts`): fee legs are taken off the buy input separately, the constant product is priced on `getReserves()`, and a buy that would take more than `sellableTokens()` is clamped to the last sellable tokens, charged the grossed-up price and refunded the rest; that buy graduates the coin, so give it extra gas. Sells take the fee off the gross quote output and close once the curve is ready to graduate.
@@ -170,6 +202,8 @@ With `PARABOLIC_MEMO_ROUTER` set the result is `kind: "launch_and_buy"`: one `tx
170
202
  - At graduation the curve still holds the reserved 28.57% of supply: ≈ 20.4% seeds the Uniswap v4 full-range position with the $12,500 raised at the same terminal price, and ≈ 8.2% is permanently locked. Fully diluted graduation market cap: $61,250.
171
203
  - Fair launch: `ParabolicMemoRouter.launchAndBuy` / `launchAndBuyWithToken` put the creator's opening buy inside the launch transaction (snipe-tax exempt, before anyone else can trade). Called directly they work from any wallet; the router forwards no exemption list and rejects a `creatorFeeRecipient` other than zero or the signer.
172
204
  - A memo-routed buy (`memo: { referral }`) wraps `ParabolicMemoRouter.buy` inside Arc's `Memo.memo(...)` so the referral code is attributed on-chain. It is **EOA-only** (the Memo contract's caller must be `tx.origin`) and forwards no value, so the router pulls whole 6-decimal USDC units through the ERC-20 view (`0x3600…0000`) and needs a one-time approval; smart-account wallets should use the direct buy. Memo-wrapped launches (referral on a launch) are not built here.
205
+ - Agent identity is ERC-8004 on Arc's own `IdentityRegistry` (an ERC-721 named `AgentIdentity`, symbol `AGENT`): `register(metadataURI)` mints one to the caller, `balanceOf` answers whether a wallet holds any. The registry is **not** ERC-721 Enumerable, so there is no way to list a wallet's agent ids without scanning `Transfer` logs, which public Arc RPCs cap and rate-limit; this server does not try. Arc can upgrade the registry behind its address (ERC-1967 proxy). Holding an identity is not an endorsement: registration is open to anyone.
206
+ - `pair: "Agents"` is a property of the creator, not of the coin, so it is read at call time: one `balanceOf` per distinct creator over the top 100 coins of the sort, deduplicated and batched. A creator the registry will not answer for is left out rather than counted either way, and the `source` line reports how many. When the registry answers for nobody the list comes back empty and says so, because an unreachable registry and a board with no agent launches are not the same answer.
173
207
  - The factory has no enumeration function (only `getLaunchedToken(address)`), so listing comes from an indexer: `PARABOLIC_SUBGRAPH_URL` when set, otherwise Parabolic's public read API. Only if both are unavailable does it scan `TokenLaunched` logs, which public Arc RPCs rate-limit hard.
174
208
 
175
209
  ## Development
@@ -181,6 +215,7 @@ src/
181
215
  parabolic.ts the service: reads (RPC + subgraph) and unsigned tx builders
182
216
  curve.ts ported curve math
183
217
  tx.ts viem encodeFunctionData builders (buy, sell, approve, launchToken, memo buy)
218
+ agents.ts ERC-8004 identity registry: balanceOf / ownerOf / tokenURI reads, register builder
184
219
  chain.ts viem RPC wrapper (batched HTTP) behind a small Rpc interface
185
220
  subgraph.ts GraphQL client and Coin/Protocol shapes
186
221
  coins.ts coin summaries, sorting
@@ -0,0 +1,106 @@
1
+ import { type Address } from "viem";
2
+ import { type Rpc } from "./chain.js";
3
+ import type { UnsignedTx } from "./tx.js";
4
+ /**
5
+ * ERC-8004 agent identity on Arc.
6
+ *
7
+ * The registries are Arc's, not Parabolic's: Arc deploys them and documents them
8
+ * (https://docs.arc.io/arc/tutorials/register-your-first-ai-agent.md, which registers an agent with
9
+ * `register(string metadataURI)`). The IdentityRegistry is an ERC-1967 proxy, so Arc can change the
10
+ * implementation behind the address in DEPLOYMENTS without the address moving, and the facts recorded
11
+ * below hold for the implementation that answered on the date given.
12
+ *
13
+ * Verified against https://rpc.testnet.arc.io on 13 September 2026: name() = "AgentIdentity",
14
+ * symbol() = "AGENT", supportsInterface(0x80ac58cd) and (0x5b5e139f) true (ERC-721 and Metadata),
15
+ * balanceOf / ownerOf / tokenURI answer, and register(string) is in the implementation bytecode with
16
+ * selector 0xf2c298be.
17
+ *
18
+ * There is deliberately no "list this wallet's agent ids" function. supportsInterface(0x780e9d63) is
19
+ * false: the registry is not ERC-721 Enumerable and has neither totalSupply nor tokenOfOwnerByIndex,
20
+ * so the ids could only come from a Transfer log scan. Public Arc RPCs cap eth_getLogs near 10,000
21
+ * blocks and rate-limit the walk, which is the same cost that moved coin listing off the chain and
22
+ * onto an indexer. balanceOf answers the question the tools actually ask in one eth_call.
23
+ */
24
+ export declare const identityRegistryAbi: readonly [{
25
+ readonly name: "register";
26
+ readonly type: "function";
27
+ readonly stateMutability: "nonpayable";
28
+ readonly inputs: readonly [{
29
+ readonly type: "string";
30
+ readonly name: "metadataURI";
31
+ }];
32
+ readonly outputs: readonly [{
33
+ readonly type: "uint256";
34
+ readonly name: "agentId";
35
+ }];
36
+ }, {
37
+ readonly name: "balanceOf";
38
+ readonly type: "function";
39
+ readonly stateMutability: "view";
40
+ readonly inputs: readonly [{
41
+ readonly type: "address";
42
+ readonly name: "owner";
43
+ }];
44
+ readonly outputs: readonly [{
45
+ readonly type: "uint256";
46
+ }];
47
+ }, {
48
+ readonly name: "ownerOf";
49
+ readonly type: "function";
50
+ readonly stateMutability: "view";
51
+ readonly inputs: readonly [{
52
+ readonly type: "uint256";
53
+ readonly name: "tokenId";
54
+ }];
55
+ readonly outputs: readonly [{
56
+ readonly type: "address";
57
+ }];
58
+ }, {
59
+ readonly name: "tokenURI";
60
+ readonly type: "function";
61
+ readonly stateMutability: "view";
62
+ readonly inputs: readonly [{
63
+ readonly type: "uint256";
64
+ readonly name: "tokenId";
65
+ }];
66
+ readonly outputs: readonly [{
67
+ readonly type: "string";
68
+ }];
69
+ }];
70
+ /** Longest metadata URI this server encodes; a pointer, not a document. */
71
+ export declare const MAX_METADATA_URI_BYTES = 512;
72
+ export type AgentStatus = {
73
+ address: Address;
74
+ registered: boolean;
75
+ identities: number;
76
+ };
77
+ /** `balanceOf(owner)`: whether the wallet holds an agent identity, and how many it holds. */
78
+ export declare function readAgentStatus(rpc: Rpc, registry: Address, owner: Address): Promise<AgentStatus>;
79
+ /** Most wallets one listing checks against the registry: one eth_call each, batched by the transport. */
80
+ export declare const AGENT_LOOKUP_MAX = 100;
81
+ /**
82
+ * Which of these wallets hold an identity, as a set of lowercase addresses. This is how a coin list is
83
+ * filtered to agent launches: the flag is a property of the creator, not of the coin, so it is read
84
+ * per creator at call time.
85
+ *
86
+ * A read that fails is counted, not guessed: "the registry did not answer" is not "this wallet holds
87
+ * none", and the caller has to be able to say how many creators went unchecked.
88
+ */
89
+ export declare function readAgentOwners(rpc: Rpc, registry: Address, owners: readonly Address[]): Promise<{
90
+ agents: Set<string>;
91
+ checked: number;
92
+ failed: number;
93
+ }>;
94
+ export type AgentIdentity = {
95
+ agentId: string;
96
+ owner: Address;
97
+ metadataURI: string;
98
+ };
99
+ /**
100
+ * One identity by agent id: the ERC-721 tokenId that `register` returns, also readable from the
101
+ * Transfer log in the registration receipt. The metadata URI comes back empty for an identity
102
+ * registered without one, which is common on Arc Testnet (tokenURI(1) is the empty string).
103
+ */
104
+ export declare function readAgent(rpc: Rpc, registry: Address, agentId: bigint): Promise<AgentIdentity>;
105
+ /** `registry.register(metadataURI)`: mints an identity to whoever signs and returns its agent id. Carries no value. */
106
+ export declare function encodeRegisterAgent(registry: Address, metadataURI: string, chainId: number): UnsignedTx;
package/dist/agents.js ADDED
@@ -0,0 +1,87 @@
1
+ import { encodeFunctionData, parseAbi, toHex } from "viem";
2
+ import { mapLimit } from "./chain.js";
3
+ import { addrOf, big, str } from "./format.js";
4
+ /**
5
+ * ERC-8004 agent identity on Arc.
6
+ *
7
+ * The registries are Arc's, not Parabolic's: Arc deploys them and documents them
8
+ * (https://docs.arc.io/arc/tutorials/register-your-first-ai-agent.md, which registers an agent with
9
+ * `register(string metadataURI)`). The IdentityRegistry is an ERC-1967 proxy, so Arc can change the
10
+ * implementation behind the address in DEPLOYMENTS without the address moving, and the facts recorded
11
+ * below hold for the implementation that answered on the date given.
12
+ *
13
+ * Verified against https://rpc.testnet.arc.io on 13 September 2026: name() = "AgentIdentity",
14
+ * symbol() = "AGENT", supportsInterface(0x80ac58cd) and (0x5b5e139f) true (ERC-721 and Metadata),
15
+ * balanceOf / ownerOf / tokenURI answer, and register(string) is in the implementation bytecode with
16
+ * selector 0xf2c298be.
17
+ *
18
+ * There is deliberately no "list this wallet's agent ids" function. supportsInterface(0x780e9d63) is
19
+ * false: the registry is not ERC-721 Enumerable and has neither totalSupply nor tokenOfOwnerByIndex,
20
+ * so the ids could only come from a Transfer log scan. Public Arc RPCs cap eth_getLogs near 10,000
21
+ * blocks and rate-limit the walk, which is the same cost that moved coin listing off the chain and
22
+ * onto an indexer. balanceOf answers the question the tools actually ask in one eth_call.
23
+ */
24
+ export const identityRegistryAbi = parseAbi([
25
+ "function register(string metadataURI) returns (uint256 agentId)",
26
+ "function balanceOf(address owner) view returns (uint256)",
27
+ "function ownerOf(uint256 tokenId) view returns (address)",
28
+ "function tokenURI(uint256 tokenId) view returns (string)",
29
+ ]);
30
+ /** Longest metadata URI this server encodes; a pointer, not a document. */
31
+ export const MAX_METADATA_URI_BYTES = 512;
32
+ /** `balanceOf(owner)`: whether the wallet holds an agent identity, and how many it holds. */
33
+ export async function readAgentStatus(rpc, registry, owner) {
34
+ const balance = big(await rpc.read({ address: registry, abi: identityRegistryAbi, functionName: "balanceOf", args: [owner] }));
35
+ return { address: owner, registered: balance > 0n, identities: Number(balance) };
36
+ }
37
+ /** Most wallets one listing checks against the registry: one eth_call each, batched by the transport. */
38
+ export const AGENT_LOOKUP_MAX = 100;
39
+ /**
40
+ * Which of these wallets hold an identity, as a set of lowercase addresses. This is how a coin list is
41
+ * filtered to agent launches: the flag is a property of the creator, not of the coin, so it is read
42
+ * per creator at call time.
43
+ *
44
+ * A read that fails is counted, not guessed: "the registry did not answer" is not "this wallet holds
45
+ * none", and the caller has to be able to say how many creators went unchecked.
46
+ */
47
+ export async function readAgentOwners(rpc, registry, owners) {
48
+ const unique = [...new Set(owners.map((o) => o.toLowerCase()))].slice(0, AGENT_LOOKUP_MAX);
49
+ const agents = new Set();
50
+ let failed = 0;
51
+ await mapLimit(unique, 8, async (owner) => {
52
+ try {
53
+ const balance = big(await rpc.read({ address: registry, abi: identityRegistryAbi, functionName: "balanceOf", args: [owner] }));
54
+ if (balance > 0n)
55
+ agents.add(owner);
56
+ }
57
+ catch {
58
+ failed += 1;
59
+ }
60
+ });
61
+ return { agents, checked: unique.length, failed };
62
+ }
63
+ /**
64
+ * One identity by agent id: the ERC-721 tokenId that `register` returns, also readable from the
65
+ * Transfer log in the registration receipt. The metadata URI comes back empty for an identity
66
+ * registered without one, which is common on Arc Testnet (tokenURI(1) is the empty string).
67
+ */
68
+ export async function readAgent(rpc, registry, agentId) {
69
+ const [owner, uri] = await Promise.all([
70
+ rpc.read({ address: registry, abi: identityRegistryAbi, functionName: "ownerOf", args: [agentId] }),
71
+ rpc.read({ address: registry, abi: identityRegistryAbi, functionName: "tokenURI", args: [agentId] }),
72
+ ]);
73
+ return { agentId: agentId.toString(), owner: addrOf(owner), metadataURI: str(uri) };
74
+ }
75
+ /** `registry.register(metadataURI)`: mints an identity to whoever signs and returns its agent id. Carries no value. */
76
+ export function encodeRegisterAgent(registry, metadataURI, chainId) {
77
+ const data = encodeFunctionData({ abi: identityRegistryAbi, functionName: "register", args: [metadataURI] });
78
+ return {
79
+ to: registry,
80
+ data,
81
+ value: toHex(0n),
82
+ valueWei: "0",
83
+ chainId,
84
+ description: `ERC-8004 IdentityRegistry.register(metadataURI=${metadataURI === "" ? "(empty)" : metadataURI}): mints an agent identity to the wallet that signs`,
85
+ };
86
+ }
87
+ //# sourceMappingURL=agents.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"agents.js","sourceRoot":"","sources":["../src/agents.ts"],"names":[],"mappings":"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"}
package/dist/config.d.ts CHANGED
@@ -25,6 +25,12 @@ export declare const DEPLOYMENTS: Record<number, {
25
25
  startBlock?: number;
26
26
  /** The site API that serves this deployment. Production serves mainnet; the testnet site serves the testnet factory. */
27
27
  apiUrl?: string;
28
+ /**
29
+ * Arc's ERC-8004 IdentityRegistry, not one of ours. It is an ERC-1967 proxy, so Arc can upgrade the
30
+ * implementation behind this address at any time. Arc publishes one for Arc Testnet only, so a chain
31
+ * without an entry here has no registry to read rather than a missing configuration.
32
+ */
33
+ agentRegistry?: Address;
28
34
  }>;
29
35
  export declare const DEFAULT_RPC_URL: string;
30
36
  export type Config = {
@@ -51,6 +57,8 @@ export type Config = {
51
57
  hook?: Address;
52
58
  /** Arc's Memo system contract. */
53
59
  arcMemo: Address;
60
+ /** Arc's ERC-8004 IdentityRegistry. Optional; undefined on a chain where Arc has published none. */
61
+ agentRegistry?: Address;
54
62
  /** Launch config index on the factory; preset 0 is the adopted $5K / $12,500 curve. */
55
63
  launchConfigId: bigint;
56
64
  /** First block to scan for `TokenLaunched` logs when listing without a subgraph. */
package/dist/config.js CHANGED
@@ -24,6 +24,7 @@ export const DEPLOYMENTS = {
24
24
  eurc: "0x89B50855Aa3bE2F677cD6303Cec089B5F319D72a",
25
25
  startBlock: 61736670,
26
26
  apiUrl: "https://parabolic-testnet.vercel.app/api/v1",
27
+ agentRegistry: "0x8004A818BFB912233c491871b3d84c89A494BD9e",
27
28
  },
28
29
  5042: {
29
30
  rpcUrl: "https://rpc.arc.io",
@@ -42,6 +43,7 @@ export const ENV_VARS = [
42
43
  ["PARABOLIC_HOOK", "ParabolicHook address (optional; read from the factory when unset)"],
43
44
  ["PARABOLIC_API_URL", `Parabolic public read API for listings (default: the site that serves the chain's deployment, ${DEPLOYMENTS[DEFAULT_CHAIN_ID].apiUrl} on Arc Testnet, ${DEFAULT_API_URL} on Arc; "" to use a log scan instead)`],
44
45
  ["PARABOLIC_ARC_MEMO", `Arc Memo system contract (default ${ARC_MEMO_DEFAULT})`],
46
+ ["PARABOLIC_AGENT_REGISTRY", `Arc's ERC-8004 IdentityRegistry (agent_status, build_register_agent_tx and the list_coins pair "Agents" filter; default ${DEPLOYMENTS[DEFAULT_CHAIN_ID].agentRegistry} on Arc Testnet, none published for Arc yet)`],
45
47
  ["PARABOLIC_LAUNCH_CONFIG_ID", "factory launch config index (default 0)"],
46
48
  ["PARABOLIC_FACTORY_START_BLOCK", "first block for the TokenLaunched log scan (default: the factory's deployment block for this chain)"],
47
49
  ];
@@ -79,6 +81,7 @@ export function configFromEnv(env = process.env) {
79
81
  eurc: addr("PARABOLIC_EURC", env.PARABOLIC_EURC) ?? known?.eurc,
80
82
  hook: addr("PARABOLIC_HOOK", env.PARABOLIC_HOOK),
81
83
  arcMemo: addr("PARABOLIC_ARC_MEMO", env.PARABOLIC_ARC_MEMO) ?? ARC_MEMO_DEFAULT,
84
+ agentRegistry: addr("PARABOLIC_AGENT_REGISTRY", env.PARABOLIC_AGENT_REGISTRY) ?? known?.agentRegistry,
82
85
  launchConfigId: BigInt(int("PARABOLIC_LAUNCH_CONFIG_ID", env.PARABOLIC_LAUNCH_CONFIG_ID, 0)),
83
86
  factoryStartBlock: BigInt(int("PARABOLIC_FACTORY_START_BLOCK", env.PARABOLIC_FACTORY_START_BLOCK, known?.startBlock ?? 0)),
84
87
  };
@@ -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":"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"}
package/dist/docs.js CHANGED
@@ -40,7 +40,7 @@ export function docsText(config) {
40
40
  "THIS SERVER",
41
41
  `- Chain: ${chainName(config.chainId)} (${config.chainId}), RPC ${endpointHost(config.rpcUrl)}.`,
42
42
  `- 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}.`,
43
- "- Tools: parabolic.list_coins, parabolic.get_coin, parabolic.quote_buy, parabolic.quote_sell, parabolic.build_buy_tx, parabolic.build_sell_tx, parabolic.build_launch_tx, parabolic.protocol_stats, parabolic.docs. Resources: parabolic://docs/parameters, parabolic://coins/{address}.",
43
+ "- Tools: parabolic.list_coins, parabolic.get_coin, parabolic.quote_buy, parabolic.quote_sell, parabolic.build_buy_tx, parabolic.build_sell_tx, parabolic.build_launch_tx, parabolic.protocol_stats, parabolic.agent_status, parabolic.build_register_agent_tx, parabolic.docs. Resources: parabolic://docs/parameters, parabolic://coins/{address}.",
44
44
  "- It never holds keys, signs, sends or broadcasts. build_* tools return unsigned { to, data, value, chainId } for the caller's wallet. Quotes are read from chain at call time and can move before a transaction lands.",
45
45
  `- build_launch_tx: with PARABOLIC_MEMO_ROUTER set and devBuy > 0 it returns one ParabolicMemoRouter.launchAndBuy transaction (creatorFeeRecipient zero, minTokensOut from the curve math on the launch config's phantom quote, value = launch fee + devBuy)${config.memoRouter ? " (router configured)" : " (router not configured here)"}; otherwise factory.launchToken plus, for a devBuy, the two-step plan (buy calldata to send to the new curve).`,
46
46
  "- The factory ABI has no enumeration function; listing uses the subgraph when set, otherwise Parabolic's public read API (PARABOLIC_API_URL), and a TokenLaunched log scan of the factory only when both are unavailable.",
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,kJAAkJ;AAClJ,MAAM,UAAU,QAAQ,CAAC,MAAc;IACrC,MAAM,GAAG,GAAG,CAAC,CAAqB,EAAE,EAAE,CAAC,CAAC,IAAI,kBAAkB,CAAC;IAC/D,OAAO;QACL,kDAAkD;QAClD,4HAA4H;QAC5H,kPAAkP;QAClP,EAAE;QACF,iCAAiC;QACjC,wEAAwE;QACxE,yIAAyI;QACzI,uHAAuH;QACvH,sRAAsR;QACtR,geAAge;QAChe,oEAAoE;QACpE,0TAA0T;QAC1T,kIAAkI;QAClI,wYAAwY;QACxY,4IAA4I;QAC5I,qjBAAqjB;QACrjB,EAAE;QACF,0CAA0C;QAC1C,8MAA8M;QAC9M,2QAA2Q;QAC3Q,sKAAsK;QACtK,0JAA0J;QAC1J,6KAA6K;QAC7K,EAAE;QACF,kDAAkD;QAClD,8LAA8L;QAC9L,+FAA+F,SAAS,gFAAgF;QACxL,mMAAmM;QACnM,wCAAwC,gBAAgB,8IAA8I;QACtM,iLAAiL;QACjL,4IAA4I;QAC5I,8CAA8C;QAC9C,EAAE;QACF,aAAa;QACb,YAAY,SAAS,CAAC,MAAM,CAAC,OAAO,CAAC,KAAK,MAAM,CAAC,OAAO,UAAU,YAAY,CAAC,MAAM,CAAC,MAAM,CAAC,GAAG;QAChG,cAAc,GAAG,CAAC,MAAM,CAAC,OAAO,CAAC,mBAAmB,GAAG,CAAC,MAAM,CAAC,UAAU,CAAC,gBAAgB,MAAM,CAAC,WAAW,CAAC,CAAC,CAAC,YAAY,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,kBAAkB,YAAY,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,YAAY,MAAM,CAAC,IAAI,IAAI,qBAAqB,wBAAwB,MAAM,CAAC,cAAc,GAAG;QAChS,0RAA0R;QAC1R,yNAAyN;QACzN,8PAA8P,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC,sBAAsB,CAAC,CAAC,CAAC,+BAA+B,gHAAgH;QAC1b,2NAA2N;QAC3N,EAAE;QACF,aAAa;QACb,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,CAAC;KAC5C,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACf,CAAC"}
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,kJAAkJ;AAClJ,MAAM,UAAU,QAAQ,CAAC,MAAc;IACrC,MAAM,GAAG,GAAG,CAAC,CAAqB,EAAE,EAAE,CAAC,CAAC,IAAI,kBAAkB,CAAC;IAC/D,OAAO;QACL,kDAAkD;QAClD,4HAA4H;QAC5H,kPAAkP;QAClP,EAAE;QACF,iCAAiC;QACjC,wEAAwE;QACxE,yIAAyI;QACzI,uHAAuH;QACvH,sRAAsR;QACtR,geAAge;QAChe,oEAAoE;QACpE,0TAA0T;QAC1T,kIAAkI;QAClI,wYAAwY;QACxY,4IAA4I;QAC5I,qjBAAqjB;QACrjB,EAAE;QACF,0CAA0C;QAC1C,8MAA8M;QAC9M,2QAA2Q;QAC3Q,sKAAsK;QACtK,0JAA0J;QAC1J,6KAA6K;QAC7K,EAAE;QACF,kDAAkD;QAClD,8LAA8L;QAC9L,+FAA+F,SAAS,gFAAgF;QACxL,mMAAmM;QACnM,wCAAwC,gBAAgB,8IAA8I;QACtM,iLAAiL;QACjL,4IAA4I;QAC5I,8CAA8C;QAC9C,EAAE;QACF,aAAa;QACb,YAAY,SAAS,CAAC,MAAM,CAAC,OAAO,CAAC,KAAK,MAAM,CAAC,OAAO,UAAU,YAAY,CAAC,MAAM,CAAC,MAAM,CAAC,GAAG;QAChG,cAAc,GAAG,CAAC,MAAM,CAAC,OAAO,CAAC,mBAAmB,GAAG,CAAC,MAAM,CAAC,UAAU,CAAC,gBAAgB,MAAM,CAAC,WAAW,CAAC,CAAC,CAAC,YAAY,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,kBAAkB,YAAY,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,YAAY,MAAM,CAAC,IAAI,IAAI,qBAAqB,wBAAwB,MAAM,CAAC,cAAc,GAAG;QAChS,qVAAqV;QACrV,yNAAyN;QACzN,8PAA8P,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC,sBAAsB,CAAC,CAAC,CAAC,+BAA+B,gHAAgH;QAC1b,2NAA2N;QAC3N,EAAE;QACF,aAAa;QACb,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,CAAC;KAC5C,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACf,CAAC"}
@@ -2,7 +2,7 @@ import { type Address, type Hex } from "viem";
2
2
  import { type Rpc } from "./chain.js";
3
3
  import { type CoinSummary, type SortKey, type StatusKey } from "./coins.js";
4
4
  import { type Config } from "./config.js";
5
- import { RestApi } from "./restapi.js";
5
+ import { RestApi, type PairFilter } from "./restapi.js";
6
6
  import { Subgraph, type Fetch } from "./subgraph.js";
7
7
  import { type Socials, type TokenParams } from "./tx.js";
8
8
  export declare const PHASES: readonly ["NotGraduated", "Swept", "PoolCreated", "Rescued"];
@@ -45,6 +45,14 @@ export type ListInput = {
45
45
  status?: StatusKey;
46
46
  sort?: SortKey;
47
47
  limit?: number;
48
+ pair?: PairFilter;
49
+ };
50
+ export type AgentStatusInput = {
51
+ address: string;
52
+ };
53
+ export type BuildRegisterAgentInput = {
54
+ metadataURI?: string;
55
+ from: string;
48
56
  };
49
57
  export type QuoteBuyInput = {
50
58
  address: string;
@@ -109,6 +117,8 @@ export declare class Parabolic {
109
117
  source: string;
110
118
  sort: "trending" | "new" | "near_graduation" | "market_cap";
111
119
  status: string;
120
+ pair: string;
121
+ pairFilterApplied: boolean | null;
112
122
  count: number;
113
123
  partial: boolean;
114
124
  coins: CoinSummary[];
@@ -689,6 +699,80 @@ export declare class Parabolic {
689
699
  tx: import("./tx.js").UnsignedTx;
690
700
  steps: string[];
691
701
  }>;
702
+ private requireAgentRegistry;
703
+ /** Why this chain cannot answer an identity question: Arc runs the registries and has published one address. */
704
+ private noRegistryMessage;
705
+ /**
706
+ * Whether a wallet holds an ERC-8004 agent identity, from `balanceOf` on Arc's IdentityRegistry.
707
+ *
708
+ * Returns nulls and the reason on a chain with no registry rather than "not registered": those are
709
+ * different answers, and an agent that reads the second as the first would conclude the wallet was
710
+ * rejected when nothing was asked.
711
+ */
712
+ agentStatus(input: AgentStatusInput): Promise<{
713
+ address: `0x${string}`;
714
+ chain: {
715
+ id: number;
716
+ name: string;
717
+ };
718
+ registry: null;
719
+ registered: null;
720
+ identities: null;
721
+ message: string;
722
+ notes?: undefined;
723
+ } | {
724
+ address: `0x${string}`;
725
+ chain: {
726
+ id: number;
727
+ name: string;
728
+ };
729
+ registry: {
730
+ address: `0x${string}`;
731
+ contract: string;
732
+ operator: string;
733
+ explorer: string | null;
734
+ };
735
+ registered: null;
736
+ identities: null;
737
+ message: string;
738
+ notes?: undefined;
739
+ } | {
740
+ address: `0x${string}`;
741
+ chain: {
742
+ id: number;
743
+ name: string;
744
+ };
745
+ registry: {
746
+ address: `0x${string}`;
747
+ contract: string;
748
+ operator: string;
749
+ explorer: string | null;
750
+ };
751
+ registered: boolean;
752
+ identities: number;
753
+ notes: string[];
754
+ message?: undefined;
755
+ }>;
756
+ /**
757
+ * Unsigned `register(metadataURI)` on Arc's IdentityRegistry. The registry mints the ERC-721 identity
758
+ * to whoever signs, so `from` is the wallet that must send it, not a parameter of the call.
759
+ */
760
+ buildRegisterAgentTx(input: BuildRegisterAgentInput): Promise<{
761
+ kind: string;
762
+ registry: {
763
+ address: `0x${string}`;
764
+ contract: string;
765
+ operator: string;
766
+ explorer: string | null;
767
+ };
768
+ from: `0x${string}`;
769
+ metadataURI: string;
770
+ currentIdentities: number | null;
771
+ steps: string[];
772
+ tx: import("./tx.js").UnsignedTx;
773
+ warnings: string[];
774
+ notes: string[];
775
+ }>;
692
776
  protocolStats(): Promise<{
693
777
  chain: {
694
778
  id: number;