@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.
- package/README.md +91 -12
- package/abi/ParabolicAggregatorRouter.json +2259 -0
- package/abi/ParabolicLaunchFactoryV2.json +2542 -0
- package/abi/ParabolicPairProbe.json +429 -0
- package/abi/ParabolicRouterV2.json +1171 -0
- package/abi/ParabolicSessionModule.json +1955 -0
- package/abi/deployments.json +258 -0
- package/dist/abi.d.ts +3 -1
- package/dist/abi.js +3 -1
- package/dist/abi.js.map +1 -1
- package/dist/chain.d.ts +12 -1
- package/dist/chain.js +13 -4
- package/dist/chain.js.map +1 -1
- package/dist/chains.d.ts +17 -10
- package/dist/chains.js +25 -13
- package/dist/chains.js.map +1 -1
- package/dist/coins.d.ts +38 -3
- package/dist/coins.js +54 -4
- package/dist/coins.js.map +1 -1
- package/dist/config.d.ts +36 -11
- package/dist/config.js +98 -20
- package/dist/config.js.map +1 -1
- package/dist/curve.d.ts +2 -1
- package/dist/curve.js +2 -1
- package/dist/curve.js.map +1 -1
- package/dist/deployed.d.ts +80 -0
- package/dist/deployed.js +95 -0
- package/dist/deployed.js.map +1 -0
- package/dist/docs.d.ts +13 -0
- package/dist/docs.js +75 -14
- package/dist/docs.js.map +1 -1
- package/dist/parabolic.d.ts +120 -3
- package/dist/parabolic.js +309 -41
- package/dist/parabolic.js.map +1 -1
- package/dist/quote-unit.d.ts +77 -0
- package/dist/quote-unit.js +143 -0
- package/dist/quote-unit.js.map +1 -0
- package/dist/referrals.d.ts +77 -0
- package/dist/referrals.js +55 -0
- package/dist/referrals.js.map +1 -0
- package/dist/restapi.d.ts +23 -0
- package/dist/restapi.js +60 -4
- package/dist/restapi.js.map +1 -1
- package/dist/routed.d.ts +389 -0
- package/dist/routed.js +413 -0
- package/dist/routed.js.map +1 -0
- package/dist/server.d.ts +1 -1
- package/dist/server.js +117 -10
- package/dist/server.js.map +1 -1
- package/dist/subgraph.d.ts +18 -6
- package/dist/subgraph.js +13 -1
- package/dist/subgraph.js.map +1 -1
- package/dist/ticker.d.ts +97 -0
- package/dist/ticker.js +109 -0
- package/dist/ticker.js.map +1 -0
- package/dist/tx.d.ts +6 -0
- package/dist/tx.js +12 -2
- package/dist/tx.js.map +1 -1
- package/dist/venues.d.ts +49 -0
- package/dist/venues.js +44 -0
- package/dist/venues.js.map +1 -0
- package/package.json +2 -2
- package/src/abi.ts +3 -1
- package/src/chain.ts +19 -4
- package/src/chains.ts +37 -17
- package/src/coins.ts +67 -5
- package/src/config.ts +112 -22
- package/src/curve.ts +2 -1
- package/src/deployed.ts +128 -0
- package/src/docs.ts +78 -15
- package/src/parabolic.ts +323 -42
- package/src/quote-unit.ts +194 -0
- package/src/referrals.ts +61 -0
- package/src/restapi.ts +66 -4
- package/src/routed.ts +499 -0
- package/src/server.ts +154 -10
- package/src/subgraph.ts +22 -4
- package/src/ticker.ts +148 -0
- package/src/tx.ts +13 -2
- package/src/venues.ts +93 -0
|
@@ -0,0 +1,258 @@
|
|
|
1
|
+
{
|
|
2
|
+
"4663": {
|
|
3
|
+
"chainId": 4663,
|
|
4
|
+
"network": "robinhood-chain",
|
|
5
|
+
"timestamp": "2026-09-19T12:47:28.224Z",
|
|
6
|
+
"commit": "1667bd5",
|
|
7
|
+
"contracts": {
|
|
8
|
+
"ParabolicFeeEscrow": {
|
|
9
|
+
"address": "0x7b255064d4A26933484f376f2e4003c5AA94aBDC",
|
|
10
|
+
"block": 67093041
|
|
11
|
+
},
|
|
12
|
+
"ParabolicHook": {
|
|
13
|
+
"address": "0xD1311168793C0807B7C2Da26AC2B711E6a43E044",
|
|
14
|
+
"block": 67093085
|
|
15
|
+
},
|
|
16
|
+
"ParabolicBuybackVault": {
|
|
17
|
+
"address": "0xBD9Eb0F2F8393D52E3DF6a961d86F78A066e7B84",
|
|
18
|
+
"block": 67093110
|
|
19
|
+
},
|
|
20
|
+
"ParabolicLaunchLocker": {
|
|
21
|
+
"address": "0xEeF91089eFFFc74f4B2A19777a65a63dE8056eCB",
|
|
22
|
+
"block": 67093137
|
|
23
|
+
},
|
|
24
|
+
"ParabolicLaunchFactory": {
|
|
25
|
+
"address": "0x25c9cFa179256A29f84b9Fd0DcF7cB2ff24b473d",
|
|
26
|
+
"block": 67093163
|
|
27
|
+
},
|
|
28
|
+
"ParabolicGraduationGuard": {
|
|
29
|
+
"address": "0xe38AC7BdefF4Aace9BbAE9Be0bd8f0D2cDEFc445",
|
|
30
|
+
"block": 67093163
|
|
31
|
+
},
|
|
32
|
+
"ParabolicLaunchDeployer": {
|
|
33
|
+
"address": "0x3415976305c0Ed5DF788296Aa7DDaEDd82F57F78",
|
|
34
|
+
"block": 67093190
|
|
35
|
+
},
|
|
36
|
+
"ParabolicGraduationExecutor": {
|
|
37
|
+
"address": "0x08a828C314295CdD839c1CEfe93ccC673b2A40a9",
|
|
38
|
+
"block": 67093216
|
|
39
|
+
},
|
|
40
|
+
"ParabolicRouter": {
|
|
41
|
+
"address": "0xBa478578D8DF17ad3aaFaF9419B98CAd71321634",
|
|
42
|
+
"block": 67094134
|
|
43
|
+
}
|
|
44
|
+
},
|
|
45
|
+
"config": {
|
|
46
|
+
"launchConfigId": 0,
|
|
47
|
+
"launchForwarder": "0xBa478578D8DF17ad3aaFaF9419B98CAd71321634",
|
|
48
|
+
"quoteToken": "0x5fc5360D0400a0Fd4f2af552ADD042D716F1d168",
|
|
49
|
+
"quoteEconomics": {
|
|
50
|
+
"phantomQuote": "5000000000",
|
|
51
|
+
"graduationThreshold": "8000000000",
|
|
52
|
+
"decimals": 6
|
|
53
|
+
},
|
|
54
|
+
"eurc": null,
|
|
55
|
+
"arcMemo": null,
|
|
56
|
+
"nativeDecimals": 18,
|
|
57
|
+
"quoteAssets": [
|
|
58
|
+
{
|
|
59
|
+
"address": "0x5fc5360D0400a0Fd4f2af552ADD042D716F1d168",
|
|
60
|
+
"symbol": "USDG",
|
|
61
|
+
"decimals": 6
|
|
62
|
+
},
|
|
63
|
+
{
|
|
64
|
+
"address": "0x322F0929c4625eD5bAd873c95208D54E1c003b2d",
|
|
65
|
+
"symbol": "TSLA",
|
|
66
|
+
"decimals": 18
|
|
67
|
+
},
|
|
68
|
+
{
|
|
69
|
+
"address": "0xd0601CE157Db5bdC3162BbaC2a2C8aF5320D9EEC",
|
|
70
|
+
"symbol": "NVDA",
|
|
71
|
+
"decimals": 18
|
|
72
|
+
},
|
|
73
|
+
{
|
|
74
|
+
"address": "0xaF3D76f1834A1d425780943C99Ea8A608f8a93f9",
|
|
75
|
+
"symbol": "AAPL",
|
|
76
|
+
"decimals": 18
|
|
77
|
+
}
|
|
78
|
+
]
|
|
79
|
+
},
|
|
80
|
+
"v2": null,
|
|
81
|
+
"v4": {
|
|
82
|
+
"poolManager": {
|
|
83
|
+
"address": "0x8366a39CC670B4001A1121B8F6A443A643e40951"
|
|
84
|
+
},
|
|
85
|
+
"positionManager": {
|
|
86
|
+
"address": "0x58daec3116aae6D93017bAAea7749052E8a04fA7"
|
|
87
|
+
},
|
|
88
|
+
"permit2": {
|
|
89
|
+
"address": "0x000000000022D473030F116dDEE9F6B43aC78BA3"
|
|
90
|
+
},
|
|
91
|
+
"stateView": {
|
|
92
|
+
"address": "0xf3334192d15450cdd385c8b70e03f9a6bd9e673b"
|
|
93
|
+
},
|
|
94
|
+
"v4Quoter": {
|
|
95
|
+
"address": "0x8dc178efb8111bb0973dd9d722ebeff267c98f94"
|
|
96
|
+
},
|
|
97
|
+
"universalRouter": {
|
|
98
|
+
"address": "0x8876789976decbfcbbbe364623c63652db8c0904"
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
},
|
|
102
|
+
"5042": {
|
|
103
|
+
"chainId": 5042,
|
|
104
|
+
"network": "arc-mainnet",
|
|
105
|
+
"timestamp": "2026-09-16T05:10:17.218Z",
|
|
106
|
+
"commit": "2c25ff2",
|
|
107
|
+
"contracts": {
|
|
108
|
+
"ParabolicFeeEscrow": {
|
|
109
|
+
"address": "0xfEd2BED46F5006f81B44f486AfbD1d9223F38A28",
|
|
110
|
+
"block": 21105294
|
|
111
|
+
},
|
|
112
|
+
"ParabolicHook": {
|
|
113
|
+
"address": "0x6B815a529598653AaF77742B04176957CeAf2044",
|
|
114
|
+
"block": 21105297
|
|
115
|
+
},
|
|
116
|
+
"ParabolicBuybackVault": {
|
|
117
|
+
"address": "0x8B2b249d70F81e839Ad47618abD8168f4F64AAb0",
|
|
118
|
+
"block": 21105301
|
|
119
|
+
},
|
|
120
|
+
"ParabolicLaunchLocker": {
|
|
121
|
+
"address": "0x14e0D76BC31a49Da950f558e91344a2bd7AA0B54",
|
|
122
|
+
"block": 21105305
|
|
123
|
+
},
|
|
124
|
+
"ParabolicLaunchFactory": {
|
|
125
|
+
"address": "0x27EAeC564fd049E6920C73323ffA7eb6a32A4B1e",
|
|
126
|
+
"block": 21105308
|
|
127
|
+
},
|
|
128
|
+
"ParabolicGraduationGuard": {
|
|
129
|
+
"address": "0x5CF0266Fb18Af98529BB62A043B6Ca813F999288",
|
|
130
|
+
"block": 21105308
|
|
131
|
+
},
|
|
132
|
+
"ParabolicLaunchDeployer": {
|
|
133
|
+
"address": "0xF74253981fCf3D08Fd01FE1c4eBbb861AfA4A115",
|
|
134
|
+
"block": 21105312
|
|
135
|
+
},
|
|
136
|
+
"ParabolicGraduationExecutor": {
|
|
137
|
+
"address": "0xb77eFe34345a699539A139743aA4173b20af80c6",
|
|
138
|
+
"block": 21105315
|
|
139
|
+
},
|
|
140
|
+
"ParabolicMemoRouter": {
|
|
141
|
+
"address": "0x7d642150A222D0F6c98e2fC6bBe86E8Bb6DC90d0",
|
|
142
|
+
"block": 21105373
|
|
143
|
+
}
|
|
144
|
+
},
|
|
145
|
+
"config": {
|
|
146
|
+
"launchConfigId": 0,
|
|
147
|
+
"launchForwarder": null,
|
|
148
|
+
"quoteToken": null,
|
|
149
|
+
"quoteEconomics": null,
|
|
150
|
+
"eurc": null,
|
|
151
|
+
"arcMemo": "0x5294E9927c3306DcBaDb03fe70b92e01cCede505",
|
|
152
|
+
"nativeDecimals": null,
|
|
153
|
+
"quoteAssets": null
|
|
154
|
+
},
|
|
155
|
+
"v2": null,
|
|
156
|
+
"v4": {
|
|
157
|
+
"poolManager": {
|
|
158
|
+
"address": "0x8366a39CC670B4001A1121B8F6A443A643e40951"
|
|
159
|
+
},
|
|
160
|
+
"positionManager": {
|
|
161
|
+
"address": "0x6049c9a0e26405C0985f9E3685C87d0aE917f82B"
|
|
162
|
+
},
|
|
163
|
+
"permit2": {
|
|
164
|
+
"address": "0x000000000022D473030F116dDEE9F6B43aC78BA3"
|
|
165
|
+
},
|
|
166
|
+
"stateView": {
|
|
167
|
+
"address": "0xF3334192D15450CdD385c8B70e03f9A6bD9E673b"
|
|
168
|
+
},
|
|
169
|
+
"v4Quoter": {
|
|
170
|
+
"address": "0x8Dc178eFB8111BB0973Dd9d722ebeFF267c98F94"
|
|
171
|
+
},
|
|
172
|
+
"universalRouter": {
|
|
173
|
+
"address": "0x4fcA4a51Ab4F23A7447b3284fBd7D73289A89Fb1"
|
|
174
|
+
}
|
|
175
|
+
}
|
|
176
|
+
},
|
|
177
|
+
"5042002": {
|
|
178
|
+
"chainId": 5042002,
|
|
179
|
+
"network": "arc-testnet",
|
|
180
|
+
"timestamp": "2026-09-12T13:31:37.222Z",
|
|
181
|
+
"commit": "3ed705d",
|
|
182
|
+
"contracts": {
|
|
183
|
+
"ParabolicFeeEscrow": {
|
|
184
|
+
"address": "0xC372B9D7A5c35840437213D21fc80B85E0Edb96b",
|
|
185
|
+
"block": 61736654
|
|
186
|
+
},
|
|
187
|
+
"ParabolicHook": {
|
|
188
|
+
"address": "0x8c66F61C339B0adedbc33866152196256D62E044",
|
|
189
|
+
"block": 61736658
|
|
190
|
+
},
|
|
191
|
+
"ParabolicBuybackVault": {
|
|
192
|
+
"address": "0xe5fA2De1984B42f98BAEF6eb276E44111B277C8D",
|
|
193
|
+
"block": 61736662
|
|
194
|
+
},
|
|
195
|
+
"ParabolicLaunchLocker": {
|
|
196
|
+
"address": "0xb3c71648b3429414140B16a0603989E0678Aff2f",
|
|
197
|
+
"block": 61736666
|
|
198
|
+
},
|
|
199
|
+
"ParabolicLaunchFactory": {
|
|
200
|
+
"address": "0x2E06eD99bD7D164458847D186B282B23700b2C63",
|
|
201
|
+
"block": 61736670
|
|
202
|
+
},
|
|
203
|
+
"ParabolicGraduationGuard": {
|
|
204
|
+
"address": "0x8e68F53a86B6f40931B564728131F981977c7A16",
|
|
205
|
+
"block": 61736670
|
|
206
|
+
},
|
|
207
|
+
"ParabolicLaunchDeployer": {
|
|
208
|
+
"address": "0xdd0927daE105a939806e03420b91476556F16acc",
|
|
209
|
+
"block": 61736674
|
|
210
|
+
},
|
|
211
|
+
"ParabolicGraduationExecutor": {
|
|
212
|
+
"address": "0xF5654351f15c5677f9373A104c9a1dAC2106c1C0",
|
|
213
|
+
"block": 61736677
|
|
214
|
+
},
|
|
215
|
+
"ParabolicMemoRouter": {
|
|
216
|
+
"address": "0x1381567ea31a094e64f6B39Bd880d0b59c48e08F",
|
|
217
|
+
"block": 61736742
|
|
218
|
+
}
|
|
219
|
+
},
|
|
220
|
+
"config": {
|
|
221
|
+
"launchConfigId": 0,
|
|
222
|
+
"launchForwarder": null,
|
|
223
|
+
"quoteToken": null,
|
|
224
|
+
"quoteEconomics": null,
|
|
225
|
+
"eurc": "0x89B50855Aa3bE2F677cD6303Cec089B5F319D72a",
|
|
226
|
+
"arcMemo": "0x5294E9927c3306DcBaDb03fe70b92e01cCede505",
|
|
227
|
+
"nativeDecimals": null,
|
|
228
|
+
"quoteAssets": null
|
|
229
|
+
},
|
|
230
|
+
"v2": null,
|
|
231
|
+
"v4": {
|
|
232
|
+
"poolManager": {
|
|
233
|
+
"address": "0x9536D5b6c015F3e237552215750C85D645AbA551"
|
|
234
|
+
},
|
|
235
|
+
"positionManager": {
|
|
236
|
+
"address": "0xfEd2BED46F5006f81B44f486AfbD1d9223F38A28"
|
|
237
|
+
},
|
|
238
|
+
"permit2": {
|
|
239
|
+
"address": "0x000000000022D473030F116dDEE9F6B43aC78BA3"
|
|
240
|
+
},
|
|
241
|
+
"positionDescriptor": {
|
|
242
|
+
"address": "0xa0036f24aebf61C0B4FD6Adafe045a89cD104009"
|
|
243
|
+
},
|
|
244
|
+
"stateView": {
|
|
245
|
+
"address": "0x62926aDAFaEa3D720f22f7a57E60Fde9DF5b8630"
|
|
246
|
+
},
|
|
247
|
+
"v4Quoter": {
|
|
248
|
+
"address": "0x8B2b249d70F81e839Ad47618abD8168f4F64AAb0"
|
|
249
|
+
},
|
|
250
|
+
"poolSwapTest": {
|
|
251
|
+
"address": "0x14e0D76BC31a49Da950f558e91344a2bd7AA0B54"
|
|
252
|
+
},
|
|
253
|
+
"poolModifyLiquidityTest": {
|
|
254
|
+
"address": "0x27EAeC564fd049E6920C73323ffA7eb6a32A4B1e"
|
|
255
|
+
}
|
|
256
|
+
}
|
|
257
|
+
}
|
|
258
|
+
}
|
package/dist/abi.d.ts
CHANGED
|
@@ -6,12 +6,14 @@ import type { Abi } from "viem";
|
|
|
6
6
|
* Override with PARABOLIC_ABI_DIR when the package is bundled elsewhere.
|
|
7
7
|
*/
|
|
8
8
|
export declare const ABI_DIR: string;
|
|
9
|
-
export declare const ABI_NAMES: readonly ["ParabolicLaunchFactory", "ParabolicBondingCurve", "ParabolicLauncherToken", "ParabolicMemoRouter"];
|
|
9
|
+
export declare const ABI_NAMES: readonly ["ParabolicLaunchFactory", "ParabolicBondingCurve", "ParabolicLauncherToken", "ParabolicMemoRouter", "ParabolicAggregatorRouter"];
|
|
10
10
|
export type AbiName = (typeof ABI_NAMES)[number];
|
|
11
11
|
export declare function loadAbi(name: AbiName): Abi;
|
|
12
12
|
export declare const factoryAbi: Abi;
|
|
13
13
|
export declare const curveAbi: Abi;
|
|
14
14
|
export declare const tokenAbi: Abi;
|
|
15
15
|
export declare const memoRouterAbi: Abi;
|
|
16
|
+
/** docs/33 §A: routed trades on another launchpad's coin (src/routed.ts). */
|
|
17
|
+
export declare const aggregatorRouterAbi: Abi;
|
|
16
18
|
/** Names of all functions in an ABI (used to document what the factory can and cannot enumerate). */
|
|
17
19
|
export declare const functionNames: (abi: Abi) => string[];
|
package/dist/abi.js
CHANGED
|
@@ -8,7 +8,7 @@ import { fileURLToPath } from "node:url";
|
|
|
8
8
|
* Override with PARABOLIC_ABI_DIR when the package is bundled elsewhere.
|
|
9
9
|
*/
|
|
10
10
|
export const ABI_DIR = process.env.PARABOLIC_ABI_DIR ?? resolve(dirname(fileURLToPath(import.meta.url)), "..", "abi");
|
|
11
|
-
export const ABI_NAMES = ["ParabolicLaunchFactory", "ParabolicBondingCurve", "ParabolicLauncherToken", "ParabolicMemoRouter"];
|
|
11
|
+
export const ABI_NAMES = ["ParabolicLaunchFactory", "ParabolicBondingCurve", "ParabolicLauncherToken", "ParabolicMemoRouter", "ParabolicAggregatorRouter"];
|
|
12
12
|
const cache = new Map();
|
|
13
13
|
export function loadAbi(name) {
|
|
14
14
|
const hit = cache.get(name);
|
|
@@ -32,6 +32,8 @@ export const factoryAbi = loadAbi("ParabolicLaunchFactory");
|
|
|
32
32
|
export const curveAbi = loadAbi("ParabolicBondingCurve");
|
|
33
33
|
export const tokenAbi = loadAbi("ParabolicLauncherToken");
|
|
34
34
|
export const memoRouterAbi = loadAbi("ParabolicMemoRouter");
|
|
35
|
+
/** docs/33 §A: routed trades on another launchpad's coin (src/routed.ts). */
|
|
36
|
+
export const aggregatorRouterAbi = loadAbi("ParabolicAggregatorRouter");
|
|
35
37
|
/** Names of all functions in an ABI (used to document what the factory can and cannot enumerate). */
|
|
36
38
|
export const functionNames = (abi) => abi.flatMap((e) => (e.type === "function" ? [e.name] : []));
|
|
37
39
|
//# sourceMappingURL=abi.js.map
|
package/dist/abi.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"abi.js","sourceRoot":"","sources":["../src/abi.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACvC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACnD,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAGzC;;;;;GAKG;AACH,MAAM,CAAC,MAAM,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC,iBAAiB,IAAI,OAAO,CAAC,OAAO,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,EAAE,KAAK,CAAC,CAAC;AAEtH,MAAM,CAAC,MAAM,SAAS,GAAG,CAAC,wBAAwB,EAAE,uBAAuB,EAAE,wBAAwB,EAAE,qBAAqB,CAAU,CAAC;
|
|
1
|
+
{"version":3,"file":"abi.js","sourceRoot":"","sources":["../src/abi.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACvC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACnD,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAGzC;;;;;GAKG;AACH,MAAM,CAAC,MAAM,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC,iBAAiB,IAAI,OAAO,CAAC,OAAO,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,EAAE,KAAK,CAAC,CAAC;AAEtH,MAAM,CAAC,MAAM,SAAS,GAAG,CAAC,wBAAwB,EAAE,uBAAuB,EAAE,wBAAwB,EAAE,qBAAqB,EAAE,2BAA2B,CAAU,CAAC;AAGpK,MAAM,KAAK,GAAG,IAAI,GAAG,EAAgB,CAAC;AAEtC,MAAM,UAAU,OAAO,CAAC,IAAa;IACnC,MAAM,GAAG,GAAG,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IAC5B,IAAI,GAAG;QAAE,OAAO,GAAG,CAAC;IACpB,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO,EAAE,GAAG,IAAI,OAAO,CAAC,CAAC;IAC3C,IAAI,MAAe,CAAC;IACpB,IAAI,CAAC;QACH,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC,CAAC;IAClD,CAAC;IAAC,OAAO,CAAC,EAAE,CAAC;QACX,MAAM,IAAI,KAAK,CAAC,+BAA+B,IAAI,8GAA+G,CAAW,CAAC,OAAO,GAAG,CAAC,CAAC;IAC5L,CAAC;IACD,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC;QAAE,MAAM,IAAI,KAAK,CAAC,OAAO,IAAI,sBAAsB,CAAC,CAAC;IAC/E,MAAM,GAAG,GAAG,MAAa,CAAC;IAC1B,KAAK,CAAC,GAAG,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;IACrB,OAAO,GAAG,CAAC;AACb,CAAC;AAED,MAAM,CAAC,MAAM,UAAU,GAAQ,OAAO,CAAC,wBAAwB,CAAC,CAAC;AACjE,MAAM,CAAC,MAAM,QAAQ,GAAQ,OAAO,CAAC,uBAAuB,CAAC,CAAC;AAC9D,MAAM,CAAC,MAAM,QAAQ,GAAQ,OAAO,CAAC,wBAAwB,CAAC,CAAC;AAC/D,MAAM,CAAC,MAAM,aAAa,GAAQ,OAAO,CAAC,qBAAqB,CAAC,CAAC;AACjE,6EAA6E;AAC7E,MAAM,CAAC,MAAM,mBAAmB,GAAQ,OAAO,CAAC,2BAA2B,CAAC,CAAC;AAE7E,qGAAqG;AACrG,MAAM,CAAC,MAAM,aAAa,GAAG,CAAC,GAAQ,EAAY,EAAE,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,KAAK,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC"}
|
package/dist/chain.d.ts
CHANGED
|
@@ -23,8 +23,19 @@ export interface Rpc {
|
|
|
23
23
|
read(a: ReadArgs): Promise<unknown>;
|
|
24
24
|
logs(a: LogsArgs): Promise<DecodedLog[]>;
|
|
25
25
|
blockNumber(): Promise<bigint>;
|
|
26
|
+
/**
|
|
27
|
+
* The head block's timestamp: the chain's clock, which a routed trade's deadline is counted from (src/routed.ts).
|
|
28
|
+
* Optional so an in-memory Rpc written before it existed still type-checks; a routed build without it refuses
|
|
29
|
+
* rather than falling back to this machine's clock, which is not the clock the router checks.
|
|
30
|
+
*/
|
|
31
|
+
blockTimestamp?(): Promise<bigint>;
|
|
26
32
|
}
|
|
27
|
-
/**
|
|
33
|
+
/**
|
|
34
|
+
* The viem chain for `chainId`, from the registry (src/chains.ts): its own gas token and explorer. It was Arc's for
|
|
35
|
+
* every id, native USDC and an explorer called Arcscan, so Robinhood Chain was defined as a chain whose gas is USDC
|
|
36
|
+
* (CON-45, 30 Sep 2026). Internal, never emitted, which is why it was wrong for eleven days with nothing red. A chain
|
|
37
|
+
* the registry has no gas token for keeps Arc's shape, the one this server was written against.
|
|
38
|
+
*/
|
|
28
39
|
export declare function arcChain(chainId: number, rpcUrl: string): Chain;
|
|
29
40
|
/** viem-backed Rpc. HTTP batching folds the many small reads of get_coin / list_coins into a few JSON-RPC requests. */
|
|
30
41
|
export declare function viemRpc(rpcUrl: string, chainId: number): Rpc;
|
package/dist/chain.js
CHANGED
|
@@ -1,15 +1,23 @@
|
|
|
1
1
|
import { createPublicClient, defineChain, getAbiItem, http } from "viem";
|
|
2
|
+
import { chainFor } from "./chains.js";
|
|
2
3
|
import { chainName, explorerBase } from "./config.js";
|
|
3
|
-
/**
|
|
4
|
+
/**
|
|
5
|
+
* The viem chain for `chainId`, from the registry (src/chains.ts): its own gas token and explorer. It was Arc's for
|
|
6
|
+
* every id, native USDC and an explorer called Arcscan, so Robinhood Chain was defined as a chain whose gas is USDC
|
|
7
|
+
* (CON-45, 30 Sep 2026). Internal, never emitted, which is why it was wrong for eleven days with nothing red. A chain
|
|
8
|
+
* the registry has no gas token for keeps Arc's shape, the one this server was written against.
|
|
9
|
+
*/
|
|
4
10
|
export function arcChain(chainId, rpcUrl) {
|
|
11
|
+
const info = chainFor(chainId);
|
|
5
12
|
const explorer = explorerBase(chainId);
|
|
13
|
+
const gas = info?.native ?? { name: "USDC", symbol: "USDC", decimals: 18 };
|
|
6
14
|
return defineChain({
|
|
7
15
|
id: chainId,
|
|
8
16
|
name: chainName(chainId),
|
|
9
|
-
nativeCurrency: { name:
|
|
17
|
+
nativeCurrency: { name: gas.name, symbol: gas.symbol, decimals: gas.decimals },
|
|
10
18
|
rpcUrls: { default: { http: [rpcUrl] } },
|
|
11
|
-
...(explorer ? { blockExplorers: { default: { name: "
|
|
12
|
-
testnet: chainId !== 5042,
|
|
19
|
+
...(explorer ? { blockExplorers: { default: { name: info?.explorerName ?? "Explorer", url: explorer } } } : {}),
|
|
20
|
+
testnet: info?.testnet ?? chainId !== 5042,
|
|
13
21
|
});
|
|
14
22
|
}
|
|
15
23
|
/** viem-backed Rpc. HTTP batching folds the many small reads of get_coin / list_coins into a few JSON-RPC requests. */
|
|
@@ -32,6 +40,7 @@ export function viemRpc(rpcUrl, chainId) {
|
|
|
32
40
|
// viem caches the block number for four seconds by default; the log scan uses it as the top of
|
|
33
41
|
// its newest window, so a coin launched in that window was missed. Always read the real head.
|
|
34
42
|
blockNumber: () => client.getBlockNumber({ cacheTime: 0 }),
|
|
43
|
+
blockTimestamp: async () => (await client.getBlock({ blockTag: "latest" })).timestamp,
|
|
35
44
|
};
|
|
36
45
|
}
|
|
37
46
|
/** Runs `fn` over `items` with at most `limit` in flight, preserving order. */
|
package/dist/chain.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"chain.js","sourceRoot":"","sources":["../src/chain.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,WAAW,EAAE,UAAU,EAAE,IAAI,EAA+D,MAAM,MAAM,CAAC;AACtI,OAAO,EAAE,SAAS,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"chain.js","sourceRoot":"","sources":["../src/chain.ts"],"names":[],"mappings":"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"}
|
package/dist/chains.d.ts
CHANGED
|
@@ -9,9 +9,9 @@ import { type Address } from "viem";
|
|
|
9
9
|
* published tool's input without a version break.
|
|
10
10
|
*
|
|
11
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),
|
|
13
|
-
*
|
|
14
|
-
* anything of ours is deployed on it, which is
|
|
12
|
+
* explorer — while the deployed addresses stay in `DEPLOYMENTS` (src/config.ts), which reads them out of
|
|
13
|
+
* `abi/deployments.json` (src/deployed.ts) rather than carrying them as literals. A chain can be nameable
|
|
14
|
+
* here long before anything of ours is deployed on it, which is the state Base, Ethereum and BNB are in.
|
|
15
15
|
*/
|
|
16
16
|
/**
|
|
17
17
|
* A chain's stable name in configuration, logs and the `chain` field of an answer. The same set
|
|
@@ -35,19 +35,26 @@ export type ChainInfo = {
|
|
|
35
35
|
decimals: number;
|
|
36
36
|
dollar: boolean;
|
|
37
37
|
};
|
|
38
|
+
/** What the explorer calls itself (Arcscan, Blockscout), for viem's `blockExplorers.default.name`; bot/src/chains.ts carries the same. */
|
|
39
|
+
explorerName?: string;
|
|
38
40
|
explorer?: string;
|
|
39
41
|
testnet: boolean;
|
|
40
|
-
/**
|
|
42
|
+
/**
|
|
43
|
+
* Whether Parabolic is deployed and served there today. **Derived, never written** (23 Sep 2026, F50):
|
|
44
|
+
* it is true when this package ships that chain's factory address in `abi/deployments.json`, which is
|
|
45
|
+
* what makes an unconfigured server able to read the chain. Typed by hand it stayed false on Robinhood
|
|
46
|
+
* Chain for four days after the deploy, and `assertChain` told every agent so in those words.
|
|
47
|
+
*/
|
|
41
48
|
live: boolean;
|
|
42
49
|
};
|
|
43
50
|
/**
|
|
44
|
-
* Arc mainnet and Arc Testnet, with the explorer hosts
|
|
45
|
-
* Circle's `explorer.arc.io`, published 16 Sep 2026, behind a login at launch;
|
|
46
|
-
* still overrides both).
|
|
51
|
+
* Arc mainnet and Arc Testnet, with the explorer hosts each chain answers on today (Arc mainnet's is
|
|
52
|
+
* Circle's `explorer.arc.io`, published 16 Sep 2026, behind a login at launch; the testnet's moved on
|
|
53
|
+
* 23 Sep 2026, see the entry below; `PARABOLIC_EXPLORER_URL` still overrides both).
|
|
47
54
|
*
|
|
48
|
-
* Robinhood Chain (4663
|
|
49
|
-
* so a reference and an error message can name
|
|
50
|
-
*
|
|
55
|
+
* Robinhood Chain (4663) is served since 23 Sep 2026, the day this package stopped writing `live` by hand.
|
|
56
|
+
* Base, Ethereum, BNB and Anvil are here so a reference and an error message can name them, and carry no
|
|
57
|
+
* gas token, because nothing in this repo has read one and nothing here invents one.
|
|
51
58
|
*/
|
|
52
59
|
export declare const CHAINS: Record<number, ChainInfo>;
|
|
53
60
|
/** Arc mainnet: the chain an unqualified identifier means. */
|
package/dist/chains.js
CHANGED
|
@@ -1,21 +1,33 @@
|
|
|
1
1
|
import { getAddress, isAddress } from "viem";
|
|
2
|
+
import { isDeployedOn } from "./deployed.js";
|
|
3
|
+
/** A chain is live because its deployment record says so; see `ChainInfo.live`. */
|
|
4
|
+
const served = (chainId) => isDeployedOn(chainId);
|
|
2
5
|
/**
|
|
3
|
-
* Arc mainnet and Arc Testnet, with the explorer hosts
|
|
4
|
-
* Circle's `explorer.arc.io`, published 16 Sep 2026, behind a login at launch;
|
|
5
|
-
* still overrides both).
|
|
6
|
+
* Arc mainnet and Arc Testnet, with the explorer hosts each chain answers on today (Arc mainnet's is
|
|
7
|
+
* Circle's `explorer.arc.io`, published 16 Sep 2026, behind a login at launch; the testnet's moved on
|
|
8
|
+
* 23 Sep 2026, see the entry below; `PARABOLIC_EXPLORER_URL` still overrides both).
|
|
6
9
|
*
|
|
7
|
-
* Robinhood Chain (4663
|
|
8
|
-
* so a reference and an error message can name
|
|
9
|
-
*
|
|
10
|
+
* Robinhood Chain (4663) is served since 23 Sep 2026, the day this package stopped writing `live` by hand.
|
|
11
|
+
* Base, Ethereum, BNB and Anvil are here so a reference and an error message can name them, and carry no
|
|
12
|
+
* gas token, because nothing in this repo has read one and nothing here invents one.
|
|
10
13
|
*/
|
|
11
14
|
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:
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
15
|
+
5042: { id: 5042, key: "arc", prefix: "", name: "Arc", native: { name: "USDC", symbol: "USDC", decimals: 18, dollar: true }, explorer: "https://explorer.arc.io", explorerName: "Arcscan", testnet: false, live: served(5042) },
|
|
16
|
+
// The testnet's host moved: `testnet.arcscan.app` answers 301 to `explorer.testnet.arc.io` (measured
|
|
17
|
+
// 23 Sep 2026, F49). Every `links.token` this package publishes followed the redirect and still landed, so
|
|
18
|
+
// nothing was broken; it is written as the host that answers because web/lib/chains.ts and bot/src/chains.ts
|
|
19
|
+
// moved the same day, and one chain named two ways in three registries is how a stale host survives.
|
|
20
|
+
5042002: { id: 5042002, key: "arc-testnet", prefix: "", name: "Arc Testnet", native: { name: "USDC", symbol: "USDC", decimals: 18, dollar: true }, explorer: "https://explorer.testnet.arc.io", explorerName: "Arcscan", testnet: true, live: served(5042002) },
|
|
21
|
+
// Deployed 19 Sep 2026 (contracts/deployments/4663.json), and its gas asset filled in here on 20 Sep. ETH
|
|
22
|
+
// at 18 decimals is the scale the deploy MEASURED against the WETH9 that chain's own PositionManager names
|
|
23
|
+
// and wrote into `config.nativeDecimals`, not a figure taken from a doc; `dollar: false` is why no balance
|
|
24
|
+
// or launch fee on this chain may be reported as money in dollars. The Blockscout instance is the one the
|
|
25
|
+
// chain lists and the one contracts/scripts/verify-arcscan.sh has on record.
|
|
26
|
+
4663: { id: 4663, key: "rhc", prefix: "rhc", name: "Robinhood Chain", native: { name: "Ether", symbol: "ETH", decimals: 18, dollar: false }, explorer: "https://robinhoodchain.blockscout.com", explorerName: "Blockscout", testnet: false, live: served(4663) },
|
|
27
|
+
8453: { id: 8453, key: "base", prefix: "base", name: "Base", testnet: false, live: served(8453) },
|
|
28
|
+
1: { id: 1, key: "eth", prefix: "eth", name: "Ethereum", testnet: false, live: served(1) },
|
|
29
|
+
56: { id: 56, key: "bnb", prefix: "bnb", name: "BNB Chain", testnet: false, live: served(56) },
|
|
30
|
+
31337: { id: 31337, key: "anvil", prefix: "anvil", name: "Anvil", testnet: true, live: served(31337) },
|
|
19
31
|
};
|
|
20
32
|
/** Arc mainnet: the chain an unqualified identifier means. */
|
|
21
33
|
export const ARC = 5042;
|
package/dist/chains.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"chains.js","sourceRoot":"","sources":["../src/chains.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,SAAS,EAAgB,MAAM,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"chains.js","sourceRoot":"","sources":["../src/chains.ts"],"names":[],"mappings":"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"}
|
package/dist/coins.d.ts
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { type Address } from "viem";
|
|
2
|
+
import { type QuoteBlock } from "./quote-unit.js";
|
|
2
3
|
import type { GqlCoin } from "./subgraph.js";
|
|
3
4
|
export type StatusKey = "climbing" | "graduated";
|
|
4
5
|
export declare const SORT_KEYS: readonly ["trending", "new", "near_graduation", "market_cap"];
|
|
@@ -9,9 +10,19 @@ export type CoinSummary = {
|
|
|
9
10
|
name: string;
|
|
10
11
|
ticker: string;
|
|
11
12
|
creator: Address;
|
|
12
|
-
|
|
13
|
+
/**
|
|
14
|
+
* What the coin's money is called — the asset's own symbol, whatever it is.
|
|
15
|
+
*
|
|
16
|
+
* It was the literal union `"USDC" | "EURC"` until 20 September 2026, which is Arc's two answers written
|
|
17
|
+
* into a type: every coin on any other chain was reported to an agent as an EURC while every figure beside
|
|
18
|
+
* it was right, and src/restapi.ts had to cast a real symbol back through it to compile.
|
|
19
|
+
*/
|
|
20
|
+
pair: string;
|
|
13
21
|
pairToken: Address;
|
|
22
|
+
/** Read from the asset's own `decimals()`, or from the chain's gas asset. Never derived from `pairToken`. */
|
|
14
23
|
quoteDecimals: number;
|
|
24
|
+
/** What the money IS: whether it is a dollar, what kind of asset it is, who issues it. See src/quote-unit.ts. */
|
|
25
|
+
quote: QuoteBlock;
|
|
15
26
|
status: StatusKey;
|
|
16
27
|
/** Quote raised on the curve (net of fees), whole units; for a graduated coin the threshold it crossed. */
|
|
17
28
|
raised: string;
|
|
@@ -36,7 +47,22 @@ export type CoinSummary = {
|
|
|
36
47
|
source: "subgraph" | "api" | "chain";
|
|
37
48
|
};
|
|
38
49
|
export declare const isNative: (pairToken: string) => boolean;
|
|
39
|
-
|
|
50
|
+
/**
|
|
51
|
+
* The scale a coin's quote amounts are written at, from the only two sources that have ever read it.
|
|
52
|
+
*
|
|
53
|
+
* This was `isNative(pairToken) ? 18 : 6` — Arc's own two answers, typed out, and the same pair of literals
|
|
54
|
+
* web/lib/data.ts and bot/src/chain.ts carried until 18 September 2026. The 18 is right only where the gas
|
|
55
|
+
* token is an 18-decimal dollar, and the 6 is right only for EURC on Arc: USDC is a **6-decimal ERC-20** on
|
|
56
|
+
* Base, Ethereum and BNB, all three of them chains on the plan, so every `raisedRaw` and `thresholdRaw` this
|
|
57
|
+
* produced there was out by a factor of a trillion — inside calldata an agent signs, with nothing to say so.
|
|
58
|
+
*
|
|
59
|
+
* `indexed` is the coin's own `Coin.quoteDecimals`, which the indexer writes at launch from the factory's
|
|
60
|
+
* re-read of the asset's `decimals()` — the chain's answer for *that launch*. Without it, a gas-asset quote
|
|
61
|
+
* falls back to the chain registry, whose figures were read off the chain when the chain was added. Neither
|
|
62
|
+
* available means **nothing is returned**: a caller must refuse a figure it cannot scale rather than pick a
|
|
63
|
+
* number (docs/20-multichain.md §3).
|
|
64
|
+
*/
|
|
65
|
+
export declare function quoteDecimalsOf(pairToken: string, indexed: number | null | undefined, chainId: number): number | undefined;
|
|
40
66
|
/** Curve progress in percent with three decimals, capped at 100. */
|
|
41
67
|
export declare const progressPct: (raised: bigint, threshold: bigint) => number;
|
|
42
68
|
/**
|
|
@@ -47,6 +73,15 @@ export declare function dayStats(g: GqlCoin, now: number, quoteDecimals: number)
|
|
|
47
73
|
volume24h: number;
|
|
48
74
|
change24h: number;
|
|
49
75
|
};
|
|
50
|
-
|
|
76
|
+
/**
|
|
77
|
+
* A subgraph row as a coin summary.
|
|
78
|
+
*
|
|
79
|
+
* `chainId` is the chain the subgraph is indexing, and it is required because the scale of the row's amounts
|
|
80
|
+
* is not inferable from the row: `Coin.quoteDecimals` when the endpoint carries it (subgraph 0.3.0 and later),
|
|
81
|
+
* and otherwise that chain's gas asset for a native-quoted coin. A row nothing can scale **throws**, because
|
|
82
|
+
* every figure below it — raised, threshold, price, volume — would be wrong by orders of magnitude and would
|
|
83
|
+
* look entirely ordinary.
|
|
84
|
+
*/
|
|
85
|
+
export declare function summaryFromGql(g: GqlCoin, now?: number, chainId?: number, knownDecimals?: number): CoinSummary;
|
|
51
86
|
/** Pure sort used by list_coins; `near_graduation` ranks climbing coins by progress and puts graduated ones last. */
|
|
52
87
|
export declare function sortCoins(list: CoinSummary[], sort: SortKey): CoinSummary[];
|