perp-cli 0.12.17 → 0.14.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (363) hide show
  1. package/README.md +247 -27
  2. package/dist/_stderr-filter.js +0 -1
  3. package/dist/agent-wallet/lighter-keystore.d.ts +11 -0
  4. package/dist/agent-wallet/lighter-keystore.js +92 -10
  5. package/dist/agent-wallet/passphrase.d.ts +1 -1
  6. package/dist/agent-wallet/passphrase.js +16 -3
  7. package/dist/agent-wallet/store.d.ts +37 -4
  8. package/dist/agent-wallet/store.js +132 -0
  9. package/dist/agent-wallet/venue-keystore.d.ts +14 -0
  10. package/dist/agent-wallet/venue-keystore.js +121 -0
  11. package/dist/api/public/hyperliquid.js +4 -4
  12. package/dist/api/public/lighter.js +5 -5
  13. package/dist/api/public/pacifica.d.ts +0 -1
  14. package/dist/api/public/pacifica.js +4 -13
  15. package/dist/api/public/urls.d.ts +9 -1
  16. package/dist/api/public/urls.js +35 -13
  17. package/dist/arb/file-lock.d.ts +11 -0
  18. package/dist/arb/file-lock.js +74 -0
  19. package/dist/arb/index.d.ts +2 -2
  20. package/dist/arb/index.js +2 -2
  21. package/dist/arb/pending-entry.d.ts +32 -0
  22. package/dist/arb/pending-entry.js +77 -0
  23. package/dist/arb/sizing.d.ts +6 -13
  24. package/dist/arb/sizing.js +12 -51
  25. package/dist/arb/state.d.ts +45 -12
  26. package/dist/arb/state.js +214 -42
  27. package/dist/arb/utils.d.ts +20 -6
  28. package/dist/arb/utils.js +43 -39
  29. package/dist/bot/conditions.d.ts +4 -4
  30. package/dist/bot/conditions.js +11 -6
  31. package/dist/bot/config.d.ts +17 -1
  32. package/dist/bot/config.js +48 -12
  33. package/dist/bot/engine.d.ts +61 -2
  34. package/dist/bot/engine.js +610 -144
  35. package/dist/bot/fill-size.d.ts +7 -0
  36. package/dist/bot/fill-size.js +18 -0
  37. package/dist/bot/index.d.ts +1 -1
  38. package/dist/bot/index.js +1 -1
  39. package/dist/bot/perp-order.d.ts +99 -0
  40. package/dist/bot/perp-order.js +299 -0
  41. package/dist/bot/presets.d.ts +7 -0
  42. package/dist/bot/presets.js +17 -0
  43. package/dist/bot/quarantine.d.ts +75 -0
  44. package/dist/bot/quarantine.js +190 -0
  45. package/dist/bot/quote-rules.d.ts +23 -0
  46. package/dist/bot/quote-rules.js +69 -0
  47. package/dist/bot/strategies/avellaneda-mm.d.ts +32 -2
  48. package/dist/bot/strategies/avellaneda-mm.js +72 -70
  49. package/dist/bot/strategies/basis-arb.js +2 -0
  50. package/dist/bot/strategies/dca-strategy.d.ts +2 -0
  51. package/dist/bot/strategies/dca-strategy.js +5 -0
  52. package/dist/bot/strategies/funding-arb-strategy.d.ts +43 -3
  53. package/dist/bot/strategies/funding-arb-strategy.js +571 -380
  54. package/dist/bot/strategies/funding-arb-utils.d.ts +48 -23
  55. package/dist/bot/strategies/funding-arb-utils.js +159 -195
  56. package/dist/bot/strategies/funding-arb-v2.d.ts +32 -0
  57. package/dist/bot/strategies/funding-arb-v2.js +258 -47
  58. package/dist/bot/strategies/funding-auto.js +215 -194
  59. package/dist/bot/strategies/spot-perp-arb-strategy.d.ts +14 -0
  60. package/dist/bot/strategies/spot-perp-arb-strategy.js +217 -50
  61. package/dist/bot/strategies/spot-perp-executor.d.ts +73 -19
  62. package/dist/bot/strategies/spot-perp-executor.js +319 -120
  63. package/dist/bot/strategies/spot-perp-state.d.ts +43 -0
  64. package/dist/bot/strategies/spot-perp-state.js +70 -0
  65. package/dist/bot/strategy-types.d.ts +6 -0
  66. package/dist/bot/tui/BotDashboard.d.ts +7 -2
  67. package/dist/bot/tui/BotDashboard.js +6 -3
  68. package/dist/bridge-engine.d.ts +120 -19
  69. package/dist/bridge-engine.js +710 -422
  70. package/dist/bridge-signers.d.ts +54 -0
  71. package/dist/bridge-signers.js +161 -0
  72. package/dist/cache.d.ts +4 -1
  73. package/dist/cache.js +11 -0
  74. package/dist/cli-flags.d.ts +50 -0
  75. package/dist/cli-flags.js +104 -0
  76. package/dist/cli-program.d.ts +35 -0
  77. package/dist/cli-program.js +303 -0
  78. package/dist/cli-spec.js +1 -1
  79. package/dist/client-id-tracker.js +11 -2
  80. package/dist/commands/account.d.ts +7 -1
  81. package/dist/commands/account.js +70 -92
  82. package/dist/commands/agent-import.d.ts +114 -0
  83. package/dist/commands/agent-import.js +794 -0
  84. package/dist/commands/agent.d.ts +232 -2
  85. package/dist/commands/agent.js +1858 -955
  86. package/dist/commands/alerts.d.ts +1 -0
  87. package/dist/commands/alerts.js +31 -28
  88. package/dist/commands/arb/index.d.ts +60 -1
  89. package/dist/commands/arb/index.js +381 -384
  90. package/dist/commands/arb-auto.d.ts +132 -4
  91. package/dist/commands/arb-auto.js +1474 -967
  92. package/dist/commands/arb.d.ts +3 -1
  93. package/dist/commands/arb.js +62 -30
  94. package/dist/commands/bot.js +127 -47
  95. package/dist/commands/bridge.d.ts +2 -1
  96. package/dist/commands/bridge.js +339 -192
  97. package/dist/commands/builder.d.ts +55 -0
  98. package/dist/commands/builder.js +387 -0
  99. package/dist/commands/funds-onchain.d.ts +32 -0
  100. package/dist/commands/funds-onchain.js +248 -0
  101. package/dist/commands/funds.d.ts +25 -0
  102. package/dist/commands/funds.js +925 -245
  103. package/dist/commands/history.js +102 -54
  104. package/dist/commands/init.d.ts +107 -15
  105. package/dist/commands/init.js +1116 -249
  106. package/dist/commands/jobs.d.ts +2 -1
  107. package/dist/commands/jobs.js +77 -15
  108. package/dist/commands/manage.js +136 -91
  109. package/dist/commands/market.d.ts +4 -1
  110. package/dist/commands/market.js +35 -32
  111. package/dist/commands/outcome.d.ts +10 -0
  112. package/dist/commands/outcome.js +396 -0
  113. package/dist/commands/plan.js +52 -12
  114. package/dist/commands/portfolio.d.ts +1 -0
  115. package/dist/commands/portfolio.js +60 -72
  116. package/dist/commands/rebalance.d.ts +2 -1
  117. package/dist/commands/rebalance.js +33 -43
  118. package/dist/commands/risk.js +46 -19
  119. package/dist/commands/settings.d.ts +1 -0
  120. package/dist/commands/settings.js +246 -51
  121. package/dist/commands/trade.d.ts +50 -0
  122. package/dist/commands/trade.js +1943 -695
  123. package/dist/commands/wallet.d.ts +30 -1
  124. package/dist/commands/wallet.js +357 -459
  125. package/dist/config.d.ts +60 -9
  126. package/dist/config.js +252 -82
  127. package/dist/constants.d.ts +29 -4
  128. package/dist/constants.js +62 -20
  129. package/dist/dashboard/server.d.ts +2 -0
  130. package/dist/dashboard/server.js +9 -6
  131. package/dist/dashboard/ui.js +6 -4
  132. package/dist/dashboard/ws-feeds.js +20 -8
  133. package/dist/dex-asset-map.js +5 -3
  134. package/dist/errors.d.ts +122 -0
  135. package/dist/errors.js +194 -0
  136. package/dist/event-stream.js +75 -19
  137. package/dist/evm-master-tx.d.ts +59 -0
  138. package/dist/evm-master-tx.js +154 -0
  139. package/dist/exchanges/adapter-network.d.ts +10 -0
  140. package/dist/exchanges/adapter-network.js +10 -0
  141. package/dist/exchanges/arcus/adapter.d.ts +196 -0
  142. package/dist/exchanges/arcus/adapter.js +1092 -0
  143. package/dist/exchanges/arcus/agent.d.ts +55 -0
  144. package/dist/exchanges/arcus/agent.js +188 -0
  145. package/dist/exchanges/arcus/client.d.ts +63 -0
  146. package/dist/exchanges/arcus/client.js +285 -0
  147. package/dist/exchanges/arcus/public.d.ts +65 -0
  148. package/dist/exchanges/arcus/public.js +138 -0
  149. package/dist/exchanges/arcus/signing.d.ts +176 -0
  150. package/dist/exchanges/arcus/signing.js +288 -0
  151. package/dist/exchanges/arcus/spot-chain.d.ts +60 -0
  152. package/dist/exchanges/arcus/spot-chain.js +241 -0
  153. package/dist/exchanges/arcus/spot-router.d.ts +177 -0
  154. package/dist/exchanges/arcus/spot-router.js +183 -0
  155. package/dist/exchanges/arcus/spot.d.ts +109 -0
  156. package/dist/exchanges/arcus/spot.js +645 -0
  157. package/dist/exchanges/aster-funds.d.ts +127 -0
  158. package/dist/exchanges/aster-funds.js +252 -0
  159. package/dist/exchanges/aster-nonce.d.ts +2 -0
  160. package/dist/exchanges/aster-nonce.js +107 -0
  161. package/dist/exchanges/aster-spot.d.ts +117 -0
  162. package/dist/exchanges/aster-spot.js +686 -0
  163. package/dist/exchanges/aster-typed-data.d.ts +133 -7
  164. package/dist/exchanges/aster-typed-data.js +121 -7
  165. package/dist/exchanges/aster.d.ts +240 -6
  166. package/dist/exchanges/aster.js +1139 -195
  167. package/dist/exchanges/builder-fee.d.ts +254 -0
  168. package/dist/exchanges/builder-fee.js +421 -0
  169. package/dist/exchanges/canonical-symbols.d.ts +32 -0
  170. package/dist/exchanges/canonical-symbols.js +96 -0
  171. package/dist/exchanges/capabilities.d.ts +7 -1
  172. package/dist/exchanges/capabilities.js +7 -0
  173. package/dist/exchanges/hl-signing.d.ts +165 -0
  174. package/dist/exchanges/hl-signing.js +158 -0
  175. package/dist/exchanges/hyperliquid-outcome.d.ts +211 -0
  176. package/dist/exchanges/hyperliquid-outcome.js +646 -0
  177. package/dist/exchanges/hyperliquid-spot.d.ts +44 -5
  178. package/dist/exchanges/hyperliquid-spot.js +308 -117
  179. package/dist/exchanges/hyperliquid.d.ts +462 -57
  180. package/dist/exchanges/hyperliquid.js +1575 -449
  181. package/dist/exchanges/index.d.ts +6 -0
  182. package/dist/exchanges/index.js +4 -0
  183. package/dist/exchanges/interface.d.ts +63 -10
  184. package/dist/exchanges/interface.js +18 -3
  185. package/dist/exchanges/ioc-outcome.d.ts +44 -0
  186. package/dist/exchanges/ioc-outcome.js +57 -0
  187. package/dist/exchanges/legacy-trading-v2.d.ts +39 -0
  188. package/dist/exchanges/legacy-trading-v2.js +940 -0
  189. package/dist/exchanges/lighter-public.d.ts +43 -0
  190. package/dist/exchanges/lighter-public.js +276 -0
  191. package/dist/exchanges/lighter-rh-deposit.d.ts +62 -0
  192. package/dist/exchanges/lighter-rh-deposit.js +185 -0
  193. package/dist/exchanges/lighter-signer.d.ts +123 -0
  194. package/dist/exchanges/lighter-signer.js +215 -0
  195. package/dist/exchanges/lighter-spot.d.ts +91 -13
  196. package/dist/exchanges/lighter-spot.js +595 -233
  197. package/dist/exchanges/lighter.d.ts +611 -39
  198. package/dist/exchanges/lighter.js +1890 -649
  199. package/dist/exchanges/ondo/adapter.d.ts +152 -0
  200. package/dist/exchanges/ondo/adapter.js +811 -0
  201. package/dist/exchanges/ondo/agent.d.ts +31 -0
  202. package/dist/exchanges/ondo/agent.js +101 -0
  203. package/dist/exchanges/ondo/client.d.ts +60 -0
  204. package/dist/exchanges/ondo/client.js +297 -0
  205. package/dist/exchanges/ondo/funds.d.ts +95 -0
  206. package/dist/exchanges/ondo/funds.js +198 -0
  207. package/dist/exchanges/ondo/public.d.ts +95 -0
  208. package/dist/exchanges/ondo/public.js +214 -0
  209. package/dist/exchanges/ondo/spot.d.ts +127 -0
  210. package/dist/exchanges/ondo/spot.js +392 -0
  211. package/dist/exchanges/outcome-interface.d.ts +140 -0
  212. package/dist/exchanges/outcome-interface.js +16 -0
  213. package/dist/exchanges/pacifica-spot.d.ts +83 -0
  214. package/dist/exchanges/pacifica-spot.js +324 -0
  215. package/dist/exchanges/pacifica-typed-data.d.ts +30 -13
  216. package/dist/exchanges/pacifica-typed-data.js +57 -9
  217. package/dist/exchanges/pacifica.d.ts +293 -4
  218. package/dist/exchanges/pacifica.js +1044 -90
  219. package/dist/exchanges/precision.d.ts +47 -0
  220. package/dist/exchanges/precision.js +209 -0
  221. package/dist/exchanges/qfex/adapter.d.ts +341 -0
  222. package/dist/exchanges/qfex/adapter.js +1386 -0
  223. package/dist/exchanges/qfex/agent.d.ts +58 -0
  224. package/dist/exchanges/qfex/agent.js +188 -0
  225. package/dist/exchanges/qfex/client.d.ts +54 -0
  226. package/dist/exchanges/qfex/client.js +138 -0
  227. package/dist/exchanges/qfex/errors.d.ts +70 -0
  228. package/dist/exchanges/qfex/errors.js +236 -0
  229. package/dist/exchanges/qfex/public.d.ts +122 -0
  230. package/dist/exchanges/qfex/public.js +268 -0
  231. package/dist/exchanges/qfex/signing.d.ts +160 -0
  232. package/dist/exchanges/qfex/signing.js +283 -0
  233. package/dist/exchanges/qfex/ws-transport.d.ts +294 -0
  234. package/dist/exchanges/qfex/ws-transport.js +798 -0
  235. package/dist/exchanges/rate-limiter.d.ts +12 -0
  236. package/dist/exchanges/rate-limiter.js +64 -0
  237. package/dist/exchanges/registry.d.ts +14 -2
  238. package/dist/exchanges/registry.js +20 -32
  239. package/dist/exchanges/slippage.d.ts +37 -0
  240. package/dist/exchanges/slippage.js +70 -0
  241. package/dist/exchanges/spot-factory.d.ts +166 -0
  242. package/dist/exchanges/spot-factory.js +431 -0
  243. package/dist/exchanges/spot-interface.d.ts +98 -4
  244. package/dist/exchanges/spot-interface.js +27 -1
  245. package/dist/exchanges/spot-result.d.ts +79 -0
  246. package/dist/exchanges/spot-result.js +273 -0
  247. package/dist/exchanges/trading-v2.d.ts +117 -0
  248. package/dist/exchanges/trading-v2.js +301 -0
  249. package/dist/exchanges/venue-types.d.ts +231 -0
  250. package/dist/exchanges/venue-types.js +87 -0
  251. package/dist/exchanges/venue.d.ts +211 -0
  252. package/dist/exchanges/venue.js +132 -0
  253. package/dist/exchanges/venues/arcus.d.ts +8 -0
  254. package/dist/exchanges/venues/arcus.js +109 -0
  255. package/dist/exchanges/venues/aster.d.ts +49 -0
  256. package/dist/exchanges/venues/aster.js +176 -0
  257. package/dist/exchanges/venues/create-helpers.d.ts +18 -0
  258. package/dist/exchanges/venues/create-helpers.js +199 -0
  259. package/dist/exchanges/venues/hyperliquid.d.ts +23 -0
  260. package/dist/exchanges/venues/hyperliquid.js +126 -0
  261. package/dist/exchanges/venues/index.d.ts +16 -0
  262. package/dist/exchanges/venues/index.js +26 -0
  263. package/dist/exchanges/venues/lighter-family.d.ts +92 -0
  264. package/dist/exchanges/venues/lighter-family.js +166 -0
  265. package/dist/exchanges/venues/lighter-rh.d.ts +7 -0
  266. package/dist/exchanges/venues/lighter-rh.js +58 -0
  267. package/dist/exchanges/venues/lighter.d.ts +6 -0
  268. package/dist/exchanges/venues/lighter.js +55 -0
  269. package/dist/exchanges/venues/ondo.d.ts +29 -0
  270. package/dist/exchanges/venues/ondo.js +136 -0
  271. package/dist/exchanges/venues/pacifica.d.ts +8 -0
  272. package/dist/exchanges/venues/pacifica.js +95 -0
  273. package/dist/exchanges/venues/qfex.d.ts +39 -0
  274. package/dist/exchanges/venues/qfex.js +140 -0
  275. package/dist/execution-log.js +10 -2
  276. package/dist/funding/legacy-public.d.ts +31 -0
  277. package/dist/funding/legacy-public.js +369 -0
  278. package/dist/funding/normalize.d.ts +28 -16
  279. package/dist/funding/normalize.js +61 -29
  280. package/dist/funding/rates.d.ts +46 -11
  281. package/dist/funding/rates.js +228 -277
  282. package/dist/guardrail/perp-guardrail.js +0 -0
  283. package/dist/index.js +156 -684
  284. package/dist/jobs.d.ts +84 -6
  285. package/dist/jobs.js +239 -41
  286. package/dist/landing.d.ts +7 -2
  287. package/dist/landing.js +19 -3
  288. package/dist/mcp-server.d.ts +14 -4
  289. package/dist/mcp-server.js +821 -403
  290. package/dist/mcp-trade-guard.d.ts +16 -0
  291. package/dist/mcp-trade-guard.js +59 -0
  292. package/dist/onchain-balances.d.ts +40 -0
  293. package/dist/onchain-balances.js +173 -0
  294. package/dist/pacifica/client.d.ts +41 -10
  295. package/dist/pacifica/client.js +167 -63
  296. package/dist/pacifica/constants.d.ts +0 -1
  297. package/dist/pacifica/constants.js +0 -5
  298. package/dist/pacifica/deposit.d.ts +30 -3
  299. package/dist/pacifica/deposit.js +119 -2
  300. package/dist/pacifica/faucet.d.ts +29 -0
  301. package/dist/pacifica/faucet.js +100 -0
  302. package/dist/pacifica/sign-tx.d.ts +15 -0
  303. package/dist/pacifica/sign-tx.js +41 -0
  304. package/dist/pacifica/types/account.d.ts +28 -4
  305. package/dist/pacifica/types/lake.d.ts +20 -5
  306. package/dist/pacifica/types/lake.js +4 -0
  307. package/dist/pacifica/types/market.d.ts +5 -0
  308. package/dist/pacifica/types/order.d.ts +4 -1
  309. package/dist/pacifica/types/position.d.ts +9 -1
  310. package/dist/plan-executor.d.ts +10 -5
  311. package/dist/plan-executor.js +165 -54
  312. package/dist/position-history.js +13 -0
  313. package/dist/rebalance.d.ts +26 -2
  314. package/dist/rebalance.js +86 -7
  315. package/dist/relay-swap.d.ts +232 -0
  316. package/dist/relay-swap.js +630 -0
  317. package/dist/risk.js +5 -1
  318. package/dist/secret-env.d.ts +15 -0
  319. package/dist/secret-env.js +36 -0
  320. package/dist/settings.d.ts +169 -6
  321. package/dist/settings.js +219 -38
  322. package/dist/signer/ows-evm.d.ts +13 -0
  323. package/dist/signer/ows-evm.js +22 -0
  324. package/dist/smart-order.d.ts +9 -0
  325. package/dist/smart-order.js +53 -8
  326. package/dist/strategies/dca.d.ts +6 -2
  327. package/dist/strategies/dca.js +66 -26
  328. package/dist/strategies/funding-arb.d.ts +11 -1
  329. package/dist/strategies/funding-arb.js +202 -89
  330. package/dist/strategies/grid.d.ts +31 -0
  331. package/dist/strategies/grid.js +89 -11
  332. package/dist/strategies/pending-stop.d.ts +8 -0
  333. package/dist/strategies/pending-stop.js +12 -0
  334. package/dist/strategies/split-order.d.ts +45 -17
  335. package/dist/strategies/split-order.js +157 -91
  336. package/dist/strategies/trailing-stop.d.ts +2 -1
  337. package/dist/strategies/trailing-stop.js +52 -6
  338. package/dist/strategies/twap.d.ts +6 -1
  339. package/dist/strategies/twap.js +39 -11
  340. package/dist/trade-validator.d.ts +22 -0
  341. package/dist/trade-validator.js +119 -15
  342. package/dist/utils/numeric.d.ts +46 -0
  343. package/dist/utils/numeric.js +79 -0
  344. package/dist/utils.d.ts +19 -0
  345. package/dist/utils.js +96 -19
  346. package/dist/withdraw-gate.d.ts +49 -0
  347. package/dist/withdraw-gate.js +131 -0
  348. package/package.json +15 -6
  349. package/skills/perp-cli/SKILL.md +159 -55
  350. package/skills/perp-cli/references/agent-operations.md +112 -58
  351. package/skills/perp-cli/references/commands.md +269 -73
  352. package/skills/perp-cli/references/strategies.md +34 -31
  353. package/skills/perp-cli/scripts/arb-monitor.sh +10 -5
  354. package/skills/perp-cli/scripts/funding-analysis.sh +14 -9
  355. package/skills/perp-cli/scripts/preflight.sh +21 -14
  356. package/skills/perp-cli/scripts/spot-perp-scan.sh +12 -7
  357. package/skills/perp-cli/scripts/validate-arb.sh +31 -15
  358. package/vendor/lighter-signer/SHA256SUMS +2 -0
  359. package/vendor/lighter-signer/VERSION +8 -0
  360. package/vendor/lighter-signer/lighter-signer.wasm +0 -0
  361. package/vendor/lighter-signer/wasm_exec.js +575 -0
  362. package/dist/bot/strategies/funding-arb-v2-strategy.d.ts +0 -42
  363. package/dist/bot/strategies/funding-arb-v2-strategy.js +0 -864
