@continuumdao/ctm-mpc-defi 0.2.25 → 0.2.26
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/agent/catalog.cjs +400 -8
- package/dist/agent/catalog.cjs.map +1 -1
- package/dist/agent/catalog.d.ts +266 -1
- package/dist/agent/catalog.js +387 -9
- package/dist/agent/catalog.js.map +1 -1
- package/dist/agent/skills/arcus/SKILL.md +4 -0
- package/dist/agent/skills/morpho/SKILL.md +39 -0
- package/dist/agent/skills/venice/SKILL.md +29 -0
- package/dist/protocols/evm/arcus/index.cjs +9 -2
- package/dist/protocols/evm/arcus/index.cjs.map +1 -1
- package/dist/protocols/evm/arcus/index.d.ts +3 -1
- package/dist/protocols/evm/arcus/index.js +9 -3
- package/dist/protocols/evm/arcus/index.js.map +1 -1
- package/dist/protocols/evm/morpho/index.cjs +76 -2
- package/dist/protocols/evm/morpho/index.cjs.map +1 -1
- package/dist/protocols/evm/morpho/index.d.ts +22 -1
- package/dist/protocols/evm/morpho/index.js +68 -3
- package/dist/protocols/evm/morpho/index.js.map +1 -1
- package/dist/protocols/evm/venice/index.cjs +936 -0
- package/dist/protocols/evm/venice/index.cjs.map +1 -0
- package/dist/protocols/evm/venice/index.d.ts +238 -0
- package/dist/protocols/evm/venice/index.js +901 -0
- package/dist/protocols/evm/venice/index.js.map +1 -0
- package/package.json +6 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../src/protocols/evm/arcus/support.ts","../../../../src/protocols/evm/arcus/constants.ts","../../../../src/protocols/evm/arcus/api.ts","../../../../src/core/registry.ts","../../../../src/protocols/evm/arcus/index.ts","../../../../src/protocols/evm/arcus/markets.ts","../../../../src/protocols/evm/arcus/reads.ts","../../../../src/protocols/evm/arcus/orderSigning.ts","../../../../src/core/purpose.ts","../../../../src/core/envelope.ts","../../../../src/core/payloadSignEd25519Multisign.ts","../../../../src/protocols/evm/arcus/multisign.ts","../../../../src/protocols/evm/arcus/keygenPair.ts","../../../../src/protocols/evm/arcus/pendingClose.ts","../../../../src/protocols/evm/arcus/positionDisplay.ts","../../../../src/protocols/evm/arcus/spotMultisign.ts","../../../../src/protocols/evm/arcus/bridgeConstants.ts","../../../../src/protocols/evm/arcus/fundSigning.ts","../../../../src/chains/evm/routerSwapGas.ts","../../../../src/chains/evm/buildBatch.ts","../../../../src/core/eip712Multisign.ts","../../../../src/protocols/evm/arcus/fundMultisign.ts","../../../../src/protocols/evm/arcus/registration.ts"],"names":["ARCUS_SUPPORTED_CHAIN_IDS","ARCUS_PROTOCOL_ID","ARCUS_DEFAULT_OHLCV_INTERVAL","ARCUS_DEFAULT_LOOKBACK_DAYS","ARCUS_MAX_CANDLE_COUNT","ARCUS_DEFAULT_CANDLE_COUNT","ARCUS_PERP_OHLCV_INTERVALS","ARCUS_SPOT_OHLCV_INTERVALS","ARCUS_PERP_INTERVAL_MS","ARCUS_SPOT_INTERVAL_SEC","ARCUS_USDG_ADDRESS_4663","arcusSpotIndexerBaseUrl","arcusFetchPerpMarkets","getAddress","createPublicClient","http","erc20Abi","createHash","getClientIdFromKeyGenResult","stringToHex","hashMessage","ZERO_ADDRESS","gasLimitFromEstimateAndChainConfig","defineChain","fetchChainFeeParams","parseGwei","gweiToDecimalString","serializeTransaction","proposalTxParamsToFeeSnapshot","alignEip1559FeesWithLatestBase","keccak256","hashTypedData","parseAbi","encodeFunctionData"],"mappings":"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","file":"index.cjs","sourcesContent":["/** Robinhood Chain — Arcus perps + spot Stock Tokens. */\nexport const ARCUS_SUPPORTED_CHAIN_IDS = [4663] as const\n\nexport type ArcusSupportedChainId = (typeof ARCUS_SUPPORTED_CHAIN_IDS)[number]\n\nexport function isArcusChainSupported(chainId: number): chainId is ArcusSupportedChainId {\n return (ARCUS_SUPPORTED_CHAIN_IDS as readonly number[]).includes(chainId)\n}\n\nexport function arcusPerpApiBaseUrl(_chainId: number): string {\n return 'https://api.arcus.xyz'\n}\n\nexport function arcusSpotIndexerBaseUrl(_chainId: number): string {\n return 'https://indexer.spot.arcus.xyz'\n}\n\nexport function arcusApiMetaBaseUrl(_chainId: number): string {\n return 'https://api.arcus.xyz/v1/api-meta'\n}\n","export const ARCUS_PROTOCOL_ID = 'arcus' as const\n\nexport const ARCUS_DEFAULT_OHLCV_INTERVAL = '1h' as const\nexport const ARCUS_DEFAULT_LOOKBACK_DAYS = 14\nexport const ARCUS_MAX_CANDLE_COUNT = 1500\nexport const ARCUS_DEFAULT_CANDLE_COUNT = 200\n\nexport const ARCUS_PERP_OHLCV_INTERVALS = [\n '1m',\n '3m',\n '5m',\n '15m',\n '30m',\n '1h',\n '2h',\n '4h',\n '8h',\n '12h',\n '1d',\n '3d',\n '1w',\n] as const\n\nexport type ArcusPerpOhlcvInterval = (typeof ARCUS_PERP_OHLCV_INTERVALS)[number]\n\nexport const ARCUS_SPOT_OHLCV_INTERVALS = ['1m', '5m', '15m', '1h', '1d'] as const\n\nexport type ArcusSpotOhlcvInterval = (typeof ARCUS_SPOT_OHLCV_INTERVALS)[number]\n\nexport const ARCUS_PERP_INTERVAL_MS: Record<ArcusPerpOhlcvInterval, number> = {\n '1m': 60_000,\n '3m': 180_000,\n '5m': 300_000,\n '15m': 900_000,\n '30m': 1_800_000,\n '1h': 3_600_000,\n '2h': 7_200_000,\n '4h': 14_400_000,\n '8h': 28_800_000,\n '12h': 43_200_000,\n '1d': 86_400_000,\n '3d': 259_200_000,\n '1w': 604_800_000,\n}\n\nexport const ARCUS_SPOT_INTERVAL_SEC: Record<ArcusSpotOhlcvInterval, number> = {\n '1m': 60,\n '5m': 300,\n '15m': 900,\n '1h': 3600,\n '1d': 86_400,\n}\n\n/** Arcus collateral on Robinhood Chain (USDG). */\nexport const ARCUS_USDG_ADDRESS_4663 = '0x5fc5360D0400a0Fd4f2af552ADD042D716F1d168' as const\n","import type { ArcusPerpMarket, ArcusOhlcvCandle, ArcusSpotToken, ArcusLeverageEntry } from './types.js'\nimport {\n ARCUS_DEFAULT_CANDLE_COUNT,\n ARCUS_DEFAULT_OHLCV_INTERVAL,\n ARCUS_MAX_CANDLE_COUNT,\n ARCUS_PERP_INTERVAL_MS,\n type ArcusPerpOhlcvInterval,\n} from './constants.js'\nimport { arcusApiMetaBaseUrl, arcusPerpApiBaseUrl } from './support.js'\n\ntype ArcusRawCandle = {\n marketDisplayName?: string\n marketId?: number\n timeframe?: string\n openTime: number\n open: string\n high: string\n low: string\n close: string\n volume?: string\n isFinal?: boolean\n}\n\nasync function arcusJsonGet<T>(url: string): Promise<T> {\n const res = await fetch(url, { headers: { Accept: 'application/json' } })\n const text = await res.text()\n let body: unknown = null\n if (text.trim()) {\n try {\n body = JSON.parse(text)\n } catch {\n throw new Error(`Arcus API returned non-JSON (${res.status}): ${text.slice(0, 200)}`)\n }\n }\n if (!res.ok) {\n const err =\n body && typeof body === 'object' && body !== null && 'error' in body\n ? String((body as { error?: unknown }).error)\n : text.slice(0, 200)\n throw new Error(`Arcus API ${res.status}: ${err}`)\n }\n return body as T\n}\n\nexport function arcusMapPerpCandles(raw: ArcusRawCandle[] | null | undefined): ArcusOhlcvCandle[] {\n return (raw ?? []).map((c) => ({\n timestampMs: Math.floor(c.openTime / 1000),\n open: c.open,\n high: c.high,\n low: c.low,\n close: c.close,\n volume: c.volume ?? '0',\n ...(c.isFinal != null ? { isFinal: c.isFinal } : {}),\n }))\n}\n\nexport async function arcusFetchPerpMarkets(args: { chainId: number }): Promise<{ markets: ArcusPerpMarket[] }> {\n const base = arcusPerpApiBaseUrl(args.chainId)\n const data = await arcusJsonGet<{ markets?: ArcusPerpMarket[] }>(`${base}/v1/markets`)\n return { markets: data.markets ?? [] }\n}\n\nexport async function arcusFetchPerpCandles(args: {\n chainId: number\n market: string\n timeframe: ArcusPerpOhlcvInterval\n toMicros?: number\n fromMicros?: number\n countback?: number\n}): Promise<{ candles: ArcusOhlcvCandle[] }> {\n const base = arcusPerpApiBaseUrl(args.chainId)\n const toMicros = args.toMicros ?? Date.now() * 1000\n const countback = Math.min(args.countback ?? ARCUS_DEFAULT_CANDLE_COUNT, ARCUS_MAX_CANDLE_COUNT)\n const params = new URLSearchParams({\n market: args.market.trim(),\n timeframe: args.timeframe,\n to: String(toMicros),\n countback: String(countback),\n })\n if (args.fromMicros != null) {\n params.delete('countback')\n params.set('from', String(args.fromMicros))\n }\n const data = await arcusJsonGet<{ candles?: ArcusRawCandle[] }>(`${base}/v1/candles?${params}`)\n return { candles: arcusMapPerpCandles(data.candles) }\n}\n\nexport function arcusResolvePerpOhlcvWindow(args: {\n interval: ArcusPerpOhlcvInterval\n lookbackDays?: number\n lookbackHours?: number\n startTimeMs?: number\n endTimeMs?: number\n candleCount?: number\n}): { startTimeMs: number; endTimeMs: number; countback: number } {\n const endTimeMs = args.endTimeMs ?? Date.now()\n const intervalMs = ARCUS_PERP_INTERVAL_MS[args.interval] ?? ARCUS_PERP_INTERVAL_MS['15m']\n let startTimeMs: number\n if (args.startTimeMs != null) {\n startTimeMs = args.startTimeMs\n } else if (args.lookbackHours != null && args.lookbackHours > 0) {\n startTimeMs = endTimeMs - args.lookbackHours * 3_600_000\n } else {\n const days = args.lookbackDays ?? 14\n startTimeMs = endTimeMs - days * 86_400_000\n }\n const spanBars = Math.ceil((endTimeMs - startTimeMs) / intervalMs) + 1\n const countback = Math.min(\n args.candleCount ?? spanBars,\n ARCUS_MAX_CANDLE_COUNT,\n )\n return { startTimeMs, endTimeMs, countback }\n}\n\nexport async function arcusFetchPerpOhlcvRange(args: {\n chainId: number\n market: string\n interval?: ArcusPerpOhlcvInterval\n lookbackDays?: number\n lookbackHours?: number\n startTimeMs?: number\n endTimeMs?: number\n candleCount?: number\n}) {\n const interval = args.interval ?? ARCUS_DEFAULT_OHLCV_INTERVAL\n const window = arcusResolvePerpOhlcvWindow({ ...args, interval })\n const { candles } = await arcusFetchPerpCandles({\n chainId: args.chainId,\n market: args.market,\n timeframe: interval,\n toMicros: window.endTimeMs * 1000,\n fromMicros: args.startTimeMs != null ? window.startTimeMs * 1000 : undefined,\n countback: window.countback,\n })\n const sorted = [...candles].sort((a, b) => a.timestampMs - b.timestampMs)\n return {\n market: args.market.trim(),\n interval,\n marketKind: 'perp' as const,\n startTimeMs: sorted[0]?.timestampMs ?? window.startTimeMs,\n endTimeMs: sorted[sorted.length - 1]?.timestampMs ?? window.endTimeMs,\n expectedBars: window.countback,\n candleCount: sorted.length,\n latestCandle: sorted[sorted.length - 1] ?? null,\n candles: sorted,\n fetchedAtMs: Date.now(),\n dataSource: 'arcus' as const,\n }\n}\n\nexport async function arcusFetchAccountLeverages(args: {\n chainId: number\n address: string\n accountIndex?: number\n}): Promise<{ leverages: ArcusLeverageEntry[] }> {\n const base = arcusPerpApiBaseUrl(args.chainId)\n const params = new URLSearchParams({ address: args.address.trim() })\n if (args.accountIndex != null) {\n params.set('accountIndex', String(args.accountIndex))\n }\n const data = await arcusJsonGet<{ leverages?: ArcusLeverageEntry[] }>(`${base}/v1/leverages?${params}`)\n return { leverages: data.leverages ?? [] }\n}\n\nexport async function arcusFetchAllMids(args: { chainId: number }): Promise<Record<string, string>> {\n const base = arcusPerpApiBaseUrl(args.chainId)\n const data = await arcusJsonGet<Record<string, string>>(`${base}/v1/mids`)\n return data ?? {}\n}\n\nexport async function arcusFetchAccount(args: { chainId: number; address: string }) {\n const base = arcusPerpApiBaseUrl(args.chainId)\n const params = new URLSearchParams({ address: args.address.trim() })\n return arcusJsonGet<Record<string, unknown>>(`${base}/v1/account?${params}`)\n}\n\nexport async function arcusFetchPositions(args: { chainId: number; address: string }) {\n const base = arcusPerpApiBaseUrl(args.chainId)\n const params = new URLSearchParams({ address: args.address.trim() })\n return arcusJsonGet<{ positions?: unknown[] }>(`${base}/v1/positions?${params}`)\n}\n\nexport async function arcusFetchOpenOrders(args: { chainId: number; address: string }) {\n const base = arcusPerpApiBaseUrl(args.chainId)\n const params = new URLSearchParams({ address: args.address.trim() })\n return arcusJsonGet<{ orders?: unknown[] }>(`${base}/v1/openOrders?${params}`)\n}\n\nexport async function arcusFetchApiKeys(args: { chainId: number; address: string }) {\n const base = arcusPerpApiBaseUrl(args.chainId)\n const params = new URLSearchParams({ address: args.address.trim() })\n return arcusJsonGet<{ apiKeys?: unknown[] }>(`${base}/v1/getApiKeys?${params}`)\n}\n\nexport async function arcusFetchSpotOverview(args: { chainId: number }): Promise<{ tokens: ArcusSpotToken[] }> {\n const base = arcusApiMetaBaseUrl(args.chainId)\n const data = await arcusJsonGet<ArcusSpotToken[]>(`${base}/spot/overview`)\n return { tokens: Array.isArray(data) ? data : [] }\n}\n\ntype ArcusSpotRawCandle = {\n t: number\n o: number\n h: number\n l: number\n c: number\n volume?: number\n}\n\nexport function arcusMapSpotCandles(raw: ArcusSpotRawCandle[] | null | undefined): ArcusOhlcvCandle[] {\n return (raw ?? []).map((c) => ({\n timestampMs: c.t * 1000,\n open: String(c.o),\n high: String(c.h),\n low: String(c.l),\n close: String(c.c),\n volume: c.volume != null ? String(c.volume) : '0',\n }))\n}\n\nexport async function arcusFetchSpotTokenCandles(args: {\n chainId: number\n tokenAddress: string\n resolution?: string\n fromSec?: number\n toSec?: number\n limit?: number\n}): Promise<{ candles: ArcusOhlcvCandle[]; ticker?: string; tokenAddress: string }> {\n const { arcusSpotIndexerBaseUrl } = await import('./support.js')\n const base = arcusSpotIndexerBaseUrl(args.chainId)\n const addr = args.tokenAddress.trim()\n const params = new URLSearchParams({\n resolution: args.resolution ?? '1h',\n networkId: String(args.chainId),\n })\n if (args.fromSec != null) params.set('from', String(args.fromSec))\n if (args.toSec != null) params.set('to', String(args.toSec))\n if (args.limit != null) {\n const toSec = args.toSec ?? Math.floor(Date.now() / 1000)\n const resSec = ({ '1m': 60, '5m': 300, '15m': 900, '1h': 3600, '1d': 86400 } as Record<string, number>)[\n args.resolution ?? '1h'\n ] ?? 3600\n params.set('from', String(toSec - args.limit * resSec))\n params.set('to', String(toSec))\n }\n const data = await arcusJsonGet<{\n address?: string\n candles?: ArcusSpotRawCandle[]\n }>(`${base}/token-candles/${addr}?${params}`)\n const candles = arcusMapSpotCandles(data.candles)\n return {\n tokenAddress: data.address ?? addr,\n candles: [...candles].sort((a, b) => a.timestampMs - b.timestampMs),\n }\n}\n\nexport async function arcusFetchSpotOhlcvRange(args: {\n chainId: number\n tokenAddress?: string\n ticker?: string\n interval?: string\n lookbackDays?: number\n candleCount?: number\n}) {\n let tokenAddress = args.tokenAddress?.trim()\n let ticker = args.ticker?.trim()\n if (!tokenAddress) {\n const { tokens } = await arcusFetchSpotOverview({ chainId: args.chainId })\n const match = tokens.find(\n (t) =>\n (ticker && t.ticker.toUpperCase() === ticker.toUpperCase()) ||\n (tokenAddress && t.contractAddress.toLowerCase() === tokenAddress.toLowerCase()),\n )\n if (!match) throw new Error(`Arcus spot token not found for ${ticker ?? tokenAddress ?? 'unknown'}.`)\n tokenAddress = match.contractAddress\n ticker = match.ticker\n }\n const interval = args.interval ?? '1h'\n const lookbackDays = args.lookbackDays ?? 14\n const toSec = Math.floor(Date.now() / 1000)\n const fromSec = toSec - lookbackDays * 86_400\n const { candles, tokenAddress: resolved } = await arcusFetchSpotTokenCandles({\n chainId: args.chainId,\n tokenAddress: tokenAddress!,\n resolution: interval,\n fromSec,\n toSec,\n limit: args.candleCount,\n })\n return {\n market: ticker ?? resolved,\n tokenAddress: resolved,\n interval,\n marketKind: 'spot' as const,\n startTimeMs: candles[0]?.timestampMs ?? fromSec * 1000,\n endTimeMs: candles[candles.length - 1]?.timestampMs ?? toSec * 1000,\n candleCount: candles.length,\n latestCandle: candles[candles.length - 1] ?? null,\n candles,\n fetchedAtMs: Date.now(),\n dataSource: 'arcus' as const,\n }\n}\n","import type { ProtocolModule } from './types.js'\n\nconst modules: ProtocolModule[] = []\n\nexport function registerProtocolModule(mod: ProtocolModule): void {\n const existing = modules.findIndex((m) => m.id === mod.id)\n if (existing >= 0) {\n modules[existing] = mod\n } else {\n modules.push(mod)\n }\n}\n\nexport function getProtocolModules(): readonly ProtocolModule[] {\n return modules\n}\n\nexport function getProtocolModule(id: string): ProtocolModule | undefined {\n return modules.find((m) => m.id === id)\n}\n\nexport function getActionsByChainCategory(category: string): ProtocolModule['actions'] {\n return modules.filter((m) => m.chainCategory === category).flatMap((m) => m.actions)\n}\n","import type { ProtocolModule } from '../../../core/types.js'\nimport { registerProtocolModule } from '../../../core/registry.js'\nimport { isArcusChainSupported } from './support.js'\n\nexport * from './support.js'\nexport * from './constants.js'\nexport * from './types.js'\nexport * from './api.js'\nexport * from './markets.js'\nexport * from './reads.js'\nexport * from './orderSigning.js'\nexport * from './multisign.js'\nexport * from './pendingClose.js'\nexport * from './positionDisplay.js'\nexport * from './spotMultisign.js'\nexport * from './bridgeConstants.js'\nexport * from './fundSigning.js'\nexport * from './fundMultisign.js'\nexport * from './registration.js'\n\nimport { ARCUS_PROTOCOL_ID } from './constants.js'\n\nexport const arcusProtocolModule: ProtocolModule = {\n id: ARCUS_PROTOCOL_ID,\n chainCategory: 'evm',\n isChainSupported(ctx) {\n if (ctx.chainCategory !== 'evm') return false\n const chainId = typeof ctx.chainId === 'number' ? ctx.chainId : Number(ctx.chainId)\n return Number.isFinite(chainId) && isArcusChainSupported(chainId)\n },\n isTokenSupported(token) {\n if (token.category !== 'evm') return false\n return token.kind === 'erc20' || token.kind === 'native'\n },\n actions: [\n {\n id: 'arcus.createApiKey',\n protocolId: ARCUS_PROTOCOL_ID,\n chainCategory: 'evm',\n description: 'Register Arcus Ed25519 API key (secp256k1 personal_sign + paired ed25519 KeyGen)',\n commonParams: ['keyGen', 'purposeText'],\n params: {\n secp256k1KeyGenId: { type: 'string', required: true, description: 'Custody secp256k1 KeyGen id' },\n ed25519KeyGenId: { type: 'string', required: true, description: 'Paired ed25519 KeyGen id (same GroupId)' },\n apiWalletName: { type: 'string', required: false, description: 'Label for the API key' },\n },\n },\n {\n id: 'arcus.placeOrder',\n protocolId: ARCUS_PROTOCOL_ID,\n chainCategory: 'evm',\n description: 'Place Arcus perp order with optional TP/SL (Ed25519 payload sign)',\n commonParams: ['keyGen', 'purposeText'],\n params: {\n secp256k1KeyGenId: { type: 'string', required: true, description: 'Custody secp256k1 KeyGen id' },\n ed25519KeyGenId: { type: 'string', required: true, description: 'Paired ed25519 KeyGen id' },\n market: { type: 'string', required: true, description: 'e.g. BTC-USD' },\n isBuy: { type: 'boolean', required: true, description: 'true for buy/long' },\n limitPxHuman: { type: 'string', required: true, description: 'Entry limit price' },\n szHuman: { type: 'string', required: true, description: 'Order size' },\n takeProfitTriggerPxHuman: { type: 'string', required: false, description: 'Optional TP trigger' },\n stopLossTriggerPxHuman: { type: 'string', required: false, description: 'Optional SL trigger' },\n },\n },\n {\n id: 'arcus.spotRfq',\n protocolId: ARCUS_PROTOCOL_ID,\n chainCategory: 'evm',\n description: 'Arcus spot Stock Token RFQ buy/sell',\n commonParams: ['keyGen', 'purposeText'],\n params: {\n secp256k1KeyGenId: { type: 'string', required: true, description: 'Custody secp256k1 KeyGen id' },\n ed25519KeyGenId: { type: 'string', required: true, description: 'Paired ed25519 KeyGen id' },\n ticker: { type: 'string', required: true, description: 'Spot ticker e.g. AAPL' },\n isBuy: { type: 'boolean', required: true, description: 'true for buy' },\n sizeHuman: { type: 'string', required: true, description: 'Token size' },\n limitPxHuman: { type: 'string', required: false, description: 'Optional limit price' },\n },\n },\n {\n id: 'arcus.close',\n protocolId: ARCUS_PROTOCOL_ID,\n chainCategory: 'evm',\n description: 'Close Arcus perp position with IoC reduce-only limit order',\n commonParams: ['keyGen', 'purposeText'],\n params: {\n secp256k1KeyGenId: { type: 'string', required: true, description: 'Custody secp256k1 KeyGen id' },\n ed25519KeyGenId: { type: 'string', required: true, description: 'Paired ed25519 KeyGen id' },\n market: { type: 'string', required: true, description: 'Perp market' },\n isLong: { type: 'boolean', required: true, description: 'true when closing a long position' },\n limitPxHuman: { type: 'string', required: true, description: 'Limit price for IoC close' },\n szHuman: { type: 'string', required: true, description: 'Size to close' },\n },\n },\n {\n id: 'arcus.cancelOrder',\n protocolId: ARCUS_PROTOCOL_ID,\n chainCategory: 'evm',\n description: 'Cancel Arcus perp order',\n commonParams: ['keyGen', 'purposeText'],\n params: {\n secp256k1KeyGenId: { type: 'string', required: true, description: 'Custody secp256k1 KeyGen id' },\n ed25519KeyGenId: { type: 'string', required: true, description: 'Paired ed25519 KeyGen id' },\n market: { type: 'string', required: true, description: 'Perp market' },\n orderId: { type: 'string', required: true, description: 'Server order id' },\n },\n },\n {\n id: 'arcus.setLeverage',\n protocolId: ARCUS_PROTOCOL_ID,\n chainCategory: 'evm',\n description: 'Set Arcus perp leverage for a market',\n commonParams: ['keyGen', 'purposeText'],\n params: {\n secp256k1KeyGenId: { type: 'string', required: true, description: 'Custody secp256k1 KeyGen id' },\n ed25519KeyGenId: { type: 'string', required: true, description: 'Paired ed25519 KeyGen id' },\n market: { type: 'string', required: true, description: 'Perp market' },\n leverage: { type: 'number', required: true, description: 'Target leverage' },\n },\n },\n {\n id: 'arcus.deposit',\n protocolId: ARCUS_PROTOCOL_ID,\n chainCategory: 'evm',\n description: 'Deposit USDG on Robinhood Chain into Arcus perp or spot collateral (approve + initiateDeposit). Requires registered API key.',\n commonParams: ['keyGen', 'purposeText', 'useCustomGas'],\n params: {\n usdHuman: { type: 'string', required: true, description: 'USD amount to deposit' },\n product: { type: 'string', required: false, description: 'perp (default) or spot' },\n },\n },\n {\n id: 'arcus.withdraw',\n protocolId: ARCUS_PROTOCOL_ID,\n chainCategory: 'evm',\n description: 'Withdraw USDG collateral from Arcus to wallet (EIP-712 + POST /v1/withdraw)',\n commonParams: ['keyGen', 'purposeText'],\n params: {\n usdHuman: { type: 'string', required: true, description: 'USD amount to withdraw' },\n product: { type: 'string', required: false, description: 'perp (default) or spot' },\n },\n },\n ],\n}\n\nregisterProtocolModule(arcusProtocolModule)\n","import { createPublicClient, erc20Abi, getAddress, http, type Address } from 'viem'\nimport { arcusFetchSpotOverview } from './api.js'\n\nexport const ARCUS_PERP_MARKET_STATUS_ONLINE = 'ONLINE'\n\nexport function arcusIsPerpMarketOnline(status: string | undefined): boolean {\n return String(status ?? '').trim().toUpperCase() === ARCUS_PERP_MARKET_STATUS_ONLINE\n}\n\nexport function arcusAssertPerpMarketOnline(market: { marketDisplayName: string; status: string }): void {\n if (!arcusIsPerpMarketOnline(market.status)) {\n const label = market.status.trim() || 'not ONLINE'\n throw new Error(`Arcus perp market ${market.marketDisplayName} is ${label} and cannot be used for new orders.`)\n }\n}\n\nconst ROBINHOOD_CHAIN = {\n id: 4663,\n name: 'Robinhood Chain',\n nativeCurrency: { name: 'Ether', symbol: 'ETH', decimals: 18 },\n rpcUrls: { default: { http: ['https://rpc.mainnet.chain.robinhood.com'] } },\n} as const\n\nexport function arcusMaxLeverageFromInitialMarginFraction(initialMarginFraction: string | undefined): number | null {\n const imf = Number(initialMarginFraction)\n if (!Number.isFinite(imf) || imf <= 0) return null\n return Math.max(1, Math.floor(1 / imf))\n}\n\nexport function formatArcusLeverageLabel(leverage: number | null | undefined): string | null {\n if (leverage == null || !Number.isFinite(leverage) || leverage <= 0) return null\n return `${Math.round(leverage)}x cross`\n}\n\nexport function parseArcusLeverageLabel(label: string | null | undefined): number | null {\n const match = String(label ?? '').match(/(\\d+(?:\\.\\d+)?)/)\n if (!match) return null\n const n = Number(match[1])\n return Number.isFinite(n) && n > 0 ? n : null\n}\n\nexport function arcusResolveEffectiveLeverage(args: {\n marketDisplayName: string\n leverages: Array<{ marketDisplayName: string; marketId: number; leverage: number }>\n markets: Array<{ marketDisplayName: string; marketId: number; initialMarginFraction?: string }>\n}): { leverage: number | null; leverageLabel: string | null; maxLeverage: number | null } {\n const entry = args.leverages.find((l) => l.marketDisplayName === args.marketDisplayName)\n const marketRow = args.markets.find((m) => m.marketDisplayName === args.marketDisplayName)\n const leverage = entry?.leverage ?? null\n return {\n leverage,\n leverageLabel: formatArcusLeverageLabel(leverage),\n maxLeverage: arcusMaxLeverageFromInitialMarginFraction(marketRow?.initialMarginFraction),\n }\n}\n\nexport async function arcusSearchPerpMarkets(args: {\n chainId: number\n query: string\n limit?: number\n}) {\n const { arcusFetchPerpMarkets } = await import('./api.js')\n const q = args.query.trim().toUpperCase()\n const { markets } = await arcusFetchPerpMarkets({ chainId: args.chainId })\n const filtered = markets.filter(\n (m) =>\n m.marketDisplayName.toUpperCase().includes(q) ||\n m.baseAsset.toUpperCase().includes(q) ||\n String(m.marketId) === q,\n )\n const limit = args.limit ?? 20\n return { markets: filtered.slice(0, limit), query: args.query }\n}\n\nexport async function arcusSearchSpotMarkets(args: {\n chainId: number\n query: string\n limit?: number\n}) {\n const q = args.query.trim().toUpperCase()\n const { tokens } = await arcusFetchSpotOverview({ chainId: args.chainId })\n const filtered = tokens.filter(\n (t) =>\n t.ticker.toUpperCase().includes(q) ||\n t.name.toUpperCase().includes(q) ||\n t.contractAddress.toLowerCase().includes(q.toLowerCase()),\n )\n const limit = args.limit ?? 20\n return { tokens: filtered.slice(0, limit), query: args.query }\n}\n\nexport async function arcusFetchSpotBalances(args: { chainId: number; executorAddress: string }) {\n const executor = getAddress(args.executorAddress)\n const { tokens } = await arcusFetchSpotOverview({ chainId: args.chainId })\n const client = createPublicClient({\n chain: ROBINHOOD_CHAIN,\n transport: http(ROBINHOOD_CHAIN.rpcUrls.default.http[0]),\n })\n const holdings: Array<{\n ticker: string\n contractAddress: string\n name: string\n balanceHuman: string\n decimals: number\n }> = []\n for (const token of tokens) {\n let addr: Address\n try {\n addr = getAddress(token.contractAddress)\n } catch {\n continue\n }\n try {\n const [balance, decimals] = await Promise.all([\n client.readContract({ address: addr, abi: erc20Abi, functionName: 'balanceOf', args: [executor] }),\n client.readContract({ address: addr, abi: erc20Abi, functionName: 'decimals' }),\n ])\n if (balance > 0n) {\n const dec = Number(decimals)\n const human = Number(balance) / 10 ** dec\n holdings.push({\n ticker: token.ticker,\n contractAddress: addr,\n name: token.name,\n balanceHuman: human.toString(),\n decimals: dec,\n })\n }\n } catch {\n // skip unreadable tokens\n }\n }\n return { holdings, executorAddress: executor }\n}\n\nexport function arcusResolvePerpMarketDisplayName(\n markets: Array<{ marketDisplayName: string; baseAsset: string }>,\n query: string,\n): string | null {\n const q = query.trim().toUpperCase()\n if (!q) return null\n const exact = markets.find((m) => m.marketDisplayName.toUpperCase() === q)\n if (exact) return exact.marketDisplayName\n const base = markets.find((m) => m.baseAsset.toUpperCase() === q)\n if (base) return base.marketDisplayName\n const partial = markets.find((m) => m.marketDisplayName.toUpperCase().includes(q))\n return partial?.marketDisplayName ?? null\n}\n","import {\n arcusFetchAccount,\n arcusFetchAccountLeverages,\n arcusFetchAllMids,\n arcusFetchApiKeys,\n arcusFetchOpenOrders,\n arcusFetchPerpMarkets,\n arcusFetchPerpOhlcvRange,\n arcusFetchPositions,\n arcusFetchSpotOhlcvRange,\n arcusFetchSpotOverview,\n} from './api.js'\nimport {\n arcusFetchSpotBalances,\n arcusIsPerpMarketOnline,\n arcusMaxLeverageFromInitialMarginFraction,\n arcusResolveEffectiveLeverage,\n arcusResolvePerpMarketDisplayName,\n arcusSearchPerpMarkets,\n arcusSearchSpotMarkets,\n} from './markets.js'\nimport { ARCUS_DEFAULT_OHLCV_INTERVAL, type ArcusPerpOhlcvInterval } from './constants.js'\n\nfunction wrapOhlcvEnvelope(ohlcv: Record<string, unknown>) {\n return {\n ohlcv,\n dataSource: 'arcus',\n chainId: 4663,\n }\n}\n\nexport async function arcusFetchMarketsSummary(args: { chainId: number }) {\n const { markets } = await arcusFetchPerpMarkets(args)\n return {\n markets: markets.map((m) => ({\n marketDisplayName: m.marketDisplayName,\n marketId: m.marketId,\n baseAsset: m.baseAsset,\n category: m.category,\n status: m.status,\n isOnline: arcusIsPerpMarketOnline(m.status),\n maxLeverage: arcusMaxLeverageFromInitialMarginFraction(m.initialMarginFraction),\n markPrice: m.markPrice ?? null,\n })),\n marketKind: 'perp' as const,\n }\n}\n\nexport async function arcusSearchMarketsSummary(args: { chainId: number; query: string; limit?: number }) {\n return arcusSearchPerpMarkets(args)\n}\n\nexport async function arcusSpotFetchMarketsSummary(args: { chainId: number }) {\n const { tokens } = await arcusFetchSpotOverview(args)\n return {\n tokens: tokens.map((t) => ({\n ticker: t.ticker,\n contractAddress: t.contractAddress,\n name: t.name,\n logoUrl: t.logoUrl ?? null,\n price: t.quote?.price ?? null,\n })),\n marketKind: 'spot' as const,\n }\n}\n\nexport async function arcusSpotSearchMarketsSummary(args: { chainId: number; query: string; limit?: number }) {\n return arcusSearchSpotMarkets(args)\n}\n\nexport async function arcusFetchOhlcvSummary(args: {\n chainId: number\n market?: string\n coin?: string\n interval?: ArcusPerpOhlcvInterval\n lookbackDays?: number\n lookbackHours?: number\n startTimeMs?: number\n endTimeMs?: number\n candleCount?: number\n}) {\n const { markets } = await arcusFetchPerpMarkets({ chainId: args.chainId })\n const rawMarket = (args.market ?? args.coin ?? '').trim()\n const resolved =\n arcusResolvePerpMarketDisplayName(markets, rawMarket) ??\n (rawMarket.includes('-') ? rawMarket : rawMarket ? `${rawMarket.toUpperCase()}-USD` : '')\n if (!resolved) throw new Error('Arcus perp market is required (market or coin).')\n const ohlcv = await arcusFetchPerpOhlcvRange({ ...args, market: resolved })\n return {\n ...wrapOhlcvEnvelope(ohlcv),\n resolvedMarket: resolved,\n }\n}\n\nexport async function arcusSpotFetchOhlcvSummary(args: {\n chainId: number\n tokenAddress?: string\n ticker?: string\n currencySymbol?: string\n interval?: string\n lookbackDays?: number\n candleCount?: number\n}) {\n const ticker = args.ticker ?? args.currencySymbol\n const ohlcv = await arcusFetchSpotOhlcvRange({\n chainId: args.chainId,\n tokenAddress: args.tokenAddress,\n ticker,\n interval: args.interval,\n lookbackDays: args.lookbackDays,\n candleCount: args.candleCount,\n })\n return wrapOhlcvEnvelope(ohlcv)\n}\n\nexport async function arcusFetchMarketSnapshotSummary(args: {\n chainId: number\n market?: string\n coin?: string\n interval?: ArcusPerpOhlcvInterval\n candleLimit?: number\n}) {\n const { markets } = await arcusFetchPerpMarkets({ chainId: args.chainId })\n const rawMarket = (args.market ?? args.coin ?? '').trim()\n const resolved =\n arcusResolvePerpMarketDisplayName(markets, rawMarket) ??\n (rawMarket.includes('-') ? rawMarket : `${rawMarket.toUpperCase()}-USD`)\n const mids = await arcusFetchAllMids({ chainId: args.chainId })\n const mid = mids[resolved] ?? mids[resolved.replace('-USD', '')] ?? ''\n const ohlcv = await arcusFetchPerpOhlcvRange({\n chainId: args.chainId,\n market: resolved,\n interval: args.interval ?? ARCUS_DEFAULT_OHLCV_INTERVAL,\n candleCount: args.candleLimit ?? 48,\n })\n return {\n snapshot: {\n market: resolved,\n midUsd: mid,\n interval: ohlcv.interval,\n latestCandle: ohlcv.latestCandle,\n candles: ohlcv.candles,\n candleCount: ohlcv.candleCount,\n fetchedAtMs: Date.now(),\n },\n resolvedMarket: resolved,\n }\n}\n\nfunction withAddress<T extends { executorAddress: string }>(args: T) {\n return { ...args, address: args.executorAddress }\n}\n\nexport async function arcusFetchAccountSummary(args: { chainId: number; executorAddress: string }) {\n const account = await arcusFetchAccount(withAddress(args))\n return { account, executorAddress: args.executorAddress }\n}\n\nexport async function arcusFetchPositionsSummary(args: { chainId: number; executorAddress: string }) {\n const data = await arcusFetchPositions(withAddress(args))\n return { positions: data.positions ?? [], executorAddress: args.executorAddress }\n}\n\nexport async function arcusFetchOpenOrdersSummary(args: { chainId: number; executorAddress: string }) {\n const data = await arcusFetchOpenOrders(withAddress(args))\n return { orders: data.orders ?? [], executorAddress: args.executorAddress }\n}\n\nexport async function arcusFetchLeveragesSummary(args: {\n chainId: number\n executorAddress: string\n accountIndex?: number\n}) {\n const { leverages } = await arcusFetchAccountLeverages({\n chainId: args.chainId,\n address: args.executorAddress,\n accountIndex: args.accountIndex,\n })\n return { leverages, executorAddress: args.executorAddress }\n}\n\nexport async function arcusFetchOpenContextSummary(args: {\n chainId: number\n executorAddress: string\n market?: string\n accountIndex?: number\n}) {\n const addrArgs = withAddress(args)\n const accountIndex = args.accountIndex ?? 0\n const [account, positions, orders, apiKeys, leveragesResult, marketsResult] = await Promise.all([\n arcusFetchAccount(addrArgs).catch(() => null),\n arcusFetchPositions(addrArgs).catch(() => ({ positions: [] })),\n arcusFetchOpenOrders(addrArgs).catch(() => ({ orders: [] })),\n arcusFetchApiKeys(addrArgs).catch(() => ({ apiKeys: [] })),\n arcusFetchAccountLeverages({\n chainId: args.chainId,\n address: args.executorAddress,\n accountIndex,\n }).catch(() => ({ leverages: [] })),\n arcusFetchPerpMarkets({ chainId: args.chainId }).catch(() => ({ markets: [] })),\n ])\n\n const rawMarket = (args.market ?? '').trim()\n let activeAsset = null\n if (rawMarket) {\n const resolved =\n arcusResolvePerpMarketDisplayName(marketsResult.markets, rawMarket) ??\n (rawMarket.includes('-') ? rawMarket : `${rawMarket.toUpperCase()}-USD`)\n const marketRow = marketsResult.markets.find((m) => m.marketDisplayName === resolved)\n const effective = arcusResolveEffectiveLeverage({\n marketDisplayName: resolved,\n leverages: leveragesResult.leverages,\n markets: marketsResult.markets,\n })\n activeAsset = {\n market: resolved,\n leverage: effective.leverage,\n leverageLabel: effective.leverageLabel,\n maxLeverage: effective.maxLeverage,\n markPrice: marketRow?.markPrice ?? null,\n }\n }\n\n return {\n account,\n positions: positions.positions ?? [],\n orders: orders.orders ?? [],\n apiKeys: apiKeys.apiKeys ?? [],\n leverages: leveragesResult.leverages,\n activeAsset,\n executorAddress: args.executorAddress,\n hasRegisteredApiKey: Array.isArray(apiKeys.apiKeys) && apiKeys.apiKeys.length > 0,\n }\n}\n\nexport async function arcusSpotFetchBalancesSummary(args: { chainId: number; executorAddress: string }) {\n return arcusFetchSpotBalances(args)\n}\n","import { createHash } from 'node:crypto'\nimport { getAddress, type Address } from 'viem'\n\n/** Compact Arcus ordersign canonical JSON (sorted keys, no whitespace). */\nexport function arcusCanonicalJson(payload: Record<string, unknown>): string {\n const keys = Object.keys(payload).sort()\n const parts: string[] = []\n for (const k of keys) {\n const v = payload[k]\n if (v === undefined || v === null) continue\n let encoded: string\n if (typeof v === 'string') {\n encoded = JSON.stringify(v.toLowerCase().startsWith('0x') ? v.toLowerCase() : v)\n } else {\n encoded = JSON.stringify(v)\n }\n parts.push(`${JSON.stringify(k)}:${encoded}`)\n }\n return `{${parts.join(',')}}`\n}\n\nexport function arcusPayloadMessageHex(canonicalJson: string): string {\n return `0x${Buffer.from(canonicalJson, 'utf8').toString('hex')}`\n}\n\n/** MPC Givre uses 32-byte message input; Arcus signs raw UTF-8 — use raw bytes as signing message when variable-length Givre is enabled. */\nexport function arcusPayloadMsgHashHex(canonicalJson: string): string {\n return createHash('sha256').update(canonicalJson, 'utf8').digest('hex')\n}\n\nexport function arcusNanosecondTimestamp(): string {\n return String(BigInt(Date.now()) * 1_000_000n)\n}\n\nexport function humanPriceToQuantums(priceHuman: string, tickSize: string): bigint {\n const price = Number(priceHuman)\n const tick = Number(tickSize)\n if (!Number.isFinite(price) || !Number.isFinite(tick) || tick <= 0) {\n throw new Error(`Invalid price or tickSize: ${priceHuman}, ${tickSize}`)\n }\n return BigInt(Math.round(price / tick))\n}\n\nexport function humanSizeToQuantums(szHuman: string, stepSize: string): bigint {\n const sz = Number(szHuman)\n const step = Number(stepSize)\n if (!Number.isFinite(sz) || !Number.isFinite(step) || step <= 0) {\n throw new Error(`Invalid size or stepSize: ${szHuman}, ${stepSize}`)\n }\n return BigInt(Math.round(sz / step))\n}\n\nexport type ArcusPlaceOrderWireArgs = {\n address: Address\n accountIndex?: number\n clientId?: string\n timestampNs: string\n grouping?: number\n marketId: number\n op?: number\n priceQuantums: bigint\n sizeQuantums: bigint\n reduceOnly?: boolean\n side: number\n /** Wire field `t` — time in force: 0 GTT, 1 FOK, 2 IOC, 3 ALO. */\n orderType?: number\n timeInForce?: number\n version?: number\n}\n\nexport function buildArcusPlaceOrderPayload(args: ArcusPlaceOrderWireArgs): Record<string, unknown> {\n const timeInForce = args.timeInForce ?? args.orderType ?? 0\n const ct = BigInt(args.timestampNs)\n const payload: Record<string, unknown> = {\n ad: getAddress(args.address),\n ai: args.accountIndex ?? 0,\n ct: Number(ct),\n g: args.grouping ?? 0,\n m: args.marketId,\n op: args.op ?? 1,\n p: Number(args.priceQuantums),\n q: Number(args.sizeQuantums),\n r: args.reduceOnly ? 1 : 0,\n s: args.side,\n t: timeInForce,\n v: args.version ?? 1,\n }\n if (args.clientId?.trim()) payload.c = args.clientId.trim()\n return payload\n}\n\nexport function buildArcusCancelOrderPayload(args: {\n address: Address\n accountIndex?: number\n clientId?: string\n timestampNs: string\n marketId: number\n orderId: string\n}): Record<string, unknown> {\n const payload: Record<string, unknown> = {\n ad: getAddress(args.address),\n ai: args.accountIndex ?? 0,\n ct: Number(BigInt(args.timestampNs)),\n id: args.orderId,\n m: args.marketId,\n op: 2,\n v: 1,\n }\n if (args.clientId?.trim()) payload.c = args.clientId.trim()\n return payload\n}\n\nexport function buildArcusTpslPayload(args: ArcusPlaceOrderWireArgs & { tpslType: 'STOP_LOSS' | 'TAKE_PROFIT' }): Record<string, unknown> {\n const base = buildArcusPlaceOrderPayload({ ...args, op: 4, reduceOnly: true })\n return { ...base, tpslType: args.tpslType }\n}\n","/** Merge user purpose text with an optional batch / protocol suffix. */\nexport function mergePurposeText(purposeText: string | undefined, purposeSuffix?: string): string {\n const t = (purposeText ?? '').trim()\n const suffix = (purposeSuffix ?? '').trim()\n if (!suffix) return t\n return t ? `${t}\\n\\n${suffix}` : suffix\n}\n","import type { ChainCategory, MultisignBuildResult, KeyGenSubset } from './types.js'\nimport { getClientIdFromKeyGenResult } from '@continuumdao/continuum-node-sdk'\nimport { mergePurposeText } from './purpose.js'\n\nexport interface MultisignLeg {\n msgHash: string\n msgRaw: string\n destinationAddress: string\n signatureText: string\n audit: Record<string, unknown>\n feeSnapshot: Record<string, unknown>\n proposalTxParams?: Record<string, unknown>\n /** Payable value wei string for first leg only when relevant */\n valueWei?: bigint\n}\n\nexport interface ChainCategoryBuildInput {\n keyGen: KeyGenSubset\n purposeText: string\n purposeSuffix?: string\n destinationChainID: string\n legs: MultisignLeg[]\n extraJSON?: Record<string, unknown>\n /** Top-level destination address (first leg destination if omitted) */\n destinationAddress?: string\n /** Unix seconds (UTC) for mpc-auth multiSignRequest expiryDate. */\n expiryDate?: number\n}\n\nexport interface ChainCategoryModule {\n category: ChainCategory\n finalizeMultisign(input: ChainCategoryBuildInput): MultisignBuildResult\n}\n\n/**\n * Assemble mpc-auth `bodyForSign` from category-built legs.\n * Supports single-tx and batch (messageHashes / messageRawBatch / proposalTxParams).\n */\nexport function finalizeMultisign(input: ChainCategoryBuildInput): MultisignBuildResult {\n const { keyGen, destinationChainID, legs } = input\n if (legs.length === 0) {\n throw new Error('finalizeMultisign requires at least one leg')\n }\n\n const ph = (keyGen.pubkeyhex ?? '').trim()\n if (!ph) throw new Error('keyGen pubKey (pubkeyhex) is required')\n\n const keyList = keyGen.keylist ?? []\n const clientId = getClientIdFromKeyGenResult(keyGen)\n const first = legs[0]!\n\n const messageHashes = legs.map((l) => l.msgHash)\n const messageRawBatch = legs.map((l) => l.msgRaw)\n const batchMeta = legs.map((l) => ({\n destinationAddress: l.destinationAddress,\n signatureText: l.signatureText,\n ...l.audit,\n }))\n\n const proposalTxParams = legs\n .map((l) => l.proposalTxParams)\n .filter((p): p is Record<string, unknown> => p != null && typeof p === 'object')\n\n const extraPayload: Record<string, unknown> = {\n batchMeta,\n ...(input.extraJSON ?? {}),\n }\n const extraJSON = JSON.stringify(extraPayload, (_, v) => (typeof v === 'bigint' ? v.toString() : v))\n\n const bodyForSign: Record<string, unknown> = {\n keyList,\n pubKey: ph,\n msgHash: messageHashes[0],\n msgRaw: first.msgRaw,\n destinationChainID,\n destinationAddress: input.destinationAddress ?? first.destinationAddress,\n extraJSON,\n signatureText: first.signatureText,\n purpose: mergePurposeText(input.purposeText, input.purposeSuffix),\n ...first.feeSnapshot,\n }\n\n if (legs.length > 1) {\n bodyForSign.messageHashes = messageHashes\n bodyForSign.messageRawBatch = messageRawBatch\n }\n\n if (proposalTxParams.length > 0) {\n bodyForSign.proposalTxParams = proposalTxParams\n }\n\n const valueWei = first.valueWei\n if (valueWei != null && valueWei > 0n) {\n bodyForSign.value = valueWei.toString()\n }\n\n if (clientId) bodyForSign.clientId = clientId\n\n if (input.expiryDate != null && input.expiryDate > 0) {\n bodyForSign.expiryDate = Math.floor(input.expiryDate)\n }\n\n return { bodyForSign, messageToSign: JSON.stringify(bodyForSign) }\n}\n\nexport const coreChainCategoryModule: ChainCategoryModule = {\n category: 'evm',\n finalizeMultisign,\n}\n","import { stringToHex } from 'viem'\nimport type { KeyGenSubset, MultisignBuildResult } from './types.js'\nimport { finalizeMultisign } from './envelope.js'\n\nexport const PAYLOAD_SIGN_ED25519_REQUEST_KIND = 'payload_sign_ed25519' as const\n\nexport type PayloadSignEd25519Delivery = Record<string, unknown> & { kind: string }\n\nexport type BuildPayloadSignEd25519MultisignBodyArgs = {\n keyGen: KeyGenSubset\n purposeText: string\n purposeSuffix?: string\n destinationChainID: string\n destinationAddress: string\n /** UTF-8 bytes to sign (Arcus canonical JSON). */\n messageUtf8: string\n /** secp256k1 pub key hex for billing when signing with paired ed25519 KeyGen. */\n billingKeyGenPubKey?: string\n delivery: PayloadSignEd25519Delivery\n audit?: Record<string, unknown>\n expiryDate?: number\n signatureText?: string\n}\n\nfunction msgHashNo0xFromBytes(bytes: Uint8Array): string {\n return Buffer.from(bytes).toString('hex')\n}\n\nfunction payloadMsgRawHex(messageUtf8: string, delivery: PayloadSignEd25519Delivery): string {\n const envelope = {\n version: 1,\n messageUtf8,\n delivery,\n }\n return stringToHex(JSON.stringify(envelope))\n}\n\n/**\n * Build mpc-auth multiSignRequest for Ed25519 FROST signing over variable-length UTF-8 (Arcus Scheme 1).\n * `msgHash` is hex of the raw message bytes (not SHA-256); mpc-auth givre worker signs these bytes directly.\n */\nexport function buildPayloadSignEd25519MultisignBody(\n args: BuildPayloadSignEd25519MultisignBodyArgs,\n): MultisignBuildResult {\n const messageBytes = Buffer.from(args.messageUtf8, 'utf8')\n const msgHash = msgHashNo0xFromBytes(messageBytes)\n\n const extraJSON: Record<string, unknown> = {\n signRequestKind: PAYLOAD_SIGN_ED25519_REQUEST_KIND,\n payloadSignEd25519: {\n version: 1,\n messageHex: msgHash,\n messageLength: messageBytes.length,\n },\n delivery: args.delivery,\n }\n if (args.billingKeyGenPubKey?.trim()) {\n extraJSON.billingKeyGenPubKey = args.billingKeyGenPubKey.trim()\n }\n\n return finalizeMultisign({\n keyGen: args.keyGen,\n purposeText: args.purposeText,\n purposeSuffix: args.purposeSuffix,\n destinationChainID: args.destinationChainID,\n destinationAddress: args.destinationAddress,\n extraJSON,\n expiryDate: args.expiryDate,\n legs: [\n {\n msgHash,\n msgRaw: payloadMsgRawHex(args.messageUtf8, args.delivery),\n destinationAddress: args.destinationAddress,\n signatureText: args.signatureText ?? 'Arcus Ed25519 payload sign',\n audit: {\n kind: 'PAYLOAD_SIGN_ED25519',\n deliveryKind: args.delivery.kind,\n messageLength: messageBytes.length,\n ...(args.audit ?? {}),\n },\n feeSnapshot: {},\n },\n ],\n })\n}\n","import { getAddress, hashMessage, type Address } from 'viem'\nimport type { KeyGenSubset } from '../../../core/types.js'\nimport { finalizeMultisign } from '../../../core/envelope.js'\nimport { buildPayloadSignEd25519MultisignBody, PAYLOAD_SIGN_ED25519_REQUEST_KIND } from '../../../core/payloadSignEd25519Multisign.js'\nimport { arcusFetchPerpMarkets } from './api.js'\nimport { arcusAssertPerpMarketOnline, arcusResolvePerpMarketDisplayName } from './markets.js'\nimport {\n arcusCanonicalJson,\n arcusNanosecondTimestamp,\n buildArcusCancelOrderPayload,\n buildArcusPlaceOrderPayload,\n buildArcusTpslPayload,\n humanPriceToQuantums,\n humanSizeToQuantums,\n} from './orderSigning.js'\nimport { assertArcusPairedKeyGens } from './keygenPair.js'\nimport { ARCUS_PROTOCOL_ID } from './constants.js'\n\nconst ZERO_ADDRESS = '0x0000000000000000000000000000000000000000' as Address\n\ntype ArcusMultisignCommon = {\n chainId: number\n purposeText: string\n secp256k1KeyGen: KeyGenSubset & { groupId?: string; keyType?: string }\n ed25519KeyGen: KeyGenSubset & { groupId?: string; keyType?: string }\n executorAddress: Address\n expiryDate?: number\n}\n\nexport type ArcusCreateApiKeyMultisignArgs = ArcusMultisignCommon & {\n ed25519PubKeyHex: string\n apiWalletName?: string\n validUntilMs?: number\n}\n\nexport type ArcusPlaceOrderMultisignArgs = ArcusMultisignCommon & {\n market: string\n isBuy: boolean\n limitPxHuman: string\n szHuman: string\n takeProfitTriggerPxHuman?: string\n stopLossTriggerPxHuman?: string\n leverageHuman?: string\n clientId?: string\n accountIndex?: number\n /** Wire `t`: 0 GTT, 1 FOK, 2 IOC, 3 ALO. Default GTT for limits. */\n timeInForce?: number\n /** @deprecated use timeInForce */\n orderType?: number\n /** @deprecated use timeInForce */\n tif?: number\n reduceOnly?: boolean\n}\n\nexport type ArcusCloseOrderMultisignArgs = Omit<\n ArcusPlaceOrderMultisignArgs,\n 'isBuy' | 'takeProfitTriggerPxHuman' | 'stopLossTriggerPxHuman' | 'reduceOnly'\n> & {\n isLong: boolean\n}\n\nexport type ArcusCancelOrderMultisignArgs = ArcusMultisignCommon & {\n market: string\n orderId: string\n clientId?: string\n accountIndex?: number\n}\n\nexport type ArcusSetLeverageMultisignArgs = ArcusMultisignCommon & {\n market: string\n leverage: number\n accountIndex?: number\n}\n\nasync function resolvePerpMarket(chainId: number, market: string) {\n const { markets } = await arcusFetchPerpMarkets({ chainId })\n const resolved =\n arcusResolvePerpMarketDisplayName(markets, market) ??\n (market.includes('-') ? market : `${market.toUpperCase()}-USD`)\n const row = markets.find((m) => m.marketDisplayName === resolved)\n if (!row) throw new Error(`Arcus perp market not found: ${market}`)\n return row\n}\n\nfunction scheme2CanonicalJson(body: Record<string, unknown>): string {\n return arcusCanonicalJson(body)\n}\n\nexport async function buildArcusCreateApiKeyMultisign(args: ArcusCreateApiKeyMultisignArgs) {\n const paired = assertArcusPairedKeyGens({\n secp256k1KeyGen: args.secp256k1KeyGen,\n ed25519KeyGen: args.ed25519KeyGen,\n })\n const address = getAddress(args.executorAddress)\n const publicKey = args.ed25519PubKeyHex.trim().replace(/^0x/i, '')\n if (publicKey.length !== 64) {\n throw new Error('ed25519PubKeyHex must be 64 hex chars (32-byte Ed25519 public key)')\n }\n const validUntil = args.validUntilMs ?? Date.now() + 365 * 86_400_000\n const body = {\n address: address.toLowerCase(),\n publicKey,\n apiWalletName: (args.apiWalletName ?? 'Continuum').trim(),\n validUntil,\n }\n const canonical = arcusCanonicalJson(body)\n const digest = hashMessage(canonical)\n const msgHash = digest.startsWith('0x') ? digest.slice(2) : digest\n\n return finalizeMultisign({\n keyGen: paired.secp256k1,\n purposeText: args.purposeText,\n destinationChainID: String(args.chainId),\n destinationAddress: address,\n expiryDate: args.expiryDate,\n extraJSON: {\n signRequestKind: 'personal_sign',\n delivery: {\n kind: 'arcus_create_api_key',\n chainId: args.chainId,\n body,\n canonical,\n },\n },\n legs: [\n {\n msgHash,\n msgRaw: `0x${Buffer.from(canonical, 'utf8').toString('hex')}`,\n destinationAddress: address,\n signatureText: 'Arcus createApiKey personal_sign',\n audit: {\n kind: 'PERSONAL_SIGN',\n protocol: ARCUS_PROTOCOL_ID,\n action: 'createApiKey',\n address,\n publicKey,\n },\n feeSnapshot: {},\n },\n ],\n })\n}\n\nexport async function buildArcusPlaceOrderMultisign(args: ArcusPlaceOrderMultisignArgs) {\n const paired = assertArcusPairedKeyGens({\n secp256k1KeyGen: args.secp256k1KeyGen,\n ed25519KeyGen: args.ed25519KeyGen,\n })\n const marketRow = await resolvePerpMarket(args.chainId, args.market)\n arcusAssertPerpMarketOnline(marketRow)\n const address = getAddress(args.executorAddress)\n const timestampNs = arcusNanosecondTimestamp()\n const goodTilNs = String(BigInt(timestampNs) + 90n * 86_400n * 1_000_000_000n)\n const timeInForce = args.timeInForce ?? args.tif ?? args.orderType ?? 0\n const tp = args.takeProfitTriggerPxHuman?.trim()\n const sl = args.stopLossTriggerPxHuman?.trim()\n if (args.reduceOnly && (tp || sl)) {\n throw new Error('reduceOnly cannot be combined with takeProfitTriggerPxHuman or stopLossTriggerPxHuman.')\n }\n const priceQuantums = humanPriceToQuantums(args.limitPxHuman, marketRow.tickSize)\n const sizeQuantums = humanSizeToQuantums(args.szHuman, marketRow.stepSize)\n const entryPayload = buildArcusPlaceOrderPayload({\n address,\n accountIndex: args.accountIndex,\n clientId: args.clientId,\n timestampNs,\n marketId: marketRow.marketId,\n priceQuantums,\n sizeQuantums,\n side: args.isBuy ? 0 : 1,\n timeInForce,\n reduceOnly: args.reduceOnly,\n grouping: 0,\n })\n entryPayload.g = Number(goodTilNs)\n\n const legs: Array<{ canonical: string; audit: Record<string, unknown> }> = [\n {\n canonical: arcusCanonicalJson(entryPayload),\n audit: { leg: 'entry', market: marketRow.marketDisplayName },\n },\n ]\n\n if (tp) {\n const tpPayload = buildArcusTpslPayload({\n address,\n accountIndex: args.accountIndex,\n clientId: args.clientId,\n timestampNs,\n marketId: marketRow.marketId,\n priceQuantums: humanPriceToQuantums(tp, marketRow.tickSize),\n sizeQuantums,\n side: args.isBuy ? 1 : 0,\n orderType: 0,\n grouping: 0,\n tpslType: 'TAKE_PROFIT',\n })\n tpPayload.g = Number(goodTilNs)\n legs.push({\n canonical: arcusCanonicalJson(tpPayload),\n audit: { leg: 'takeProfit', triggerPxHuman: tp },\n })\n }\n if (sl) {\n const slPayload = buildArcusTpslPayload({\n address,\n accountIndex: args.accountIndex,\n clientId: args.clientId,\n timestampNs,\n marketId: marketRow.marketId,\n priceQuantums: humanPriceToQuantums(sl, marketRow.tickSize),\n sizeQuantums,\n side: args.isBuy ? 1 : 0,\n orderType: 0,\n grouping: 0,\n tpslType: 'STOP_LOSS',\n })\n slPayload.g = Number(goodTilNs)\n legs.push({\n canonical: arcusCanonicalJson(slPayload),\n audit: { leg: 'stopLoss', triggerPxHuman: sl },\n })\n }\n\n if (legs.length === 1) {\n const canonical = legs[0]!.canonical\n return buildPayloadSignEd25519MultisignBody({\n keyGen: paired.ed25519,\n purposeText: args.purposeText,\n destinationChainID: String(args.chainId),\n destinationAddress: ZERO_ADDRESS,\n messageUtf8: canonical,\n billingKeyGenPubKey: paired.secp256k1.pubkeyhex,\n expiryDate: args.expiryDate,\n delivery: {\n kind: 'arcus_exchange',\n chainId: args.chainId,\n endpoint: 'placeOrder',\n timestampNs,\n apiKeyPubKeyHex: paired.ed25519.pubkeyhex,\n body: JSON.parse(canonical),\n },\n audit: {\n protocol: ARCUS_PROTOCOL_ID,\n action: 'placeOrder',\n market: marketRow.marketDisplayName,\n isBuy: args.isBuy,\n limitPxHuman: args.limitPxHuman,\n szHuman: args.szHuman,\n leverageHuman: args.leverageHuman?.trim() || null,\n timeInForce,\n reduceOnly: Boolean(args.reduceOnly),\n takeProfitTriggerPxHuman: tp ?? null,\n stopLossTriggerPxHuman: sl ?? null,\n },\n })\n }\n\n const batchLegs = legs.map((leg, i) => {\n const messageBytes = Buffer.from(leg.canonical, 'utf8')\n return {\n msgHash: messageBytes.toString('hex'),\n msgRaw: `0x${messageBytes.toString('hex')}`,\n destinationAddress: ZERO_ADDRESS,\n signatureText: `Arcus bracket leg ${i + 1}/${legs.length}`,\n audit: { protocol: ARCUS_PROTOCOL_ID, action: 'placeOrder', ...leg.audit },\n feeSnapshot: {},\n }\n })\n\n return finalizeMultisign({\n keyGen: paired.ed25519,\n purposeText: args.purposeText,\n destinationChainID: String(args.chainId),\n destinationAddress: ZERO_ADDRESS,\n expiryDate: args.expiryDate,\n extraJSON: {\n signRequestKind: PAYLOAD_SIGN_ED25519_REQUEST_KIND,\n billingKeyGenPubKey: paired.secp256k1.pubkeyhex,\n delivery: {\n kind: 'arcus_exchange',\n chainId: args.chainId,\n endpoint: 'batchPlaceOrders',\n timestampNs,\n grouping: 'positionTpsl',\n legCount: legs.length,\n apiKeyPubKeyHex: paired.ed25519.pubkeyhex,\n },\n batchMeta: batchLegs.map((l) => l.audit),\n },\n legs: batchLegs,\n })\n}\n\n/** IoC reduce-only close — inverts side from position direction. */\nexport async function buildArcusCloseMultisign(args: ArcusCloseOrderMultisignArgs) {\n return buildArcusPlaceOrderMultisign({\n ...args,\n isBuy: !args.isLong,\n reduceOnly: true,\n timeInForce: args.timeInForce ?? 2,\n takeProfitTriggerPxHuman: undefined,\n stopLossTriggerPxHuman: undefined,\n })\n}\n\nexport async function buildArcusCancelOrderMultisign(args: ArcusCancelOrderMultisignArgs) {\n const paired = assertArcusPairedKeyGens({\n secp256k1KeyGen: args.secp256k1KeyGen,\n ed25519KeyGen: args.ed25519KeyGen,\n })\n const marketRow = await resolvePerpMarket(args.chainId, args.market)\n const address = getAddress(args.executorAddress)\n const timestampNs = arcusNanosecondTimestamp()\n const payload = buildArcusCancelOrderPayload({\n address,\n accountIndex: args.accountIndex,\n clientId: args.clientId,\n timestampNs,\n marketId: marketRow.marketId,\n orderId: args.orderId,\n })\n const canonical = arcusCanonicalJson(payload)\n return buildPayloadSignEd25519MultisignBody({\n keyGen: paired.ed25519,\n purposeText: args.purposeText,\n destinationChainID: String(args.chainId),\n destinationAddress: ZERO_ADDRESS,\n messageUtf8: canonical,\n billingKeyGenPubKey: paired.secp256k1.pubkeyhex,\n expiryDate: args.expiryDate,\n delivery: {\n kind: 'arcus_exchange',\n chainId: args.chainId,\n endpoint: 'cancelOrder',\n timestampNs,\n apiKeyPubKeyHex: paired.ed25519.pubkeyhex,\n body: payload,\n },\n audit: {\n protocol: ARCUS_PROTOCOL_ID,\n action: 'cancelOrder',\n market: marketRow.marketDisplayName,\n orderId: args.orderId,\n },\n })\n}\n\nexport async function buildArcusSetLeverageMultisign(args: ArcusSetLeverageMultisignArgs) {\n const paired = assertArcusPairedKeyGens({\n secp256k1KeyGen: args.secp256k1KeyGen,\n ed25519KeyGen: args.ed25519KeyGen,\n })\n const marketRow = await resolvePerpMarket(args.chainId, args.market)\n arcusAssertPerpMarketOnline(marketRow)\n const address = getAddress(args.executorAddress)\n const timestampNs = arcusNanosecondTimestamp()\n const body = {\n address: address.toLowerCase(),\n accountIndex: args.accountIndex ?? 0,\n marketId: marketRow.marketId,\n leverage: args.leverage,\n }\n const canonical = scheme2CanonicalJson(body)\n const action = 'setLeverage'\n const messageUtf8 = `${timestampNs}${action}${canonical}`\n return buildPayloadSignEd25519MultisignBody({\n keyGen: paired.ed25519,\n purposeText: args.purposeText,\n destinationChainID: String(args.chainId),\n destinationAddress: ZERO_ADDRESS,\n messageUtf8,\n billingKeyGenPubKey: paired.secp256k1.pubkeyhex,\n expiryDate: args.expiryDate,\n signatureText: 'Arcus setLeverage (Scheme 2)',\n delivery: {\n kind: 'arcus_exchange',\n chainId: args.chainId,\n endpoint: action,\n timestampNs,\n scheme: 2,\n apiKeyPubKeyHex: paired.ed25519.pubkeyhex,\n body,\n canonical,\n },\n audit: {\n protocol: ARCUS_PROTOCOL_ID,\n action,\n market: args.market,\n leverage: args.leverage,\n },\n })\n}\n\nexport async function buildEvmMultisignBodyArcusPlaceOrderBatch(args: ArcusPlaceOrderMultisignArgs) {\n return buildArcusPlaceOrderMultisign(args)\n}\n\nexport async function buildEvmMultisignBodyArcusCreateApiKeyBatch(args: ArcusCreateApiKeyMultisignArgs) {\n return buildArcusCreateApiKeyMultisign(args)\n}\n\nexport async function buildEvmMultisignBodyArcusCancelOrderBatch(args: ArcusCancelOrderMultisignArgs) {\n return buildArcusCancelOrderMultisign(args)\n}\n\nexport async function buildEvmMultisignBodyArcusSetLeverageBatch(args: ArcusSetLeverageMultisignArgs) {\n return buildArcusSetLeverageMultisign(args)\n}\n\nexport async function buildEvmMultisignBodyArcusCloseBatch(args: ArcusCloseOrderMultisignArgs) {\n return buildArcusCloseMultisign(args)\n}\n","import type { KeyGenSubset } from '../../../core/types.js'\n\nexport type ArcusPairedKeyGens = {\n secp256k1: KeyGenSubset & { groupId?: string; keyType?: string }\n ed25519: KeyGenSubset & { groupId?: string; keyType?: string }\n}\n\nexport function assertArcusPairedKeyGens(args: {\n secp256k1KeyGen: KeyGenSubset & { groupId?: string; keyType?: string }\n ed25519KeyGen: KeyGenSubset & { groupId?: string; keyType?: string }\n}): ArcusPairedKeyGens {\n const secpType = (args.secp256k1KeyGen.keyType ?? 'secp256k1').toLowerCase()\n const edType = (args.ed25519KeyGen.keyType ?? 'ed25519').toLowerCase()\n if (!secpType.includes('secp256k1')) {\n throw new Error(`Arcus custody KeyGen must be secp256k1, got ${secpType}`)\n }\n if (!edType.includes('ed25519')) {\n throw new Error(`Arcus API KeyGen must be ed25519, got ${edType}`)\n }\n const secpGroup = (args.secp256k1KeyGen.groupId ?? '').trim()\n const edGroup = (args.ed25519KeyGen.groupId ?? '').trim()\n if (secpGroup && edGroup && secpGroup !== edGroup) {\n throw new Error(`Arcus KeyGen GroupId mismatch: secp256k1=${secpGroup} ed25519=${edGroup}`)\n }\n const secpPk = (args.secp256k1KeyGen.pubkeyhex ?? '').trim()\n const edPk = (args.ed25519KeyGen.pubkeyhex ?? '').trim()\n if (!secpPk) throw new Error('secp256k1 KeyGen pubkeyhex is required')\n if (!edPk) throw new Error('ed25519 KeyGen pubkeyhex is required')\n return { secp256k1: args.secp256k1KeyGen, ed25519: args.ed25519KeyGen }\n}\n","import type { ArcusOpenOrderDisplayRow, ArcusPositionDisplayRow } from './positionDisplay.js'\n\nexport type ArcusPendingCloseSummary = {\n pendingCloseSz: number\n pendingClosePct: number\n}\n\nfunction parsePositiveSize(value: string | null | undefined): number | null {\n if (value == null || !String(value).trim()) return null\n const n = Number.parseFloat(String(value).trim())\n if (!Number.isFinite(n) || n <= 0) return null\n return n\n}\n\n/** True when order side closes the given position (long → sell, short → buy). */\nexport function arcusOrderClosesPosition(\n position: Pick<ArcusPositionDisplayRow, 'isLong'>,\n order: Pick<ArcusOpenOrderDisplayRow, 'isBuy'>,\n): boolean {\n return position.isLong ? !order.isBuy : order.isBuy\n}\n\nexport function arcusOrderCountsAsPendingClose(\n order: Pick<ArcusOpenOrderDisplayRow, 'reduceOnly' | 'isTrigger'>,\n): boolean {\n return Boolean(order.reduceOnly) || Boolean(order.isTrigger)\n}\n\nexport function arcusPendingCloseForPosition(args: {\n position: Pick<ArcusPositionDisplayRow, 'key' | 'isLong' | 'sizeHuman'>\n orders: ArcusOpenOrderDisplayRow[]\n}): ArcusPendingCloseSummary {\n const positionSize = parsePositiveSize(args.position.sizeHuman)\n if (positionSize == null) {\n return { pendingCloseSz: 0, pendingClosePct: 0 }\n }\n let pendingCloseSz = 0\n for (const order of args.orders) {\n if (order.marketDisplayName !== args.position.key) continue\n if (!arcusOrderClosesPosition(args.position, order)) continue\n if (!arcusOrderCountsAsPendingClose(order)) continue\n const sz = parsePositiveSize(order.sizeHuman)\n if (sz != null) pendingCloseSz += sz\n }\n const pendingClosePct = Math.min(100, (pendingCloseSz / positionSize) * 100)\n return { pendingCloseSz, pendingClosePct }\n}\n\nexport function arcusPendingCloseByMarket(args: {\n positions: ArcusPositionDisplayRow[]\n orders: ArcusOpenOrderDisplayRow[]\n}): Map<string, ArcusPendingCloseSummary> {\n const out = new Map<string, ArcusPendingCloseSummary>()\n for (const position of args.positions) {\n out.set(position.key, arcusPendingCloseForPosition({ position, orders: args.orders }))\n }\n return out\n}\n","import type { ArcusPerpMarket } from './types.js'\n\nfunction parsePositiveDecimal(value: string): number | null {\n const trimmed = String(value ?? '').trim().replace(/,/g, '')\n if (!trimmed || !/^\\d+(\\.\\d+)?$/.test(trimmed)) return null\n const n = Number(trimmed)\n return Number.isFinite(n) && n > 0 ? n : null\n}\n\nfunction floorToStep(value: number, step: number): number | null {\n if (!Number.isFinite(value) || value <= 0 || !Number.isFinite(step) || step <= 0) return null\n const steps = Math.floor(value / step + 1e-12)\n if (steps <= 0) return null\n return steps * step\n}\n\nexport function formatArcusDisplaySize(value: number, stepSize?: string | null): string {\n const step = stepSize ? parsePositiveDecimal(stepSize) : null\n const floored = step != null ? floorToStep(value, step) : value\n if (floored == null || floored <= 0) return '0'\n const abs = Math.abs(floored)\n const maxFrac = abs >= 1 ? 4 : abs >= 0.01 ? 6 : 8\n return floored.toLocaleString(undefined, { maximumFractionDigits: maxFrac })\n}\n\nexport type ArcusPositionDisplayRow = {\n key: string\n marketDisplayName: string\n isLong: boolean\n sizeHuman: string\n entryPxHuman: string | null\n markPxHuman: string | null\n positionValueUsd: string | null\n unrealizedPnlUsd: string | null\n liquidationPxHuman: string | null\n leverageLabel: string | null\n marginUsedUsd: string | null\n}\n\nexport type ArcusOpenOrderDisplayRow = {\n orderId: string\n marketDisplayName: string\n isBuy: boolean\n limitPxHuman: string | null\n sizeHuman: string | null\n reduceOnly: boolean\n isTrigger: boolean\n}\n\nexport type ArcusAccountSummary = {\n freeCollateralUsd: string | null\n equityUsd: string | null\n marginUsedUsd: string | null\n}\n\nfunction marketStepSize(markets: ArcusPerpMarket[], marketDisplayName: string): string | null {\n return markets.find((m) => m.marketDisplayName === marketDisplayName)?.stepSize ?? null\n}\n\nfunction parseArcusSideIsBuy(raw: unknown): boolean | null {\n const s = String(raw ?? '').trim().toUpperCase()\n if (s === 'BUY' || s === 'LONG' || s === '0') return true\n if (s === 'SELL' || s === 'SHORT' || s === '1') return false\n return null\n}\n\nexport function arcusParsePositionDisplayRow(\n raw: unknown,\n markets: ArcusPerpMarket[],\n): ArcusPositionDisplayRow | null {\n if (!raw || typeof raw !== 'object') return null\n const row = raw as Record<string, unknown>\n const marketDisplayName = String(row.marketDisplayName ?? '').trim()\n if (!marketDisplayName) return null\n const side = String(row.side ?? '').toUpperCase()\n const isLong = side === 'LONG' || side === 'BUY'\n const stepSize = marketStepSize(markets, marketDisplayName)\n const step = stepSize ? parsePositiveDecimal(stepSize) : null\n const markPx = parsePositiveDecimal(String(row.markPx ?? row.markPrice ?? ''))\n const notional = Math.abs(parsePositiveDecimal(String(row.positionValueNotional ?? row.notional ?? '')) ?? 0)\n let sizeHuman: string | null = null\n if (notional > 0 && markPx != null && markPx > 0) {\n sizeHuman = formatArcusDisplaySize(notional / markPx, stepSize)\n } else {\n const sizeRaw = Math.abs(Number(String(row.size ?? row.sizeHuman ?? '').trim()))\n if (Number.isFinite(sizeRaw) && sizeRaw > 0 && step != null) {\n sizeHuman = formatArcusDisplaySize(sizeRaw * step, stepSize)\n }\n }\n if (!sizeHuman || !parsePositiveDecimal(sizeHuman)) return null\n const levRaw = row.leverage\n const leverageLabel =\n levRaw != null && String(levRaw).trim()\n ? `${Math.round(Number(levRaw))}x cross`\n : null\n return {\n key: marketDisplayName,\n marketDisplayName,\n isLong,\n sizeHuman,\n entryPxHuman: String(row.entryPx ?? row.entryPrice ?? '').trim() || null,\n markPxHuman: markPx != null ? String(markPx) : String(row.markPx ?? '').trim() || null,\n positionValueUsd: String(row.positionValueNotional ?? row.notional ?? '').trim() || null,\n unrealizedPnlUsd: String(row.unrealizedPnl ?? row.unrealizedPnlUsd ?? '').trim() || null,\n liquidationPxHuman: String(row.liquidationPx ?? row.liquidationPrice ?? '').trim() || null,\n leverageLabel,\n marginUsedUsd: String(row.marginUsed ?? '').trim() || null,\n }\n}\n\nexport function arcusParseOpenOrderDisplayRow(\n raw: unknown,\n markets: ArcusPerpMarket[],\n): ArcusOpenOrderDisplayRow | null {\n if (!raw || typeof raw !== 'object') return null\n const row = raw as Record<string, unknown>\n const orderId = String(row.orderId ?? row.id ?? '').trim()\n const marketDisplayName = String(row.marketDisplayName ?? '').trim()\n if (!orderId || !marketDisplayName) return null\n const isBuy = parseArcusSideIsBuy(row.side)\n if (isBuy == null) return null\n const stepSize = marketStepSize(markets, marketDisplayName)\n const step = stepSize ? parsePositiveDecimal(stepSize) : null\n let sizeHuman: string | null = String(row.sizeHuman ?? row.remainingSize ?? row.size ?? '').trim() || null\n if (sizeHuman && step != null) {\n const asNum = Number(sizeHuman)\n if (Number.isFinite(asNum) && asNum > 0 && asNum < 1e6) {\n sizeHuman = formatArcusDisplaySize(asNum * step, stepSize)\n }\n }\n const priceRaw = String(row.price ?? row.limitPx ?? '').trim()\n return {\n orderId,\n marketDisplayName,\n isBuy,\n limitPxHuman: priceRaw || null,\n sizeHuman,\n reduceOnly: Boolean(row.reduceOnly) || Number(row.reduceOnly) === 1,\n isTrigger: Boolean(row.isTrigger) || String(row.orderType ?? '').toUpperCase().includes('STOP'),\n }\n}\n\nexport function arcusParseAccountSummary(account: Record<string, unknown> | null): ArcusAccountSummary {\n if (!account) {\n return { freeCollateralUsd: null, equityUsd: null, marginUsedUsd: null }\n }\n return {\n freeCollateralUsd: String(account.freeCollateral ?? '').trim() || null,\n equityUsd: String(account.equity ?? account.accountValue ?? '').trim() || null,\n marginUsedUsd: String(account.marginUsed ?? account.totalMarginUsed ?? '').trim() || null,\n }\n}\n\nexport function arcusMapPositionDisplayRows(\n rawPositions: unknown[],\n markets: ArcusPerpMarket[],\n): ArcusPositionDisplayRow[] {\n return rawPositions\n .map((raw) => arcusParsePositionDisplayRow(raw, markets))\n .filter((row): row is ArcusPositionDisplayRow => row != null)\n}\n\nexport function arcusMapOpenOrderDisplayRows(\n rawOrders: unknown[],\n markets: ArcusPerpMarket[],\n): ArcusOpenOrderDisplayRow[] {\n return rawOrders\n .map((raw) => arcusParseOpenOrderDisplayRow(raw, markets))\n .filter((row): row is ArcusOpenOrderDisplayRow => row != null)\n}\n","import { getAddress, type Address } from 'viem'\nimport type { KeyGenSubset } from '../../../core/types.js'\nimport { buildPayloadSignEd25519MultisignBody } from '../../../core/payloadSignEd25519Multisign.js'\nimport { arcusFetchSpotOverview } from './api.js'\nimport { arcusCanonicalJson, arcusNanosecondTimestamp } from './orderSigning.js'\nimport { assertArcusPairedKeyGens } from './keygenPair.js'\nimport { ARCUS_PROTOCOL_ID } from './constants.js'\n\nconst ZERO_ADDRESS = '0x0000000000000000000000000000000000000000' as Address\n\nexport type ArcusSpotRfqMultisignArgs = {\n chainId: number\n purposeText: string\n secp256k1KeyGen: KeyGenSubset & { groupId?: string; keyType?: string }\n ed25519KeyGen: KeyGenSubset & { groupId?: string; keyType?: string }\n executorAddress: Address\n ticker: string\n isBuy: boolean\n sizeHuman: string\n limitPxHuman?: string\n expiryDate?: number\n}\n\nexport async function buildArcusSpotRfqMultisign(args: ArcusSpotRfqMultisignArgs) {\n const paired = assertArcusPairedKeyGens({\n secp256k1KeyGen: args.secp256k1KeyGen,\n ed25519KeyGen: args.ed25519KeyGen,\n })\n const address = getAddress(args.executorAddress)\n const { tokens } = await arcusFetchSpotOverview({ chainId: args.chainId })\n const ticker = args.ticker.trim().toUpperCase()\n const token = tokens.find((t) => t.ticker.toUpperCase() === ticker)\n if (!token) throw new Error(`Arcus spot token not found: ${ticker}`)\n\n const timestampNs = arcusNanosecondTimestamp()\n const body: Record<string, unknown> = {\n address: address.toLowerCase(),\n ticker: token.ticker,\n side: args.isBuy ? 'BUY' : 'SELL',\n size: args.sizeHuman.trim(),\n tokenContractAddress: token.contractAddress.toLowerCase(),\n }\n if (args.limitPxHuman?.trim()) {\n body.limitPrice = args.limitPxHuman.trim()\n }\n const canonical = arcusCanonicalJson(body)\n const action = args.isBuy ? 'spotBuy' : 'spotSell'\n const messageUtf8 = `${timestampNs}${action}${canonical}`\n\n return buildPayloadSignEd25519MultisignBody({\n keyGen: paired.ed25519,\n purposeText: args.purposeText,\n destinationChainID: String(args.chainId),\n destinationAddress: ZERO_ADDRESS,\n messageUtf8,\n billingKeyGenPubKey: paired.secp256k1.pubkeyhex,\n expiryDate: args.expiryDate,\n signatureText: `Arcus spot RFQ ${action}`,\n delivery: {\n kind: 'arcus_spot_rfq',\n chainId: args.chainId,\n endpoint: action,\n timestampNs,\n scheme: 2,\n apiKeyPubKeyHex: paired.ed25519.pubkeyhex,\n body,\n tokenContractAddress: token.contractAddress,\n tokenSymbol: token.ticker,\n tokenName: token.name,\n },\n audit: {\n protocol: ARCUS_PROTOCOL_ID,\n action,\n marketKind: 'spot',\n ticker: token.ticker,\n isBuy: args.isBuy,\n sizeHuman: args.sizeHuman,\n limitPxHuman: args.limitPxHuman ?? null,\n },\n })\n}\n\nexport async function buildEvmMultisignBodyArcusSpotRfqBatch(args: ArcusSpotRfqMultisignArgs) {\n return buildArcusSpotRfqMultisign(args)\n}\n","import { ARCUS_USDG_ADDRESS_4663 } from './constants.js'\n\n/** BridgeVault — EIP-712 domain for withdraw / internal transfer on Robinhood Chain mainnet. */\nexport const ARCUS_BRIDGE_VAULT_4663 = '0x14b107cf534239c59571b066cB6497a321Da897c' as const\n\n/** On-chain deposit entry point (`initiateDeposit`) on Robinhood Chain mainnet (Arcus app config). */\nexport const ARCUS_DEPOSIT_PROXY_4663 = '0xD42c46c7BaD6A54b38395F846b09981CE75fb8e2' as const\n\nexport const ARCUS_USDG_DECIMALS = 6\n/** Arcus collateral quote quantums per $1 (withdraw / transfer EIP-712 amounts). */\nexport const ARCUS_QUOTE_QUANTUMS_PER_USD = 1_000_000_000n\nexport const ARCUS_MIN_WITHDRAW_USD = 1\n\n/** Default perp sub-account (accountIndex 0). */\nexport const ARCUS_PERP_ACCOUNT_INDEX = 0\n/** Spot USDG bucket (accountIndex 1 — matches Arcus Fun “USDG Spot”). */\nexport const ARCUS_SPOT_ACCOUNT_INDEX = 1\n\nexport type ArcusFundProduct = 'perp' | 'spot'\n\nexport function arcusAccountIndexForProduct(product: ArcusFundProduct): number {\n return product === 'spot' ? ARCUS_SPOT_ACCOUNT_INDEX : ARCUS_PERP_ACCOUNT_INDEX\n}\n\nexport function arcusBridgeConfig(chainId: number) {\n if (chainId !== 4663) return null\n return {\n chainId,\n usdg: ARCUS_USDG_ADDRESS_4663,\n depositProxy: ARCUS_DEPOSIT_PROXY_4663,\n bridgeVault: ARCUS_BRIDGE_VAULT_4663,\n usdgDecimals: ARCUS_USDG_DECIMALS,\n }\n}\n","import { getAddress, type Address } from 'viem'\nimport { arcusNanosecondTimestamp } from './orderSigning.js'\nimport { arcusBridgeConfig, type ArcusFundProduct, arcusAccountIndexForProduct } from './bridgeConstants.js'\n\nexport const ARCUS_WITHDRAW_EIP712_DOMAIN_NAME = 'Arcus Withdraw' as const\nexport const ARCUS_WITHDRAW_EIP712_DOMAIN_VERSION = '1' as const\n\nexport const ARCUS_WITHDRAW_SIGN_TYPES = {\n Withdraw: [\n { name: 'ethereumAddress', type: 'address' },\n { name: 'accountIndex', type: 'uint8' },\n { name: 'amount', type: 'uint256' },\n { name: 'nonce', type: 'string' },\n ],\n} as const\n\nexport function parseArcusUsdHumanToQuoteQuantums(usdHuman: string): bigint {\n const trimmed = usdHuman.trim().replace(/,/g, '')\n if (!trimmed || !/^\\d+(\\.\\d+)?$/.test(trimmed)) {\n throw new Error('usdHuman must be a positive decimal string')\n }\n const [whole, frac = ''] = trimmed.split('.')\n const frac9 = (frac + '000000000').slice(0, 9)\n const quantums = BigInt(whole) * 1_000_000_000n + BigInt(frac9 || '0')\n if (quantums <= 0n) throw new Error('usdHuman must be greater than zero')\n return quantums\n}\n\nexport function parseArcusUsdHumanToUsdgWei(usdHuman: string): bigint {\n const trimmed = usdHuman.trim().replace(/,/g, '')\n if (!trimmed || !/^\\d+(\\.\\d+)?$/.test(trimmed)) {\n throw new Error('usdHuman must be a positive decimal string')\n }\n const [whole, frac = ''] = trimmed.split('.')\n const frac6 = (frac + '000000').slice(0, 6)\n const wei = BigInt(whole) * 1_000_000n + BigInt(frac6 || '0')\n if (wei <= 0n) throw new Error('usdHuman must be greater than zero')\n return wei\n}\n\nexport function buildArcusWithdrawTypedData(args: {\n chainId: number\n executorAddress: Address\n product: ArcusFundProduct\n usdHuman: string\n nonceNs?: string\n}) {\n const cfg = arcusBridgeConfig(args.chainId)\n if (!cfg) throw new Error('Arcus fund flows are supported on Robinhood Chain (4663) only.')\n const address = getAddress(args.executorAddress)\n const amount = parseArcusUsdHumanToQuoteQuantums(args.usdHuman)\n const nonce = args.nonceNs ?? arcusNanosecondTimestamp()\n const accountIndex = arcusAccountIndexForProduct(args.product)\n return {\n domain: {\n name: ARCUS_WITHDRAW_EIP712_DOMAIN_NAME,\n version: ARCUS_WITHDRAW_EIP712_DOMAIN_VERSION,\n chainId: cfg.chainId,\n verifyingContract: getAddress(cfg.bridgeVault),\n },\n types: ARCUS_WITHDRAW_SIGN_TYPES,\n primaryType: 'Withdraw' as const,\n message: {\n ethereumAddress: address,\n accountIndex,\n amount,\n nonce,\n },\n requestBody: {\n ethereumAddress: address.toLowerCase(),\n accountIndex,\n amount: amount.toString(),\n nonce,\n },\n }\n}\n","import { gasLimitFromEstimateAndChainConfig } from '@continuumdao/continuum-node-sdk'\n\n/** Curve router swap gas: chain cap when set, else 12/10 estimate bump. */\nexport function routerSwapGasLimitFromEstimate(\n estimatedGas: bigint,\n chainGasLimit?: number | null,\n): bigint {\n if (chainGasLimit != null && Number.isFinite(chainGasLimit) && chainGasLimit > 0) {\n return gasLimitFromEstimateAndChainConfig(estimatedGas, chainGasLimit)\n }\n return (estimatedGas * 12n + 9n) / 10n\n}\n","import {\n keccak256,\n createPublicClient,\n defineChain,\n http,\n serializeTransaction,\n getAddress,\n parseGwei,\n type Address,\n type PublicClient,\n} from 'viem'\nimport type { MultisignBuildResult } from '../../core/types.js'\nimport { finalizeMultisign, type MultisignLeg } from '../../core/envelope.js'\nimport type { KeyGenSubset } from '../../core/types.js'\nimport {\n fetchChainFeeParams,\n alignEip1559FeesWithLatestBase,\n gweiToDecimalString,\n gasLimitFromEstimateAndChainConfig,\n proposalTxParamsToFeeSnapshot,\n type ProposalTxParams,\n} from '@continuumdao/continuum-node-sdk'\nimport { routerSwapGasLimitFromEstimate } from './routerSwapGas.js'\nimport type { EvmProtocolContext, EvmTxStep } from './types.js'\n\nexport type EvmBatchMetaBuilder = (args: {\n step: EvmTxStep\n index: number\n gasLimit: bigint\n}) => Record<string, unknown>\n\nexport type EvmBuildBatchArgs = {\n context: EvmProtocolContext\n steps: EvmTxStep[]\n purposeSuffix?: string\n buildBatchMeta: EvmBatchMetaBuilder\n /** First leg msgRaw without 0x prefix; defaults to first step calldata */\n firstMsgRawNo0x?: string\n destinationAddress?: Address\n /** Top-level `value` on bodyForSign when the payable amount is not on the first leg */\n payableValueWei?: bigint\n resolveGasLimit?: (args: {\n step: EvmTxStep\n index: number\n estimatedGas: bigint\n publicClient: PublicClient\n }) => Promise<bigint> | bigint\n /** Override default `estimateGas` (e.g. trade-API gas, skip post-approve deposit estimate). */\n estimateGasForStep?: (args: {\n step: EvmTxStep\n index: number\n publicClient: PublicClient\n executor: Address\n }) => Promise<bigint> | bigint\n}\n\n/**\n * Build unsigned EVM txs, estimate gas, serialize, hash — then assemble mpc-auth body via core envelope.\n */\nexport async function buildEvmMultisignBatch(args: EvmBuildBatchArgs): Promise<MultisignBuildResult> {\n const { context, steps } = args\n const {\n chainId,\n rpcUrl,\n executorAddress,\n chainDetail,\n useCustomGas,\n customGasChainDetails,\n keyGen,\n purposeText,\n } = context\n\n if (steps.length === 0) throw new Error('buildEvmMultisignBatch requires at least one step')\n\n const ch = defineChain({\n id: chainId,\n name: 'Destination',\n nativeCurrency: { decimals: 18, name: 'Ether', symbol: 'ETH' },\n rpcUrls: { default: { http: [rpcUrl] } },\n })\n const publicClient = createPublicClient({ chain: ch, transport: http(rpcUrl) })\n\n const feeParams = await fetchChainFeeParams(rpcUrl, chainId)\n const legacy = Boolean(chainDetail?.legacy) || !feeParams.isEip1559\n const latestBaseFeeWei = !legacy\n ? ((await publicClient.getBlock({ blockTag: 'latest' })).baseFeePerGas ?? 0n)\n : 0n\n\n const gasLimitConfig =\n useCustomGas && chainDetail?.gasLimit != null ? Number(chainDetail.gasLimit) : undefined\n const chainGasLimitRouter =\n chainDetail?.gasLimit != null &&\n Number.isFinite(Number(chainDetail.gasLimit)) &&\n Number(chainDetail.gasLimit) > 0\n ? Number(chainDetail.gasLimit)\n : undefined\n const gasFeeMultiplier =\n useCustomGas && chainDetail?.gasMultiplier != null ? Number(chainDetail.gasMultiplier) : undefined\n\n const executor = getAddress(executorAddress)\n const baseNonce = await publicClient.getTransactionCount({ address: executor, blockTag: 'pending' })\n\n const legs: MultisignLeg[] = []\n\n for (let i = 0; i < steps.length; i++) {\n const step = steps[i]!\n const currentNonce = baseNonce + i\n\n let estimatedGas: bigint\n if (args.estimateGasForStep) {\n estimatedGas = await args.estimateGasForStep({ step, index: i, publicClient, executor })\n } else {\n try {\n estimatedGas = await publicClient.estimateGas({\n to: step.to,\n data: step.data,\n value: step.value,\n account: executor,\n })\n } catch {\n estimatedGas = step.fallbackGas ?? 100_000n\n }\n }\n\n let gasLimitI: bigint\n if (args.resolveGasLimit) {\n gasLimitI = await args.resolveGasLimit({ step, index: i, estimatedGas, publicClient })\n } else if (step.routerSwap) {\n gasLimitI = routerSwapGasLimitFromEstimate(estimatedGas, chainGasLimitRouter)\n } else {\n gasLimitI = useCustomGas\n ? gasLimitFromEstimateAndChainConfig(estimatedGas, gasLimitConfig)\n : estimatedGas\n }\n\n let proposalTxParams: ProposalTxParams\n let feeSnapshot: Record<string, unknown>\n let serialized: `0x${string}`\n\n if (legacy) {\n let gasPriceWei = await publicClient.getGasPrice()\n if (useCustomGas && gasFeeMultiplier != null && gasFeeMultiplier > 0) {\n gasPriceWei = (gasPriceWei * BigInt(100 + gasFeeMultiplier)) / 100n\n }\n if (useCustomGas && chainDetail?.gasPrice != null && chainDetail.gasPrice > 0) {\n const configured = parseGwei(gweiToDecimalString(Number(chainDetail.gasPrice)))\n if (configured > gasPriceWei) gasPriceWei = configured\n }\n serialized = serializeTransaction({\n type: 'legacy',\n to: step.to,\n data: step.data,\n value: step.value,\n gas: gasLimitI,\n gasPrice: gasPriceWei,\n nonce: currentNonce,\n chainId,\n })\n proposalTxParams = {\n nonce: currentNonce,\n gasLimit: gasLimitI.toString(),\n txType: 'legacy',\n gasPrice: gasPriceWei.toString(),\n }\n feeSnapshot = proposalTxParamsToFeeSnapshot(proposalTxParams)\n } else {\n const fetchedBase = feeParams.baseFeeGwei ?? 0\n const fetchedPriority = feeParams.priorityFeeGwei ?? 0\n const configuredBase =\n useCustomGas && chainDetail?.baseFee != null ? Number(chainDetail.baseFee) : 0\n const configuredPriority =\n useCustomGas && chainDetail?.priorityFee != null ? Number(chainDetail.priorityFee) : 0\n const effectiveBaseFeeGwei = Math.max(fetchedBase, configuredBase)\n const effectivePriorityFeeGwei = Math.max(fetchedPriority, configuredPriority)\n const baseFeeMultiplierPct =\n useCustomGas && chainDetail?.baseFeeMultiplier != null\n ? Math.max(100, Number(chainDetail.baseFeeMultiplier))\n : 100\n const baseComponentGwei = (effectiveBaseFeeGwei * baseFeeMultiplierPct) / 100\n const maxFeePerGasGwei = baseComponentGwei + effectivePriorityFeeGwei\n let maxPriorityFeePerGas =\n effectivePriorityFeeGwei > 0\n ? parseGwei(gweiToDecimalString(effectivePriorityFeeGwei))\n : parseGwei('1')\n let maxFeePerGas = parseGwei(gweiToDecimalString(maxFeePerGasGwei))\n if (useCustomGas && gasFeeMultiplier != null && gasFeeMultiplier > 0) {\n maxPriorityFeePerGas = (maxPriorityFeePerGas * BigInt(100 + gasFeeMultiplier)) / 100n\n maxFeePerGas = (maxFeePerGas * BigInt(100 + gasFeeMultiplier)) / 100n\n }\n ;({ maxFeePerGas, maxPriorityFeePerGas } = alignEip1559FeesWithLatestBase(\n maxFeePerGas,\n maxPriorityFeePerGas,\n latestBaseFeeWei,\n ))\n serialized = serializeTransaction({\n type: 'eip1559',\n to: step.to,\n data: step.data,\n value: step.value,\n gas: gasLimitI,\n maxFeePerGas,\n maxPriorityFeePerGas,\n nonce: currentNonce,\n chainId,\n })\n proposalTxParams = {\n nonce: currentNonce,\n gasLimit: gasLimitI.toString(),\n txType: 'eip1559',\n maxFeePerGas: maxFeePerGas.toString(),\n maxPriorityFeePerGas: maxPriorityFeePerGas.toString(),\n }\n feeSnapshot = i === 0 ? proposalTxParamsToFeeSnapshot(proposalTxParams) : {}\n }\n\n const h = keccak256(serialized)\n const msgHash = h.startsWith('0x') ? h.slice(2) : h\n\n const batchMetaExtra = args.buildBatchMeta({ step, index: i, gasLimit: gasLimitI })\n\n legs.push({\n msgHash,\n msgRaw: i === 0 && args.firstMsgRawNo0x != null ? args.firstMsgRawNo0x : serialized,\n destinationAddress: step.to,\n signatureText:\n typeof batchMetaExtra.signatureText === 'string'\n ? batchMetaExtra.signatureText\n : JSON.stringify(batchMetaExtra.signatureText ?? {}),\n audit: batchMetaExtra,\n feeSnapshot: i === 0 ? feeSnapshot : {},\n proposalTxParams,\n valueWei: i === 0 ? step.value : undefined,\n })\n\n if (i === 0 && args.firstMsgRawNo0x != null) {\n legs[0]!.msgRaw = args.firstMsgRawNo0x\n }\n }\n\n const extraJSON: Record<string, unknown> = {}\n if (useCustomGas && customGasChainDetails && Object.keys(customGasChainDetails).length > 0) {\n extraJSON.customGasChainDetails = customGasChainDetails\n }\n\n const result = finalizeMultisign({\n keyGen: keyGen as KeyGenSubset,\n purposeText,\n purposeSuffix: args.purposeSuffix,\n destinationChainID: String(chainId),\n destinationAddress: args.destinationAddress ?? steps[0]!.to,\n legs,\n extraJSON: Object.keys(extraJSON).length > 0 ? extraJSON : undefined,\n expiryDate: context.expiryDate,\n })\n const pv = args.payableValueWei\n if (pv != null && pv > 0n) {\n result.bodyForSign.value = pv.toString()\n }\n return result\n}\n\nexport const evmChainCategoryModule = {\n category: 'evm' as const,\n finalizeMultisign,\n buildEvmMultisignBatch,\n}\n","import { hashTypedData, stringToHex, type TypedDataDomain } from 'viem'\nimport type { KeyGenSubset, MultisignBuildResult } from './types.js'\nimport { finalizeMultisign } from './envelope.js'\n\nexport const EIP712_SIGN_REQUEST_KIND = 'eip712' as const\n\nexport type Eip712TypedDataField = { name: string; type: string }\n\nexport type Eip712TypedDataPayload = {\n domain: TypedDataDomain\n types: Record<string, readonly Eip712TypedDataField[] | Eip712TypedDataField[]>\n primaryType: string\n message: Record<string, unknown>\n}\n\nexport type Eip712MultisignDelivery = Record<string, unknown> & { kind: string }\n\nexport type BuildEip712MultisignBodyArgs = {\n keyGen: KeyGenSubset\n purposeText: string\n purposeSuffix?: string\n /** Chain id stored on the sign request (protocol context; may differ from EIP-712 domain chainId). */\n destinationChainID: string\n destinationAddress: string\n typedData: Eip712TypedDataPayload\n delivery: Eip712MultisignDelivery\n audit?: Record<string, unknown>\n expiryDate?: number\n}\n\nfunction msgHashNo0x(digest: `0x${string}`): string {\n return digest.startsWith('0x') ? digest.slice(2) : digest\n}\n\nfunction eip712SignatureText(domain: TypedDataDomain, primaryType: string): string {\n return JSON.stringify({\n kind: 'EIP-712',\n ...(typeof domain.name === 'string' ? { name: domain.name } : {}),\n primaryType,\n })\n}\n\nfunction jsonStringifyForAudit(value: unknown): string {\n return JSON.stringify(value, (_, v) => (typeof v === 'bigint' ? v.toString() : v))\n}\n\nfunction eip712MsgRawHex(typedData: Eip712TypedDataPayload, delivery: Eip712MultisignDelivery): string {\n const envelope = {\n version: 1,\n ...typedData,\n delivery,\n }\n return stringToHex(jsonStringifyForAudit(envelope))\n}\n\n/**\n * Build an mpc-auth multiSignRequest body for a single-leg EIP-712 digest (no EVM tx broadcast).\n * `msgHash` is the EIP-712 hash; `msgRaw` is UTF-8 hex JSON audit envelope (not RLP calldata).\n */\nexport function buildEip712MultisignBody(args: BuildEip712MultisignBodyArgs): MultisignBuildResult {\n const { typedData, delivery } = args\n const digest = hashTypedData({\n domain: typedData.domain,\n types: typedData.types,\n primaryType: typedData.primaryType,\n message: typedData.message,\n })\n\n const extraJSON: Record<string, unknown> = {\n signRequestKind: EIP712_SIGN_REQUEST_KIND,\n eip712: {\n version: 1,\n digest,\n domain: typedData.domain,\n types: typedData.types,\n primaryType: typedData.primaryType,\n message: typedData.message,\n },\n delivery,\n }\n\n return finalizeMultisign({\n keyGen: args.keyGen,\n purposeText: args.purposeText,\n purposeSuffix: args.purposeSuffix,\n destinationChainID: args.destinationChainID,\n destinationAddress: args.destinationAddress,\n extraJSON,\n expiryDate: args.expiryDate,\n legs: [\n {\n msgHash: msgHashNo0x(digest),\n msgRaw: eip712MsgRawHex(typedData, delivery),\n destinationAddress: args.destinationAddress,\n signatureText: eip712SignatureText(typedData.domain, typedData.primaryType),\n audit: {\n kind: 'EIP712',\n primaryType: typedData.primaryType,\n deliveryKind: delivery.kind,\n ...(args.audit ?? {}),\n },\n feeSnapshot: {},\n },\n ],\n })\n}\n","import { encodeFunctionData, getAddress, parseAbi, type Address } from 'viem'\nimport type { KeyGenSubsetForPermit } from '../../../core/types.js'\nimport type { EvmChainDetail } from '../../../chains/evm/types.js'\nimport { buildEvmMultisignBatch } from '../../../chains/evm/buildBatch.js'\nimport { buildEip712MultisignBody } from '../../../core/eip712Multisign.js'\nimport {\n ARCUS_MIN_WITHDRAW_USD,\n ARCUS_QUOTE_QUANTUMS_PER_USD,\n arcusBridgeConfig,\n type ArcusFundProduct,\n} from './bridgeConstants.js'\nimport { isArcusChainSupported } from './support.js'\nimport { buildArcusWithdrawTypedData, parseArcusUsdHumanToUsdgWei } from './fundSigning.js'\nimport { ARCUS_PROTOCOL_ID } from './constants.js'\nimport { assertArcusAddressRegisteredForDeposit } from './registration.js'\n\nconst erc20ApproveAbi = parseAbi(['function approve(address spender, uint256 amount) returns (bool)'])\n\nconst depositProxyAbi = parseAbi([\n 'function initiateDeposit(address owner, uint16 accountIndex, address token, uint256 amount) returns (uint64 inboxIndex)',\n])\n\nconst DEPOSIT_APPROVE_FALLBACK_GAS = 80_000n\nconst DEPOSIT_INITIATE_FALLBACK_GAS = 350_000n\n\ntype ArcusDepositMultisignArgs = {\n keyGen: KeyGenSubsetForPermit\n chainId: number\n rpcUrl: string\n chainDetail: EvmChainDetail\n useCustomGas: boolean\n customGasChainDetails?: Record<string, unknown> | null\n executorAddress: Address\n purposeText: string\n usdHuman: string\n product: ArcusFundProduct\n}\n\ntype ArcusWithdrawMultisignArgs = {\n keyGen: KeyGenSubsetForPermit\n chainId: number\n purposeText: string\n usdHuman: string\n executorAddress: Address\n product: ArcusFundProduct\n}\n\nexport async function buildArcusDepositMultisign(args: ArcusDepositMultisignArgs) {\n if (!isArcusChainSupported(args.chainId)) {\n throw new Error('chainId must be 4663 (Robinhood Chain)')\n }\n await assertArcusAddressRegisteredForDeposit({\n chainId: args.chainId,\n executorAddress: getAddress(args.executorAddress),\n })\n const cfg = arcusBridgeConfig(args.chainId)\n if (!cfg) throw new Error('Arcus deposit is not configured for this chain.')\n const amountWei = parseArcusUsdHumanToUsdgWei(args.usdHuman)\n const executor = getAddress(args.executorAddress)\n const accountIndex = args.product === 'spot' ? 1 : 0\n const usdg = getAddress(cfg.usdg)\n const depositProxy = getAddress(cfg.depositProxy)\n\n const approveData = encodeFunctionData({\n abi: erc20ApproveAbi,\n functionName: 'approve',\n args: [depositProxy, amountWei],\n })\n const depositData = encodeFunctionData({\n abi: depositProxyAbi,\n functionName: 'initiateDeposit',\n args: [executor, accountIndex, usdg, amountWei],\n })\n\n return buildEvmMultisignBatch({\n context: {\n keyGen: args.keyGen,\n chainCategory: 'evm',\n chainId: args.chainId,\n rpcUrl: args.rpcUrl,\n chainDetail: args.chainDetail,\n useCustomGas: args.useCustomGas,\n customGasChainDetails: args.customGasChainDetails ?? null,\n executorAddress: executor,\n purposeText: args.purposeText,\n },\n steps: [\n { to: usdg, data: approveData, value: 0n, fallbackGas: DEPOSIT_APPROVE_FALLBACK_GAS },\n { to: depositProxy, data: depositData, value: 0n, fallbackGas: DEPOSIT_INITIATE_FALLBACK_GAS },\n ],\n destinationAddress: depositProxy,\n buildBatchMeta: ({ index }) => {\n if (index === 0) {\n return {\n kind: 'Arcus',\n action: 'depositApprove',\n product: args.product,\n accountIndex,\n usdg,\n depositProxy,\n usdHuman: args.usdHuman,\n evm: { type: 'arcus_deposit_approve', version: 1, chainId: String(args.chainId) },\n }\n }\n return {\n kind: 'Arcus',\n action: 'deposit',\n product: args.product,\n accountIndex,\n usdg,\n depositProxy,\n usdHuman: args.usdHuman,\n evm: { type: 'arcus_deposit_initiate', version: 1, chainId: String(args.chainId) },\n }\n },\n })\n}\n\nexport async function buildArcusWithdrawMultisign(args: ArcusWithdrawMultisignArgs) {\n if (!isArcusChainSupported(args.chainId)) {\n throw new Error('chainId must be 4663 (Robinhood Chain)')\n }\n const minQuantums = ARCUS_QUOTE_QUANTUMS_PER_USD * BigInt(ARCUS_MIN_WITHDRAW_USD)\n const typed = buildArcusWithdrawTypedData({\n chainId: args.chainId,\n executorAddress: args.executorAddress,\n product: args.product,\n usdHuman: args.usdHuman,\n })\n if (typed.message.amount < minQuantums) {\n throw new Error(`Arcus withdraw must be at least ${ARCUS_MIN_WITHDRAW_USD} USD`)\n }\n\n return buildEip712MultisignBody({\n keyGen: args.keyGen,\n purposeText: args.purposeText,\n destinationChainID: String(args.chainId),\n destinationAddress: getAddress(args.executorAddress),\n typedData: typed,\n delivery: {\n kind: 'arcus_withdraw',\n chainId: args.chainId,\n product: args.product,\n accountIndex: typed.message.accountIndex,\n body: typed.requestBody,\n },\n audit: {\n protocol: ARCUS_PROTOCOL_ID,\n action: 'withdraw',\n product: args.product,\n usdHuman: args.usdHuman,\n accountIndex: typed.message.accountIndex,\n nonce: typed.message.nonce,\n },\n })\n}\n\nexport async function buildEvmMultisignBodyArcusDepositBatch(args: ArcusDepositMultisignArgs) {\n return buildArcusDepositMultisign(args)\n}\n\nexport async function buildArcusWithdrawMultisignBody(args: ArcusWithdrawMultisignArgs) {\n return buildArcusWithdrawMultisign(args)\n}\n","import { getAddress, type Address } from 'viem'\nimport { arcusFetchApiKeys } from './api.js'\n\n/** Deposit collateral is only allowed after `createApiKey` has registered an Ed25519 key for the address. */\nexport async function assertArcusAddressRegisteredForDeposit(args: {\n chainId: number\n executorAddress: Address\n}): Promise<void> {\n const address = getAddress(args.executorAddress).toLowerCase()\n const { apiKeys } = await arcusFetchApiKeys({ chainId: args.chainId, address })\n if (!Array.isArray(apiKeys) || apiKeys.length === 0) {\n throw new Error(\n 'Arcus deposit requires a registered API key for this address. Complete Setup (createApiKey) first.',\n )\n }\n}\n\nexport async function arcusAddressHasRegisteredApiKey(args: {\n chainId: number\n executorAddress: string\n}): Promise<boolean> {\n try {\n await assertArcusAddressRegisteredForDeposit({\n chainId: args.chainId,\n executorAddress: getAddress(args.executorAddress.trim() as `0x${string}`),\n })\n return true\n } catch {\n return false\n }\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../../../../src/protocols/evm/arcus/support.ts","../../../../src/protocols/evm/arcus/constants.ts","../../../../src/protocols/evm/arcus/api.ts","../../../../src/core/registry.ts","../../../../src/protocols/evm/arcus/index.ts","../../../../src/protocols/evm/arcus/markets.ts","../../../../src/protocols/evm/arcus/reads.ts","../../../../src/protocols/evm/arcus/orderSigning.ts","../../../../src/core/purpose.ts","../../../../src/core/envelope.ts","../../../../src/core/payloadSignEd25519Multisign.ts","../../../../src/protocols/evm/arcus/multisign.ts","../../../../src/protocols/evm/arcus/keygenPair.ts","../../../../src/protocols/evm/arcus/pendingClose.ts","../../../../src/protocols/evm/arcus/positionDisplay.ts","../../../../src/protocols/evm/arcus/spotMultisign.ts","../../../../src/protocols/evm/arcus/bridgeConstants.ts","../../../../src/protocols/evm/arcus/fundSigning.ts","../../../../src/chains/evm/routerSwapGas.ts","../../../../src/chains/evm/buildBatch.ts","../../../../src/core/eip712Multisign.ts","../../../../src/protocols/evm/arcus/fundMultisign.ts","../../../../src/protocols/evm/arcus/registration.ts"],"names":["ARCUS_SUPPORTED_CHAIN_IDS","ARCUS_PROTOCOL_ID","ARCUS_DEFAULT_OHLCV_INTERVAL","ARCUS_DEFAULT_LOOKBACK_DAYS","ARCUS_MAX_CANDLE_COUNT","ARCUS_DEFAULT_CANDLE_COUNT","ARCUS_PERP_OHLCV_INTERVALS","ARCUS_SPOT_OHLCV_INTERVALS","ARCUS_PERP_INTERVAL_MS","ARCUS_SPOT_INTERVAL_SEC","ARCUS_USDG_ADDRESS_4663","arcusSpotIndexerBaseUrl","arcusFetchPerpMarkets","getAddress","createPublicClient","http","erc20Abi","createHash","getClientIdFromKeyGenResult","stringToHex","hashMessage","ZERO_ADDRESS","gasLimitFromEstimateAndChainConfig","defineChain","fetchChainFeeParams","parseGwei","gweiToDecimalString","serializeTransaction","proposalTxParamsToFeeSnapshot","alignEip1559FeesWithLatestBase","keccak256","hashTypedData","parseAbi","encodeFunctionData"],"mappings":"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","file":"index.cjs","sourcesContent":["/** Robinhood Chain — Arcus perps + spot Stock Tokens. */\nexport const ARCUS_SUPPORTED_CHAIN_IDS = [4663] as const\n\nexport type ArcusSupportedChainId = (typeof ARCUS_SUPPORTED_CHAIN_IDS)[number]\n\nexport function isArcusChainSupported(chainId: number): chainId is ArcusSupportedChainId {\n return (ARCUS_SUPPORTED_CHAIN_IDS as readonly number[]).includes(chainId)\n}\n\nexport function arcusPerpApiBaseUrl(_chainId: number): string {\n return 'https://api.arcus.xyz'\n}\n\nexport function arcusSpotIndexerBaseUrl(_chainId: number): string {\n return 'https://indexer.spot.arcus.xyz'\n}\n\nexport function arcusApiMetaBaseUrl(_chainId: number): string {\n return 'https://api.arcus.xyz/v1/api-meta'\n}\n","export const ARCUS_PROTOCOL_ID = 'arcus' as const\n\nexport const ARCUS_DEFAULT_OHLCV_INTERVAL = '1h' as const\nexport const ARCUS_DEFAULT_LOOKBACK_DAYS = 14\nexport const ARCUS_MAX_CANDLE_COUNT = 1500\nexport const ARCUS_DEFAULT_CANDLE_COUNT = 200\n\nexport const ARCUS_PERP_OHLCV_INTERVALS = [\n '1m',\n '3m',\n '5m',\n '15m',\n '30m',\n '1h',\n '2h',\n '4h',\n '8h',\n '12h',\n '1d',\n '3d',\n '1w',\n] as const\n\nexport type ArcusPerpOhlcvInterval = (typeof ARCUS_PERP_OHLCV_INTERVALS)[number]\n\nexport const ARCUS_SPOT_OHLCV_INTERVALS = ['1m', '5m', '15m', '1h', '1d'] as const\n\nexport type ArcusSpotOhlcvInterval = (typeof ARCUS_SPOT_OHLCV_INTERVALS)[number]\n\nexport const ARCUS_PERP_INTERVAL_MS: Record<ArcusPerpOhlcvInterval, number> = {\n '1m': 60_000,\n '3m': 180_000,\n '5m': 300_000,\n '15m': 900_000,\n '30m': 1_800_000,\n '1h': 3_600_000,\n '2h': 7_200_000,\n '4h': 14_400_000,\n '8h': 28_800_000,\n '12h': 43_200_000,\n '1d': 86_400_000,\n '3d': 259_200_000,\n '1w': 604_800_000,\n}\n\nexport const ARCUS_SPOT_INTERVAL_SEC: Record<ArcusSpotOhlcvInterval, number> = {\n '1m': 60,\n '5m': 300,\n '15m': 900,\n '1h': 3600,\n '1d': 86_400,\n}\n\n/** Arcus collateral on Robinhood Chain (USDG). */\nexport const ARCUS_USDG_ADDRESS_4663 = '0x5fc5360D0400a0Fd4f2af552ADD042D716F1d168' as const\n","import type { ArcusPerpMarket, ArcusOhlcvCandle, ArcusSpotToken, ArcusLeverageEntry } from './types.js'\nimport {\n ARCUS_DEFAULT_CANDLE_COUNT,\n ARCUS_DEFAULT_OHLCV_INTERVAL,\n ARCUS_MAX_CANDLE_COUNT,\n ARCUS_PERP_INTERVAL_MS,\n type ArcusPerpOhlcvInterval,\n} from './constants.js'\nimport { arcusApiMetaBaseUrl, arcusPerpApiBaseUrl } from './support.js'\n\ntype ArcusRawCandle = {\n marketDisplayName?: string\n marketId?: number\n timeframe?: string\n openTime: number\n open: string\n high: string\n low: string\n close: string\n volume?: string\n isFinal?: boolean\n}\n\nasync function arcusJsonGet<T>(url: string): Promise<T> {\n const res = await fetch(url, { headers: { Accept: 'application/json' } })\n const text = await res.text()\n let body: unknown = null\n if (text.trim()) {\n try {\n body = JSON.parse(text)\n } catch {\n throw new Error(`Arcus API returned non-JSON (${res.status}): ${text.slice(0, 200)}`)\n }\n }\n if (!res.ok) {\n const err =\n body && typeof body === 'object' && body !== null && 'error' in body\n ? String((body as { error?: unknown }).error)\n : text.slice(0, 200)\n throw new Error(`Arcus API ${res.status}: ${err}`)\n }\n return body as T\n}\n\nexport function arcusMapPerpCandles(raw: ArcusRawCandle[] | null | undefined): ArcusOhlcvCandle[] {\n return (raw ?? []).map((c) => ({\n timestampMs: Math.floor(c.openTime / 1000),\n open: c.open,\n high: c.high,\n low: c.low,\n close: c.close,\n volume: c.volume ?? '0',\n ...(c.isFinal != null ? { isFinal: c.isFinal } : {}),\n }))\n}\n\nexport async function arcusFetchPerpMarkets(args: { chainId: number }): Promise<{ markets: ArcusPerpMarket[] }> {\n const base = arcusPerpApiBaseUrl(args.chainId)\n const data = await arcusJsonGet<{ markets?: ArcusPerpMarket[] }>(`${base}/v1/markets`)\n return { markets: data.markets ?? [] }\n}\n\nexport async function arcusFetchPerpCandles(args: {\n chainId: number\n market: string\n timeframe: ArcusPerpOhlcvInterval\n toMicros?: number\n fromMicros?: number\n countback?: number\n}): Promise<{ candles: ArcusOhlcvCandle[] }> {\n const base = arcusPerpApiBaseUrl(args.chainId)\n const toMicros = args.toMicros ?? Date.now() * 1000\n const countback = Math.min(args.countback ?? ARCUS_DEFAULT_CANDLE_COUNT, ARCUS_MAX_CANDLE_COUNT)\n const params = new URLSearchParams({\n market: args.market.trim(),\n timeframe: args.timeframe,\n to: String(toMicros),\n countback: String(countback),\n })\n if (args.fromMicros != null) {\n params.delete('countback')\n params.set('from', String(args.fromMicros))\n }\n const data = await arcusJsonGet<{ candles?: ArcusRawCandle[] }>(`${base}/v1/candles?${params}`)\n return { candles: arcusMapPerpCandles(data.candles) }\n}\n\nexport function arcusResolvePerpOhlcvWindow(args: {\n interval: ArcusPerpOhlcvInterval\n lookbackDays?: number\n lookbackHours?: number\n startTimeMs?: number\n endTimeMs?: number\n candleCount?: number\n}): { startTimeMs: number; endTimeMs: number; countback: number } {\n const endTimeMs = args.endTimeMs ?? Date.now()\n const intervalMs = ARCUS_PERP_INTERVAL_MS[args.interval] ?? ARCUS_PERP_INTERVAL_MS['15m']\n let startTimeMs: number\n if (args.startTimeMs != null) {\n startTimeMs = args.startTimeMs\n } else if (args.lookbackHours != null && args.lookbackHours > 0) {\n startTimeMs = endTimeMs - args.lookbackHours * 3_600_000\n } else {\n const days = args.lookbackDays ?? 14\n startTimeMs = endTimeMs - days * 86_400_000\n }\n const spanBars = Math.ceil((endTimeMs - startTimeMs) / intervalMs) + 1\n const countback = Math.min(\n args.candleCount ?? spanBars,\n ARCUS_MAX_CANDLE_COUNT,\n )\n return { startTimeMs, endTimeMs, countback }\n}\n\nexport async function arcusFetchPerpOhlcvRange(args: {\n chainId: number\n market: string\n interval?: ArcusPerpOhlcvInterval\n lookbackDays?: number\n lookbackHours?: number\n startTimeMs?: number\n endTimeMs?: number\n candleCount?: number\n}) {\n const interval = args.interval ?? ARCUS_DEFAULT_OHLCV_INTERVAL\n const window = arcusResolvePerpOhlcvWindow({ ...args, interval })\n const { candles } = await arcusFetchPerpCandles({\n chainId: args.chainId,\n market: args.market,\n timeframe: interval,\n toMicros: window.endTimeMs * 1000,\n fromMicros: args.startTimeMs != null ? window.startTimeMs * 1000 : undefined,\n countback: window.countback,\n })\n const sorted = [...candles].sort((a, b) => a.timestampMs - b.timestampMs)\n return {\n market: args.market.trim(),\n interval,\n marketKind: 'perp' as const,\n startTimeMs: sorted[0]?.timestampMs ?? window.startTimeMs,\n endTimeMs: sorted[sorted.length - 1]?.timestampMs ?? window.endTimeMs,\n expectedBars: window.countback,\n candleCount: sorted.length,\n latestCandle: sorted[sorted.length - 1] ?? null,\n candles: sorted,\n fetchedAtMs: Date.now(),\n dataSource: 'arcus' as const,\n }\n}\n\nexport async function arcusFetchAccountLeverages(args: {\n chainId: number\n address: string\n accountIndex?: number\n}): Promise<{ leverages: ArcusLeverageEntry[] }> {\n const base = arcusPerpApiBaseUrl(args.chainId)\n const params = new URLSearchParams({ address: args.address.trim() })\n if (args.accountIndex != null) {\n params.set('accountIndex', String(args.accountIndex))\n }\n const data = await arcusJsonGet<{ leverages?: ArcusLeverageEntry[] }>(`${base}/v1/leverages?${params}`)\n return { leverages: data.leverages ?? [] }\n}\n\nexport async function arcusFetchAllMids(args: { chainId: number }): Promise<Record<string, string>> {\n const base = arcusPerpApiBaseUrl(args.chainId)\n const data = await arcusJsonGet<{ mids?: Record<string, string> }>(`${base}/v1/mids`)\n return data?.mids ?? {}\n}\n\nexport async function arcusFetchAccount(args: { chainId: number; address: string }) {\n const base = arcusPerpApiBaseUrl(args.chainId)\n const params = new URLSearchParams({ address: args.address.trim() })\n return arcusJsonGet<Record<string, unknown>>(`${base}/v1/account?${params}`)\n}\n\nexport async function arcusFetchPositions(args: { chainId: number; address: string }) {\n const base = arcusPerpApiBaseUrl(args.chainId)\n const params = new URLSearchParams({ address: args.address.trim() })\n return arcusJsonGet<{ positions?: unknown[] }>(`${base}/v1/positions?${params}`)\n}\n\nexport async function arcusFetchOpenOrders(args: { chainId: number; address: string }) {\n const base = arcusPerpApiBaseUrl(args.chainId)\n const params = new URLSearchParams({ address: args.address.trim() })\n return arcusJsonGet<{ orders?: unknown[] }>(`${base}/v1/openOrders?${params}`)\n}\n\nexport async function arcusFetchApiKeys(args: { chainId: number; address: string }) {\n const base = arcusPerpApiBaseUrl(args.chainId)\n const params = new URLSearchParams({ address: args.address.trim() })\n return arcusJsonGet<{ apiKeys?: unknown[] }>(`${base}/v1/getApiKeys?${params}`)\n}\n\nexport async function arcusFetchSpotOverview(args: { chainId: number }): Promise<{ tokens: ArcusSpotToken[] }> {\n const base = arcusApiMetaBaseUrl(args.chainId)\n const data = await arcusJsonGet<ArcusSpotToken[]>(`${base}/spot/overview`)\n return { tokens: Array.isArray(data) ? data : [] }\n}\n\ntype ArcusSpotRawCandle = {\n t: number\n o: number\n h: number\n l: number\n c: number\n volume?: number\n}\n\nexport function arcusMapSpotCandles(raw: ArcusSpotRawCandle[] | null | undefined): ArcusOhlcvCandle[] {\n return (raw ?? []).map((c) => ({\n timestampMs: c.t * 1000,\n open: String(c.o),\n high: String(c.h),\n low: String(c.l),\n close: String(c.c),\n volume: c.volume != null ? String(c.volume) : '0',\n }))\n}\n\nexport async function arcusFetchSpotTokenCandles(args: {\n chainId: number\n tokenAddress: string\n resolution?: string\n fromSec?: number\n toSec?: number\n limit?: number\n}): Promise<{ candles: ArcusOhlcvCandle[]; ticker?: string; tokenAddress: string }> {\n const { arcusSpotIndexerBaseUrl } = await import('./support.js')\n const base = arcusSpotIndexerBaseUrl(args.chainId)\n const addr = args.tokenAddress.trim()\n const params = new URLSearchParams({\n resolution: args.resolution ?? '1h',\n networkId: String(args.chainId),\n })\n if (args.fromSec != null) params.set('from', String(args.fromSec))\n if (args.toSec != null) params.set('to', String(args.toSec))\n if (args.limit != null) {\n const toSec = args.toSec ?? Math.floor(Date.now() / 1000)\n const resSec = ({ '1m': 60, '5m': 300, '15m': 900, '1h': 3600, '1d': 86400 } as Record<string, number>)[\n args.resolution ?? '1h'\n ] ?? 3600\n params.set('from', String(toSec - args.limit * resSec))\n params.set('to', String(toSec))\n }\n const data = await arcusJsonGet<{\n address?: string\n candles?: ArcusSpotRawCandle[]\n }>(`${base}/token-candles/${addr}?${params}`)\n const candles = arcusMapSpotCandles(data.candles)\n return {\n tokenAddress: data.address ?? addr,\n candles: [...candles].sort((a, b) => a.timestampMs - b.timestampMs),\n }\n}\n\nexport async function arcusFetchSpotOhlcvRange(args: {\n chainId: number\n tokenAddress?: string\n ticker?: string\n interval?: string\n lookbackDays?: number\n candleCount?: number\n}) {\n let tokenAddress = args.tokenAddress?.trim()\n let ticker = args.ticker?.trim()\n if (!tokenAddress) {\n const { tokens } = await arcusFetchSpotOverview({ chainId: args.chainId })\n const match = tokens.find(\n (t) =>\n (ticker && t.ticker.toUpperCase() === ticker.toUpperCase()) ||\n (tokenAddress && t.contractAddress.toLowerCase() === tokenAddress.toLowerCase()),\n )\n if (!match) throw new Error(`Arcus spot token not found for ${ticker ?? tokenAddress ?? 'unknown'}.`)\n tokenAddress = match.contractAddress\n ticker = match.ticker\n }\n const interval = args.interval ?? '1h'\n const lookbackDays = args.lookbackDays ?? 14\n const toSec = Math.floor(Date.now() / 1000)\n const fromSec = toSec - lookbackDays * 86_400\n const { candles, tokenAddress: resolved } = await arcusFetchSpotTokenCandles({\n chainId: args.chainId,\n tokenAddress: tokenAddress!,\n resolution: interval,\n fromSec,\n toSec,\n limit: args.candleCount,\n })\n return {\n market: ticker ?? resolved,\n tokenAddress: resolved,\n interval,\n marketKind: 'spot' as const,\n startTimeMs: candles[0]?.timestampMs ?? fromSec * 1000,\n endTimeMs: candles[candles.length - 1]?.timestampMs ?? toSec * 1000,\n candleCount: candles.length,\n latestCandle: candles[candles.length - 1] ?? null,\n candles,\n fetchedAtMs: Date.now(),\n dataSource: 'arcus' as const,\n }\n}\n","import type { ProtocolModule } from './types.js'\n\nconst modules: ProtocolModule[] = []\n\nexport function registerProtocolModule(mod: ProtocolModule): void {\n const existing = modules.findIndex((m) => m.id === mod.id)\n if (existing >= 0) {\n modules[existing] = mod\n } else {\n modules.push(mod)\n }\n}\n\nexport function getProtocolModules(): readonly ProtocolModule[] {\n return modules\n}\n\nexport function getProtocolModule(id: string): ProtocolModule | undefined {\n return modules.find((m) => m.id === id)\n}\n\nexport function getActionsByChainCategory(category: string): ProtocolModule['actions'] {\n return modules.filter((m) => m.chainCategory === category).flatMap((m) => m.actions)\n}\n","import type { ProtocolModule } from '../../../core/types.js'\nimport { registerProtocolModule } from '../../../core/registry.js'\nimport { isArcusChainSupported } from './support.js'\n\nexport * from './support.js'\nexport * from './constants.js'\nexport * from './types.js'\nexport * from './api.js'\nexport * from './markets.js'\nexport * from './reads.js'\nexport * from './orderSigning.js'\nexport * from './multisign.js'\nexport * from './pendingClose.js'\nexport * from './positionDisplay.js'\nexport * from './spotMultisign.js'\nexport * from './bridgeConstants.js'\nexport * from './fundSigning.js'\nexport * from './fundMultisign.js'\nexport * from './registration.js'\n\nimport { ARCUS_PROTOCOL_ID } from './constants.js'\n\nexport const arcusProtocolModule: ProtocolModule = {\n id: ARCUS_PROTOCOL_ID,\n chainCategory: 'evm',\n isChainSupported(ctx) {\n if (ctx.chainCategory !== 'evm') return false\n const chainId = typeof ctx.chainId === 'number' ? ctx.chainId : Number(ctx.chainId)\n return Number.isFinite(chainId) && isArcusChainSupported(chainId)\n },\n isTokenSupported(token) {\n if (token.category !== 'evm') return false\n return token.kind === 'erc20' || token.kind === 'native'\n },\n actions: [\n {\n id: 'arcus.createApiKey',\n protocolId: ARCUS_PROTOCOL_ID,\n chainCategory: 'evm',\n description: 'Register Arcus Ed25519 API key (secp256k1 personal_sign + paired ed25519 KeyGen)',\n commonParams: ['keyGen', 'purposeText'],\n params: {\n secp256k1KeyGenId: { type: 'string', required: true, description: 'Custody secp256k1 KeyGen id' },\n ed25519KeyGenId: { type: 'string', required: true, description: 'Paired ed25519 KeyGen id (same GroupId)' },\n apiWalletName: { type: 'string', required: false, description: 'Label for the API key' },\n },\n },\n {\n id: 'arcus.placeOrder',\n protocolId: ARCUS_PROTOCOL_ID,\n chainCategory: 'evm',\n description: 'Place Arcus perp order with optional TP/SL (Ed25519 payload sign)',\n commonParams: ['keyGen', 'purposeText'],\n params: {\n secp256k1KeyGenId: { type: 'string', required: true, description: 'Custody secp256k1 KeyGen id' },\n ed25519KeyGenId: { type: 'string', required: true, description: 'Paired ed25519 KeyGen id' },\n market: { type: 'string', required: true, description: 'e.g. BTC-USD' },\n isBuy: { type: 'boolean', required: true, description: 'true for buy/long' },\n limitPxHuman: { type: 'string', required: true, description: 'Entry limit price' },\n szHuman: { type: 'string', required: true, description: 'Order size' },\n takeProfitTriggerPxHuman: { type: 'string', required: false, description: 'Optional TP trigger' },\n stopLossTriggerPxHuman: { type: 'string', required: false, description: 'Optional SL trigger' },\n },\n },\n {\n id: 'arcus.spotRfq',\n protocolId: ARCUS_PROTOCOL_ID,\n chainCategory: 'evm',\n description: 'Arcus spot Stock Token RFQ buy/sell',\n commonParams: ['keyGen', 'purposeText'],\n params: {\n secp256k1KeyGenId: { type: 'string', required: true, description: 'Custody secp256k1 KeyGen id' },\n ed25519KeyGenId: { type: 'string', required: true, description: 'Paired ed25519 KeyGen id' },\n ticker: { type: 'string', required: true, description: 'Spot ticker e.g. AAPL' },\n isBuy: { type: 'boolean', required: true, description: 'true for buy' },\n sizeHuman: { type: 'string', required: true, description: 'Token size' },\n limitPxHuman: { type: 'string', required: false, description: 'Optional limit price' },\n },\n },\n {\n id: 'arcus.close',\n protocolId: ARCUS_PROTOCOL_ID,\n chainCategory: 'evm',\n description: 'Close Arcus perp position with IoC reduce-only limit order',\n commonParams: ['keyGen', 'purposeText'],\n params: {\n secp256k1KeyGenId: { type: 'string', required: true, description: 'Custody secp256k1 KeyGen id' },\n ed25519KeyGenId: { type: 'string', required: true, description: 'Paired ed25519 KeyGen id' },\n market: { type: 'string', required: true, description: 'Perp market' },\n isLong: { type: 'boolean', required: true, description: 'true when closing a long position' },\n limitPxHuman: { type: 'string', required: true, description: 'Limit price for IoC close' },\n szHuman: { type: 'string', required: true, description: 'Size to close' },\n },\n },\n {\n id: 'arcus.cancelOrder',\n protocolId: ARCUS_PROTOCOL_ID,\n chainCategory: 'evm',\n description: 'Cancel Arcus perp order',\n commonParams: ['keyGen', 'purposeText'],\n params: {\n secp256k1KeyGenId: { type: 'string', required: true, description: 'Custody secp256k1 KeyGen id' },\n ed25519KeyGenId: { type: 'string', required: true, description: 'Paired ed25519 KeyGen id' },\n market: { type: 'string', required: true, description: 'Perp market' },\n orderId: { type: 'string', required: true, description: 'Server order id' },\n },\n },\n {\n id: 'arcus.setLeverage',\n protocolId: ARCUS_PROTOCOL_ID,\n chainCategory: 'evm',\n description: 'Set Arcus perp leverage for a market',\n commonParams: ['keyGen', 'purposeText'],\n params: {\n secp256k1KeyGenId: { type: 'string', required: true, description: 'Custody secp256k1 KeyGen id' },\n ed25519KeyGenId: { type: 'string', required: true, description: 'Paired ed25519 KeyGen id' },\n market: { type: 'string', required: true, description: 'Perp market' },\n leverage: { type: 'number', required: true, description: 'Target leverage' },\n },\n },\n {\n id: 'arcus.deposit',\n protocolId: ARCUS_PROTOCOL_ID,\n chainCategory: 'evm',\n description: 'Deposit USDG on Robinhood Chain into Arcus perp or spot collateral (approve + initiateDeposit). Requires registered API key.',\n commonParams: ['keyGen', 'purposeText', 'useCustomGas'],\n params: {\n usdHuman: { type: 'string', required: true, description: 'USD amount to deposit' },\n product: { type: 'string', required: false, description: 'perp (default) or spot' },\n },\n },\n {\n id: 'arcus.withdraw',\n protocolId: ARCUS_PROTOCOL_ID,\n chainCategory: 'evm',\n description: 'Withdraw USDG collateral from Arcus to wallet (EIP-712 + POST /v1/withdraw)',\n commonParams: ['keyGen', 'purposeText'],\n params: {\n usdHuman: { type: 'string', required: true, description: 'USD amount to withdraw' },\n product: { type: 'string', required: false, description: 'perp (default) or spot' },\n },\n },\n ],\n}\n\nregisterProtocolModule(arcusProtocolModule)\n","import { createPublicClient, erc20Abi, getAddress, http, type Address } from 'viem'\nimport { arcusFetchSpotOverview } from './api.js'\n\nexport const ARCUS_PERP_MARKET_STATUS_ONLINE = 'ONLINE'\n\nexport function arcusIsPerpMarketOnline(status: string | undefined): boolean {\n return String(status ?? '').trim().toUpperCase() === ARCUS_PERP_MARKET_STATUS_ONLINE\n}\n\nexport function arcusAssertPerpMarketOnline(market: { marketDisplayName: string; status: string }): void {\n if (!arcusIsPerpMarketOnline(market.status)) {\n const label = market.status.trim() || 'not ONLINE'\n throw new Error(`Arcus perp market ${market.marketDisplayName} is ${label} and cannot be used for new orders.`)\n }\n}\n\nconst ROBINHOOD_CHAIN = {\n id: 4663,\n name: 'Robinhood Chain',\n nativeCurrency: { name: 'Ether', symbol: 'ETH', decimals: 18 },\n rpcUrls: { default: { http: ['https://rpc.mainnet.chain.robinhood.com'] } },\n} as const\n\nexport function arcusMaxLeverageFromInitialMarginFraction(initialMarginFraction: string | undefined): number | null {\n const imf = Number(initialMarginFraction)\n if (!Number.isFinite(imf) || imf <= 0) return null\n return Math.max(1, Math.floor(1 / imf))\n}\n\nexport function formatArcusLeverageLabel(leverage: number | null | undefined): string | null {\n if (leverage == null || !Number.isFinite(leverage) || leverage <= 0) return null\n return `${Math.round(leverage)}x cross`\n}\n\n/** Resolve a mid price string from an all-mids map (handles BTC-USD vs BTC keys). */\nexport function arcusLookupMidFromMids(mids: Record<string, string>, market: string): string {\n const resolved = market.trim()\n if (!resolved) return ''\n const base = resolved.replace(/-USD$/i, '')\n return mids[resolved] ?? mids[base] ?? mids[`${base}-USD`] ?? ''\n}\n\nexport function parseArcusLeverageLabel(label: string | null | undefined): number | null {\n const match = String(label ?? '').match(/(\\d+(?:\\.\\d+)?)/)\n if (!match) return null\n const n = Number(match[1])\n return Number.isFinite(n) && n > 0 ? n : null\n}\n\nexport function arcusResolveEffectiveLeverage(args: {\n marketDisplayName: string\n leverages: Array<{ marketDisplayName: string; marketId: number; leverage: number }>\n markets: Array<{ marketDisplayName: string; marketId: number; initialMarginFraction?: string }>\n}): { leverage: number | null; leverageLabel: string | null; maxLeverage: number | null } {\n const entry = args.leverages.find((l) => l.marketDisplayName === args.marketDisplayName)\n const marketRow = args.markets.find((m) => m.marketDisplayName === args.marketDisplayName)\n const leverage = entry?.leverage ?? null\n return {\n leverage,\n leverageLabel: formatArcusLeverageLabel(leverage),\n maxLeverage: arcusMaxLeverageFromInitialMarginFraction(marketRow?.initialMarginFraction),\n }\n}\n\nexport async function arcusSearchPerpMarkets(args: {\n chainId: number\n query: string\n limit?: number\n}) {\n const { arcusFetchPerpMarkets } = await import('./api.js')\n const q = args.query.trim().toUpperCase()\n const { markets } = await arcusFetchPerpMarkets({ chainId: args.chainId })\n const filtered = markets.filter(\n (m) =>\n m.marketDisplayName.toUpperCase().includes(q) ||\n m.baseAsset.toUpperCase().includes(q) ||\n String(m.marketId) === q,\n )\n const limit = args.limit ?? 20\n return { markets: filtered.slice(0, limit), query: args.query }\n}\n\nexport async function arcusSearchSpotMarkets(args: {\n chainId: number\n query: string\n limit?: number\n}) {\n const q = args.query.trim().toUpperCase()\n const { tokens } = await arcusFetchSpotOverview({ chainId: args.chainId })\n const filtered = tokens.filter(\n (t) =>\n t.ticker.toUpperCase().includes(q) ||\n t.name.toUpperCase().includes(q) ||\n t.contractAddress.toLowerCase().includes(q.toLowerCase()),\n )\n const limit = args.limit ?? 20\n return { tokens: filtered.slice(0, limit), query: args.query }\n}\n\nexport async function arcusFetchSpotBalances(args: { chainId: number; executorAddress: string }) {\n const executor = getAddress(args.executorAddress)\n const { tokens } = await arcusFetchSpotOverview({ chainId: args.chainId })\n const client = createPublicClient({\n chain: ROBINHOOD_CHAIN,\n transport: http(ROBINHOOD_CHAIN.rpcUrls.default.http[0]),\n })\n const holdings: Array<{\n ticker: string\n contractAddress: string\n name: string\n balanceHuman: string\n decimals: number\n }> = []\n for (const token of tokens) {\n let addr: Address\n try {\n addr = getAddress(token.contractAddress)\n } catch {\n continue\n }\n try {\n const [balance, decimals] = await Promise.all([\n client.readContract({ address: addr, abi: erc20Abi, functionName: 'balanceOf', args: [executor] }),\n client.readContract({ address: addr, abi: erc20Abi, functionName: 'decimals' }),\n ])\n if (balance > 0n) {\n const dec = Number(decimals)\n const human = Number(balance) / 10 ** dec\n holdings.push({\n ticker: token.ticker,\n contractAddress: addr,\n name: token.name,\n balanceHuman: human.toString(),\n decimals: dec,\n })\n }\n } catch {\n // skip unreadable tokens\n }\n }\n return { holdings, executorAddress: executor }\n}\n\nexport function arcusResolvePerpMarketDisplayName(\n markets: Array<{ marketDisplayName: string; baseAsset: string }>,\n query: string,\n): string | null {\n const q = query.trim().toUpperCase()\n if (!q) return null\n const exact = markets.find((m) => m.marketDisplayName.toUpperCase() === q)\n if (exact) return exact.marketDisplayName\n const base = markets.find((m) => m.baseAsset.toUpperCase() === q)\n if (base) return base.marketDisplayName\n const partial = markets.find((m) => m.marketDisplayName.toUpperCase().includes(q))\n return partial?.marketDisplayName ?? null\n}\n","import {\n arcusFetchAccount,\n arcusFetchAccountLeverages,\n arcusFetchAllMids,\n arcusFetchApiKeys,\n arcusFetchOpenOrders,\n arcusFetchPerpMarkets,\n arcusFetchPerpOhlcvRange,\n arcusFetchPositions,\n arcusFetchSpotOhlcvRange,\n arcusFetchSpotOverview,\n} from './api.js'\nimport {\n arcusFetchSpotBalances,\n arcusIsPerpMarketOnline,\n arcusLookupMidFromMids,\n arcusMaxLeverageFromInitialMarginFraction,\n arcusResolveEffectiveLeverage,\n arcusResolvePerpMarketDisplayName,\n arcusSearchPerpMarkets,\n arcusSearchSpotMarkets,\n} from './markets.js'\nimport { ARCUS_DEFAULT_OHLCV_INTERVAL, type ArcusPerpOhlcvInterval } from './constants.js'\n\nfunction wrapOhlcvEnvelope(ohlcv: Record<string, unknown>) {\n return {\n ohlcv,\n dataSource: 'arcus',\n chainId: 4663,\n }\n}\n\nexport async function arcusFetchMarketsSummary(args: { chainId: number }) {\n const { markets } = await arcusFetchPerpMarkets(args)\n return {\n markets: markets.map((m) => ({\n marketDisplayName: m.marketDisplayName,\n marketId: m.marketId,\n baseAsset: m.baseAsset,\n category: m.category,\n status: m.status,\n isOnline: arcusIsPerpMarketOnline(m.status),\n maxLeverage: arcusMaxLeverageFromInitialMarginFraction(m.initialMarginFraction),\n markPrice: m.markPrice ?? null,\n })),\n marketKind: 'perp' as const,\n }\n}\n\nexport async function arcusSearchMarketsSummary(args: { chainId: number; query: string; limit?: number }) {\n return arcusSearchPerpMarkets(args)\n}\n\nexport async function arcusSpotFetchMarketsSummary(args: { chainId: number }) {\n const { tokens } = await arcusFetchSpotOverview(args)\n return {\n tokens: tokens.map((t) => ({\n ticker: t.ticker,\n contractAddress: t.contractAddress,\n name: t.name,\n logoUrl: t.logoUrl ?? null,\n price: t.quote?.price ?? null,\n })),\n marketKind: 'spot' as const,\n }\n}\n\nexport async function arcusSpotSearchMarketsSummary(args: { chainId: number; query: string; limit?: number }) {\n return arcusSearchSpotMarkets(args)\n}\n\nexport async function arcusFetchOhlcvSummary(args: {\n chainId: number\n market?: string\n coin?: string\n interval?: ArcusPerpOhlcvInterval\n lookbackDays?: number\n lookbackHours?: number\n startTimeMs?: number\n endTimeMs?: number\n candleCount?: number\n}) {\n const { markets } = await arcusFetchPerpMarkets({ chainId: args.chainId })\n const rawMarket = (args.market ?? args.coin ?? '').trim()\n const resolved =\n arcusResolvePerpMarketDisplayName(markets, rawMarket) ??\n (rawMarket.includes('-') ? rawMarket : rawMarket ? `${rawMarket.toUpperCase()}-USD` : '')\n if (!resolved) throw new Error('Arcus perp market is required (market or coin).')\n const ohlcv = await arcusFetchPerpOhlcvRange({ ...args, market: resolved })\n return {\n ...wrapOhlcvEnvelope(ohlcv),\n resolvedMarket: resolved,\n }\n}\n\nexport async function arcusSpotFetchOhlcvSummary(args: {\n chainId: number\n tokenAddress?: string\n ticker?: string\n currencySymbol?: string\n interval?: string\n lookbackDays?: number\n candleCount?: number\n}) {\n const ticker = args.ticker ?? args.currencySymbol\n const ohlcv = await arcusFetchSpotOhlcvRange({\n chainId: args.chainId,\n tokenAddress: args.tokenAddress,\n ticker,\n interval: args.interval,\n lookbackDays: args.lookbackDays,\n candleCount: args.candleCount,\n })\n return wrapOhlcvEnvelope(ohlcv)\n}\n\nexport async function arcusFetchMarketSnapshotSummary(args: {\n chainId: number\n market?: string\n coin?: string\n interval?: ArcusPerpOhlcvInterval\n candleLimit?: number\n}) {\n const { markets } = await arcusFetchPerpMarkets({ chainId: args.chainId })\n const rawMarket = (args.market ?? args.coin ?? '').trim()\n const resolved =\n arcusResolvePerpMarketDisplayName(markets, rawMarket) ??\n (rawMarket.includes('-') ? rawMarket : `${rawMarket.toUpperCase()}-USD`)\n const mids = await arcusFetchAllMids({ chainId: args.chainId })\n const mid = arcusLookupMidFromMids(mids, resolved)\n const ohlcv = await arcusFetchPerpOhlcvRange({\n chainId: args.chainId,\n market: resolved,\n interval: args.interval ?? ARCUS_DEFAULT_OHLCV_INTERVAL,\n candleCount: args.candleLimit ?? 48,\n })\n return {\n snapshot: {\n market: resolved,\n midUsd: mid,\n interval: ohlcv.interval,\n latestCandle: ohlcv.latestCandle,\n candles: ohlcv.candles,\n candleCount: ohlcv.candleCount,\n fetchedAtMs: Date.now(),\n },\n resolvedMarket: resolved,\n }\n}\n\nfunction withAddress<T extends { executorAddress: string }>(args: T) {\n return { ...args, address: args.executorAddress }\n}\n\nexport async function arcusFetchAccountSummary(args: { chainId: number; executorAddress: string }) {\n const account = await arcusFetchAccount(withAddress(args))\n return { account, executorAddress: args.executorAddress }\n}\n\nexport async function arcusFetchPositionsSummary(args: { chainId: number; executorAddress: string }) {\n const data = await arcusFetchPositions(withAddress(args))\n return { positions: data.positions ?? [], executorAddress: args.executorAddress }\n}\n\nexport async function arcusFetchOpenOrdersSummary(args: { chainId: number; executorAddress: string }) {\n const data = await arcusFetchOpenOrders(withAddress(args))\n return { orders: data.orders ?? [], executorAddress: args.executorAddress }\n}\n\nexport async function arcusFetchLeveragesSummary(args: {\n chainId: number\n executorAddress: string\n accountIndex?: number\n}) {\n const { leverages } = await arcusFetchAccountLeverages({\n chainId: args.chainId,\n address: args.executorAddress,\n accountIndex: args.accountIndex,\n })\n return { leverages, executorAddress: args.executorAddress }\n}\n\nexport async function arcusFetchOpenContextSummary(args: {\n chainId: number\n executorAddress: string\n market?: string\n accountIndex?: number\n}) {\n const addrArgs = withAddress(args)\n const accountIndex = args.accountIndex ?? 0\n const [account, positions, orders, apiKeys, leveragesResult, marketsResult] = await Promise.all([\n arcusFetchAccount(addrArgs).catch(() => null),\n arcusFetchPositions(addrArgs).catch(() => ({ positions: [] })),\n arcusFetchOpenOrders(addrArgs).catch(() => ({ orders: [] })),\n arcusFetchApiKeys(addrArgs).catch(() => ({ apiKeys: [] })),\n arcusFetchAccountLeverages({\n chainId: args.chainId,\n address: args.executorAddress,\n accountIndex,\n }).catch(() => ({ leverages: [] })),\n arcusFetchPerpMarkets({ chainId: args.chainId }).catch(() => ({ markets: [] })),\n ])\n\n const rawMarket = (args.market ?? '').trim()\n let activeAsset = null\n if (rawMarket) {\n const resolved =\n arcusResolvePerpMarketDisplayName(marketsResult.markets, rawMarket) ??\n (rawMarket.includes('-') ? rawMarket : `${rawMarket.toUpperCase()}-USD`)\n const marketRow = marketsResult.markets.find((m) => m.marketDisplayName === resolved)\n const effective = arcusResolveEffectiveLeverage({\n marketDisplayName: resolved,\n leverages: leveragesResult.leverages,\n markets: marketsResult.markets,\n })\n activeAsset = {\n market: resolved,\n leverage: effective.leverage,\n leverageLabel: effective.leverageLabel,\n maxLeverage: effective.maxLeverage,\n markPrice: marketRow?.markPrice ?? null,\n }\n }\n\n return {\n account,\n positions: positions.positions ?? [],\n orders: orders.orders ?? [],\n apiKeys: apiKeys.apiKeys ?? [],\n leverages: leveragesResult.leverages,\n activeAsset,\n executorAddress: args.executorAddress,\n hasRegisteredApiKey: Array.isArray(apiKeys.apiKeys) && apiKeys.apiKeys.length > 0,\n }\n}\n\nexport async function arcusSpotFetchBalancesSummary(args: { chainId: number; executorAddress: string }) {\n return arcusFetchSpotBalances(args)\n}\n","import { createHash } from 'node:crypto'\nimport { getAddress, type Address } from 'viem'\n\n/** Compact Arcus ordersign canonical JSON (sorted keys, no whitespace). */\nexport function arcusCanonicalJson(payload: Record<string, unknown>): string {\n const keys = Object.keys(payload).sort()\n const parts: string[] = []\n for (const k of keys) {\n const v = payload[k]\n if (v === undefined || v === null) continue\n let encoded: string\n if (typeof v === 'string') {\n encoded = JSON.stringify(v.toLowerCase().startsWith('0x') ? v.toLowerCase() : v)\n } else {\n encoded = JSON.stringify(v)\n }\n parts.push(`${JSON.stringify(k)}:${encoded}`)\n }\n return `{${parts.join(',')}}`\n}\n\nexport function arcusPayloadMessageHex(canonicalJson: string): string {\n return `0x${Buffer.from(canonicalJson, 'utf8').toString('hex')}`\n}\n\n/** MPC Givre uses 32-byte message input; Arcus signs raw UTF-8 — use raw bytes as signing message when variable-length Givre is enabled. */\nexport function arcusPayloadMsgHashHex(canonicalJson: string): string {\n return createHash('sha256').update(canonicalJson, 'utf8').digest('hex')\n}\n\nexport function arcusNanosecondTimestamp(): string {\n return String(BigInt(Date.now()) * 1_000_000n)\n}\n\nexport function humanPriceToQuantums(priceHuman: string, tickSize: string): bigint {\n const price = Number(priceHuman)\n const tick = Number(tickSize)\n if (!Number.isFinite(price) || !Number.isFinite(tick) || tick <= 0) {\n throw new Error(`Invalid price or tickSize: ${priceHuman}, ${tickSize}`)\n }\n return BigInt(Math.round(price / tick))\n}\n\nexport function humanSizeToQuantums(szHuman: string, stepSize: string): bigint {\n const sz = Number(szHuman)\n const step = Number(stepSize)\n if (!Number.isFinite(sz) || !Number.isFinite(step) || step <= 0) {\n throw new Error(`Invalid size or stepSize: ${szHuman}, ${stepSize}`)\n }\n return BigInt(Math.round(sz / step))\n}\n\nexport type ArcusPlaceOrderWireArgs = {\n address: Address\n accountIndex?: number\n clientId?: string\n timestampNs: string\n grouping?: number\n marketId: number\n op?: number\n priceQuantums: bigint\n sizeQuantums: bigint\n reduceOnly?: boolean\n side: number\n /** Wire field `t` — time in force: 0 GTT, 1 FOK, 2 IOC, 3 ALO. */\n orderType?: number\n timeInForce?: number\n version?: number\n}\n\nexport function buildArcusPlaceOrderPayload(args: ArcusPlaceOrderWireArgs): Record<string, unknown> {\n const timeInForce = args.timeInForce ?? args.orderType ?? 0\n const ct = BigInt(args.timestampNs)\n const payload: Record<string, unknown> = {\n ad: getAddress(args.address),\n ai: args.accountIndex ?? 0,\n ct: Number(ct),\n g: args.grouping ?? 0,\n m: args.marketId,\n op: args.op ?? 1,\n p: Number(args.priceQuantums),\n q: Number(args.sizeQuantums),\n r: args.reduceOnly ? 1 : 0,\n s: args.side,\n t: timeInForce,\n v: args.version ?? 1,\n }\n if (args.clientId?.trim()) payload.c = args.clientId.trim()\n return payload\n}\n\nexport function buildArcusCancelOrderPayload(args: {\n address: Address\n accountIndex?: number\n clientId?: string\n timestampNs: string\n marketId: number\n orderId: string\n}): Record<string, unknown> {\n const payload: Record<string, unknown> = {\n ad: getAddress(args.address),\n ai: args.accountIndex ?? 0,\n ct: Number(BigInt(args.timestampNs)),\n id: args.orderId,\n m: args.marketId,\n op: 2,\n v: 1,\n }\n if (args.clientId?.trim()) payload.c = args.clientId.trim()\n return payload\n}\n\nexport function buildArcusTpslPayload(args: ArcusPlaceOrderWireArgs & { tpslType: 'STOP_LOSS' | 'TAKE_PROFIT' }): Record<string, unknown> {\n const base = buildArcusPlaceOrderPayload({ ...args, op: 4, reduceOnly: true })\n return { ...base, tpslType: args.tpslType }\n}\n","/** Merge user purpose text with an optional batch / protocol suffix. */\nexport function mergePurposeText(purposeText: string | undefined, purposeSuffix?: string): string {\n const t = (purposeText ?? '').trim()\n const suffix = (purposeSuffix ?? '').trim()\n if (!suffix) return t\n return t ? `${t}\\n\\n${suffix}` : suffix\n}\n","import type { ChainCategory, MultisignBuildResult, KeyGenSubset } from './types.js'\nimport { getClientIdFromKeyGenResult } from '@continuumdao/continuum-node-sdk'\nimport { mergePurposeText } from './purpose.js'\n\nexport interface MultisignLeg {\n msgHash: string\n msgRaw: string\n destinationAddress: string\n signatureText: string\n audit: Record<string, unknown>\n feeSnapshot: Record<string, unknown>\n proposalTxParams?: Record<string, unknown>\n /** Payable value wei string for first leg only when relevant */\n valueWei?: bigint\n}\n\nexport interface ChainCategoryBuildInput {\n keyGen: KeyGenSubset\n purposeText: string\n purposeSuffix?: string\n destinationChainID: string\n legs: MultisignLeg[]\n extraJSON?: Record<string, unknown>\n /** Top-level destination address (first leg destination if omitted) */\n destinationAddress?: string\n /** Unix seconds (UTC) for mpc-auth multiSignRequest expiryDate. */\n expiryDate?: number\n}\n\nexport interface ChainCategoryModule {\n category: ChainCategory\n finalizeMultisign(input: ChainCategoryBuildInput): MultisignBuildResult\n}\n\n/**\n * Assemble mpc-auth `bodyForSign` from category-built legs.\n * Supports single-tx and batch (messageHashes / messageRawBatch / proposalTxParams).\n */\nexport function finalizeMultisign(input: ChainCategoryBuildInput): MultisignBuildResult {\n const { keyGen, destinationChainID, legs } = input\n if (legs.length === 0) {\n throw new Error('finalizeMultisign requires at least one leg')\n }\n\n const ph = (keyGen.pubkeyhex ?? '').trim()\n if (!ph) throw new Error('keyGen pubKey (pubkeyhex) is required')\n\n const keyList = keyGen.keylist ?? []\n const clientId = getClientIdFromKeyGenResult(keyGen)\n const first = legs[0]!\n\n const messageHashes = legs.map((l) => l.msgHash)\n const messageRawBatch = legs.map((l) => l.msgRaw)\n const batchMeta = legs.map((l) => ({\n destinationAddress: l.destinationAddress,\n signatureText: l.signatureText,\n ...l.audit,\n }))\n\n const proposalTxParams = legs\n .map((l) => l.proposalTxParams)\n .filter((p): p is Record<string, unknown> => p != null && typeof p === 'object')\n\n const extraPayload: Record<string, unknown> = {\n batchMeta,\n ...(input.extraJSON ?? {}),\n }\n const extraJSON = JSON.stringify(extraPayload, (_, v) => (typeof v === 'bigint' ? v.toString() : v))\n\n const bodyForSign: Record<string, unknown> = {\n keyList,\n pubKey: ph,\n msgHash: messageHashes[0],\n msgRaw: first.msgRaw,\n destinationChainID,\n destinationAddress: input.destinationAddress ?? first.destinationAddress,\n extraJSON,\n signatureText: first.signatureText,\n purpose: mergePurposeText(input.purposeText, input.purposeSuffix),\n ...first.feeSnapshot,\n }\n\n if (legs.length > 1) {\n bodyForSign.messageHashes = messageHashes\n bodyForSign.messageRawBatch = messageRawBatch\n }\n\n if (proposalTxParams.length > 0) {\n bodyForSign.proposalTxParams = proposalTxParams\n }\n\n const valueWei = first.valueWei\n if (valueWei != null && valueWei > 0n) {\n bodyForSign.value = valueWei.toString()\n }\n\n if (clientId) bodyForSign.clientId = clientId\n\n if (input.expiryDate != null && input.expiryDate > 0) {\n bodyForSign.expiryDate = Math.floor(input.expiryDate)\n }\n\n return { bodyForSign, messageToSign: JSON.stringify(bodyForSign) }\n}\n\nexport const coreChainCategoryModule: ChainCategoryModule = {\n category: 'evm',\n finalizeMultisign,\n}\n","import { stringToHex } from 'viem'\nimport type { KeyGenSubset, MultisignBuildResult } from './types.js'\nimport { finalizeMultisign } from './envelope.js'\n\nexport const PAYLOAD_SIGN_ED25519_REQUEST_KIND = 'payload_sign_ed25519' as const\n\nexport type PayloadSignEd25519Delivery = Record<string, unknown> & { kind: string }\n\nexport type BuildPayloadSignEd25519MultisignBodyArgs = {\n keyGen: KeyGenSubset\n purposeText: string\n purposeSuffix?: string\n destinationChainID: string\n destinationAddress: string\n /** UTF-8 bytes to sign (Arcus canonical JSON). */\n messageUtf8: string\n /** secp256k1 pub key hex for billing when signing with paired ed25519 KeyGen. */\n billingKeyGenPubKey?: string\n delivery: PayloadSignEd25519Delivery\n audit?: Record<string, unknown>\n expiryDate?: number\n signatureText?: string\n}\n\nfunction msgHashNo0xFromBytes(bytes: Uint8Array): string {\n return Buffer.from(bytes).toString('hex')\n}\n\nfunction payloadMsgRawHex(messageUtf8: string, delivery: PayloadSignEd25519Delivery): string {\n const envelope = {\n version: 1,\n messageUtf8,\n delivery,\n }\n return stringToHex(JSON.stringify(envelope))\n}\n\n/**\n * Build mpc-auth multiSignRequest for Ed25519 FROST signing over variable-length UTF-8 (Arcus Scheme 1).\n * `msgHash` is hex of the raw message bytes (not SHA-256); mpc-auth givre worker signs these bytes directly.\n */\nexport function buildPayloadSignEd25519MultisignBody(\n args: BuildPayloadSignEd25519MultisignBodyArgs,\n): MultisignBuildResult {\n const messageBytes = Buffer.from(args.messageUtf8, 'utf8')\n const msgHash = msgHashNo0xFromBytes(messageBytes)\n\n const extraJSON: Record<string, unknown> = {\n signRequestKind: PAYLOAD_SIGN_ED25519_REQUEST_KIND,\n payloadSignEd25519: {\n version: 1,\n messageHex: msgHash,\n messageLength: messageBytes.length,\n },\n delivery: args.delivery,\n }\n if (args.billingKeyGenPubKey?.trim()) {\n extraJSON.billingKeyGenPubKey = args.billingKeyGenPubKey.trim()\n }\n\n return finalizeMultisign({\n keyGen: args.keyGen,\n purposeText: args.purposeText,\n purposeSuffix: args.purposeSuffix,\n destinationChainID: args.destinationChainID,\n destinationAddress: args.destinationAddress,\n extraJSON,\n expiryDate: args.expiryDate,\n legs: [\n {\n msgHash,\n msgRaw: payloadMsgRawHex(args.messageUtf8, args.delivery),\n destinationAddress: args.destinationAddress,\n signatureText: args.signatureText ?? 'Arcus Ed25519 payload sign',\n audit: {\n kind: 'PAYLOAD_SIGN_ED25519',\n deliveryKind: args.delivery.kind,\n messageLength: messageBytes.length,\n ...(args.audit ?? {}),\n },\n feeSnapshot: {},\n },\n ],\n })\n}\n","import { getAddress, hashMessage, type Address } from 'viem'\nimport type { KeyGenSubset } from '../../../core/types.js'\nimport { finalizeMultisign } from '../../../core/envelope.js'\nimport { buildPayloadSignEd25519MultisignBody, PAYLOAD_SIGN_ED25519_REQUEST_KIND } from '../../../core/payloadSignEd25519Multisign.js'\nimport { arcusFetchPerpMarkets } from './api.js'\nimport { arcusAssertPerpMarketOnline, arcusResolvePerpMarketDisplayName } from './markets.js'\nimport {\n arcusCanonicalJson,\n arcusNanosecondTimestamp,\n buildArcusCancelOrderPayload,\n buildArcusPlaceOrderPayload,\n buildArcusTpslPayload,\n humanPriceToQuantums,\n humanSizeToQuantums,\n} from './orderSigning.js'\nimport { assertArcusPairedKeyGens } from './keygenPair.js'\nimport { ARCUS_PROTOCOL_ID } from './constants.js'\n\nconst ZERO_ADDRESS = '0x0000000000000000000000000000000000000000' as Address\n\ntype ArcusMultisignCommon = {\n chainId: number\n purposeText: string\n secp256k1KeyGen: KeyGenSubset & { groupId?: string; keyType?: string }\n ed25519KeyGen: KeyGenSubset & { groupId?: string; keyType?: string }\n executorAddress: Address\n expiryDate?: number\n}\n\nexport type ArcusCreateApiKeyMultisignArgs = ArcusMultisignCommon & {\n ed25519PubKeyHex: string\n apiWalletName?: string\n validUntilMs?: number\n}\n\nexport type ArcusPlaceOrderMultisignArgs = ArcusMultisignCommon & {\n market: string\n isBuy: boolean\n limitPxHuman: string\n szHuman: string\n takeProfitTriggerPxHuman?: string\n stopLossTriggerPxHuman?: string\n leverageHuman?: string\n clientId?: string\n accountIndex?: number\n /** Wire `t`: 0 GTT, 1 FOK, 2 IOC, 3 ALO. Default GTT for limits. */\n timeInForce?: number\n /** @deprecated use timeInForce */\n orderType?: number\n /** @deprecated use timeInForce */\n tif?: number\n reduceOnly?: boolean\n}\n\nexport type ArcusCloseOrderMultisignArgs = Omit<\n ArcusPlaceOrderMultisignArgs,\n 'isBuy' | 'takeProfitTriggerPxHuman' | 'stopLossTriggerPxHuman' | 'reduceOnly'\n> & {\n isLong: boolean\n}\n\nexport type ArcusCancelOrderMultisignArgs = ArcusMultisignCommon & {\n market: string\n orderId: string\n clientId?: string\n accountIndex?: number\n}\n\nexport type ArcusSetLeverageMultisignArgs = ArcusMultisignCommon & {\n market: string\n leverage: number\n accountIndex?: number\n}\n\nasync function resolvePerpMarket(chainId: number, market: string) {\n const { markets } = await arcusFetchPerpMarkets({ chainId })\n const resolved =\n arcusResolvePerpMarketDisplayName(markets, market) ??\n (market.includes('-') ? market : `${market.toUpperCase()}-USD`)\n const row = markets.find((m) => m.marketDisplayName === resolved)\n if (!row) throw new Error(`Arcus perp market not found: ${market}`)\n return row\n}\n\nfunction scheme2CanonicalJson(body: Record<string, unknown>): string {\n return arcusCanonicalJson(body)\n}\n\nexport async function buildArcusCreateApiKeyMultisign(args: ArcusCreateApiKeyMultisignArgs) {\n const paired = assertArcusPairedKeyGens({\n secp256k1KeyGen: args.secp256k1KeyGen,\n ed25519KeyGen: args.ed25519KeyGen,\n })\n const address = getAddress(args.executorAddress)\n const publicKey = args.ed25519PubKeyHex.trim().replace(/^0x/i, '')\n if (publicKey.length !== 64) {\n throw new Error('ed25519PubKeyHex must be 64 hex chars (32-byte Ed25519 public key)')\n }\n const validUntil = args.validUntilMs ?? Date.now() + 365 * 86_400_000\n const body = {\n address: address.toLowerCase(),\n publicKey,\n apiWalletName: (args.apiWalletName ?? 'Continuum').trim(),\n validUntil,\n }\n const canonical = arcusCanonicalJson(body)\n const digest = hashMessage(canonical)\n const msgHash = digest.startsWith('0x') ? digest.slice(2) : digest\n\n return finalizeMultisign({\n keyGen: paired.secp256k1,\n purposeText: args.purposeText,\n destinationChainID: String(args.chainId),\n destinationAddress: address,\n expiryDate: args.expiryDate,\n extraJSON: {\n signRequestKind: 'personal_sign',\n delivery: {\n kind: 'arcus_create_api_key',\n chainId: args.chainId,\n body,\n canonical,\n },\n },\n legs: [\n {\n msgHash,\n msgRaw: `0x${Buffer.from(canonical, 'utf8').toString('hex')}`,\n destinationAddress: address,\n signatureText: 'Arcus createApiKey personal_sign',\n audit: {\n kind: 'PERSONAL_SIGN',\n protocol: ARCUS_PROTOCOL_ID,\n action: 'createApiKey',\n address,\n publicKey,\n },\n feeSnapshot: {},\n },\n ],\n })\n}\n\nexport async function buildArcusPlaceOrderMultisign(args: ArcusPlaceOrderMultisignArgs) {\n const paired = assertArcusPairedKeyGens({\n secp256k1KeyGen: args.secp256k1KeyGen,\n ed25519KeyGen: args.ed25519KeyGen,\n })\n const marketRow = await resolvePerpMarket(args.chainId, args.market)\n arcusAssertPerpMarketOnline(marketRow)\n const address = getAddress(args.executorAddress)\n const timestampNs = arcusNanosecondTimestamp()\n const goodTilNs = String(BigInt(timestampNs) + 90n * 86_400n * 1_000_000_000n)\n const timeInForce = args.timeInForce ?? args.tif ?? args.orderType ?? 0\n const tp = args.takeProfitTriggerPxHuman?.trim()\n const sl = args.stopLossTriggerPxHuman?.trim()\n if (args.reduceOnly && (tp || sl)) {\n throw new Error('reduceOnly cannot be combined with takeProfitTriggerPxHuman or stopLossTriggerPxHuman.')\n }\n const priceQuantums = humanPriceToQuantums(args.limitPxHuman, marketRow.tickSize)\n const sizeQuantums = humanSizeToQuantums(args.szHuman, marketRow.stepSize)\n const entryPayload = buildArcusPlaceOrderPayload({\n address,\n accountIndex: args.accountIndex,\n clientId: args.clientId,\n timestampNs,\n marketId: marketRow.marketId,\n priceQuantums,\n sizeQuantums,\n side: args.isBuy ? 0 : 1,\n timeInForce,\n reduceOnly: args.reduceOnly,\n grouping: 0,\n })\n entryPayload.g = Number(goodTilNs)\n\n const legs: Array<{ canonical: string; audit: Record<string, unknown> }> = [\n {\n canonical: arcusCanonicalJson(entryPayload),\n audit: { leg: 'entry', market: marketRow.marketDisplayName },\n },\n ]\n\n if (tp) {\n const tpPayload = buildArcusTpslPayload({\n address,\n accountIndex: args.accountIndex,\n clientId: args.clientId,\n timestampNs,\n marketId: marketRow.marketId,\n priceQuantums: humanPriceToQuantums(tp, marketRow.tickSize),\n sizeQuantums,\n side: args.isBuy ? 1 : 0,\n orderType: 0,\n grouping: 0,\n tpslType: 'TAKE_PROFIT',\n })\n tpPayload.g = Number(goodTilNs)\n legs.push({\n canonical: arcusCanonicalJson(tpPayload),\n audit: { leg: 'takeProfit', triggerPxHuman: tp },\n })\n }\n if (sl) {\n const slPayload = buildArcusTpslPayload({\n address,\n accountIndex: args.accountIndex,\n clientId: args.clientId,\n timestampNs,\n marketId: marketRow.marketId,\n priceQuantums: humanPriceToQuantums(sl, marketRow.tickSize),\n sizeQuantums,\n side: args.isBuy ? 1 : 0,\n orderType: 0,\n grouping: 0,\n tpslType: 'STOP_LOSS',\n })\n slPayload.g = Number(goodTilNs)\n legs.push({\n canonical: arcusCanonicalJson(slPayload),\n audit: { leg: 'stopLoss', triggerPxHuman: sl },\n })\n }\n\n if (legs.length === 1) {\n const canonical = legs[0]!.canonical\n return buildPayloadSignEd25519MultisignBody({\n keyGen: paired.ed25519,\n purposeText: args.purposeText,\n destinationChainID: String(args.chainId),\n destinationAddress: ZERO_ADDRESS,\n messageUtf8: canonical,\n billingKeyGenPubKey: paired.secp256k1.pubkeyhex,\n expiryDate: args.expiryDate,\n delivery: {\n kind: 'arcus_exchange',\n chainId: args.chainId,\n endpoint: 'placeOrder',\n timestampNs,\n apiKeyPubKeyHex: paired.ed25519.pubkeyhex,\n body: JSON.parse(canonical),\n },\n audit: {\n protocol: ARCUS_PROTOCOL_ID,\n action: 'placeOrder',\n market: marketRow.marketDisplayName,\n isBuy: args.isBuy,\n limitPxHuman: args.limitPxHuman,\n szHuman: args.szHuman,\n leverageHuman: args.leverageHuman?.trim() || null,\n timeInForce,\n reduceOnly: Boolean(args.reduceOnly),\n takeProfitTriggerPxHuman: tp ?? null,\n stopLossTriggerPxHuman: sl ?? null,\n },\n })\n }\n\n const batchLegs = legs.map((leg, i) => {\n const messageBytes = Buffer.from(leg.canonical, 'utf8')\n return {\n msgHash: messageBytes.toString('hex'),\n msgRaw: `0x${messageBytes.toString('hex')}`,\n destinationAddress: ZERO_ADDRESS,\n signatureText: `Arcus bracket leg ${i + 1}/${legs.length}`,\n audit: { protocol: ARCUS_PROTOCOL_ID, action: 'placeOrder', ...leg.audit },\n feeSnapshot: {},\n }\n })\n\n return finalizeMultisign({\n keyGen: paired.ed25519,\n purposeText: args.purposeText,\n destinationChainID: String(args.chainId),\n destinationAddress: ZERO_ADDRESS,\n expiryDate: args.expiryDate,\n extraJSON: {\n signRequestKind: PAYLOAD_SIGN_ED25519_REQUEST_KIND,\n billingKeyGenPubKey: paired.secp256k1.pubkeyhex,\n delivery: {\n kind: 'arcus_exchange',\n chainId: args.chainId,\n endpoint: 'batchPlaceOrders',\n timestampNs,\n grouping: 'positionTpsl',\n legCount: legs.length,\n apiKeyPubKeyHex: paired.ed25519.pubkeyhex,\n },\n batchMeta: batchLegs.map((l) => l.audit),\n },\n legs: batchLegs,\n })\n}\n\n/** IoC reduce-only close — inverts side from position direction. */\nexport async function buildArcusCloseMultisign(args: ArcusCloseOrderMultisignArgs) {\n return buildArcusPlaceOrderMultisign({\n ...args,\n isBuy: !args.isLong,\n reduceOnly: true,\n timeInForce: args.timeInForce ?? 2,\n takeProfitTriggerPxHuman: undefined,\n stopLossTriggerPxHuman: undefined,\n })\n}\n\nexport async function buildArcusCancelOrderMultisign(args: ArcusCancelOrderMultisignArgs) {\n const paired = assertArcusPairedKeyGens({\n secp256k1KeyGen: args.secp256k1KeyGen,\n ed25519KeyGen: args.ed25519KeyGen,\n })\n const marketRow = await resolvePerpMarket(args.chainId, args.market)\n const address = getAddress(args.executorAddress)\n const timestampNs = arcusNanosecondTimestamp()\n const payload = buildArcusCancelOrderPayload({\n address,\n accountIndex: args.accountIndex,\n clientId: args.clientId,\n timestampNs,\n marketId: marketRow.marketId,\n orderId: args.orderId,\n })\n const canonical = arcusCanonicalJson(payload)\n return buildPayloadSignEd25519MultisignBody({\n keyGen: paired.ed25519,\n purposeText: args.purposeText,\n destinationChainID: String(args.chainId),\n destinationAddress: ZERO_ADDRESS,\n messageUtf8: canonical,\n billingKeyGenPubKey: paired.secp256k1.pubkeyhex,\n expiryDate: args.expiryDate,\n delivery: {\n kind: 'arcus_exchange',\n chainId: args.chainId,\n endpoint: 'cancelOrder',\n timestampNs,\n apiKeyPubKeyHex: paired.ed25519.pubkeyhex,\n body: payload,\n },\n audit: {\n protocol: ARCUS_PROTOCOL_ID,\n action: 'cancelOrder',\n market: marketRow.marketDisplayName,\n orderId: args.orderId,\n },\n })\n}\n\nexport async function buildArcusSetLeverageMultisign(args: ArcusSetLeverageMultisignArgs) {\n const paired = assertArcusPairedKeyGens({\n secp256k1KeyGen: args.secp256k1KeyGen,\n ed25519KeyGen: args.ed25519KeyGen,\n })\n const marketRow = await resolvePerpMarket(args.chainId, args.market)\n arcusAssertPerpMarketOnline(marketRow)\n const address = getAddress(args.executorAddress)\n const timestampNs = arcusNanosecondTimestamp()\n const body = {\n address: address.toLowerCase(),\n accountIndex: args.accountIndex ?? 0,\n marketId: marketRow.marketId,\n leverage: args.leverage,\n }\n const canonical = scheme2CanonicalJson(body)\n const action = 'setLeverage'\n const messageUtf8 = `${timestampNs}${action}${canonical}`\n return buildPayloadSignEd25519MultisignBody({\n keyGen: paired.ed25519,\n purposeText: args.purposeText,\n destinationChainID: String(args.chainId),\n destinationAddress: ZERO_ADDRESS,\n messageUtf8,\n billingKeyGenPubKey: paired.secp256k1.pubkeyhex,\n expiryDate: args.expiryDate,\n signatureText: 'Arcus setLeverage (Scheme 2)',\n delivery: {\n kind: 'arcus_exchange',\n chainId: args.chainId,\n endpoint: action,\n timestampNs,\n scheme: 2,\n apiKeyPubKeyHex: paired.ed25519.pubkeyhex,\n body,\n canonical,\n },\n audit: {\n protocol: ARCUS_PROTOCOL_ID,\n action,\n market: args.market,\n leverage: args.leverage,\n },\n })\n}\n\nexport async function buildEvmMultisignBodyArcusPlaceOrderBatch(args: ArcusPlaceOrderMultisignArgs) {\n return buildArcusPlaceOrderMultisign(args)\n}\n\nexport async function buildEvmMultisignBodyArcusCreateApiKeyBatch(args: ArcusCreateApiKeyMultisignArgs) {\n return buildArcusCreateApiKeyMultisign(args)\n}\n\nexport async function buildEvmMultisignBodyArcusCancelOrderBatch(args: ArcusCancelOrderMultisignArgs) {\n return buildArcusCancelOrderMultisign(args)\n}\n\nexport async function buildEvmMultisignBodyArcusSetLeverageBatch(args: ArcusSetLeverageMultisignArgs) {\n return buildArcusSetLeverageMultisign(args)\n}\n\nexport async function buildEvmMultisignBodyArcusCloseBatch(args: ArcusCloseOrderMultisignArgs) {\n return buildArcusCloseMultisign(args)\n}\n","import type { KeyGenSubset } from '../../../core/types.js'\n\nexport type ArcusPairedKeyGens = {\n secp256k1: KeyGenSubset & { groupId?: string; keyType?: string }\n ed25519: KeyGenSubset & { groupId?: string; keyType?: string }\n}\n\nexport function assertArcusPairedKeyGens(args: {\n secp256k1KeyGen: KeyGenSubset & { groupId?: string; keyType?: string }\n ed25519KeyGen: KeyGenSubset & { groupId?: string; keyType?: string }\n}): ArcusPairedKeyGens {\n const secpType = (args.secp256k1KeyGen.keyType ?? 'secp256k1').toLowerCase()\n const edType = (args.ed25519KeyGen.keyType ?? 'ed25519').toLowerCase()\n if (!secpType.includes('secp256k1')) {\n throw new Error(`Arcus custody KeyGen must be secp256k1, got ${secpType}`)\n }\n if (!edType.includes('ed25519')) {\n throw new Error(`Arcus API KeyGen must be ed25519, got ${edType}`)\n }\n const secpGroup = (args.secp256k1KeyGen.groupId ?? '').trim()\n const edGroup = (args.ed25519KeyGen.groupId ?? '').trim()\n if (secpGroup && edGroup && secpGroup !== edGroup) {\n throw new Error(`Arcus KeyGen GroupId mismatch: secp256k1=${secpGroup} ed25519=${edGroup}`)\n }\n const secpPk = (args.secp256k1KeyGen.pubkeyhex ?? '').trim()\n const edPk = (args.ed25519KeyGen.pubkeyhex ?? '').trim()\n if (!secpPk) throw new Error('secp256k1 KeyGen pubkeyhex is required')\n if (!edPk) throw new Error('ed25519 KeyGen pubkeyhex is required')\n return { secp256k1: args.secp256k1KeyGen, ed25519: args.ed25519KeyGen }\n}\n","import type { ArcusOpenOrderDisplayRow, ArcusPositionDisplayRow } from './positionDisplay.js'\n\nexport type ArcusPendingCloseSummary = {\n pendingCloseSz: number\n pendingClosePct: number\n}\n\nfunction parsePositiveSize(value: string | null | undefined): number | null {\n if (value == null || !String(value).trim()) return null\n const n = Number.parseFloat(String(value).trim())\n if (!Number.isFinite(n) || n <= 0) return null\n return n\n}\n\n/** True when order side closes the given position (long → sell, short → buy). */\nexport function arcusOrderClosesPosition(\n position: Pick<ArcusPositionDisplayRow, 'isLong'>,\n order: Pick<ArcusOpenOrderDisplayRow, 'isBuy'>,\n): boolean {\n return position.isLong ? !order.isBuy : order.isBuy\n}\n\nexport function arcusOrderCountsAsPendingClose(\n order: Pick<ArcusOpenOrderDisplayRow, 'reduceOnly' | 'isTrigger'>,\n): boolean {\n return Boolean(order.reduceOnly) || Boolean(order.isTrigger)\n}\n\nexport function arcusPendingCloseForPosition(args: {\n position: Pick<ArcusPositionDisplayRow, 'key' | 'isLong' | 'sizeHuman'>\n orders: ArcusOpenOrderDisplayRow[]\n}): ArcusPendingCloseSummary {\n const positionSize = parsePositiveSize(args.position.sizeHuman)\n if (positionSize == null) {\n return { pendingCloseSz: 0, pendingClosePct: 0 }\n }\n let pendingCloseSz = 0\n for (const order of args.orders) {\n if (order.marketDisplayName !== args.position.key) continue\n if (!arcusOrderClosesPosition(args.position, order)) continue\n if (!arcusOrderCountsAsPendingClose(order)) continue\n const sz = parsePositiveSize(order.sizeHuman)\n if (sz != null) pendingCloseSz += sz\n }\n const pendingClosePct = Math.min(100, (pendingCloseSz / positionSize) * 100)\n return { pendingCloseSz, pendingClosePct }\n}\n\nexport function arcusPendingCloseByMarket(args: {\n positions: ArcusPositionDisplayRow[]\n orders: ArcusOpenOrderDisplayRow[]\n}): Map<string, ArcusPendingCloseSummary> {\n const out = new Map<string, ArcusPendingCloseSummary>()\n for (const position of args.positions) {\n out.set(position.key, arcusPendingCloseForPosition({ position, orders: args.orders }))\n }\n return out\n}\n","import type { ArcusPerpMarket } from './types.js'\n\nfunction parsePositiveDecimal(value: string): number | null {\n const trimmed = String(value ?? '').trim().replace(/,/g, '')\n if (!trimmed || !/^\\d+(\\.\\d+)?$/.test(trimmed)) return null\n const n = Number(trimmed)\n return Number.isFinite(n) && n > 0 ? n : null\n}\n\nfunction floorToStep(value: number, step: number): number | null {\n if (!Number.isFinite(value) || value <= 0 || !Number.isFinite(step) || step <= 0) return null\n const steps = Math.floor(value / step + 1e-12)\n if (steps <= 0) return null\n return steps * step\n}\n\nexport function formatArcusDisplaySize(value: number, stepSize?: string | null): string {\n const step = stepSize ? parsePositiveDecimal(stepSize) : null\n const floored = step != null ? floorToStep(value, step) : value\n if (floored == null || floored <= 0) return '0'\n const abs = Math.abs(floored)\n const maxFrac = abs >= 1 ? 4 : abs >= 0.01 ? 6 : 8\n return floored.toLocaleString(undefined, { maximumFractionDigits: maxFrac })\n}\n\nexport type ArcusPositionDisplayRow = {\n key: string\n marketDisplayName: string\n isLong: boolean\n sizeHuman: string\n entryPxHuman: string | null\n markPxHuman: string | null\n positionValueUsd: string | null\n unrealizedPnlUsd: string | null\n liquidationPxHuman: string | null\n leverageLabel: string | null\n marginUsedUsd: string | null\n}\n\nexport type ArcusOpenOrderDisplayRow = {\n orderId: string\n marketDisplayName: string\n isBuy: boolean\n limitPxHuman: string | null\n sizeHuman: string | null\n reduceOnly: boolean\n isTrigger: boolean\n}\n\nexport type ArcusAccountSummary = {\n freeCollateralUsd: string | null\n equityUsd: string | null\n marginUsedUsd: string | null\n}\n\nfunction marketStepSize(markets: ArcusPerpMarket[], marketDisplayName: string): string | null {\n return markets.find((m) => m.marketDisplayName === marketDisplayName)?.stepSize ?? null\n}\n\nfunction parseArcusSideIsBuy(raw: unknown): boolean | null {\n const s = String(raw ?? '').trim().toUpperCase()\n if (s === 'BUY' || s === 'LONG' || s === '0') return true\n if (s === 'SELL' || s === 'SHORT' || s === '1') return false\n return null\n}\n\nexport function arcusParsePositionDisplayRow(\n raw: unknown,\n markets: ArcusPerpMarket[],\n): ArcusPositionDisplayRow | null {\n if (!raw || typeof raw !== 'object') return null\n const row = raw as Record<string, unknown>\n const marketDisplayName = String(row.marketDisplayName ?? '').trim()\n if (!marketDisplayName) return null\n const side = String(row.side ?? '').toUpperCase()\n const isLong = side === 'LONG' || side === 'BUY'\n const stepSize = marketStepSize(markets, marketDisplayName)\n const step = stepSize ? parsePositiveDecimal(stepSize) : null\n const markPx = parsePositiveDecimal(String(row.markPx ?? row.markPrice ?? ''))\n const notional = Math.abs(parsePositiveDecimal(String(row.positionValueNotional ?? row.notional ?? '')) ?? 0)\n let sizeHuman: string | null = null\n if (notional > 0 && markPx != null && markPx > 0) {\n sizeHuman = formatArcusDisplaySize(notional / markPx, stepSize)\n } else {\n const sizeRaw = Math.abs(Number(String(row.size ?? row.sizeHuman ?? '').trim()))\n if (Number.isFinite(sizeRaw) && sizeRaw > 0 && step != null) {\n sizeHuman = formatArcusDisplaySize(sizeRaw * step, stepSize)\n }\n }\n if (!sizeHuman || !parsePositiveDecimal(sizeHuman)) return null\n const levRaw = row.leverage\n const leverageLabel =\n levRaw != null && String(levRaw).trim()\n ? `${Math.round(Number(levRaw))}x cross`\n : null\n return {\n key: marketDisplayName,\n marketDisplayName,\n isLong,\n sizeHuman,\n entryPxHuman: String(row.entryPx ?? row.entryPrice ?? '').trim() || null,\n markPxHuman: markPx != null ? String(markPx) : String(row.markPx ?? '').trim() || null,\n positionValueUsd: String(row.positionValueNotional ?? row.notional ?? '').trim() || null,\n unrealizedPnlUsd: String(row.unrealizedPnl ?? row.unrealizedPnlUsd ?? '').trim() || null,\n liquidationPxHuman: String(row.liquidationPx ?? row.liquidationPrice ?? '').trim() || null,\n leverageLabel,\n marginUsedUsd: String(row.marginUsed ?? '').trim() || null,\n }\n}\n\nexport function arcusParseOpenOrderDisplayRow(\n raw: unknown,\n markets: ArcusPerpMarket[],\n): ArcusOpenOrderDisplayRow | null {\n if (!raw || typeof raw !== 'object') return null\n const row = raw as Record<string, unknown>\n const orderId = String(row.orderId ?? row.id ?? '').trim()\n const marketDisplayName = String(row.marketDisplayName ?? '').trim()\n if (!orderId || !marketDisplayName) return null\n const isBuy = parseArcusSideIsBuy(row.side)\n if (isBuy == null) return null\n const stepSize = marketStepSize(markets, marketDisplayName)\n const step = stepSize ? parsePositiveDecimal(stepSize) : null\n let sizeHuman: string | null = String(row.sizeHuman ?? row.remainingSize ?? row.size ?? '').trim() || null\n if (sizeHuman && step != null) {\n const asNum = Number(sizeHuman)\n if (Number.isFinite(asNum) && asNum > 0 && asNum < 1e6) {\n sizeHuman = formatArcusDisplaySize(asNum * step, stepSize)\n }\n }\n const priceRaw = String(row.price ?? row.limitPx ?? '').trim()\n return {\n orderId,\n marketDisplayName,\n isBuy,\n limitPxHuman: priceRaw || null,\n sizeHuman,\n reduceOnly: Boolean(row.reduceOnly) || Number(row.reduceOnly) === 1,\n isTrigger: Boolean(row.isTrigger) || String(row.orderType ?? '').toUpperCase().includes('STOP'),\n }\n}\n\nexport function arcusParseAccountSummary(account: Record<string, unknown> | null): ArcusAccountSummary {\n if (!account) {\n return { freeCollateralUsd: null, equityUsd: null, marginUsedUsd: null }\n }\n return {\n freeCollateralUsd: String(account.freeCollateral ?? '').trim() || null,\n equityUsd: String(account.equity ?? account.accountValue ?? '').trim() || null,\n marginUsedUsd: String(account.marginUsed ?? account.totalMarginUsed ?? '').trim() || null,\n }\n}\n\nexport function arcusMapPositionDisplayRows(\n rawPositions: unknown[],\n markets: ArcusPerpMarket[],\n): ArcusPositionDisplayRow[] {\n return rawPositions\n .map((raw) => arcusParsePositionDisplayRow(raw, markets))\n .filter((row): row is ArcusPositionDisplayRow => row != null)\n}\n\nexport function arcusMapOpenOrderDisplayRows(\n rawOrders: unknown[],\n markets: ArcusPerpMarket[],\n): ArcusOpenOrderDisplayRow[] {\n return rawOrders\n .map((raw) => arcusParseOpenOrderDisplayRow(raw, markets))\n .filter((row): row is ArcusOpenOrderDisplayRow => row != null)\n}\n","import { getAddress, type Address } from 'viem'\nimport type { KeyGenSubset } from '../../../core/types.js'\nimport { buildPayloadSignEd25519MultisignBody } from '../../../core/payloadSignEd25519Multisign.js'\nimport { arcusFetchSpotOverview } from './api.js'\nimport { arcusCanonicalJson, arcusNanosecondTimestamp } from './orderSigning.js'\nimport { assertArcusPairedKeyGens } from './keygenPair.js'\nimport { ARCUS_PROTOCOL_ID } from './constants.js'\n\nconst ZERO_ADDRESS = '0x0000000000000000000000000000000000000000' as Address\n\nexport type ArcusSpotRfqMultisignArgs = {\n chainId: number\n purposeText: string\n secp256k1KeyGen: KeyGenSubset & { groupId?: string; keyType?: string }\n ed25519KeyGen: KeyGenSubset & { groupId?: string; keyType?: string }\n executorAddress: Address\n ticker: string\n isBuy: boolean\n sizeHuman: string\n limitPxHuman?: string\n expiryDate?: number\n}\n\nexport async function buildArcusSpotRfqMultisign(args: ArcusSpotRfqMultisignArgs) {\n const paired = assertArcusPairedKeyGens({\n secp256k1KeyGen: args.secp256k1KeyGen,\n ed25519KeyGen: args.ed25519KeyGen,\n })\n const address = getAddress(args.executorAddress)\n const { tokens } = await arcusFetchSpotOverview({ chainId: args.chainId })\n const ticker = args.ticker.trim().toUpperCase()\n const token = tokens.find((t) => t.ticker.toUpperCase() === ticker)\n if (!token) throw new Error(`Arcus spot token not found: ${ticker}`)\n\n const timestampNs = arcusNanosecondTimestamp()\n const body: Record<string, unknown> = {\n address: address.toLowerCase(),\n ticker: token.ticker,\n side: args.isBuy ? 'BUY' : 'SELL',\n size: args.sizeHuman.trim(),\n tokenContractAddress: token.contractAddress.toLowerCase(),\n }\n if (args.limitPxHuman?.trim()) {\n body.limitPrice = args.limitPxHuman.trim()\n }\n const canonical = arcusCanonicalJson(body)\n const action = args.isBuy ? 'spotBuy' : 'spotSell'\n const messageUtf8 = `${timestampNs}${action}${canonical}`\n\n return buildPayloadSignEd25519MultisignBody({\n keyGen: paired.ed25519,\n purposeText: args.purposeText,\n destinationChainID: String(args.chainId),\n destinationAddress: ZERO_ADDRESS,\n messageUtf8,\n billingKeyGenPubKey: paired.secp256k1.pubkeyhex,\n expiryDate: args.expiryDate,\n signatureText: `Arcus spot RFQ ${action}`,\n delivery: {\n kind: 'arcus_spot_rfq',\n chainId: args.chainId,\n endpoint: action,\n timestampNs,\n scheme: 2,\n apiKeyPubKeyHex: paired.ed25519.pubkeyhex,\n body,\n tokenContractAddress: token.contractAddress,\n tokenSymbol: token.ticker,\n tokenName: token.name,\n },\n audit: {\n protocol: ARCUS_PROTOCOL_ID,\n action,\n marketKind: 'spot',\n ticker: token.ticker,\n isBuy: args.isBuy,\n sizeHuman: args.sizeHuman,\n limitPxHuman: args.limitPxHuman ?? null,\n },\n })\n}\n\nexport async function buildEvmMultisignBodyArcusSpotRfqBatch(args: ArcusSpotRfqMultisignArgs) {\n return buildArcusSpotRfqMultisign(args)\n}\n","import { ARCUS_USDG_ADDRESS_4663 } from './constants.js'\n\n/** BridgeVault — EIP-712 domain for withdraw / internal transfer on Robinhood Chain mainnet. */\nexport const ARCUS_BRIDGE_VAULT_4663 = '0x14b107cf534239c59571b066cB6497a321Da897c' as const\n\n/** On-chain deposit entry point (`initiateDeposit`) on Robinhood Chain mainnet (Arcus app config). */\nexport const ARCUS_DEPOSIT_PROXY_4663 = '0xD42c46c7BaD6A54b38395F846b09981CE75fb8e2' as const\n\nexport const ARCUS_USDG_DECIMALS = 6\n/** Arcus collateral quote quantums per $1 (withdraw / transfer EIP-712 amounts). */\nexport const ARCUS_QUOTE_QUANTUMS_PER_USD = 1_000_000_000n\nexport const ARCUS_MIN_WITHDRAW_USD = 1\n\n/** Default perp sub-account (accountIndex 0). */\nexport const ARCUS_PERP_ACCOUNT_INDEX = 0\n/** Spot USDG bucket (accountIndex 1 — matches Arcus Fun “USDG Spot”). */\nexport const ARCUS_SPOT_ACCOUNT_INDEX = 1\n\nexport type ArcusFundProduct = 'perp' | 'spot'\n\nexport function arcusAccountIndexForProduct(product: ArcusFundProduct): number {\n return product === 'spot' ? ARCUS_SPOT_ACCOUNT_INDEX : ARCUS_PERP_ACCOUNT_INDEX\n}\n\nexport function arcusBridgeConfig(chainId: number) {\n if (chainId !== 4663) return null\n return {\n chainId,\n usdg: ARCUS_USDG_ADDRESS_4663,\n depositProxy: ARCUS_DEPOSIT_PROXY_4663,\n bridgeVault: ARCUS_BRIDGE_VAULT_4663,\n usdgDecimals: ARCUS_USDG_DECIMALS,\n }\n}\n","import { getAddress, type Address } from 'viem'\nimport { arcusNanosecondTimestamp } from './orderSigning.js'\nimport { arcusBridgeConfig, type ArcusFundProduct, arcusAccountIndexForProduct } from './bridgeConstants.js'\n\nexport const ARCUS_WITHDRAW_EIP712_DOMAIN_NAME = 'Arcus Withdraw' as const\nexport const ARCUS_WITHDRAW_EIP712_DOMAIN_VERSION = '1' as const\n\nexport const ARCUS_WITHDRAW_SIGN_TYPES = {\n Withdraw: [\n { name: 'ethereumAddress', type: 'address' },\n { name: 'accountIndex', type: 'uint8' },\n { name: 'amount', type: 'uint256' },\n { name: 'nonce', type: 'string' },\n ],\n} as const\n\nexport function parseArcusUsdHumanToQuoteQuantums(usdHuman: string): bigint {\n const trimmed = usdHuman.trim().replace(/,/g, '')\n if (!trimmed || !/^\\d+(\\.\\d+)?$/.test(trimmed)) {\n throw new Error('usdHuman must be a positive decimal string')\n }\n const [whole, frac = ''] = trimmed.split('.')\n const frac9 = (frac + '000000000').slice(0, 9)\n const quantums = BigInt(whole) * 1_000_000_000n + BigInt(frac9 || '0')\n if (quantums <= 0n) throw new Error('usdHuman must be greater than zero')\n return quantums\n}\n\nexport function parseArcusUsdHumanToUsdgWei(usdHuman: string): bigint {\n const trimmed = usdHuman.trim().replace(/,/g, '')\n if (!trimmed || !/^\\d+(\\.\\d+)?$/.test(trimmed)) {\n throw new Error('usdHuman must be a positive decimal string')\n }\n const [whole, frac = ''] = trimmed.split('.')\n const frac6 = (frac + '000000').slice(0, 6)\n const wei = BigInt(whole) * 1_000_000n + BigInt(frac6 || '0')\n if (wei <= 0n) throw new Error('usdHuman must be greater than zero')\n return wei\n}\n\nexport function buildArcusWithdrawTypedData(args: {\n chainId: number\n executorAddress: Address\n product: ArcusFundProduct\n usdHuman: string\n nonceNs?: string\n}) {\n const cfg = arcusBridgeConfig(args.chainId)\n if (!cfg) throw new Error('Arcus fund flows are supported on Robinhood Chain (4663) only.')\n const address = getAddress(args.executorAddress)\n const amount = parseArcusUsdHumanToQuoteQuantums(args.usdHuman)\n const nonce = args.nonceNs ?? arcusNanosecondTimestamp()\n const accountIndex = arcusAccountIndexForProduct(args.product)\n return {\n domain: {\n name: ARCUS_WITHDRAW_EIP712_DOMAIN_NAME,\n version: ARCUS_WITHDRAW_EIP712_DOMAIN_VERSION,\n chainId: cfg.chainId,\n verifyingContract: getAddress(cfg.bridgeVault),\n },\n types: ARCUS_WITHDRAW_SIGN_TYPES,\n primaryType: 'Withdraw' as const,\n message: {\n ethereumAddress: address,\n accountIndex,\n amount,\n nonce,\n },\n requestBody: {\n ethereumAddress: address.toLowerCase(),\n accountIndex,\n amount: amount.toString(),\n nonce,\n },\n }\n}\n","import { gasLimitFromEstimateAndChainConfig } from '@continuumdao/continuum-node-sdk'\n\n/** Curve router swap gas: chain cap when set, else 12/10 estimate bump. */\nexport function routerSwapGasLimitFromEstimate(\n estimatedGas: bigint,\n chainGasLimit?: number | null,\n): bigint {\n if (chainGasLimit != null && Number.isFinite(chainGasLimit) && chainGasLimit > 0) {\n return gasLimitFromEstimateAndChainConfig(estimatedGas, chainGasLimit)\n }\n return (estimatedGas * 12n + 9n) / 10n\n}\n","import {\n keccak256,\n createPublicClient,\n defineChain,\n http,\n serializeTransaction,\n getAddress,\n parseGwei,\n type Address,\n type PublicClient,\n} from 'viem'\nimport type { MultisignBuildResult } from '../../core/types.js'\nimport { finalizeMultisign, type MultisignLeg } from '../../core/envelope.js'\nimport type { KeyGenSubset } from '../../core/types.js'\nimport {\n fetchChainFeeParams,\n alignEip1559FeesWithLatestBase,\n gweiToDecimalString,\n gasLimitFromEstimateAndChainConfig,\n proposalTxParamsToFeeSnapshot,\n type ProposalTxParams,\n} from '@continuumdao/continuum-node-sdk'\nimport { routerSwapGasLimitFromEstimate } from './routerSwapGas.js'\nimport type { EvmProtocolContext, EvmTxStep } from './types.js'\n\nexport type EvmBatchMetaBuilder = (args: {\n step: EvmTxStep\n index: number\n gasLimit: bigint\n}) => Record<string, unknown>\n\nexport type EvmBuildBatchArgs = {\n context: EvmProtocolContext\n steps: EvmTxStep[]\n purposeSuffix?: string\n buildBatchMeta: EvmBatchMetaBuilder\n /** First leg msgRaw without 0x prefix; defaults to first step calldata */\n firstMsgRawNo0x?: string\n destinationAddress?: Address\n /** Top-level `value` on bodyForSign when the payable amount is not on the first leg */\n payableValueWei?: bigint\n resolveGasLimit?: (args: {\n step: EvmTxStep\n index: number\n estimatedGas: bigint\n publicClient: PublicClient\n }) => Promise<bigint> | bigint\n /** Override default `estimateGas` (e.g. trade-API gas, skip post-approve deposit estimate). */\n estimateGasForStep?: (args: {\n step: EvmTxStep\n index: number\n publicClient: PublicClient\n executor: Address\n }) => Promise<bigint> | bigint\n}\n\n/**\n * Build unsigned EVM txs, estimate gas, serialize, hash — then assemble mpc-auth body via core envelope.\n */\nexport async function buildEvmMultisignBatch(args: EvmBuildBatchArgs): Promise<MultisignBuildResult> {\n const { context, steps } = args\n const {\n chainId,\n rpcUrl,\n executorAddress,\n chainDetail,\n useCustomGas,\n customGasChainDetails,\n keyGen,\n purposeText,\n } = context\n\n if (steps.length === 0) throw new Error('buildEvmMultisignBatch requires at least one step')\n\n const ch = defineChain({\n id: chainId,\n name: 'Destination',\n nativeCurrency: { decimals: 18, name: 'Ether', symbol: 'ETH' },\n rpcUrls: { default: { http: [rpcUrl] } },\n })\n const publicClient = createPublicClient({ chain: ch, transport: http(rpcUrl) })\n\n const feeParams = await fetchChainFeeParams(rpcUrl, chainId)\n const legacy = Boolean(chainDetail?.legacy) || !feeParams.isEip1559\n const latestBaseFeeWei = !legacy\n ? ((await publicClient.getBlock({ blockTag: 'latest' })).baseFeePerGas ?? 0n)\n : 0n\n\n const gasLimitConfig =\n useCustomGas && chainDetail?.gasLimit != null ? Number(chainDetail.gasLimit) : undefined\n const chainGasLimitRouter =\n chainDetail?.gasLimit != null &&\n Number.isFinite(Number(chainDetail.gasLimit)) &&\n Number(chainDetail.gasLimit) > 0\n ? Number(chainDetail.gasLimit)\n : undefined\n const gasFeeMultiplier =\n useCustomGas && chainDetail?.gasMultiplier != null ? Number(chainDetail.gasMultiplier) : undefined\n\n const executor = getAddress(executorAddress)\n const baseNonce = await publicClient.getTransactionCount({ address: executor, blockTag: 'pending' })\n\n const legs: MultisignLeg[] = []\n\n for (let i = 0; i < steps.length; i++) {\n const step = steps[i]!\n const currentNonce = baseNonce + i\n\n let estimatedGas: bigint\n if (args.estimateGasForStep) {\n estimatedGas = await args.estimateGasForStep({ step, index: i, publicClient, executor })\n } else {\n try {\n estimatedGas = await publicClient.estimateGas({\n to: step.to,\n data: step.data,\n value: step.value,\n account: executor,\n })\n } catch {\n estimatedGas = step.fallbackGas ?? 100_000n\n }\n }\n\n let gasLimitI: bigint\n if (args.resolveGasLimit) {\n gasLimitI = await args.resolveGasLimit({ step, index: i, estimatedGas, publicClient })\n } else if (step.routerSwap) {\n gasLimitI = routerSwapGasLimitFromEstimate(estimatedGas, chainGasLimitRouter)\n } else {\n gasLimitI = useCustomGas\n ? gasLimitFromEstimateAndChainConfig(estimatedGas, gasLimitConfig)\n : estimatedGas\n }\n\n let proposalTxParams: ProposalTxParams\n let feeSnapshot: Record<string, unknown>\n let serialized: `0x${string}`\n\n if (legacy) {\n let gasPriceWei = await publicClient.getGasPrice()\n if (useCustomGas && gasFeeMultiplier != null && gasFeeMultiplier > 0) {\n gasPriceWei = (gasPriceWei * BigInt(100 + gasFeeMultiplier)) / 100n\n }\n if (useCustomGas && chainDetail?.gasPrice != null && chainDetail.gasPrice > 0) {\n const configured = parseGwei(gweiToDecimalString(Number(chainDetail.gasPrice)))\n if (configured > gasPriceWei) gasPriceWei = configured\n }\n serialized = serializeTransaction({\n type: 'legacy',\n to: step.to,\n data: step.data,\n value: step.value,\n gas: gasLimitI,\n gasPrice: gasPriceWei,\n nonce: currentNonce,\n chainId,\n })\n proposalTxParams = {\n nonce: currentNonce,\n gasLimit: gasLimitI.toString(),\n txType: 'legacy',\n gasPrice: gasPriceWei.toString(),\n }\n feeSnapshot = proposalTxParamsToFeeSnapshot(proposalTxParams)\n } else {\n const fetchedBase = feeParams.baseFeeGwei ?? 0\n const fetchedPriority = feeParams.priorityFeeGwei ?? 0\n const configuredBase =\n useCustomGas && chainDetail?.baseFee != null ? Number(chainDetail.baseFee) : 0\n const configuredPriority =\n useCustomGas && chainDetail?.priorityFee != null ? Number(chainDetail.priorityFee) : 0\n const effectiveBaseFeeGwei = Math.max(fetchedBase, configuredBase)\n const effectivePriorityFeeGwei = Math.max(fetchedPriority, configuredPriority)\n const baseFeeMultiplierPct =\n useCustomGas && chainDetail?.baseFeeMultiplier != null\n ? Math.max(100, Number(chainDetail.baseFeeMultiplier))\n : 100\n const baseComponentGwei = (effectiveBaseFeeGwei * baseFeeMultiplierPct) / 100\n const maxFeePerGasGwei = baseComponentGwei + effectivePriorityFeeGwei\n let maxPriorityFeePerGas =\n effectivePriorityFeeGwei > 0\n ? parseGwei(gweiToDecimalString(effectivePriorityFeeGwei))\n : parseGwei('1')\n let maxFeePerGas = parseGwei(gweiToDecimalString(maxFeePerGasGwei))\n if (useCustomGas && gasFeeMultiplier != null && gasFeeMultiplier > 0) {\n maxPriorityFeePerGas = (maxPriorityFeePerGas * BigInt(100 + gasFeeMultiplier)) / 100n\n maxFeePerGas = (maxFeePerGas * BigInt(100 + gasFeeMultiplier)) / 100n\n }\n ;({ maxFeePerGas, maxPriorityFeePerGas } = alignEip1559FeesWithLatestBase(\n maxFeePerGas,\n maxPriorityFeePerGas,\n latestBaseFeeWei,\n ))\n serialized = serializeTransaction({\n type: 'eip1559',\n to: step.to,\n data: step.data,\n value: step.value,\n gas: gasLimitI,\n maxFeePerGas,\n maxPriorityFeePerGas,\n nonce: currentNonce,\n chainId,\n })\n proposalTxParams = {\n nonce: currentNonce,\n gasLimit: gasLimitI.toString(),\n txType: 'eip1559',\n maxFeePerGas: maxFeePerGas.toString(),\n maxPriorityFeePerGas: maxPriorityFeePerGas.toString(),\n }\n feeSnapshot = i === 0 ? proposalTxParamsToFeeSnapshot(proposalTxParams) : {}\n }\n\n const h = keccak256(serialized)\n const msgHash = h.startsWith('0x') ? h.slice(2) : h\n\n const batchMetaExtra = args.buildBatchMeta({ step, index: i, gasLimit: gasLimitI })\n\n legs.push({\n msgHash,\n msgRaw: i === 0 && args.firstMsgRawNo0x != null ? args.firstMsgRawNo0x : serialized,\n destinationAddress: step.to,\n signatureText:\n typeof batchMetaExtra.signatureText === 'string'\n ? batchMetaExtra.signatureText\n : JSON.stringify(batchMetaExtra.signatureText ?? {}),\n audit: batchMetaExtra,\n feeSnapshot: i === 0 ? feeSnapshot : {},\n proposalTxParams,\n valueWei: i === 0 ? step.value : undefined,\n })\n\n if (i === 0 && args.firstMsgRawNo0x != null) {\n legs[0]!.msgRaw = args.firstMsgRawNo0x\n }\n }\n\n const extraJSON: Record<string, unknown> = {}\n if (useCustomGas && customGasChainDetails && Object.keys(customGasChainDetails).length > 0) {\n extraJSON.customGasChainDetails = customGasChainDetails\n }\n\n const result = finalizeMultisign({\n keyGen: keyGen as KeyGenSubset,\n purposeText,\n purposeSuffix: args.purposeSuffix,\n destinationChainID: String(chainId),\n destinationAddress: args.destinationAddress ?? steps[0]!.to,\n legs,\n extraJSON: Object.keys(extraJSON).length > 0 ? extraJSON : undefined,\n expiryDate: context.expiryDate,\n })\n const pv = args.payableValueWei\n if (pv != null && pv > 0n) {\n result.bodyForSign.value = pv.toString()\n }\n return result\n}\n\nexport const evmChainCategoryModule = {\n category: 'evm' as const,\n finalizeMultisign,\n buildEvmMultisignBatch,\n}\n","import { hashTypedData, stringToHex, type TypedDataDomain } from 'viem'\nimport type { KeyGenSubset, MultisignBuildResult } from './types.js'\nimport { finalizeMultisign } from './envelope.js'\n\nexport const EIP712_SIGN_REQUEST_KIND = 'eip712' as const\n\nexport type Eip712TypedDataField = { name: string; type: string }\n\nexport type Eip712TypedDataPayload = {\n domain: TypedDataDomain\n types: Record<string, readonly Eip712TypedDataField[] | Eip712TypedDataField[]>\n primaryType: string\n message: Record<string, unknown>\n}\n\nexport type Eip712MultisignDelivery = Record<string, unknown> & { kind: string }\n\nexport type BuildEip712MultisignBodyArgs = {\n keyGen: KeyGenSubset\n purposeText: string\n purposeSuffix?: string\n /** Chain id stored on the sign request (protocol context; may differ from EIP-712 domain chainId). */\n destinationChainID: string\n destinationAddress: string\n typedData: Eip712TypedDataPayload\n delivery: Eip712MultisignDelivery\n audit?: Record<string, unknown>\n expiryDate?: number\n}\n\nfunction msgHashNo0x(digest: `0x${string}`): string {\n return digest.startsWith('0x') ? digest.slice(2) : digest\n}\n\nfunction eip712SignatureText(domain: TypedDataDomain, primaryType: string): string {\n return JSON.stringify({\n kind: 'EIP-712',\n ...(typeof domain.name === 'string' ? { name: domain.name } : {}),\n primaryType,\n })\n}\n\nfunction jsonStringifyForAudit(value: unknown): string {\n return JSON.stringify(value, (_, v) => (typeof v === 'bigint' ? v.toString() : v))\n}\n\nfunction eip712MsgRawHex(typedData: Eip712TypedDataPayload, delivery: Eip712MultisignDelivery): string {\n const envelope = {\n version: 1,\n ...typedData,\n delivery,\n }\n return stringToHex(jsonStringifyForAudit(envelope))\n}\n\n/**\n * Build an mpc-auth multiSignRequest body for a single-leg EIP-712 digest (no EVM tx broadcast).\n * `msgHash` is the EIP-712 hash; `msgRaw` is UTF-8 hex JSON audit envelope (not RLP calldata).\n */\nexport function buildEip712MultisignBody(args: BuildEip712MultisignBodyArgs): MultisignBuildResult {\n const { typedData, delivery } = args\n const digest = hashTypedData({\n domain: typedData.domain,\n types: typedData.types,\n primaryType: typedData.primaryType,\n message: typedData.message,\n })\n\n const extraJSON: Record<string, unknown> = {\n signRequestKind: EIP712_SIGN_REQUEST_KIND,\n eip712: {\n version: 1,\n digest,\n domain: typedData.domain,\n types: typedData.types,\n primaryType: typedData.primaryType,\n message: typedData.message,\n },\n delivery,\n }\n\n return finalizeMultisign({\n keyGen: args.keyGen,\n purposeText: args.purposeText,\n purposeSuffix: args.purposeSuffix,\n destinationChainID: args.destinationChainID,\n destinationAddress: args.destinationAddress,\n extraJSON,\n expiryDate: args.expiryDate,\n legs: [\n {\n msgHash: msgHashNo0x(digest),\n msgRaw: eip712MsgRawHex(typedData, delivery),\n destinationAddress: args.destinationAddress,\n signatureText: eip712SignatureText(typedData.domain, typedData.primaryType),\n audit: {\n kind: 'EIP712',\n primaryType: typedData.primaryType,\n deliveryKind: delivery.kind,\n ...(args.audit ?? {}),\n },\n feeSnapshot: {},\n },\n ],\n })\n}\n","import { encodeFunctionData, getAddress, parseAbi, type Address } from 'viem'\nimport type { KeyGenSubsetForPermit } from '../../../core/types.js'\nimport type { EvmChainDetail } from '../../../chains/evm/types.js'\nimport { buildEvmMultisignBatch } from '../../../chains/evm/buildBatch.js'\nimport { buildEip712MultisignBody } from '../../../core/eip712Multisign.js'\nimport {\n ARCUS_MIN_WITHDRAW_USD,\n ARCUS_QUOTE_QUANTUMS_PER_USD,\n arcusBridgeConfig,\n type ArcusFundProduct,\n} from './bridgeConstants.js'\nimport { isArcusChainSupported } from './support.js'\nimport { buildArcusWithdrawTypedData, parseArcusUsdHumanToUsdgWei } from './fundSigning.js'\nimport { ARCUS_PROTOCOL_ID } from './constants.js'\nimport { assertArcusAddressRegisteredForDeposit } from './registration.js'\n\nconst erc20ApproveAbi = parseAbi(['function approve(address spender, uint256 amount) returns (bool)'])\n\nconst depositProxyAbi = parseAbi([\n 'function initiateDeposit(address owner, uint16 accountIndex, address token, uint256 amount) returns (uint64 inboxIndex)',\n])\n\nconst DEPOSIT_APPROVE_FALLBACK_GAS = 80_000n\nconst DEPOSIT_INITIATE_FALLBACK_GAS = 350_000n\n\ntype ArcusDepositMultisignArgs = {\n keyGen: KeyGenSubsetForPermit\n chainId: number\n rpcUrl: string\n chainDetail: EvmChainDetail\n useCustomGas: boolean\n customGasChainDetails?: Record<string, unknown> | null\n executorAddress: Address\n purposeText: string\n usdHuman: string\n product: ArcusFundProduct\n}\n\ntype ArcusWithdrawMultisignArgs = {\n keyGen: KeyGenSubsetForPermit\n chainId: number\n purposeText: string\n usdHuman: string\n executorAddress: Address\n product: ArcusFundProduct\n}\n\nexport async function buildArcusDepositMultisign(args: ArcusDepositMultisignArgs) {\n if (!isArcusChainSupported(args.chainId)) {\n throw new Error('chainId must be 4663 (Robinhood Chain)')\n }\n await assertArcusAddressRegisteredForDeposit({\n chainId: args.chainId,\n executorAddress: getAddress(args.executorAddress),\n })\n const cfg = arcusBridgeConfig(args.chainId)\n if (!cfg) throw new Error('Arcus deposit is not configured for this chain.')\n const amountWei = parseArcusUsdHumanToUsdgWei(args.usdHuman)\n const executor = getAddress(args.executorAddress)\n const accountIndex = args.product === 'spot' ? 1 : 0\n const usdg = getAddress(cfg.usdg)\n const depositProxy = getAddress(cfg.depositProxy)\n\n const approveData = encodeFunctionData({\n abi: erc20ApproveAbi,\n functionName: 'approve',\n args: [depositProxy, amountWei],\n })\n const depositData = encodeFunctionData({\n abi: depositProxyAbi,\n functionName: 'initiateDeposit',\n args: [executor, accountIndex, usdg, amountWei],\n })\n\n return buildEvmMultisignBatch({\n context: {\n keyGen: args.keyGen,\n chainCategory: 'evm',\n chainId: args.chainId,\n rpcUrl: args.rpcUrl,\n chainDetail: args.chainDetail,\n useCustomGas: args.useCustomGas,\n customGasChainDetails: args.customGasChainDetails ?? null,\n executorAddress: executor,\n purposeText: args.purposeText,\n },\n steps: [\n { to: usdg, data: approveData, value: 0n, fallbackGas: DEPOSIT_APPROVE_FALLBACK_GAS },\n { to: depositProxy, data: depositData, value: 0n, fallbackGas: DEPOSIT_INITIATE_FALLBACK_GAS },\n ],\n destinationAddress: depositProxy,\n buildBatchMeta: ({ index }) => {\n if (index === 0) {\n return {\n kind: 'Arcus',\n action: 'depositApprove',\n product: args.product,\n accountIndex,\n usdg,\n depositProxy,\n usdHuman: args.usdHuman,\n evm: { type: 'arcus_deposit_approve', version: 1, chainId: String(args.chainId) },\n }\n }\n return {\n kind: 'Arcus',\n action: 'deposit',\n product: args.product,\n accountIndex,\n usdg,\n depositProxy,\n usdHuman: args.usdHuman,\n evm: { type: 'arcus_deposit_initiate', version: 1, chainId: String(args.chainId) },\n }\n },\n })\n}\n\nexport async function buildArcusWithdrawMultisign(args: ArcusWithdrawMultisignArgs) {\n if (!isArcusChainSupported(args.chainId)) {\n throw new Error('chainId must be 4663 (Robinhood Chain)')\n }\n const minQuantums = ARCUS_QUOTE_QUANTUMS_PER_USD * BigInt(ARCUS_MIN_WITHDRAW_USD)\n const typed = buildArcusWithdrawTypedData({\n chainId: args.chainId,\n executorAddress: args.executorAddress,\n product: args.product,\n usdHuman: args.usdHuman,\n })\n if (typed.message.amount < minQuantums) {\n throw new Error(`Arcus withdraw must be at least ${ARCUS_MIN_WITHDRAW_USD} USD`)\n }\n\n return buildEip712MultisignBody({\n keyGen: args.keyGen,\n purposeText: args.purposeText,\n destinationChainID: String(args.chainId),\n destinationAddress: getAddress(args.executorAddress),\n typedData: typed,\n delivery: {\n kind: 'arcus_withdraw',\n chainId: args.chainId,\n product: args.product,\n accountIndex: typed.message.accountIndex,\n body: typed.requestBody,\n },\n audit: {\n protocol: ARCUS_PROTOCOL_ID,\n action: 'withdraw',\n product: args.product,\n usdHuman: args.usdHuman,\n accountIndex: typed.message.accountIndex,\n nonce: typed.message.nonce,\n },\n })\n}\n\nexport async function buildEvmMultisignBodyArcusDepositBatch(args: ArcusDepositMultisignArgs) {\n return buildArcusDepositMultisign(args)\n}\n\nexport async function buildArcusWithdrawMultisignBody(args: ArcusWithdrawMultisignArgs) {\n return buildArcusWithdrawMultisign(args)\n}\n","import { getAddress, type Address } from 'viem'\nimport { arcusFetchApiKeys } from './api.js'\n\n/** Deposit collateral is only allowed after `createApiKey` has registered an Ed25519 key for the address. */\nexport async function assertArcusAddressRegisteredForDeposit(args: {\n chainId: number\n executorAddress: Address\n}): Promise<void> {\n const address = getAddress(args.executorAddress).toLowerCase()\n const { apiKeys } = await arcusFetchApiKeys({ chainId: args.chainId, address })\n if (!Array.isArray(apiKeys) || apiKeys.length === 0) {\n throw new Error(\n 'Arcus deposit requires a registered API key for this address. Complete Setup (createApiKey) first.',\n )\n }\n}\n\nexport async function arcusAddressHasRegisteredApiKey(args: {\n chainId: number\n executorAddress: string\n}): Promise<boolean> {\n try {\n await assertArcusAddressRegisteredForDeposit({\n chainId: args.chainId,\n executorAddress: getAddress(args.executorAddress.trim() as `0x${string}`),\n })\n return true\n } catch {\n return false\n }\n}\n"]}
|