@continuumdao/ctm-mpc-defi 0.2.11 → 0.2.12

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (64) hide show
  1. package/dist/agent/catalog.cjs +96 -47
  2. package/dist/agent/catalog.cjs.map +1 -1
  3. package/dist/agent/catalog.d.ts +879 -339
  4. package/dist/agent/catalog.js +96 -47
  5. package/dist/agent/catalog.js.map +1 -1
  6. package/dist/agent/skills/morpho/SKILL.md +8 -0
  7. package/dist/chains/evm/index.cjs +1 -1
  8. package/dist/chains/evm/index.cjs.map +1 -1
  9. package/dist/chains/evm/index.js +1 -1
  10. package/dist/chains/evm/index.js.map +1 -1
  11. package/dist/core/index.cjs +1 -1
  12. package/dist/core/index.cjs.map +1 -1
  13. package/dist/core/index.d.ts +1 -1
  14. package/dist/core/index.js +1 -1
  15. package/dist/core/index.js.map +1 -1
  16. package/dist/index.cjs +1 -1
  17. package/dist/index.cjs.map +1 -1
  18. package/dist/index.js +1 -1
  19. package/dist/index.js.map +1 -1
  20. package/dist/protocols/evm/aave-v4/index.cjs +1 -1
  21. package/dist/protocols/evm/aave-v4/index.cjs.map +1 -1
  22. package/dist/protocols/evm/aave-v4/index.js +1 -1
  23. package/dist/protocols/evm/aave-v4/index.js.map +1 -1
  24. package/dist/protocols/evm/curve-dao/index.cjs +1 -1
  25. package/dist/protocols/evm/curve-dao/index.cjs.map +1 -1
  26. package/dist/protocols/evm/curve-dao/index.js +1 -1
  27. package/dist/protocols/evm/curve-dao/index.js.map +1 -1
  28. package/dist/protocols/evm/ethena/index.cjs +1 -1
  29. package/dist/protocols/evm/ethena/index.cjs.map +1 -1
  30. package/dist/protocols/evm/ethena/index.js +1 -1
  31. package/dist/protocols/evm/ethena/index.js.map +1 -1
  32. package/dist/protocols/evm/euler-v2/index.cjs +1 -1
  33. package/dist/protocols/evm/euler-v2/index.cjs.map +1 -1
  34. package/dist/protocols/evm/euler-v2/index.js +1 -1
  35. package/dist/protocols/evm/euler-v2/index.js.map +1 -1
  36. package/dist/protocols/evm/gmx/index.cjs +1 -1
  37. package/dist/protocols/evm/gmx/index.cjs.map +1 -1
  38. package/dist/protocols/evm/gmx/index.js +1 -1
  39. package/dist/protocols/evm/gmx/index.js.map +1 -1
  40. package/dist/protocols/evm/hyperliquid/index.cjs +1 -1
  41. package/dist/protocols/evm/hyperliquid/index.cjs.map +1 -1
  42. package/dist/protocols/evm/hyperliquid/index.js +1 -1
  43. package/dist/protocols/evm/hyperliquid/index.js.map +1 -1
  44. package/dist/protocols/evm/lido/index.cjs +1 -1
  45. package/dist/protocols/evm/lido/index.cjs.map +1 -1
  46. package/dist/protocols/evm/lido/index.js +1 -1
  47. package/dist/protocols/evm/lido/index.js.map +1 -1
  48. package/dist/protocols/evm/maple/index.cjs +1 -1
  49. package/dist/protocols/evm/maple/index.cjs.map +1 -1
  50. package/dist/protocols/evm/maple/index.js +1 -1
  51. package/dist/protocols/evm/maple/index.js.map +1 -1
  52. package/dist/protocols/evm/morpho/index.cjs +1 -1
  53. package/dist/protocols/evm/morpho/index.cjs.map +1 -1
  54. package/dist/protocols/evm/morpho/index.js +1 -1
  55. package/dist/protocols/evm/morpho/index.js.map +1 -1
  56. package/dist/protocols/evm/sky/index.cjs +1 -1
  57. package/dist/protocols/evm/sky/index.cjs.map +1 -1
  58. package/dist/protocols/evm/sky/index.js +1 -1
  59. package/dist/protocols/evm/sky/index.js.map +1 -1
  60. package/dist/protocols/evm/uniswap-v4/index.cjs +1 -1
  61. package/dist/protocols/evm/uniswap-v4/index.cjs.map +1 -1
  62. package/dist/protocols/evm/uniswap-v4/index.js +1 -1
  63. package/dist/protocols/evm/uniswap-v4/index.js.map +1 -1
  64. package/package.json +1 -1
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../src/core/registry.ts","../../../../src/protocols/evm/sky/mainnet.ts","../../../../src/core/purpose.ts","../../../../src/core/envelope.ts","../../../../src/chains/evm/routerSwapGas.ts","../../../../src/chains/evm/buildBatch.ts","../../../../src/protocols/evm/sky/lockstakeMultisign.ts","../../../../src/protocols/evm/sky/susdsMultisign.ts","../../../../src/protocols/evm/sky/lockstakeRead.ts","../../../../src/protocols/evm/sky/susdsRead.ts","../../../../src/core/defiProxy.ts","../../../../src/protocols/evm/sky/usdPrice.ts","../../../../src/protocols/evm/sky/loadLockstakeSupportedChainIds.ts","../../../../src/protocols/evm/sky/index.ts"],"names":["getClientIdFromKeyGenResult","gasLimitFromEstimateAndChainConfig","defineChain","createPublicClient","http","fetchChainFeeParams","getAddress","parseGwei","gweiToDecimalString","serializeTransaction","proposalTxParamsToFeeSnapshot","alignEip1559FeesWithLatestBase","keccak256","parseAbi","parseUnits","encodeFunctionData","decodeFunctionData","erc20AllowanceAbi","erc20ApproveAbi","engineAbi","formatUnits"],"mappings":"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","file":"index.cjs","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","/**\n * Sky LockStake on Ethereum mainnet.\n * @see https://developers.skyeco.com/protocol/rewards/staking-engine/\n * @see https://developers.skyeco.com/guides/sky/token-governance-upgrade/key-info/ (contract list)\n */\n/** Sky (SKY token) on Ethereum mainnet. */\nexport const SKY_ETHEREUM_MAINNET = '0x56072C95FAA701256059aa122697B133aDEd9279'\nexport const SKY_ETHEREUM_MAINNET_CHAIN_ID = 1\nexport const USDS_ETHEREUM_MAINNET = '0xdC035D45d973E3EC169d2276DDab16f1e407384F'\n\n/** sUSDS ERC-4626 vault (share token); deposit USDS → mint shares, redeem shares → USDS. @see https://developers.skyeco.com/protocol/tokens/susds/ */\nexport const SUSDS_VAULT_ERC4626_MAINNET = '0xa3931d71877C0E7a3148CB7Eb4463524FEc27fbD'\n\n/**\n * Staking Engine (LockStake) — **Chief V3 / SKY** (active; `LSEV2-SKY-A` ilk). This is the contract users should call.\n * Do not use Seal Engine V1 (`0x2b16C07D…`, MKR / Chief V2 legacy); it has little traffic and is not the current SKY engine.\n * Dual entrypoints: legacy `lock`/`free` (MKR path) vs **`lockSky`/`freeSky`** for SKY collateral via `mkrSky`.\n */\nexport const SKY_LOCKSTAKE_ENGINE_MAINNET = '0xCe01C90dE7FD1bcFa39e237FE6D8D9F569e8A6a3'\n\n/**\n * Wrapped SKY used inside the urn after `lockSky`; StakingRewards farms must list this ERC-20 as `stakingToken()`.\n * @see Symbol `lsSKY`.\n */\nexport const SKY_LS_SKY_ERC20_MAINNET = '0xf9A9cfD3229E985B91F99Bc866d42938044FFa1C'\n\n/**\n * Default staking rewards farm on {@link SKY_LOCKSTAKE_ENGINE_MAINNET} — must be ACTIVE and `stakingToken() === lsSKY`.\n * (Older Seal-engine farm addresses are not whitelisted on the current engine.)\n */\nexport const SKY_LOCKSTAKE_DEFAULT_FARM_MAINNET = '0xB44C2Fb4181D7Cb06bdFf34A46FdFe4a259B40Fc'\nexport const SKY_LOCKSTAKE_DEFAULT_FARM_REF = 1\n\n/**\n * Rough UI collateral factor for “remaining borrow (USD)” estimate in the LockStake dialog only.\n * Not protocol liquidation collateralization; see `SkyLockstakeDialog` disclosures.\n */\nexport const SKY_LOCKSTAKE_UI_COLLATERAL_FACTOR = 0.65\n\nexport const SKY_TOKEN_DECIMALS = 18\nexport const USDS_DECIMALS = 18\n","/** Merge user purpose text with an optional batch / protocol suffix. */\nexport function mergePurposeText(purposeText: string, 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}\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)\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 return { bodyForSign, messageToSign: JSON.stringify(bodyForSign) }\n}\n\nexport const coreChainCategoryModule: ChainCategoryModule = {\n category: 'evm',\n finalizeMultisign,\n}\n","import { gasLimitFromEstimateAndChainConfig } from '@continuumdao/continuum-node-sdk'\n\n/** Curve router swap gas: chain cap when set, else 12/10 estimate bump. */\nexport function routerSwapGasLimitFromEstimate(\n estimatedGas: bigint,\n chainGasLimit?: number | null,\n): bigint {\n if (chainGasLimit != null && Number.isFinite(chainGasLimit) && chainGasLimit > 0) {\n return gasLimitFromEstimateAndChainConfig(estimatedGas, chainGasLimit)\n }\n return (estimatedGas * 12n + 9n) / 10n\n}\n","import {\n keccak256,\n createPublicClient,\n defineChain,\n http,\n serializeTransaction,\n getAddress,\n parseGwei,\n type Address,\n type PublicClient,\n} from 'viem'\nimport type { MultisignBuildResult } from '../../core/types.js'\nimport { finalizeMultisign, type MultisignLeg } from '../../core/envelope.js'\nimport type { KeyGenSubset } from '../../core/types.js'\nimport {\n fetchChainFeeParams,\n alignEip1559FeesWithLatestBase,\n gweiToDecimalString,\n gasLimitFromEstimateAndChainConfig,\n proposalTxParamsToFeeSnapshot,\n type ProposalTxParams,\n} from '@continuumdao/continuum-node-sdk'\nimport { routerSwapGasLimitFromEstimate } from './routerSwapGas.js'\nimport type { EvmProtocolContext, EvmTxStep } from './types.js'\n\nexport type EvmBatchMetaBuilder = (args: {\n step: EvmTxStep\n index: number\n gasLimit: bigint\n}) => Record<string, unknown>\n\nexport type EvmBuildBatchArgs = {\n context: EvmProtocolContext\n steps: EvmTxStep[]\n purposeSuffix?: string\n buildBatchMeta: EvmBatchMetaBuilder\n /** First leg msgRaw without 0x prefix; defaults to first step calldata */\n firstMsgRawNo0x?: string\n destinationAddress?: Address\n /** Top-level `value` on bodyForSign when the payable amount is not on the first leg */\n payableValueWei?: bigint\n resolveGasLimit?: (args: {\n step: EvmTxStep\n index: number\n estimatedGas: bigint\n publicClient: PublicClient\n }) => Promise<bigint> | bigint\n /** Override default `estimateGas` (e.g. trade-API gas, skip post-approve deposit estimate). */\n estimateGasForStep?: (args: {\n step: EvmTxStep\n index: number\n publicClient: PublicClient\n executor: Address\n }) => Promise<bigint> | bigint\n}\n\n/**\n * Build unsigned EVM txs, estimate gas, serialize, hash — then assemble mpc-auth body via core envelope.\n */\nexport async function buildEvmMultisignBatch(args: EvmBuildBatchArgs): Promise<MultisignBuildResult> {\n const { context, steps } = args\n const {\n chainId,\n rpcUrl,\n executorAddress,\n chainDetail,\n useCustomGas,\n customGasChainDetails,\n keyGen,\n purposeText,\n } = context\n\n if (steps.length === 0) throw new Error('buildEvmMultisignBatch requires at least one step')\n\n const ch = defineChain({\n id: chainId,\n name: 'Destination',\n nativeCurrency: { decimals: 18, name: 'Ether', symbol: 'ETH' },\n rpcUrls: { default: { http: [rpcUrl] } },\n })\n const publicClient = createPublicClient({ chain: ch, transport: http(rpcUrl) })\n\n const feeParams = await fetchChainFeeParams(rpcUrl, chainId)\n const legacy = Boolean(chainDetail?.legacy) || !feeParams.isEip1559\n const latestBaseFeeWei = !legacy\n ? ((await publicClient.getBlock({ blockTag: 'latest' })).baseFeePerGas ?? 0n)\n : 0n\n\n const gasLimitConfig =\n useCustomGas && chainDetail?.gasLimit != null ? Number(chainDetail.gasLimit) : undefined\n const chainGasLimitRouter =\n chainDetail?.gasLimit != null &&\n Number.isFinite(Number(chainDetail.gasLimit)) &&\n Number(chainDetail.gasLimit) > 0\n ? Number(chainDetail.gasLimit)\n : undefined\n const gasFeeMultiplier =\n useCustomGas && chainDetail?.gasMultiplier != null ? Number(chainDetail.gasMultiplier) : undefined\n\n const executor = getAddress(executorAddress)\n const baseNonce = await publicClient.getTransactionCount({ address: executor, blockTag: 'pending' })\n\n const legs: MultisignLeg[] = []\n\n for (let i = 0; i < steps.length; i++) {\n const step = steps[i]!\n const currentNonce = baseNonce + i\n\n let estimatedGas: bigint\n if (args.estimateGasForStep) {\n estimatedGas = await args.estimateGasForStep({ step, index: i, publicClient, executor })\n } else {\n try {\n estimatedGas = await publicClient.estimateGas({\n to: step.to,\n data: step.data,\n value: step.value,\n account: executor,\n })\n } catch {\n estimatedGas = step.fallbackGas ?? 100_000n\n }\n }\n\n let gasLimitI: bigint\n if (args.resolveGasLimit) {\n gasLimitI = await args.resolveGasLimit({ step, index: i, estimatedGas, publicClient })\n } else if (step.routerSwap) {\n gasLimitI = routerSwapGasLimitFromEstimate(estimatedGas, chainGasLimitRouter)\n } else {\n gasLimitI = useCustomGas\n ? gasLimitFromEstimateAndChainConfig(estimatedGas, gasLimitConfig)\n : estimatedGas\n }\n\n let proposalTxParams: ProposalTxParams\n let feeSnapshot: Record<string, unknown>\n let serialized: `0x${string}`\n\n if (legacy) {\n let gasPriceWei = await publicClient.getGasPrice()\n if (useCustomGas && gasFeeMultiplier != null && gasFeeMultiplier > 0) {\n gasPriceWei = (gasPriceWei * BigInt(100 + gasFeeMultiplier)) / 100n\n }\n if (useCustomGas && chainDetail?.gasPrice != null && chainDetail.gasPrice > 0) {\n const configured = parseGwei(gweiToDecimalString(Number(chainDetail.gasPrice)))\n if (configured > gasPriceWei) gasPriceWei = configured\n }\n serialized = serializeTransaction({\n type: 'legacy',\n to: step.to,\n data: step.data,\n value: step.value,\n gas: gasLimitI,\n gasPrice: gasPriceWei,\n nonce: currentNonce,\n chainId,\n })\n proposalTxParams = {\n nonce: currentNonce,\n gasLimit: gasLimitI.toString(),\n txType: 'legacy',\n gasPrice: gasPriceWei.toString(),\n }\n feeSnapshot = proposalTxParamsToFeeSnapshot(proposalTxParams)\n } else {\n const fetchedBase = feeParams.baseFeeGwei ?? 0\n const fetchedPriority = feeParams.priorityFeeGwei ?? 0\n const configuredBase =\n useCustomGas && chainDetail?.baseFee != null ? Number(chainDetail.baseFee) : 0\n const configuredPriority =\n useCustomGas && chainDetail?.priorityFee != null ? Number(chainDetail.priorityFee) : 0\n const effectiveBaseFeeGwei = Math.max(fetchedBase, configuredBase)\n const effectivePriorityFeeGwei = Math.max(fetchedPriority, configuredPriority)\n const baseFeeMultiplierPct =\n useCustomGas && chainDetail?.baseFeeMultiplier != null\n ? Math.max(100, Number(chainDetail.baseFeeMultiplier))\n : 100\n const baseComponentGwei = (effectiveBaseFeeGwei * baseFeeMultiplierPct) / 100\n const maxFeePerGasGwei = baseComponentGwei + effectivePriorityFeeGwei\n let maxPriorityFeePerGas =\n effectivePriorityFeeGwei > 0\n ? parseGwei(gweiToDecimalString(effectivePriorityFeeGwei))\n : parseGwei('1')\n let maxFeePerGas = parseGwei(gweiToDecimalString(maxFeePerGasGwei))\n if (useCustomGas && gasFeeMultiplier != null && gasFeeMultiplier > 0) {\n maxPriorityFeePerGas = (maxPriorityFeePerGas * BigInt(100 + gasFeeMultiplier)) / 100n\n maxFeePerGas = (maxFeePerGas * BigInt(100 + gasFeeMultiplier)) / 100n\n }\n ;({ maxFeePerGas, maxPriorityFeePerGas } = alignEip1559FeesWithLatestBase(\n maxFeePerGas,\n maxPriorityFeePerGas,\n latestBaseFeeWei,\n ))\n serialized = serializeTransaction({\n type: 'eip1559',\n to: step.to,\n data: step.data,\n value: step.value,\n gas: gasLimitI,\n maxFeePerGas,\n maxPriorityFeePerGas,\n nonce: currentNonce,\n chainId,\n })\n proposalTxParams = {\n nonce: currentNonce,\n gasLimit: gasLimitI.toString(),\n txType: 'eip1559',\n maxFeePerGas: maxFeePerGas.toString(),\n maxPriorityFeePerGas: maxPriorityFeePerGas.toString(),\n }\n feeSnapshot = i === 0 ? proposalTxParamsToFeeSnapshot(proposalTxParams) : {}\n }\n\n const h = keccak256(serialized)\n const msgHash = h.startsWith('0x') ? h.slice(2) : h\n\n const batchMetaExtra = args.buildBatchMeta({ step, index: i, gasLimit: gasLimitI })\n\n legs.push({\n msgHash,\n msgRaw: i === 0 && args.firstMsgRawNo0x != null ? args.firstMsgRawNo0x : serialized,\n destinationAddress: step.to,\n signatureText:\n typeof batchMetaExtra.signatureText === 'string'\n ? batchMetaExtra.signatureText\n : JSON.stringify(batchMetaExtra.signatureText ?? {}),\n audit: batchMetaExtra,\n feeSnapshot: i === 0 ? feeSnapshot : {},\n proposalTxParams,\n valueWei: i === 0 ? step.value : undefined,\n })\n\n if (i === 0 && args.firstMsgRawNo0x != null) {\n legs[0]!.msgRaw = args.firstMsgRawNo0x\n }\n }\n\n const extraJSON: Record<string, unknown> = {}\n if (useCustomGas && customGasChainDetails && Object.keys(customGasChainDetails).length > 0) {\n extraJSON.customGasChainDetails = customGasChainDetails\n }\n\n const result = finalizeMultisign({\n keyGen: keyGen as KeyGenSubset,\n purposeText,\n purposeSuffix: args.purposeSuffix,\n destinationChainID: String(chainId),\n destinationAddress: args.destinationAddress ?? steps[0]!.to,\n legs,\n extraJSON: Object.keys(extraJSON).length > 0 ? extraJSON : undefined,\n })\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","/**\n * Sky LockStake Engine (Ethereum): multisign batches for stake/open position, borrow, repay, close.\n * Pattern mirrors `ethenaStakeMultisign.ts` (sequential txs, `proposalTxParams`, `batchMeta`).\n */\nimport {\n type Address,\n createPublicClient,\n decodeFunctionData,\n defineChain,\n encodeFunctionData,\n getAddress,\n http,\n parseAbi,\n parseUnits,\n} from 'viem'\nimport { buildEvmMultisignBatch } from '../../../chains/evm/buildBatch.js'\nimport type { EvmTxStep } from '../../../chains/evm/types.js'\nimport type { KeyGenSubsetForPermit } from '../../../core/types.js'\nimport {\n SKY_ETHEREUM_MAINNET,\n SKY_LOCKSTAKE_DEFAULT_FARM_MAINNET,\n SKY_LOCKSTAKE_DEFAULT_FARM_REF,\n SKY_LOCKSTAKE_ENGINE_MAINNET,\n SKY_LS_SKY_ERC20_MAINNET,\n USDS_ETHEREUM_MAINNET,\n} from './mainnet.js'\n\nexport const SKY_LOCKSTAKE_MULTICALL_FALLBACK_GAS = 5_000_000n\n\nexport type SkyMultisignBatchStep = {\n to: Address\n data: `0x${string}`\n value: bigint\n meta: Record<string, unknown>\n}\n\nexport type SkyMultisignChainDetailRow = {\n legacy?: boolean\n gasLimit?: number\n gasMultiplier?: number\n gasPrice?: number\n baseFee?: number\n priorityFee?: number\n baseFeeMultiplier?: number\n}\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\nconst engineAbi = parseAbi([\n 'function multicall(bytes[] data) returns (bytes[])',\n 'function open(uint256 index) returns (address)',\n 'function selectFarm(address owner, uint256 index, address farm, uint16 ref)',\n /** Canonical SKY collateral (pulls ERC-20 `sky()`, then `mkrSky.skyToMkr`). Legacy `lock` pulls MKR only. */\n 'function lockSky(address owner, uint256 index, uint256 skyWad, uint16 ref)',\n 'function draw(address owner, uint256 index, address to, uint256 wad)',\n 'function wipe(address owner, uint256 index, uint256 wad)',\n 'function wipeAll(address owner, uint256 index) returns (uint256 wad)',\n /** Returns withdrawn SKY; legacy `free` returns MKR after fee-burn. */\n 'function freeSky(address owner, uint256 index, address to, uint256 skyWad) returns (uint256 skyFreed)',\n 'function getReward(address owner, uint256 index, address farm, address to) returns (uint256)',\n 'function ownerUrnsCount(address usr) view returns (uint256)',\n 'function ownerUrns(address owner, uint256 index) view returns (address urn)',\n 'function urnFarms(address urn) view returns (address farm)',\n 'function farms(address farm) view returns (uint8)',\n])\n\nconst stakingRewardsFarmReadAbi = parseAbi([\n 'function stakingToken() view returns (address)',\n 'function rewardsToken() view returns (address)',\n])\n\ntype ChainRow = SkyMultisignChainDetailRow\n\nexport async function appendSerializedSkyBatch(args: {\n steps: SkyMultisignBatchStep[]\n publicClient: ReturnType<typeof createPublicClient>\n executor: Address\n chainId: number\n rpcUrl: string\n chainDetail: ChainRow\n useCustomGas: boolean\n customGasChainDetails?: Record<string, unknown> | null\n purposePrefix: string\n keyGen: KeyGenSubsetForPermit\n destinationChainID: string\n}): Promise<{ bodyForSign: Record<string, unknown>; messageToSign: string }> {\n const evmSteps: EvmTxStep[] = args.steps.map((s) => ({\n to: s.to,\n data: s.data,\n value: s.value,\n fallbackGas: SKY_LOCKSTAKE_MULTICALL_FALLBACK_GAS,\n }))\n const firstDataNo0x = evmSteps[0]!.data.startsWith('0x') ? evmSteps[0]!.data.slice(2) : evmSteps[0]!.data\n\n return buildEvmMultisignBatch({\n context: {\n chainCategory: 'evm',\n keyGen: args.keyGen,\n purposeText: '',\n chainId: args.chainId,\n rpcUrl: args.rpcUrl,\n executorAddress: args.executor,\n chainDetail: args.chainDetail,\n useCustomGas: args.useCustomGas,\n customGasChainDetails: args.customGasChainDetails,\n },\n steps: evmSteps,\n purposeSuffix: args.purposePrefix,\n firstMsgRawNo0x: firstDataNo0x,\n destinationAddress: args.steps[0]!.to,\n buildBatchMeta: ({ index }) => args.steps[index]!.meta,\n })\n}\n\nexport async function buildSkyLockstakeStakePositionBatch(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\n purposeText: string\n /** Human SKY amount */\n amountHuman: string\n farm?: Address\n farmRef?: number\n /**\n * Add SKY to this urn (multicall omits `open`). Must be `< ownerUrnsCount`.\n * If omitted and `ownerUrnsCount > 0`, defaults to urn `0` (single-position UX). If omitted and count is 0, opens urn `0`.\n */\n existingUrnIndex?: bigint\n}): Promise<{ bodyForSign: Record<string, unknown>; messageToSign: string }> {\n if (args.chainId !== 1) throw new Error('Sky LockStake is only supported on Ethereum mainnet (chain id 1).')\n const rpc = args.rpcUrl.trim()\n const ch = defineChain({\n id: 1,\n name: 'Ethereum',\n nativeCurrency: { decimals: 18, name: 'Ether', symbol: 'ETH' },\n rpcUrls: { default: { http: [rpc] } },\n })\n const publicClient = createPublicClient({ chain: ch, transport: http(rpc) })\n const executor = getAddress(args.executorAddress)\n const sky = getAddress(SKY_ETHEREUM_MAINNET)\n const engine = getAddress(SKY_LOCKSTAKE_ENGINE_MAINNET)\n const farm = getAddress(args.farm ?? SKY_LOCKSTAKE_DEFAULT_FARM_MAINNET)\n const ref = Number(args.farmRef ?? SKY_LOCKSTAKE_DEFAULT_FARM_REF)\n if (!Number.isFinite(ref) || ref < 0 || ref > 65535) throw new Error('Invalid farm ref.')\n\n const dec = await publicClient.readContract({\n address: sky,\n abi: erc20AllowanceAbi,\n functionName: 'decimals',\n })\n const amountWei = parseUnits(args.amountHuman, Number(dec))\n if (amountWei === 0n) throw new Error('Amount is zero.')\n\n const urnCount = await publicClient.readContract({\n address: engine,\n abi: engineAbi,\n functionName: 'ownerUrnsCount',\n args: [executor],\n })\n let effectiveExistingUrnIndex = args.existingUrnIndex\n if (effectiveExistingUrnIndex === undefined && urnCount > 0n) {\n effectiveExistingUrnIndex = 0n\n }\n const isAddCollateral = effectiveExistingUrnIndex !== undefined\n const index: bigint = isAddCollateral ? effectiveExistingUrnIndex! : urnCount\n let addCollateralUrn: Address | null = null\n if (isAddCollateral) {\n if (index < 0n || index >= urnCount) {\n throw new Error('Sky LockStake: urn index out of range for this key (use Staking tab if you have no position yet).')\n }\n const urnAddr = await publicClient.readContract({\n address: engine,\n abi: engineAbi,\n functionName: 'ownerUrns',\n args: [executor, index],\n })\n if (!urnAddr || getAddress(urnAddr) === '0x0000000000000000000000000000000000000000') {\n throw new Error('Sky LockStake: that urn does not exist on-chain.')\n }\n addCollateralUrn = getAddress(urnAddr)\n }\n\n const lsSky = getAddress(SKY_LS_SKY_ERC20_MAINNET)\n const farmStatus = await publicClient.readContract({\n address: engine,\n abi: engineAbi,\n functionName: 'farms',\n args: [farm],\n })\n if (Number(farmStatus) !== 1) {\n throw new Error(\n `Sky LockStake: farm ${farm} is not ACTIVE in the engine (on-chain status ${farmStatus}). Choose another farm or wait for governance.`,\n )\n }\n\n let farmStakeToken: Address\n try {\n farmStakeToken = getAddress(\n await publicClient.readContract({\n address: farm,\n abi: stakingRewardsFarmReadAbi,\n functionName: 'stakingToken',\n }),\n )\n } catch {\n throw new Error(`Sky LockStake: could not read stakingToken() from farm ${farm}.`)\n }\n\n const farmAcceptsLsSky = farmStakeToken.toLowerCase() === lsSky.toLowerCase()\n /** Default farm can be ACTIVE but stake legacy lsMKR; engine mints lsSKY into the urn — `selectFarm`+`lockSky` then reverts inside the farm. */\n const skipSelectFarm = !farmAcceptsLsSky\n\n const openCall = encodeFunctionData({\n abi: engineAbi,\n functionName: 'open',\n args: [index],\n })\n const selectFarmCall = encodeFunctionData({\n abi: engineAbi,\n functionName: 'selectFarm',\n args: [executor, index, farm, ref],\n })\n const lockSkyCall = encodeFunctionData({\n abi: engineAbi,\n functionName: 'lockSky',\n args: [executor, index, amountWei, ref],\n })\n\n let innerCalls: `0x${string}`[]\n let innerLabels: string[]\n\n if (!isAddCollateral) {\n innerCalls = skipSelectFarm\n ? [openCall, lockSkyCall]\n : [openCall, selectFarmCall, lockSkyCall]\n innerLabels = skipSelectFarm ? ['open(index)', 'lockSky'] : ['open(index)', 'selectFarm', 'lockSky']\n } else {\n const currentFarm = await publicClient.readContract({\n address: engine,\n abi: engineAbi,\n functionName: 'urnFarms',\n args: [addCollateralUrn!],\n })\n const targetFarm = getAddress(farm)\n const currentNorm = getAddress(currentFarm)\n const sameFarmAsTarget = currentNorm.toLowerCase() === targetFarm.toLowerCase()\n\n if (skipSelectFarm || sameFarmAsTarget) {\n innerCalls = [lockSkyCall]\n innerLabels = ['lockSky']\n } else {\n innerCalls = [selectFarmCall, lockSkyCall]\n innerLabels = ['selectFarm', 'lockSky']\n }\n }\n\n const last = innerCalls[innerCalls.length - 1]!\n const lockDecoded = decodeFunctionData({ abi: engineAbi, data: last })\n if (lockDecoded.functionName !== 'lockSky' || lockDecoded.args[2] !== amountWei || lockDecoded.args[3] !== ref) {\n throw new Error('Sky LockStake: internal multicall encoding mismatch (lockSky tail); consult support.')\n }\n for (let i = 0; i < innerCalls.length - 1; i++) {\n const d = decodeFunctionData({ abi: engineAbi, data: innerCalls[i]! })\n if (d.functionName === 'open' && d.args[0] !== index) {\n throw new Error('Sky LockStake: internal multicall encoding mismatch (open index); consult support.')\n }\n if (d.functionName === 'selectFarm') {\n if (d.args[3] !== ref || d.args[2] !== getAddress(farm) || d.args[1] !== index || d.args[0] !== executor) {\n throw new Error('Sky LockStake: internal multicall encoding mismatch (selectFarm); consult support.')\n }\n }\n }\n const multicallData = encodeFunctionData({\n abi: engineAbi,\n functionName: 'multicall',\n args: [innerCalls],\n })\n\n const steps: SkyMultisignBatchStep[] = []\n const currentAllowance = await publicClient.readContract({\n address: sky,\n abi: erc20AllowanceAbi,\n functionName: 'allowance',\n args: [executor, engine],\n })\n if (currentAllowance < amountWei) {\n if (currentAllowance > 0n) {\n steps.push({\n to: sky,\n data: encodeFunctionData({\n abi: erc20ApproveAbi,\n functionName: 'approve',\n args: [engine, 0n],\n }),\n value: 0n,\n meta: {\n destinationAddress: sky,\n signatureText: JSON.stringify({\n kind: 'Sky',\n name: 'ERC20.approve',\n function: 'approve(address,uint256)',\n spender: engine,\n note: 'Reset SKY allowance before new approval.',\n }),\n evm: { type: 'sky_lockstake_erc20_approve', version: 1, chainId: '1' },\n sky: { step: 'approve_sky_reset', engine },\n },\n })\n }\n steps.push({\n to: sky,\n data: encodeFunctionData({\n abi: erc20ApproveAbi,\n functionName: 'approve',\n args: [engine, amountWei],\n }),\n value: 0n,\n meta: {\n destinationAddress: sky,\n signatureText: JSON.stringify({\n kind: 'Sky',\n name: 'ERC20.approve',\n function: 'approve(address,uint256)',\n spender: engine,\n amountWei: amountWei.toString(),\n amountHuman: args.amountHuman,\n decimals: Number(dec),\n }),\n evm: { type: 'sky_lockstake_erc20_approve', version: 1, chainId: '1' },\n sky: { step: 'approve_sky', engine },\n },\n })\n }\n\n steps.push({\n to: engine,\n data: multicallData,\n value: 0n,\n meta: {\n destinationAddress: engine,\n signatureText: JSON.stringify({\n kind: 'Sky',\n name: 'LockstakeEngine.multicall',\n inner: innerLabels,\n index: index.toString(),\n farm,\n ref,\n amountWei: amountWei.toString(),\n amountHuman: args.amountHuman,\n borrowOnlySkippedRewardsFarm: skipSelectFarm,\n farmStakingToken: farmStakeToken,\n expectedEngineFarmStakingToken: lsSky,\n addCollateralToExistingUrn: isAddCollateral,\n }),\n evm: { type: 'sky_lockstake_engine_multicall_stake', version: 1, chainId: '1' },\n sky: {\n step: isAddCollateral\n ? innerLabels.join('_')\n : skipSelectFarm\n ? 'open_lockSky_borrow_only'\n : 'open_selectFarm_lockSky',\n engine,\n farm,\n skipSelectFarm,\n addCollateral: isAddCollateral,\n },\n },\n })\n\n const purposePrefix = (() => {\n const t = args.purposeText.trim()\n const borrowNote = skipSelectFarm\n ? 'No rewards farm in this batch: default farm stakingToken does not match lsSKY, so we only open + lockSky (SKY collateral) for borrow (you can select a compatible farm later from the protocol UI when one is ACTIVE).'\n : ''\n if (isAddCollateral) {\n const core =\n steps.length > 1\n ? `Sky LockStake: ${steps.length}-tx batch — approve SKY, then multicall ${innerLabels.join(' + ')} on urn index ${index.toString()}.`\n : `Sky LockStake: multicall ${innerLabels.join(' + ')} on urn index ${index.toString()} (allowance already set).`\n return (t ? `${t}\\n\\n` : '') + core\n }\n const suffixCore = skipSelectFarm\n ? steps.length > 1\n ? `Sky LockStake: ${steps.length}-tx batch — approve SKY, then multicall open + lockSky (${borrowNote})`\n : `Sky LockStake: multicall open + lockSky (${borrowNote})`\n : steps.length > 1\n ? `Sky LockStake: ${steps.length}-tx batch — approve SKY, then open + farm + lockSky on Ethereum.`\n : `Sky LockStake: multicall open + farm + lockSky on Ethereum (allowance already set).`\n return (t ? `${t}\\n\\n` : '') + suffixCore\n })()\n\n return appendSerializedSkyBatch({\n steps,\n publicClient,\n executor,\n chainId: 1,\n rpcUrl: rpc,\n chainDetail: args.chainDetail,\n useCustomGas: args.useCustomGas,\n customGasChainDetails: args.customGasChainDetails,\n purposePrefix,\n keyGen: args.keyGen,\n destinationChainID: '1',\n })\n}\n\nexport async function buildSkyLockstakeDrawBatch(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\n purposeText: string\n urnIndex: bigint\n /** Human USDS */\n amountHuman: string\n to?: Address\n}): Promise<{ bodyForSign: Record<string, unknown>; messageToSign: string }> {\n if (args.chainId !== 1) throw new Error('Sky LockStake is only supported on Ethereum mainnet (chain id 1).')\n const rpc = args.rpcUrl.trim()\n const ch = defineChain({\n id: 1,\n name: 'Ethereum',\n nativeCurrency: { decimals: 18, name: 'Ether', symbol: 'ETH' },\n rpcUrls: { default: { http: [rpc] } },\n })\n const publicClient = createPublicClient({ chain: ch, transport: http(rpc) })\n const executor = getAddress(args.executorAddress)\n const engine = getAddress(SKY_LOCKSTAKE_ENGINE_MAINNET)\n const usds = getAddress(USDS_ETHEREUM_MAINNET)\n const dec = await publicClient.readContract({\n address: usds,\n abi: erc20AllowanceAbi,\n functionName: 'decimals',\n })\n const wad = parseUnits(args.amountHuman, Number(dec))\n if (wad === 0n) throw new Error('Borrow amount is zero.')\n const to = getAddress(args.to ?? executor)\n\n const data = encodeFunctionData({\n abi: engineAbi,\n functionName: 'draw',\n args: [executor, args.urnIndex, to, wad],\n })\n const steps: SkyMultisignBatchStep[] = [\n {\n to: engine,\n data,\n value: 0n,\n meta: {\n destinationAddress: engine,\n signatureText: JSON.stringify({\n kind: 'Sky',\n name: 'LockstakeEngine.draw',\n function: 'draw(address owner,uint256 index,address to,uint256 wad)',\n urnIndex: args.urnIndex.toString(),\n to,\n amountWei: wad.toString(),\n amountHuman: args.amountHuman,\n }),\n evm: { type: 'sky_lockstake_draw', version: 1, chainId: '1' },\n sky: { step: 'draw', engine },\n },\n },\n ]\n const purposePrefix = (() => {\n const t = args.purposeText.trim()\n const suffix = 'Sky LockStake: borrow USDS against staked SKY (draw).'\n return (t ? `${t}\\n\\n` : '') + suffix\n })()\n\n return appendSerializedSkyBatch({\n steps,\n publicClient,\n executor,\n chainId: 1,\n rpcUrl: rpc,\n chainDetail: args.chainDetail,\n useCustomGas: args.useCustomGas,\n customGasChainDetails: args.customGasChainDetails,\n purposePrefix,\n keyGen: args.keyGen,\n destinationChainID: '1',\n })\n}\n\nexport async function buildSkyLockstakeGetRewardBatch(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\n purposeText: string\n urnIndex: bigint\n /** Urn’s selected staking rewards farm (must be non-zero). */\n farmAddress: Address\n /** Recipient of claimed ERC-20 rewards; defaults to executor. */\n rewardRecipient?: Address\n}): Promise<{ bodyForSign: Record<string, unknown>; messageToSign: string; rewardToken: Address }> {\n if (args.chainId !== 1) throw new Error('Sky LockStake is only supported on Ethereum mainnet (chain id 1).')\n const rpc = args.rpcUrl.trim()\n const ch = defineChain({\n id: 1,\n name: 'Ethereum',\n nativeCurrency: { decimals: 18, name: 'Ether', symbol: 'ETH' },\n rpcUrls: { default: { http: [rpc] } },\n })\n const publicClient = createPublicClient({ chain: ch, transport: http(rpc) })\n const executor = getAddress(args.executorAddress)\n const engine = getAddress(SKY_LOCKSTAKE_ENGINE_MAINNET)\n const farm = getAddress(args.farmAddress)\n const zero = '0x0000000000000000000000000000000000000000' as Address\n if (farm.toLowerCase() === zero.toLowerCase()) {\n throw new Error(\n 'Sky LockStake: this urn has no rewards farm selected — stake SKY with a farm first, then rewards accrue there.',\n )\n }\n let rewardToken: Address\n try {\n rewardToken = getAddress(\n await publicClient.readContract({\n address: farm,\n abi: stakingRewardsFarmReadAbi,\n functionName: 'rewardsToken',\n }),\n )\n } catch {\n throw new Error(`Sky LockStake: could not read rewardsToken() from farm ${farm}.`)\n }\n const to = getAddress(args.rewardRecipient ?? executor)\n\n const data = encodeFunctionData({\n abi: engineAbi,\n functionName: 'getReward',\n args: [executor, args.urnIndex, farm, to],\n })\n const steps: SkyMultisignBatchStep[] = [\n {\n to: engine,\n data,\n value: 0n,\n meta: {\n destinationAddress: engine,\n signatureText: JSON.stringify({\n kind: 'Sky',\n name: 'LockstakeEngine.getReward',\n function: 'getReward(address owner,uint256 index,address farm,address to)',\n urnIndex: args.urnIndex.toString(),\n farm,\n rewardRecipient: to,\n farmRewardsToken: rewardToken,\n }),\n evm: { type: 'sky_lockstake_get_reward', version: 1, chainId: '1' },\n sky: { step: 'get_reward', engine, farm, rewardToken },\n },\n },\n ]\n const purposePrefix = (() => {\n const t = args.purposeText.trim()\n const suffix =\n 'Sky LockStake: claim staking rewards from the selected farm (getReward → ERC-20 sent to rewardRecipient).'\n return (t ? `${t}\\n\\n` : '') + suffix\n })()\n\n const built = await appendSerializedSkyBatch({\n steps,\n publicClient,\n executor,\n chainId: 1,\n rpcUrl: rpc,\n chainDetail: args.chainDetail,\n useCustomGas: args.useCustomGas,\n customGasChainDetails: args.customGasChainDetails,\n purposePrefix,\n keyGen: args.keyGen,\n destinationChainID: '1',\n })\n return { ...built, rewardToken }\n}\n\nexport async function buildSkyLockstakeWipeBatch(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\n purposeText: string\n urnIndex: bigint\n wipeAll: boolean\n amountHuman?: string\n}): Promise<{ bodyForSign: Record<string, unknown>; messageToSign: string }> {\n if (args.chainId !== 1) throw new Error('Sky LockStake is only supported on Ethereum mainnet (chain id 1).')\n const rpc = args.rpcUrl.trim()\n const ch = defineChain({\n id: 1,\n name: 'Ethereum',\n nativeCurrency: { decimals: 18, name: 'Ether', symbol: 'ETH' },\n rpcUrls: { default: { http: [rpc] } },\n })\n const publicClient = createPublicClient({ chain: ch, transport: http(rpc) })\n const executor = getAddress(args.executorAddress)\n const engine = getAddress(SKY_LOCKSTAKE_ENGINE_MAINNET)\n const usds = getAddress(USDS_ETHEREUM_MAINNET)\n\n const steps: SkyMultisignBatchStep[] = []\n\n if (!args.wipeAll) {\n const ah = (args.amountHuman ?? '').trim()\n if (!ah) throw new Error('Repay amount required.')\n const dec = await publicClient.readContract({\n address: usds,\n abi: erc20AllowanceAbi,\n functionName: 'decimals',\n })\n const repayWei = parseUnits(ah, Number(dec))\n if (repayWei === 0n) throw new Error('Repay amount is zero.')\n\n const currentAllowance = await publicClient.readContract({\n address: usds,\n abi: erc20AllowanceAbi,\n functionName: 'allowance',\n args: [executor, engine],\n })\n if (currentAllowance < repayWei) {\n if (currentAllowance > 0n) {\n steps.push({\n to: usds,\n data: encodeFunctionData({\n abi: erc20ApproveAbi,\n functionName: 'approve',\n args: [engine, 0n],\n }),\n value: 0n,\n meta: {\n destinationAddress: usds,\n signatureText: JSON.stringify({\n kind: 'Sky',\n name: 'ERC20.approve USDS reset',\n spender: engine,\n }),\n evm: { type: 'sky_lockstake_usds_approve', version: 1, chainId: '1' },\n sky: { step: 'approve_usds_reset', engine },\n },\n })\n }\n steps.push({\n to: usds,\n data: encodeFunctionData({\n abi: erc20ApproveAbi,\n functionName: 'approve',\n args: [engine, repayWei],\n }),\n value: 0n,\n meta: {\n destinationAddress: usds,\n signatureText: JSON.stringify({\n kind: 'Sky',\n name: 'ERC20.approve USDS',\n spender: engine,\n amountWei: repayWei.toString(),\n }),\n evm: { type: 'sky_lockstake_usds_approve', version: 1, chainId: '1' },\n sky: { step: 'approve_usds', engine },\n },\n })\n }\n steps.push({\n to: engine,\n data: encodeFunctionData({\n abi: engineAbi,\n functionName: 'wipe',\n args: [executor, args.urnIndex, repayWei],\n }),\n value: 0n,\n meta: {\n destinationAddress: engine,\n signatureText: JSON.stringify({\n kind: 'Sky',\n name: 'LockstakeEngine.wipe',\n urnIndex: args.urnIndex.toString(),\n amountWei: repayWei.toString(),\n }),\n evm: { type: 'sky_lockstake_wipe', version: 1, chainId: '1' },\n sky: { step: 'wipe', engine },\n },\n })\n } else {\n const maxApproval = 2n ** 256n - 1n\n steps.push({\n to: usds,\n data: encodeFunctionData({\n abi: erc20ApproveAbi,\n functionName: 'approve',\n args: [engine, maxApproval],\n }),\n value: 0n,\n meta: {\n destinationAddress: usds,\n signatureText: JSON.stringify({\n kind: 'Sky',\n name: 'ERC20.approve USDS (max)',\n spender: engine,\n note: 'Allows wipeAll to pull the exact burn amount computed on-chain.',\n }),\n evm: { type: 'sky_lockstake_usds_approve', version: 1, chainId: '1' },\n sky: { step: 'approve_usds_max', engine },\n },\n })\n steps.push({\n to: engine,\n data: encodeFunctionData({\n abi: engineAbi,\n functionName: 'wipeAll',\n args: [executor, args.urnIndex],\n }),\n value: 0n,\n meta: {\n destinationAddress: engine,\n signatureText: JSON.stringify({\n kind: 'Sky',\n name: 'LockstakeEngine.wipeAll',\n urnIndex: args.urnIndex.toString(),\n }),\n evm: { type: 'sky_lockstake_wipe_all', version: 1, chainId: '1' },\n sky: { step: 'wipeAll', engine },\n },\n })\n }\n\n const purposePrefix = (() => {\n const t = args.purposeText.trim()\n const suffix = args.wipeAll\n ? `Sky LockStake: repay all USDS debt (wipeAll).`\n : `Sky LockStake: repay USDS (wipe).`\n return (t ? `${t}\\n\\n` : '') + suffix\n })()\n\n return appendSerializedSkyBatch({\n steps,\n publicClient,\n executor,\n chainId: 1,\n rpcUrl: rpc,\n chainDetail: args.chainDetail,\n useCustomGas: args.useCustomGas,\n customGasChainDetails: args.customGasChainDetails,\n purposePrefix,\n keyGen: args.keyGen,\n destinationChainID: '1',\n })\n}\n\nexport async function buildSkyLockstakeCloseBatch(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\n purposeText: string\n urnIndex: bigint\n inkWei: bigint\n skyRecipient?: Address\n}): Promise<{ bodyForSign: Record<string, unknown>; messageToSign: string }> {\n if (args.chainId !== 1) throw new Error('Sky LockStake is only supported on Ethereum mainnet (chain id 1).')\n if (args.inkWei === 0n) throw new Error('Nothing to free.')\n const rpc = args.rpcUrl.trim()\n const ch = defineChain({\n id: 1,\n name: 'Ethereum',\n nativeCurrency: { decimals: 18, name: 'Ether', symbol: 'ETH' },\n rpcUrls: { default: { http: [rpc] } },\n })\n const publicClient = createPublicClient({ chain: ch, transport: http(rpc) })\n const executor = getAddress(args.executorAddress)\n const engine = getAddress(SKY_LOCKSTAKE_ENGINE_MAINNET)\n const usds = getAddress(USDS_ETHEREUM_MAINNET)\n const toSky = getAddress(args.skyRecipient ?? executor)\n\n const maxApproval = 2n ** 256n - 1n\n const steps: SkyMultisignBatchStep[] = [\n {\n to: usds,\n data: encodeFunctionData({\n abi: erc20ApproveAbi,\n functionName: 'approve',\n args: [engine, maxApproval],\n }),\n value: 0n,\n meta: {\n destinationAddress: usds,\n signatureText: JSON.stringify({\n kind: 'Sky',\n name: 'ERC20.approve USDS (max)',\n spender: engine,\n note: 'Close position: wipeAll then free SKY.',\n }),\n evm: { type: 'sky_lockstake_usds_approve', version: 1, chainId: '1' },\n sky: { step: 'approve_usds_max', engine },\n },\n },\n {\n to: engine,\n data: encodeFunctionData({\n abi: engineAbi,\n functionName: 'wipeAll',\n args: [executor, args.urnIndex],\n }),\n value: 0n,\n meta: {\n destinationAddress: engine,\n signatureText: JSON.stringify({\n kind: 'Sky',\n name: 'LockstakeEngine.wipeAll',\n urnIndex: args.urnIndex.toString(),\n }),\n evm: { type: 'sky_lockstake_wipe_all', version: 1, chainId: '1' },\n sky: { step: 'wipeAll', engine },\n },\n },\n {\n to: engine,\n data: encodeFunctionData({\n abi: engineAbi,\n functionName: 'freeSky',\n args: [executor, args.urnIndex, toSky, args.inkWei],\n }),\n value: 0n,\n meta: {\n destinationAddress: engine,\n signatureText: JSON.stringify({\n kind: 'Sky',\n name: 'LockstakeEngine.freeSky',\n urnIndex: args.urnIndex.toString(),\n to: toSky,\n inkWei: args.inkWei.toString(),\n note: 'Exit fee may reduce SKY received.',\n }),\n evm: { type: 'sky_lockstake_free_sky', version: 1, chainId: '1' },\n sky: { step: 'freeSky', engine },\n },\n },\n ]\n\n const purposePrefix = (() => {\n const t = args.purposeText.trim()\n const suffix = 'Sky LockStake: close position — wipeAll debt, free SKY collateral.'\n return (t ? `${t}\\n\\n` : '') + suffix\n })()\n\n return appendSerializedSkyBatch({\n steps,\n publicClient,\n executor,\n chainId: 1,\n rpcUrl: rpc,\n chainDetail: args.chainDetail,\n useCustomGas: args.useCustomGas,\n customGasChainDetails: args.customGasChainDetails,\n purposePrefix,\n keyGen: args.keyGen,\n destinationChainID: '1',\n })\n}\n\n/** Sky batch steps whose `estimateGas` reverts without prior txs in-flight (approve → engine call isolation). */\nconst SKY_FRAGILE_ETH_ESTIMATE_GAS_BATCH_EVMS = new Set([\n 'sky_lockstake_engine_multicall_stake',\n 'sky_lockstake_wipe',\n 'sky_lockstake_wipe_all',\n 'sky_susds_deposit',\n])\n\nfunction parseSkyExtraJsonObject(detail: Record<string, unknown> | null | undefined): Record<string, unknown> | null {\n if (!detail) return null\n const raw = detail.ExtraJSON ?? detail.extraJSON\n if (raw == null) return null\n if (typeof raw === 'object' && !Array.isArray(raw)) return raw as Record<string, unknown>\n if (typeof raw === 'string' && raw.trim()) {\n try {\n const p = JSON.parse(raw) as unknown\n if (p && typeof p === 'object' && !Array.isArray(p)) return p as Record<string, unknown>\n } catch {\n return null\n }\n }\n return null\n}\n\nfunction parseOptionalSkyGasLimitString(raw: string | number | undefined): bigint | null {\n if (raw == null) return null\n const s = String(raw).trim()\n if (!s) return null\n try {\n if (/^0x[0-9a-fA-F]+$/.test(s)) return BigInt(s)\n return BigInt(s)\n } catch {\n return null\n }\n}\n\n/**\n * True when `extraJSON.batchMeta[i].evm.type` pulls ERC-20 inside the same batched approve flow,\n * so `eth_estimateGas` on this step alone skips prior approvals (similar to Ethena sUSDe deposit).\n */\nexport function isSkyLockstakeIsolationEstimateGasFragileBatchStep(\n detail: Record<string, unknown> | null | undefined,\n batchIndex: number,\n): boolean {\n if (batchIndex < 0) return false\n const ex = parseSkyExtraJsonObject(detail)\n const bm = ex?.batchMeta\n if (!Array.isArray(bm) || !bm[batchIndex] || typeof bm[batchIndex] !== 'object' || Array.isArray(bm[batchIndex])) {\n return false\n }\n const evm = (bm[batchIndex] as Record<string, unknown>).evm as Record<string, unknown> | undefined\n return SKY_FRAGILE_ETH_ESTIMATE_GAS_BATCH_EVMS.has(String(evm?.type ?? ''))\n}\n\n/** Prefer `proposalTxParams[i].gasLimit` from proposal time — isolated RPC estimate often reverts. */\nexport function resolveSkyLockstakeBatchStepGasFromSignRequest(\n detail: Record<string, unknown> | null | undefined,\n batchIndex: number,\n): bigint | null {\n if (!detail || batchIndex < 0) return null\n const propBatch = (detail.proposal_tx_params ?? detail.proposalTxParams ?? detail.ProposalTxParams) as unknown\n if (!Array.isArray(propBatch) || propBatch.length <= batchIndex) return null\n const row = propBatch[batchIndex]\n if (!row || typeof row !== 'object' || Array.isArray(row)) return null\n return parseOptionalSkyGasLimitString((row as Record<string, unknown>).gasLimit as string | number | undefined)\n}\n","/**\n * Sky sUSDS — ERC-4626 deposit (USDS → mint shares) and redeem (burn shares → USDS).\n * Serialization matches {@link appendSerializedSkyBatch} from `skyLockstakeMultisign.ts`.\n */\nimport {\n type Address,\n createPublicClient,\n defineChain,\n encodeFunctionData,\n getAddress,\n http,\n parseAbi,\n parseUnits,\n} from 'viem'\nimport type { KeyGenSubsetForPermit } from '../../../core/types.js'\nimport {\n appendSerializedSkyBatch,\n type SkyMultisignBatchStep,\n type SkyMultisignChainDetailRow,\n} from './lockstakeMultisign.js'\nimport { SUSDS_VAULT_ERC4626_MAINNET, USDS_ETHEREUM_MAINNET } from './mainnet.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\nconst susdsVaultAbi = parseAbi([\n 'function asset() view returns (address)',\n 'function decimals() view returns (uint8)',\n 'function deposit(uint256 assets, address receiver) returns (uint256 shares)',\n 'function redeem(uint256 shares, address receiver, address owner) returns (uint256 assets)',\n])\n\nexport async function buildSkySusdsRedeemToUsdsBatch(args: {\n keyGen: KeyGenSubsetForPermit\n chainId: number\n rpcUrl: string\n chainDetail: SkyMultisignChainDetailRow\n useCustomGas: boolean\n customGasChainDetails?: Record<string, unknown> | null\n executorAddress: Address\n purposeText: string\n /** Human sUSDS (vault share) amount to redeem */\n sharesHuman: string\n /** Address receiving USDS from redeem (defaults to executor). */\n receiver?: Address\n}): Promise<{ bodyForSign: Record<string, unknown>; messageToSign: string }> {\n if (args.chainId !== 1) throw new Error('Sky sUSDS redeem is only supported on Ethereum mainnet (chain id 1).')\n const rpc = args.rpcUrl.trim()\n const vault = getAddress(SUSDS_VAULT_ERC4626_MAINNET)\n const usdsCanonical = getAddress(USDS_ETHEREUM_MAINNET)\n const ch = defineChain({\n id: 1,\n name: 'Ethereum',\n nativeCurrency: { decimals: 18, name: 'Ether', symbol: 'ETH' },\n rpcUrls: { default: { http: [rpc] } },\n })\n const publicClient = createPublicClient({ chain: ch, transport: http(rpc) })\n const executor = getAddress(args.executorAddress)\n const receiver = getAddress(args.receiver ?? executor)\n\n const underlying = await publicClient.readContract({\n address: vault,\n abi: susdsVaultAbi,\n functionName: 'asset',\n })\n if (getAddress(underlying).toLowerCase() !== usdsCanonical.toLowerCase()) {\n throw new Error('sUSDS vault underlying does not match canonical USDS on Ethereum.')\n }\n\n const dec = await publicClient.readContract({\n address: vault,\n abi: susdsVaultAbi,\n functionName: 'decimals',\n })\n const sharesWei = parseUnits(args.sharesHuman, Number(dec))\n if (sharesWei === 0n) throw new Error('Redeem amount is zero.')\n\n const data = encodeFunctionData({\n abi: susdsVaultAbi,\n functionName: 'redeem',\n args: [sharesWei, receiver, executor],\n })\n\n const steps: SkyMultisignBatchStep[] = [\n {\n to: vault,\n data,\n value: 0n,\n meta: {\n destinationAddress: vault,\n signatureText: JSON.stringify({\n kind: 'Sky',\n name: 'sUSDS (ERC-4626).redeem',\n function: 'redeem(uint256 shares, address receiver, address owner)',\n sharesWei: sharesWei.toString(),\n sharesHuman: args.sharesHuman,\n receiver,\n owner: executor,\n vault,\n underlying: usdsCanonical,\n }),\n evm: { type: 'sky_susds_redeem', version: 1, chainId: '1' },\n sky: { step: 'susds_redeem', vault },\n },\n },\n ]\n\n const purposePrefix = (() => {\n const t = args.purposeText.trim()\n const suffix =\n 'Sky sUSDS: redeem Savings USDS shares to USDS via ERC-4626 redeem (1 tx).'\n return (t ? `${t}\\n\\n` : '') + suffix\n })()\n\n return appendSerializedSkyBatch({\n steps,\n publicClient,\n executor,\n chainId: 1,\n rpcUrl: rpc,\n chainDetail: args.chainDetail,\n useCustomGas: args.useCustomGas,\n customGasChainDetails: args.customGasChainDetails,\n purposePrefix,\n keyGen: args.keyGen,\n destinationChainID: '1',\n })\n}\n\nexport async function buildSkySusdsDepositFromUsdsBatch(args: {\n keyGen: KeyGenSubsetForPermit\n chainId: number\n rpcUrl: string\n chainDetail: SkyMultisignChainDetailRow\n useCustomGas: boolean\n customGasChainDetails?: Record<string, unknown> | null\n executorAddress: Address\n purposeText: string\n /** Human USDS amount to deposit into the vault. */\n assetsHuman: string\n}): Promise<{ bodyForSign: Record<string, unknown>; messageToSign: string }> {\n if (args.chainId !== 1) throw new Error('Sky sUSDS deposit is only supported on Ethereum mainnet (chain id 1).')\n const rpc = args.rpcUrl.trim()\n const vault = getAddress(SUSDS_VAULT_ERC4626_MAINNET)\n const usdsCanonical = getAddress(USDS_ETHEREUM_MAINNET)\n const ch = defineChain({\n id: 1,\n name: 'Ethereum',\n nativeCurrency: { decimals: 18, name: 'Ether', symbol: 'ETH' },\n rpcUrls: { default: { http: [rpc] } },\n })\n const publicClient = createPublicClient({ chain: ch, transport: http(rpc) })\n const executor = getAddress(args.executorAddress)\n\n const underlying = await publicClient.readContract({\n address: vault,\n abi: susdsVaultAbi,\n functionName: 'asset',\n })\n if (getAddress(underlying).toLowerCase() !== usdsCanonical.toLowerCase()) {\n throw new Error('sUSDS vault underlying does not match canonical USDS on Ethereum.')\n }\n\n const dec = await publicClient.readContract({\n address: usdsCanonical,\n abi: erc20AllowanceAbi,\n functionName: 'decimals',\n })\n const assetsWei = parseUnits(args.assetsHuman.trim(), Number(dec))\n if (assetsWei === 0n) throw new Error('Deposit amount is zero.')\n\n const steps: SkyMultisignBatchStep[] = []\n\n const currentAllowance = await publicClient.readContract({\n address: usdsCanonical,\n abi: erc20AllowanceAbi,\n functionName: 'allowance',\n args: [executor, vault],\n })\n if (currentAllowance < assetsWei) {\n if (currentAllowance > 0n) {\n steps.push({\n to: usdsCanonical,\n data: encodeFunctionData({\n abi: erc20ApproveAbi,\n functionName: 'approve',\n args: [vault, 0n],\n }),\n value: 0n,\n meta: {\n destinationAddress: usdsCanonical,\n signatureText: JSON.stringify({\n kind: 'Sky',\n name: 'ERC20.approve USDS reset',\n spender: vault,\n }),\n evm: { type: 'sky_susds_usds_approve', version: 1, chainId: '1' },\n sky: { step: 'approve_usds_reset_susds_vault', vault },\n },\n })\n }\n steps.push({\n to: usdsCanonical,\n data: encodeFunctionData({\n abi: erc20ApproveAbi,\n functionName: 'approve',\n args: [vault, assetsWei],\n }),\n value: 0n,\n meta: {\n destinationAddress: usdsCanonical,\n signatureText: JSON.stringify({\n kind: 'Sky',\n name: 'ERC20.approve USDS',\n spender: vault,\n amountWei: assetsWei.toString(),\n }),\n evm: { type: 'sky_susds_usds_approve', version: 1, chainId: '1' },\n sky: { step: 'approve_usds_susds_vault', vault },\n },\n })\n }\n\n const depositData = encodeFunctionData({\n abi: susdsVaultAbi,\n functionName: 'deposit',\n args: [assetsWei, executor],\n })\n steps.push({\n to: vault,\n data: depositData,\n value: 0n,\n meta: {\n destinationAddress: vault,\n signatureText: JSON.stringify({\n kind: 'Sky',\n name: 'sUSDS (ERC-4626).deposit',\n function: 'deposit(uint256 assets, address receiver)',\n assetsWei: assetsWei.toString(),\n assetsHuman: args.assetsHuman.trim(),\n receiver: executor,\n vault,\n underlying: usdsCanonical,\n }),\n evm: { type: 'sky_susds_deposit', version: 1, chainId: '1' },\n sky: { step: 'susds_deposit', vault },\n },\n })\n\n const purposePrefix = (() => {\n const t = args.purposeText.trim()\n const suffix = 'Sky sUSDS: deposit USDS into Savings vault (ERC-4626 deposit → mint shares).'\n return (t ? `${t}\\n\\n` : '') + suffix\n })()\n\n return appendSerializedSkyBatch({\n steps,\n publicClient,\n executor,\n chainId: 1,\n rpcUrl: rpc,\n chainDetail: args.chainDetail,\n useCustomGas: args.useCustomGas,\n customGasChainDetails: args.customGasChainDetails,\n purposePrefix,\n keyGen: args.keyGen,\n destinationChainID: '1',\n })\n}\n","import {\n createPublicClient,\n defineChain,\n formatUnits,\n http,\n parseAbi,\n type Address,\n type PublicClient,\n} from 'viem'\nimport { getAddress } from 'viem'\nimport {\n SKY_LOCKSTAKE_ENGINE_MAINNET,\n SKY_LOCKSTAKE_UI_COLLATERAL_FACTOR,\n SKY_TOKEN_DECIMALS,\n USDS_DECIMALS,\n} from './mainnet.js'\n\nconst RAY = 10n ** 27n\n\nconst engineAbi = parseAbi([\n 'function ownerUrnsCount(address usr) view returns (uint256)',\n 'function ownerUrns(address owner, uint256 index) view returns (address urn)',\n 'function urnFarms(address urn) view returns (address farm)',\n 'function ilk() view returns (bytes32)',\n 'function vat() view returns (address)',\n])\n\nconst vatAbi = parseAbi([\n 'function urns(bytes32 ilk, address urn) view returns (uint256 ink, uint256 art)',\n 'function ilks(bytes32 ilk) view returns (uint256 Art, uint256 rate, uint256 spot, uint256 line, uint256 dust)',\n])\n\nfunction skyClient(rpcUrl: string): PublicClient {\n const rpc = rpcUrl.trim()\n const ch = defineChain({\n id: 1,\n name: 'Ethereum',\n nativeCurrency: { decimals: 18, name: 'Ether', symbol: 'ETH' },\n rpcUrls: { default: { http: [rpc] } },\n })\n return createPublicClient({ chain: ch, transport: http(rpc) })\n}\n\n/** Debt in USDS wei matching `wipeAll` rounding (`_divup(art * rate, RAY)`). */\nexport function skyUsdsDebtWeiFromUrnArt(art: bigint, rate: bigint): bigint {\n if (art === 0n || rate === 0n) return 0n\n return (art * rate + RAY - 1n) / RAY\n}\n\nexport type SkyLockstakePositionRow = {\n index: number\n urn: Address\n inkWei: bigint\n art: bigint\n debtUsdsWei: bigint\n farm: Address\n /** Human-readable SKY locked */\n skyLocked: string\n /** Human-readable USDS debt */\n debtUsds: string\n /**\n * Remaining borrow headroom in USD for UI only: `(SKY locked × SKY/USD × SKY_LOCKSTAKE_UI_COLLATERAL_FACTOR) − debtUSD`.\n * Does not reflect on-chain liquidation price, oracle lag, stability fees, or protocol collateralization rules.\n */\n borrowLimitUsdApprox: number | null\n /** SKY/USD used only for the approximation above (same source as the dialog, e.g. CoinGecko). */\n skyPriceUsd: number | null\n}\n\nexport async function loadSkyLockstakePositions(args: {\n rpcUrl: string\n owner: Address\n skyUsd: number | null\n}): Promise<SkyLockstakePositionRow[]> {\n const client = skyClient(args.rpcUrl)\n const engine = getAddress(SKY_LOCKSTAKE_ENGINE_MAINNET)\n const ilk = await client.readContract({\n address: engine,\n abi: engineAbi,\n functionName: 'ilk',\n })\n const vat = await client.readContract({\n address: engine,\n abi: engineAbi,\n functionName: 'vat',\n })\n const count = await client.readContract({\n address: engine,\n abi: engineAbi,\n functionName: 'ownerUrnsCount',\n args: [args.owner],\n })\n const n = Number(count)\n if (!Number.isFinite(n) || n <= 0) return []\n\n const ilkInfo = await client.readContract({\n address: vat,\n abi: vatAbi,\n functionName: 'ilks',\n args: [ilk],\n })\n const rate = ilkInfo[1]\n\n const rows: SkyLockstakePositionRow[] = []\n for (let index = 0; index < n; index++) {\n const urn = await client.readContract({\n address: engine,\n abi: engineAbi,\n functionName: 'ownerUrns',\n args: [args.owner, BigInt(index)],\n })\n if (!urn || urn === '0x0000000000000000000000000000000000000000') continue\n const u = await client.readContract({\n address: vat,\n abi: vatAbi,\n functionName: 'urns',\n args: [ilk, urn],\n })\n const inkWei = u[0]\n const art = u[1]\n const debtUsdsWei = skyUsdsDebtWeiFromUrnArt(art, rate)\n const farm = await client.readContract({\n address: engine,\n abi: engineAbi,\n functionName: 'urnFarms',\n args: [urn],\n })\n\n const skyHuman = Number(formatUnits(inkWei, SKY_TOKEN_DECIMALS))\n const debtHuman = Number(formatUnits(debtUsdsWei, USDS_DECIMALS))\n let borrowLimitUsdApprox: number | null = null\n if (args.skyUsd != null && Number.isFinite(args.skyUsd) && args.skyUsd > 0) {\n const collateralUsd = skyHuman * args.skyUsd\n const maxDebtUsd = collateralUsd * SKY_LOCKSTAKE_UI_COLLATERAL_FACTOR\n borrowLimitUsdApprox = Math.max(0, maxDebtUsd - debtHuman)\n }\n\n rows.push({\n index,\n urn,\n inkWei,\n art,\n debtUsdsWei,\n farm,\n skyLocked: formatUnits(inkWei, SKY_TOKEN_DECIMALS),\n debtUsds: formatUnits(debtUsdsWei, USDS_DECIMALS),\n borrowLimitUsdApprox,\n skyPriceUsd: args.skyUsd,\n })\n }\n return rows\n}\n\nconst farmRewardsTokenAbi = parseAbi(['function rewardsToken() view returns (address)'])\n\n/** ERC-20 paid by `LockstakeEngine.getReward` for this urn’s farm (farm-dependent; read on-chain). */\nexport async function readSkyLockstakeFarmRewardsToken(args: { rpcUrl: string; farm: Address }): Promise<Address> {\n const client = skyClient(args.rpcUrl)\n const farm = getAddress(args.farm)\n const zero = '0x0000000000000000000000000000000000000000' as Address\n if (farm.toLowerCase() === zero.toLowerCase()) {\n throw new Error('Farm address is zero.')\n }\n const tok = await client.readContract({\n address: farm,\n abi: farmRewardsTokenAbi,\n functionName: 'rewardsToken',\n })\n return getAddress(tok)\n}\n","import {\n createPublicClient,\n defineChain,\n formatUnits,\n getAddress,\n http,\n parseAbi,\n type Address,\n} from 'viem'\nimport { SUSDS_VAULT_ERC4626_MAINNET } from './mainnet.js'\n\nconst vaultAbi = parseAbi([\n 'function balanceOf(address account) view returns (uint256)',\n 'function decimals() view returns (uint8)',\n 'function previewRedeem(uint256 shares) view returns (uint256 assets)',\n])\n\nexport async function readSusdsVaultShareBalanceWei(args: { rpcUrl: string; owner: Address }): Promise<bigint> {\n const rpc = args.rpcUrl.trim()\n const ch = defineChain({\n id: 1,\n name: 'Ethereum',\n nativeCurrency: { decimals: 18, name: 'Ether', symbol: 'ETH' },\n rpcUrls: { default: { http: [rpc] } },\n })\n const client = createPublicClient({ chain: ch, transport: http(rpc) })\n const vault = getAddress(SUSDS_VAULT_ERC4626_MAINNET)\n return client.readContract({\n address: vault,\n abi: vaultAbi,\n functionName: 'balanceOf',\n args: [args.owner],\n })\n}\n\nexport async function readSusdsVaultDecimals(args: { rpcUrl: string }): Promise<number> {\n const rpc = args.rpcUrl.trim()\n const ch = defineChain({\n id: 1,\n name: 'Ethereum',\n nativeCurrency: { decimals: 18, name: 'Ether', symbol: 'ETH' },\n rpcUrls: { default: { http: [rpc] } },\n })\n const client = createPublicClient({ chain: ch, transport: http(rpc) })\n const vault = getAddress(SUSDS_VAULT_ERC4626_MAINNET)\n const d = await client.readContract({\n address: vault,\n abi: vaultAbi,\n functionName: 'decimals',\n })\n return Number(d)\n}\n\n/** Approximate USDS out for `sharesWei` at current vault exchange rate (same block rules as `redeem`). */\nexport async function readSusdsPreviewRedeemAssetsWei(args: {\n rpcUrl: string\n sharesWei: bigint\n}): Promise<bigint> {\n if (args.sharesWei <= 0n) return 0n\n const rpc = args.rpcUrl.trim()\n const ch = defineChain({\n id: 1,\n name: 'Ethereum',\n nativeCurrency: { decimals: 18, name: 'Ether', symbol: 'ETH' },\n rpcUrls: { default: { http: [rpc] } },\n })\n const client = createPublicClient({ chain: ch, transport: http(rpc) })\n const vault = getAddress(SUSDS_VAULT_ERC4626_MAINNET)\n return client.readContract({\n address: vault,\n abi: vaultAbi,\n functionName: 'previewRedeem',\n args: [args.sharesWei],\n })\n}\n\nexport function formatSusdsSharesHuman(sharesWei: bigint, decimals: number): string {\n return formatUnits(sharesWei, decimals)\n}\n","/**\n * Optional browser → Next.js API proxy paths for DeFi upstream calls.\n * Set once from continuumdao-node-app client bootstrap.\n */\n\nlet aaveGraphqlProxyUrl: string | undefined\nlet eulerGraphqlProxyUrl: string | undefined\nlet mapleGraphqlProxyUrl: string | undefined\nlet morphoGraphqlProxyUrl: string | undefined\nlet coingeckoProxyUrl: string | undefined\n\nexport function setAaveGraphqlProxyUrl(url: string | undefined): void {\n aaveGraphqlProxyUrl = url?.trim() || undefined\n}\n\nexport function getAaveGraphqlProxyUrl(): string | undefined {\n return aaveGraphqlProxyUrl\n}\n\nexport function setEulerGraphqlProxyUrl(url: string | undefined): void {\n eulerGraphqlProxyUrl = url?.trim() || undefined\n}\n\nexport function getEulerGraphqlProxyUrl(): string | undefined {\n return eulerGraphqlProxyUrl\n}\n\nexport function setMapleGraphqlProxyUrl(url: string | undefined): void {\n mapleGraphqlProxyUrl = url?.trim() || undefined\n}\n\nexport function getMapleGraphqlProxyUrl(): string | undefined {\n return mapleGraphqlProxyUrl\n}\n\nexport function setMorphoGraphqlProxyUrl(url: string | undefined): void {\n morphoGraphqlProxyUrl = url?.trim() || undefined\n}\n\nexport function getMorphoGraphqlProxyUrl(): string | undefined {\n return morphoGraphqlProxyUrl\n}\n\nexport function setCoingeckoProxyUrl(url: string | undefined): void {\n coingeckoProxyUrl = url?.trim() || undefined\n}\n\nexport function getCoingeckoProxyUrl(): string | undefined {\n return coingeckoProxyUrl\n}\n\nexport async function postJsonViaOptionalProxy<T>(args: {\n directUrl: string\n body: unknown\n proxyUrl?: string\n proxyEnvelope?: unknown\n}): Promise<T> {\n const proxy = args.proxyUrl?.trim()\n if (proxy) {\n const r = await fetch(proxy, {\n method: 'POST',\n headers: {'content-type': 'application/json'},\n body: JSON.stringify(args.proxyEnvelope ?? args.body),\n })\n if (!r.ok) {\n const t = await r.text().catch(() => '')\n throw new Error(t ? `Proxy HTTP ${r.status}: ${t.slice(0, 200)}` : `Proxy HTTP ${r.status}`)\n }\n return (await r.json()) as T\n }\n const r = await fetch(args.directUrl, {\n method: 'POST',\n headers: {'content-type': 'application/json'},\n body: JSON.stringify(args.body),\n })\n if (!r.ok) {\n const t = await r.text().catch(() => '')\n throw new Error(t ? `HTTP ${r.status}: ${t.slice(0, 200)}` : `HTTP ${r.status}`)\n }\n return (await r.json()) as T\n}\n","import { getAddress } from 'viem'\nimport { getCoingeckoProxyUrl } from '../../../core/defiProxy.js'\nimport { SKY_ETHEREUM_MAINNET } from './mainnet.js'\n\n/** CoinGecko simple token price for SKY on Ethereum (USD). */\nexport async function fetchSkyUsdFromCoinGecko(): Promise<number | null> {\n try {\n const addr = getAddress(SKY_ETHEREUM_MAINNET as `0x${string}`).toLowerCase()\n const url =\n 'https://api.coingecko.com/api/v3/simple/token_price/ethereum?contract_addresses=' +\n encodeURIComponent(addr) +\n '&vs_currencies=usd'\n const proxy = getCoingeckoProxyUrl()\n const res = proxy\n ? await fetch(proxy, {\n method: 'POST',\n headers: {'content-type': 'application/json'},\n body: JSON.stringify({platform: 'ethereum', contractAddress: addr}),\n })\n : await fetch(url, {cache: 'no-store'})\n if (!res.ok) return null\n const raw = (await res.json()) as Record<string, { usd?: number } | undefined>\n const row = raw[addr]\n const n = row?.usd\n return typeof n === 'number' && Number.isFinite(n) && n > 0 ? n : null\n } catch {\n return null\n }\n}\n","/**\n * Chains where Sky LockStake Engine multisign flows are implemented.\n * Sky tokens exist on other networks; LockStake staking/borrow in this app tracks engine deployments only.\n */\nexport function loadSkyLockstakeSupportedChainIds(): ReadonlySet<number> {\n return new Set([1])\n}\n","import type { ProtocolModule } from '../../../core/types.js'\nimport { registerProtocolModule } from '../../../core/registry.js'\nimport { SKY_ETHEREUM_MAINNET_CHAIN_ID } from './mainnet.js'\n\nexport * from './mainnet.js'\nexport * from './lockstakeMultisign.js'\nexport * from './susdsMultisign.js'\nexport * from './lockstakeRead.js'\nexport * from './susdsRead.js'\nexport * from './usdPrice.js'\nexport * from './loadLockstakeSupportedChainIds.js'\n\nexport const SKY_PROTOCOL_ID = 'sky'\n\nexport const skyProtocolModule: ProtocolModule = {\n id: SKY_PROTOCOL_ID,\n chainCategory: 'evm',\n isChainSupported(ctx) {\n if (ctx.chainCategory !== 'evm') return false\n return Number(ctx.chainId) === SKY_ETHEREUM_MAINNET_CHAIN_ID\n },\n isTokenSupported(token) {\n return token.category === 'evm' && token.kind === 'erc20'\n },\n actions: [\n { id: 'sky.lockstake-stake', protocolId: SKY_PROTOCOL_ID, chainCategory: 'evm', description: 'Open Lockstake position', commonParams: ['keyGen', 'purposeText', 'useCustomGas'], params: {} },\n { id: 'sky.lockstake-draw', protocolId: SKY_PROTOCOL_ID, chainCategory: 'evm', description: 'Borrow USDS from Lockstake', commonParams: ['keyGen', 'purposeText', 'useCustomGas'], params: {} },\n { id: 'sky.lockstake-wipe', protocolId: SKY_PROTOCOL_ID, chainCategory: 'evm', description: 'Repay Lockstake debt', commonParams: ['keyGen', 'purposeText', 'useCustomGas'], params: {} },\n { id: 'sky.lockstake-close', protocolId: SKY_PROTOCOL_ID, chainCategory: 'evm', description: 'Close Lockstake position', commonParams: ['keyGen', 'purposeText', 'useCustomGas'], params: {} },\n { id: 'sky.susds-deposit', protocolId: SKY_PROTOCOL_ID, chainCategory: 'evm', description: 'Deposit USDS into sUSDS vault', commonParams: ['keyGen', 'purposeText', 'useCustomGas'], params: {} },\n { id: 'sky.susds-redeem', protocolId: SKY_PROTOCOL_ID, chainCategory: 'evm', description: 'Redeem sUSDS to USDS', commonParams: ['keyGen', 'purposeText', 'useCustomGas'], params: {} },\n ],\n}\n\nregisterProtocolModule(skyProtocolModule)\n"]}
1
+ {"version":3,"sources":["../../../../src/core/registry.ts","../../../../src/protocols/evm/sky/mainnet.ts","../../../../src/core/purpose.ts","../../../../src/core/envelope.ts","../../../../src/chains/evm/routerSwapGas.ts","../../../../src/chains/evm/buildBatch.ts","../../../../src/protocols/evm/sky/lockstakeMultisign.ts","../../../../src/protocols/evm/sky/susdsMultisign.ts","../../../../src/protocols/evm/sky/lockstakeRead.ts","../../../../src/protocols/evm/sky/susdsRead.ts","../../../../src/core/defiProxy.ts","../../../../src/protocols/evm/sky/usdPrice.ts","../../../../src/protocols/evm/sky/loadLockstakeSupportedChainIds.ts","../../../../src/protocols/evm/sky/index.ts"],"names":["getClientIdFromKeyGenResult","gasLimitFromEstimateAndChainConfig","defineChain","createPublicClient","http","fetchChainFeeParams","getAddress","parseGwei","gweiToDecimalString","serializeTransaction","proposalTxParamsToFeeSnapshot","alignEip1559FeesWithLatestBase","keccak256","parseAbi","parseUnits","encodeFunctionData","decodeFunctionData","erc20AllowanceAbi","erc20ApproveAbi","engineAbi","formatUnits"],"mappings":"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","file":"index.cjs","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","/**\n * Sky LockStake on Ethereum mainnet.\n * @see https://developers.skyeco.com/protocol/rewards/staking-engine/\n * @see https://developers.skyeco.com/guides/sky/token-governance-upgrade/key-info/ (contract list)\n */\n/** Sky (SKY token) on Ethereum mainnet. */\nexport const SKY_ETHEREUM_MAINNET = '0x56072C95FAA701256059aa122697B133aDEd9279'\nexport const SKY_ETHEREUM_MAINNET_CHAIN_ID = 1\nexport const USDS_ETHEREUM_MAINNET = '0xdC035D45d973E3EC169d2276DDab16f1e407384F'\n\n/** sUSDS ERC-4626 vault (share token); deposit USDS → mint shares, redeem shares → USDS. @see https://developers.skyeco.com/protocol/tokens/susds/ */\nexport const SUSDS_VAULT_ERC4626_MAINNET = '0xa3931d71877C0E7a3148CB7Eb4463524FEc27fbD'\n\n/**\n * Staking Engine (LockStake) — **Chief V3 / SKY** (active; `LSEV2-SKY-A` ilk). This is the contract users should call.\n * Do not use Seal Engine V1 (`0x2b16C07D…`, MKR / Chief V2 legacy); it has little traffic and is not the current SKY engine.\n * Dual entrypoints: legacy `lock`/`free` (MKR path) vs **`lockSky`/`freeSky`** for SKY collateral via `mkrSky`.\n */\nexport const SKY_LOCKSTAKE_ENGINE_MAINNET = '0xCe01C90dE7FD1bcFa39e237FE6D8D9F569e8A6a3'\n\n/**\n * Wrapped SKY used inside the urn after `lockSky`; StakingRewards farms must list this ERC-20 as `stakingToken()`.\n * @see Symbol `lsSKY`.\n */\nexport const SKY_LS_SKY_ERC20_MAINNET = '0xf9A9cfD3229E985B91F99Bc866d42938044FFa1C'\n\n/**\n * Default staking rewards farm on {@link SKY_LOCKSTAKE_ENGINE_MAINNET} — must be ACTIVE and `stakingToken() === lsSKY`.\n * (Older Seal-engine farm addresses are not whitelisted on the current engine.)\n */\nexport const SKY_LOCKSTAKE_DEFAULT_FARM_MAINNET = '0xB44C2Fb4181D7Cb06bdFf34A46FdFe4a259B40Fc'\nexport const SKY_LOCKSTAKE_DEFAULT_FARM_REF = 1\n\n/**\n * Rough UI collateral factor for “remaining borrow (USD)” estimate in the LockStake dialog only.\n * Not protocol liquidation collateralization; see `SkyLockstakeDialog` disclosures.\n */\nexport const SKY_LOCKSTAKE_UI_COLLATERAL_FACTOR = 0.65\n\nexport const SKY_TOKEN_DECIMALS = 18\nexport const USDS_DECIMALS = 18\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}\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)\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 return { bodyForSign, messageToSign: JSON.stringify(bodyForSign) }\n}\n\nexport const coreChainCategoryModule: ChainCategoryModule = {\n category: 'evm',\n finalizeMultisign,\n}\n","import { gasLimitFromEstimateAndChainConfig } from '@continuumdao/continuum-node-sdk'\n\n/** Curve router swap gas: chain cap when set, else 12/10 estimate bump. */\nexport function routerSwapGasLimitFromEstimate(\n estimatedGas: bigint,\n chainGasLimit?: number | null,\n): bigint {\n if (chainGasLimit != null && Number.isFinite(chainGasLimit) && chainGasLimit > 0) {\n return gasLimitFromEstimateAndChainConfig(estimatedGas, chainGasLimit)\n }\n return (estimatedGas * 12n + 9n) / 10n\n}\n","import {\n keccak256,\n createPublicClient,\n defineChain,\n http,\n serializeTransaction,\n getAddress,\n parseGwei,\n type Address,\n type PublicClient,\n} from 'viem'\nimport type { MultisignBuildResult } from '../../core/types.js'\nimport { finalizeMultisign, type MultisignLeg } from '../../core/envelope.js'\nimport type { KeyGenSubset } from '../../core/types.js'\nimport {\n fetchChainFeeParams,\n alignEip1559FeesWithLatestBase,\n gweiToDecimalString,\n gasLimitFromEstimateAndChainConfig,\n proposalTxParamsToFeeSnapshot,\n type ProposalTxParams,\n} from '@continuumdao/continuum-node-sdk'\nimport { routerSwapGasLimitFromEstimate } from './routerSwapGas.js'\nimport type { EvmProtocolContext, EvmTxStep } from './types.js'\n\nexport type EvmBatchMetaBuilder = (args: {\n step: EvmTxStep\n index: number\n gasLimit: bigint\n}) => Record<string, unknown>\n\nexport type EvmBuildBatchArgs = {\n context: EvmProtocolContext\n steps: EvmTxStep[]\n purposeSuffix?: string\n buildBatchMeta: EvmBatchMetaBuilder\n /** First leg msgRaw without 0x prefix; defaults to first step calldata */\n firstMsgRawNo0x?: string\n destinationAddress?: Address\n /** Top-level `value` on bodyForSign when the payable amount is not on the first leg */\n payableValueWei?: bigint\n resolveGasLimit?: (args: {\n step: EvmTxStep\n index: number\n estimatedGas: bigint\n publicClient: PublicClient\n }) => Promise<bigint> | bigint\n /** Override default `estimateGas` (e.g. trade-API gas, skip post-approve deposit estimate). */\n estimateGasForStep?: (args: {\n step: EvmTxStep\n index: number\n publicClient: PublicClient\n executor: Address\n }) => Promise<bigint> | bigint\n}\n\n/**\n * Build unsigned EVM txs, estimate gas, serialize, hash — then assemble mpc-auth body via core envelope.\n */\nexport async function buildEvmMultisignBatch(args: EvmBuildBatchArgs): Promise<MultisignBuildResult> {\n const { context, steps } = args\n const {\n chainId,\n rpcUrl,\n executorAddress,\n chainDetail,\n useCustomGas,\n customGasChainDetails,\n keyGen,\n purposeText,\n } = context\n\n if (steps.length === 0) throw new Error('buildEvmMultisignBatch requires at least one step')\n\n const ch = defineChain({\n id: chainId,\n name: 'Destination',\n nativeCurrency: { decimals: 18, name: 'Ether', symbol: 'ETH' },\n rpcUrls: { default: { http: [rpcUrl] } },\n })\n const publicClient = createPublicClient({ chain: ch, transport: http(rpcUrl) })\n\n const feeParams = await fetchChainFeeParams(rpcUrl, chainId)\n const legacy = Boolean(chainDetail?.legacy) || !feeParams.isEip1559\n const latestBaseFeeWei = !legacy\n ? ((await publicClient.getBlock({ blockTag: 'latest' })).baseFeePerGas ?? 0n)\n : 0n\n\n const gasLimitConfig =\n useCustomGas && chainDetail?.gasLimit != null ? Number(chainDetail.gasLimit) : undefined\n const chainGasLimitRouter =\n chainDetail?.gasLimit != null &&\n Number.isFinite(Number(chainDetail.gasLimit)) &&\n Number(chainDetail.gasLimit) > 0\n ? Number(chainDetail.gasLimit)\n : undefined\n const gasFeeMultiplier =\n useCustomGas && chainDetail?.gasMultiplier != null ? Number(chainDetail.gasMultiplier) : undefined\n\n const executor = getAddress(executorAddress)\n const baseNonce = await publicClient.getTransactionCount({ address: executor, blockTag: 'pending' })\n\n const legs: MultisignLeg[] = []\n\n for (let i = 0; i < steps.length; i++) {\n const step = steps[i]!\n const currentNonce = baseNonce + i\n\n let estimatedGas: bigint\n if (args.estimateGasForStep) {\n estimatedGas = await args.estimateGasForStep({ step, index: i, publicClient, executor })\n } else {\n try {\n estimatedGas = await publicClient.estimateGas({\n to: step.to,\n data: step.data,\n value: step.value,\n account: executor,\n })\n } catch {\n estimatedGas = step.fallbackGas ?? 100_000n\n }\n }\n\n let gasLimitI: bigint\n if (args.resolveGasLimit) {\n gasLimitI = await args.resolveGasLimit({ step, index: i, estimatedGas, publicClient })\n } else if (step.routerSwap) {\n gasLimitI = routerSwapGasLimitFromEstimate(estimatedGas, chainGasLimitRouter)\n } else {\n gasLimitI = useCustomGas\n ? gasLimitFromEstimateAndChainConfig(estimatedGas, gasLimitConfig)\n : estimatedGas\n }\n\n let proposalTxParams: ProposalTxParams\n let feeSnapshot: Record<string, unknown>\n let serialized: `0x${string}`\n\n if (legacy) {\n let gasPriceWei = await publicClient.getGasPrice()\n if (useCustomGas && gasFeeMultiplier != null && gasFeeMultiplier > 0) {\n gasPriceWei = (gasPriceWei * BigInt(100 + gasFeeMultiplier)) / 100n\n }\n if (useCustomGas && chainDetail?.gasPrice != null && chainDetail.gasPrice > 0) {\n const configured = parseGwei(gweiToDecimalString(Number(chainDetail.gasPrice)))\n if (configured > gasPriceWei) gasPriceWei = configured\n }\n serialized = serializeTransaction({\n type: 'legacy',\n to: step.to,\n data: step.data,\n value: step.value,\n gas: gasLimitI,\n gasPrice: gasPriceWei,\n nonce: currentNonce,\n chainId,\n })\n proposalTxParams = {\n nonce: currentNonce,\n gasLimit: gasLimitI.toString(),\n txType: 'legacy',\n gasPrice: gasPriceWei.toString(),\n }\n feeSnapshot = proposalTxParamsToFeeSnapshot(proposalTxParams)\n } else {\n const fetchedBase = feeParams.baseFeeGwei ?? 0\n const fetchedPriority = feeParams.priorityFeeGwei ?? 0\n const configuredBase =\n useCustomGas && chainDetail?.baseFee != null ? Number(chainDetail.baseFee) : 0\n const configuredPriority =\n useCustomGas && chainDetail?.priorityFee != null ? Number(chainDetail.priorityFee) : 0\n const effectiveBaseFeeGwei = Math.max(fetchedBase, configuredBase)\n const effectivePriorityFeeGwei = Math.max(fetchedPriority, configuredPriority)\n const baseFeeMultiplierPct =\n useCustomGas && chainDetail?.baseFeeMultiplier != null\n ? Math.max(100, Number(chainDetail.baseFeeMultiplier))\n : 100\n const baseComponentGwei = (effectiveBaseFeeGwei * baseFeeMultiplierPct) / 100\n const maxFeePerGasGwei = baseComponentGwei + effectivePriorityFeeGwei\n let maxPriorityFeePerGas =\n effectivePriorityFeeGwei > 0\n ? parseGwei(gweiToDecimalString(effectivePriorityFeeGwei))\n : parseGwei('1')\n let maxFeePerGas = parseGwei(gweiToDecimalString(maxFeePerGasGwei))\n if (useCustomGas && gasFeeMultiplier != null && gasFeeMultiplier > 0) {\n maxPriorityFeePerGas = (maxPriorityFeePerGas * BigInt(100 + gasFeeMultiplier)) / 100n\n maxFeePerGas = (maxFeePerGas * BigInt(100 + gasFeeMultiplier)) / 100n\n }\n ;({ maxFeePerGas, maxPriorityFeePerGas } = alignEip1559FeesWithLatestBase(\n maxFeePerGas,\n maxPriorityFeePerGas,\n latestBaseFeeWei,\n ))\n serialized = serializeTransaction({\n type: 'eip1559',\n to: step.to,\n data: step.data,\n value: step.value,\n gas: gasLimitI,\n maxFeePerGas,\n maxPriorityFeePerGas,\n nonce: currentNonce,\n chainId,\n })\n proposalTxParams = {\n nonce: currentNonce,\n gasLimit: gasLimitI.toString(),\n txType: 'eip1559',\n maxFeePerGas: maxFeePerGas.toString(),\n maxPriorityFeePerGas: maxPriorityFeePerGas.toString(),\n }\n feeSnapshot = i === 0 ? proposalTxParamsToFeeSnapshot(proposalTxParams) : {}\n }\n\n const h = keccak256(serialized)\n const msgHash = h.startsWith('0x') ? h.slice(2) : h\n\n const batchMetaExtra = args.buildBatchMeta({ step, index: i, gasLimit: gasLimitI })\n\n legs.push({\n msgHash,\n msgRaw: i === 0 && args.firstMsgRawNo0x != null ? args.firstMsgRawNo0x : serialized,\n destinationAddress: step.to,\n signatureText:\n typeof batchMetaExtra.signatureText === 'string'\n ? batchMetaExtra.signatureText\n : JSON.stringify(batchMetaExtra.signatureText ?? {}),\n audit: batchMetaExtra,\n feeSnapshot: i === 0 ? feeSnapshot : {},\n proposalTxParams,\n valueWei: i === 0 ? step.value : undefined,\n })\n\n if (i === 0 && args.firstMsgRawNo0x != null) {\n legs[0]!.msgRaw = args.firstMsgRawNo0x\n }\n }\n\n const extraJSON: Record<string, unknown> = {}\n if (useCustomGas && customGasChainDetails && Object.keys(customGasChainDetails).length > 0) {\n extraJSON.customGasChainDetails = customGasChainDetails\n }\n\n const result = finalizeMultisign({\n keyGen: keyGen as KeyGenSubset,\n purposeText,\n purposeSuffix: args.purposeSuffix,\n destinationChainID: String(chainId),\n destinationAddress: args.destinationAddress ?? steps[0]!.to,\n legs,\n extraJSON: Object.keys(extraJSON).length > 0 ? extraJSON : undefined,\n })\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","/**\n * Sky LockStake Engine (Ethereum): multisign batches for stake/open position, borrow, repay, close.\n * Pattern mirrors `ethenaStakeMultisign.ts` (sequential txs, `proposalTxParams`, `batchMeta`).\n */\nimport {\n type Address,\n createPublicClient,\n decodeFunctionData,\n defineChain,\n encodeFunctionData,\n getAddress,\n http,\n parseAbi,\n parseUnits,\n} from 'viem'\nimport { buildEvmMultisignBatch } from '../../../chains/evm/buildBatch.js'\nimport type { EvmTxStep } from '../../../chains/evm/types.js'\nimport type { KeyGenSubsetForPermit } from '../../../core/types.js'\nimport {\n SKY_ETHEREUM_MAINNET,\n SKY_LOCKSTAKE_DEFAULT_FARM_MAINNET,\n SKY_LOCKSTAKE_DEFAULT_FARM_REF,\n SKY_LOCKSTAKE_ENGINE_MAINNET,\n SKY_LS_SKY_ERC20_MAINNET,\n USDS_ETHEREUM_MAINNET,\n} from './mainnet.js'\n\nexport const SKY_LOCKSTAKE_MULTICALL_FALLBACK_GAS = 5_000_000n\n\nexport type SkyMultisignBatchStep = {\n to: Address\n data: `0x${string}`\n value: bigint\n meta: Record<string, unknown>\n}\n\nexport type SkyMultisignChainDetailRow = {\n legacy?: boolean\n gasLimit?: number\n gasMultiplier?: number\n gasPrice?: number\n baseFee?: number\n priorityFee?: number\n baseFeeMultiplier?: number\n}\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\nconst engineAbi = parseAbi([\n 'function multicall(bytes[] data) returns (bytes[])',\n 'function open(uint256 index) returns (address)',\n 'function selectFarm(address owner, uint256 index, address farm, uint16 ref)',\n /** Canonical SKY collateral (pulls ERC-20 `sky()`, then `mkrSky.skyToMkr`). Legacy `lock` pulls MKR only. */\n 'function lockSky(address owner, uint256 index, uint256 skyWad, uint16 ref)',\n 'function draw(address owner, uint256 index, address to, uint256 wad)',\n 'function wipe(address owner, uint256 index, uint256 wad)',\n 'function wipeAll(address owner, uint256 index) returns (uint256 wad)',\n /** Returns withdrawn SKY; legacy `free` returns MKR after fee-burn. */\n 'function freeSky(address owner, uint256 index, address to, uint256 skyWad) returns (uint256 skyFreed)',\n 'function getReward(address owner, uint256 index, address farm, address to) returns (uint256)',\n 'function ownerUrnsCount(address usr) view returns (uint256)',\n 'function ownerUrns(address owner, uint256 index) view returns (address urn)',\n 'function urnFarms(address urn) view returns (address farm)',\n 'function farms(address farm) view returns (uint8)',\n])\n\nconst stakingRewardsFarmReadAbi = parseAbi([\n 'function stakingToken() view returns (address)',\n 'function rewardsToken() view returns (address)',\n])\n\ntype ChainRow = SkyMultisignChainDetailRow\n\nexport async function appendSerializedSkyBatch(args: {\n steps: SkyMultisignBatchStep[]\n publicClient: ReturnType<typeof createPublicClient>\n executor: Address\n chainId: number\n rpcUrl: string\n chainDetail: ChainRow\n useCustomGas: boolean\n customGasChainDetails?: Record<string, unknown> | null\n purposePrefix: string\n keyGen: KeyGenSubsetForPermit\n destinationChainID: string\n}): Promise<{ bodyForSign: Record<string, unknown>; messageToSign: string }> {\n const evmSteps: EvmTxStep[] = args.steps.map((s) => ({\n to: s.to,\n data: s.data,\n value: s.value,\n fallbackGas: SKY_LOCKSTAKE_MULTICALL_FALLBACK_GAS,\n }))\n const firstDataNo0x = evmSteps[0]!.data.startsWith('0x') ? evmSteps[0]!.data.slice(2) : evmSteps[0]!.data\n\n return buildEvmMultisignBatch({\n context: {\n chainCategory: 'evm',\n keyGen: args.keyGen,\n purposeText: '',\n chainId: args.chainId,\n rpcUrl: args.rpcUrl,\n executorAddress: args.executor,\n chainDetail: args.chainDetail,\n useCustomGas: args.useCustomGas,\n customGasChainDetails: args.customGasChainDetails,\n },\n steps: evmSteps,\n purposeSuffix: args.purposePrefix,\n firstMsgRawNo0x: firstDataNo0x,\n destinationAddress: args.steps[0]!.to,\n buildBatchMeta: ({ index }) => args.steps[index]!.meta,\n })\n}\n\nexport async function buildSkyLockstakeStakePositionBatch(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\n purposeText: string\n /** Human SKY amount */\n amountHuman: string\n farm?: Address\n farmRef?: number\n /**\n * Add SKY to this urn (multicall omits `open`). Must be `< ownerUrnsCount`.\n * If omitted and `ownerUrnsCount > 0`, defaults to urn `0` (single-position UX). If omitted and count is 0, opens urn `0`.\n */\n existingUrnIndex?: bigint\n}): Promise<{ bodyForSign: Record<string, unknown>; messageToSign: string }> {\n if (args.chainId !== 1) throw new Error('Sky LockStake is only supported on Ethereum mainnet (chain id 1).')\n const rpc = args.rpcUrl.trim()\n const ch = defineChain({\n id: 1,\n name: 'Ethereum',\n nativeCurrency: { decimals: 18, name: 'Ether', symbol: 'ETH' },\n rpcUrls: { default: { http: [rpc] } },\n })\n const publicClient = createPublicClient({ chain: ch, transport: http(rpc) })\n const executor = getAddress(args.executorAddress)\n const sky = getAddress(SKY_ETHEREUM_MAINNET)\n const engine = getAddress(SKY_LOCKSTAKE_ENGINE_MAINNET)\n const farm = getAddress(args.farm ?? SKY_LOCKSTAKE_DEFAULT_FARM_MAINNET)\n const ref = Number(args.farmRef ?? SKY_LOCKSTAKE_DEFAULT_FARM_REF)\n if (!Number.isFinite(ref) || ref < 0 || ref > 65535) throw new Error('Invalid farm ref.')\n\n const dec = await publicClient.readContract({\n address: sky,\n abi: erc20AllowanceAbi,\n functionName: 'decimals',\n })\n const amountWei = parseUnits(args.amountHuman, Number(dec))\n if (amountWei === 0n) throw new Error('Amount is zero.')\n\n const urnCount = await publicClient.readContract({\n address: engine,\n abi: engineAbi,\n functionName: 'ownerUrnsCount',\n args: [executor],\n })\n let effectiveExistingUrnIndex = args.existingUrnIndex\n if (effectiveExistingUrnIndex === undefined && urnCount > 0n) {\n effectiveExistingUrnIndex = 0n\n }\n const isAddCollateral = effectiveExistingUrnIndex !== undefined\n const index: bigint = isAddCollateral ? effectiveExistingUrnIndex! : urnCount\n let addCollateralUrn: Address | null = null\n if (isAddCollateral) {\n if (index < 0n || index >= urnCount) {\n throw new Error('Sky LockStake: urn index out of range for this key (use Staking tab if you have no position yet).')\n }\n const urnAddr = await publicClient.readContract({\n address: engine,\n abi: engineAbi,\n functionName: 'ownerUrns',\n args: [executor, index],\n })\n if (!urnAddr || getAddress(urnAddr) === '0x0000000000000000000000000000000000000000') {\n throw new Error('Sky LockStake: that urn does not exist on-chain.')\n }\n addCollateralUrn = getAddress(urnAddr)\n }\n\n const lsSky = getAddress(SKY_LS_SKY_ERC20_MAINNET)\n const farmStatus = await publicClient.readContract({\n address: engine,\n abi: engineAbi,\n functionName: 'farms',\n args: [farm],\n })\n if (Number(farmStatus) !== 1) {\n throw new Error(\n `Sky LockStake: farm ${farm} is not ACTIVE in the engine (on-chain status ${farmStatus}). Choose another farm or wait for governance.`,\n )\n }\n\n let farmStakeToken: Address\n try {\n farmStakeToken = getAddress(\n await publicClient.readContract({\n address: farm,\n abi: stakingRewardsFarmReadAbi,\n functionName: 'stakingToken',\n }),\n )\n } catch {\n throw new Error(`Sky LockStake: could not read stakingToken() from farm ${farm}.`)\n }\n\n const farmAcceptsLsSky = farmStakeToken.toLowerCase() === lsSky.toLowerCase()\n /** Default farm can be ACTIVE but stake legacy lsMKR; engine mints lsSKY into the urn — `selectFarm`+`lockSky` then reverts inside the farm. */\n const skipSelectFarm = !farmAcceptsLsSky\n\n const openCall = encodeFunctionData({\n abi: engineAbi,\n functionName: 'open',\n args: [index],\n })\n const selectFarmCall = encodeFunctionData({\n abi: engineAbi,\n functionName: 'selectFarm',\n args: [executor, index, farm, ref],\n })\n const lockSkyCall = encodeFunctionData({\n abi: engineAbi,\n functionName: 'lockSky',\n args: [executor, index, amountWei, ref],\n })\n\n let innerCalls: `0x${string}`[]\n let innerLabels: string[]\n\n if (!isAddCollateral) {\n innerCalls = skipSelectFarm\n ? [openCall, lockSkyCall]\n : [openCall, selectFarmCall, lockSkyCall]\n innerLabels = skipSelectFarm ? ['open(index)', 'lockSky'] : ['open(index)', 'selectFarm', 'lockSky']\n } else {\n const currentFarm = await publicClient.readContract({\n address: engine,\n abi: engineAbi,\n functionName: 'urnFarms',\n args: [addCollateralUrn!],\n })\n const targetFarm = getAddress(farm)\n const currentNorm = getAddress(currentFarm)\n const sameFarmAsTarget = currentNorm.toLowerCase() === targetFarm.toLowerCase()\n\n if (skipSelectFarm || sameFarmAsTarget) {\n innerCalls = [lockSkyCall]\n innerLabels = ['lockSky']\n } else {\n innerCalls = [selectFarmCall, lockSkyCall]\n innerLabels = ['selectFarm', 'lockSky']\n }\n }\n\n const last = innerCalls[innerCalls.length - 1]!\n const lockDecoded = decodeFunctionData({ abi: engineAbi, data: last })\n if (lockDecoded.functionName !== 'lockSky' || lockDecoded.args[2] !== amountWei || lockDecoded.args[3] !== ref) {\n throw new Error('Sky LockStake: internal multicall encoding mismatch (lockSky tail); consult support.')\n }\n for (let i = 0; i < innerCalls.length - 1; i++) {\n const d = decodeFunctionData({ abi: engineAbi, data: innerCalls[i]! })\n if (d.functionName === 'open' && d.args[0] !== index) {\n throw new Error('Sky LockStake: internal multicall encoding mismatch (open index); consult support.')\n }\n if (d.functionName === 'selectFarm') {\n if (d.args[3] !== ref || d.args[2] !== getAddress(farm) || d.args[1] !== index || d.args[0] !== executor) {\n throw new Error('Sky LockStake: internal multicall encoding mismatch (selectFarm); consult support.')\n }\n }\n }\n const multicallData = encodeFunctionData({\n abi: engineAbi,\n functionName: 'multicall',\n args: [innerCalls],\n })\n\n const steps: SkyMultisignBatchStep[] = []\n const currentAllowance = await publicClient.readContract({\n address: sky,\n abi: erc20AllowanceAbi,\n functionName: 'allowance',\n args: [executor, engine],\n })\n if (currentAllowance < amountWei) {\n if (currentAllowance > 0n) {\n steps.push({\n to: sky,\n data: encodeFunctionData({\n abi: erc20ApproveAbi,\n functionName: 'approve',\n args: [engine, 0n],\n }),\n value: 0n,\n meta: {\n destinationAddress: sky,\n signatureText: JSON.stringify({\n kind: 'Sky',\n name: 'ERC20.approve',\n function: 'approve(address,uint256)',\n spender: engine,\n note: 'Reset SKY allowance before new approval.',\n }),\n evm: { type: 'sky_lockstake_erc20_approve', version: 1, chainId: '1' },\n sky: { step: 'approve_sky_reset', engine },\n },\n })\n }\n steps.push({\n to: sky,\n data: encodeFunctionData({\n abi: erc20ApproveAbi,\n functionName: 'approve',\n args: [engine, amountWei],\n }),\n value: 0n,\n meta: {\n destinationAddress: sky,\n signatureText: JSON.stringify({\n kind: 'Sky',\n name: 'ERC20.approve',\n function: 'approve(address,uint256)',\n spender: engine,\n amountWei: amountWei.toString(),\n amountHuman: args.amountHuman,\n decimals: Number(dec),\n }),\n evm: { type: 'sky_lockstake_erc20_approve', version: 1, chainId: '1' },\n sky: { step: 'approve_sky', engine },\n },\n })\n }\n\n steps.push({\n to: engine,\n data: multicallData,\n value: 0n,\n meta: {\n destinationAddress: engine,\n signatureText: JSON.stringify({\n kind: 'Sky',\n name: 'LockstakeEngine.multicall',\n inner: innerLabels,\n index: index.toString(),\n farm,\n ref,\n amountWei: amountWei.toString(),\n amountHuman: args.amountHuman,\n borrowOnlySkippedRewardsFarm: skipSelectFarm,\n farmStakingToken: farmStakeToken,\n expectedEngineFarmStakingToken: lsSky,\n addCollateralToExistingUrn: isAddCollateral,\n }),\n evm: { type: 'sky_lockstake_engine_multicall_stake', version: 1, chainId: '1' },\n sky: {\n step: isAddCollateral\n ? innerLabels.join('_')\n : skipSelectFarm\n ? 'open_lockSky_borrow_only'\n : 'open_selectFarm_lockSky',\n engine,\n farm,\n skipSelectFarm,\n addCollateral: isAddCollateral,\n },\n },\n })\n\n const purposePrefix = (() => {\n const t = args.purposeText.trim()\n const borrowNote = skipSelectFarm\n ? 'No rewards farm in this batch: default farm stakingToken does not match lsSKY, so we only open + lockSky (SKY collateral) for borrow (you can select a compatible farm later from the protocol UI when one is ACTIVE).'\n : ''\n if (isAddCollateral) {\n const core =\n steps.length > 1\n ? `Sky LockStake: ${steps.length}-tx batch — approve SKY, then multicall ${innerLabels.join(' + ')} on urn index ${index.toString()}.`\n : `Sky LockStake: multicall ${innerLabels.join(' + ')} on urn index ${index.toString()} (allowance already set).`\n return (t ? `${t}\\n\\n` : '') + core\n }\n const suffixCore = skipSelectFarm\n ? steps.length > 1\n ? `Sky LockStake: ${steps.length}-tx batch — approve SKY, then multicall open + lockSky (${borrowNote})`\n : `Sky LockStake: multicall open + lockSky (${borrowNote})`\n : steps.length > 1\n ? `Sky LockStake: ${steps.length}-tx batch — approve SKY, then open + farm + lockSky on Ethereum.`\n : `Sky LockStake: multicall open + farm + lockSky on Ethereum (allowance already set).`\n return (t ? `${t}\\n\\n` : '') + suffixCore\n })()\n\n return appendSerializedSkyBatch({\n steps,\n publicClient,\n executor,\n chainId: 1,\n rpcUrl: rpc,\n chainDetail: args.chainDetail,\n useCustomGas: args.useCustomGas,\n customGasChainDetails: args.customGasChainDetails,\n purposePrefix,\n keyGen: args.keyGen,\n destinationChainID: '1',\n })\n}\n\nexport async function buildSkyLockstakeDrawBatch(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\n purposeText: string\n urnIndex: bigint\n /** Human USDS */\n amountHuman: string\n to?: Address\n}): Promise<{ bodyForSign: Record<string, unknown>; messageToSign: string }> {\n if (args.chainId !== 1) throw new Error('Sky LockStake is only supported on Ethereum mainnet (chain id 1).')\n const rpc = args.rpcUrl.trim()\n const ch = defineChain({\n id: 1,\n name: 'Ethereum',\n nativeCurrency: { decimals: 18, name: 'Ether', symbol: 'ETH' },\n rpcUrls: { default: { http: [rpc] } },\n })\n const publicClient = createPublicClient({ chain: ch, transport: http(rpc) })\n const executor = getAddress(args.executorAddress)\n const engine = getAddress(SKY_LOCKSTAKE_ENGINE_MAINNET)\n const usds = getAddress(USDS_ETHEREUM_MAINNET)\n const dec = await publicClient.readContract({\n address: usds,\n abi: erc20AllowanceAbi,\n functionName: 'decimals',\n })\n const wad = parseUnits(args.amountHuman, Number(dec))\n if (wad === 0n) throw new Error('Borrow amount is zero.')\n const to = getAddress(args.to ?? executor)\n\n const data = encodeFunctionData({\n abi: engineAbi,\n functionName: 'draw',\n args: [executor, args.urnIndex, to, wad],\n })\n const steps: SkyMultisignBatchStep[] = [\n {\n to: engine,\n data,\n value: 0n,\n meta: {\n destinationAddress: engine,\n signatureText: JSON.stringify({\n kind: 'Sky',\n name: 'LockstakeEngine.draw',\n function: 'draw(address owner,uint256 index,address to,uint256 wad)',\n urnIndex: args.urnIndex.toString(),\n to,\n amountWei: wad.toString(),\n amountHuman: args.amountHuman,\n }),\n evm: { type: 'sky_lockstake_draw', version: 1, chainId: '1' },\n sky: { step: 'draw', engine },\n },\n },\n ]\n const purposePrefix = (() => {\n const t = args.purposeText.trim()\n const suffix = 'Sky LockStake: borrow USDS against staked SKY (draw).'\n return (t ? `${t}\\n\\n` : '') + suffix\n })()\n\n return appendSerializedSkyBatch({\n steps,\n publicClient,\n executor,\n chainId: 1,\n rpcUrl: rpc,\n chainDetail: args.chainDetail,\n useCustomGas: args.useCustomGas,\n customGasChainDetails: args.customGasChainDetails,\n purposePrefix,\n keyGen: args.keyGen,\n destinationChainID: '1',\n })\n}\n\nexport async function buildSkyLockstakeGetRewardBatch(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\n purposeText: string\n urnIndex: bigint\n /** Urn’s selected staking rewards farm (must be non-zero). */\n farmAddress: Address\n /** Recipient of claimed ERC-20 rewards; defaults to executor. */\n rewardRecipient?: Address\n}): Promise<{ bodyForSign: Record<string, unknown>; messageToSign: string; rewardToken: Address }> {\n if (args.chainId !== 1) throw new Error('Sky LockStake is only supported on Ethereum mainnet (chain id 1).')\n const rpc = args.rpcUrl.trim()\n const ch = defineChain({\n id: 1,\n name: 'Ethereum',\n nativeCurrency: { decimals: 18, name: 'Ether', symbol: 'ETH' },\n rpcUrls: { default: { http: [rpc] } },\n })\n const publicClient = createPublicClient({ chain: ch, transport: http(rpc) })\n const executor = getAddress(args.executorAddress)\n const engine = getAddress(SKY_LOCKSTAKE_ENGINE_MAINNET)\n const farm = getAddress(args.farmAddress)\n const zero = '0x0000000000000000000000000000000000000000' as Address\n if (farm.toLowerCase() === zero.toLowerCase()) {\n throw new Error(\n 'Sky LockStake: this urn has no rewards farm selected — stake SKY with a farm first, then rewards accrue there.',\n )\n }\n let rewardToken: Address\n try {\n rewardToken = getAddress(\n await publicClient.readContract({\n address: farm,\n abi: stakingRewardsFarmReadAbi,\n functionName: 'rewardsToken',\n }),\n )\n } catch {\n throw new Error(`Sky LockStake: could not read rewardsToken() from farm ${farm}.`)\n }\n const to = getAddress(args.rewardRecipient ?? executor)\n\n const data = encodeFunctionData({\n abi: engineAbi,\n functionName: 'getReward',\n args: [executor, args.urnIndex, farm, to],\n })\n const steps: SkyMultisignBatchStep[] = [\n {\n to: engine,\n data,\n value: 0n,\n meta: {\n destinationAddress: engine,\n signatureText: JSON.stringify({\n kind: 'Sky',\n name: 'LockstakeEngine.getReward',\n function: 'getReward(address owner,uint256 index,address farm,address to)',\n urnIndex: args.urnIndex.toString(),\n farm,\n rewardRecipient: to,\n farmRewardsToken: rewardToken,\n }),\n evm: { type: 'sky_lockstake_get_reward', version: 1, chainId: '1' },\n sky: { step: 'get_reward', engine, farm, rewardToken },\n },\n },\n ]\n const purposePrefix = (() => {\n const t = args.purposeText.trim()\n const suffix =\n 'Sky LockStake: claim staking rewards from the selected farm (getReward → ERC-20 sent to rewardRecipient).'\n return (t ? `${t}\\n\\n` : '') + suffix\n })()\n\n const built = await appendSerializedSkyBatch({\n steps,\n publicClient,\n executor,\n chainId: 1,\n rpcUrl: rpc,\n chainDetail: args.chainDetail,\n useCustomGas: args.useCustomGas,\n customGasChainDetails: args.customGasChainDetails,\n purposePrefix,\n keyGen: args.keyGen,\n destinationChainID: '1',\n })\n return { ...built, rewardToken }\n}\n\nexport async function buildSkyLockstakeWipeBatch(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\n purposeText: string\n urnIndex: bigint\n wipeAll: boolean\n amountHuman?: string\n}): Promise<{ bodyForSign: Record<string, unknown>; messageToSign: string }> {\n if (args.chainId !== 1) throw new Error('Sky LockStake is only supported on Ethereum mainnet (chain id 1).')\n const rpc = args.rpcUrl.trim()\n const ch = defineChain({\n id: 1,\n name: 'Ethereum',\n nativeCurrency: { decimals: 18, name: 'Ether', symbol: 'ETH' },\n rpcUrls: { default: { http: [rpc] } },\n })\n const publicClient = createPublicClient({ chain: ch, transport: http(rpc) })\n const executor = getAddress(args.executorAddress)\n const engine = getAddress(SKY_LOCKSTAKE_ENGINE_MAINNET)\n const usds = getAddress(USDS_ETHEREUM_MAINNET)\n\n const steps: SkyMultisignBatchStep[] = []\n\n if (!args.wipeAll) {\n const ah = (args.amountHuman ?? '').trim()\n if (!ah) throw new Error('Repay amount required.')\n const dec = await publicClient.readContract({\n address: usds,\n abi: erc20AllowanceAbi,\n functionName: 'decimals',\n })\n const repayWei = parseUnits(ah, Number(dec))\n if (repayWei === 0n) throw new Error('Repay amount is zero.')\n\n const currentAllowance = await publicClient.readContract({\n address: usds,\n abi: erc20AllowanceAbi,\n functionName: 'allowance',\n args: [executor, engine],\n })\n if (currentAllowance < repayWei) {\n if (currentAllowance > 0n) {\n steps.push({\n to: usds,\n data: encodeFunctionData({\n abi: erc20ApproveAbi,\n functionName: 'approve',\n args: [engine, 0n],\n }),\n value: 0n,\n meta: {\n destinationAddress: usds,\n signatureText: JSON.stringify({\n kind: 'Sky',\n name: 'ERC20.approve USDS reset',\n spender: engine,\n }),\n evm: { type: 'sky_lockstake_usds_approve', version: 1, chainId: '1' },\n sky: { step: 'approve_usds_reset', engine },\n },\n })\n }\n steps.push({\n to: usds,\n data: encodeFunctionData({\n abi: erc20ApproveAbi,\n functionName: 'approve',\n args: [engine, repayWei],\n }),\n value: 0n,\n meta: {\n destinationAddress: usds,\n signatureText: JSON.stringify({\n kind: 'Sky',\n name: 'ERC20.approve USDS',\n spender: engine,\n amountWei: repayWei.toString(),\n }),\n evm: { type: 'sky_lockstake_usds_approve', version: 1, chainId: '1' },\n sky: { step: 'approve_usds', engine },\n },\n })\n }\n steps.push({\n to: engine,\n data: encodeFunctionData({\n abi: engineAbi,\n functionName: 'wipe',\n args: [executor, args.urnIndex, repayWei],\n }),\n value: 0n,\n meta: {\n destinationAddress: engine,\n signatureText: JSON.stringify({\n kind: 'Sky',\n name: 'LockstakeEngine.wipe',\n urnIndex: args.urnIndex.toString(),\n amountWei: repayWei.toString(),\n }),\n evm: { type: 'sky_lockstake_wipe', version: 1, chainId: '1' },\n sky: { step: 'wipe', engine },\n },\n })\n } else {\n const maxApproval = 2n ** 256n - 1n\n steps.push({\n to: usds,\n data: encodeFunctionData({\n abi: erc20ApproveAbi,\n functionName: 'approve',\n args: [engine, maxApproval],\n }),\n value: 0n,\n meta: {\n destinationAddress: usds,\n signatureText: JSON.stringify({\n kind: 'Sky',\n name: 'ERC20.approve USDS (max)',\n spender: engine,\n note: 'Allows wipeAll to pull the exact burn amount computed on-chain.',\n }),\n evm: { type: 'sky_lockstake_usds_approve', version: 1, chainId: '1' },\n sky: { step: 'approve_usds_max', engine },\n },\n })\n steps.push({\n to: engine,\n data: encodeFunctionData({\n abi: engineAbi,\n functionName: 'wipeAll',\n args: [executor, args.urnIndex],\n }),\n value: 0n,\n meta: {\n destinationAddress: engine,\n signatureText: JSON.stringify({\n kind: 'Sky',\n name: 'LockstakeEngine.wipeAll',\n urnIndex: args.urnIndex.toString(),\n }),\n evm: { type: 'sky_lockstake_wipe_all', version: 1, chainId: '1' },\n sky: { step: 'wipeAll', engine },\n },\n })\n }\n\n const purposePrefix = (() => {\n const t = args.purposeText.trim()\n const suffix = args.wipeAll\n ? `Sky LockStake: repay all USDS debt (wipeAll).`\n : `Sky LockStake: repay USDS (wipe).`\n return (t ? `${t}\\n\\n` : '') + suffix\n })()\n\n return appendSerializedSkyBatch({\n steps,\n publicClient,\n executor,\n chainId: 1,\n rpcUrl: rpc,\n chainDetail: args.chainDetail,\n useCustomGas: args.useCustomGas,\n customGasChainDetails: args.customGasChainDetails,\n purposePrefix,\n keyGen: args.keyGen,\n destinationChainID: '1',\n })\n}\n\nexport async function buildSkyLockstakeCloseBatch(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\n purposeText: string\n urnIndex: bigint\n inkWei: bigint\n skyRecipient?: Address\n}): Promise<{ bodyForSign: Record<string, unknown>; messageToSign: string }> {\n if (args.chainId !== 1) throw new Error('Sky LockStake is only supported on Ethereum mainnet (chain id 1).')\n if (args.inkWei === 0n) throw new Error('Nothing to free.')\n const rpc = args.rpcUrl.trim()\n const ch = defineChain({\n id: 1,\n name: 'Ethereum',\n nativeCurrency: { decimals: 18, name: 'Ether', symbol: 'ETH' },\n rpcUrls: { default: { http: [rpc] } },\n })\n const publicClient = createPublicClient({ chain: ch, transport: http(rpc) })\n const executor = getAddress(args.executorAddress)\n const engine = getAddress(SKY_LOCKSTAKE_ENGINE_MAINNET)\n const usds = getAddress(USDS_ETHEREUM_MAINNET)\n const toSky = getAddress(args.skyRecipient ?? executor)\n\n const maxApproval = 2n ** 256n - 1n\n const steps: SkyMultisignBatchStep[] = [\n {\n to: usds,\n data: encodeFunctionData({\n abi: erc20ApproveAbi,\n functionName: 'approve',\n args: [engine, maxApproval],\n }),\n value: 0n,\n meta: {\n destinationAddress: usds,\n signatureText: JSON.stringify({\n kind: 'Sky',\n name: 'ERC20.approve USDS (max)',\n spender: engine,\n note: 'Close position: wipeAll then free SKY.',\n }),\n evm: { type: 'sky_lockstake_usds_approve', version: 1, chainId: '1' },\n sky: { step: 'approve_usds_max', engine },\n },\n },\n {\n to: engine,\n data: encodeFunctionData({\n abi: engineAbi,\n functionName: 'wipeAll',\n args: [executor, args.urnIndex],\n }),\n value: 0n,\n meta: {\n destinationAddress: engine,\n signatureText: JSON.stringify({\n kind: 'Sky',\n name: 'LockstakeEngine.wipeAll',\n urnIndex: args.urnIndex.toString(),\n }),\n evm: { type: 'sky_lockstake_wipe_all', version: 1, chainId: '1' },\n sky: { step: 'wipeAll', engine },\n },\n },\n {\n to: engine,\n data: encodeFunctionData({\n abi: engineAbi,\n functionName: 'freeSky',\n args: [executor, args.urnIndex, toSky, args.inkWei],\n }),\n value: 0n,\n meta: {\n destinationAddress: engine,\n signatureText: JSON.stringify({\n kind: 'Sky',\n name: 'LockstakeEngine.freeSky',\n urnIndex: args.urnIndex.toString(),\n to: toSky,\n inkWei: args.inkWei.toString(),\n note: 'Exit fee may reduce SKY received.',\n }),\n evm: { type: 'sky_lockstake_free_sky', version: 1, chainId: '1' },\n sky: { step: 'freeSky', engine },\n },\n },\n ]\n\n const purposePrefix = (() => {\n const t = args.purposeText.trim()\n const suffix = 'Sky LockStake: close position — wipeAll debt, free SKY collateral.'\n return (t ? `${t}\\n\\n` : '') + suffix\n })()\n\n return appendSerializedSkyBatch({\n steps,\n publicClient,\n executor,\n chainId: 1,\n rpcUrl: rpc,\n chainDetail: args.chainDetail,\n useCustomGas: args.useCustomGas,\n customGasChainDetails: args.customGasChainDetails,\n purposePrefix,\n keyGen: args.keyGen,\n destinationChainID: '1',\n })\n}\n\n/** Sky batch steps whose `estimateGas` reverts without prior txs in-flight (approve → engine call isolation). */\nconst SKY_FRAGILE_ETH_ESTIMATE_GAS_BATCH_EVMS = new Set([\n 'sky_lockstake_engine_multicall_stake',\n 'sky_lockstake_wipe',\n 'sky_lockstake_wipe_all',\n 'sky_susds_deposit',\n])\n\nfunction parseSkyExtraJsonObject(detail: Record<string, unknown> | null | undefined): Record<string, unknown> | null {\n if (!detail) return null\n const raw = detail.ExtraJSON ?? detail.extraJSON\n if (raw == null) return null\n if (typeof raw === 'object' && !Array.isArray(raw)) return raw as Record<string, unknown>\n if (typeof raw === 'string' && raw.trim()) {\n try {\n const p = JSON.parse(raw) as unknown\n if (p && typeof p === 'object' && !Array.isArray(p)) return p as Record<string, unknown>\n } catch {\n return null\n }\n }\n return null\n}\n\nfunction parseOptionalSkyGasLimitString(raw: string | number | undefined): bigint | null {\n if (raw == null) return null\n const s = String(raw).trim()\n if (!s) return null\n try {\n if (/^0x[0-9a-fA-F]+$/.test(s)) return BigInt(s)\n return BigInt(s)\n } catch {\n return null\n }\n}\n\n/**\n * True when `extraJSON.batchMeta[i].evm.type` pulls ERC-20 inside the same batched approve flow,\n * so `eth_estimateGas` on this step alone skips prior approvals (similar to Ethena sUSDe deposit).\n */\nexport function isSkyLockstakeIsolationEstimateGasFragileBatchStep(\n detail: Record<string, unknown> | null | undefined,\n batchIndex: number,\n): boolean {\n if (batchIndex < 0) return false\n const ex = parseSkyExtraJsonObject(detail)\n const bm = ex?.batchMeta\n if (!Array.isArray(bm) || !bm[batchIndex] || typeof bm[batchIndex] !== 'object' || Array.isArray(bm[batchIndex])) {\n return false\n }\n const evm = (bm[batchIndex] as Record<string, unknown>).evm as Record<string, unknown> | undefined\n return SKY_FRAGILE_ETH_ESTIMATE_GAS_BATCH_EVMS.has(String(evm?.type ?? ''))\n}\n\n/** Prefer `proposalTxParams[i].gasLimit` from proposal time — isolated RPC estimate often reverts. */\nexport function resolveSkyLockstakeBatchStepGasFromSignRequest(\n detail: Record<string, unknown> | null | undefined,\n batchIndex: number,\n): bigint | null {\n if (!detail || batchIndex < 0) return null\n const propBatch = (detail.proposal_tx_params ?? detail.proposalTxParams ?? detail.ProposalTxParams) as unknown\n if (!Array.isArray(propBatch) || propBatch.length <= batchIndex) return null\n const row = propBatch[batchIndex]\n if (!row || typeof row !== 'object' || Array.isArray(row)) return null\n return parseOptionalSkyGasLimitString((row as Record<string, unknown>).gasLimit as string | number | undefined)\n}\n","/**\n * Sky sUSDS — ERC-4626 deposit (USDS → mint shares) and redeem (burn shares → USDS).\n * Serialization matches {@link appendSerializedSkyBatch} from `skyLockstakeMultisign.ts`.\n */\nimport {\n type Address,\n createPublicClient,\n defineChain,\n encodeFunctionData,\n getAddress,\n http,\n parseAbi,\n parseUnits,\n} from 'viem'\nimport type { KeyGenSubsetForPermit } from '../../../core/types.js'\nimport {\n appendSerializedSkyBatch,\n type SkyMultisignBatchStep,\n type SkyMultisignChainDetailRow,\n} from './lockstakeMultisign.js'\nimport { SUSDS_VAULT_ERC4626_MAINNET, USDS_ETHEREUM_MAINNET } from './mainnet.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\nconst susdsVaultAbi = parseAbi([\n 'function asset() view returns (address)',\n 'function decimals() view returns (uint8)',\n 'function deposit(uint256 assets, address receiver) returns (uint256 shares)',\n 'function redeem(uint256 shares, address receiver, address owner) returns (uint256 assets)',\n])\n\nexport async function buildSkySusdsRedeemToUsdsBatch(args: {\n keyGen: KeyGenSubsetForPermit\n chainId: number\n rpcUrl: string\n chainDetail: SkyMultisignChainDetailRow\n useCustomGas: boolean\n customGasChainDetails?: Record<string, unknown> | null\n executorAddress: Address\n purposeText: string\n /** Human sUSDS (vault share) amount to redeem */\n sharesHuman: string\n /** Address receiving USDS from redeem (defaults to executor). */\n receiver?: Address\n}): Promise<{ bodyForSign: Record<string, unknown>; messageToSign: string }> {\n if (args.chainId !== 1) throw new Error('Sky sUSDS redeem is only supported on Ethereum mainnet (chain id 1).')\n const rpc = args.rpcUrl.trim()\n const vault = getAddress(SUSDS_VAULT_ERC4626_MAINNET)\n const usdsCanonical = getAddress(USDS_ETHEREUM_MAINNET)\n const ch = defineChain({\n id: 1,\n name: 'Ethereum',\n nativeCurrency: { decimals: 18, name: 'Ether', symbol: 'ETH' },\n rpcUrls: { default: { http: [rpc] } },\n })\n const publicClient = createPublicClient({ chain: ch, transport: http(rpc) })\n const executor = getAddress(args.executorAddress)\n const receiver = getAddress(args.receiver ?? executor)\n\n const underlying = await publicClient.readContract({\n address: vault,\n abi: susdsVaultAbi,\n functionName: 'asset',\n })\n if (getAddress(underlying).toLowerCase() !== usdsCanonical.toLowerCase()) {\n throw new Error('sUSDS vault underlying does not match canonical USDS on Ethereum.')\n }\n\n const dec = await publicClient.readContract({\n address: vault,\n abi: susdsVaultAbi,\n functionName: 'decimals',\n })\n const sharesWei = parseUnits(args.sharesHuman, Number(dec))\n if (sharesWei === 0n) throw new Error('Redeem amount is zero.')\n\n const data = encodeFunctionData({\n abi: susdsVaultAbi,\n functionName: 'redeem',\n args: [sharesWei, receiver, executor],\n })\n\n const steps: SkyMultisignBatchStep[] = [\n {\n to: vault,\n data,\n value: 0n,\n meta: {\n destinationAddress: vault,\n signatureText: JSON.stringify({\n kind: 'Sky',\n name: 'sUSDS (ERC-4626).redeem',\n function: 'redeem(uint256 shares, address receiver, address owner)',\n sharesWei: sharesWei.toString(),\n sharesHuman: args.sharesHuman,\n receiver,\n owner: executor,\n vault,\n underlying: usdsCanonical,\n }),\n evm: { type: 'sky_susds_redeem', version: 1, chainId: '1' },\n sky: { step: 'susds_redeem', vault },\n },\n },\n ]\n\n const purposePrefix = (() => {\n const t = args.purposeText.trim()\n const suffix =\n 'Sky sUSDS: redeem Savings USDS shares to USDS via ERC-4626 redeem (1 tx).'\n return (t ? `${t}\\n\\n` : '') + suffix\n })()\n\n return appendSerializedSkyBatch({\n steps,\n publicClient,\n executor,\n chainId: 1,\n rpcUrl: rpc,\n chainDetail: args.chainDetail,\n useCustomGas: args.useCustomGas,\n customGasChainDetails: args.customGasChainDetails,\n purposePrefix,\n keyGen: args.keyGen,\n destinationChainID: '1',\n })\n}\n\nexport async function buildSkySusdsDepositFromUsdsBatch(args: {\n keyGen: KeyGenSubsetForPermit\n chainId: number\n rpcUrl: string\n chainDetail: SkyMultisignChainDetailRow\n useCustomGas: boolean\n customGasChainDetails?: Record<string, unknown> | null\n executorAddress: Address\n purposeText: string\n /** Human USDS amount to deposit into the vault. */\n assetsHuman: string\n}): Promise<{ bodyForSign: Record<string, unknown>; messageToSign: string }> {\n if (args.chainId !== 1) throw new Error('Sky sUSDS deposit is only supported on Ethereum mainnet (chain id 1).')\n const rpc = args.rpcUrl.trim()\n const vault = getAddress(SUSDS_VAULT_ERC4626_MAINNET)\n const usdsCanonical = getAddress(USDS_ETHEREUM_MAINNET)\n const ch = defineChain({\n id: 1,\n name: 'Ethereum',\n nativeCurrency: { decimals: 18, name: 'Ether', symbol: 'ETH' },\n rpcUrls: { default: { http: [rpc] } },\n })\n const publicClient = createPublicClient({ chain: ch, transport: http(rpc) })\n const executor = getAddress(args.executorAddress)\n\n const underlying = await publicClient.readContract({\n address: vault,\n abi: susdsVaultAbi,\n functionName: 'asset',\n })\n if (getAddress(underlying).toLowerCase() !== usdsCanonical.toLowerCase()) {\n throw new Error('sUSDS vault underlying does not match canonical USDS on Ethereum.')\n }\n\n const dec = await publicClient.readContract({\n address: usdsCanonical,\n abi: erc20AllowanceAbi,\n functionName: 'decimals',\n })\n const assetsWei = parseUnits(args.assetsHuman.trim(), Number(dec))\n if (assetsWei === 0n) throw new Error('Deposit amount is zero.')\n\n const steps: SkyMultisignBatchStep[] = []\n\n const currentAllowance = await publicClient.readContract({\n address: usdsCanonical,\n abi: erc20AllowanceAbi,\n functionName: 'allowance',\n args: [executor, vault],\n })\n if (currentAllowance < assetsWei) {\n if (currentAllowance > 0n) {\n steps.push({\n to: usdsCanonical,\n data: encodeFunctionData({\n abi: erc20ApproveAbi,\n functionName: 'approve',\n args: [vault, 0n],\n }),\n value: 0n,\n meta: {\n destinationAddress: usdsCanonical,\n signatureText: JSON.stringify({\n kind: 'Sky',\n name: 'ERC20.approve USDS reset',\n spender: vault,\n }),\n evm: { type: 'sky_susds_usds_approve', version: 1, chainId: '1' },\n sky: { step: 'approve_usds_reset_susds_vault', vault },\n },\n })\n }\n steps.push({\n to: usdsCanonical,\n data: encodeFunctionData({\n abi: erc20ApproveAbi,\n functionName: 'approve',\n args: [vault, assetsWei],\n }),\n value: 0n,\n meta: {\n destinationAddress: usdsCanonical,\n signatureText: JSON.stringify({\n kind: 'Sky',\n name: 'ERC20.approve USDS',\n spender: vault,\n amountWei: assetsWei.toString(),\n }),\n evm: { type: 'sky_susds_usds_approve', version: 1, chainId: '1' },\n sky: { step: 'approve_usds_susds_vault', vault },\n },\n })\n }\n\n const depositData = encodeFunctionData({\n abi: susdsVaultAbi,\n functionName: 'deposit',\n args: [assetsWei, executor],\n })\n steps.push({\n to: vault,\n data: depositData,\n value: 0n,\n meta: {\n destinationAddress: vault,\n signatureText: JSON.stringify({\n kind: 'Sky',\n name: 'sUSDS (ERC-4626).deposit',\n function: 'deposit(uint256 assets, address receiver)',\n assetsWei: assetsWei.toString(),\n assetsHuman: args.assetsHuman.trim(),\n receiver: executor,\n vault,\n underlying: usdsCanonical,\n }),\n evm: { type: 'sky_susds_deposit', version: 1, chainId: '1' },\n sky: { step: 'susds_deposit', vault },\n },\n })\n\n const purposePrefix = (() => {\n const t = args.purposeText.trim()\n const suffix = 'Sky sUSDS: deposit USDS into Savings vault (ERC-4626 deposit → mint shares).'\n return (t ? `${t}\\n\\n` : '') + suffix\n })()\n\n return appendSerializedSkyBatch({\n steps,\n publicClient,\n executor,\n chainId: 1,\n rpcUrl: rpc,\n chainDetail: args.chainDetail,\n useCustomGas: args.useCustomGas,\n customGasChainDetails: args.customGasChainDetails,\n purposePrefix,\n keyGen: args.keyGen,\n destinationChainID: '1',\n })\n}\n","import {\n createPublicClient,\n defineChain,\n formatUnits,\n http,\n parseAbi,\n type Address,\n type PublicClient,\n} from 'viem'\nimport { getAddress } from 'viem'\nimport {\n SKY_LOCKSTAKE_ENGINE_MAINNET,\n SKY_LOCKSTAKE_UI_COLLATERAL_FACTOR,\n SKY_TOKEN_DECIMALS,\n USDS_DECIMALS,\n} from './mainnet.js'\n\nconst RAY = 10n ** 27n\n\nconst engineAbi = parseAbi([\n 'function ownerUrnsCount(address usr) view returns (uint256)',\n 'function ownerUrns(address owner, uint256 index) view returns (address urn)',\n 'function urnFarms(address urn) view returns (address farm)',\n 'function ilk() view returns (bytes32)',\n 'function vat() view returns (address)',\n])\n\nconst vatAbi = parseAbi([\n 'function urns(bytes32 ilk, address urn) view returns (uint256 ink, uint256 art)',\n 'function ilks(bytes32 ilk) view returns (uint256 Art, uint256 rate, uint256 spot, uint256 line, uint256 dust)',\n])\n\nfunction skyClient(rpcUrl: string): PublicClient {\n const rpc = rpcUrl.trim()\n const ch = defineChain({\n id: 1,\n name: 'Ethereum',\n nativeCurrency: { decimals: 18, name: 'Ether', symbol: 'ETH' },\n rpcUrls: { default: { http: [rpc] } },\n })\n return createPublicClient({ chain: ch, transport: http(rpc) })\n}\n\n/** Debt in USDS wei matching `wipeAll` rounding (`_divup(art * rate, RAY)`). */\nexport function skyUsdsDebtWeiFromUrnArt(art: bigint, rate: bigint): bigint {\n if (art === 0n || rate === 0n) return 0n\n return (art * rate + RAY - 1n) / RAY\n}\n\nexport type SkyLockstakePositionRow = {\n index: number\n urn: Address\n inkWei: bigint\n art: bigint\n debtUsdsWei: bigint\n farm: Address\n /** Human-readable SKY locked */\n skyLocked: string\n /** Human-readable USDS debt */\n debtUsds: string\n /**\n * Remaining borrow headroom in USD for UI only: `(SKY locked × SKY/USD × SKY_LOCKSTAKE_UI_COLLATERAL_FACTOR) − debtUSD`.\n * Does not reflect on-chain liquidation price, oracle lag, stability fees, or protocol collateralization rules.\n */\n borrowLimitUsdApprox: number | null\n /** SKY/USD used only for the approximation above (same source as the dialog, e.g. CoinGecko). */\n skyPriceUsd: number | null\n}\n\nexport async function loadSkyLockstakePositions(args: {\n rpcUrl: string\n owner: Address\n skyUsd: number | null\n}): Promise<SkyLockstakePositionRow[]> {\n const client = skyClient(args.rpcUrl)\n const engine = getAddress(SKY_LOCKSTAKE_ENGINE_MAINNET)\n const ilk = await client.readContract({\n address: engine,\n abi: engineAbi,\n functionName: 'ilk',\n })\n const vat = await client.readContract({\n address: engine,\n abi: engineAbi,\n functionName: 'vat',\n })\n const count = await client.readContract({\n address: engine,\n abi: engineAbi,\n functionName: 'ownerUrnsCount',\n args: [args.owner],\n })\n const n = Number(count)\n if (!Number.isFinite(n) || n <= 0) return []\n\n const ilkInfo = await client.readContract({\n address: vat,\n abi: vatAbi,\n functionName: 'ilks',\n args: [ilk],\n })\n const rate = ilkInfo[1]\n\n const rows: SkyLockstakePositionRow[] = []\n for (let index = 0; index < n; index++) {\n const urn = await client.readContract({\n address: engine,\n abi: engineAbi,\n functionName: 'ownerUrns',\n args: [args.owner, BigInt(index)],\n })\n if (!urn || urn === '0x0000000000000000000000000000000000000000') continue\n const u = await client.readContract({\n address: vat,\n abi: vatAbi,\n functionName: 'urns',\n args: [ilk, urn],\n })\n const inkWei = u[0]\n const art = u[1]\n const debtUsdsWei = skyUsdsDebtWeiFromUrnArt(art, rate)\n const farm = await client.readContract({\n address: engine,\n abi: engineAbi,\n functionName: 'urnFarms',\n args: [urn],\n })\n\n const skyHuman = Number(formatUnits(inkWei, SKY_TOKEN_DECIMALS))\n const debtHuman = Number(formatUnits(debtUsdsWei, USDS_DECIMALS))\n let borrowLimitUsdApprox: number | null = null\n if (args.skyUsd != null && Number.isFinite(args.skyUsd) && args.skyUsd > 0) {\n const collateralUsd = skyHuman * args.skyUsd\n const maxDebtUsd = collateralUsd * SKY_LOCKSTAKE_UI_COLLATERAL_FACTOR\n borrowLimitUsdApprox = Math.max(0, maxDebtUsd - debtHuman)\n }\n\n rows.push({\n index,\n urn,\n inkWei,\n art,\n debtUsdsWei,\n farm,\n skyLocked: formatUnits(inkWei, SKY_TOKEN_DECIMALS),\n debtUsds: formatUnits(debtUsdsWei, USDS_DECIMALS),\n borrowLimitUsdApprox,\n skyPriceUsd: args.skyUsd,\n })\n }\n return rows\n}\n\nconst farmRewardsTokenAbi = parseAbi(['function rewardsToken() view returns (address)'])\n\n/** ERC-20 paid by `LockstakeEngine.getReward` for this urn’s farm (farm-dependent; read on-chain). */\nexport async function readSkyLockstakeFarmRewardsToken(args: { rpcUrl: string; farm: Address }): Promise<Address> {\n const client = skyClient(args.rpcUrl)\n const farm = getAddress(args.farm)\n const zero = '0x0000000000000000000000000000000000000000' as Address\n if (farm.toLowerCase() === zero.toLowerCase()) {\n throw new Error('Farm address is zero.')\n }\n const tok = await client.readContract({\n address: farm,\n abi: farmRewardsTokenAbi,\n functionName: 'rewardsToken',\n })\n return getAddress(tok)\n}\n","import {\n createPublicClient,\n defineChain,\n formatUnits,\n getAddress,\n http,\n parseAbi,\n type Address,\n} from 'viem'\nimport { SUSDS_VAULT_ERC4626_MAINNET } from './mainnet.js'\n\nconst vaultAbi = parseAbi([\n 'function balanceOf(address account) view returns (uint256)',\n 'function decimals() view returns (uint8)',\n 'function previewRedeem(uint256 shares) view returns (uint256 assets)',\n])\n\nexport async function readSusdsVaultShareBalanceWei(args: { rpcUrl: string; owner: Address }): Promise<bigint> {\n const rpc = args.rpcUrl.trim()\n const ch = defineChain({\n id: 1,\n name: 'Ethereum',\n nativeCurrency: { decimals: 18, name: 'Ether', symbol: 'ETH' },\n rpcUrls: { default: { http: [rpc] } },\n })\n const client = createPublicClient({ chain: ch, transport: http(rpc) })\n const vault = getAddress(SUSDS_VAULT_ERC4626_MAINNET)\n return client.readContract({\n address: vault,\n abi: vaultAbi,\n functionName: 'balanceOf',\n args: [args.owner],\n })\n}\n\nexport async function readSusdsVaultDecimals(args: { rpcUrl: string }): Promise<number> {\n const rpc = args.rpcUrl.trim()\n const ch = defineChain({\n id: 1,\n name: 'Ethereum',\n nativeCurrency: { decimals: 18, name: 'Ether', symbol: 'ETH' },\n rpcUrls: { default: { http: [rpc] } },\n })\n const client = createPublicClient({ chain: ch, transport: http(rpc) })\n const vault = getAddress(SUSDS_VAULT_ERC4626_MAINNET)\n const d = await client.readContract({\n address: vault,\n abi: vaultAbi,\n functionName: 'decimals',\n })\n return Number(d)\n}\n\n/** Approximate USDS out for `sharesWei` at current vault exchange rate (same block rules as `redeem`). */\nexport async function readSusdsPreviewRedeemAssetsWei(args: {\n rpcUrl: string\n sharesWei: bigint\n}): Promise<bigint> {\n if (args.sharesWei <= 0n) return 0n\n const rpc = args.rpcUrl.trim()\n const ch = defineChain({\n id: 1,\n name: 'Ethereum',\n nativeCurrency: { decimals: 18, name: 'Ether', symbol: 'ETH' },\n rpcUrls: { default: { http: [rpc] } },\n })\n const client = createPublicClient({ chain: ch, transport: http(rpc) })\n const vault = getAddress(SUSDS_VAULT_ERC4626_MAINNET)\n return client.readContract({\n address: vault,\n abi: vaultAbi,\n functionName: 'previewRedeem',\n args: [args.sharesWei],\n })\n}\n\nexport function formatSusdsSharesHuman(sharesWei: bigint, decimals: number): string {\n return formatUnits(sharesWei, decimals)\n}\n","/**\n * Optional browser → Next.js API proxy paths for DeFi upstream calls.\n * Set once from continuumdao-node-app client bootstrap.\n */\n\nlet aaveGraphqlProxyUrl: string | undefined\nlet eulerGraphqlProxyUrl: string | undefined\nlet mapleGraphqlProxyUrl: string | undefined\nlet morphoGraphqlProxyUrl: string | undefined\nlet coingeckoProxyUrl: string | undefined\n\nexport function setAaveGraphqlProxyUrl(url: string | undefined): void {\n aaveGraphqlProxyUrl = url?.trim() || undefined\n}\n\nexport function getAaveGraphqlProxyUrl(): string | undefined {\n return aaveGraphqlProxyUrl\n}\n\nexport function setEulerGraphqlProxyUrl(url: string | undefined): void {\n eulerGraphqlProxyUrl = url?.trim() || undefined\n}\n\nexport function getEulerGraphqlProxyUrl(): string | undefined {\n return eulerGraphqlProxyUrl\n}\n\nexport function setMapleGraphqlProxyUrl(url: string | undefined): void {\n mapleGraphqlProxyUrl = url?.trim() || undefined\n}\n\nexport function getMapleGraphqlProxyUrl(): string | undefined {\n return mapleGraphqlProxyUrl\n}\n\nexport function setMorphoGraphqlProxyUrl(url: string | undefined): void {\n morphoGraphqlProxyUrl = url?.trim() || undefined\n}\n\nexport function getMorphoGraphqlProxyUrl(): string | undefined {\n return morphoGraphqlProxyUrl\n}\n\nexport function setCoingeckoProxyUrl(url: string | undefined): void {\n coingeckoProxyUrl = url?.trim() || undefined\n}\n\nexport function getCoingeckoProxyUrl(): string | undefined {\n return coingeckoProxyUrl\n}\n\nexport async function postJsonViaOptionalProxy<T>(args: {\n directUrl: string\n body: unknown\n proxyUrl?: string\n proxyEnvelope?: unknown\n}): Promise<T> {\n const proxy = args.proxyUrl?.trim()\n if (proxy) {\n const r = await fetch(proxy, {\n method: 'POST',\n headers: {'content-type': 'application/json'},\n body: JSON.stringify(args.proxyEnvelope ?? args.body),\n })\n if (!r.ok) {\n const t = await r.text().catch(() => '')\n throw new Error(t ? `Proxy HTTP ${r.status}: ${t.slice(0, 200)}` : `Proxy HTTP ${r.status}`)\n }\n return (await r.json()) as T\n }\n const r = await fetch(args.directUrl, {\n method: 'POST',\n headers: {'content-type': 'application/json'},\n body: JSON.stringify(args.body),\n })\n if (!r.ok) {\n const t = await r.text().catch(() => '')\n throw new Error(t ? `HTTP ${r.status}: ${t.slice(0, 200)}` : `HTTP ${r.status}`)\n }\n return (await r.json()) as T\n}\n","import { getAddress } from 'viem'\nimport { getCoingeckoProxyUrl } from '../../../core/defiProxy.js'\nimport { SKY_ETHEREUM_MAINNET } from './mainnet.js'\n\n/** CoinGecko simple token price for SKY on Ethereum (USD). */\nexport async function fetchSkyUsdFromCoinGecko(): Promise<number | null> {\n try {\n const addr = getAddress(SKY_ETHEREUM_MAINNET as `0x${string}`).toLowerCase()\n const url =\n 'https://api.coingecko.com/api/v3/simple/token_price/ethereum?contract_addresses=' +\n encodeURIComponent(addr) +\n '&vs_currencies=usd'\n const proxy = getCoingeckoProxyUrl()\n const res = proxy\n ? await fetch(proxy, {\n method: 'POST',\n headers: {'content-type': 'application/json'},\n body: JSON.stringify({platform: 'ethereum', contractAddress: addr}),\n })\n : await fetch(url, {cache: 'no-store'})\n if (!res.ok) return null\n const raw = (await res.json()) as Record<string, { usd?: number } | undefined>\n const row = raw[addr]\n const n = row?.usd\n return typeof n === 'number' && Number.isFinite(n) && n > 0 ? n : null\n } catch {\n return null\n }\n}\n","/**\n * Chains where Sky LockStake Engine multisign flows are implemented.\n * Sky tokens exist on other networks; LockStake staking/borrow in this app tracks engine deployments only.\n */\nexport function loadSkyLockstakeSupportedChainIds(): ReadonlySet<number> {\n return new Set([1])\n}\n","import type { ProtocolModule } from '../../../core/types.js'\nimport { registerProtocolModule } from '../../../core/registry.js'\nimport { SKY_ETHEREUM_MAINNET_CHAIN_ID } from './mainnet.js'\n\nexport * from './mainnet.js'\nexport * from './lockstakeMultisign.js'\nexport * from './susdsMultisign.js'\nexport * from './lockstakeRead.js'\nexport * from './susdsRead.js'\nexport * from './usdPrice.js'\nexport * from './loadLockstakeSupportedChainIds.js'\n\nexport const SKY_PROTOCOL_ID = 'sky'\n\nexport const skyProtocolModule: ProtocolModule = {\n id: SKY_PROTOCOL_ID,\n chainCategory: 'evm',\n isChainSupported(ctx) {\n if (ctx.chainCategory !== 'evm') return false\n return Number(ctx.chainId) === SKY_ETHEREUM_MAINNET_CHAIN_ID\n },\n isTokenSupported(token) {\n return token.category === 'evm' && token.kind === 'erc20'\n },\n actions: [\n { id: 'sky.lockstake-stake', protocolId: SKY_PROTOCOL_ID, chainCategory: 'evm', description: 'Open Lockstake position', commonParams: ['keyGen', 'purposeText', 'useCustomGas'], params: {} },\n { id: 'sky.lockstake-draw', protocolId: SKY_PROTOCOL_ID, chainCategory: 'evm', description: 'Borrow USDS from Lockstake', commonParams: ['keyGen', 'purposeText', 'useCustomGas'], params: {} },\n { id: 'sky.lockstake-wipe', protocolId: SKY_PROTOCOL_ID, chainCategory: 'evm', description: 'Repay Lockstake debt', commonParams: ['keyGen', 'purposeText', 'useCustomGas'], params: {} },\n { id: 'sky.lockstake-close', protocolId: SKY_PROTOCOL_ID, chainCategory: 'evm', description: 'Close Lockstake position', commonParams: ['keyGen', 'purposeText', 'useCustomGas'], params: {} },\n { id: 'sky.susds-deposit', protocolId: SKY_PROTOCOL_ID, chainCategory: 'evm', description: 'Deposit USDS into sUSDS vault', commonParams: ['keyGen', 'purposeText', 'useCustomGas'], params: {} },\n { id: 'sky.susds-redeem', protocolId: SKY_PROTOCOL_ID, chainCategory: 'evm', description: 'Redeem sUSDS to USDS', commonParams: ['keyGen', 'purposeText', 'useCustomGas'], params: {} },\n ],\n}\n\nregisterProtocolModule(skyProtocolModule)\n"]}