@@ -0,0 +1,211 @@
1
+ /**
2
+ * Venue definitions — the single source of truth for "which venue, on which
3
+ * network, signed how, funded how, supporting what".
4
+ *
5
+ * See docs/DESIGN-venue-abstraction.md §10. One adapter class may serve several
6
+ * venues (LighterAdapter serves `lighter` and `lighter-rh`).
7
+ *
8
+ * Venue definition modules must load adapter code lazily (`import()` inside
9
+ * `create`) so that public-data paths never pull in heavy SDKs (lighter WASM).
10
+ */
11
+ import type { ExchangeAdapter } from "./interface.js";
12
+ import type { SpotAdapter } from "./spot-interface.js";
13
+ import type { FundingRateBasis, LegacyVenueId, Network, TimeInForce, VenueFundingRate, VenueId, VenueMarket } from "./venue-types.js";
14
+ import { isVenueId } from "./venue-types.js";
15
+ import type { AnyAgentMeta } from "../settings.js";
16
+ import type { BuilderFeeCapability } from "./builder-fee.js";
17
+ export type { VenueId, LegacyVenueId, Network, FundingRateBasis, VenueMarket, VenueFundingRate, } from "./venue-types.js";
18
+ /** Kind of the user's master (owner) key. Replaces the overloaded legacy `chain` field. */
19
+ export type MasterKeyKind = "evm" | "solana" | "none";
20
+ /** Kind of the delegated hot-path key. */
21
+ export type AgentKeyKind = "evm" | "solana" | "lighter-l2" | "ed25519" | "hmac" | "none";
22
+ export interface SecretStorage {
23
+ /** ows-wallet: OWS vault wallet; perp-keystore: ~/.perp/<dir>/ AES-256-GCM files (SSOT Rule #3). */
24
+ kind: "ows-wallet" | "perp-keystore" | "none";
25
+ /** Directory name under ~/.perp/ for perp-keystore, e.g. "lighter-rh-agents". */
26
+ dir: string | null;
27
+ }
28
+ export interface VenueNetworkConfig {
29
+ restUrl: string;
30
+ wsUrl: string | null;
31
+ explorerUrl: string | null;
32
+ /** Chain id mixed into signatures (Lighter 304 / RH 466324 / Arcus 4663). */
33
+ signingChainId: number | null;
34
+ /** Where the funds live: "ethereum" | "robinhood" | "arbitrum" | "solana" | "bnb" | "hyperliquid" | "offchain". */
35
+ settlementChain: string;
36
+ collateral: string[];
37
+ /** Lighter-family collateral asset index (USDC on Lighter, USDG on RH — both 3). */
38
+ collateralAssetIndex: number | null;
39
+ /** EVM JSON-RPC for on-chain reads/txs (Arcus spot on Robinhood Chain). null = not needed by this venue. */
40
+ rpcUrl: string | null;
41
+ /**
42
+ * Pinned L1 deposit identifiers (chain id, deposit contract, collateral token) verified
43
+ * against official docs. A deposit refuses (EXCHANGE_ERROR) when the venue API disagrees.
44
+ * null = the CLI has no pinned contract deposit for this venue/network.
45
+ */
46
+ depositPins: VenueDepositPins | null;
47
+ }
48
+ export interface VenueDepositPins {
49
+ chainId: number;
50
+ contract: string;
51
+ token: string;
52
+ /** Where the pinned values were verified (for audits / re-verification). */
53
+ sources: readonly string[];
54
+ }
55
+ export type MarketOrderMode = "native" | "slippageBounded" | "rfq";
56
+ export type TpSlMode = "attached" | "separateOrders" | "batchGroup" | "positionLevel";
57
+ export interface VenueCapabilities {
58
+ marketOrder: MarketOrderMode;
59
+ timeInForce: readonly TimeInForce[];
60
+ /**
61
+ * Time-in-force values a reduce-only LIMIT order may carry; null = any offered TIF.
62
+ * Ondo: ["IOC"] — a resting reduce-only order is refused by the venue.
63
+ */
64
+ reduceOnlyTif: readonly TimeInForce[] | null;
65
+ clientOrderId: boolean;
66
+ orderAck: "sync" | "async";
67
+ tpsl: TpSlMode | null;
68
+ amend: "native" | "cancelReplace" | null;
69
+ batchPlaceMax: number | null;
70
+ marginModes: ReadonlyArray<"cross" | "isolated">;
71
+ withdrawAssets: string[] | null;
72
+ }
73
+ export type SpotAccountModel = "unified" | "separate" | "runtime" | "wallet";
74
+ /** Per-process spot adapter options (CLI flags). */
75
+ export interface SpotCreateOptions {
76
+ /** Allow on-chain approve txs (Arcus Permit2 approve; CLI --yes). */
77
+ confirmOnchainApprove: boolean;
78
+ }
79
+ export interface VenueSpotDefinition {
80
+ accountModel: SpotAccountModel;
81
+ /**
82
+ * Quote assets per network; [0] is the default quote for a bare base symbol and the transfer
83
+ * asset. Network-keyed because a venue's collateral can differ by network (Lighter RH: USDG on
84
+ * mainnet, USDC on testnet — networks.<net>.collateral). Read through spotQuoteAssets(def, net).
85
+ */
86
+ quoteAssets: Readonly<Record<Network, readonly string[]>>;
87
+ capabilities: {
88
+ limitOrder: boolean;
89
+ orderbook: boolean;
90
+ cancel: boolean;
91
+ transfer: boolean;
92
+ };
93
+ /** Creates and init()s the spot adapter around an already-created perp adapter (lazy import). */
94
+ createSpot(perp: ExchangeAdapter, opts: SpotCreateOptions): Promise<SpotAdapter>;
95
+ }
96
+ export interface RateLimitPolicy {
97
+ /** Bucket capacity (weight units). */
98
+ capacity: number;
99
+ /** Refill rate (weight units per second). */
100
+ refillPerSec: number;
101
+ /** Per-endpoint weights; endpoints not listed cost 1. null = uniform weight 1. */
102
+ weights: Record<string, number> | null;
103
+ }
104
+ export interface VenuePublicData {
105
+ fetchFundingRates(net: Network): Promise<VenueFundingRate[]>;
106
+ fetchMarkets(net: Network): Promise<VenueMarket[]>;
107
+ }
108
+ export interface VenueCredentials {
109
+ /** Raw private key from --private-key or (legacy venues only) env. */
110
+ pk: string | null;
111
+ owsWallet: string | null;
112
+ owsPassphrase: string | null;
113
+ owsKeyToken: string | null;
114
+ agent: AnyAgentMeta | null;
115
+ }
116
+ export interface VenueCreateContext {
117
+ network: Network;
118
+ credentials: VenueCredentials;
119
+ noAgent: boolean;
120
+ /** Hyperliquid HIP-3 dex; null for all other venues. */
121
+ hlDex: string | null;
122
+ /** true → public reads only; credentials are ignored. */
123
+ readOnly: boolean;
124
+ /** --no-builder: never attach a configured builder fee on this adapter's orders. */
125
+ noBuilder: boolean;
126
+ }
127
+ export declare const READ_ONLY_CREDENTIALS: VenueCredentials;
128
+ export type VenueRole = "marketData" | "account" | "trading";
129
+ export type SymbolIdentity = "baseTicker" | "explicit";
130
+ export interface VenueDefinition {
131
+ id: VenueId;
132
+ aliases: readonly string[];
133
+ displayName: string;
134
+ family: "pacifica" | "hyperliquid" | "lighter" | "aster" | "ondo" | "arcus" | "qfex";
135
+ masterKeyKind: MasterKeyKind;
136
+ agentKeyKind: AgentKeyKind;
137
+ secretStorage: SecretStorage;
138
+ networks: {
139
+ mainnet: VenueNetworkConfig;
140
+ testnet: VenueNetworkConfig | null;
141
+ };
142
+ fundingRateBasis: FundingRateBasis | "perMarket";
143
+ settlementIntervalHours: number | "perMarket";
144
+ /**
145
+ * false = the unit / meaning of the venue's published funding rate is not verified against
146
+ * settled funding payments yet (design §14.12 #6). Such a venue is left out of cross-venue
147
+ * funding comparison (fetchVenuesRates drops it unless includeUnverified is passed), its
148
+ * adapter reports fundingRate null to bots, and funding-arb strategies refuse it as a leg.
149
+ */
150
+ fundingVerified: boolean;
151
+ roles: readonly VenueRole[];
152
+ /** null when the venue has no trading role. */
153
+ capabilities: VenueCapabilities | null;
154
+ rateLimit: RateLimitPolicy;
155
+ /** ISO-3166 alpha-2 codes; shown as a warning, never enforced. */
156
+ restrictedRegions: readonly string[];
157
+ /** How cross-venue canonical symbols are derived for crypto markets (equity is always explicit). */
158
+ symbolIdentity: SymbolIdentity;
159
+ publicData: VenuePublicData;
160
+ /** null when the venue cannot produce an adapter (public data only). */
161
+ create: ((ctx: VenueCreateContext) => Promise<ExchangeAdapter>) | null;
162
+ /** null = venue has no spot trading (§12). */
163
+ spot: VenueSpotDefinition | null;
164
+ /**
165
+ * Largest slippage bound (bps) a market-type order may carry on this venue
166
+ * (design §13.10 #1). resolveSlippage() rejects anything above it with
167
+ * INVALID_PARAMS before sending — never clamps.
168
+ */
169
+ maxSlippageBps: number;
170
+ /**
171
+ * Builder-fee support (src/exchanges/builder-fee.ts BUILDER_FEE_CAPABILITIES — the single
172
+ * source); null = unsupported (CAPABILITY_UNSUPPORTED). Attached only when the user set
173
+ * settings.builder.<venue> and the approval is confirmed.
174
+ */
175
+ builderFee: BuilderFeeCapability | null;
176
+ }
177
+ export declare function registerVenue(def: VenueDefinition): void;
178
+ /** Resolve a venue id or alias. Throws UNKNOWN_VENUE. */
179
+ export declare function resolveVenueId(nameOrAlias: string): VenueId;
180
+ export declare function tryResolveVenueId(nameOrAlias: string): VenueId | null;
181
+ export declare function getVenue(nameOrAlias: string): VenueDefinition;
182
+ export declare function listVenues(): VenueDefinition[];
183
+ export declare function listVenuesWithRole(role: VenueRole): VenueDefinition[];
184
+ export declare function networkConfig(def: VenueDefinition, net: Network): VenueNetworkConfig;
185
+ export declare function requireCapabilities(def: VenueDefinition): VenueCapabilities;
186
+ /**
187
+ * A venue reference as it appears in stored data and funding keys:
188
+ * a venue id/alias, or "hl:<dex>" / "hyperliquid:<dex>" for HIP-3 dexes.
189
+ */
190
+ export interface VenueRef {
191
+ venue: VenueId;
192
+ hlDex: string | null;
193
+ }
194
+ export declare function parseVenueRef(ref: string): VenueRef;
195
+ /**
196
+ * Funding basis for a venue ref. HIP-3 dexes use the Hyperliquid core basis
197
+ * (current behavior preserved; see design §10.1 — verify against live data).
198
+ * Throws for venues whose basis is per-market; callers must use the market's value.
199
+ */
200
+ export declare function fundingBasisOf(ref: string): FundingRateBasis;
201
+ export declare function settlementIntervalOf(ref: string): number;
202
+ /**
203
+ * Refuse a venue whose funding rate is unverified (VenueDefinition.fundingVerified false) as a
204
+ * leg of a funding strategy (arb scan ranking, arb exec / auto, funding bots). Uniform
205
+ * CAPABILITY_UNSUPPORTED (design §13.6, §14.12 #6). Unknown venue refs throw UNKNOWN_VENUE.
206
+ */
207
+ export declare function assertFundingArbVenue(ref: string): void;
208
+ export declare function isLegacyVenue(def: VenueDefinition): def is VenueDefinition & {
209
+ id: LegacyVenueId;
210
+ };
211
+ export { isVenueId };
@@ -0,0 +1,132 @@
1
+ /**
2
+ * Venue definitions — the single source of truth for "which venue, on which
3
+ * network, signed how, funded how, supporting what".
4
+ *
5
+ * See docs/DESIGN-venue-abstraction.md §10. One adapter class may serve several
6
+ * venues (LighterAdapter serves `lighter` and `lighter-rh`).
7
+ *
8
+ * Venue definition modules must load adapter code lazily (`import()` inside
9
+ * `create`) so that public-data paths never pull in heavy SDKs (lighter WASM).
10
+ */
11
+ import { PerpError } from "../errors.js";
12
+ import { isVenueId } from "./venue-types.js";
13
+ export const READ_ONLY_CREDENTIALS = {
14
+ pk: null, owsWallet: null, owsPassphrase: null, owsKeyToken: null, agent: null,
15
+ };
16
+ // ── Registry ──
17
+ const _venues = new Map();
18
+ const _aliases = new Map();
19
+ export function registerVenue(def) {
20
+ if (_venues.has(def.id))
21
+ throw new Error(`venue already registered: ${def.id}`);
22
+ _venues.set(def.id, def);
23
+ _aliases.set(def.id, def.id);
24
+ for (const a of def.aliases) {
25
+ const prev = _aliases.get(a);
26
+ if (prev && prev !== def.id)
27
+ throw new Error(`venue alias "${a}" already used by ${prev}`);
28
+ _aliases.set(a, def.id);
29
+ }
30
+ }
31
+ function unknownVenue(input) {
32
+ return new PerpError("UNKNOWN_VENUE", `Unknown venue: "${input}"`, {
33
+ remediation: `Use one of: ${[..._venues.keys()].join(", ")}`,
34
+ });
35
+ }
36
+ /** Resolve a venue id or alias. Throws UNKNOWN_VENUE. */
37
+ export function resolveVenueId(nameOrAlias) {
38
+ const id = _aliases.get(nameOrAlias.toLowerCase());
39
+ if (!id)
40
+ throw unknownVenue(nameOrAlias);
41
+ return id;
42
+ }
43
+ export function tryResolveVenueId(nameOrAlias) {
44
+ return _aliases.get(nameOrAlias.toLowerCase()) ?? null;
45
+ }
46
+ export function getVenue(nameOrAlias) {
47
+ const id = resolveVenueId(nameOrAlias);
48
+ const def = _venues.get(id);
49
+ if (!def)
50
+ throw unknownVenue(nameOrAlias);
51
+ return def;
52
+ }
53
+ export function listVenues() {
54
+ return [..._venues.values()];
55
+ }
56
+ export function listVenuesWithRole(role) {
57
+ return listVenues().filter(v => v.roles.includes(role));
58
+ }
59
+ export function networkConfig(def, net) {
60
+ const cfg = def.networks[net];
61
+ if (!cfg) {
62
+ throw new PerpError("NOT_IMPLEMENTED", `${def.displayName} has no ${net} environment`, {
63
+ remediation: `Run without --testnet for ${def.id}`,
64
+ });
65
+ }
66
+ return cfg;
67
+ }
68
+ export function requireCapabilities(def) {
69
+ if (!def.capabilities) {
70
+ throw new PerpError("NOT_IMPLEMENTED", `${def.displayName} does not support trading via API`, {
71
+ remediation: `${def.id} is available for market data only (funding/market commands)`,
72
+ });
73
+ }
74
+ return def.capabilities;
75
+ }
76
+ export function parseVenueRef(ref) {
77
+ const lower = ref.toLowerCase();
78
+ const colon = lower.indexOf(":");
79
+ if (colon > 0) {
80
+ const head = lower.slice(0, colon);
81
+ const dex = lower.slice(colon + 1);
82
+ const venue = resolveVenueId(head);
83
+ if (venue !== "hyperliquid" || dex.length === 0)
84
+ throw unknownVenue(ref);
85
+ return { venue, hlDex: dex };
86
+ }
87
+ return { venue: resolveVenueId(lower), hlDex: null };
88
+ }
89
+ /**
90
+ * Funding basis for a venue ref. HIP-3 dexes use the Hyperliquid core basis
91
+ * (current behavior preserved; see design §10.1 — verify against live data).
92
+ * Throws for venues whose basis is per-market; callers must use the market's value.
93
+ */
94
+ export function fundingBasisOf(ref) {
95
+ const { venue } = parseVenueRef(ref);
96
+ const def = getVenue(venue);
97
+ if (def.fundingRateBasis === "perMarket") {
98
+ throw new PerpError("INVALID_PARAMS", `${def.displayName} funding basis is per-market`, {
99
+ remediation: "Use the market's fundingRateBasis (VenueMarket.fundingRateBasis)",
100
+ });
101
+ }
102
+ return def.fundingRateBasis;
103
+ }
104
+ export function settlementIntervalOf(ref) {
105
+ const { venue } = parseVenueRef(ref);
106
+ const def = getVenue(venue);
107
+ if (def.settlementIntervalHours === "perMarket") {
108
+ throw new PerpError("INVALID_PARAMS", `${def.displayName} settlement interval is per-market`, {
109
+ remediation: "Use the market's settlementIntervalHours (VenueMarket.settlementIntervalHours)",
110
+ });
111
+ }
112
+ return def.settlementIntervalHours;
113
+ }
114
+ /**
115
+ * Refuse a venue whose funding rate is unverified (VenueDefinition.fundingVerified false) as a
116
+ * leg of a funding strategy (arb scan ranking, arb exec / auto, funding bots). Uniform
117
+ * CAPABILITY_UNSUPPORTED (design §13.6, §14.12 #6). Unknown venue refs throw UNKNOWN_VENUE.
118
+ */
119
+ export function assertFundingArbVenue(ref) {
120
+ const def = getVenue(parseVenueRef(ref).venue);
121
+ if (def.fundingVerified)
122
+ return;
123
+ const reason = "its funding rate is unverified (the unit and which published rate settles are not confirmed against funding payments, and annualizing it overstates venues whose funding accrues only part of the week)";
124
+ throw new PerpError("CAPABILITY_UNSUPPORTED", `${def.id} does not support fundingArb — ${reason}`, {
125
+ venue: def.id, feature: "fundingArb", reason,
126
+ remediation: `Use venues with verified funding (${listVenues().filter(v => v.fundingVerified && v.roles.includes("trading")).map(v => v.id).join(", ")}). ${def.displayName} rates can still be viewed: perp arb scan --rates --include-unverified`,
127
+ });
128
+ }
129
+ export function isLegacyVenue(def) {
130
+ return def.id === "pacifica" || def.id === "hyperliquid" || def.id === "lighter" || def.id === "aster";
131
+ }
132
+ export { isVenueId };
@@ -0,0 +1,8 @@
1
+ /**
2
+ * Arcus — perps on the Robinhood chain rootchain, USDG collateral
3
+ * (design §4 Arcus column, §10.4, §10.10).
4
+ * Not registered here; the registry module owns registerVenue().
5
+ * Adapter and public-data code are loaded lazily (§10.10).
6
+ */
7
+ import type { VenueDefinition } from "../venue.js";
8
+ export declare const arcusVenue: VenueDefinition;
@@ -0,0 +1,109 @@
1
+ /**
2
+ * Arcus — perps on the Robinhood chain rootchain, USDG collateral
3
+ * (design §4 Arcus column, §10.4, §10.10).
4
+ * Not registered here; the registry module owns registerVenue().
5
+ * Adapter and public-data code are loaded lazily (§10.10).
6
+ */
7
+ import { BUILDER_FEE_CAPABILITIES } from "../builder-fee.js";
8
+ const publicData = {
9
+ async fetchFundingRates(net) {
10
+ return (await import("../arcus/public.js")).arcusPublicData.fetchFundingRates(net);
11
+ },
12
+ async fetchMarkets(net) {
13
+ return (await import("../arcus/public.js")).arcusPublicData.fetchMarkets(net);
14
+ },
15
+ };
16
+ export const arcusVenue = {
17
+ id: "arcus",
18
+ aliases: [],
19
+ displayName: "Arcus",
20
+ family: "arcus",
21
+ masterKeyKind: "evm",
22
+ agentKeyKind: "ed25519",
23
+ // Ed25519 agent key lives only in OWS wallet `agent-arcus-<master>` (SSOT Rule #3).
24
+ secretStorage: { kind: "ows-wallet", dir: null },
25
+ networks: {
26
+ mainnet: {
27
+ restUrl: "https://api.arcus.xyz",
28
+ wsUrl: "wss://api.arcus.xyz/v1/ws",
29
+ explorerUrl: null,
30
+ signingChainId: 4663,
31
+ settlementChain: "robinhood",
32
+ collateral: ["USDG"],
33
+ collateralAssetIndex: null,
34
+ rpcUrl: "https://rpc.mainnet.chain.robinhood.com", // eth_chainId 0x1237 = 4663 (verified)
35
+ depositPins: null,
36
+ },
37
+ testnet: {
38
+ restUrl: "https://api.testnet.arcus.xyz",
39
+ wsUrl: "wss://api.testnet.arcus.xyz/v1/ws",
40
+ explorerUrl: null,
41
+ signingChainId: 46630,
42
+ settlementChain: "robinhood",
43
+ collateral: ["USDG"],
44
+ collateralAssetIndex: null,
45
+ rpcUrl: "https://rpc.testnet.chain.robinhood.com", // eth_chainId 0xb626 = 46630 (verified)
46
+ depositPins: null,
47
+ },
48
+ },
49
+ fundingRateBasis: { kind: "perHours", hours: 1 },
50
+ settlementIntervalHours: 1,
51
+ fundingVerified: true,
52
+ roles: ["marketData", "account", "trading"],
53
+ capabilities: {
54
+ marketOrder: "slippageBounded",
55
+ // GTC = GTT at goodTil now + 40 days (ARCUS_GOOD_TIL_HORIZON_MS); GTT kept as the venue alias.
56
+ timeInForce: ["GTC", "GTT", "IOC", "FOK", "ALO"],
57
+ reduceOnlyTif: null,
58
+ clientOrderId: true,
59
+ orderAck: "async",
60
+ tpsl: "batchGroup",
61
+ amend: "native",
62
+ batchPlaceMax: 100,
63
+ marginModes: ["cross", "isolated"],
64
+ withdrawAssets: ["USDG"],
65
+ },
66
+ // Per-IP bucket: 1,500 weight, refilling 1,500/min (docs "Rate limits").
67
+ // Weights per the docs' tier table; unlisted endpoints cost 1 (root/time tier).
68
+ // Order writes are 0 on the IP layer (per-subaccount pools govern them).
69
+ rateLimit: {
70
+ capacity: 1500,
71
+ refillPerSec: 25,
72
+ weights: {
73
+ setLeverage: 125, withdraw: 125, transfer: 125,
74
+ placeOrder: 0, modifyOrder: 0, cancelOrder: 0, cancelAllOrders: 0,
75
+ batchPlaceOrders: 0, batchCancelOrders: 0, scheduleCancel: 0,
76
+ account: 2, positions: 2, order: 2, leverages: 2, mids: 2,
77
+ // l2OrderBook = 2 + floor(nLevels / 20); the adapter requests 50 levels (rate-limits doc).
78
+ l2OrderBook: 4,
79
+ markets: 20, prices: 20, trades: 20, candles: 20, openOrders: 20, orders: 20,
80
+ fills: 20, funding: 20, fundingRates: 20, apiKeys: 20, createApiKey: 20, revokeApiKey: 20,
81
+ },
82
+ },
83
+ restrictedRegions: ["US", "CA", "GB"],
84
+ symbolIdentity: "baseTicker",
85
+ publicData,
86
+ // §12: market swaps via router.spot.arcus.xyz, settled on-chain from the master EVM wallet.
87
+ spot: {
88
+ accountModel: "wallet",
89
+ quoteAssets: { mainnet: ["USDG"], testnet: ["USDG"] },
90
+ capabilities: { limitOrder: false, orderbook: false, cancel: false, transfer: false },
91
+ async createSpot(perp, opts) {
92
+ const [{ ArcusAdapter }, { ArcusSpotAdapter }] = await Promise.all([
93
+ import("../arcus/adapter.js"), import("../arcus/spot.js"),
94
+ ]);
95
+ if (!(perp instanceof ArcusAdapter))
96
+ throw new Error(`arcus spot needs an ArcusAdapter (got ${perp.name})`);
97
+ const spot = new ArcusSpotAdapter(perp, { confirmOnchainApprove: opts.confirmOnchainApprove });
98
+ await spot.init();
99
+ return spot;
100
+ },
101
+ },
102
+ // Arcus venue limit per design §13.10 #1.
103
+ maxSlippageBps: 1000,
104
+ builderFee: BUILDER_FEE_CAPABILITIES["arcus"],
105
+ async create(ctx) {
106
+ const { ArcusAdapter } = await import("../arcus/adapter.js");
107
+ return new ArcusAdapter(arcusVenue, ctx);
108
+ },
109
+ };
@@ -0,0 +1,49 @@
1
+ /**
2
+ * Aster venue definition (design §10.1, §10.8, §10.13 #4).
3
+ * Adapter + public-data code are loaded lazily (§10.10).
4
+ */
5
+ import type { VenueDefinition } from "../venue.js";
6
+ /** Aster client order id (V3 futures "New Order" `newClientOrderId` rule). */
7
+ export declare const ASTER_CLIENT_ID_RE: RegExp;
8
+ /** Chains the CLI deposits from / withdraws to (`--chain`). */
9
+ export type AsterFundsChain = "bsc" | "arbitrum";
10
+ export type AsterFundsAsset = "USDT" | "USDC";
11
+ export interface AsterFundsChainPins {
12
+ chainId: number;
13
+ /** Display name. */
14
+ label: string;
15
+ /** `destination Chain` of the EVM withdraw signature (docs "chainName definition"). */
16
+ withdrawChainName: "BSC" | "Arbitrum";
17
+ /** Public JSON-RPC of the chain (no env override). */
18
+ rpcUrl: string;
19
+ /** AstherusVault (ERC-1967 proxy) — the deposit contract. */
20
+ vault: string;
21
+ tokens: Readonly<Record<AsterFundsAsset, string>>;
22
+ sources: readonly string[];
23
+ }
24
+ /**
25
+ * PINNED Aster vault + token addresses (mainnet). A deposit is `approve(vault, exact amount)` then
26
+ * `deposit(address currency, uint256 amount, uint256 broker)` on the vault — never a plain token
27
+ * transfer. Verified 2026-10-05 against:
28
+ * - github.com/asterdex/api-docs demo/aster-deposit-withdrawal.md "Mainnet contract addresses"
29
+ * (BSC 0x1284…7974, Arbitrum 0x9E36…E1d5) and its ethers example (BSC USDT 0x55d3…7955)
30
+ * - docs.asterdex.com/overview/smart-contracts
31
+ * - the verified AstherusVault source on BscScan / Arbiscan (`deposit(address,uint256,uint256)`
32
+ * selector 0x0efe6a8b, `supportToken(address)`, `paused()`, event Deposit)
33
+ * - live `supportToken(token)` non-zero for all four tokens below
34
+ * Token decimals are NOT pinned: they are read on-chain (`decimals()`) before every deposit
35
+ * (BSC USDT / USDC have 18, Arbitrum USDC / USDT have 6).
36
+ */
37
+ export declare const ASTER_FUNDS_CHAINS: Readonly<Record<AsterFundsChain, AsterFundsChainPins>>;
38
+ /** Vault `broker` argument: 1 = perp (futures) account; 1000 = spot account (never used here). */
39
+ export declare const ASTER_DEPOSIT_BROKER_PERP = 1n;
40
+ /**
41
+ * Why deposit / withdraw are mainnet only (uniform CAPABILITY_UNSUPPORTED on testnet): the vault
42
+ * addresses above are mainnet deployments, and the withdraw signature's `aster chain` is the
43
+ * fixed string "Mainnet" (no testnet value is documented).
44
+ */
45
+ export declare const ASTER_FUNDS_TESTNET_UNSUPPORTED: {
46
+ readonly reason: "the pinned vault contracts are mainnet deployments and the withdraw signature is defined for \"Mainnet\" only";
47
+ readonly remediation: "Run without -n testnet; fund the Aster testnet account from the testnet app faucet";
48
+ };
49
+ export declare const asterVenue: VenueDefinition;