@sherwoodagent/cli 0.83.1 → 0.85.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/dist/{abis-ZQ6I3S6L.js → abis-WVW2EBI3.js} +2 -2
- package/dist/{agent-C5XZSK7Z.js → agent-TBLC3WNJ.js} +7 -7
- package/dist/{chat-FGTYCJ4B.js → chat-DNWTI4CZ.js} +8 -8
- package/dist/{chunk-G34TNE53.js → chunk-45FELUWY.js} +2 -2
- package/dist/{chunk-4WAEM2TC.js → chunk-53W6CYYV.js} +5 -5
- package/dist/{chunk-NKRMMFQG.js → chunk-65G5BFYR.js} +56 -5
- package/dist/chunk-65G5BFYR.js.map +1 -0
- package/dist/{chunk-4GO7I33U.js → chunk-6N7EVSAZ.js} +36 -5
- package/dist/chunk-6N7EVSAZ.js.map +1 -0
- package/dist/{chunk-I7TMY7AS.js → chunk-AM6MI2JF.js} +88 -38
- package/dist/chunk-AM6MI2JF.js.map +1 -0
- package/dist/{chunk-AJ46XIGY.js → chunk-ARSQ5UQA.js} +41 -5
- package/dist/chunk-ARSQ5UQA.js.map +1 -0
- package/dist/{chunk-XSP64L7L.js → chunk-F3MDCUGO.js} +4 -368
- package/dist/chunk-F3MDCUGO.js.map +1 -0
- package/dist/{chunk-MBWFTXF5.js → chunk-I2BBOJNC.js} +5 -5
- package/dist/chunk-ILHOW6IA.js +2971 -0
- package/dist/chunk-ILHOW6IA.js.map +1 -0
- package/dist/{chunk-CCNOXDZ7.js → chunk-KVB5P2OE.js} +2 -2
- package/dist/{chunk-M34JVPJO.js → chunk-M4GX5PL2.js} +41 -6
- package/dist/chunk-M4GX5PL2.js.map +1 -0
- package/dist/{chunk-ZW2VKCFZ.js → chunk-PVTZMRC6.js} +34 -2
- package/dist/chunk-PVTZMRC6.js.map +1 -0
- package/dist/{chunk-AQPTBVEA.js → chunk-QRMZRAMG.js} +2 -2
- package/dist/{chunk-AOL2DJTK.js → chunk-TWT56FTL.js} +6 -6
- package/dist/{client-OPZ2ORWW.js → client-3SE632Q2.js} +3 -3
- package/dist/{eas-32PEJETG.js → eas-D3BVHBJH.js} +14 -6
- package/dist/{governor-GSCXEZWI.js → governor-35IXAEDJ.js} +12 -6
- package/dist/identity-RMEPBFOL.js +15 -0
- package/dist/index.js +1326 -3389
- package/dist/index.js.map +1 -1
- package/dist/{network-HCFCNZUI.js → network-FEHRFDPJ.js} +6 -2
- package/dist/{price-OUL7WIXQ.js → price-I5T77X7Y.js} +6 -6
- package/dist/{providers-4HQHB7V5.js → providers-BMOHHVUN.js} +4 -4
- package/dist/{research-2RWAMWWH.js → research-GZNVG3SP.js} +15 -12
- package/dist/research-GZNVG3SP.js.map +1 -0
- package/dist/{session-SIOJZO6P.js → session-M5QB25PK.js} +46 -15
- package/dist/session-M5QB25PK.js.map +1 -0
- package/dist/{trade-ZEIY3MCL.js → trade-TCQ5NUNA.js} +21 -21
- package/dist/trade-TCQ5NUNA.js.map +1 -0
- package/dist/{vault-VDADZFSV.js → vault-K2R4VHVI.js} +8 -8
- package/dist/{xmtp-2U7CSBXM.js → xmtp-R25Q5GWY.js} +6 -6
- package/package.json +2 -2
- package/dist/addresses-MS6BB7AB.js +0 -45
- package/dist/chunk-4GO7I33U.js.map +0 -1
- package/dist/chunk-AJ46XIGY.js.map +0 -1
- package/dist/chunk-I7TMY7AS.js.map +0 -1
- package/dist/chunk-M34JVPJO.js.map +0 -1
- package/dist/chunk-NKRMMFQG.js.map +0 -1
- package/dist/chunk-XSP64L7L.js.map +0 -1
- package/dist/chunk-ZW2VKCFZ.js.map +0 -1
- package/dist/research-2RWAMWWH.js.map +0 -1
- package/dist/session-SIOJZO6P.js.map +0 -1
- package/dist/trade-ZEIY3MCL.js.map +0 -1
- /package/dist/{abis-ZQ6I3S6L.js.map → abis-WVW2EBI3.js.map} +0 -0
- /package/dist/{agent-C5XZSK7Z.js.map → agent-TBLC3WNJ.js.map} +0 -0
- /package/dist/{chat-FGTYCJ4B.js.map → chat-DNWTI4CZ.js.map} +0 -0
- /package/dist/{chunk-G34TNE53.js.map → chunk-45FELUWY.js.map} +0 -0
- /package/dist/{chunk-4WAEM2TC.js.map → chunk-53W6CYYV.js.map} +0 -0
- /package/dist/{chunk-MBWFTXF5.js.map → chunk-I2BBOJNC.js.map} +0 -0
- /package/dist/{chunk-CCNOXDZ7.js.map → chunk-KVB5P2OE.js.map} +0 -0
- /package/dist/{chunk-AQPTBVEA.js.map → chunk-QRMZRAMG.js.map} +0 -0
- /package/dist/{chunk-AOL2DJTK.js.map → chunk-TWT56FTL.js.map} +0 -0
- /package/dist/{addresses-MS6BB7AB.js.map → client-3SE632Q2.js.map} +0 -0
- /package/dist/{client-OPZ2ORWW.js.map → eas-D3BVHBJH.js.map} +0 -0
- /package/dist/{eas-32PEJETG.js.map → governor-35IXAEDJ.js.map} +0 -0
- /package/dist/{governor-GSCXEZWI.js.map → identity-RMEPBFOL.js.map} +0 -0
- /package/dist/{network-HCFCNZUI.js.map → network-FEHRFDPJ.js.map} +0 -0
- /package/dist/{price-OUL7WIXQ.js.map → price-I5T77X7Y.js.map} +0 -0
- /package/dist/{providers-4HQHB7V5.js.map → providers-BMOHHVUN.js.map} +0 -0
- /package/dist/{vault-VDADZFSV.js.map → vault-K2R4VHVI.js.map} +0 -0
- /package/dist/{xmtp-2U7CSBXM.js.map → xmtp-R25Q5GWY.js.map} +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import {
|
|
2
2
|
getNetwork
|
|
3
|
-
} from "./chunk-
|
|
3
|
+
} from "./chunk-PVTZMRC6.js";
|
|
4
4
|
|
|
5
5
|
// src/lib/addresses.ts
|
|
6
6
|
import { isAddress } from "viem";
|
|
@@ -71,7 +71,6 @@ function overridesFor(registry) {
|
|
|
71
71
|
|
|
72
72
|
// src/lib/addresses.ts
|
|
73
73
|
var ZERO = "0x0000000000000000000000000000000000000000";
|
|
74
|
-
var ZERO_BYTES32 = "0x0000000000000000000000000000000000000000000000000000000000000000";
|
|
75
74
|
var ROBINHOOD_TESTNET_TOKENS = {
|
|
76
75
|
USDC: ZERO,
|
|
77
76
|
// USDG (Robinhood-chain stablecoin, 6-dec). Zero on testnet (Synthra WETH-quoted);
|
|
@@ -165,7 +164,20 @@ var ROBINHOOD_TESTNET_SHERWOOD = {
|
|
|
165
164
|
STAKED_WOOD: "0x21A69A6c9814c0d339C57fDdafed3B283702a739",
|
|
166
165
|
WOOD_TOKEN: "0xCCb4fB59cf40de1E23083037ee81Da1DD747D8d7",
|
|
167
166
|
STRATEGY_FACTORY: "0xb683Bb8EEcBc2419BC3801df6FeA88f96657e670",
|
|
168
|
-
MERKL_DISTRIBUTOR: ZERO
|
|
167
|
+
MERKL_DISTRIBUTOR: ZERO,
|
|
168
|
+
// Guardian-era contracts from contracts/chains/46630.json (SHE-93).
|
|
169
|
+
VAULT_IMPL: "0xC57e12d6e2d8Ed49316F0b69c51893CcA44151F7",
|
|
170
|
+
BATCH_EXECUTOR_LIB: "0xF3b8db5aa41c7Ce92478A0Fa9C55a6460533eb86",
|
|
171
|
+
GOVERNOR_BEACON: "0x3D46Ec018cd5893b685b4dfdc3921A4Eb64E11d1",
|
|
172
|
+
PROTOCOL_CONFIG: "0xC104Eb6a522d6718cA28F344B2373B29d57FF2E0",
|
|
173
|
+
PRICE_ROUTER: "0xDd302ffcfA08071780eC1A2f12BccFB9ba6b6731",
|
|
174
|
+
TIER_REGISTRY: "0x99b8068Dc0F6093466964D581f72d947e3e380DB",
|
|
175
|
+
CALL_SANDBOX_IMPL: "0xf09f6AF7DeBB964eD731376C9Af389F2Ce3d872A",
|
|
176
|
+
// Not in chains/46630.json (econ-security stack not deployed there yet).
|
|
177
|
+
EXPOSURE_LEDGER: ZERO,
|
|
178
|
+
PROPOSER_BOND_ESCROW: ZERO,
|
|
179
|
+
CHALLENGE_GAME: ZERO,
|
|
180
|
+
TOKEN_COURT: ZERO
|
|
169
181
|
};
|
|
170
182
|
var ROBINHOOD_TESTNET_VENICE = {
|
|
171
183
|
VVV: ZERO,
|
|
@@ -187,18 +199,21 @@ var ROBINHOOD_TESTNET_STRATEGY_TEMPLATES = {
|
|
|
187
199
|
// V2 redeploy PORTFOLIO_TEMPLATE (chain 46630).
|
|
188
200
|
PORTFOLIO: "0x67420Cc504d70a42Adfd8867d878afe0978C7d10"
|
|
189
201
|
};
|
|
190
|
-
var
|
|
191
|
-
EAS:
|
|
192
|
-
SCHEMA_REGISTRY:
|
|
202
|
+
var ROBINHOOD_MAINNET_EAS = {
|
|
203
|
+
EAS: "0x7d70441Bb10AcE5d9771dc0b6205D89ddf63205B",
|
|
204
|
+
SCHEMA_REGISTRY: "0xdd7521Ba10773e556Defa6D6c133cB2F663b5c26"
|
|
193
205
|
};
|
|
194
|
-
var
|
|
195
|
-
SYNDICATE_JOIN_REQUEST:
|
|
196
|
-
AGENT_APPROVED:
|
|
197
|
-
X402_RESEARCH:
|
|
198
|
-
VENICE_PROVISION:
|
|
199
|
-
VENICE_INFERENCE:
|
|
200
|
-
TRADE_EXECUTED:
|
|
206
|
+
var SHERWOOD_EAS_SCHEMAS = {
|
|
207
|
+
SYNDICATE_JOIN_REQUEST: "0x1e7ce17b16233977ba913b156033e98f52029f4bee273a4abefe6c15ce11d5ef",
|
|
208
|
+
AGENT_APPROVED: "0x1013f7b38f433b2a93fc5ac162482813081c64edd67cea9b5a90698531ddb607",
|
|
209
|
+
X402_RESEARCH: "0x86c67f0a59acb3093ecbeb6c4d1d4352e4a48143672e92ef9dd2fdfc8a9ca708",
|
|
210
|
+
VENICE_PROVISION: "0x76d4d6baa72307826cd2fd4ce069bb42ee54cdda6ed6ab208c8d233c893fb7f1",
|
|
211
|
+
VENICE_INFERENCE: "0xf9b4e530f3016c19439b67372a1c213c9339857627fb817032614b97433a2a14",
|
|
212
|
+
TRADE_EXECUTED: "0x06bb488363a468f7f857ddc8cfffe918d048b8746a0d59eca9cd7f58dbdb4af6"
|
|
201
213
|
};
|
|
214
|
+
function noneOf(shape) {
|
|
215
|
+
return Object.fromEntries(Object.keys(shape).map((k) => [k, ZERO]));
|
|
216
|
+
}
|
|
202
217
|
var ROBINHOOD_FORK_TOKENS = {
|
|
203
218
|
USDC: ZERO,
|
|
204
219
|
USDG: "0x5fc5360D0400a0Fd4f2af552ADD042D716F1d168",
|
|
@@ -232,7 +247,20 @@ var ROBINHOOD_FORK_SHERWOOD = {
|
|
|
232
247
|
STAKED_WOOD: "0xD3037D28693cc7BB3DbF1E17B6e01C4ce628f6DF",
|
|
233
248
|
WOOD_TOKEN: "0xF8BC08092C06dB6148114DCf82AF881F1085f92b",
|
|
234
249
|
STRATEGY_FACTORY: "0xb3C009aECAeDd5ccC62Ec12eDAAA55F19C4A1eFb",
|
|
235
|
-
MERKL_DISTRIBUTOR: ZERO
|
|
250
|
+
MERKL_DISTRIBUTOR: ZERO,
|
|
251
|
+
// Guardian-era contracts from sherwood-protocol/chains/9994663.json (SHE-93).
|
|
252
|
+
VAULT_IMPL: "0x9BF51da59B13746e6cCeb1b35c398EDA9776a4Dc",
|
|
253
|
+
BATCH_EXECUTOR_LIB: "0xdBdBce2af4222Abe0cCDAc05f84364a50577B5a2",
|
|
254
|
+
GOVERNOR_BEACON: "0x2e8aB422Db9127F1a70d8C38A15903f22B51DA97",
|
|
255
|
+
PROTOCOL_CONFIG: "0x36C45dC52FbC267d8536E8456ADe5255eC83A5ab",
|
|
256
|
+
// Not in chains/9994663.json (no PriceRouter / CallSandbox on the fork).
|
|
257
|
+
PRICE_ROUTER: ZERO,
|
|
258
|
+
TIER_REGISTRY: "0x42B089B816F994d792481fAa308199E9CF63be9f",
|
|
259
|
+
CALL_SANDBOX_IMPL: ZERO,
|
|
260
|
+
EXPOSURE_LEDGER: "0x223e2Fd41aD6487333146fc3998d000E74CB1549",
|
|
261
|
+
PROPOSER_BOND_ESCROW: "0xef2D6994faCad11e6CfAF3DaBf7b0B2091009B05",
|
|
262
|
+
CHALLENGE_GAME: "0x202c1F133006D6706e872433CCAfD729c7A8AE56",
|
|
263
|
+
TOKEN_COURT: "0x5DC603881f5d77f41bbd4202F1d518263Dfd497f"
|
|
236
264
|
};
|
|
237
265
|
var ROBINHOOD_FORK_STRATEGY_TEMPLATES = {
|
|
238
266
|
MOONWELL_SUPPLY: ZERO,
|
|
@@ -246,60 +274,89 @@ var ROBINHOOD_FORK_STRATEGY_TEMPLATES = {
|
|
|
246
274
|
};
|
|
247
275
|
var TOKEN_REGISTRY = {
|
|
248
276
|
"robinhood-testnet": ROBINHOOD_TESTNET_TOKENS,
|
|
249
|
-
"robinhood-fork": ROBINHOOD_FORK_TOKENS
|
|
277
|
+
"robinhood-fork": ROBINHOOD_FORK_TOKENS,
|
|
278
|
+
"robinhood-mainnet": noneOf(ROBINHOOD_TESTNET_TOKENS)
|
|
279
|
+
// coordination chain — no Sherwood contracts
|
|
250
280
|
};
|
|
251
281
|
var MOONWELL_REGISTRY = {
|
|
252
282
|
"robinhood-testnet": ROBINHOOD_TESTNET_MOONWELL,
|
|
253
|
-
"robinhood-fork": ROBINHOOD_TESTNET_MOONWELL
|
|
283
|
+
"robinhood-fork": ROBINHOOD_TESTNET_MOONWELL,
|
|
284
|
+
"robinhood-mainnet": noneOf(ROBINHOOD_TESTNET_MOONWELL)
|
|
285
|
+
// coordination chain — no Sherwood contracts
|
|
254
286
|
};
|
|
255
287
|
var UNISWAP_REGISTRY = {
|
|
256
288
|
"robinhood-testnet": ROBINHOOD_TESTNET_UNISWAP,
|
|
257
|
-
"robinhood-fork": ROBINHOOD_FORK_UNISWAP
|
|
289
|
+
"robinhood-fork": ROBINHOOD_FORK_UNISWAP,
|
|
290
|
+
"robinhood-mainnet": noneOf(ROBINHOOD_TESTNET_UNISWAP)
|
|
291
|
+
// coordination chain — no Sherwood contracts
|
|
258
292
|
};
|
|
259
293
|
var INFRA_REGISTRY = {
|
|
260
294
|
"robinhood-testnet": ROBINHOOD_TESTNET_INFRA,
|
|
261
|
-
"robinhood-fork": ROBINHOOD_TESTNET_INFRA
|
|
295
|
+
"robinhood-fork": ROBINHOOD_TESTNET_INFRA,
|
|
296
|
+
"robinhood-mainnet": noneOf(ROBINHOOD_TESTNET_INFRA)
|
|
297
|
+
// coordination chain — no Sherwood contracts
|
|
262
298
|
};
|
|
263
299
|
var ENS_REGISTRY = {
|
|
264
300
|
"robinhood-testnet": ROBINHOOD_TESTNET_ENS,
|
|
265
|
-
"robinhood-fork": ROBINHOOD_TESTNET_ENS
|
|
301
|
+
"robinhood-fork": ROBINHOOD_TESTNET_ENS,
|
|
302
|
+
"robinhood-mainnet": noneOf(ROBINHOOD_TESTNET_ENS)
|
|
303
|
+
// coordination chain — no Sherwood contracts
|
|
304
|
+
};
|
|
305
|
+
var ROBINHOOD_MAINNET_AGENT_REGISTRY = {
|
|
306
|
+
IDENTITY_REGISTRY: "0x8004A169FB4a3325136EB29fA0ceB6D2e539a432",
|
|
307
|
+
REPUTATION_REGISTRY: "0x8004BAa17C55a88189AE136b182e5fdA19dE9b63"
|
|
266
308
|
};
|
|
267
309
|
var AGENT_REGISTRY_MAP = {
|
|
268
310
|
"robinhood-testnet": ROBINHOOD_TESTNET_AGENT_REGISTRY,
|
|
269
|
-
"robinhood-fork": ROBINHOOD_TESTNET_AGENT_REGISTRY
|
|
311
|
+
"robinhood-fork": ROBINHOOD_TESTNET_AGENT_REGISTRY,
|
|
312
|
+
"robinhood-mainnet": ROBINHOOD_MAINNET_AGENT_REGISTRY
|
|
270
313
|
};
|
|
271
314
|
var SHERWOOD_REGISTRY = {
|
|
272
315
|
"robinhood-testnet": ROBINHOOD_TESTNET_SHERWOOD,
|
|
273
|
-
"robinhood-fork": ROBINHOOD_FORK_SHERWOOD
|
|
316
|
+
"robinhood-fork": ROBINHOOD_FORK_SHERWOOD,
|
|
317
|
+
"robinhood-mainnet": noneOf(ROBINHOOD_TESTNET_SHERWOOD)
|
|
318
|
+
// coordination chain — no Sherwood contracts
|
|
274
319
|
};
|
|
275
320
|
var VENICE_REGISTRY = {
|
|
276
321
|
"robinhood-testnet": ROBINHOOD_TESTNET_VENICE,
|
|
277
|
-
"robinhood-fork": ROBINHOOD_TESTNET_VENICE
|
|
322
|
+
"robinhood-fork": ROBINHOOD_TESTNET_VENICE,
|
|
323
|
+
"robinhood-mainnet": noneOf(ROBINHOOD_TESTNET_VENICE)
|
|
324
|
+
// coordination chain — no Sherwood contracts
|
|
278
325
|
};
|
|
279
326
|
var AERODROME_REGISTRY = {
|
|
280
327
|
"robinhood-testnet": ROBINHOOD_TESTNET_AERODROME,
|
|
281
|
-
"robinhood-fork": ROBINHOOD_TESTNET_AERODROME
|
|
328
|
+
"robinhood-fork": ROBINHOOD_TESTNET_AERODROME,
|
|
329
|
+
"robinhood-mainnet": noneOf(ROBINHOOD_TESTNET_AERODROME)
|
|
330
|
+
// coordination chain — no Sherwood contracts
|
|
282
331
|
};
|
|
283
332
|
var STRATEGY_TEMPLATE_REGISTRY = {
|
|
284
333
|
"robinhood-testnet": ROBINHOOD_TESTNET_STRATEGY_TEMPLATES,
|
|
285
|
-
"robinhood-fork": ROBINHOOD_FORK_STRATEGY_TEMPLATES
|
|
334
|
+
"robinhood-fork": ROBINHOOD_FORK_STRATEGY_TEMPLATES,
|
|
335
|
+
"robinhood-mainnet": noneOf(ROBINHOOD_TESTNET_STRATEGY_TEMPLATES)
|
|
336
|
+
// coordination chain — no Sherwood contracts
|
|
286
337
|
};
|
|
287
338
|
var SYNTHRA_REGISTRY = {
|
|
288
339
|
"robinhood-testnet": ROBINHOOD_TESTNET_SYNTHRA,
|
|
289
|
-
"robinhood-fork": ROBINHOOD_TESTNET_SYNTHRA
|
|
340
|
+
"robinhood-fork": ROBINHOOD_TESTNET_SYNTHRA,
|
|
290
341
|
// unused on the fork (Uniswap, not Synthra)
|
|
342
|
+
"robinhood-mainnet": noneOf(ROBINHOOD_TESTNET_SYNTHRA)
|
|
343
|
+
// coordination chain — no Sherwood contracts
|
|
291
344
|
};
|
|
292
345
|
var CHAINLINK_REGISTRY = {
|
|
293
346
|
"robinhood-testnet": ROBINHOOD_TESTNET_CHAINLINK,
|
|
294
|
-
"robinhood-fork": ROBINHOOD_FORK_CHAINLINK
|
|
347
|
+
"robinhood-fork": ROBINHOOD_FORK_CHAINLINK,
|
|
348
|
+
"robinhood-mainnet": noneOf(ROBINHOOD_TESTNET_CHAINLINK)
|
|
349
|
+
// coordination chain — no Sherwood contracts
|
|
295
350
|
};
|
|
296
351
|
var EAS_CONTRACT_REGISTRY = {
|
|
297
|
-
"robinhood-testnet":
|
|
298
|
-
"robinhood-fork":
|
|
352
|
+
"robinhood-testnet": ROBINHOOD_MAINNET_EAS,
|
|
353
|
+
"robinhood-fork": ROBINHOOD_MAINNET_EAS,
|
|
354
|
+
"robinhood-mainnet": ROBINHOOD_MAINNET_EAS
|
|
299
355
|
};
|
|
300
356
|
var EAS_SCHEMA_REGISTRY = {
|
|
301
|
-
"robinhood-testnet":
|
|
302
|
-
"robinhood-fork":
|
|
357
|
+
"robinhood-testnet": SHERWOOD_EAS_SCHEMAS,
|
|
358
|
+
"robinhood-fork": SHERWOOD_EAS_SCHEMAS,
|
|
359
|
+
"robinhood-mainnet": SHERWOOD_EAS_SCHEMAS
|
|
303
360
|
};
|
|
304
361
|
function TOKENS() {
|
|
305
362
|
return TOKEN_REGISTRY[getNetwork()];
|
|
@@ -310,9 +367,6 @@ function MOONWELL() {
|
|
|
310
367
|
function UNISWAP() {
|
|
311
368
|
return { ...UNISWAP_REGISTRY[getNetwork()], ...overridesFor("UNISWAP") };
|
|
312
369
|
}
|
|
313
|
-
function INFRA() {
|
|
314
|
-
return INFRA_REGISTRY[getNetwork()];
|
|
315
|
-
}
|
|
316
370
|
function ENS() {
|
|
317
371
|
return { ...ENS_REGISTRY[getNetwork()], ...overridesFor("ENS") };
|
|
318
372
|
}
|
|
@@ -349,14 +403,10 @@ function CHAINLINK() {
|
|
|
349
403
|
|
|
350
404
|
export {
|
|
351
405
|
ROBINHOOD_STOCK_ROUTES,
|
|
352
|
-
ROBINHOOD_NON_EQUITY_FEEDS,
|
|
353
|
-
isRobinhoodEquityFeed,
|
|
354
|
-
symbolForTokenAddress,
|
|
355
406
|
robinhoodEquityMaxAge,
|
|
356
407
|
TOKENS,
|
|
357
408
|
MOONWELL,
|
|
358
409
|
UNISWAP,
|
|
359
|
-
INFRA,
|
|
360
410
|
ENS,
|
|
361
411
|
AGENT_REGISTRY,
|
|
362
412
|
VENICE,
|
|
@@ -368,4 +418,4 @@ export {
|
|
|
368
418
|
SYNTHRA,
|
|
369
419
|
CHAINLINK
|
|
370
420
|
};
|
|
371
|
-
//# sourceMappingURL=chunk-
|
|
421
|
+
//# sourceMappingURL=chunk-AM6MI2JF.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/lib/addresses.ts","../src/lib/address-overrides.ts"],"sourcesContent":["/**\n * Contract addresses by network.\n *\n * All exports are functions — they resolve at call time based on the\n * current network set via setNetwork(). This ensures --chain works\n * even when modules are imported before the flag is parsed.\n *\n * Current deployment target: Robinhood L2 testnet (chain 46630) only. Other\n * chains may be added back later; when they are, their address blocks + registry\n * entries re-enter here alongside the robinhood-testnet ones.\n *\n * Zero addresses = protocol not deployed on that chain. Strategies that\n * need them will fail at execution time with a clear allowlist error.\n */\n\nimport type { Address, Hex } from \"viem\";\nimport { isAddress } from \"viem\";\nimport { type Network, getNetwork } from \"./network.js\";\nimport { overridesFor } from \"./address-overrides.js\";\n\nconst ZERO: Address = \"0x0000000000000000000000000000000000000000\";\nconst ZERO_BYTES32 =\n \"0x0000000000000000000000000000000000000000000000000000000000000000\" as `0x${string}`;\n\n// ── Robinhood L2 Testnet (Arbitrum Orbit, chain 46630) ──\n// Synthra DEX for swaps. Stock tokens available.\n\nconst ROBINHOOD_TESTNET_TOKENS = {\n USDC: ZERO,\n // USDG (Robinhood-chain stablecoin, 6-dec). Zero on testnet (Synthra WETH-quoted);\n // real on the mainnet fork. Keyed so `--asset USDG` resolves + decimals=6.\n USDG: ZERO,\n // WETH resolves to Synthra's WETH9 (SYNTHRA_WETH): ALL stock DEX liquidity is\n // denominated in it (e.g. the TSLA fee-3000 pool holds ~37.8 WETH here vs\n // ~0.0003 in the canonical WETH pool). It is WETH9-style (payable deposit()),\n // so --use-eth wrapping works against it. Canonical WETH kept as WETH_CANONICAL\n // so the reference isn't lost.\n WETH: \"0x33e4191705c386532ba27cBF171Db86919200B94\" as Address,\n WETH_CANONICAL: \"0x7943e237c7F95DA44E0301572D358911207852Fa\" as Address,\n cbETH: ZERO,\n wstETH: ZERO,\n cbBTC: ZERO,\n DAI: ZERO,\n AERO: ZERO,\n TSLA: \"0xC9f9c86933092BbbfFF3CCb4b105A4A94bf3Bd4E\" as Address,\n AMZN: \"0x5884aD2f920c162CFBbACc88C9C51AA75eC09E02\" as Address,\n PLTR: \"0x1FBE1a0e43594b3455993B5dE5Fd0A7A266298d0\" as Address,\n NFLX: \"0x3b8262A63d25f0477c4DDE23F83cfe22Cb768C93\" as Address,\n AMD: \"0x71178BAc73cBeb415514eB542a8995b82669778d\" as Address,\n} as const;\n\nconst ROBINHOOD_TESTNET_MOONWELL = {\n COMPTROLLER: ZERO,\n mUSDC: ZERO,\n mWETH: ZERO,\n mCbETH: ZERO,\n mWstETH: ZERO,\n mCbBTC: ZERO,\n mDAI: ZERO,\n mAERO: ZERO,\n} as const;\n\n// Synthra is Uniswap-V3-compatible; the deployed UniswapSwapAdapter is backed by\n// Synthra's router + a QuoterV2 shim (SYNTHRA_QUOTER_V2_SHIM). SWAP_ROUTER /\n// QUOTER_V2 mirror the Synthra addresses so a direct v3 quote path also resolves.\nconst ROBINHOOD_TESTNET_UNISWAP = {\n SWAP_ROUTER: \"0x3Ce954107b1A675826B33bF23060Dd655e3758fE\" as Address,\n QUOTER_V2: \"0xb3C009aECAeDd5ccC62Ec12eDAAA55F19C4A1eFb\" as Address,\n SWAP_ADAPTER: \"0x4fc3492117cC3bbcE0b210D22a8DC244f9d86490\" as Address,\n} as const;\n\n// ── Synthra DEX (Robinhood L2 — Uniswap V3-compatible concentrated liquidity) ──\n\nconst ROBINHOOD_TESTNET_SYNTHRA = {\n ROUTER: \"0x3Ce954107b1A675826B33bF23060Dd655e3758fE\" as Address,\n QUOTER: \"0x231606c321A99DE81e28fE48B07a93F1ba49e713\" as Address,\n FACTORY: \"0x911b4000D3422F482F4062a913885f7b035382Df\" as Address,\n} as const;\n\n// ── Chainlink (Data Streams verifier proxy + AggregatorV3 feeds) ──\n\nconst ROBINHOOD_TESTNET_CHAINLINK = {\n VERIFIER_PROXY: \"0x72790f9eB82db492a7DDb6d2af22A270Dcc3Db64\" as Address,\n WSTETH_ETH_FEED: ZERO,\n} as const;\n\n// ── Robinhood portfolio-basket route + feed metadata ──\n//\n// Data-driven replacement for the hand-drifting \"known stock\" Set that used to\n// live in strategy-template.ts. Every entry is a VERIFIED-liquidity default\n// swap route for a basket token. Absence from this map means \"no verified\n// default route\" — the CLI fails fast and demands an explicit --swap-routes\n// rather than falling through to a v3 auto-detect that would be dead.\n//\n// `kind: \"v4-native\"` = a Uniswap v4 mode-3 multi-hop USDG → native ETH → stock,\n// consumed by portfolio-template.ts as\n// v4PathExtraData([{currency: ETH, ...native}, {currency: <token>, ...stock}]).\nexport interface RobinhoodStockRoute {\n kind: \"v4-native\";\n nativeFee: number;\n nativeTickSpacing: number;\n stockFee: number;\n stockTickSpacing: number;\n}\n\n// No verified default stock swap routes on the Robinhood testnet — the machinery\n// is retained (see robinhoodEquityMaxAge / portfolio-template.ts) but the map is\n// empty, so every basket token falls to the existing fail-fast route error until\n// a verified route is added.\n// LOCKSTEP: the app's quote-probe geometry (app/src/lib/price-quote.ts\n// V4_DIRECT_TIERS + via-native path) must stay consistent with any route added\n// here, or the dashboard displays a tier the strategy won't execute.\nexport const ROBINHOOD_STOCK_ROUTES: Record<string, RobinhoodStockRoute> = {};\n\n// Chainlink push-feed classification. Every `*_USD_FEED` is an EQUITY feed\n// (needs the extended 96h max-price-age over holiday weekends) EXCEPT these —\n// crypto/FX/stable feeds keep the contract default (26h). Encoded here (not an\n// inline list in the command) so route/feed metadata lives in one registry.\n//\n// WETH is listed alongside ETH because feed auto-resolve normalizes WETH →\n// ETH_USD_FEED (there is no WETH_USD_FEED — the two share the 24h crypto feed).\n// The classification helper below MUST agree with that normalization for every\n// symbol the feed-resolution path accepts, or a WETH allocation packs the 96h\n// equity max-age onto a 24h crypto feed and accepts ~4-day-stale ETH prices.\nexport const ROBINHOOD_NON_EQUITY_FEEDS = new Set([\"ETH\", \"WETH\", \"BTC\", \"LINK\", \"USDG\", \"USDC\"]);\n\n/** True if `symbol`'s Robinhood push feed is a tokenized-equity feed. */\nexport function isRobinhoodEquityFeed(symbol: string): boolean {\n return !ROBINHOOD_NON_EQUITY_FEEDS.has(symbol.toUpperCase());\n}\n\n/**\n * Reverse-lookup a token address against a `TOKENS()` registry to recover its\n * symbol (case-insensitive). Returns undefined for the zero address or an\n * address that isn't registered. Used so a raw-address token spec can still be\n * classified as an equity feed (→ 96h max-price-age) the same way a symbol spec\n * is — otherwise a stock token passed by address silently falls back to the\n * contract's 26h default and trips `StalePrice` over long weekends.\n */\nexport function symbolForTokenAddress(\n address: string,\n tokens: Record<string, Address>,\n): string | undefined {\n if (!address || address.toLowerCase() === ZERO.toLowerCase()) return undefined;\n const want = address.toLowerCase();\n for (const [symbol, addr] of Object.entries(tokens)) {\n if (addr && addr !== ZERO && addr.toLowerCase() === want) return symbol;\n }\n return undefined;\n}\n\n/**\n * Resolve the equity max-price-age (seconds) for a Robinhood push-feed token\n * spec, which may be a SYMBOL or a raw 0x address. Returns the 96h equity\n * default for equity feeds, 0 (contract default) for crypto/stable feeds, and\n * `{ maxPriceAge: 0, unknownAddress: true }` when a raw address isn't in the\n * registry (caller should warn — we can't classify what we can't identify).\n *\n * `equityMaxAgeSeconds` is injected (from the portfolio builder's\n * EQUITY_MAX_PRICE_AGE_SECONDS) to avoid a cross-module import cycle.\n */\nexport function robinhoodEquityMaxAge(\n tokenSpec: string,\n tokens: Record<string, Address>,\n equityMaxAgeSeconds: number,\n): { maxPriceAge: number; unknownAddress: boolean } {\n let symbol: string | undefined;\n if (isAddress(tokenSpec)) {\n symbol = symbolForTokenAddress(tokenSpec, tokens);\n if (!symbol) return { maxPriceAge: 0, unknownAddress: true };\n } else {\n symbol = tokenSpec;\n }\n return {\n maxPriceAge: isRobinhoodEquityFeed(symbol) ? equityMaxAgeSeconds : 0,\n unknownAddress: false,\n };\n}\n\nconst ROBINHOOD_TESTNET_INFRA = {\n MULTICALL3: \"0xcA11bde05977b3631167028862bE2a173976CA11\" as Address, // Deterministic, same everywhere\n} as const;\n\n// ── ENS / Durin ──\n\nconst ROBINHOOD_TESTNET_ENS = {\n L2_REGISTRAR: ZERO,\n L2_REGISTRY: ZERO,\n} as const;\n\n// ── ERC-8004 Agent Identity ──\n\nconst ROBINHOOD_TESTNET_AGENT_REGISTRY = {\n IDENTITY_REGISTRY: ZERO,\n REPUTATION_REGISTRY: ZERO,\n} as const;\n\n// ── Sherwood Protocol (our deployed contracts) ──\n//\n// V2 redeploy (chain 46630): fresh factory/governor/vault-impl/executor plus a\n// full guardian layer (registry + sWOOD + WOOD fixture token) and the V2\n// live-NAV surface (PriceRouter, UniswapSwapAdapter via the Synthra QuoterV2\n// shim, Portfolio template, StrategyFactory). WOOD_TOKEN here is a testnet\n// fixture, not the mainnet OFT.\n//\n// GOVERNOR is the deploy-time bootstrap governor. Governors are per-vault since\n// PR #421 — resolve one at runtime via `factory.governorOf(vault)`\n// (lib/governor.ts `getGovernorOf`), never from this table.\n// Key parity with the SDK book (sdk/src/addresses.ts SherwoodDeployment) is\n// pinned by lib/address-parity.test.ts — add new keys to BOTH books.\nconst ROBINHOOD_TESTNET_SHERWOOD = {\n FACTORY: \"0xa91AA45AFF32f52b6357044B02a16EBA775feC0b\" as Address,\n GOVERNOR: ZERO, // zeroed since the post-#421 redeploy — always factory.governorOf(vault)\n GUARDIAN_REGISTRY: \"0xA400eFcfFc820C6f812203C58ee00423AeCC0903\" as Address,\n STAKED_WOOD: \"0x21A69A6c9814c0d339C57fDdafed3B283702a739\" as Address,\n WOOD_TOKEN: \"0xCCb4fB59cf40de1E23083037ee81Da1DD747D8d7\" as Address,\n STRATEGY_FACTORY: \"0xb683Bb8EEcBc2419BC3801df6FeA88f96657e670\" as Address,\n MERKL_DISTRIBUTOR: ZERO,\n // Guardian-era contracts from contracts/chains/46630.json (SHE-93).\n VAULT_IMPL: \"0xC57e12d6e2d8Ed49316F0b69c51893CcA44151F7\" as Address,\n BATCH_EXECUTOR_LIB: \"0xF3b8db5aa41c7Ce92478A0Fa9C55a6460533eb86\" as Address,\n GOVERNOR_BEACON: \"0x3D46Ec018cd5893b685b4dfdc3921A4Eb64E11d1\" as Address,\n PROTOCOL_CONFIG: \"0xC104Eb6a522d6718cA28F344B2373B29d57FF2E0\" as Address,\n PRICE_ROUTER: \"0xDd302ffcfA08071780eC1A2f12BccFB9ba6b6731\" as Address,\n TIER_REGISTRY: \"0x99b8068Dc0F6093466964D581f72d947e3e380DB\" as Address,\n CALL_SANDBOX_IMPL: \"0xf09f6AF7DeBB964eD731376C9Af389F2Ce3d872A\" as Address,\n // Not in chains/46630.json (econ-security stack not deployed there yet).\n EXPOSURE_LEDGER: ZERO,\n PROPOSER_BOND_ESCROW: ZERO,\n CHALLENGE_GAME: ZERO,\n TOKEN_COURT: ZERO,\n} as const;\n\n// ── Venice (VVV governance + sVVV staking + DIEM compute) ──\n\nconst ROBINHOOD_TESTNET_VENICE = {\n VVV: ZERO,\n STAKING: ZERO,\n DIEM: ZERO,\n} as const;\n\n// ── Aerodrome (Base ve(3,3) DEX) ──\n\nconst ROBINHOOD_TESTNET_AERODROME = {\n ROUTER: ZERO,\n FACTORY: ZERO,\n} as const;\n\n// ── Strategy Templates (ERC-1167 clonable singletons) ──\n// Populated after running script/DeployTemplates.s.sol\n\nconst ROBINHOOD_TESTNET_STRATEGY_TEMPLATES = {\n MOONWELL_SUPPLY: ZERO as Address,\n AERODROME_LP: ZERO as Address,\n VENICE_INFERENCE: ZERO as Address,\n WSTETH_MOONWELL: ZERO as Address,\n MAMO_YIELD: ZERO as Address,\n HYPERLIQUID_PERP: ZERO as Address,\n HYPERLIQUID_GRID: ZERO as Address,\n // V2 redeploy PORTFOLIO_TEMPLATE (chain 46630).\n PORTFOLIO: \"0x67420Cc504d70a42Adfd8867d878afe0978C7d10\" as Address,\n} as const;\n\n// ── EAS (Ethereum Attestation Service) ──\n\nconst ROBINHOOD_TESTNET_EAS = {\n EAS: ZERO,\n SCHEMA_REGISTRY: ZERO,\n} as const;\n\n// EAS on Robinhood Chain mainnet (4663). Deployed by Sherwood — EAS is not a\n// predeploy on an Arbitrum Orbit chain. sherwoodagent/sherwood-protocol#278.\nconst ROBINHOOD_MAINNET_EAS = {\n EAS: \"0x7d70441Bb10AcE5d9771dc0b6205D89ddf63205B\" as Address,\n SCHEMA_REGISTRY: \"0xdd7521Ba10773e556Defa6D6c133cB2F663b5c26\" as Address,\n} as const;\n\n/**\n * Schema UIDs are chain-INDEPENDENT: uid = keccak256(schema, resolver,\n * revocable) carries no chainId. With resolver = address(0) these are the same\n * UIDs already registered on Base, and re-registering the same definitions on\n * any chain reproduces them. Verified against Base's live SchemaRegistry.\n */\nconst SHERWOOD_EAS_SCHEMAS = {\n SYNDICATE_JOIN_REQUEST: \"0x1e7ce17b16233977ba913b156033e98f52029f4bee273a4abefe6c15ce11d5ef\" as Hex,\n AGENT_APPROVED: \"0x1013f7b38f433b2a93fc5ac162482813081c64edd67cea9b5a90698531ddb607\" as Hex,\n X402_RESEARCH: \"0x86c67f0a59acb3093ecbeb6c4d1d4352e4a48143672e92ef9dd2fdfc8a9ca708\" as Hex,\n VENICE_PROVISION: \"0x76d4d6baa72307826cd2fd4ce069bb42ee54cdda6ed6ab208c8d233c893fb7f1\" as Hex,\n VENICE_INFERENCE: \"0xf9b4e530f3016c19439b67372a1c213c9339857627fb817032614b97433a2a14\" as Hex,\n TRADE_EXECUTED: \"0x06bb488363a468f7f857ddc8cfffe918d048b8746a0d59eca9cd7f58dbdb4af6\" as Hex,\n} as const;\n\n/**\n * Every non-EAS address book, for the coordination chain. Sherwood core is not\n * deployed on 4663, so these are all zero BY CONSTRUCTION rather than by\n * omission — mapping them to the testnet book would silently hand out 46630\n * addresses during the brief `withNetwork` window an EAS write opens.\n */\nfunction noneOf<T extends Record<string, unknown>>(shape: T): T {\n return Object.fromEntries(Object.keys(shape).map((k) => [k, ZERO])) as T;\n}\n\n// ── EAS Schema UIDs (populated after running scripts/register-eas-schemas.ts) ──\n\nconst ROBINHOOD_TESTNET_EAS_SCHEMAS = {\n SYNDICATE_JOIN_REQUEST: ZERO_BYTES32,\n AGENT_APPROVED: ZERO_BYTES32,\n X402_RESEARCH: ZERO_BYTES32,\n VENICE_PROVISION: ZERO_BYTES32,\n VENICE_INFERENCE: ZERO_BYTES32,\n TRADE_EXECUTED: ZERO_BYTES32,\n} as const;\n\n// ── Robinhood Chain mainnet fork (Tenderly vnet, chain 9994663) ──\n//\n// Fork of Robinhood *mainnet*: USDG stablecoin (6-dec), official Uniswap v3+v4,\n// Chainlink PUSH feeds. VERIFIER_PROXY = 0 makes PortfolioStrategy run in\n// push-feed mode (feedIds are AggregatorV3 proxy addresses). Core addresses\n// come from sherwood-protocol/chains/9994663.json (fresh deploy). USDG is passed\n// as a raw --asset address (not a token-shape key); stock baskets use raw token\n// addresses + explicit --feed-ids/--swap-routes until the symbol registry lands.\n\nconst ROBINHOOD_FORK_TOKENS: typeof ROBINHOOD_TESTNET_TOKENS = {\n USDC: ZERO,\n USDG: \"0x5fc5360D0400a0Fd4f2af552ADD042D716F1d168\" as Address,\n WETH: \"0x0Bd7D308f8E1639FAb988df18A8011f41EAcAD73\" as Address,\n WETH_CANONICAL: \"0x0Bd7D308f8E1639FAb988df18A8011f41EAcAD73\" as Address,\n cbETH: ZERO,\n wstETH: ZERO,\n cbBTC: ZERO,\n DAI: ZERO,\n AERO: ZERO,\n TSLA: \"0x322F0929c4625eD5bAd873c95208D54E1c003b2d\" as Address,\n AMZN: \"0x12f190a9F9d7D37a250758b26824B97CE941bF54\" as Address,\n PLTR: ZERO,\n NFLX: ZERO,\n AMD: \"0x86923f96303D656E4aa86D9d42D1e57ad2023fdC\" as Address,\n};\n\nconst ROBINHOOD_FORK_UNISWAP: typeof ROBINHOOD_TESTNET_UNISWAP = {\n SWAP_ROUTER: \"0xcaf681a66d020601342297493863e78c959e5cb2\" as Address,\n QUOTER_V2: \"0x33e885ed0ec9bf04ecfb19341582aadcb4c8a9e7\" as Address,\n SWAP_ADAPTER: \"0xdBf12248c68d1FCb6083f431A1d6ab6d0ef84E49\" as Address,\n};\n\n// VERIFIER_PROXY = 0 ⇒ PortfolioStrategy push-feed mode (Robinhood-mainnet-style).\nconst ROBINHOOD_FORK_CHAINLINK: typeof ROBINHOOD_TESTNET_CHAINLINK = {\n VERIFIER_PROXY: ZERO,\n WSTETH_ETH_FEED: ZERO,\n};\n\nconst ROBINHOOD_FORK_SHERWOOD: typeof ROBINHOOD_TESTNET_SHERWOOD = {\n FACTORY: \"0x02bc9B9C1A4322D5A5df86DadA0a2a02e45108B9\" as Address,\n GOVERNOR: ZERO, // per-vault — always factory.governorOf(vault)\n GUARDIAN_REGISTRY: \"0xdfEe38C4D7595c9c04AdBcaFE01E4Fd6FD6117f4\" as Address,\n STAKED_WOOD: \"0xD3037D28693cc7BB3DbF1E17B6e01C4ce628f6DF\" as Address,\n WOOD_TOKEN: \"0xF8BC08092C06dB6148114DCf82AF881F1085f92b\" as Address,\n STRATEGY_FACTORY: \"0xb3C009aECAeDd5ccC62Ec12eDAAA55F19C4A1eFb\" as Address,\n MERKL_DISTRIBUTOR: ZERO,\n // Guardian-era contracts from sherwood-protocol/chains/9994663.json (SHE-93).\n VAULT_IMPL: \"0x9BF51da59B13746e6cCeb1b35c398EDA9776a4Dc\" as Address,\n BATCH_EXECUTOR_LIB: \"0xdBdBce2af4222Abe0cCDAc05f84364a50577B5a2\" as Address,\n GOVERNOR_BEACON: \"0x2e8aB422Db9127F1a70d8C38A15903f22B51DA97\" as Address,\n PROTOCOL_CONFIG: \"0x36C45dC52FbC267d8536E8456ADe5255eC83A5ab\" as Address,\n // Not in chains/9994663.json (no PriceRouter / CallSandbox on the fork).\n PRICE_ROUTER: ZERO,\n TIER_REGISTRY: \"0x42B089B816F994d792481fAa308199E9CF63be9f\" as Address,\n CALL_SANDBOX_IMPL: ZERO,\n EXPOSURE_LEDGER: \"0x223e2Fd41aD6487333146fc3998d000E74CB1549\" as Address,\n PROPOSER_BOND_ESCROW: \"0xef2D6994faCad11e6CfAF3DaBf7b0B2091009B05\" as Address,\n CHALLENGE_GAME: \"0x202c1F133006D6706e872433CCAfD729c7A8AE56\" as Address,\n TOKEN_COURT: \"0x5DC603881f5d77f41bbd4202F1d518263Dfd497f\" as Address,\n};\n\nconst ROBINHOOD_FORK_STRATEGY_TEMPLATES: typeof ROBINHOOD_TESTNET_STRATEGY_TEMPLATES = {\n MOONWELL_SUPPLY: ZERO,\n AERODROME_LP: ZERO,\n VENICE_INFERENCE: ZERO,\n WSTETH_MOONWELL: ZERO,\n MAMO_YIELD: ZERO,\n HYPERLIQUID_PERP: ZERO,\n HYPERLIQUID_GRID: ZERO,\n PORTFOLIO: \"0x0e768a93B814282776022c3EBfc4e3f22Fa1605E\" as Address,\n};\n\n// ── Registries (map-based lookup) ──\n\nconst TOKEN_REGISTRY: Record<Network, typeof ROBINHOOD_TESTNET_TOKENS> = {\n \"robinhood-testnet\": ROBINHOOD_TESTNET_TOKENS,\n \"robinhood-fork\": ROBINHOOD_FORK_TOKENS,\n \"robinhood-mainnet\": noneOf(ROBINHOOD_TESTNET_TOKENS), // coordination chain — no Sherwood contracts\n};\n\nconst MOONWELL_REGISTRY: Record<Network, typeof ROBINHOOD_TESTNET_MOONWELL> = {\n \"robinhood-testnet\": ROBINHOOD_TESTNET_MOONWELL,\n \"robinhood-fork\": ROBINHOOD_TESTNET_MOONWELL,\n \"robinhood-mainnet\": noneOf(ROBINHOOD_TESTNET_MOONWELL), // coordination chain — no Sherwood contracts\n};\n\nconst UNISWAP_REGISTRY: Record<Network, typeof ROBINHOOD_TESTNET_UNISWAP> = {\n \"robinhood-testnet\": ROBINHOOD_TESTNET_UNISWAP,\n \"robinhood-fork\": ROBINHOOD_FORK_UNISWAP,\n \"robinhood-mainnet\": noneOf(ROBINHOOD_TESTNET_UNISWAP), // coordination chain — no Sherwood contracts\n};\n\nconst INFRA_REGISTRY: Record<Network, typeof ROBINHOOD_TESTNET_INFRA> = {\n \"robinhood-testnet\": ROBINHOOD_TESTNET_INFRA,\n \"robinhood-fork\": ROBINHOOD_TESTNET_INFRA,\n \"robinhood-mainnet\": noneOf(ROBINHOOD_TESTNET_INFRA), // coordination chain — no Sherwood contracts\n};\n\nconst ENS_REGISTRY: Record<Network, typeof ROBINHOOD_TESTNET_ENS> = {\n \"robinhood-testnet\": ROBINHOOD_TESTNET_ENS,\n \"robinhood-fork\": ROBINHOOD_TESTNET_ENS,\n \"robinhood-mainnet\": noneOf(ROBINHOOD_TESTNET_ENS), // coordination chain — no Sherwood contracts\n};\n\n// Canonical ERC-8004 registries ARE live on 4663 (verified on-chain). Like\n// EAS, identity coordinates there: mint/load/lookup run against the\n// coordination chain regardless of the fund chain, so testnet/fork stay zero.\nconst ROBINHOOD_MAINNET_AGENT_REGISTRY = {\n IDENTITY_REGISTRY: \"0x8004A169FB4a3325136EB29fA0ceB6D2e539a432\" as Address,\n REPUTATION_REGISTRY: \"0x8004BAa17C55a88189AE136b182e5fdA19dE9b63\" as Address,\n} as const;\n\nconst AGENT_REGISTRY_MAP: Record<Network, typeof ROBINHOOD_TESTNET_AGENT_REGISTRY> = {\n \"robinhood-testnet\": ROBINHOOD_TESTNET_AGENT_REGISTRY,\n \"robinhood-fork\": ROBINHOOD_TESTNET_AGENT_REGISTRY,\n \"robinhood-mainnet\": ROBINHOOD_MAINNET_AGENT_REGISTRY,\n};\n\nconst SHERWOOD_REGISTRY: Record<Network, typeof ROBINHOOD_TESTNET_SHERWOOD> = {\n \"robinhood-testnet\": ROBINHOOD_TESTNET_SHERWOOD,\n \"robinhood-fork\": ROBINHOOD_FORK_SHERWOOD,\n \"robinhood-mainnet\": noneOf(ROBINHOOD_TESTNET_SHERWOOD), // coordination chain — no Sherwood contracts\n};\n\nconst VENICE_REGISTRY: Record<Network, typeof ROBINHOOD_TESTNET_VENICE> = {\n \"robinhood-testnet\": ROBINHOOD_TESTNET_VENICE,\n \"robinhood-fork\": ROBINHOOD_TESTNET_VENICE,\n \"robinhood-mainnet\": noneOf(ROBINHOOD_TESTNET_VENICE), // coordination chain — no Sherwood contracts\n};\n\nconst AERODROME_REGISTRY: Record<Network, typeof ROBINHOOD_TESTNET_AERODROME> = {\n \"robinhood-testnet\": ROBINHOOD_TESTNET_AERODROME,\n \"robinhood-fork\": ROBINHOOD_TESTNET_AERODROME,\n \"robinhood-mainnet\": noneOf(ROBINHOOD_TESTNET_AERODROME), // coordination chain — no Sherwood contracts\n};\n\nconst STRATEGY_TEMPLATE_REGISTRY: Record<Network, typeof ROBINHOOD_TESTNET_STRATEGY_TEMPLATES> = {\n \"robinhood-testnet\": ROBINHOOD_TESTNET_STRATEGY_TEMPLATES,\n \"robinhood-fork\": ROBINHOOD_FORK_STRATEGY_TEMPLATES,\n \"robinhood-mainnet\": noneOf(ROBINHOOD_TESTNET_STRATEGY_TEMPLATES), // coordination chain — no Sherwood contracts\n};\n\nconst SYNTHRA_REGISTRY: Record<Network, typeof ROBINHOOD_TESTNET_SYNTHRA> = {\n \"robinhood-testnet\": ROBINHOOD_TESTNET_SYNTHRA,\n \"robinhood-fork\": ROBINHOOD_TESTNET_SYNTHRA, // unused on the fork (Uniswap, not Synthra)\n \"robinhood-mainnet\": noneOf(ROBINHOOD_TESTNET_SYNTHRA), // coordination chain — no Sherwood contracts\n};\n\nconst CHAINLINK_REGISTRY: Record<Network, typeof ROBINHOOD_TESTNET_CHAINLINK> = {\n \"robinhood-testnet\": ROBINHOOD_TESTNET_CHAINLINK,\n \"robinhood-fork\": ROBINHOOD_FORK_CHAINLINK,\n \"robinhood-mainnet\": noneOf(ROBINHOOD_TESTNET_CHAINLINK), // coordination chain — no Sherwood contracts\n};\n\n// Attestations live on chain 4663 no matter which chain the fund is on,\n// so every network resolves to the same book (spec §5.1).\nconst EAS_CONTRACT_REGISTRY: Record<Network, typeof ROBINHOOD_MAINNET_EAS> = {\n \"robinhood-testnet\": ROBINHOOD_MAINNET_EAS,\n \"robinhood-fork\": ROBINHOOD_MAINNET_EAS,\n \"robinhood-mainnet\": ROBINHOOD_MAINNET_EAS,\n};\n\n// Attestations live on chain 4663 no matter which chain the fund is on,\n// so every network resolves to the same book (spec §5.1).\nconst EAS_SCHEMA_REGISTRY: Record<Network, typeof SHERWOOD_EAS_SCHEMAS> = {\n \"robinhood-testnet\": SHERWOOD_EAS_SCHEMAS,\n \"robinhood-fork\": SHERWOOD_EAS_SCHEMAS,\n \"robinhood-mainnet\": SHERWOOD_EAS_SCHEMAS,\n};\n\n// ── Exports (functions, resolved at call time) ──\n\nexport function TOKENS() {\n return TOKEN_REGISTRY[getNetwork()];\n}\n\nexport function MOONWELL() {\n return MOONWELL_REGISTRY[getNetwork()];\n}\n\nexport function UNISWAP() {\n return { ...UNISWAP_REGISTRY[getNetwork()], ...overridesFor(\"UNISWAP\") };\n}\n\nexport function INFRA() {\n return INFRA_REGISTRY[getNetwork()];\n}\n\nexport function ENS() {\n return { ...ENS_REGISTRY[getNetwork()], ...overridesFor(\"ENS\") };\n}\n\nexport function AGENT_REGISTRY() {\n return AGENT_REGISTRY_MAP[getNetwork()];\n}\n\nexport function VENICE() {\n return VENICE_REGISTRY[getNetwork()];\n}\n\nexport function SHERWOOD() {\n return { ...SHERWOOD_REGISTRY[getNetwork()], ...overridesFor(\"SHERWOOD\") };\n}\n\nexport function AERODROME() {\n return AERODROME_REGISTRY[getNetwork()];\n}\n\nexport function STRATEGY_TEMPLATES() {\n return {\n ...STRATEGY_TEMPLATE_REGISTRY[getNetwork()],\n ...overridesFor(\"STRATEGY_TEMPLATES\"),\n };\n}\n\nexport function EAS_CONTRACTS() {\n return EAS_CONTRACT_REGISTRY[getNetwork()];\n}\n\nexport function EAS_SCHEMAS() {\n return EAS_SCHEMA_REGISTRY[getNetwork()];\n}\n\nexport function SYNTHRA() {\n return SYNTHRA_REGISTRY[getNetwork()];\n}\n\nexport function CHAINLINK() {\n return CHAINLINK_REGISTRY[getNetwork()];\n}\n","/**\n * SIM_ADDRESSES_FILE override layer (spec G1).\n *\n * Points the CLI at a vnet deployment: a chains/{chainId}.json-shaped file\n * (CAPS_SNAKE_CASE keys, written by contracts deploy scripts) is mapped onto\n * the CLI's per-registry key names and merged over the base network registry\n * at call time. Only 0x-string values are considered. Fail-closed: a set-but-\n * unreadable file throws rather than silently using mainnet addresses.\n */\nimport { readFileSync } from \"node:fs\";\nimport type { Address } from \"viem\";\n\ntype RegistryName = \"SHERWOOD\" | \"STRATEGY_TEMPLATES\" | \"ENS\" | \"UNISWAP\";\n\n// chains-json key → CLI registry key, grouped by target registry.\n// Extend when deploy scripts gain keys the CLI reads (Task 1 Step 2).\n//\n// STRATEGY_TEMPLATES note (Task 1 Step 2 finding): the deploy scripts\n// (DeployTemplates.s.sol / DeployStrategyFactory.s.sol) write chains.json\n// keys with a `_TEMPLATE` suffix (e.g. `MOONWELL_SUPPLY_TEMPLATE`), but the\n// CLI-side STRATEGY_TEMPLATES() registry (cli/src/lib/addresses.ts\n// `BASE_STRATEGY_TEMPLATES`) and its consumers (e.g.\n// cli/src/commands/strategy-template.ts `addressKey: \"MOONWELL_SUPPLY\"`) key\n// off the UNSUFFIXED name. The map below strips the suffix so overrides\n// actually reach the keys the CLI reads.\nconst CHAINS_TO_CLI: Record<RegistryName, Record<string, string>> = {\n SHERWOOD: {\n SYNDICATE_FACTORY: \"FACTORY\",\n SYNDICATE_GOVERNOR: \"GOVERNOR\",\n GUARDIAN_REGISTRY: \"GUARDIAN_REGISTRY\",\n STAKED_WOOD: \"STAKED_WOOD\",\n WOOD: \"WOOD_TOKEN\",\n WOOD_TOKEN: \"WOOD_TOKEN\",\n STRATEGY_FACTORY: \"STRATEGY_FACTORY\",\n },\n STRATEGY_TEMPLATES: {\n MOONWELL_SUPPLY_TEMPLATE: \"MOONWELL_SUPPLY\",\n AERODROME_LP_TEMPLATE: \"AERODROME_LP\",\n VENICE_INFERENCE_TEMPLATE: \"VENICE_INFERENCE\",\n WSTETH_MOONWELL_TEMPLATE: \"WSTETH_MOONWELL\",\n MAMO_YIELD_TEMPLATE: \"MAMO_YIELD\",\n PORTFOLIO_TEMPLATE: \"PORTFOLIO\",\n HYPERLIQUID_PERP_TEMPLATE: \"HYPERLIQUID_PERP\",\n HYPERLIQUID_GRID_TEMPLATE: \"HYPERLIQUID_GRID\",\n },\n ENS: {\n L2_REGISTRAR: \"L2_REGISTRAR\",\n L2_REGISTRY: \"L2_REGISTRY\",\n },\n UNISWAP: {\n UNISWAP_SWAP_ADAPTER: \"SWAP_ADAPTER\",\n },\n};\n\nlet cached: Record<string, Address> | null | undefined;\n\nfunction loadFile(): Record<string, Address> | null {\n if (cached !== undefined) return cached;\n const file = process.env.SIM_ADDRESSES_FILE;\n if (!file) {\n cached = null;\n return cached;\n }\n let raw: Record<string, unknown>;\n try {\n raw = JSON.parse(readFileSync(file, \"utf8\")) as Record<string, unknown>;\n } catch (err) {\n throw new Error(\n `SIM_ADDRESSES_FILE is set (${file}) but unreadable: ${err instanceof Error ? err.message : String(err)}`,\n );\n }\n const out: Record<string, Address> = {};\n for (const [k, v] of Object.entries(raw)) {\n if (typeof v === \"string\" && v.startsWith(\"0x\")) out[k] = v as Address;\n }\n cached = out;\n return cached;\n}\n\n/** Mapped overrides for one CLI registry; {} when SIM_ADDRESSES_FILE unset. */\nexport function overridesFor(registry: RegistryName): Record<string, Address> {\n const file = loadFile();\n if (!file) return {};\n const map = CHAINS_TO_CLI[registry];\n const out: Record<string, Address> = {};\n for (const [chainsKey, cliKey] of Object.entries(map)) {\n if (file[chainsKey]) out[cliKey] = file[chainsKey];\n }\n return out;\n}\n\nexport function __resetOverridesCacheForTests(): void {\n cached = undefined;\n}\n"],"mappings":"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","names":[]}
|
|
@@ -8,18 +8,18 @@ import {
|
|
|
8
8
|
UNISWAP,
|
|
9
9
|
VENICE,
|
|
10
10
|
robinhoodEquityMaxAge
|
|
11
|
-
} from "./chunk-
|
|
11
|
+
} from "./chunk-AM6MI2JF.js";
|
|
12
12
|
import {
|
|
13
13
|
getPublicClient
|
|
14
|
-
} from "./chunk-
|
|
14
|
+
} from "./chunk-QRMZRAMG.js";
|
|
15
15
|
import {
|
|
16
16
|
getNetwork
|
|
17
|
-
} from "./chunk-
|
|
17
|
+
} from "./chunk-PVTZMRC6.js";
|
|
18
18
|
import {
|
|
19
19
|
BASE_STRATEGY_ABI,
|
|
20
20
|
ERC20_ABI,
|
|
21
21
|
UNISWAP_QUOTER_V2_ABI
|
|
22
|
-
} from "./chunk-
|
|
22
|
+
} from "./chunk-F3MDCUGO.js";
|
|
23
23
|
|
|
24
24
|
// src/lib/swap-router.ts
|
|
25
25
|
import { encodeFunctionData as encodeFunctionData9, decodeFunctionResult } from "viem";
|
|
@@ -1324,6 +1324,15 @@ async function buildInitDataForTemplate(templateKey, opts, vault, resolved) {
|
|
|
1324
1324
|
);
|
|
1325
1325
|
process.exit(1);
|
|
1326
1326
|
}
|
|
1327
|
+
if (!route) {
|
|
1328
|
+
const best = resolved?.portfolioFeeTiers?.[i];
|
|
1329
|
+
if (best) {
|
|
1330
|
+
route = {
|
|
1331
|
+
extraData: buildSwapExtraData(network, asset, token, best.feeTier),
|
|
1332
|
+
routeDesc: best.routeDesc
|
|
1333
|
+
};
|
|
1334
|
+
}
|
|
1335
|
+
}
|
|
1327
1336
|
if (!route) route = await detectSwapRoute(asset, token, Number(feeTier));
|
|
1328
1337
|
if (!route) {
|
|
1329
1338
|
console.error(chalk.red(`No swap route found for ${token}. No Uniswap V3 pool (direct or via WETH). Pass --swap-routes to set it explicitly.`));
|
|
@@ -1522,6 +1531,7 @@ function resolveMToken(tokenSymbol) {
|
|
|
1522
1531
|
|
|
1523
1532
|
// src/lib/swap-router.ts
|
|
1524
1533
|
var DEFAULT_FEE_TIER = 3e3;
|
|
1534
|
+
var CANDIDATE_FEE_TIERS = [500, 3e3, 1e4];
|
|
1525
1535
|
var ZERO2 = "0x0000000000000000000000000000000000000000";
|
|
1526
1536
|
async function detectRoute(tokenIn, tokenOut, preferredFeeTier = DEFAULT_FEE_TIER) {
|
|
1527
1537
|
const detected = await detectSwapRoute(tokenIn, tokenOut, preferredFeeTier);
|
|
@@ -1564,6 +1574,28 @@ async function quote(params, deps = {}) {
|
|
|
1564
1574
|
);
|
|
1565
1575
|
return { route, ...result };
|
|
1566
1576
|
}
|
|
1577
|
+
async function selectBestFeeTier(params, deps = {}) {
|
|
1578
|
+
const preferred = params.preferredFeeTier ?? DEFAULT_FEE_TIER;
|
|
1579
|
+
const candidates = params.candidateFeeTiers ?? CANDIDATE_FEE_TIERS;
|
|
1580
|
+
const tiers = [preferred, ...candidates.filter((t) => t !== preferred)];
|
|
1581
|
+
const quoted = [];
|
|
1582
|
+
for (const fee of tiers) {
|
|
1583
|
+
try {
|
|
1584
|
+
const { amountOut } = await getQuote(
|
|
1585
|
+
{ tokenIn: params.tokenIn, tokenOut: params.tokenOut, amountIn: params.amountIn, fee },
|
|
1586
|
+
deps
|
|
1587
|
+
);
|
|
1588
|
+
if (amountOut > 0n) quoted.push({ feeTier: fee, amountOut });
|
|
1589
|
+
} catch {
|
|
1590
|
+
}
|
|
1591
|
+
}
|
|
1592
|
+
if (quoted.length === 0) return null;
|
|
1593
|
+
let best = quoted[0];
|
|
1594
|
+
for (const q of quoted) {
|
|
1595
|
+
if (q.amountOut > best.amountOut) best = q;
|
|
1596
|
+
}
|
|
1597
|
+
return { feeTier: best.feeTier, amountOut: best.amountOut, quoted };
|
|
1598
|
+
}
|
|
1567
1599
|
async function getQuote(params, deps = {}) {
|
|
1568
1600
|
const client = deps.client ?? getPublicClient();
|
|
1569
1601
|
const calldata = encodeFunctionData9({
|
|
@@ -1621,14 +1653,18 @@ function encodeSwapPath(tokens, fees) {
|
|
|
1621
1653
|
export {
|
|
1622
1654
|
HYPERLIQUID_PERP_STRATEGY_ABI,
|
|
1623
1655
|
computeProposalAssetChecks,
|
|
1656
|
+
parseAlignedOverrides,
|
|
1624
1657
|
buildInitDataForTemplate,
|
|
1625
1658
|
buildCallsForTemplate,
|
|
1626
1659
|
resolveToken,
|
|
1660
|
+
defaultPortfolioAsset,
|
|
1627
1661
|
assetDecimalsForSymbol,
|
|
1662
|
+
DEFAULT_FEE_TIER,
|
|
1628
1663
|
quote,
|
|
1664
|
+
selectBestFeeTier,
|
|
1629
1665
|
getQuote,
|
|
1630
1666
|
getMultiHopQuote,
|
|
1631
1667
|
applySlippage,
|
|
1632
1668
|
encodeSwapPath
|
|
1633
1669
|
};
|
|
1634
|
-
//# sourceMappingURL=chunk-
|
|
1670
|
+
//# sourceMappingURL=chunk-ARSQ5UQA.js.map
|