@continuumdao/ctm-mpc-defi 0.2.48 → 0.2.49
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 +1083 -4
- package/dist/agent/catalog.cjs.map +1 -1
- package/dist/agent/catalog.d.ts +1191 -7
- package/dist/agent/catalog.js +1047 -5
- package/dist/agent/catalog.js.map +1 -1
- package/dist/agent/skills/derive/SKILL.md +112 -0
- package/dist/agent/skills/hyperliquid/SKILL.md +22 -2
- package/dist/chains/evm/index.d.ts +118 -6
- package/dist/chains/near/index.d.ts +7 -1
- package/dist/chains/solana/index.d.ts +7 -1
- package/dist/core/index.cjs +2 -1
- package/dist/core/index.cjs.map +1 -1
- package/dist/core/index.d.ts +138 -7
- package/dist/core/index.js +2 -1
- package/dist/core/index.js.map +1 -1
- package/dist/index.cjs +2 -1
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.ts +848 -16
- package/dist/index.js +2 -1
- package/dist/index.js.map +1 -1
- package/dist/protocols/evm/aave-v4/index.d.ts +600 -6
- package/dist/protocols/evm/aerodrome/index.cjs.map +1 -1
- package/dist/protocols/evm/aerodrome/index.d.ts +125 -5
- package/dist/protocols/evm/aerodrome/index.js.map +1 -1
- package/dist/protocols/evm/arcus/index.d.ts +66 -2
- package/dist/protocols/evm/circle-cctp/index.d.ts +71 -2
- package/dist/protocols/evm/compound-v3/index.d.ts +52 -1
- package/dist/protocols/evm/continuum-dao/index.d.ts +56 -1
- package/dist/protocols/evm/curve-dao/index.d.ts +66 -2
- package/dist/protocols/evm/derive/index.cjs +2655 -0
- package/dist/protocols/evm/derive/index.cjs.map +1 -0
- package/dist/protocols/evm/derive/index.d.ts +859 -0
- package/dist/protocols/evm/derive/index.js +2536 -0
- package/dist/protocols/evm/derive/index.js.map +1 -0
- package/dist/protocols/evm/ethena/index.d.ts +52 -1
- package/dist/protocols/evm/euler-v2/index.d.ts +115 -16
- package/dist/protocols/evm/gmx/index.d.ts +66 -2
- package/dist/protocols/evm/hyperliquid/index.cjs +545 -267
- package/dist/protocols/evm/hyperliquid/index.cjs.map +1 -1
- package/dist/protocols/evm/hyperliquid/index.d.ts +152 -7
- package/dist/protocols/evm/hyperliquid/index.js +535 -269
- package/dist/protocols/evm/hyperliquid/index.js.map +1 -1
- package/dist/protocols/evm/lido/index.d.ts +52 -1
- package/dist/protocols/evm/maple/index.d.ts +52 -1
- package/dist/protocols/evm/morpho/index.d.ts +115 -4
- package/dist/protocols/evm/pendle/index.cjs +2 -1
- package/dist/protocols/evm/pendle/index.cjs.map +1 -1
- package/dist/protocols/evm/pendle/index.d.ts +125 -5
- package/dist/protocols/evm/pendle/index.js +2 -1
- package/dist/protocols/evm/pendle/index.js.map +1 -1
- package/dist/protocols/evm/permit2/index.d.ts +14 -1
- package/dist/protocols/evm/sky/index.d.ts +52 -1
- package/dist/protocols/evm/uniswap-v4/index.d.ts +78 -4
- package/dist/protocols/evm/venice/index.d.ts +52 -1
- package/package.json +7 -2
- package/dist/buildBatch-tsEUVn_a.d.ts +0 -45
- package/dist/eip712Multisign-6oNIlObj.d.ts +0 -39
- package/dist/envelope-Cm-llShH.d.ts +0 -37
- package/dist/merklDistributor-CdqtZC9N.d.ts +0 -65
- package/dist/multisign-Dr0j9fHm.d.ts +0 -489
- package/dist/registry-BvsXh0-r.d.ts +0 -8
- package/dist/types-RJpoU4Pc.d.ts +0 -34
- package/dist/types-lIfv59N1.d.ts +0 -63
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../../src/core/registry.ts","../../../../src/protocols/evm/derive/constants.ts","../../../../src/protocols/evm/derive/support.ts","../../../../src/protocols/evm/derive/native.ts","../../../../src/protocols/evm/derive/api.ts","../../../../src/protocols/evm/derive/assets.ts","../../../../src/protocols/evm/derive/reads.ts","../../../../src/protocols/evm/derive/accountReads.ts","../../../../src/protocols/evm/derive/signing.ts","../../../../src/protocols/evm/derive/loginSigning.ts","../../../../src/core/purpose.ts","../../../../src/core/envelope.ts","../../../../src/core/eip712Multisign.ts","../../../../src/protocols/evm/derive/exchangeMultisign.ts","../../../../src/core/defiEvmClient.ts","../../../../src/chains/evm/routerSwapGas.ts","../../../../src/chains/evm/buildBatch.ts","../../../../src/chains/evm/erc20Approve.ts","../../../../src/protocols/evm/derive/depositMultisign.ts","../../../../src/protocols/evm/derive/depositAddress.ts","../../../../src/protocols/evm/derive/bridgeConstants.ts","../../../../src/protocols/evm/derive/socketMultisign.ts","../../../../src/protocols/evm/derive/hypeVaultMultisign.ts","../../../../src/protocols/evm/derive/transferMultisign.ts","../../../../src/protocols/evm/derive/index.ts"],"names":["getAddress","networkFromArgs","hashTypedData","stringToHex","gasLimitFromEstimateAndChainConfig","keccak256","defineChain","createPublicClient","parseAbi","parseUnits","encodeFunctionData","WRAP_FALLBACK","APPROVE_FALLBACK","ZERO_ADDRESS"],"mappings":"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","file":"index.js","sourcesContent":["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","export const DERIVE_PROTOCOL_ID = 'derive' as const\n\nexport const DERIVE_MATCHING_VERIFYING_CONTRACT = '0xeB8d770ec18DB98Db922E9D83260A585b9F0DeAD' as const\n\n/** keccak256(\"Action(uint256 subaccountId,uint256 nonce,address module,bytes data,uint256 expiry,address owner,address signer)\") */\nexport const DERIVE_ACTION_TYPEHASH =\n '0x4d7a9f27c403ff9c0f19bce61d76d82f9aa29f8d6d4b0c5474607d9770d1af17' as const\n\nexport const DERIVE_TRADE_MODULE = '0xB8D20c2B7a1Ad2EE33Bc50eF10876eD3035b5e7b' as const\nexport const DERIVE_TRANSFER_MODULE = '0x01259207A40925b794C8ac320456F7F6c8FE2636' as const\n\nexport const DERIVE_DOMAIN_SEPARATOR_MAINNET =\n '0xda616dfabb88681b08e1592820a41d55ddc62d68de110e327ae99d734506fe19' as const\nexport const DERIVE_DOMAIN_SEPARATOR_TESTNET =\n '0x24d674cd5f2b9d564691c51e9d88f649b99246a2244dd74ce27b96578d773e85' as const\n\nexport const DERIVE_MAINNET_API = 'https://api.derive.xyz/v3'\nexport const DERIVE_TESTNET_API = 'https://testnet.api.derive.xyz/v3'\n/** Live production REST. v3 mainnet currently ‑32603s catalog methods that still work here. */\nexport const DERIVE_MAINNET_API_V2 = 'https://api.lyra.finance'\nexport const DERIVE_TESTNET_API_V2 = 'https://api-demo.lyra.finance'\n\n/** Sepolia OnchainActionManager. Mainnet is still unpublished — override via env or builder arg. */\nexport const DERIVE_ACTION_MANAGER_TESTNET = '0xd3625eCf97E5554C62A48Ac1c9284C9dCeFceB68' as const\n\nexport const DERIVE_EIP712_NAME = 'Matching'\nexport const DERIVE_EIP712_VERSION = '1.0'\n\nexport const DERIVE_DEFAULT_SIGNATURE_EXPIRY_SEC = 300\nexport const DERIVE_MIN_ORDER_EXPIRY_SEC = 10\n\nexport const DERIVE_OHLCV_INTERVALS = ['1m', '5m', '15m', '30m', '1h', '4h', '1d', '1w'] as const\nexport type DeriveOhlcvInterval = (typeof DERIVE_OHLCV_INTERVALS)[number]\n\nexport const DERIVE_OHLCV_PERIOD_SEC: Record<DeriveOhlcvInterval, number> = {\n '1m': 60,\n '5m': 300,\n '15m': 900,\n '30m': 1_800,\n '1h': 3_600,\n '4h': 14_400,\n '1d': 86_400,\n '1w': 604_800,\n}\n\nexport const DERIVE_DEFAULT_OHLCV_INTERVAL: DeriveOhlcvInterval = '15m'\n/** Default window when the caller omits lookback — enough for a dialog chart, not a full history dump. */\nexport const DERIVE_DEFAULT_OHLCV_BARS = 96\n/** Default strike/premium ladder: ATM window, same width as the Trade-tab table. */\nexport const DERIVE_DEFAULT_TICKER_ATM_STRIKES = 9\nexport const DERIVE_DEFAULT_LOOKBACK_DAYS = 2\nexport const DERIVE_MAX_LOOKBACK_DAYS = 90\nexport const DERIVE_MAX_OHLCV_BARS = 2000\n\nexport const DERIVE_UNFUNDED_NOTES =\n 'No Derive subaccount on this KeyGen. Fund from a logo row: Ethereum L1 USDC/WETH/WBTC (ctm_derive_build_deposit_new_subaccount_multisign or register_deposit_address + transfer), Socket USDC/WETH/WBTC on Optimism/Base/Arbitrum (ctm_derive_build_socket_deposit_multisign), or HyperEVM HYPE (ctm_derive_build_hype_vault_deposit_multisign). After credit, EIP-712 orders use Derive collateral.'\n\nexport const DERIVE_UNFUNDED_NEXT = [\n 'ctm_derive_fetch_risk_universes',\n 'ctm_derive_build_deposit_new_subaccount_multisign',\n 'ctm_derive_register_deposit_address',\n 'ctm_derive_build_socket_deposit_multisign',\n 'ctm_derive_build_hype_vault_deposit_multisign',\n] as const\n\nexport const DERIVE_MISSING_SUBACCOUNT_ERROR =\n 'subaccountId is required and must come from ctm_derive_fetch_subaccounts. If that list is empty, fund from a Derive logo row (Ethereum L1, Socket on OP/Base/Arb, or HyperEVM HYPE). Do not use subaccount_id 0 for orders.'\n","import { getAddress } from 'viem'\nimport {\n DERIVE_ACTION_MANAGER_TESTNET,\n DERIVE_MAINNET_API,\n DERIVE_MAINNET_API_V2,\n DERIVE_TESTNET_API,\n DERIVE_TESTNET_API_V2,\n} from './constants.js'\n\n/** Settlement chain for EIP-712 domain + Direct deposit. */\nexport const DERIVE_SETTLEMENT_CHAIN_IDS = [1, 11155111] as const\n\nexport type DeriveNetwork = 'mainnet' | 'testnet'\n\nexport function deriveNetworkFromChainId(chainId: number): DeriveNetwork {\n return chainId === 11155111 ? 'testnet' : 'mainnet'\n}\n\nexport function deriveSettlementChainId(network: DeriveNetwork): number {\n return network === 'testnet' ? 11155111 : 1\n}\n\nexport function deriveApiBaseUrl(network: DeriveNetwork = 'mainnet'): string {\n return network === 'testnet' ? DERIVE_TESTNET_API : DERIVE_MAINNET_API\n}\n\n/** Production REST used when v3 public catalog methods ‑32603 / 404 / return empty. */\nexport function deriveApiFallbackBaseUrl(network: DeriveNetwork = 'mainnet'): string {\n return network === 'testnet' ? DERIVE_TESTNET_API_V2 : DERIVE_MAINNET_API_V2\n}\n\nexport function deriveApiBaseUrlForChainId(chainId: number): string {\n return deriveApiBaseUrl(deriveNetworkFromChainId(chainId))\n}\n\nexport function deriveActionManagerAddress(chainId: number, override?: string): `0x${string}` {\n const explicit = (override ?? process.env.DERIVE_ACTION_MANAGER ?? '').trim()\n if (explicit) return getAddress(explicit)\n if (chainId === 11155111) return DERIVE_ACTION_MANAGER_TESTNET\n throw new Error(\n 'Derive mainnet ACTION_MANAGER is not published yet. Pass actionManager or set DERIVE_ACTION_MANAGER. Testnet (11155111) uses the documented Sepolia address.',\n )\n}\n\nexport function isDeriveSettlementChainId(chainId: number): boolean {\n return (DERIVE_SETTLEMENT_CHAIN_IDS as readonly number[]).includes(chainId)\n}\n\n/**\n * Asset-row chains that can actually fund Derive (Hyperliquid-shaped).\n * Ethereum L1 direct / deposit-address, Socket on OP/Base/Arb, HYPE vault on HyperEVM.\n */\nexport const DERIVE_ASSET_ROW_CHAIN_IDS = [1, 10, 8453, 42161, 999, 11155111] as const\n\nexport function isDeriveAssetRowChainId(chainId: number): boolean {\n return (DERIVE_ASSET_ROW_CHAIN_IDS as readonly number[]).includes(chainId)\n}\n\nexport function isDeriveChainSupported(chainId: number): boolean {\n return isDeriveAssetRowChainId(chainId)\n}\n\nexport const NATIVE_ZERO = '0x0000000000000000000000000000000000000000' as const\n\ntype TokenRow = { address: `0x${string}`; symbol: string; decimals: number; roles: string[] }\n\nconst USDC: Record<number, `0x${string}`> = {\n 1: '0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48',\n 10: '0x0b2C639c533813f4Aa9D7837CAf62653d097Ff85',\n 8453: '0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913',\n 42161: '0xaf88d065e77c8cC2239327C5EDb3A432268e5831',\n 11155111: '0x73Efab09362052D26FB93A730Be4F8a5EdC833af',\n}\n\nconst WETH: Record<number, `0x${string}`> = {\n 1: '0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2',\n 10: '0x4200000000000000000000000000000000000006',\n 8453: '0x4200000000000000000000000000000000000006',\n 42161: '0x82aF49447D8a07e3bd95BD0d56f35241523fBab1',\n}\n\nconst WBTC: Record<number, `0x${string}`> = {\n 1: '0x2260FAC5E5542a773Aa44fBCfeDf7C193bc2C599',\n 10: '0x68f180fcCe6836688e9084f035309E29Bf0A2095',\n 42161: '0x2f2a2543B76A4166549B7eCDcE5542a773Aa44fB',\n}\n\nconst WHYPE = '0x5555555555555555555555555555555555555555' as const\n\n/** Per-chain token rows that can fund Derive (Socket / L1 / HYPE vault). */\nexport function deriveMappedTokensForChain(chainId: number): TokenRow[] {\n const tokens: TokenRow[] = []\n const add = (address: string | undefined, symbol: string, decimals: number, roles: string[]) => {\n if (!address) return\n tokens.push({ address: getAddress(address), symbol, decimals, roles })\n }\n\n if ([1, 10, 8453, 42161].includes(chainId)) {\n add(NATIVE_ZERO, 'ETH', 18, ['native', 'underlying'])\n add(WETH[chainId], 'WETH', 18, ['native_wrapped', 'underlying'])\n }\n if (chainId === 999) {\n add(NATIVE_ZERO, 'HYPE', 18, ['native', 'collateral'])\n add(WHYPE, 'WHYPE', 18, ['native_wrapped', 'collateral'])\n }\n\n add(USDC[chainId], 'USDC', 6, ['collateral', 'quote'])\n add(WBTC[chainId], 'WBTC', 8, ['underlying', 'collateral'])\n\n return tokens\n}\n\nexport function deriveNativeWrappedForChain(chainId: number): string | undefined {\n if (chainId === 999) return WHYPE\n return WETH[chainId]\n}\n\nexport function deriveAdvisorNotes(): string {\n return 'Fund from Ethereum USDC/WETH/WBTC (L1 ACTION_MANAGER or deposit address), Socket USDC/WETH/WBTC on Optimism/Base/Arbitrum, or HyperEVM HYPE (vault). Derive Chain 957 is not a Continuum Assets chain. After credit, EIP-712 options use Derive collateral.'\n}\n","import { getAddress } from 'viem'\nimport { NATIVE_ZERO } from './support.js'\n\n/** Map a node asset-row address to the Derive advisor lookup key (native gas → wrapped). */\nexport function deriveKeyForNodeAssetRow(args: {\n contractAddress: string\n nativeWrapped?: string | null\n}): string | null {\n const raw = (args.contractAddress ?? '').trim()\n if (!raw || raw.toLowerCase() === 'native') {\n const w = (args.nativeWrapped ?? '').trim()\n if (!w) return NATIVE_ZERO\n try {\n return getAddress(w).toLowerCase()\n } catch {\n return null\n }\n }\n try {\n const a = getAddress(raw)\n if (a.toLowerCase() === NATIVE_ZERO && args.nativeWrapped) {\n return getAddress(args.nativeWrapped.trim() as `0x${string}`).toLowerCase()\n }\n return a.toLowerCase()\n } catch {\n return null\n }\n}\n","import { deriveApiBaseUrl, deriveApiFallbackBaseUrl, type DeriveNetwork } from './support.js'\n\nexport type DeriveAuth = {\n wallet: string\n timestamp: string\n signature: string\n}\n\nexport type DeriveRpcError = {\n code?: number\n message?: string\n data?: unknown\n}\n\nfunction methodName(method: string): string {\n return method.replace(/^\\//, '')\n}\n\nexport function isDerivePublicMethod(method: string): boolean {\n return methodName(method).startsWith('public/')\n}\n\nexport function isEmptyDerivePublicResult(method: string, result: unknown): boolean {\n const m = methodName(method)\n if (result == null) return true\n if (m === 'public/get_all_currencies' && Array.isArray(result) && result.length === 0) return true\n if (m === 'public/get_tickers' && result && typeof result === 'object') {\n const tickers = (result as { tickers?: unknown }).tickers\n if (Array.isArray(tickers) && tickers.length === 0) return true\n if (tickers && typeof tickers === 'object' && !Array.isArray(tickers) && Object.keys(tickers).length === 0) {\n return true\n }\n }\n return false\n}\n\nexport function isDeriveRecoverablePublicError(err: unknown): boolean {\n const name = err instanceof Error ? err.name : ''\n const msg = err instanceof Error ? err.message : String(err)\n return (\n name === 'TimeoutError' ||\n name === 'AbortError' ||\n /Internal error|HTTP 404|Not Found|returned empty|empty catalog|Ticker not found|aborted due to timeout|The operation was aborted/i.test(\n msg,\n )\n )\n}\n\nfunction unwrapResult(json: unknown, method: string): unknown {\n if (json && typeof json === 'object') {\n const rec = json as Record<string, unknown>\n if (rec.error) {\n const err = rec.error as DeriveRpcError\n const detail = err.data != null && String(err.data).trim() ? ` (${String(err.data).slice(0, 160)})` : ''\n throw new Error(`Derive ${method} failed: ${err.message ?? JSON.stringify(rec.error)}${detail}`)\n }\n if ('result' in rec) return rec.result\n }\n return json\n}\n\nasync function deriveRpcPost<T>(args: {\n base: string\n method: string\n params?: Record<string, unknown>\n auth?: DeriveAuth\n}): Promise<T> {\n const method = methodName(args.method)\n const headers: Record<string, string> = { 'Content-Type': 'application/json' }\n if (args.auth) {\n headers['X-DeriveWallet'] = args.auth.wallet\n headers['X-DeriveTimestamp'] = args.auth.timestamp\n headers['X-DeriveSignature'] = args.auth.signature\n }\n const res = await fetch(`${args.base}/${method}`, {\n method: 'POST',\n headers,\n body: JSON.stringify(args.params ?? {}),\n cache: 'no-store',\n signal: AbortSignal.timeout(15_000),\n })\n const text = await res.text().catch(() => '')\n if (!res.ok || !text.trim() || text.trim() === 'Not Found') {\n throw new Error(`Derive ${method} HTTP ${res.status}: ${text.slice(0, 240) || 'empty body'}`)\n }\n let json: unknown\n try {\n json = JSON.parse(text)\n } catch {\n throw new Error(`Derive ${method} returned non-JSON: ${text.slice(0, 160)}`)\n }\n const result = unwrapResult(json, method)\n if (isEmptyDerivePublicResult(method, result)) {\n throw new Error(`Derive ${method} returned empty catalog`)\n }\n return result as T\n}\n\nexport async function deriveRpc<T>(args: {\n method: string\n params?: Record<string, unknown>\n network?: DeriveNetwork\n auth?: DeriveAuth\n}): Promise<T> {\n const network = args.network ?? 'mainnet'\n const method = methodName(args.method)\n const primary = deriveApiBaseUrl(network)\n try {\n return await deriveRpcPost<T>({\n base: primary,\n method,\n params: args.params,\n auth: args.auth,\n })\n } catch (err) {\n const fallback = deriveApiFallbackBaseUrl(network)\n if (!isDerivePublicMethod(method) || fallback === primary || !isDeriveRecoverablePublicError(err)) {\n throw err\n }\n return await deriveRpcPost<T>({\n base: fallback,\n method,\n params: args.params,\n auth: args.auth,\n })\n }\n}\n\nexport function requireDeriveAuth(auth: DeriveAuth | undefined, toolHint: string): DeriveAuth {\n if (!auth?.wallet?.trim() || !auth?.timestamp?.trim() || !auth?.signature?.trim()) {\n throw new Error(\n `${toolHint} needs EIP-191 login headers (X-DeriveWallet / X-DeriveTimestamp / X-DeriveSignature). The node caches one personal_sign of a millisecond timestamp for the KeyGen executor.`,\n )\n }\n return auth\n}\n","import { deriveRpc } from './api.js'\nimport type { DeriveNetwork } from './support.js'\n\nexport type DeriveInstrument = {\n instrument_name: string\n instrument_type?: string\n base_asset_address?: string\n base_asset_sub_id?: string\n is_active?: boolean\n option_details?: {\n expiry?: number\n strike?: string\n option_type?: string\n }\n [key: string]: unknown\n}\n\nexport type DeriveCurrencyManager = {\n address?: string\n margin_type?: string\n currency?: string | null\n manager_id?: number\n}\n\nexport type DeriveCurrency = {\n currency: string\n instrument_types?: string[]\n protocol_asset_addresses?: {\n option?: string | null\n perp?: string | null\n spot?: string | null\n underlying_erc20?: string | null\n }\n managers?: DeriveCurrencyManager[]\n spot?: Array<{ erc20?: { underlying_erc20?: string; decimals?: number } }>\n [key: string]: unknown\n}\n\nexport async function deriveFetchInstrument(args: {\n instrumentName: string\n network?: DeriveNetwork\n}): Promise<DeriveInstrument> {\n const name = args.instrumentName.trim().toUpperCase()\n if (!name) throw new Error('instrumentName is required.')\n const result = await deriveRpc<DeriveInstrument>({\n method: 'public/get_instrument',\n params: { instrument_name: name },\n network: args.network,\n })\n if (!result?.instrument_name && !result?.base_asset_address) {\n throw new Error(`Derive instrument not found: ${name}`)\n }\n return { ...result, instrument_name: result.instrument_name ?? name }\n}\n\nexport async function deriveFetchCurrenciesRaw(args?: { network?: DeriveNetwork }): Promise<DeriveCurrency[]> {\n const result = await deriveRpc<unknown>({\n method: 'public/get_all_currencies',\n network: args?.network,\n })\n if (Array.isArray(result)) return result as DeriveCurrency[]\n if (result && typeof result === 'object' && Array.isArray((result as { currencies?: unknown }).currencies)) {\n return (result as { currencies: DeriveCurrency[] }).currencies\n }\n return []\n}\n\nfunction asInstrumentList(result: unknown): DeriveInstrument[] {\n if (Array.isArray(result)) return result as DeriveInstrument[]\n if (result && typeof result === 'object' && Array.isArray((result as { instruments?: unknown }).instruments)) {\n return (result as { instruments: DeriveInstrument[] }).instruments\n }\n return []\n}\n\nasync function deriveFetchOptionInstrumentsOneShot(args: {\n currency: string\n expired: boolean\n network?: DeriveNetwork\n}): Promise<DeriveInstrument[]> {\n const result = await deriveRpc<unknown>({\n method: 'public/get_instruments',\n params: {\n instrument_type: 'option',\n currency: args.currency,\n expired: args.expired,\n },\n network: args.network,\n })\n return asInstrumentList(result)\n}\n\nasync function deriveFetchOptionInstrumentPage(args: {\n currency: string\n expired: boolean\n page: number\n pageSize: number\n network?: DeriveNetwork\n}): Promise<DeriveInstrument[]> {\n const result = await deriveRpc<unknown>({\n method: 'public/get_all_instruments',\n params: {\n instrument_type: 'option',\n currency: args.currency,\n expired: args.expired,\n page: args.page,\n page_size: args.pageSize,\n },\n network: args.network,\n })\n return asInstrumentList(result)\n}\n\nexport async function deriveFetchOptionInstruments(args: {\n currency: string\n expired?: boolean\n page?: number\n pageSize?: number\n network?: DeriveNetwork\n}): Promise<{ instruments: DeriveInstrument[] }> {\n const currency = args.currency.trim().toUpperCase()\n if (!currency) throw new Error('currency is required (e.g. ETH).')\n const expired = args.expired ?? false\n const pageSize = args.pageSize ?? 200\n if (args.page == null) {\n try {\n const oneShot = await deriveFetchOptionInstrumentsOneShot({ currency, expired, network: args.network })\n if (oneShot.length) return { instruments: oneShot }\n } catch {\n // v3 mainnet 404s this method; fall through to paginated get_all_instruments (+ v2 fallback).\n }\n }\n if (args.page != null) {\n return {\n instruments: await deriveFetchOptionInstrumentPage({\n currency,\n expired,\n page: args.page,\n pageSize,\n network: args.network,\n }),\n }\n }\n const instruments: DeriveInstrument[] = []\n for (let page = 1; page <= 8; page++) {\n const chunk = await deriveFetchOptionInstrumentPage({\n currency,\n expired,\n page,\n pageSize,\n network: args.network,\n })\n instruments.push(...chunk)\n if (chunk.length < pageSize) break\n }\n return { instruments }\n}\n\nexport function deriveSearchInstruments(instruments: DeriveInstrument[], query: string, limit = 25): DeriveInstrument[] {\n const q = query.trim().toUpperCase()\n if (!q) return instruments.slice(0, limit)\n return instruments\n .filter((i) => {\n const name = String(i.instrument_name ?? '').toUpperCase()\n return name.includes(q) || name.replace(/-/g, '').includes(q.replace(/-/g, ''))\n })\n .slice(0, limit)\n}\n","import {\n DERIVE_DEFAULT_OHLCV_BARS,\n DERIVE_DEFAULT_OHLCV_INTERVAL,\n DERIVE_DEFAULT_TICKER_ATM_STRIKES,\n DERIVE_MAX_LOOKBACK_DAYS,\n DERIVE_MAX_OHLCV_BARS,\n DERIVE_OHLCV_INTERVALS,\n DERIVE_OHLCV_PERIOD_SEC,\n type DeriveOhlcvInterval,\n} from './constants.js'\nimport { deriveRpc } from './api.js'\nimport {\n deriveFetchCurrenciesRaw,\n deriveFetchOptionInstruments,\n deriveSearchInstruments,\n type DeriveCurrency,\n type DeriveInstrument,\n} from './assets.js'\nimport type { DeriveNetwork } from './support.js'\nimport { deriveNetworkFromChainId } from './support.js'\n\nexport type DeriveOhlcvCandle = {\n timestampMs: number\n open: string\n high: string\n low: string\n close: string\n volume: string\n}\n\nfunction networkFromArgs(chainId?: number, network?: DeriveNetwork): DeriveNetwork {\n if (network) return network\n if (chainId != null) return deriveNetworkFromChainId(chainId)\n return 'mainnet'\n}\n\nfunction assertInterval(interval?: string): DeriveOhlcvInterval {\n const v = (interval ?? DERIVE_DEFAULT_OHLCV_INTERVAL) as DeriveOhlcvInterval\n if (!(DERIVE_OHLCV_INTERVALS as readonly string[]).includes(v)) {\n throw new Error(`Invalid Derive OHLCV interval: ${interval}. Valid: ${DERIVE_OHLCV_INTERVALS.join(', ')}`)\n }\n return v\n}\n\nexport function resolveDeriveOhlcvWindow(args: {\n interval: DeriveOhlcvInterval\n lookbackDays?: number\n lookbackHours?: number\n startTimeMs?: number\n endTimeMs?: number\n}) {\n const periodSec = DERIVE_OHLCV_PERIOD_SEC[args.interval]\n const endTimeMs = args.endTimeMs ?? Date.now()\n let startTimeMs = args.startTimeMs\n if (startTimeMs == null) {\n if (args.lookbackDays != null || args.lookbackHours != null) {\n const days = args.lookbackDays ?? (args.lookbackHours as number) / 24\n if (days > DERIVE_MAX_LOOKBACK_DAYS) {\n throw new Error(`lookbackDays max is ${DERIVE_MAX_LOOKBACK_DAYS}.`)\n }\n startTimeMs = endTimeMs - Math.round(days * 86_400_000)\n } else {\n startTimeMs = endTimeMs - DERIVE_DEFAULT_OHLCV_BARS * periodSec * 1000\n }\n }\n if (startTimeMs >= endTimeMs) {\n throw new Error('Invalid OHLCV time range: startTimeMs must be before endTimeMs.')\n }\n const expectedBars = Math.ceil((endTimeMs - startTimeMs) / (periodSec * 1000))\n if (expectedBars > DERIVE_MAX_OHLCV_BARS) {\n throw new Error(\n `OHLCV range needs ~${expectedBars} bars at ${args.interval} (max ${DERIVE_MAX_OHLCV_BARS}). Use a coarser interval or shorter lookback.`,\n )\n }\n return { startTimeMs, endTimeMs, expectedBars, periodSec }\n}\n\nexport function mapDeriveTradingviewCandles(raw: unknown): DeriveOhlcvCandle[] {\n const rows = Array.isArray(raw)\n ? raw\n : raw && typeof raw === 'object' && Array.isArray((raw as { candles?: unknown }).candles)\n ? (raw as { candles: unknown[] }).candles\n : []\n return rows\n .map((row) => {\n const r = row as Record<string, unknown>\n const tsSec = Number(r.timestamp_bucket ?? r.timestamp ?? 0)\n return {\n timestampMs: Number.isFinite(tsSec) ? tsSec * 1000 : 0,\n open: String(r.open_price ?? r.open ?? '0'),\n high: String(r.high_price ?? r.high ?? '0'),\n low: String(r.low_price ?? r.low ?? '0'),\n close: String(r.close_price ?? r.close ?? '0'),\n volume: String(r.volume_usd ?? r.volume_contracts ?? r.volume ?? '0'),\n }\n })\n .filter((c) => c.timestampMs > 0)\n .sort((a, b) => a.timestampMs - b.timestampMs)\n}\n\nexport type DeriveOptionType = 'C' | 'P'\n\nexport type DeriveParsedInstrumentName = {\n currency: string\n expiryYmd: string\n strike: string\n optionType: DeriveOptionType\n}\n\nconst INSTRUMENT_NAME_RE = /^([A-Z0-9]+)-(\\d{8})-(\\d+(?:\\.\\d+)?)-([CP])$/\n\nexport function deriveParseInstrumentName(name: string): DeriveParsedInstrumentName | null {\n const m = name.trim().toUpperCase().match(INSTRUMENT_NAME_RE)\n if (!m) return null\n return { currency: m[1]!, expiryYmd: m[2]!, strike: m[3]!, optionType: m[4] as DeriveOptionType }\n}\n\nexport function deriveExpiryUnixToYmd(expirySec: number): string {\n const d = new Date(expirySec * 1000)\n const y = d.getUTCFullYear()\n const mo = String(d.getUTCMonth() + 1).padStart(2, '0')\n const day = String(d.getUTCDate()).padStart(2, '0')\n return `${y}${mo}${day}`\n}\n\nfunction tickerScalar(row: Record<string, unknown>, keys: readonly string[]): string | null {\n for (const key of keys) {\n const v = row[key]\n if (v != null && String(v).trim() !== '') return String(v)\n }\n return null\n}\n\nexport type DeriveTickerQuote = {\n instrumentName: string\n bidPx: string | null\n askPx: string | null\n markPx: string | null\n indexPx: string | null\n strike: string | null\n expiry: number | null\n expiryYmd: string | null\n optionType: DeriveOptionType | null\n greeks: Record<string, unknown> | null\n}\n\nexport function mapDeriveTickerRow(raw: unknown): DeriveTickerQuote | null {\n if (!raw || typeof raw !== 'object') return null\n const row = raw as Record<string, unknown>\n const inner =\n row.instrument_ticker && typeof row.instrument_ticker === 'object'\n ? (row.instrument_ticker as Record<string, unknown>)\n : row\n const instrumentName = tickerScalar(inner, ['instrument_name', 'instrumentName'])?.toUpperCase()\n if (!instrumentName) return null\n const parsed = deriveParseInstrumentName(instrumentName)\n const details =\n inner.option_details && typeof inner.option_details === 'object'\n ? (inner.option_details as Record<string, unknown>)\n : {}\n const expiryRaw = details.expiry\n const expiry = expiryRaw != null && Number.isFinite(Number(expiryRaw)) ? Number(expiryRaw) : null\n const optionTypeRaw = String(details.option_type ?? parsed?.optionType ?? '')\n .trim()\n .toUpperCase()\n const optionType = optionTypeRaw === 'C' || optionTypeRaw === 'P' ? optionTypeRaw : parsed?.optionType ?? null\n const strike = tickerScalar(details, ['strike']) ?? parsed?.strike ?? null\n const greeks =\n inner.option_pricing && typeof inner.option_pricing === 'object'\n ? (inner.option_pricing as Record<string, unknown>)\n : null\n return {\n instrumentName,\n bidPx: tickerScalar(inner, ['b', 'best_bid_price', 'bid']),\n askPx: tickerScalar(inner, ['a', 'best_ask_price', 'ask']),\n markPx: tickerScalar(inner, ['M', 'mark_price', 'mark']) ?? tickerScalar(greeks ?? {}, ['m', 'mark_price']),\n indexPx: tickerScalar(inner, ['I', 'index_price', 'index']),\n strike,\n expiry,\n expiryYmd: parsed?.expiryYmd ?? (expiry != null ? deriveExpiryUnixToYmd(expiry) : null),\n optionType,\n greeks,\n }\n}\n\nexport function collectDeriveTickerRows(raw: unknown): unknown[] {\n if (Array.isArray(raw)) return raw\n if (!raw || typeof raw !== 'object') return []\n const rec = raw as Record<string, unknown>\n if (Array.isArray(rec.tickers)) return rec.tickers\n if (rec.tickers && typeof rec.tickers === 'object') {\n return Object.entries(rec.tickers as Record<string, unknown>).map(([name, row]) => {\n if (row && typeof row === 'object' && !Array.isArray(row)) {\n const inner = row as Record<string, unknown>\n if (!inner.instrument_name && !inner.instrumentName) {\n return { ...inner, instrument_name: name }\n }\n }\n return row\n })\n }\n if (rec.result != null) return collectDeriveTickerRows(rec.result)\n return []\n}\n\nexport function normalizeDeriveExpiryYmd(raw: unknown): string {\n if (typeof raw === 'number' && Number.isFinite(raw)) return String(Math.trunc(raw))\n return String(raw ?? '')\n .trim()\n .replace(/-/g, '')\n}\n\nexport function deriveAtmTickerWindow(\n tickers: DeriveTickerQuote[],\n maxStrikes = DERIVE_DEFAULT_TICKER_ATM_STRIKES,\n): DeriveTickerQuote[] {\n const strikes = [\n ...new Set(\n tickers\n .map((t) => Number(t.strike))\n .filter((n) => Number.isFinite(n) && n > 0),\n ),\n ].sort((a, b) => a - b)\n if (strikes.length <= maxStrikes) return tickers\n const indexPx = Number(tickers.find((t) => t.indexPx)?.indexPx)\n let center = Math.floor(strikes.length / 2)\n if (Number.isFinite(indexPx) && indexPx > 0) {\n let best = 0\n let bestDist = Infinity\n strikes.forEach((strike, i) => {\n const dist = Math.abs(strike - indexPx)\n if (dist < bestDist) {\n bestDist = dist\n best = i\n }\n })\n center = best\n }\n const half = Math.floor(maxStrikes / 2)\n let start = Math.max(0, center - half)\n if (start + maxStrikes > strikes.length) start = Math.max(0, strikes.length - maxStrikes)\n const keep = new Set(strikes.slice(start, start + maxStrikes))\n return tickers.filter((t) => keep.has(Number(t.strike)))\n}\n\nexport async function deriveFetchTickersSummary(args: {\n chainId?: number\n network?: DeriveNetwork\n currency: string\n expiryDate: string | number\n optionType?: DeriveOptionType\n ladder?: 'atm' | 'all'\n}) {\n const network = networkFromArgs(args.chainId, args.network)\n const currency = args.currency.trim().toUpperCase()\n const expiryDate = normalizeDeriveExpiryYmd(args.expiryDate)\n if (!currency) throw new Error('currency is required.')\n if (!/^\\d{8}$/.test(expiryDate)) {\n throw new Error('expiryDate must be YYYYMMDD (e.g. 20260925 or 2026-09-25).')\n }\n const raw = await deriveRpc<unknown>({\n method: 'public/get_tickers',\n params: { instrument_type: 'option', currency, expiry_date: expiryDate },\n network,\n })\n let tickers = collectDeriveTickerRows(raw)\n .map(mapDeriveTickerRow)\n .filter((row): row is DeriveTickerQuote => row != null)\n if (args.optionType) tickers = tickers.filter((row) => row.optionType === args.optionType)\n tickers.sort((a, b) => Number(a.strike ?? 0) - Number(b.strike ?? 0) || a.instrumentName.localeCompare(b.instrumentName))\n const listedCount = tickers.length\n const ladder = args.ladder ?? 'atm'\n if (ladder === 'atm') tickers = deriveAtmTickerWindow(tickers)\n const indexPx = tickers.find((row) => row.indexPx)?.indexPx ?? null\n return {\n currency,\n expiryDate,\n optionType: args.optionType ?? null,\n ladder,\n indexPx,\n listedCount,\n tickerCount: tickers.length,\n callCount: tickers.filter((row) => row.optionType === 'C').length,\n putCount: tickers.filter((row) => row.optionType === 'P').length,\n tickers,\n notes:\n ladder === 'atm'\n ? `ATM strike/premium ladder (~${DERIVE_DEFAULT_TICKER_ATM_STRIKES} strikes around index). Pass ladder: \"all\" for every strike on this expiry. Then snapshot or order_quote one instrumentName.`\n : 'Full strike/premium ladder for this expiry. Then snapshot or order_quote one instrumentName.',\n network,\n }\n}\n\nexport type DeriveOrderBookLevel = { price: string; amount: string }\n\nexport function mapDeriveOrderBookLevels(raw: unknown): DeriveOrderBookLevel[] {\n if (!Array.isArray(raw)) return []\n return raw\n .map((row) => {\n if (Array.isArray(row) && row.length >= 2) {\n return { price: String(row[0]), amount: String(row[1]) }\n }\n if (row && typeof row === 'object') {\n const r = row as Record<string, unknown>\n const price = r.price ?? r[0]\n const amount = r.amount ?? r.size ?? r[1]\n if (price != null && amount != null) return { price: String(price), amount: String(amount) }\n }\n return null\n })\n .filter((row): row is DeriveOrderBookLevel => row != null)\n .slice(0, 8)\n}\n\nexport async function deriveFetchOrderBookSummary(args: {\n chainId?: number\n network?: DeriveNetwork\n instrumentName: string\n depth?: number\n}) {\n const network = networkFromArgs(args.chainId, args.network)\n const instrumentName = args.instrumentName.trim().toUpperCase()\n if (!instrumentName) throw new Error('instrumentName is required.')\n const raw = (await deriveRpc<Record<string, unknown>>({\n method: 'public/get_order_book',\n params: { instrument_name: instrumentName, depth: args.depth ?? 10 },\n network,\n })) as Record<string, unknown>\n return {\n instrumentName,\n bids: mapDeriveOrderBookLevels(raw.bids),\n asks: mapDeriveOrderBookLevels(raw.asks),\n network,\n }\n}\n\nexport async function deriveFetchCurrenciesSummary(args: { chainId?: number; network?: DeriveNetwork }) {\n const network = networkFromArgs(args.chainId, args.network)\n const currencies = await deriveFetchCurrenciesRaw({ network })\n return {\n currencies: currencies.map((c) => ({\n currency: String(c.currency ?? (c as { name?: string }).name ?? ''),\n })),\n network,\n }\n}\n\nexport type DeriveMappedOptionInstrument = {\n instrumentName: string\n instrumentType: string\n isActive: boolean\n strike: string | null\n expiry: number | null\n optionType: string | null\n}\n\nexport type DeriveOptionExpirySummary = {\n expiryYmd: string\n expiryUnix: number | null\n callCount: number\n putCount: number\n minStrike: string | null\n maxStrike: string | null\n}\n\nexport function summarizeDeriveOptionChain(args: {\n currency: string\n instruments: DeriveMappedOptionInstrument[]\n}): {\n currency: string\n instrumentCount: number\n callCount: number\n putCount: number\n expiries: DeriveOptionExpirySummary[]\n} {\n const currency = args.currency.trim().toUpperCase()\n const byExpiry = new Map<string, { expiryUnix: number | null; calls: number; puts: number; strikes: number[] }>()\n let callCount = 0\n let putCount = 0\n for (const row of args.instruments) {\n if (row.isActive === false) continue\n const parsed = deriveParseInstrumentName(row.instrumentName)\n const optionTypeRaw = String(row.optionType ?? parsed?.optionType ?? '')\n .trim()\n .toUpperCase()\n const optionType = optionTypeRaw === 'C' || optionTypeRaw === 'P' ? optionTypeRaw : null\n const expiryYmd =\n parsed?.expiryYmd ?? (row.expiry != null && Number.isFinite(row.expiry) ? deriveExpiryUnixToYmd(row.expiry) : '')\n if (!expiryYmd) continue\n const strikeNum = Number(row.strike ?? parsed?.strike ?? NaN)\n const bucket = byExpiry.get(expiryYmd) ?? { expiryUnix: row.expiry ?? null, calls: 0, puts: 0, strikes: [] }\n if (bucket.expiryUnix == null && row.expiry != null) bucket.expiryUnix = row.expiry\n if (optionType === 'C') {\n bucket.calls += 1\n callCount += 1\n } else if (optionType === 'P') {\n bucket.puts += 1\n putCount += 1\n }\n if (Number.isFinite(strikeNum)) bucket.strikes.push(strikeNum)\n byExpiry.set(expiryYmd, bucket)\n }\n const expiries = [...byExpiry.entries()]\n .sort(([a], [b]) => a.localeCompare(b))\n .map(([expiryYmd, bucket]) => {\n const sorted = [...bucket.strikes].sort((a, b) => a - b)\n return {\n expiryYmd,\n expiryUnix: bucket.expiryUnix,\n callCount: bucket.calls,\n putCount: bucket.puts,\n minStrike: sorted[0] != null ? String(sorted[0]) : null,\n maxStrike: sorted[sorted.length - 1] != null ? String(sorted[sorted.length - 1]) : null,\n }\n })\n return {\n currency,\n instrumentCount: callCount + putCount,\n callCount,\n putCount,\n expiries,\n }\n}\n\nexport async function deriveFetchOptionChainSummary(args: {\n chainId?: number\n network?: DeriveNetwork\n currency: string\n expired?: boolean\n}) {\n const network = networkFromArgs(args.chainId, args.network)\n const { instruments } = await deriveFetchOptionInstruments({\n currency: args.currency,\n expired: args.expired,\n network,\n })\n return {\n currency: args.currency.trim().toUpperCase(),\n instruments: instruments.map((i) => {\n const parsed = deriveParseInstrumentName(i.instrument_name)\n const optionTypeRaw = String(i.option_details?.option_type ?? parsed?.optionType ?? '')\n .trim()\n .toUpperCase()\n return {\n instrumentName: i.instrument_name,\n instrumentType: i.instrument_type ?? 'option',\n isActive: i.is_active ?? true,\n strike: i.option_details?.strike ?? parsed?.strike ?? null,\n expiry: i.option_details?.expiry ?? null,\n optionType: optionTypeRaw === 'C' || optionTypeRaw === 'P' ? optionTypeRaw : parsed?.optionType ?? null,\n }\n }),\n network,\n }\n}\n\n/** Compact expiry ladder for the agent — do not dump every instrument (offloads + bash). */\nexport async function deriveFetchOptionChainAgentSummary(args: {\n chainId?: number\n network?: DeriveNetwork\n currency: string\n expired?: boolean\n}) {\n const full = await deriveFetchOptionChainSummary(args)\n return {\n ...summarizeDeriveOptionChain(full),\n notes:\n 'Complete expiry list (counts + min/max strike only — not a missing-weekly warning). Next: ctm_derive_fetch_tickers {currency, expiryDate} for an ATM premium ladder. expiryDate accepts 20260925 or 2026-09-25. Pass ladder: \"all\" only if the operator wants every strike.',\n network: full.network,\n }\n}\n\nexport async function deriveSearchInstrumentsSummary(args: {\n chainId?: number\n network?: DeriveNetwork\n currency: string\n query: string\n limit?: number\n}) {\n const network = networkFromArgs(args.chainId, args.network)\n const { instruments } = await deriveFetchOptionInstruments({ currency: args.currency, network })\n const hits = deriveSearchInstruments(instruments, args.query, args.limit ?? 25)\n return {\n instruments: hits.map((i) => ({ instrumentName: i.instrument_name })),\n network,\n }\n}\n\nexport async function deriveFetchMarketSnapshotSummary(args: {\n chainId?: number\n network?: DeriveNetwork\n instrumentName: string\n}) {\n const network = networkFromArgs(args.chainId, args.network)\n const name = args.instrumentName.trim().toUpperCase()\n const ticker = (await deriveRpc<Record<string, unknown>>({\n method: 'public/get_ticker',\n params: { instrument_name: name },\n network,\n })) as Record<string, unknown>\n const mark = ticker.M != null ? String(ticker.M) : null\n const index = ticker.I != null ? String(ticker.I) : null\n const bid = ticker.b != null ? String(ticker.b) : null\n const ask = ticker.a != null ? String(ticker.a) : null\n const midUsd = mark ?? (bid && ask ? String((Number(bid) + Number(ask)) / 2) : bid ?? ask)\n if (!midUsd) throw new Error(`No live ticker for ${name}.`)\n return {\n snapshot: {\n instrumentName: name,\n livePrice: {\n markPx: mark,\n indexPx: index,\n bidPx: bid,\n askPx: ask,\n midUsd,\n source: mark ? 'mark' : 'bidAsk',\n },\n greeks: ticker.option_pricing ?? null,\n fetchedAtMs: Date.now(),\n },\n network,\n }\n}\n\nexport async function deriveFetchOhlcvSummary(args: {\n chainId?: number\n network?: DeriveNetwork\n instrumentName?: string\n currency?: string\n marketKind?: 'option' | 'index'\n interval?: string\n lookbackDays?: number\n lookbackHours?: number\n startTimeMs?: number\n endTimeMs?: number\n}) {\n const network = networkFromArgs(args.chainId, args.network)\n const interval = assertInterval(args.interval)\n const { startTimeMs, endTimeMs, expectedBars, periodSec } = resolveDeriveOhlcvWindow({\n interval,\n lookbackDays: args.lookbackDays,\n lookbackHours: args.lookbackHours,\n startTimeMs: args.startTimeMs,\n endTimeMs: args.endTimeMs,\n })\n const kind = args.marketKind ?? (args.currency && !args.instrumentName ? 'index' : 'option')\n let candles: DeriveOhlcvCandle[]\n let market: string\n if (kind === 'index') {\n const currency = (args.currency ?? args.instrumentName ?? '').trim().toUpperCase().replace(/-.*$/, '')\n if (!currency) throw new Error('currency is required for index OHLCV.')\n market = currency\n const raw = await deriveRpc<unknown>({\n method: 'public/get_index_chart_data',\n params: {\n currency,\n start_timestamp: Math.floor(startTimeMs / 1000),\n end_timestamp: Math.floor(endTimeMs / 1000),\n period: periodSec,\n },\n network,\n })\n candles = mapDeriveTradingviewCandles(raw)\n } else {\n const instrumentName = (args.instrumentName ?? '').trim().toUpperCase()\n if (!instrumentName) throw new Error('instrumentName is required for option OHLCV.')\n market = instrumentName\n const raw = await deriveRpc<unknown>({\n method: 'public/get_tradingview_chart_data',\n params: {\n instrument_name: instrumentName,\n start_timestamp: Math.floor(startTimeMs / 1000),\n end_timestamp: Math.floor(endTimeMs / 1000),\n period: periodSec,\n },\n network,\n })\n candles = mapDeriveTradingviewCandles(raw)\n }\n if (candles.length > expectedBars) {\n candles = candles.slice(-expectedBars)\n }\n if (candles.length === 0) {\n throw new Error(`No OHLCV data for ${market} between ${startTimeMs} and ${endTimeMs} at ${interval}.`)\n }\n return {\n ohlcv: {\n market,\n coin: market,\n interval,\n marketKind: kind,\n startTimeMs,\n endTimeMs,\n expectedBars,\n candleCount: candles.length,\n latestCandle: candles[candles.length - 1] ?? null,\n candles,\n fetchedAtMs: Date.now(),\n dataSource: 'derive' as const,\n },\n dataSource: 'derive' as const,\n network,\n }\n}\n\nexport async function deriveOrderQuoteSummary(args: {\n chainId?: number\n network?: DeriveNetwork\n instrumentName: string\n direction: 'buy' | 'sell'\n amount: string\n limitPrice: string\n subaccountId?: number\n}) {\n const network = networkFromArgs(args.chainId, args.network)\n const instrumentName = args.instrumentName.trim().toUpperCase()\n const quote = await deriveRpc<Record<string, unknown>>({\n method: 'public/order_quote',\n params: {\n instrument_name: instrumentName,\n direction: args.direction,\n amount: args.amount,\n limit_price: args.limitPrice,\n ...(args.subaccountId && args.subaccountId > 0 ? { subaccount_id: args.subaccountId } : {}),\n },\n network,\n })\n return { quote, instrumentName, network }\n}\n\nexport function synthesizeDeriveRiskUniversesFromCurrencies(currencies: DeriveCurrency[]) {\n type ManagerRow = {\n manager_id: number | null\n address: string\n margin_type: string | null\n currency: string | null\n instrument_types: string[]\n collaterals: Array<{\n name: string\n address: string | null\n erc20: { underlying_erc20: string | null }\n }>\n }\n const byKey = new Map<string, ManagerRow>()\n for (const c of currencies) {\n const name = String(c.currency ?? '').trim().toUpperCase()\n if (!name) continue\n const addrs = c.protocol_asset_addresses ?? {}\n const types = (c.instrument_types ?? []).map((t) => String(t))\n const collateral = {\n name,\n address: addrs.option ?? addrs.spot ?? null,\n erc20: { underlying_erc20: addrs.underlying_erc20 ?? null },\n }\n for (const mgr of c.managers ?? []) {\n const address = String(mgr.address ?? '').trim()\n if (!address) continue\n const key = `${address.toLowerCase()}:${mgr.margin_type ?? ''}:${mgr.currency ?? ''}`\n const existing = byKey.get(key)\n if (existing) {\n if (!existing.instrument_types.includes('option') && types.includes('option')) {\n existing.instrument_types = [...new Set([...existing.instrument_types, ...types])]\n }\n if (!existing.collaterals.some((row) => row.name === name)) existing.collaterals.push(collateral)\n continue\n }\n byKey.set(key, {\n manager_id: typeof mgr.manager_id === 'number' ? mgr.manager_id : null,\n address,\n margin_type: mgr.margin_type ?? null,\n currency: mgr.currency ?? null,\n instrument_types: types,\n collaterals: [collateral],\n })\n }\n }\n return [\n {\n risk_universe_id: null,\n source: 'public/get_all_currencies',\n managers: [...byKey.values()],\n },\n ]\n}\n\nexport async function deriveFetchRiskUniversesSummary(args: { chainId?: number; network?: DeriveNetwork }) {\n const network = networkFromArgs(args.chainId, args.network)\n try {\n const result = await deriveRpc<unknown>({ method: 'public/get_risk_universes', network })\n const universes = Array.isArray(result) ? result : (result as { universes?: unknown[] })?.universes ?? []\n if (universes.length) {\n return {\n universes,\n notes:\n 'Pick a manager that lists ETH-OPTION (or the underlying) and accepts your collateral (usually USDC). L1 ACTION_MANAGER uses manager_id + collaterals[].address + underlying_erc20. Socket / HYPE vault deposits do not need the protocol-asset address.',\n network,\n }\n }\n } catch {\n // v3 mainnet Internal-errors this method; v2 does not implement it.\n }\n const currencies = await deriveFetchCurrenciesRaw({ network })\n return {\n universes: synthesizeDeriveRiskUniversesFromCurrencies(currencies),\n notes:\n 'v3 public/get_risk_universes is failing on mainnet; managers below are reconstructed from public/get_all_currencies (address + margin_type + protocol assets). L1 ACTION_MANAGER still needs a numeric manager_id — use Socket / HYPE vault, or register_deposit_address, until v3 recovers. Socket / HYPE vault deposits do not need the protocol-asset address.',\n network,\n }\n}\n\nexport async function deriveFetchPendingDepositsSummary(args: {\n chainId?: number\n network?: DeriveNetwork\n wallet?: string\n executorAddress?: string\n}) {\n const network = networkFromArgs(args.chainId, args.network)\n const wallet = (args.wallet ?? args.executorAddress ?? '').trim()\n if (!wallet) throw new Error('wallet or executorAddress is required.')\n const result = await deriveRpc<unknown>({\n method: 'public/get_pending_deposits',\n params: { wallet },\n network,\n })\n const pending = Array.isArray(result) ? result : (result as { deposits?: unknown[] })?.deposits ?? []\n return {\n pending,\n credited: Array.isArray(pending) && pending.length === 0,\n notes:\n pending.length === 0\n ? 'No pending L1 deposits. If you just sent depositToNewSubaccount, wait ~2 minutes and retry, then call ctm_derive_fetch_subaccounts.'\n : 'Deposit is queued on L1 and not yet credited. Wait and poll again — do not place orders until fetch_subaccounts returns ids.',\n network,\n }\n}\n\nexport type { DeriveCurrency, DeriveInstrument }\n","import { getAddress } from 'viem'\nimport { DERIVE_MISSING_SUBACCOUNT_ERROR, DERIVE_UNFUNDED_NEXT, DERIVE_UNFUNDED_NOTES } from './constants.js'\nimport { deriveRpc, requireDeriveAuth, type DeriveAuth } from './api.js'\nimport { deriveNetworkFromChainId, type DeriveNetwork } from './support.js'\n\nfunction networkFromArgs(chainId?: number, network?: DeriveNetwork): DeriveNetwork {\n if (network) return network\n if (chainId != null) return deriveNetworkFromChainId(chainId)\n return 'mainnet'\n}\n\nfunction parseSubaccountIds(result: unknown): number[] {\n if (Array.isArray(result)) {\n return result.map((x) => Number(x)).filter((n) => Number.isFinite(n) && n > 0)\n }\n if (result && typeof result === 'object') {\n const rec = result as Record<string, unknown>\n const ids = rec.subaccount_ids ?? rec.subaccounts ?? rec.ids\n if (Array.isArray(ids)) {\n return ids\n .map((x) => (typeof x === 'object' && x ? Number((x as { subaccount_id?: unknown }).subaccount_id ?? x) : Number(x)))\n .filter((n) => Number.isFinite(n) && n > 0)\n }\n }\n return []\n}\n\nexport function deriveEmptySubaccountsPayload(wallet: string) {\n return {\n wallet,\n subaccounts: [] as number[],\n funded: false as const,\n notes: DERIVE_UNFUNDED_NOTES,\n next: [...DERIVE_UNFUNDED_NEXT],\n }\n}\n\nfunction resolveWallet(args: { wallet?: string; executorAddress?: string }): string {\n const raw = (args.wallet ?? args.executorAddress ?? '').trim()\n if (!raw) throw new Error('wallet or executorAddress is required.')\n return raw\n}\n\nexport async function deriveFetchSubaccountsSummary(args: {\n chainId?: number\n network?: DeriveNetwork\n wallet?: string\n executorAddress?: string\n auth?: DeriveAuth\n}) {\n const network = networkFromArgs(args.chainId, args.network)\n const wallet = getAddress(resolveWallet(args))\n const auth = requireDeriveAuth(args.auth, 'ctm_derive_fetch_subaccounts')\n const result = await deriveRpc<unknown>({\n method: 'private/get_subaccounts',\n params: { wallet },\n network,\n auth,\n })\n const ids = parseSubaccountIds(result)\n if (ids.length === 0) {\n return { ...deriveEmptySubaccountsPayload(wallet), network }\n }\n return {\n wallet,\n subaccounts: ids,\n funded: true as const,\n notes:\n 'Same KeyGen owns these subaccounts on every chain. Place/cancel/replace need subaccountId from this list. First deposit also creates a fallback (manager 0) — two ids is normal.',\n next: ['ctm_derive_fetch_portfolio', 'ctm_derive_build_place_order_multisign'],\n network,\n }\n}\n\nexport async function deriveFetchPortfolioSummary(args: {\n chainId?: number\n network?: DeriveNetwork\n wallet?: string\n executorAddress?: string\n subaccountId: number\n auth?: DeriveAuth\n}) {\n const network = networkFromArgs(args.chainId, args.network)\n if (!args.subaccountId || args.subaccountId <= 0) throw new Error(DERIVE_MISSING_SUBACCOUNT_ERROR)\n const auth = requireDeriveAuth(args.auth, 'ctm_derive_fetch_portfolio')\n const portfolio = await deriveRpc<unknown>({\n method: 'private/get_subaccount',\n params: { subaccount_id: args.subaccountId },\n network,\n auth,\n })\n return { portfolio, subaccountId: args.subaccountId, wallet: getAddress(resolveWallet(args)), network }\n}\n\nexport async function deriveFetchPositionsSummary(args: {\n chainId?: number\n network?: DeriveNetwork\n wallet?: string\n executorAddress?: string\n subaccountId: number\n auth?: DeriveAuth\n}) {\n const network = networkFromArgs(args.chainId, args.network)\n if (!args.subaccountId || args.subaccountId <= 0) throw new Error(DERIVE_MISSING_SUBACCOUNT_ERROR)\n const auth = requireDeriveAuth(args.auth, 'ctm_derive_fetch_positions')\n const result = await deriveRpc<{ positions?: unknown[] } | unknown[]>({\n method: 'private/get_positions',\n params: { subaccount_id: args.subaccountId },\n network,\n auth,\n })\n const positions = Array.isArray(result) ? result : (result.positions ?? [])\n return { positions, subaccountId: args.subaccountId, wallet: getAddress(resolveWallet(args)), network }\n}\n\nexport async function deriveFetchOpenOrdersSummary(args: {\n chainId?: number\n network?: DeriveNetwork\n wallet?: string\n executorAddress?: string\n subaccountId: number\n auth?: DeriveAuth\n}) {\n const network = networkFromArgs(args.chainId, args.network)\n if (!args.subaccountId || args.subaccountId <= 0) throw new Error(DERIVE_MISSING_SUBACCOUNT_ERROR)\n const auth = requireDeriveAuth(args.auth, 'ctm_derive_fetch_open_orders')\n const result = await deriveRpc<{ orders?: unknown[] } | unknown[]>({\n method: 'private/get_open_orders',\n params: { subaccount_id: args.subaccountId },\n network,\n auth,\n })\n const orders = Array.isArray(result) ? result : (result.orders ?? [])\n return { orders, subaccountId: args.subaccountId, wallet: getAddress(resolveWallet(args)), network }\n}\n","import {\n encodeAbiParameters,\n getAddress,\n hashTypedData,\n keccak256,\n parseUnits,\n toHex,\n type Address,\n type Hex,\n} from 'viem'\nimport type { Eip712TypedDataPayload } from '../../../core/eip712Multisign.js'\nimport {\n DERIVE_ACTION_TYPEHASH,\n DERIVE_DEFAULT_SIGNATURE_EXPIRY_SEC,\n DERIVE_DOMAIN_SEPARATOR_MAINNET,\n DERIVE_DOMAIN_SEPARATOR_TESTNET,\n DERIVE_EIP712_NAME,\n DERIVE_EIP712_VERSION,\n DERIVE_MATCHING_VERIFYING_CONTRACT,\n DERIVE_MIN_ORDER_EXPIRY_SEC,\n DERIVE_TRADE_MODULE,\n DERIVE_TRANSFER_MODULE,\n} from './constants.js'\nimport { deriveSettlementChainId, type DeriveNetwork } from './support.js'\n\nexport const DERIVE_ACTION_TYPES = {\n Action: [\n { name: 'subaccountId', type: 'uint256' },\n { name: 'nonce', type: 'uint256' },\n { name: 'module', type: 'address' },\n { name: 'data', type: 'bytes' },\n { name: 'expiry', type: 'uint256' },\n { name: 'owner', type: 'address' },\n { name: 'signer', type: 'address' },\n ],\n} as const\n\nexport function deriveE18(value: string, field: string): bigint {\n const text = value.trim()\n if (!/^-?\\d+(\\.\\d+)?$/.test(text)) {\n throw new Error(`${field} must be a decimal string (no scientific notation).`)\n }\n const scaled = parseUnits(text as `${number}`, 18)\n if (scaled % 1_000_000n !== 0n) {\n throw new Error(`${field} has more than 12 decimal places — Derive rejects sub-1e12 precision.`)\n }\n return scaled\n}\n\n/** UTC-nanosecond nonce as a decimal string (ms * 1e6 + random 6 digits). */\nexport function deriveRandomNonce(nowMs: number = Date.now()): string {\n const nanos = BigInt(nowMs) * 1_000_000n + BigInt(Math.floor(Math.random() * 1_000_000))\n return nanos.toString()\n}\n\nexport function deriveExpirySec(secondsFromNow: number = DERIVE_DEFAULT_SIGNATURE_EXPIRY_SEC, nowMs: number = Date.now()): number {\n if (secondsFromNow < DERIVE_MIN_ORDER_EXPIRY_SEC) {\n throw new Error(`Order signature expiry must be at least ${DERIVE_MIN_ORDER_EXPIRY_SEC} seconds.`)\n }\n return Math.floor(nowMs / 1000) + secondsFromNow\n}\n\nexport function deriveMatchingDomain(network: DeriveNetwork) {\n return {\n name: DERIVE_EIP712_NAME,\n version: DERIVE_EIP712_VERSION,\n chainId: BigInt(deriveSettlementChainId(network)),\n verifyingContract: DERIVE_MATCHING_VERIFYING_CONTRACT as Address,\n }\n}\n\nexport function deriveDomainSeparator(network: DeriveNetwork): Hex {\n return network === 'testnet' ? DERIVE_DOMAIN_SEPARATOR_TESTNET : DERIVE_DOMAIN_SEPARATOR_MAINNET\n}\n\nexport function encodeDeriveTradeData(args: {\n assetAddress: string\n subId: string | number | bigint\n limitPrice: string\n amount: string\n maxFee: string\n recipientSubaccountId: number | bigint\n isBid: boolean\n}): Hex {\n return encodeAbiParameters(\n [\n { type: 'address' },\n { type: 'uint256' },\n { type: 'int256' },\n { type: 'int256' },\n { type: 'uint256' },\n { type: 'uint256' },\n { type: 'bool' },\n ],\n [\n getAddress(args.assetAddress),\n BigInt(args.subId),\n deriveE18(args.limitPrice, 'limitPrice'),\n deriveE18(args.amount, 'amount'),\n deriveE18(args.maxFee, 'maxFee'),\n BigInt(args.recipientSubaccountId),\n args.isBid,\n ],\n )\n}\n\nexport function encodeDeriveTransferData(args: {\n toSubaccountId: number | bigint\n newSubaccountManager: number | bigint\n asset: string\n subId: number | bigint\n amount: string\n maxFeeUsd: string\n}): Hex {\n const amount = deriveE18(args.amount, 'amount')\n if (amount <= 0n) throw new Error('transfer amount must be strictly positive')\n return encodeAbiParameters(\n [\n { type: 'uint256' },\n { type: 'uint256' },\n { type: 'address' },\n { type: 'uint256' },\n { type: 'uint256' },\n { type: 'uint256' },\n ],\n [\n BigInt(args.toSubaccountId),\n BigInt(args.newSubaccountManager),\n getAddress(args.asset),\n BigInt(args.subId),\n amount,\n deriveE18(args.maxFeeUsd, 'maxFeeUsd'),\n ],\n )\n}\n\nexport function deriveActionTypehash(): Hex {\n return keccak256(toHex('Action(uint256 subaccountId,uint256 nonce,address module,bytes data,uint256 expiry,address owner,address signer)'))\n}\n\nexport function buildDeriveActionTypedData(args: {\n network: DeriveNetwork\n subaccountId: number | bigint\n nonce: string\n module: string\n data: Hex\n expirySec: number\n owner: string\n signer: string\n}): Eip712TypedDataPayload {\n const owner = getAddress(args.owner)\n const signer = getAddress(args.signer)\n return {\n domain: deriveMatchingDomain(args.network),\n types: DERIVE_ACTION_TYPES,\n primaryType: 'Action',\n message: {\n subaccountId: BigInt(args.subaccountId),\n nonce: BigInt(args.nonce),\n module: getAddress(args.module),\n data: args.data,\n expiry: BigInt(args.expirySec),\n owner,\n signer,\n },\n }\n}\n\nexport function hashDeriveAction(args: Parameters<typeof buildDeriveActionTypedData>[0]): Hex {\n const typed = buildDeriveActionTypedData(args)\n return hashTypedData({\n domain: typed.domain,\n types: typed.types,\n primaryType: 'Action',\n message: typed.message,\n })\n}\n\nexport function assertPositiveSubaccountId(subaccountId: number | bigint | undefined): bigint {\n if (subaccountId == null) {\n throw new Error('subaccountId is required.')\n }\n const id = BigInt(subaccountId)\n if (id <= 0n) {\n throw new Error('subaccountId must be a positive Derive subaccount id (not 0).')\n }\n return id\n}\n\nexport { DERIVE_TRADE_MODULE, DERIVE_TRANSFER_MODULE, DERIVE_ACTION_TYPEHASH }\n","import { getAddress, hashMessage } from 'viem'\nimport type { DeriveAuth } from './api.js'\n\n/** Millisecond UTC timestamp string Derive expects for EIP-191 login. */\nexport function deriveLoginTimestamp(nowMs: number = Date.now()): string {\n return String(nowMs)\n}\n\n/** Message text for `personal_sign` — the timestamp itself. */\nexport function deriveLoginMessage(timestampMs: string): string {\n const ts = timestampMs.trim()\n if (!/^\\d+$/.test(ts)) throw new Error('Derive login timestamp must be a millisecond UTC decimal string.')\n return ts\n}\n\nexport function deriveLoginDigest(timestampMs: string): `0x${string}` {\n return hashMessage(deriveLoginMessage(timestampMs))\n}\n\nexport function deriveAuthHeaders(auth: DeriveAuth): Record<string, string> {\n return {\n 'X-DeriveWallet': getAddress(auth.wallet),\n 'X-DeriveTimestamp': auth.timestamp.trim(),\n 'X-DeriveSignature': auth.signature.trim(),\n }\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 { 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 BuildEip712MultisignLeg = {\n typedData: Eip712TypedDataPayload\n delivery: Eip712MultisignDelivery\n audit?: Record<string, unknown>\n}\n\nexport type BuildEip712MultisignArgs = {\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 legs: readonly BuildEip712MultisignLeg[]\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 eip712LegEnvelope(\n typedData: Eip712TypedDataPayload,\n delivery: Eip712MultisignDelivery,\n digest: `0x${string}`,\n): Record<string, unknown> {\n return {\n version: 1,\n digest,\n domain: typedData.domain,\n types: typedData.types,\n primaryType: typedData.primaryType,\n message: typedData.message,\n delivery,\n }\n}\n\nfunction eip712MsgRawHex(envelope: Record<string, unknown>): string {\n return stringToHex(jsonStringifyForAudit(envelope))\n}\n\n/**\n * Build an mpc-auth multiSignRequest body for one or more EIP-712 digests (no EVM tx broadcast).\n * `extraJSON.eip712` is always an array. N=1 uses `msgHash`/`msgRaw`; N>=2 uses `messageHashes`/`messageRawBatch`.\n */\nexport function buildEip712Multisign(args: BuildEip712MultisignArgs): MultisignBuildResult {\n if (args.legs.length < 1) {\n throw new Error('buildEip712Multisign requires at least one leg')\n }\n\n const eip712: Record<string, unknown>[] = []\n const legs = args.legs.map((leg) => {\n const digest = hashTypedData({\n domain: leg.typedData.domain,\n types: leg.typedData.types,\n primaryType: leg.typedData.primaryType,\n message: leg.typedData.message,\n })\n const envelope = eip712LegEnvelope(leg.typedData, leg.delivery, digest)\n eip712.push(envelope)\n return {\n msgHash: msgHashNo0x(digest),\n msgRaw: eip712MsgRawHex(envelope),\n destinationAddress: args.destinationAddress,\n signatureText: eip712SignatureText(leg.typedData.domain, leg.typedData.primaryType),\n audit: {\n kind: 'EIP712',\n primaryType: leg.typedData.primaryType,\n deliveryKind: leg.delivery.kind,\n ...(leg.audit ?? {}),\n },\n feeSnapshot: {},\n }\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 signRequestKind: EIP712_SIGN_REQUEST_KIND,\n eip712,\n },\n expiryDate: args.expiryDate,\n legs,\n })\n}\n","import { getAddress, stringToHex } from 'viem'\nimport { buildEip712Multisign } from '../../../core/eip712Multisign.js'\nimport { finalizeMultisign } from '../../../core/envelope.js'\nimport type { KeyGenSubsetForPermit } from '../../../core/types.js'\nimport { DERIVE_MISSING_SUBACCOUNT_ERROR, DERIVE_PROTOCOL_ID, DERIVE_TRADE_MODULE } from './constants.js'\nimport { deriveFetchInstrument } from './assets.js'\nimport { deriveLoginDigest, deriveLoginTimestamp } from './loginSigning.js'\nimport {\n assertPositiveSubaccountId,\n buildDeriveActionTypedData,\n deriveExpirySec,\n deriveRandomNonce,\n encodeDeriveTradeData,\n} from './signing.js'\nimport { deriveNetworkFromChainId, deriveSettlementChainId, type DeriveNetwork } from './support.js'\n\nconst ZERO_ADDRESS = '0x0000000000000000000000000000000000000000'\n\nexport type DeriveOrderDirection = 'buy' | 'sell'\nexport type DeriveOrderType = 'limit' | 'market'\nexport type DeriveTimeInForce = 'gtc' | 'ioc' | 'fok' | 'post_only'\nexport type DeriveTriggerType = 'stoploss' | 'takeprofit'\nexport type DeriveTriggerPriceType = 'mark' | 'index'\nexport type DeriveTicketKind = 'limit' | 'stop_limit' | 'twap'\n\ntype DeriveExchangeCommon = {\n keyGen: KeyGenSubsetForPermit\n chainId: number\n purposeText: string\n executorAddress: string\n subaccountId: number\n expiryDate?: number\n nonce?: string\n signatureExpirySec?: number\n}\n\nexport type DerivePlaceOrderMultisignArgs = DeriveExchangeCommon & {\n instrumentName: string\n direction: DeriveOrderDirection\n amount: string\n limitPrice: string\n maxFee: string\n orderType?: DeriveOrderType\n timeInForce?: DeriveTimeInForce\n reduceOnly?: boolean\n label?: string\n ticketKind?: DeriveTicketKind\n triggerPrice?: string\n triggerType?: DeriveTriggerType\n triggerPriceType?: DeriveTriggerPriceType\n algoDurationSec?: number\n algoNumSlices?: number\n}\n\nexport type DeriveReplaceOrderMultisignArgs = DerivePlaceOrderMultisignArgs & {\n orderIdToCancel?: string\n nonceToCancel?: string\n}\n\nexport type DeriveCancelMultisignArgs = {\n keyGen: KeyGenSubsetForPermit\n chainId: number\n purposeText: string\n executorAddress: string\n subaccountId: number\n instrumentName: string\n orderId: string\n expiryDate?: number\n}\n\nfunction networkFromChain(chainId: number): DeriveNetwork {\n return deriveNetworkFromChainId(chainId)\n}\n\nfunction requireSubaccount(subaccountId: number | undefined): bigint {\n try {\n return assertPositiveSubaccountId(subaccountId)\n } catch {\n throw new Error(DERIVE_MISSING_SUBACCOUNT_ERROR)\n }\n}\n\nasync function loadTradeData(args: {\n instrumentName: string\n direction: DeriveOrderDirection\n amount: string\n limitPrice: string\n maxFee: string\n subaccountId: bigint\n network: DeriveNetwork\n}) {\n const instrument = await deriveFetchInstrument({ instrumentName: args.instrumentName, network: args.network })\n const assetAddress = String(instrument.base_asset_address ?? '').trim()\n const subId = instrument.base_asset_sub_id ?? (instrument as { sub_id?: string }).sub_id\n if (!assetAddress || subId == null) {\n throw new Error(`Instrument ${args.instrumentName} is missing base_asset_address / sub_id.`)\n }\n const data = encodeDeriveTradeData({\n assetAddress,\n subId,\n limitPrice: args.limitPrice,\n amount: args.amount,\n maxFee: args.maxFee,\n recipientSubaccountId: args.subaccountId,\n isBid: args.direction === 'buy',\n })\n return { instrument, assetAddress, subId: String(subId), data }\n}\n\nfunction deriveExchangeDelivery(args: {\n method: 'private/order' | 'private/replace'\n chainId: number\n network: DeriveNetwork\n subaccountId: string\n nonce: string\n signer: string\n signatureExpirySec: number\n instrumentName: string\n direction: DeriveOrderDirection\n amount: string\n limitPrice: string\n maxFee: string\n orderType: DeriveOrderType\n timeInForce: DeriveTimeInForce\n reduceOnly: boolean\n label?: string\n orderIdToCancel?: string\n nonceToCancel?: string\n ticketKind?: DeriveTicketKind\n triggerPrice?: string\n triggerType?: DeriveTriggerType\n triggerPriceType?: DeriveTriggerPriceType\n algoDurationSec?: number\n algoNumSlices?: number\n}) {\n const ticket = args.ticketKind ?? 'limit'\n const triggerPrice = (args.triggerPrice ?? '').trim()\n const durationSec = args.algoDurationSec\n const slices = args.algoNumSlices\n if (ticket === 'stop_limit') {\n if (!triggerPrice || !(Number(triggerPrice) > 0)) {\n throw new Error('Stop limit requires a positive trigger price.')\n }\n }\n if (ticket === 'twap') {\n if (durationSec == null || !Number.isFinite(durationSec) || durationSec < 60) {\n throw new Error('TWAP requires algoDurationSec of at least 60.')\n }\n if (slices == null || !Number.isInteger(slices) || slices < 2) {\n throw new Error('TWAP requires algoNumSlices of at least 2.')\n }\n }\n return {\n kind: 'derive_exchange' as const,\n method: args.method,\n chainId: args.chainId,\n settlementChainId: deriveSettlementChainId(args.network),\n network: args.network,\n params: {\n subaccount_id: Number(args.subaccountId),\n nonce: args.nonce,\n signer: args.signer,\n signature_expiry_sec: args.signatureExpirySec,\n instrument_name: args.instrumentName,\n direction: args.direction,\n amount: args.amount,\n limit_price: args.limitPrice,\n max_fee: args.maxFee,\n order_type: args.orderType,\n time_in_force: args.timeInForce,\n reduce_only: args.reduceOnly,\n ...(args.label ? { label: args.label } : {}),\n ...(args.orderIdToCancel ? { order_id_to_cancel: args.orderIdToCancel } : {}),\n ...(args.nonceToCancel ? { nonce_to_cancel: args.nonceToCancel } : {}),\n ...(ticket === 'stop_limit'\n ? {\n trigger_price: triggerPrice,\n trigger_type: args.triggerType ?? 'stoploss',\n trigger_price_type: args.triggerPriceType ?? 'mark',\n }\n : {}),\n ...(ticket === 'twap'\n ? {\n algo_type: 'twap' as const,\n algo_duration_sec: durationSec,\n algo_num_slices: slices,\n }\n : {}),\n },\n }\n}\n\nexport async function buildDerivePlaceOrderMultisign(args: DerivePlaceOrderMultisignArgs) {\n const subaccountId = requireSubaccount(args.subaccountId)\n const network = networkFromChain(args.chainId)\n const owner = getAddress(args.executorAddress)\n const nonce = args.nonce ?? deriveRandomNonce()\n const expirySec = deriveExpirySec(args.signatureExpirySec)\n const { data, instrument } = await loadTradeData({\n instrumentName: args.instrumentName,\n direction: args.direction,\n amount: args.amount,\n limitPrice: args.limitPrice,\n maxFee: args.maxFee,\n subaccountId,\n network,\n })\n const typedData = buildDeriveActionTypedData({\n network,\n subaccountId,\n nonce,\n module: DERIVE_TRADE_MODULE,\n data,\n expirySec,\n owner,\n signer: owner,\n })\n return buildEip712Multisign({\n keyGen: args.keyGen,\n purposeText: args.purposeText,\n destinationChainID: String(args.chainId),\n destinationAddress: ZERO_ADDRESS,\n expiryDate: args.expiryDate,\n legs: [\n {\n typedData,\n delivery: deriveExchangeDelivery({\n method: 'private/order',\n chainId: args.chainId,\n network,\n subaccountId: subaccountId.toString(),\n nonce,\n signer: owner,\n signatureExpirySec: expirySec,\n instrumentName: instrument.instrument_name,\n direction: args.direction,\n amount: args.amount,\n limitPrice: args.limitPrice,\n maxFee: args.maxFee,\n orderType: args.orderType ?? 'limit',\n timeInForce: args.timeInForce ?? 'gtc',\n reduceOnly: args.reduceOnly === true,\n label: args.label,\n ticketKind: args.ticketKind,\n triggerPrice: args.triggerPrice,\n triggerType: args.triggerType,\n triggerPriceType: args.triggerPriceType,\n algoDurationSec: args.algoDurationSec,\n algoNumSlices: args.algoNumSlices,\n }),\n audit: {\n protocol: DERIVE_PROTOCOL_ID,\n action: 'placeOrder',\n instrumentName: instrument.instrument_name,\n subaccountId: subaccountId.toString(),\n },\n },\n ],\n })\n}\n\nexport async function buildDeriveReplaceOrderMultisign(args: DeriveReplaceOrderMultisignArgs) {\n const hasOrder = Boolean(args.orderIdToCancel?.trim())\n const hasNonce = Boolean(args.nonceToCancel?.trim())\n if (hasOrder === hasNonce) {\n throw new Error('Replace requires exactly one of orderIdToCancel or nonceToCancel.')\n }\n const subaccountId = requireSubaccount(args.subaccountId)\n const network = networkFromChain(args.chainId)\n const owner = getAddress(args.executorAddress)\n const nonce = args.nonce ?? deriveRandomNonce()\n const expirySec = deriveExpirySec(args.signatureExpirySec)\n const { data, instrument } = await loadTradeData({\n instrumentName: args.instrumentName,\n direction: args.direction,\n amount: args.amount,\n limitPrice: args.limitPrice,\n maxFee: args.maxFee,\n subaccountId,\n network,\n })\n const typedData = buildDeriveActionTypedData({\n network,\n subaccountId,\n nonce,\n module: DERIVE_TRADE_MODULE,\n data,\n expirySec,\n owner,\n signer: owner,\n })\n return buildEip712Multisign({\n keyGen: args.keyGen,\n purposeText: args.purposeText,\n destinationChainID: String(args.chainId),\n destinationAddress: ZERO_ADDRESS,\n expiryDate: args.expiryDate,\n legs: [\n {\n typedData,\n delivery: deriveExchangeDelivery({\n method: 'private/replace',\n chainId: args.chainId,\n network,\n subaccountId: subaccountId.toString(),\n nonce,\n signer: owner,\n signatureExpirySec: expirySec,\n instrumentName: instrument.instrument_name,\n direction: args.direction,\n amount: args.amount,\n limitPrice: args.limitPrice,\n maxFee: args.maxFee,\n orderType: args.orderType ?? 'limit',\n timeInForce: args.timeInForce ?? 'gtc',\n reduceOnly: args.reduceOnly === true,\n label: args.label,\n ticketKind: args.ticketKind,\n triggerPrice: args.triggerPrice,\n triggerType: args.triggerType,\n triggerPriceType: args.triggerPriceType,\n algoDurationSec: args.algoDurationSec,\n algoNumSlices: args.algoNumSlices,\n orderIdToCancel: args.orderIdToCancel,\n nonceToCancel: args.nonceToCancel,\n }),\n audit: {\n protocol: DERIVE_PROTOCOL_ID,\n action: 'replaceOrder',\n instrumentName: instrument.instrument_name,\n subaccountId: subaccountId.toString(),\n },\n },\n ],\n })\n}\n\n/**\n * v3 `private/cancel` is session-auth only (no Action module). Sign EIP-191 login\n * so the node can POST with X-Derive* headers plus instrument/order/subaccount.\n */\nexport function buildDeriveCancelMultisign(args: DeriveCancelMultisignArgs) {\n const subaccountId = requireSubaccount(args.subaccountId)\n const instrumentName = args.instrumentName.trim().toUpperCase()\n const orderId = args.orderId.trim()\n if (!instrumentName) throw new Error('instrumentName is required.')\n if (!orderId) throw new Error('orderId is required.')\n const wallet = getAddress(args.executorAddress)\n const timestamp = deriveLoginTimestamp()\n const digest = deriveLoginDigest(timestamp)\n const msgHash = digest.startsWith('0x') ? digest.slice(2) : digest\n const network = networkFromChain(args.chainId)\n return finalizeMultisign({\n keyGen: args.keyGen,\n purposeText: args.purposeText,\n destinationChainID: String(args.chainId),\n destinationAddress: wallet,\n expiryDate: args.expiryDate,\n extraJSON: {\n signRequestKind: 'personal_sign',\n delivery: {\n kind: 'derive_exchange',\n method: 'private/cancel',\n chainId: args.chainId,\n network,\n settlementChainId: deriveSettlementChainId(network),\n login: { wallet, timestamp },\n params: {\n instrument_name: instrumentName,\n order_id: orderId,\n subaccount_id: Number(subaccountId),\n },\n },\n },\n legs: [\n {\n msgHash,\n msgRaw: stringToHex(timestamp),\n destinationAddress: wallet,\n signatureText: 'Derive private/cancel EIP-191 login',\n audit: {\n kind: 'PERSONAL_SIGN',\n protocol: DERIVE_PROTOCOL_ID,\n action: 'cancel',\n instrumentName,\n orderId,\n subaccountId: subaccountId.toString(),\n },\n feeSnapshot: {},\n },\n ],\n })\n}\n","import { http, type Transport } from 'viem'\n\n/**\n * Optional browser transport for protocol `eth_*` reads (allowance, decimals, spoke views).\n * Node / MCP leave this unset and use viem `http(rpcUrl)`.\n */\nlet evmRpcTransportFactory: ((rpcUrl: string) => Transport) | undefined\n\nexport function setDefiEvmRpcTransportFactory(factory: ((rpcUrl: string) => Transport) | undefined): void {\n evmRpcTransportFactory = factory\n}\n\nexport function getDefiEvmRpcTransportFactory(): ((rpcUrl: string) => Transport) | undefined {\n return evmRpcTransportFactory\n}\n\n/** Same-origin proxy in the browser when the app has called {@link setDefiEvmRpcTransportFactory}. */\nexport function defiEvmTransport(rpcUrl: string, opts?: Parameters<typeof http>[1]): Transport {\n const url = rpcUrl.trim()\n return evmRpcTransportFactory?.(url) ?? http(url, opts)\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 { keccak256, createPublicClient, defineChain, serializeTransaction, getAddress, parseGwei, type Address, type PublicClient } from 'viem'\nimport { defiEvmTransport } from '../../core/defiEvmClient.js'\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: defiEvmTransport(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 { createPublicClient, defineChain, encodeFunctionData, getAddress, parseAbi, type Address, type PublicClient } from 'viem'\nimport { defiEvmTransport } from '../../core/defiEvmClient.js'\nimport type { EvmTxStep } from './types.js'\n\nconst erc20AllowanceAbi = parseAbi([\n 'function allowance(address owner, address spender) view returns (uint256)',\n 'function decimals() view returns (uint8)',\n])\nconst erc20ApproveAbi = parseAbi(['function approve(address spender, uint256 amount) returns (bool)'])\n\nexport function publicClientForRpc(chainId: number, rpcUrl: string): PublicClient {\n const ch = defineChain({\n id: chainId,\n name: `chain-${chainId}`,\n nativeCurrency: { decimals: 18, name: 'Ether', symbol: 'ETH' },\n rpcUrls: { default: { http: [rpcUrl.trim()] } },\n })\n return createPublicClient({ chain: ch, transport: defiEvmTransport(rpcUrl.trim()) })\n}\n\n/**\n * Resolve ERC-20 decimals: on-chain `decimals()` is authoritative; optional registry/API hints\n * are validated and logged when they disagree (common when registry is stale).\n */\nexport async function resolveErc20Decimals(args: {\n publicClient: PublicClient\n token: Address\n registryDecimals?: number\n apiDecimals?: number\n}): Promise<number> {\n const token = getAddress(args.token)\n const onChain = await args.publicClient.readContract({\n address: token,\n abi: erc20AllowanceAbi,\n functionName: 'decimals',\n })\n const n = typeof onChain === 'bigint' ? Number(onChain) : Number(onChain)\n if (!Number.isFinite(n) || n < 0 || n > 36) {\n throw new Error(`Invalid on-chain decimals for ${token}.`)\n }\n for (const hint of [args.registryDecimals, args.apiDecimals]) {\n if (hint != null && Number.isFinite(hint) && hint !== n) {\n /* prefer on-chain — hints from token registry / fetch rows may be stale */\n }\n }\n return n\n}\n\nexport type ConditionalApproveStep = {\n to: Address\n data: `0x${string}`\n value: bigint\n fallbackGas?: bigint\n}\n\n/**\n * Standard deposit-path approve batch: skip when allowance sufficient; reset-to-zero when needed.\n */\nexport async function buildConditionalErc20ApproveSteps(args: {\n publicClient: PublicClient\n token: Address\n spender: Address\n owner: Address\n amountWei: bigint\n fallbackGas?: bigint\n}): Promise<ConditionalApproveStep[]> {\n if (args.amountWei <= 0n) return []\n const token = getAddress(args.token)\n const spender = getAddress(args.spender)\n const owner = getAddress(args.owner)\n const fallback = args.fallbackGas ?? 100_000n\n\n const allowance = await args.publicClient.readContract({\n address: token,\n abi: erc20AllowanceAbi,\n functionName: 'allowance',\n args: [owner, spender],\n })\n if (allowance >= args.amountWei) return []\n\n const steps: ConditionalApproveStep[] = []\n if (allowance > 0n) {\n steps.push({\n to: token,\n data: encodeFunctionData({ abi: erc20ApproveAbi, functionName: 'approve', args: [spender, 0n] }),\n value: 0n,\n fallbackGas: fallback,\n })\n }\n steps.push({\n to: token,\n data: encodeFunctionData({\n abi: erc20ApproveAbi,\n functionName: 'approve',\n args: [spender, args.amountWei],\n }),\n value: 0n,\n fallbackGas: fallback,\n })\n return steps\n}\n\nexport function approveStepsToEvmTxSteps(steps: ConditionalApproveStep[]): EvmTxStep[] {\n return steps.map((s) => ({\n to: s.to,\n data: s.data,\n value: s.value,\n fallbackGas: s.fallbackGas,\n }))\n}\n","import { encodeFunctionData, getAddress, parseAbi, parseUnits, type Address } from 'viem'\nimport { gasLimitFromEstimateAndChainConfig } from '@continuumdao/continuum-node-sdk'\nimport { buildEvmMultisignBatch } from '../../../chains/evm/buildBatch.js'\nimport {\n buildConditionalErc20ApproveSteps,\n publicClientForRpc,\n resolveErc20Decimals,\n} from '../../../chains/evm/erc20Approve.js'\nimport type { EvmTxStep } from '../../../chains/evm/types.js'\nimport type { KeyGenSubsetForPermit } from '../../../core/types.js'\nimport { DERIVE_PROTOCOL_ID } from './constants.js'\nimport { deriveActionManagerAddress, isDeriveSettlementChainId } from './support.js'\n\nconst DEPOSIT_APPROVE_FALLBACK = 100_000n\nconst DEPOSIT_CALL_FALLBACK = 450_000n\n\nconst actionManagerAbi = parseAbi([\n 'function depositToNewSubaccount(address protocolAsset, uint256 amount, uint256 managerId, address owner)',\n])\n\ntype ChainRow = {\n legacy?: boolean\n gasLimit?: number\n gasMultiplier?: number\n gasPrice?: number\n baseFee?: number\n priorityFee?: number\n baseFeeMultiplier?: number\n}\n\nexport type DeriveDepositNewSubaccountArgs = {\n keyGen: KeyGenSubsetForPermit\n chainId: number\n rpcUrl: string\n chainDetail: ChainRow\n useCustomGas: boolean\n customGasChainDetails?: Record<string, unknown> | null\n executorAddress: Address | string\n purposeText: string\n /** Protocol-asset address from risk-universe collaterals[].address (not the row-chain token). */\n protocolAsset: string\n /** Underlying ERC-20 to approve (`collaterals[].erc20.underlying_erc20`) on Ethereum L1. */\n underlyingErc20: string\n amountHuman: string\n managerId: number\n actionManager?: string\n expiryDate?: number\n}\n\nexport async function buildDeriveDepositNewSubaccountMultisign(args: DeriveDepositNewSubaccountArgs) {\n if (!isDeriveSettlementChainId(args.chainId)) {\n throw new Error(\n 'ACTION_MANAGER.depositToNewSubaccount is Ethereum L1 only (chainId 1 / 11155111). Use ctm_derive_build_socket_deposit_multisign on OP/Base/Arb, or ctm_derive_build_hype_vault_deposit_multisign on HyperEVM.',\n )\n }\n const executor = getAddress(args.executorAddress)\n const protocolAsset = getAddress(args.protocolAsset)\n const underlying = getAddress(args.underlyingErc20)\n const managerId = BigInt(args.managerId)\n if (managerId <= 0n) throw new Error('managerId must be a positive risk-universe manager id.')\n const actionManager = deriveActionManagerAddress(args.chainId, args.actionManager)\n const publicClient = publicClientForRpc(args.chainId, args.rpcUrl)\n const decimals = await resolveErc20Decimals({ publicClient, token: underlying })\n const amountWei = parseUnits(args.amountHuman.trim(), decimals)\n if (amountWei <= 0n) throw new Error('amountHuman must be a positive deposit amount.')\n\n const approveSteps = await buildConditionalErc20ApproveSteps({\n publicClient,\n token: underlying,\n spender: actionManager,\n owner: executor,\n amountWei,\n fallbackGas: DEPOSIT_APPROVE_FALLBACK,\n })\n const depositData = encodeFunctionData({\n abi: actionManagerAbi,\n functionName: 'depositToNewSubaccount',\n args: [protocolAsset, amountWei, managerId, executor],\n })\n const steps: EvmTxStep[] = [\n ...approveSteps.map((s) => ({\n to: s.to,\n data: s.data,\n value: s.value,\n fallbackGas: s.fallbackGas ?? DEPOSIT_APPROVE_FALLBACK,\n })),\n { to: actionManager, data: depositData, value: 0n, fallbackGas: DEPOSIT_CALL_FALLBACK },\n ]\n const firstDataNo0x = steps[0]!.data.startsWith('0x') ? steps[0]!.data.slice(2) : steps[0]!.data\n const gasLimitConfig =\n args.useCustomGas && args.chainDetail?.gasLimit != null ? Number(args.chainDetail.gasLimit) : undefined\n const n = steps.length\n const purposeSuffix =\n n === 1\n ? 'Derive: depositToNewSubaccount (allowance already set). First credit creates trading + fallback subaccounts.'\n : `Derive: ${n}-tx batch — approve L1 collateral to ACTION_MANAGER, then depositToNewSubaccount.`\n\n return buildEvmMultisignBatch({\n context: {\n chainCategory: 'evm',\n keyGen: args.keyGen,\n purposeText: args.purposeText,\n chainId: args.chainId,\n rpcUrl: args.rpcUrl.trim(),\n executorAddress: executor,\n chainDetail: args.chainDetail,\n useCustomGas: args.useCustomGas,\n customGasChainDetails: args.customGasChainDetails,\n expiryDate: args.expiryDate,\n },\n steps,\n purposeSuffix,\n firstMsgRawNo0x: firstDataNo0x,\n destinationAddress: steps[0]!.to,\n resolveGasLimit: ({ index, estimatedGas }) => {\n if (index === steps.length - 1 && index > 0) {\n const gas = DEPOSIT_CALL_FALLBACK\n return args.useCustomGas ? gasLimitFromEstimateAndChainConfig(gas, gasLimitConfig) : gas\n }\n return estimatedGas\n },\n buildBatchMeta: ({ index }) => {\n const isDeposit = index === steps.length - 1\n return {\n signatureText: JSON.stringify({\n kind: 'Derive',\n protocol: DERIVE_PROTOCOL_ID,\n action: isDeposit ? 'depositToNewSubaccount' : 'approve',\n chainId: args.chainId,\n managerId: args.managerId,\n }),\n }\n },\n })\n}\n","import { encodeFunctionData, getAddress, parseAbi, parseUnits, type Address } from 'viem'\nimport { buildEvmMultisignBatch } from '../../../chains/evm/buildBatch.js'\nimport { publicClientForRpc, resolveErc20Decimals } from '../../../chains/evm/erc20Approve.js'\nimport type { KeyGenSubsetForPermit } from '../../../core/types.js'\nimport { deriveRpc } from './api.js'\nimport { DERIVE_PROTOCOL_ID } from './constants.js'\nimport { deriveNetworkFromChainId, isDeriveSettlementChainId, type DeriveNetwork } from './support.js'\n\nconst TRANSFER_FALLBACK = 80_000n\nconst erc20TransferAbi = parseAbi(['function transfer(address to, uint256 amount) returns (bool)'])\n\ntype ChainRow = {\n legacy?: boolean\n gasLimit?: number\n gasMultiplier?: number\n gasPrice?: number\n baseFee?: number\n priorityFee?: number\n baseFeeMultiplier?: number\n}\n\nexport async function deriveRegisterDepositAddress(args: {\n wallet: string\n managerId?: number\n subaccountId?: number\n chainId?: number\n network?: DeriveNetwork\n}): Promise<{\n depositAddress: string\n wallet: string\n managerId: number | null\n subaccountId: number | null\n network: DeriveNetwork\n notes: string\n}> {\n const network = args.network ?? deriveNetworkFromChainId(args.chainId ?? 1)\n const wallet = getAddress(args.wallet)\n const subaccountId = args.subaccountId ?? 0\n const managerId = args.managerId\n if (!subaccountId && !managerId) {\n throw new Error('register_deposit_address needs managerId (new subaccount) or subaccountId (existing).')\n }\n const result = await deriveRpc<{\n deposit_address?: string\n wallet?: string\n manager_id?: number | null\n subaccount_id?: number | null\n }>({\n method: 'public/register_deposit_address',\n params: {\n wallet,\n subaccount_id: subaccountId,\n ...(managerId ? { manager_id: managerId } : {}),\n },\n network,\n })\n const depositAddress = (result?.deposit_address ?? '').trim()\n if (!depositAddress) throw new Error('Derive did not return a deposit_address.')\n return {\n depositAddress: getAddress(depositAddress),\n wallet,\n managerId: result.manager_id ?? managerId ?? null,\n subaccountId: result.subaccount_id ?? (subaccountId || null),\n network,\n notes:\n 'Send the registered token on Ethereum L1 (chainId 1 / 11155111) only. The keeper sweeps into ACTION_MANAGER. Do not send from Base/Arb to this address.',\n }\n}\n\nexport async function buildDeriveDepositAddressTransferMultisign(args: {\n keyGen: KeyGenSubsetForPermit\n chainId: number\n rpcUrl: string\n chainDetail: ChainRow\n useCustomGas: boolean\n customGasChainDetails?: Record<string, unknown> | null\n executorAddress: Address | string\n purposeText: string\n underlyingErc20: string\n amountHuman: string\n depositAddress: string\n expiryDate?: number\n}) {\n if (!isDeriveSettlementChainId(args.chainId)) {\n throw new Error('Standard deposit-address transfers are Ethereum L1 only (chainId 1 / 11155111). Use Socket on Arb/OP/Base.')\n }\n const executor = getAddress(args.executorAddress)\n const token = getAddress(args.underlyingErc20)\n const to = getAddress(args.depositAddress)\n const publicClient = publicClientForRpc(args.chainId, args.rpcUrl)\n const decimals = await resolveErc20Decimals({ publicClient, token })\n const amountWei = parseUnits(args.amountHuman.trim(), decimals)\n if (amountWei <= 0n) throw new Error('amountHuman must be a positive deposit amount.')\n const data = encodeFunctionData({\n abi: erc20TransferAbi,\n functionName: 'transfer',\n args: [to, amountWei],\n })\n return buildEvmMultisignBatch({\n context: {\n chainCategory: 'evm',\n keyGen: args.keyGen,\n purposeText: args.purposeText,\n chainId: args.chainId,\n rpcUrl: args.rpcUrl.trim(),\n executorAddress: executor,\n chainDetail: args.chainDetail,\n useCustomGas: args.useCustomGas,\n customGasChainDetails: args.customGasChainDetails,\n expiryDate: args.expiryDate,\n },\n steps: [{ to: token, data, value: 0n, fallbackGas: TRANSFER_FALLBACK }],\n purposeSuffix: 'Derive: ERC-20 transfer to registered L1 deposit address (standard / keeper sweep).',\n firstMsgRawNo0x: data.startsWith('0x') ? data.slice(2) : data,\n destinationAddress: token,\n buildBatchMeta: () => ({\n signatureText: JSON.stringify({\n kind: 'Derive',\n protocol: DERIVE_PROTOCOL_ID,\n action: 'depositAddressTransfer',\n chainId: args.chainId,\n depositAddress: to,\n }),\n }),\n })\n}\n","import { getAddress } from 'viem'\nimport { NATIVE_ZERO } from './support.js'\n\n/** Socket SuperBridge destination — Derive Chain. Users never switch Continuum Assets to this id. */\nexport const DERIVE_SOCKET_APP_CHAIN_ID = 957\n\nexport const DERIVE_SOCKET_CHAIN_IDS = [1, 10, 8453, 42161] as const\nexport const DERIVE_HYPE_CHAIN_ID = 999\nexport const DERIVE_WHYPE = '0x5555555555555555555555555555555555555555' as const\n\n/** HyperEVM vault that escrows wHYPE for Derive margin. Override with DERIVE_HYPE_VAULT. */\nexport const DERIVE_HYPE_VAULT_DEFAULT = '0xb792F94Ed56eD0bA163e5Ba139e2Bd0029A81d0a' as const\n\nexport const DERIVE_SOCKET_MSG_GAS_LIMIT = 500_000n\nexport const DERIVE_SOCKET_FEE_FALLBACK_WEI = 2_000_000_000_000_000n // 0.002 native\n\nexport type DeriveSocketRoute = {\n chainId: number\n symbol: string\n token: `0x${string}`\n vault: `0x${string}`\n connector: `0x${string}`\n decimals: number\n}\n\n/** Socket FAST connectors from SocketDotTech/socket-plugs `prod_lyra_addresses.json`. */\nconst SOCKET_ROUTES: DeriveSocketRoute[] = [\n {\n chainId: 1,\n symbol: 'USDC',\n token: '0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48',\n vault: '0x6D303CEE7959f814042D31E0624fB88Ec6fbcC1d',\n connector: '0x200AF8FCdD5246D70B369A98143Ac8930A077B7A',\n decimals: 6,\n },\n {\n chainId: 1,\n symbol: 'WETH',\n token: '0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2',\n vault: '0xD4efe33C66B8CdE33B8896a2126E41e5dB571b7e',\n connector: '0xCf814e58f1649F94d37E51f730D6bF72409fA09c',\n decimals: 18,\n },\n {\n chainId: 1,\n symbol: 'WBTC',\n token: '0x2260FAC5E5542a773Aa44fBCfeDf7C193bc2C599',\n vault: '0x3Eec7c855aF33280F1eD38b93059F5aa5862E3ab',\n connector: '0xA621Bc5A9d13D39eb098865B723CEee71BB5C181',\n decimals: 8,\n },\n {\n chainId: 10,\n symbol: 'USDC',\n token: '0x0b2C639c533813f4Aa9D7837CAf62653d097Ff85',\n vault: '0xDEf0bfBdf7530C75AB3C73f8d2F64d9eaA7aA98e',\n connector: '0xfd76d8b79C2E2c86EA0814e92D5cA0e4E8096c13',\n decimals: 6,\n },\n {\n chainId: 10,\n symbol: 'WETH',\n token: '0x4200000000000000000000000000000000000006',\n vault: '0xdD4c717a69763176d8B7A687728e228597eAB86d',\n connector: '0x27f4B23944e2bb59b1E276aff22FD2Be45658F64',\n decimals: 18,\n },\n {\n chainId: 10,\n symbol: 'WBTC',\n token: '0x68f180fcCe6836688e9084f035309E29Bf0A2095',\n vault: '0xE5967877065f111a556850d8f05b8DaD88edCEc9',\n connector: '0x906A44Daa8bdA5599a384264e3811b9BeA1109b4',\n decimals: 8,\n },\n {\n chainId: 8453,\n symbol: 'USDC',\n token: '0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913',\n vault: '0x4e798659b9846F1da7B6D6B5d09d581270aB6FEC',\n connector: '0x57B03E14d409ADC7fAb6CFc44b5886CAD2D5f02b',\n decimals: 6,\n },\n {\n chainId: 8453,\n symbol: 'WETH',\n token: '0x4200000000000000000000000000000000000006',\n vault: '0xBd282333710B9C7e33E8a37d027885A7C079Ae23',\n connector: '0xbE9DBda519e15a1c0d238cEa0b3daD47a484A6Ff',\n decimals: 18,\n },\n {\n chainId: 42161,\n symbol: 'USDC',\n token: '0xaf88d065e77c8cC2239327C5EDb3A432268e5831',\n vault: '0x5e027ad442e031424b5a2C0ad6f656662Be32882',\n connector: '0x17Fc4c7ea8267044b6D0ACC17a6C049Bed6F8B21',\n decimals: 6,\n },\n {\n chainId: 42161,\n symbol: 'WETH',\n token: '0x82aF49447D8a07e3bd95BD0d56f35241523fBab1',\n vault: '0x8e9f58E6c206CB9C98aBb9F235E0f02D65dFc922',\n connector: '0x3809150509df79D96334c4EB6Ba1c386827C3c67',\n decimals: 18,\n },\n {\n chainId: 42161,\n symbol: 'WBTC',\n token: '0x2f2a2543B76A4166549B7eCDcE5542a773Aa44fB',\n vault: '0x3D20c6A2b719129af175E0ff7B1875DEb360896f',\n connector: '0x42c846313c37845B9d67BB5c1F4F48E528234Afc',\n decimals: 8,\n },\n]\n\nfunction norm(address: string): string {\n return getAddress(address).toLowerCase()\n}\n\nexport function isDeriveSocketChainId(chainId: number): boolean {\n return (DERIVE_SOCKET_CHAIN_IDS as readonly number[]).includes(chainId)\n}\n\nexport function deriveHypeVaultAddress(override?: string): `0x${string}` {\n const explicit = (override ?? process.env.DERIVE_HYPE_VAULT ?? '').trim()\n return getAddress(explicit || DERIVE_HYPE_VAULT_DEFAULT)\n}\n\nexport function deriveSocketRouteForToken(chainId: number, token: string): DeriveSocketRoute | null {\n let key: string\n try {\n key = norm(token)\n } catch {\n return null\n }\n const hit = SOCKET_ROUTES.find((r) => r.chainId === chainId && norm(r.token) === key)\n return hit ?? null\n}\n\nexport function deriveSocketWethRoute(chainId: number): DeriveSocketRoute | null {\n return SOCKET_ROUTES.find((r) => r.chainId === chainId && r.symbol === 'WETH') ?? null\n}\n\nexport type DeriveFundKind = 'l1_direct' | 'socket' | 'hype_vault'\n\nexport type DeriveFundRoute = {\n kind: DeriveFundKind\n chainId: number\n symbol: string\n token: `0x${string}`\n decimals: number\n native: boolean\n socket?: DeriveSocketRoute\n}\n\n/** Resolve a Continuum asset row to a deposit path. Native gas maps to WETH (Socket) or HYPE (HyperEVM). */\nexport function deriveFundRouteForAssetRow(args: {\n chainId: number\n contractAddress: string\n}): DeriveFundRoute | null {\n const raw = (args.contractAddress ?? '').trim()\n const isNative = !raw || raw.toLowerCase() === 'native' || raw.toLowerCase() === NATIVE_ZERO\n if (args.chainId === DERIVE_HYPE_CHAIN_ID) {\n if (isNative || (raw && norm(raw) === norm(DERIVE_WHYPE))) {\n return {\n kind: 'hype_vault',\n chainId: DERIVE_HYPE_CHAIN_ID,\n symbol: 'HYPE',\n token: isNative ? NATIVE_ZERO : getAddress(DERIVE_WHYPE),\n decimals: 18,\n native: isNative,\n }\n }\n return null\n }\n if (args.chainId === 11155111) {\n if (isNative) return null\n try {\n return {\n kind: 'l1_direct',\n chainId: 11155111,\n symbol: 'USDC',\n token: getAddress(raw),\n decimals: 6,\n native: false,\n }\n } catch {\n return null\n }\n }\n if (args.chainId === 1) {\n if (isNative) {\n const weth = deriveSocketWethRoute(1)\n if (!weth) return null\n return { kind: 'l1_direct', chainId: 1, symbol: 'ETH', token: NATIVE_ZERO, decimals: 18, native: true, socket: weth }\n }\n const socket = deriveSocketRouteForToken(1, raw)\n if (!socket) return null\n return {\n kind: 'l1_direct',\n chainId: 1,\n symbol: socket.symbol,\n token: getAddress(socket.token),\n decimals: socket.decimals,\n native: false,\n socket,\n }\n }\n if (isDeriveSocketChainId(args.chainId)) {\n if (isNative) {\n const weth = deriveSocketWethRoute(args.chainId)\n if (!weth) return null\n return {\n kind: 'socket',\n chainId: args.chainId,\n symbol: 'ETH',\n token: NATIVE_ZERO,\n decimals: 18,\n native: true,\n socket: weth,\n }\n }\n const socket = deriveSocketRouteForToken(args.chainId, raw)\n if (!socket) return null\n return {\n kind: 'socket',\n chainId: args.chainId,\n symbol: socket.symbol,\n token: getAddress(socket.token),\n decimals: socket.decimals,\n native: false,\n socket,\n }\n }\n return null\n}\n\nexport function deriveFundableTokensForChain(chainId: number): Array<{\n address: `0x${string}`\n symbol: string\n decimals: number\n roles: string[]\n}> {\n if (chainId === DERIVE_HYPE_CHAIN_ID) {\n return [\n { address: NATIVE_ZERO, symbol: 'HYPE', decimals: 18, roles: ['native', 'collateral'] },\n { address: getAddress(DERIVE_WHYPE), symbol: 'WHYPE', decimals: 18, roles: ['native_wrapped', 'collateral'] },\n ]\n }\n if (chainId === 11155111) {\n return [{ address: getAddress('0x73Efab09362052D26FB93A730Be4F8a5EdC833af'), symbol: 'USDC', decimals: 6, roles: ['collateral'] }]\n }\n const rows = SOCKET_ROUTES.filter((r) => r.chainId === chainId).map((r) => ({\n address: getAddress(r.token),\n symbol: r.symbol,\n decimals: r.decimals,\n roles: r.symbol === 'USDC' ? ['collateral', 'quote'] : ['collateral', 'underlying'],\n }))\n if (deriveSocketWethRoute(chainId)) {\n rows.unshift({ address: NATIVE_ZERO, symbol: 'ETH', decimals: 18, roles: ['native', 'underlying'] })\n }\n return rows\n}\n","import { encodeFunctionData, getAddress, parseAbi, parseUnits, type Address } from 'viem'\nimport { gasLimitFromEstimateAndChainConfig } from '@continuumdao/continuum-node-sdk'\nimport { buildEvmMultisignBatch } from '../../../chains/evm/buildBatch.js'\nimport {\n buildConditionalErc20ApproveSteps,\n publicClientForRpc,\n resolveErc20Decimals,\n} from '../../../chains/evm/erc20Approve.js'\nimport type { EvmTxStep } from '../../../chains/evm/types.js'\nimport type { KeyGenSubsetForPermit } from '../../../core/types.js'\nimport { DERIVE_PROTOCOL_ID } from './constants.js'\nimport {\n DERIVE_SOCKET_FEE_FALLBACK_WEI,\n DERIVE_SOCKET_MSG_GAS_LIMIT,\n deriveSocketRouteForToken,\n deriveSocketWethRoute,\n} from './bridgeConstants.js'\nimport { NATIVE_ZERO } from './support.js'\n\nconst APPROVE_FALLBACK = 100_000n\nconst WRAP_FALLBACK = 80_000n\nconst BRIDGE_FALLBACK = 350_000n\n\nconst wethDepositAbi = parseAbi(['function deposit() payable'])\n\n/** Older Lyra Socket vaults (Derive docs / etherscan write interface). */\nconst socketVaultLegacyAbi = parseAbi([\n 'function getMinFees(address connector, uint256 minGasLimit) view returns (uint256)',\n 'function depositToAppChain(address receiver, uint256 amount, uint256 msgGasLimit, address connector) payable',\n])\n\ntype ChainRow = {\n legacy?: boolean\n gasLimit?: number\n gasMultiplier?: number\n gasPrice?: number\n baseFee?: number\n priorityFee?: number\n baseFeeMultiplier?: number\n}\n\nexport type DeriveSocketDepositArgs = {\n keyGen: KeyGenSubsetForPermit\n chainId: number\n rpcUrl: string\n chainDetail: ChainRow\n useCustomGas: boolean\n customGasChainDetails?: Record<string, unknown> | null\n executorAddress: Address | string\n purposeText: string\n /** Row token; native 0x0 wraps to WETH then bridges. */\n token: string\n amountHuman: string\n /** Receiver on Derive Chain — same KeyGen EOA. Defaults to executor. */\n receiver?: string\n expiryDate?: number\n}\n\nasync function readSocketFee(args: {\n publicClient: ReturnType<typeof publicClientForRpc>\n vault: Address\n connector: Address\n}): Promise<bigint> {\n try {\n const fee = await args.publicClient.readContract({\n address: args.vault,\n abi: socketVaultLegacyAbi,\n functionName: 'getMinFees',\n args: [args.connector, DERIVE_SOCKET_MSG_GAS_LIMIT],\n })\n if (typeof fee === 'bigint' && fee > 0n) return fee\n } catch {\n /* vault may be the newer SuperBridge interface */\n }\n return DERIVE_SOCKET_FEE_FALLBACK_WEI\n}\n\nexport async function buildDeriveSocketDepositMultisign(args: DeriveSocketDepositArgs) {\n const executor = getAddress(args.executorAddress)\n const receiver = getAddress((args.receiver ?? args.executorAddress) as `0x${string}`)\n const rawToken = (args.token ?? '').trim()\n const isNative = !rawToken || rawToken.toLowerCase() === 'native' || rawToken.toLowerCase() === NATIVE_ZERO\n const route = isNative ? deriveSocketWethRoute(args.chainId) : deriveSocketRouteForToken(args.chainId, rawToken)\n if (!route) {\n throw new Error(\n `No Derive Socket route for chain ${args.chainId} token ${rawToken || 'native'}. Fundable rows are USDC / WETH / WBTC on Ethereum, Optimism, Base, Arbitrum.`,\n )\n }\n const vault = getAddress(route.vault)\n const connector = getAddress(route.connector)\n const publicClient = publicClientForRpc(args.chainId, args.rpcUrl)\n const erc20 = getAddress(route.token)\n const decimals = isNative ? 18 : await resolveErc20Decimals({ publicClient, token: erc20 })\n const amountWei = parseUnits(args.amountHuman.trim(), decimals)\n if (amountWei <= 0n) throw new Error('amountHuman must be a positive deposit amount.')\n\n const feeWei = await readSocketFee({ publicClient, vault, connector })\n const vaultCalldata = encodeFunctionData({\n abi: socketVaultLegacyAbi,\n functionName: 'depositToAppChain',\n args: [receiver, amountWei, DERIVE_SOCKET_MSG_GAS_LIMIT, connector],\n })\n\n const steps: EvmTxStep[] = []\n if (isNative) {\n steps.push({\n to: erc20,\n data: encodeFunctionData({ abi: wethDepositAbi, functionName: 'deposit' }),\n value: amountWei,\n fallbackGas: WRAP_FALLBACK,\n })\n }\n const approveSteps = await buildConditionalErc20ApproveSteps({\n publicClient,\n token: erc20,\n spender: vault,\n owner: executor,\n amountWei,\n fallbackGas: APPROVE_FALLBACK,\n })\n steps.push(\n ...approveSteps.map((s) => ({\n to: s.to,\n data: s.data,\n value: s.value,\n fallbackGas: s.fallbackGas ?? APPROVE_FALLBACK,\n })),\n )\n steps.push({ to: vault, data: vaultCalldata, value: feeWei, fallbackGas: BRIDGE_FALLBACK })\n\n const firstDataNo0x = steps[0]!.data.startsWith('0x') ? steps[0]!.data.slice(2) : steps[0]!.data\n const gasLimitConfig =\n args.useCustomGas && args.chainDetail?.gasLimit != null ? Number(args.chainDetail.gasLimit) : undefined\n\n return buildEvmMultisignBatch({\n context: {\n chainCategory: 'evm',\n keyGen: args.keyGen,\n purposeText: args.purposeText,\n chainId: args.chainId,\n rpcUrl: args.rpcUrl.trim(),\n executorAddress: executor,\n chainDetail: args.chainDetail,\n useCustomGas: args.useCustomGas,\n customGasChainDetails: args.customGasChainDetails,\n expiryDate: args.expiryDate,\n },\n steps,\n purposeSuffix: `Derive Socket deposit ${route.symbol} → Derive Chain (FAST). Credit in ~2–5 min; then fetch_subaccounts.`,\n firstMsgRawNo0x: firstDataNo0x,\n destinationAddress: steps[0]!.to,\n payableValueWei: steps.reduce((sum, s) => sum + s.value, 0n),\n resolveGasLimit: ({ index, estimatedGas }) => {\n if (index === steps.length - 1) {\n const gas = BRIDGE_FALLBACK\n return args.useCustomGas ? gasLimitFromEstimateAndChainConfig(gas, gasLimitConfig) : gas\n }\n return estimatedGas\n },\n buildBatchMeta: ({ index }) => ({\n signatureText: JSON.stringify({\n kind: 'Derive',\n protocol: DERIVE_PROTOCOL_ID,\n action: index === steps.length - 1 ? 'socketDeposit' : isNative && index === 0 ? 'wrap' : 'approve',\n chainId: args.chainId,\n symbol: route.symbol,\n vault,\n }),\n }),\n })\n}\n","import { encodeFunctionData, getAddress, parseAbi, parseUnits, type Address } from 'viem'\nimport { gasLimitFromEstimateAndChainConfig } from '@continuumdao/continuum-node-sdk'\nimport { buildEvmMultisignBatch } from '../../../chains/evm/buildBatch.js'\nimport { buildConditionalErc20ApproveSteps, publicClientForRpc } from '../../../chains/evm/erc20Approve.js'\nimport type { EvmTxStep } from '../../../chains/evm/types.js'\nimport type { KeyGenSubsetForPermit } from '../../../core/types.js'\nimport { DERIVE_PROTOCOL_ID } from './constants.js'\nimport { DERIVE_HYPE_CHAIN_ID, DERIVE_WHYPE, deriveHypeVaultAddress } from './bridgeConstants.js'\nimport { NATIVE_ZERO } from './support.js'\n\nconst WRAP_FALLBACK = 80_000n\nconst APPROVE_FALLBACK = 100_000n\nconst DEPOSIT_FALLBACK = 250_000n\n\nconst whypeDepositAbi = parseAbi(['function deposit() payable'])\nconst vaultDepositAbi = parseAbi(['function deposit(uint256 amount)'])\n\ntype ChainRow = {\n legacy?: boolean\n gasLimit?: number\n gasMultiplier?: number\n gasPrice?: number\n baseFee?: number\n priorityFee?: number\n baseFeeMultiplier?: number\n}\n\nexport type DeriveHypeVaultDepositArgs = {\n keyGen: KeyGenSubsetForPermit\n chainId: number\n rpcUrl: string\n chainDetail: ChainRow\n useCustomGas: boolean\n customGasChainDetails?: Record<string, unknown> | null\n executorAddress: Address | string\n purposeText: string\n amountHuman: string\n /** Native 0x0 wraps first; WHYPE skips wrap. */\n token?: string\n vault?: string\n expiryDate?: number\n}\n\nexport async function buildDeriveHypeVaultDepositMultisign(args: DeriveHypeVaultDepositArgs) {\n if (args.chainId !== DERIVE_HYPE_CHAIN_ID) {\n throw new Error('Derive HYPE vault deposits are HyperEVM only (chainId 999).')\n }\n const executor = getAddress(args.executorAddress)\n const vault = deriveHypeVaultAddress(args.vault)\n const raw = (args.token ?? NATIVE_ZERO).trim()\n const isNative = !raw || raw.toLowerCase() === 'native' || raw.toLowerCase() === NATIVE_ZERO\n const amountWei = parseUnits(args.amountHuman.trim(), 18)\n if (amountWei <= 0n) throw new Error('amountHuman must be a positive HYPE amount.')\n\n const publicClient = publicClientForRpc(args.chainId, args.rpcUrl)\n const steps: EvmTxStep[] = []\n if (isNative) {\n steps.push({\n to: getAddress(DERIVE_WHYPE),\n data: encodeFunctionData({ abi: whypeDepositAbi, functionName: 'deposit' }),\n value: amountWei,\n fallbackGas: WRAP_FALLBACK,\n })\n }\n const approveSteps = await buildConditionalErc20ApproveSteps({\n publicClient,\n token: getAddress(DERIVE_WHYPE),\n spender: vault,\n owner: executor,\n amountWei,\n fallbackGas: APPROVE_FALLBACK,\n })\n steps.push(\n ...approveSteps.map((s) => ({\n to: s.to,\n data: s.data,\n value: s.value,\n fallbackGas: s.fallbackGas ?? APPROVE_FALLBACK,\n })),\n )\n steps.push({\n to: vault,\n data: encodeFunctionData({ abi: vaultDepositAbi, functionName: 'deposit', args: [amountWei] }),\n value: 0n,\n fallbackGas: DEPOSIT_FALLBACK,\n })\n\n const firstDataNo0x = steps[0]!.data.startsWith('0x') ? steps[0]!.data.slice(2) : steps[0]!.data\n const gasLimitConfig =\n args.useCustomGas && args.chainDetail?.gasLimit != null ? Number(args.chainDetail.gasLimit) : undefined\n\n return buildEvmMultisignBatch({\n context: {\n chainCategory: 'evm',\n keyGen: args.keyGen,\n purposeText: args.purposeText,\n chainId: args.chainId,\n rpcUrl: args.rpcUrl.trim(),\n executorAddress: executor,\n chainDetail: args.chainDetail,\n useCustomGas: args.useCustomGas,\n customGasChainDetails: args.customGasChainDetails,\n expiryDate: args.expiryDate,\n },\n steps,\n purposeSuffix:\n 'Derive: wrap HYPE → WHYPE (if native), approve vault, deposit. First credit creates a Standard Margin subaccount.',\n firstMsgRawNo0x: firstDataNo0x,\n destinationAddress: steps[0]!.to,\n payableValueWei: steps.reduce((sum, s) => sum + s.value, 0n),\n resolveGasLimit: ({ index, estimatedGas }) => {\n if (index === steps.length - 1) {\n const gas = DEPOSIT_FALLBACK\n return args.useCustomGas ? gasLimitFromEstimateAndChainConfig(gas, gasLimitConfig) : gas\n }\n return estimatedGas\n },\n buildBatchMeta: ({ index }) => ({\n signatureText: JSON.stringify({\n kind: 'Derive',\n protocol: DERIVE_PROTOCOL_ID,\n action: index === steps.length - 1 ? 'hypeVaultDeposit' : isNative && index === 0 ? 'wrap' : 'approve',\n chainId: args.chainId,\n vault,\n }),\n }),\n })\n}\n","import { getAddress } from 'viem'\nimport { buildEip712Multisign } from '../../../core/eip712Multisign.js'\nimport type { KeyGenSubsetForPermit } from '../../../core/types.js'\nimport { DERIVE_MISSING_SUBACCOUNT_ERROR, DERIVE_PROTOCOL_ID, DERIVE_TRANSFER_MODULE } from './constants.js'\nimport {\n assertPositiveSubaccountId,\n buildDeriveActionTypedData,\n deriveExpirySec,\n deriveRandomNonce,\n encodeDeriveTransferData,\n} from './signing.js'\nimport { deriveNetworkFromChainId, deriveSettlementChainId } from './support.js'\n\nconst ZERO_ADDRESS = '0x0000000000000000000000000000000000000000'\n\nexport type DeriveTransferSpotMultisignArgs = {\n keyGen: KeyGenSubsetForPermit\n chainId: number\n purposeText: string\n executorAddress: string\n /** Funded source subaccount (must already exist). */\n fromSubaccountId: number\n /** 0 when creating an extra subaccount via newSubaccountManager. */\n toSubaccountId: number\n newSubaccountManager: number\n asset: string\n amount: string\n maxFeeUsd?: string\n subId?: number\n expiryDate?: number\n nonce?: string\n signatureExpirySec?: number\n}\n\nexport async function buildDeriveTransferSpotMultisign(args: DeriveTransferSpotMultisignArgs) {\n let fromId: bigint\n try {\n fromId = assertPositiveSubaccountId(args.fromSubaccountId)\n } catch {\n throw new Error(DERIVE_MISSING_SUBACCOUNT_ERROR)\n }\n const toId = BigInt(args.toSubaccountId ?? 0)\n const newManager = BigInt(args.newSubaccountManager)\n if (toId === 0n && newManager <= 0n) {\n throw new Error('newSubaccountManager is required when toSubaccountId is 0 (create an extra subaccount).')\n }\n const owner = getAddress(args.executorAddress)\n const network = deriveNetworkFromChainId(args.chainId)\n const nonce = args.nonce ?? deriveRandomNonce()\n const expirySec = deriveExpirySec(args.signatureExpirySec)\n const data = encodeDeriveTransferData({\n toSubaccountId: toId,\n newSubaccountManager: newManager,\n asset: args.asset,\n subId: args.subId ?? 0,\n amount: args.amount,\n maxFeeUsd: args.maxFeeUsd ?? '0',\n })\n const typedData = buildDeriveActionTypedData({\n network,\n subaccountId: fromId,\n nonce,\n module: DERIVE_TRANSFER_MODULE,\n data,\n expirySec,\n owner,\n signer: owner,\n })\n return buildEip712Multisign({\n keyGen: args.keyGen,\n purposeText: args.purposeText,\n destinationChainID: String(args.chainId),\n destinationAddress: ZERO_ADDRESS,\n expiryDate: args.expiryDate,\n legs: [\n {\n typedData,\n delivery: {\n kind: 'derive_exchange',\n method: 'private/transfer_spot',\n chainId: args.chainId,\n network,\n settlementChainId: deriveSettlementChainId(network),\n params: {\n subaccount_id: Number(fromId),\n nonce,\n signer: owner,\n signature_expiry_sec: expirySec,\n asset: getAddress(args.asset),\n amount: args.amount,\n to_subaccount_id: Number(toId),\n new_subaccount_manager: Number(newManager),\n },\n },\n audit: {\n protocol: DERIVE_PROTOCOL_ID,\n action: 'transferSpot',\n fromSubaccountId: fromId.toString(),\n toSubaccountId: toId.toString(),\n newSubaccountManager: newManager.toString(),\n },\n },\n ],\n })\n}\n","import type { ProtocolModule } from '../../../core/types.js'\nimport { registerProtocolModule } from '../../../core/registry.js'\nimport { DERIVE_PROTOCOL_ID } from './constants.js'\nimport { isDeriveChainSupported } from './support.js'\n\nexport * from './constants.js'\nexport * from './support.js'\nexport * from './native.js'\nexport * from './api.js'\nexport * from './assets.js'\nexport * from './reads.js'\nexport * from './accountReads.js'\nexport * from './signing.js'\nexport * from './loginSigning.js'\nexport * from './exchangeMultisign.js'\nexport * from './depositMultisign.js'\nexport * from './depositAddress.js'\nexport * from './bridgeConstants.js'\nexport * from './socketMultisign.js'\nexport * from './hypeVaultMultisign.js'\nexport * from './transferMultisign.js'\n\nexport const deriveProtocolModule: ProtocolModule = {\n id: DERIVE_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) && isDeriveChainSupported(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: 'derive.depositNewSubaccount',\n protocolId: DERIVE_PROTOCOL_ID,\n chainCategory: 'evm',\n description:\n 'Ethereum L1 approve + ACTION_MANAGER.depositToNewSubaccount. First credit creates the trading + fallback subaccounts. chainId 1 / 11155111. Arb/OP/Base use derive.socketDeposit; HyperEVM HYPE uses derive.hypeVaultDeposit.',\n commonParams: ['keyGen', 'purposeText', 'useCustomGas'],\n params: {\n protocolAsset: { type: 'string', required: true, description: 'Risk-universe collateral protocol asset' },\n underlyingErc20: { type: 'string', required: true, description: 'L1 ERC-20 to approve (usually USDC)' },\n amountHuman: { type: 'string', required: true, description: 'Deposit amount in underlying decimals' },\n managerId: { type: 'number', required: true, description: 'Risk-universe manager_id' },\n },\n },\n {\n id: 'derive.depositAddressTransfer',\n protocolId: DERIVE_PROTOCOL_ID,\n chainCategory: 'evm',\n description:\n 'Ethereum L1 ERC-20 transfer to a registered Derive deposit address (standard / keeper sweep). Call register_deposit_address first.',\n commonParams: ['keyGen', 'purposeText', 'useCustomGas'],\n params: {\n underlyingErc20: { type: 'string', required: true, description: 'L1 ERC-20 to send (usually USDC)' },\n amountHuman: { type: 'string', required: true, description: 'Transfer amount in token units' },\n depositAddress: { type: 'string', required: true, description: 'From register_deposit_address' },\n },\n },\n {\n id: 'derive.socketDeposit',\n protocolId: DERIVE_PROTOCOL_ID,\n chainCategory: 'evm',\n description:\n 'Socket FAST deposit of USDC/WETH/WBTC on Ethereum, Optimism, Base, or Arbitrum into Derive Chain. Native ETH wraps to WETH first. useCustomGas.',\n commonParams: ['keyGen', 'purposeText', 'useCustomGas'],\n params: {\n token: { type: 'string', required: true, description: 'Row ERC-20 or native 0x0 (wraps to WETH)' },\n amountHuman: { type: 'string', required: true, description: 'Deposit amount in token units' },\n },\n },\n {\n id: 'derive.hypeVaultDeposit',\n protocolId: DERIVE_PROTOCOL_ID,\n chainCategory: 'evm',\n description: 'HyperEVM (999): wrap native HYPE to WHYPE if needed, approve Derive vault, deposit.',\n commonParams: ['keyGen', 'purposeText', 'useCustomGas'],\n params: {\n amountHuman: { type: 'string', required: true, description: 'HYPE amount' },\n token: { type: 'string', required: false, description: 'Native 0x0 or WHYPE' },\n },\n },\n {\n id: 'derive.placeOrder',\n protocolId: DERIVE_PROTOCOL_ID,\n chainCategory: 'evm',\n description:\n 'Place a Derive options limit order via EIP-712 Action (delivery derive_exchange). Does not spend the current-chain token.',\n commonParams: ['keyGen', 'purposeText'],\n params: {\n instrumentName: { type: 'string', required: true, description: 'e.g. ETH-20260626-3000-C' },\n direction: { type: 'string', required: true, description: 'buy or sell' },\n amount: { type: 'string', required: true, description: 'Contract size' },\n limitPrice: { type: 'string', required: true, description: 'Limit price' },\n maxFee: { type: 'string', required: true, description: 'Max fee (e18-scaled, ≤12 decimals)' },\n subaccountId: { type: 'number', required: true, description: 'From fetch_subaccounts — never 0' },\n },\n },\n {\n id: 'derive.replaceOrder',\n protocolId: DERIVE_PROTOCOL_ID,\n chainCategory: 'evm',\n description: 'Replace a Derive open order (EIP-712 Action + orderIdToCancel or nonceToCancel).',\n commonParams: ['keyGen', 'purposeText'],\n params: {\n instrumentName: { type: 'string', required: true, description: 'Instrument of the replacement order' },\n direction: { type: 'string', required: true, description: 'buy or sell' },\n amount: { type: 'string', required: true, description: 'Contract size' },\n limitPrice: { type: 'string', required: true, description: 'Limit price' },\n maxFee: { type: 'string', required: true, description: 'Max fee' },\n subaccountId: { type: 'number', required: true, description: 'From fetch_subaccounts' },\n orderIdToCancel: { type: 'string', required: false, description: 'Existing order id (xor nonceToCancel)' },\n nonceToCancel: { type: 'string', required: false, description: 'Existing order nonce (xor orderIdToCancel)' },\n },\n },\n {\n id: 'derive.cancel',\n protocolId: DERIVE_PROTOCOL_ID,\n chainCategory: 'evm',\n description:\n 'Cancel a Derive open order. v3 cancel is session-auth; this signs EIP-191 login for private/cancel delivery.',\n commonParams: ['keyGen', 'purposeText'],\n params: {\n instrumentName: { type: 'string', required: true, description: 'Instrument of the open order' },\n orderId: { type: 'string', required: true, description: 'order_id from fetch_open_orders' },\n subaccountId: { type: 'number', required: true, description: 'From fetch_subaccounts' },\n },\n },\n {\n id: 'derive.transferSpot',\n protocolId: DERIVE_PROTOCOL_ID,\n chainCategory: 'evm',\n description:\n 'EIP-712 transfer_spot. Use toSubaccountId 0 + newSubaccountManager to create an extra subaccount after the first funded one.',\n commonParams: ['keyGen', 'purposeText'],\n params: {\n fromSubaccountId: { type: 'number', required: true, description: 'Funded source subaccount' },\n toSubaccountId: { type: 'number', required: true, description: '0 to create an extra subaccount' },\n newSubaccountManager: { type: 'number', required: true, description: 'Required when toSubaccountId is 0' },\n asset: { type: 'string', required: true, description: 'Protocol asset address' },\n amount: { type: 'string', required: true, description: 'Transfer amount' },\n },\n },\n ],\n}\n\nregisterProtocolModule(deriveProtocolModule)\n"]}
|
|
@@ -1,6 +1,57 @@
|
|
|
1
|
-
import { b as KeyGenSubsetForPermit, e as ProtocolModule } from '../../../types-lIfv59N1.js';
|
|
2
1
|
import { Address } from 'viem';
|
|
3
2
|
|
|
3
|
+
/** Aligns with app NonEvmChainType + 'evm'. Extend as mpc-auth adds chains. */
|
|
4
|
+
type ChainCategory = 'evm' | 'solana' | 'near' | 'sui' | 'ton' | 'stellar';
|
|
5
|
+
type EvmTokenKind = 'native' | 'erc20' | 'erc721' | 'ctmerc20' | 'ctmrwa1';
|
|
6
|
+
type SolanaTokenKind = 'native' | 'spl' | 'spl2022';
|
|
7
|
+
type NearTokenKind = 'native' | 'nep141';
|
|
8
|
+
type TokenRef = {
|
|
9
|
+
category: 'evm';
|
|
10
|
+
kind: EvmTokenKind;
|
|
11
|
+
address: `0x${string}`;
|
|
12
|
+
} | {
|
|
13
|
+
category: 'solana';
|
|
14
|
+
kind: SolanaTokenKind;
|
|
15
|
+
mint: string;
|
|
16
|
+
} | {
|
|
17
|
+
category: 'near';
|
|
18
|
+
kind: NearTokenKind;
|
|
19
|
+
contractId: string;
|
|
20
|
+
};
|
|
21
|
+
type ParamDoc = {
|
|
22
|
+
type: string;
|
|
23
|
+
required: boolean;
|
|
24
|
+
description: string;
|
|
25
|
+
};
|
|
26
|
+
type ProtocolActionDescriptor = {
|
|
27
|
+
id: string;
|
|
28
|
+
protocolId: string;
|
|
29
|
+
chainCategory: ChainCategory;
|
|
30
|
+
description: string;
|
|
31
|
+
commonParams: Array<'keyGen' | 'purposeText' | 'useCustomGas' | 'useCustomFees'>;
|
|
32
|
+
params: Record<string, ParamDoc>;
|
|
33
|
+
};
|
|
34
|
+
type ChainSupportContext = {
|
|
35
|
+
chainCategory: ChainCategory;
|
|
36
|
+
chainId: string | number;
|
|
37
|
+
};
|
|
38
|
+
interface ProtocolModule {
|
|
39
|
+
id: string;
|
|
40
|
+
chainCategory: ChainCategory;
|
|
41
|
+
isChainSupported(ctx: ChainSupportContext): boolean | Promise<boolean>;
|
|
42
|
+
isTokenSupported(token: TokenRef): boolean | Promise<boolean>;
|
|
43
|
+
actions: ProtocolActionDescriptor[];
|
|
44
|
+
}
|
|
45
|
+
type KeyGenSubset = {
|
|
46
|
+
pubkeyhex?: string;
|
|
47
|
+
keylist?: string[];
|
|
48
|
+
ClientKeys?: Record<string, string>;
|
|
49
|
+
groupId?: string;
|
|
50
|
+
GroupId?: string;
|
|
51
|
+
};
|
|
52
|
+
/** App-compatible alias used by multisign builders and Permit2 helpers. */
|
|
53
|
+
type KeyGenSubsetForPermit = KeyGenSubset;
|
|
54
|
+
|
|
4
55
|
declare const ETHENA_LABS_GITHUB = "https://github.com/ethena-labs";
|
|
5
56
|
declare const ETHENA_KEY_ADDRESSES_DOC = "https://docs.ethena.fi/solution-design/key-addresses";
|
|
6
57
|
declare const USDE_ETHEREUM_MAINNET: "0x4c9edd5852cd905f086c759e8383e09bff1e68b3";
|