@continuumdao/ctm-mpc-defi 0.1.3 → 0.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (68) hide show
  1. package/README.md +16 -1
  2. package/dist/agent/catalog.cjs +913 -142
  3. package/dist/agent/catalog.cjs.map +1 -1
  4. package/dist/agent/catalog.d.cts +834 -12
  5. package/dist/agent/catalog.d.ts +834 -12
  6. package/dist/agent/catalog.js +863 -143
  7. package/dist/agent/catalog.js.map +1 -1
  8. package/dist/chains/evm/index.cjs +13 -0
  9. package/dist/chains/evm/index.cjs.map +1 -1
  10. package/dist/chains/evm/index.d.cts +3 -1
  11. package/dist/chains/evm/index.d.ts +3 -1
  12. package/dist/chains/evm/index.js +13 -1
  13. package/dist/chains/evm/index.js.map +1 -1
  14. package/dist/core/index.cjs +76 -0
  15. package/dist/core/index.cjs.map +1 -1
  16. package/dist/core/index.d.cts +35 -2
  17. package/dist/core/index.d.ts +35 -2
  18. package/dist/core/index.js +70 -1
  19. package/dist/core/index.js.map +1 -1
  20. package/dist/index.cjs +934 -141
  21. package/dist/index.cjs.map +1 -1
  22. package/dist/index.d.cts +3 -2
  23. package/dist/index.d.ts +3 -2
  24. package/dist/index.js +927 -142
  25. package/dist/index.js.map +1 -1
  26. package/dist/protocols/evm/aave-v4/index.cjs +1987 -0
  27. package/dist/protocols/evm/aave-v4/index.cjs.map +1 -0
  28. package/dist/protocols/evm/aave-v4/index.d.cts +500 -0
  29. package/dist/protocols/evm/aave-v4/index.d.ts +500 -0
  30. package/dist/protocols/evm/aave-v4/index.js +1943 -0
  31. package/dist/protocols/evm/aave-v4/index.js.map +1 -0
  32. package/dist/protocols/evm/ethena/index.cjs +965 -0
  33. package/dist/protocols/evm/ethena/index.cjs.map +1 -0
  34. package/dist/protocols/evm/ethena/index.d.cts +161 -0
  35. package/dist/protocols/evm/ethena/index.d.ts +161 -0
  36. package/dist/protocols/evm/ethena/index.js +943 -0
  37. package/dist/protocols/evm/ethena/index.js.map +1 -0
  38. package/dist/protocols/evm/euler-v2/index.cjs +2263 -0
  39. package/dist/protocols/evm/euler-v2/index.cjs.map +1 -0
  40. package/dist/protocols/evm/euler-v2/index.d.cts +317 -0
  41. package/dist/protocols/evm/euler-v2/index.d.ts +317 -0
  42. package/dist/protocols/evm/euler-v2/index.js +2238 -0
  43. package/dist/protocols/evm/euler-v2/index.js.map +1 -0
  44. package/dist/protocols/evm/lido/index.cjs +834 -0
  45. package/dist/protocols/evm/lido/index.cjs.map +1 -0
  46. package/dist/protocols/evm/lido/index.d.cts +120 -0
  47. package/dist/protocols/evm/lido/index.d.ts +120 -0
  48. package/dist/protocols/evm/lido/index.js +809 -0
  49. package/dist/protocols/evm/lido/index.js.map +1 -0
  50. package/dist/protocols/evm/maple/index.cjs +707 -0
  51. package/dist/protocols/evm/maple/index.cjs.map +1 -0
  52. package/dist/protocols/evm/maple/index.d.cts +109 -0
  53. package/dist/protocols/evm/maple/index.d.ts +109 -0
  54. package/dist/protocols/evm/maple/index.js +693 -0
  55. package/dist/protocols/evm/maple/index.js.map +1 -0
  56. package/dist/protocols/evm/sky/index.cjs +1254 -0
  57. package/dist/protocols/evm/sky/index.cjs.map +1 -0
  58. package/dist/protocols/evm/sky/index.d.cts +218 -0
  59. package/dist/protocols/evm/sky/index.d.ts +218 -0
  60. package/dist/protocols/evm/sky/index.js +1229 -0
  61. package/dist/protocols/evm/sky/index.js.map +1 -0
  62. package/dist/protocols/evm/uniswap-v4/index.cjs +31 -11
  63. package/dist/protocols/evm/uniswap-v4/index.cjs.map +1 -1
  64. package/dist/protocols/evm/uniswap-v4/index.d.cts +2 -1
  65. package/dist/protocols/evm/uniswap-v4/index.d.ts +2 -1
  66. package/dist/protocols/evm/uniswap-v4/index.js +31 -11
  67. package/dist/protocols/evm/uniswap-v4/index.js.map +1 -1
  68. package/package.json +37 -3
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../../src/core/registry.ts","../../../../src/protocols/evm/lido/mainnet.ts","../../../../src/core/keygen.ts","../../../../src/chains/evm/txParams.ts","../../../../src/chains/evm/fees/chainFees.ts","../../../../src/chains/evm/fees/eip1559Align.ts","../../../../src/protocols/evm/lido/multisign.ts","../../../../src/protocols/evm/lido/index.ts"],"names":["gasPriceGwei","defineChain","createPublicClient","http","getAddress","parseGwei"],"mappings":"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","file":"index.js","sourcesContent":["import type { ProtocolModule } from './types.js'\n\nconst modules: ProtocolModule[] = []\n\nexport function registerProtocolModule(mod: ProtocolModule): void {\n const existing = modules.findIndex((m) => m.id === mod.id)\n if (existing >= 0) {\n modules[existing] = mod\n } else {\n modules.push(mod)\n }\n}\n\nexport function getProtocolModules(): readonly ProtocolModule[] {\n return modules\n}\n\nexport function getProtocolModule(id: string): ProtocolModule | undefined {\n return modules.find((m) => m.id === id)\n}\n\nexport function getActionsByChainCategory(category: string): ProtocolModule['actions'] {\n return modules.filter((m) => m.chainCategory === category).flatMap((m) => m.actions)\n}\n","import { getAddress, zeroAddress, type Address } from 'viem'\n\n/** Lido staking / stERC-20 (“stETH”) on Ethereum mainnet — same proxy for `submit` + ERC‑20 balances. */\nexport const LIDO_STETH_CONTRACT_MAINNET = getAddress(\n '0xae7ab96520DE3A18E5e111B5EaAb095312D7fE84',\n)\n\n/** Lido Wrapped stETH (ERC-20): `wrap` / `unwrap`. */\nexport const LIDO_WSTETH_CONTRACT_MAINNET = getAddress(\n '0x7f39C581F595B853cBbF37C12FfeeA971C5a5bEa',\n)\n\n/** EIP-7623-era Withdrawal Queue (NFT-backed requests). */\nexport const LIDO_WITHDRAWAL_QUEUE_MAINNET = getAddress('0x889edC2eDab5f40e902b864aD4d7AdE8E412F9B1')\n\nexport const LIDO_ETHEREUM_MAINNET_CHAIN_ID = 1\n\n/** Accepted referral pad for `submit`; zero is valid. */\nexport const LIDO_SUBMIT_REFERRAL_MAINNET = zeroAddress satisfies Address\n\nexport function isEthereumMainnetChainId(chainIdStr: string | undefined | null): boolean {\n return String(chainIdStr ?? '').trim() === String(LIDO_ETHEREUM_MAINNET_CHAIN_ID)\n}\n","import type { KeyGenSubset } from './types.js'\n\nexport type { KeyGenSubset }\n\n/** App-compatible alias used by existing multisign builders. */\nexport type KeyGenSubsetForPermit = KeyGenSubset\n\nexport function firstClientIdFromKeyGen(data: KeyGenSubset | null | undefined): string | null {\n const map = data?.ClientKeys\n if (!map || typeof map !== 'object') return null\n for (const v of Object.values(map)) {\n if (typeof v === 'string' && v.trim()) return v.trim()\n }\n return null\n}\n\nexport function requirePubKeyHex(keyGen: KeyGenSubset): string {\n const ph = (keyGen.pubkeyhex ?? '').trim()\n if (!ph) throw new Error('keyGen pubKey (pubkeyhex) is required')\n return ph\n}\n\nexport function keyListFromKeyGen(keyGen: KeyGenSubset): string[] {\n return keyGen.keylist ?? []\n}\n","/**\n * Proposal-time EVM fields for POST /multiSignRequest (mpc-auth).\n * Same shape as trigger txParams and GET /getSignRequestById?tx_params=1.\n */\n\nexport type ProposalTxParams = {\n nonce: number\n gasLimit: string\n txType: 'eip1559' | 'legacy'\n maxFeePerGas?: string\n maxPriorityFeePerGas?: string\n gasPrice?: string\n}\n\nexport function gasLimitFromEstimateAndChainConfig(\n estimatedGas: bigint,\n chainGasLimit?: number,\n): bigint {\n if (chainGasLimit == null || !Number.isFinite(chainGasLimit) || chainGasLimit <= 0) {\n return estimatedGas\n }\n const cfg = BigInt(Math.floor(chainGasLimit))\n return cfg > estimatedGas ? cfg : estimatedGas\n}\n\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\nexport function composeFeePayloadToTxParams(\n p: Record<string, unknown>,\n legacy: boolean,\n): ProposalTxParams | undefined {\n const gl = p.txGasLimit ?? p.txgaslimit\n if (gl == null || String(gl).trim() === '') return undefined\n const n = p.txNonce ?? p.txnonce\n let nonce = 0\n if (typeof n === 'bigint') nonce = Number(n)\n else if (typeof n === 'number') nonce = n\n else if (n != null) nonce = parseInt(String(n), 10)\n if (!Number.isFinite(nonce)) nonce = 0\n const gasLimit = String(gl)\n if (legacy) {\n const gp = p.txGasPrice ?? p.txgasprice\n return {\n nonce,\n gasLimit,\n txType: 'legacy',\n gasPrice: gp != null ? String(gp) : '0',\n }\n }\n return {\n nonce,\n gasLimit,\n txType: 'eip1559',\n maxFeePerGas: String(p.txMaxFeePerGas ?? ''),\n maxPriorityFeePerGas: String(p.txMaxPriorityFeePerGas ?? ''),\n }\n}\n\nexport function triggerTxParamsFromComposeBody(body: Record<string, unknown>): ProposalTxParams {\n const existing = body.txParams\n if (existing && typeof existing === 'object' && !Array.isArray(existing)) {\n const o = existing as ProposalTxParams & { gasLimit?: string }\n if (String(o.gasLimit ?? '').trim() !== '') {\n return { ...o }\n }\n }\n const pb = body.proposalTxParams\n if (Array.isArray(pb) && pb.length > 0 && typeof pb[0] === 'object' && pb[0] !== null) {\n const first = pb[0] as ProposalTxParams & { gasLimit?: string }\n if (String(first.gasLimit ?? '').trim() !== '') {\n return { ...first }\n }\n }\n const fromSnapshot = composeFeePayloadToTxParams(\n body,\n body.txMaxFeePerGas == null && body.txMaxPriorityFeePerGas == null,\n )\n if (fromSnapshot) return fromSnapshot\n return {\n nonce: 0,\n gasLimit: '',\n txType: 'legacy',\n gasPrice: '0',\n }\n}\n\nexport function proposalTxParamsToFeeSnapshot(\n params: ProposalTxParams,\n): Record<string, unknown> {\n if (params.txType === 'legacy') {\n return {\n txNonce: params.nonce,\n txGasLimit: params.gasLimit,\n txGasPrice: params.gasPrice ?? '0',\n }\n }\n return {\n txNonce: params.nonce,\n txGasLimit: params.gasLimit,\n txMaxFeePerGas: params.maxFeePerGas ?? '',\n txMaxPriorityFeePerGas: params.maxPriorityFeePerGas ?? '',\n }\n}\n","import { createPublicClient, http, defineChain, formatUnits } from 'viem'\n\nexport interface ChainFeeParams {\n isEip1559: boolean\n baseFeeGwei?: number\n priorityFeeGwei?: number\n gasPriceGwei?: number\n}\n\nexport async function fetchChainFeeParams(\n rpcUrl: string,\n chainId: number | string,\n): Promise<ChainFeeParams> {\n const url = rpcUrl.trim()\n if (!url) return { isEip1559: false }\n\n const chainIdNum = typeof chainId === 'string' ? parseInt(chainId, 10) : chainId\n if (Number.isNaN(chainIdNum)) return { isEip1559: false }\n\n const chain = defineChain({\n id: chainIdNum,\n name: 'Discovery',\n nativeCurrency: { decimals: 18, name: 'Ether', symbol: 'ETH' },\n rpcUrls: { default: { http: [url] } },\n })\n\n const publicClient = createPublicClient({\n chain,\n transport: http(url),\n })\n\n const getGasPriceGwei = async (): Promise<number> => {\n const gasPriceWei = await publicClient.getGasPrice()\n return parseFloat(formatUnits(gasPriceWei, 9))\n }\n\n try {\n const block = await publicClient.getBlock({ blockTag: 'latest' })\n const baseFeePerGas = block?.baseFeePerGas\n if (baseFeePerGas == null || baseFeePerGas === undefined) {\n const gasPriceGwei = await getGasPriceGwei()\n return { isEip1559: false, gasPriceGwei }\n }\n\n const baseFeeGwei = parseFloat(formatUnits(baseFeePerGas, 9))\n\n let priorityFeeGwei: number | undefined\n try {\n const priorityWei = await publicClient.estimateMaxPriorityFeePerGas()\n priorityFeeGwei = parseFloat(formatUnits(priorityWei, 9))\n } catch {\n /* chain may not support eth_maxPriorityFeePerGas */\n }\n\n const gasPriceGwei = await getGasPriceGwei()\n return {\n isEip1559: true,\n baseFeeGwei,\n priorityFeeGwei,\n gasPriceGwei,\n }\n } catch {\n try {\n const gasPriceWei = await publicClient.getGasPrice()\n const gasPriceGwei = parseFloat(formatUnits(gasPriceWei, 9))\n return { isEip1559: false, gasPriceGwei }\n } catch {\n return { isEip1559: false }\n }\n }\n}\n","import { parseGwei } from 'viem'\n\nexport type ResolvedEip1559Fees = {\n maxFeePerGas: bigint\n maxPriorityFeePerGas: bigint\n}\n\nfunction finalizeEip1559Fees(\n maxFeePerGas: bigint,\n maxPriorityFeePerGas: bigint,\n floor: { maxFeePerGas: bigint; maxPriorityFeePerGas: bigint } | null | undefined,\n baseWei: bigint,\n): ResolvedEip1559Fees {\n let maxP = maxPriorityFeePerGas\n let maxF = maxFeePerGas\n if (floor) {\n if (maxP < floor.maxPriorityFeePerGas) maxP = floor.maxPriorityFeePerGas\n if (maxF < floor.maxFeePerGas) maxF = floor.maxFeePerGas\n }\n if (baseWei > 0n && maxF < baseWei + maxP) {\n maxF = baseWei + maxP + parseGwei('0.001')\n }\n if (maxF < maxP) {\n maxF = baseWei > 0n ? baseWei + maxP + parseGwei('0.001') : maxP * 2n\n }\n return { maxFeePerGas: maxF, maxPriorityFeePerGas: maxP }\n}\n\n/** Align EIP-1559 fees with the latest head base fee (same rules as Get Sig). */\nexport function alignEip1559FeesWithLatestBase(\n maxFeePerGas: bigint,\n maxPriorityFeePerGas: bigint,\n latestBlockBaseFeeWei: bigint,\n): ResolvedEip1559Fees {\n return finalizeEip1559Fees(maxFeePerGas, maxPriorityFeePerGas, null, latestBlockBaseFeeWei)\n}\n\nexport function gweiToDecimalString(n: number): string {\n if (!Number.isFinite(n)) return '0'\n if (n === 0) return '0'\n const s = String(n)\n if (s.indexOf('e') !== -1 || s.indexOf('E') !== -1) return n.toFixed(9).replace(/\\.?0+$/, '') || '0'\n return s\n}\n","/**\n * Lido on Ethereum — multi-sign payloads for stake (`submit`), queue exit (`approve` + `requestWithdrawals`),\n * and finalized claim (`claimWithdrawal`).\n */\nimport {\n type Address,\n createPublicClient,\n defineChain,\n encodeFunctionData,\n getAddress,\n http,\n keccak256,\n parseAbi,\n parseGwei,\n parseUnits,\n serializeTransaction,\n} from 'viem'\nimport { firstClientIdFromKeyGen, type KeyGenSubsetForPermit } from '../../../core/keygen.js'\nimport { gasLimitFromEstimateAndChainConfig, type ProposalTxParams } from '../../../chains/evm/txParams.js'\nimport { fetchChainFeeParams } from '../../../chains/evm/fees/chainFees.js'\nimport { alignEip1559FeesWithLatestBase } from '../../../chains/evm/fees/eip1559Align.js'\nimport {\n LIDO_ETHEREUM_MAINNET_CHAIN_ID,\n LIDO_STETH_CONTRACT_MAINNET,\n LIDO_WITHDRAWAL_QUEUE_MAINNET,\n LIDO_SUBMIT_REFERRAL_MAINNET,\n LIDO_WSTETH_CONTRACT_MAINNET,\n} from './mainnet.js'\n\nexport const LIDO_SUBMIT_FALLBACK_GAS_UNITS = 450_000n\nconst LIDO_APPROVE_FALLBACK = 110_000n\nexport const LIDO_REQUEST_WITHDRAWALS_FALLBACK_GAS_UNITS = 1_350_000n\nexport const LIDO_CLAIM_WITHDRAWAL_FALLBACK_GAS_UNITS = 900_000n\n/** `wrap(stETH)` on wstETH. */\nexport const LIDO_WSTETH_WRAP_FALLBACK_GAS_UNITS = 520_000n\n/** `unwrap(wstETH)` on wstETH. */\nexport const LIDO_WSTETH_UNWRAP_FALLBACK_GAS_UNITS = 600_000n\nexport const MIN_LIDO_EXECUTE_GAS = 260_000n\n\nconst erc20Abi = parseAbi([\n 'function allowance(address owner, address spender) view returns (uint256)',\n 'function approve(address spender, uint256 amount) returns (bool)',\n])\nconst lidoAbi = parseAbi([\n 'function submit(address referral) payable returns (uint256)',\n 'function getSharesByPooledEth(uint256 ethAmount) view returns (uint256)',\n])\nconst wqAbi = parseAbi([\n 'function MIN_STETH_WITHDRAWAL_AMOUNT() view returns (uint256)',\n 'function MAX_STETH_WITHDRAWAL_AMOUNT() view returns (uint256)',\n 'function requestWithdrawals(uint256[] amounts, address owner) returns (uint256[] requestIds)',\n 'function claimWithdrawal(uint256 requestId)',\n])\nconst wstethAbi = parseAbi([\n 'function wrap(uint256 stETHAmount) returns (uint256)',\n 'function unwrap(uint256 wstETHAmount) returns (uint256)',\n])\n\ntype ChainRow = {\n legacy?: boolean\n gasLimit?: number\n gasMultiplier?: number\n gasPrice?: number\n baseFee?: number\n priorityFee?: number\n baseFeeMultiplier?: number\n}\n\nfunction gweiToDecimalString(n: number): string {\n if (!Number.isFinite(n)) return '0'\n if (n === 0) return '0'\n const s = String(n)\n if (s.indexOf('e') !== -1 || s.indexOf('E') !== -1) return n.toFixed(9).replace(/\\.?0+$/, '') || '0'\n return s\n}\n\nfunction parseExtraJsonObject(detail: Record<string, unknown> | null | undefined): Record<string, unknown> | 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 parseOptionalGasLimitString(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\nexport const LIDO_EVM_TYPES = new Set([\n 'lido_submit',\n 'lido_steth_approve',\n 'lido_request_withdrawals',\n 'lido_claim_withdrawal',\n 'lido_wsteth_wrap',\n 'lido_wsteth_unwrap',\n])\n\n/** 0-based batch indices whose `batchMeta[i].evm.type` is `lido_request_withdrawals`. */\nexport function lidoRequestWithdrawalsBatchIndices(\n detail: Record<string, unknown> | null | undefined,\n): number[] {\n const ex = parseExtraJsonObject(detail)\n if (!ex) return []\n const bm = ex.batchMeta\n if (!Array.isArray(bm)) return []\n const out: number[] = []\n bm.forEach((entry, idx) => {\n if (!entry || typeof entry !== 'object' || Array.isArray(entry)) return\n const evm = (entry as Record<string, unknown>).evm\n if (!evm || typeof evm !== 'object' || Array.isArray(evm)) return\n const t = String((evm as Record<string, unknown>).type ?? '').trim()\n if (t === 'lido_request_withdrawals') out.push(idx)\n })\n return out\n}\n\nexport function isLidoBatchStepEvmSignRequest(\n detail: Record<string, unknown> | null | undefined,\n batchIndex: number,\n): boolean {\n const ex = parseExtraJsonObject(detail)\n if (!ex) return false\n const idx = batchIndex >= 0 ? batchIndex : 0\n const bm = ex.batchMeta\n if (Array.isArray(bm) && bm[idx] && typeof bm[idx] === 'object' && !Array.isArray(bm[idx])) {\n const evm0 = (bm[idx] as Record<string, unknown>).evm\n if (evm0 && typeof evm0 === 'object' && !Array.isArray(evm0)) {\n const t = String((evm0 as Record<string, unknown>).type ?? '')\n if (LIDO_EVM_TYPES.has(t)) return true\n }\n }\n return false\n}\n\nexport function resolveLidoBatchStepGasFromSignRequest(\n detail: Record<string, unknown> | null | undefined,\n batchIndex: number,\n): bigint | null {\n if (!detail) return null\n const idx = batchIndex >= 0 ? batchIndex : 0\n const propBatch = (detail.proposal_tx_params ?? detail.proposalTxParams ?? detail.ProposalTxParams) as unknown\n if (Array.isArray(propBatch) && propBatch.length > idx) {\n const row = propBatch[idx]\n if (row && typeof row === 'object' && !Array.isArray(row)) {\n const r = row as Record<string, unknown>\n const gl = parseOptionalGasLimitString(\n (r.gas_limit ?? r.gasLimit ?? r.GasLimit) as string | number | undefined,\n )\n if (gl != null && gl > 0n) return gl\n }\n }\n const ex = parseExtraJsonObject(detail)\n const bm = ex?.batchMeta\n if (Array.isArray(bm) && bm[idx] && typeof bm[idx] === 'object' && !Array.isArray(bm[idx])) {\n const l = (bm[idx] as Record<string, unknown>).lido as Record<string, unknown> | undefined\n const gs =\n (l?.gasSubmit ??\n l?.gasApprove ??\n l?.gasRequestWithdrawals ??\n l?.gasClaimWithdrawal ??\n l?.gasWstethWrap ??\n l?.gasWstethUnwrap) as Record<string, unknown> | undefined\n const base = parseOptionalGasLimitString(gs?.baseGasUnits as string | number | undefined)\n if (base != null && base > 0n) return base\n }\n return null\n}\n\ntype BuildStepTx = {\n to: Address\n data: `0x${string}`\n value: bigint\n}\n\ntype StepKind = BuildStepTx & {\n fallbackGas: bigint\n buildBatchMeta: (ctx: { gasLimit: bigint }) => Record<string, unknown>\n}\n\nasync function finalizeLidoMultipart(\n steps: StepKind[],\n args: {\n keyGen: KeyGenSubsetForPermit\n rpcUrl: string\n chainDetail: ChainRow\n useCustomGas: boolean\n customGasChainDetails?: Record<string, unknown> | null\n purposeText: string\n purposeSuffix: string\n executorAddress: Address\n },\n): Promise<{ bodyForSign: Record<string, unknown>; messageToSign: string }> {\n const ph = (args.keyGen.pubkeyhex ?? '').trim()\n if (!ph) throw new Error('keyGen pubKey (pubkeyhex) is required')\n const keyList = args.keyGen.keylist ?? []\n const clientId = firstClientIdFromKeyGen(args.keyGen)\n const ch = defineChain({\n id: LIDO_ETHEREUM_MAINNET_CHAIN_ID,\n name: 'Ethereum',\n nativeCurrency: { decimals: 18, name: 'Ether', symbol: 'ETH' },\n rpcUrls: { default: { http: [args.rpcUrl.trim()] } },\n })\n const publicClient = createPublicClient({ chain: ch, transport: http(args.rpcUrl.trim()) })\n\n const feeParams = await fetchChainFeeParams(args.rpcUrl.trim(), LIDO_ETHEREUM_MAINNET_CHAIN_ID)\n const legacy = Boolean(args.chainDetail?.legacy) || !feeParams.isEip1559\n const latestBaseFeeWei =\n !legacy ? (await publicClient.getBlock({ blockTag: 'latest' })).baseFeePerGas ?? 0n : 0n\n const useCustomGas = args.useCustomGas\n const gasLimitConfig =\n useCustomGas && args.chainDetail?.gasLimit != null ? Number(args.chainDetail.gasLimit) : undefined\n const gasFeeMultiplier =\n useCustomGas && args.chainDetail?.gasMultiplier != null ? Number(args.chainDetail.gasMultiplier) : undefined\n\n const executor = getAddress(args.executorAddress)\n const baseNonce = await publicClient.getTransactionCount({ address: executor, blockTag: 'pending' })\n\n const messageHashes: string[] = []\n const messageRawBatch: string[] = []\n const proposalTxParamsBatch: ProposalTxParams[] = []\n let firstTxFeePayload: Record<string, unknown> = {}\n let firstDataNo0x = ''\n const batchMeta: Record<string, unknown>[] = []\n\n for (let i = 0; i < steps.length; i++) {\n const s = steps[i]!\n const v = getAddress(s.to)\n const data = s.data\n const currentNonce = baseNonce + i\n let estimatedGas: bigint\n try {\n estimatedGas = await publicClient.estimateGas({\n to: v,\n data,\n value: s.value,\n account: executor,\n })\n } catch {\n estimatedGas = s.fallbackGas\n }\n const gasLimitI = useCustomGas ? gasLimitFromEstimateAndChainConfig(estimatedGas, gasLimitConfig) : estimatedGas\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 && args.chainDetail?.gasPrice != null && args.chainDetail.gasPrice > 0) {\n const configured = parseGwei(gweiToDecimalString(Number(args.chainDetail.gasPrice)))\n if (configured > gasPriceWei) gasPriceWei = configured\n }\n const ser = serializeTransaction({\n type: 'legacy',\n to: v,\n data,\n value: s.value,\n gas: gasLimitI,\n gasPrice: gasPriceWei,\n nonce: currentNonce,\n chainId: LIDO_ETHEREUM_MAINNET_CHAIN_ID,\n })\n const h = keccak256(ser)\n messageHashes.push(h.startsWith('0x') ? h.slice(2) : h)\n messageRawBatch.push(ser)\n proposalTxParamsBatch.push({\n nonce: currentNonce,\n gasLimit: gasLimitI.toString(),\n txType: 'legacy',\n gasPrice: gasPriceWei.toString(),\n })\n if (i === 0) {\n firstTxFeePayload = { txNonce: currentNonce, txGasLimit: gasLimitI.toString(), txGasPrice: gasPriceWei.toString() }\n firstDataNo0x = data.startsWith('0x') ? data.slice(2) : data\n }\n } else {\n const fetchedBase = feeParams.baseFeeGwei ?? 0\n const fetchedPriority = feeParams.priorityFeeGwei ?? 0\n const configuredBase =\n useCustomGas && args.chainDetail?.baseFee != null ? Number(args.chainDetail.baseFee) : 0\n const configuredPriority =\n useCustomGas && args.chainDetail?.priorityFee != null ? Number(args.chainDetail.priorityFee) : 0\n const effectiveBaseFeeGwei = Math.max(fetchedBase, configuredBase)\n const effectivePriorityFeeGwei = Math.max(fetchedPriority, configuredPriority)\n const baseFeeMultiplierPct =\n useCustomGas && args.chainDetail?.baseFeeMultiplier != null\n ? Math.max(100, Number(args.chainDetail.baseFeeMultiplier))\n : 100\n const baseComponentGwei = (effectiveBaseFeeGwei * baseFeeMultiplierPct) / 100\n const maxFeePerGasGwei = baseComponentGwei + effectivePriorityFeeGwei\n let maxPriorityFeePerGas =\n effectivePriorityFeeGwei > 0 ? parseGwei(gweiToDecimalString(effectivePriorityFeeGwei)) : 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 const ser = serializeTransaction({\n type: 'eip1559',\n to: v,\n data,\n value: s.value,\n gas: gasLimitI,\n maxFeePerGas,\n maxPriorityFeePerGas,\n nonce: currentNonce,\n chainId: LIDO_ETHEREUM_MAINNET_CHAIN_ID,\n })\n const h = keccak256(ser)\n messageHashes.push(h.startsWith('0x') ? h.slice(2) : h)\n messageRawBatch.push(ser)\n proposalTxParamsBatch.push({\n nonce: currentNonce,\n gasLimit: gasLimitI.toString(),\n txType: 'eip1559',\n maxFeePerGas: maxFeePerGas.toString(),\n maxPriorityFeePerGas: maxPriorityFeePerGas.toString(),\n })\n if (i === 0) {\n firstTxFeePayload = {\n txNonce: currentNonce,\n txGasLimit: gasLimitI.toString(),\n txMaxFeePerGas: maxFeePerGas.toString(),\n txMaxPriorityFeePerGas: maxPriorityFeePerGas.toString(),\n }\n firstDataNo0x = data.startsWith('0x') ? data.slice(2) : data\n }\n }\n batchMeta.push(s.buildBatchMeta({ gasLimit: gasLimitI }))\n }\n\n const extraPayload: Record<string, unknown> = { batchMeta }\n if (useCustomGas && args.customGasChainDetails && Object.keys(args.customGasChainDetails).length > 0) {\n extraPayload.customGasChainDetails = args.customGasChainDetails\n }\n const extraJSON = JSON.stringify(extraPayload)\n const firstSigText = (batchMeta[0] as { signatureText: string }).signatureText\n\n const firstValue = steps[0]!.value\n const bodyForSign: Record<string, unknown> = {\n keyList,\n pubKey: ph,\n msgHash: messageHashes[0],\n msgRaw: firstDataNo0x,\n messageHashes,\n messageRawBatch,\n destinationChainID: String(LIDO_ETHEREUM_MAINNET_CHAIN_ID),\n destinationAddress: steps[0]!.to,\n extraJSON,\n signatureText: firstSigText,\n purpose: (() => {\n const t = args.purposeText.trim()\n const suffix = args.purposeSuffix.trim()\n return (t ? `${t}\\n\\n` : '') + suffix\n })(),\n ...firstTxFeePayload,\n proposalTxParams: proposalTxParamsBatch,\n }\n if (firstValue > 0n) {\n bodyForSign.value = firstValue.toString()\n }\n if (clientId) bodyForSign.clientId = clientId\n return { bodyForSign, messageToSign: JSON.stringify(bodyForSign) }\n}\n\nexport async function buildEvmMultisignBodyLidoSubmit(args: {\n keyGen: KeyGenSubsetForPermit\n chainId: number\n rpcUrl: string\n chainDetail: ChainRow\n useCustomGas: boolean\n customGasChainDetails?: Record<string, unknown> | null\n ethAmountHuman: string\n executorAddress: Address\n purposeText: string\n}): Promise<{ bodyForSign: Record<string, unknown>; messageToSign: string }> {\n if (args.chainId !== LIDO_ETHEREUM_MAINNET_CHAIN_ID) {\n throw new Error('Lido stake is supported on Ethereum mainnet (chain id 1) only.')\n }\n const lido = LIDO_STETH_CONTRACT_MAINNET\n const amt = parseUnits(args.ethAmountHuman, 18)\n if (amt === 0n) throw new Error('ETH amount must be greater than zero.')\n const referral = getAddress(LIDO_SUBMIT_REFERRAL_MAINNET)\n const data = encodeFunctionData({\n abi: lidoAbi,\n functionName: 'submit',\n args: [referral],\n })\n const step: StepKind = {\n to: lido,\n data,\n value: amt,\n fallbackGas: LIDO_SUBMIT_FALLBACK_GAS_UNITS,\n buildBatchMeta: ({ gasLimit }) => ({\n destinationAddress: lido,\n signatureText: JSON.stringify({\n kind: 'Lido',\n name: 'Lido.submit',\n referral: referral,\n valueWei: amt.toString(),\n ethAmountHuman: args.ethAmountHuman,\n chainId: LIDO_ETHEREUM_MAINNET_CHAIN_ID,\n }),\n evm: { type: 'lido_submit', version: 1, chainId: String(LIDO_ETHEREUM_MAINNET_CHAIN_ID) },\n lido: { step: 'submit', ethAmountHuman: args.ethAmountHuman, gasSubmit: { baseGasUnits: gasLimit.toString() } },\n }),\n }\n const purposeSuffix = `Lido: stake ${args.ethAmountHuman} ETH → stETH (submit) on Ethereum.`\n return finalizeLidoMultipart([step], {\n keyGen: args.keyGen,\n rpcUrl: args.rpcUrl,\n chainDetail: args.chainDetail,\n useCustomGas: args.useCustomGas,\n customGasChainDetails: args.customGasChainDetails,\n purposeText: args.purposeText,\n purposeSuffix,\n executorAddress: args.executorAddress,\n })\n}\n\nexport async function buildEvmMultisignBodyLidoRequestWithdrawals(args: {\n keyGen: KeyGenSubsetForPermit\n chainId: number\n rpcUrl: string\n chainDetail: ChainRow\n useCustomGas: boolean\n customGasChainDetails?: Record<string, unknown> | null\n stEthAmountHuman: string\n owner: Address\n executorAddress: Address\n purposeText: string\n}): Promise<{ bodyForSign: Record<string, unknown>; messageToSign: string }> {\n if (args.chainId !== LIDO_ETHEREUM_MAINNET_CHAIN_ID) {\n throw new Error('Lido withdrawals are supported on Ethereum mainnet (chain id 1) only.')\n }\n const steth = LIDO_STETH_CONTRACT_MAINNET\n const wq = LIDO_WITHDRAWAL_QUEUE_MAINNET\n const ch = defineChain({\n id: LIDO_ETHEREUM_MAINNET_CHAIN_ID,\n name: 'Ethereum',\n nativeCurrency: { decimals: 18, name: 'Ether', symbol: 'ETH' },\n rpcUrls: { default: { http: [args.rpcUrl.trim()] } },\n })\n const publicClient = createPublicClient({ chain: ch, transport: http(args.rpcUrl.trim()) })\n const amountWei = parseUnits(args.stEthAmountHuman, 18)\n if (amountWei === 0n) throw new Error('stETH amount must be greater than zero.')\n\n const minW = await publicClient.readContract({\n address: wq,\n abi: wqAbi,\n functionName: 'MIN_STETH_WITHDRAWAL_AMOUNT',\n })\n const maxW = await publicClient.readContract({\n address: wq,\n abi: wqAbi,\n functionName: 'MAX_STETH_WITHDRAWAL_AMOUNT',\n })\n if (amountWei < minW) {\n throw new Error(\n `Withdrawal amount is below the queue minimum (${minW.toString()} wei of stETH; check decimals / protocol constants).`,\n )\n }\n if (amountWei > maxW) {\n throw new Error(\n `This flow sends a single request; amount exceeds the queue maximum (${maxW.toString()} wei). Split across multiple requests.`,\n )\n }\n\n const executor = getAddress(args.executorAddress)\n const ownerAddr = getAddress(args.owner)\n\n const steps: StepKind[] = []\n let approvalNeeded = false\n const allowance = await publicClient.readContract({\n address: steth,\n abi: erc20Abi,\n functionName: 'allowance',\n args: [executor, wq],\n })\n if (allowance < amountWei) {\n approvalNeeded = true\n if (allowance > 0n) {\n const dataReset = encodeFunctionData({\n abi: erc20Abi,\n functionName: 'approve',\n args: [wq, 0n],\n })\n steps.push({\n to: steth,\n data: dataReset,\n value: 0n,\n fallbackGas: LIDO_APPROVE_FALLBACK,\n buildBatchMeta: ({ gasLimit }) => ({\n destinationAddress: steth,\n signatureText: JSON.stringify({\n kind: 'Lido',\n name: 'stETH.approve (reset allowance before new amount)',\n spender: wq,\n chainId: LIDO_ETHEREUM_MAINNET_CHAIN_ID,\n }),\n evm: { type: 'lido_steth_approve', version: 1, chainId: String(LIDO_ETHEREUM_MAINNET_CHAIN_ID) },\n lido: { step: 'approve_reset', gasApprove: { baseGasUnits: gasLimit.toString() } },\n }),\n })\n }\n const dataApprove = encodeFunctionData({\n abi: erc20Abi,\n functionName: 'approve',\n args: [wq, amountWei],\n })\n steps.push({\n to: steth,\n data: dataApprove,\n value: 0n,\n fallbackGas: LIDO_APPROVE_FALLBACK,\n buildBatchMeta: ({ gasLimit }) => ({\n destinationAddress: steth,\n signatureText: JSON.stringify({\n kind: 'Lido',\n name: 'stETH.approve',\n spender: wq,\n amountWei: amountWei.toString(),\n chainId: LIDO_ETHEREUM_MAINNET_CHAIN_ID,\n }),\n evm: { type: 'lido_steth_approve', version: 1, chainId: String(LIDO_ETHEREUM_MAINNET_CHAIN_ID) },\n lido: {\n step: 'approve_exact',\n stEthAmountHuman: args.stEthAmountHuman,\n gasApprove: { baseGasUnits: gasLimit.toString() },\n },\n }),\n })\n }\n\n const dataReq = encodeFunctionData({\n abi: wqAbi,\n functionName: 'requestWithdrawals',\n args: [[amountWei], ownerAddr],\n })\n steps.push({\n to: wq,\n data: dataReq,\n value: 0n,\n fallbackGas: LIDO_REQUEST_WITHDRAWALS_FALLBACK_GAS_UNITS,\n buildBatchMeta: ({ gasLimit }) => ({\n destinationAddress: wq,\n signatureText: JSON.stringify({\n kind: 'Lido',\n name: 'WithdrawalQueue.requestWithdrawals',\n amountsWei: [amountWei.toString()],\n owner: ownerAddr,\n chainId: LIDO_ETHEREUM_MAINNET_CHAIN_ID,\n }),\n evm: { type: 'lido_request_withdrawals', version: 1, chainId: String(LIDO_ETHEREUM_MAINNET_CHAIN_ID) },\n lido: {\n step: 'requestWithdrawals',\n stEthAmountHuman: args.stEthAmountHuman,\n owner: ownerAddr,\n approvalNeeded,\n gasRequestWithdrawals: { baseGasUnits: gasLimit.toString() },\n },\n }),\n })\n\n const purposeSuffix = `Lido: withdrawal queue — approve (if needed) + requestWithdrawals (${args.stEthAmountHuman} stETH) on Ethereum (claim ETH in a follow-up tx when finalized).`\n return finalizeLidoMultipart(steps, {\n keyGen: args.keyGen,\n rpcUrl: args.rpcUrl,\n chainDetail: args.chainDetail,\n useCustomGas: args.useCustomGas,\n customGasChainDetails: args.customGasChainDetails,\n purposeText: args.purposeText,\n purposeSuffix,\n executorAddress: executor,\n })\n}\n\nexport async function buildEvmMultisignBodyLidoClaimWithdrawal(args: {\n keyGen: KeyGenSubsetForPermit\n chainId: number\n rpcUrl: string\n chainDetail: ChainRow\n useCustomGas: boolean\n customGasChainDetails?: Record<string, unknown> | null\n requestId: bigint\n executorAddress: Address\n purposeText: string\n}): Promise<{ bodyForSign: Record<string, unknown>; messageToSign: string }> {\n if (args.chainId !== LIDO_ETHEREUM_MAINNET_CHAIN_ID) {\n throw new Error('Lido withdrawals are supported on Ethereum mainnet (chain id 1) only.')\n }\n if (args.requestId <= 0n) throw new Error('Withdrawal request id must be greater than zero.')\n const wq = LIDO_WITHDRAWAL_QUEUE_MAINNET\n\n const data = encodeFunctionData({\n abi: wqAbi,\n functionName: 'claimWithdrawal',\n args: [args.requestId],\n })\n\n const step: StepKind = {\n to: wq,\n data,\n value: 0n,\n fallbackGas: LIDO_CLAIM_WITHDRAWAL_FALLBACK_GAS_UNITS,\n buildBatchMeta: ({ gasLimit }) => ({\n destinationAddress: wq,\n signatureText: JSON.stringify({\n kind: 'Lido',\n name: 'WithdrawalQueue.claimWithdrawal',\n requestId: args.requestId.toString(),\n chainId: LIDO_ETHEREUM_MAINNET_CHAIN_ID,\n }),\n evm: { type: 'lido_claim_withdrawal', version: 1, chainId: String(LIDO_ETHEREUM_MAINNET_CHAIN_ID) },\n lido: {\n step: 'claimWithdrawal',\n requestId: args.requestId.toString(),\n gasClaimWithdrawal: { baseGasUnits: gasLimit.toString() },\n },\n }),\n }\n const purposeSuffix = `Lido: claim ETH for finalized withdrawal request #${args.requestId.toString()} on Ethereum (separate tx from requesting).`\n return finalizeLidoMultipart([step], {\n keyGen: args.keyGen,\n rpcUrl: args.rpcUrl,\n chainDetail: args.chainDetail,\n useCustomGas: args.useCustomGas,\n customGasChainDetails: args.customGasChainDetails,\n purposeText: args.purposeText,\n purposeSuffix,\n executorAddress: args.executorAddress,\n })\n}\n\nexport async function buildEvmMultisignBodyLidoWrapStEth(args: {\n keyGen: KeyGenSubsetForPermit\n chainId: number\n rpcUrl: string\n chainDetail: ChainRow\n useCustomGas: boolean\n customGasChainDetails?: Record<string, unknown> | null\n stEthAmountHuman: string\n executorAddress: Address\n purposeText: string\n}): Promise<{ bodyForSign: Record<string, unknown>; messageToSign: string }> {\n if (args.chainId !== LIDO_ETHEREUM_MAINNET_CHAIN_ID) {\n throw new Error('Lido wrap is supported on Ethereum mainnet (chain id 1) only.')\n }\n const steth = LIDO_STETH_CONTRACT_MAINNET\n const wsteth = LIDO_WSTETH_CONTRACT_MAINNET\n const ch = defineChain({\n id: LIDO_ETHEREUM_MAINNET_CHAIN_ID,\n name: 'Ethereum',\n nativeCurrency: { decimals: 18, name: 'Ether', symbol: 'ETH' },\n rpcUrls: { default: { http: [args.rpcUrl.trim()] } },\n })\n const publicClient = createPublicClient({ chain: ch, transport: http(args.rpcUrl.trim()) })\n const amountWei = parseUnits(args.stEthAmountHuman, 18)\n if (amountWei === 0n) throw new Error('stETH amount must be greater than zero.')\n\n const executor = getAddress(args.executorAddress)\n\n const steps: StepKind[] = []\n let approvalNeeded = false\n const allowance = await publicClient.readContract({\n address: steth,\n abi: erc20Abi,\n functionName: 'allowance',\n args: [executor, wsteth],\n })\n if (allowance < amountWei) {\n approvalNeeded = true\n if (allowance > 0n) {\n const dataReset = encodeFunctionData({\n abi: erc20Abi,\n functionName: 'approve',\n args: [wsteth, 0n],\n })\n steps.push({\n to: steth,\n data: dataReset,\n value: 0n,\n fallbackGas: LIDO_APPROVE_FALLBACK,\n buildBatchMeta: ({ gasLimit }) => ({\n destinationAddress: steth,\n signatureText: JSON.stringify({\n kind: 'Lido',\n name: 'stETH.approve (reset for wstETH wrap)',\n spender: wsteth,\n chainId: LIDO_ETHEREUM_MAINNET_CHAIN_ID,\n }),\n evm: { type: 'lido_steth_approve', version: 1, chainId: String(LIDO_ETHEREUM_MAINNET_CHAIN_ID) },\n lido: { step: 'approve_wrap_reset', spender: 'wstETH', gasApprove: { baseGasUnits: gasLimit.toString() } },\n }),\n })\n }\n const dataApprove = encodeFunctionData({\n abi: erc20Abi,\n functionName: 'approve',\n args: [wsteth, amountWei],\n })\n steps.push({\n to: steth,\n data: dataApprove,\n value: 0n,\n fallbackGas: LIDO_APPROVE_FALLBACK,\n buildBatchMeta: ({ gasLimit }) => ({\n destinationAddress: steth,\n signatureText: JSON.stringify({\n kind: 'Lido',\n name: 'stETH.approve',\n spender: wsteth,\n amountWei: amountWei.toString(),\n chainId: LIDO_ETHEREUM_MAINNET_CHAIN_ID,\n }),\n evm: { type: 'lido_steth_approve', version: 1, chainId: String(LIDO_ETHEREUM_MAINNET_CHAIN_ID) },\n lido: {\n step: 'approve_wrap_exact',\n stEthAmountHuman: args.stEthAmountHuman,\n gasApprove: { baseGasUnits: gasLimit.toString() },\n },\n }),\n })\n }\n\n const dataWrap = encodeFunctionData({\n abi: wstethAbi,\n functionName: 'wrap',\n args: [amountWei],\n })\n steps.push({\n to: wsteth,\n data: dataWrap,\n value: 0n,\n fallbackGas: LIDO_WSTETH_WRAP_FALLBACK_GAS_UNITS,\n buildBatchMeta: ({ gasLimit }) => ({\n destinationAddress: wsteth,\n signatureText: JSON.stringify({\n kind: 'Lido',\n name: 'WstETH.wrap',\n stEthAmountWei: amountWei.toString(),\n chainId: LIDO_ETHEREUM_MAINNET_CHAIN_ID,\n }),\n evm: { type: 'lido_wsteth_wrap', version: 1, chainId: String(LIDO_ETHEREUM_MAINNET_CHAIN_ID) },\n lido: {\n step: 'wrap',\n stEthAmountHuman: args.stEthAmountHuman,\n approvalNeeded,\n gasWstethWrap: { baseGasUnits: gasLimit.toString() },\n },\n }),\n })\n\n const purposeSuffix = `Lido: approve (if needed) + wrap (${args.stEthAmountHuman} stETH → wstETH) on Ethereum.`\n return finalizeLidoMultipart(steps, {\n keyGen: args.keyGen,\n rpcUrl: args.rpcUrl,\n chainDetail: args.chainDetail,\n useCustomGas: args.useCustomGas,\n customGasChainDetails: args.customGasChainDetails,\n purposeText: args.purposeText,\n purposeSuffix,\n executorAddress: executor,\n })\n}\n\nexport async function buildEvmMultisignBodyLidoUnwrapWstEth(args: {\n keyGen: KeyGenSubsetForPermit\n chainId: number\n rpcUrl: string\n chainDetail: ChainRow\n useCustomGas: boolean\n customGasChainDetails?: Record<string, unknown> | null\n wstEthAmountHuman: string\n executorAddress: Address\n purposeText: string\n}): Promise<{ bodyForSign: Record<string, unknown>; messageToSign: string }> {\n if (args.chainId !== LIDO_ETHEREUM_MAINNET_CHAIN_ID) {\n throw new Error('Lido unwrap is supported on Ethereum mainnet (chain id 1) only.')\n }\n const wsteth = LIDO_WSTETH_CONTRACT_MAINNET\n const amt = parseUnits(args.wstEthAmountHuman, 18)\n if (amt === 0n) throw new Error('wstETH amount must be greater than zero.')\n\n const data = encodeFunctionData({\n abi: wstethAbi,\n functionName: 'unwrap',\n args: [amt],\n })\n const step: StepKind = {\n to: wsteth,\n data,\n value: 0n,\n fallbackGas: LIDO_WSTETH_UNWRAP_FALLBACK_GAS_UNITS,\n buildBatchMeta: ({ gasLimit }) => ({\n destinationAddress: wsteth,\n signatureText: JSON.stringify({\n kind: 'Lido',\n name: 'WstETH.unwrap',\n wstEthAmountWei: amt.toString(),\n chainId: LIDO_ETHEREUM_MAINNET_CHAIN_ID,\n }),\n evm: { type: 'lido_wsteth_unwrap', version: 1, chainId: String(LIDO_ETHEREUM_MAINNET_CHAIN_ID) },\n lido: {\n step: 'unwrap',\n wstEthAmountHuman: args.wstEthAmountHuman,\n gasWstethUnwrap: { baseGasUnits: gasLimit.toString() },\n },\n }),\n }\n const purposeSuffix = `Lido: unwrap (${args.wstEthAmountHuman} wstETH → stETH) on Ethereum.`\n return finalizeLidoMultipart([step], {\n keyGen: args.keyGen,\n rpcUrl: args.rpcUrl,\n chainDetail: args.chainDetail,\n useCustomGas: args.useCustomGas,\n customGasChainDetails: args.customGasChainDetails,\n purposeText: args.purposeText,\n purposeSuffix,\n executorAddress: args.executorAddress,\n })\n}\n\n/** True if this sign request relies on isolated `estimateGas` pitfalls (prior batch allowances). */\nexport function isLidoEvmSignRequestForEstimateWorkaround(\n detail: Record<string, unknown> | null | undefined,\n batchIndex?: number,\n): boolean {\n return isLidoBatchStepEvmSignRequest(detail, batchIndex ?? 0)\n}\n","import type { ProtocolModule } from '../../../core/types.js'\nimport { registerProtocolModule } from '../../../core/registry.js'\nimport { LIDO_ETHEREUM_MAINNET_CHAIN_ID } from './mainnet.js'\n\nexport * from './mainnet.js'\nexport * from './multisign.js'\n\nexport const LIDO_PROTOCOL_ID = 'lido'\n\nexport const lidoProtocolModule: ProtocolModule = {\n id: LIDO_PROTOCOL_ID,\n chainCategory: 'evm',\n isChainSupported(ctx) {\n if (ctx.chainCategory !== 'evm') return false\n return Number(ctx.chainId) === LIDO_ETHEREUM_MAINNET_CHAIN_ID\n },\n isTokenSupported(token) {\n return token.category === 'evm' && (token.kind === 'native' || token.kind === 'erc20')\n },\n actions: [\n { id: 'lido.submit', protocolId: LIDO_PROTOCOL_ID, chainCategory: 'evm', description: 'Stake ETH via Lido submit()', commonParams: ['keyGen', 'purposeText', 'useCustomGas'], params: { valueWei: { type: 'string', required: true, description: 'ETH to stake (wei string)' } } },\n { id: 'lido.request-withdrawals', protocolId: LIDO_PROTOCOL_ID, chainCategory: 'evm', description: 'Queue stETH withdrawal', commonParams: ['keyGen', 'purposeText', 'useCustomGas'], params: {} },\n { id: 'lido.claim-withdrawal', protocolId: LIDO_PROTOCOL_ID, chainCategory: 'evm', description: 'Claim finalized withdrawal', commonParams: ['keyGen', 'purposeText', 'useCustomGas'], params: {} },\n { id: 'lido.wrap-steth', protocolId: LIDO_PROTOCOL_ID, chainCategory: 'evm', description: 'Wrap stETH to wstETH', commonParams: ['keyGen', 'purposeText', 'useCustomGas'], params: {} },\n { id: 'lido.unwrap-wsteth', protocolId: LIDO_PROTOCOL_ID, chainCategory: 'evm', description: 'Unwrap wstETH to stETH', commonParams: ['keyGen', 'purposeText', 'useCustomGas'], params: {} },\n ],\n}\n\nregisterProtocolModule(lidoProtocolModule)\n"]}