@continuumdao/ctm-mpc-defi 0.2.49 → 0.2.51

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 (39) hide show
  1. package/dist/agent/catalog.cjs +1344 -22
  2. package/dist/agent/catalog.cjs.map +1 -1
  3. package/dist/agent/catalog.d.ts +1528 -9
  4. package/dist/agent/catalog.js +1316 -23
  5. package/dist/agent/catalog.js.map +1 -1
  6. package/dist/agent/skills/continuum-dao/SKILL.md +2 -0
  7. package/dist/agent/skills/continuum-dao-marketplace/SKILL.md +58 -0
  8. package/dist/agent/skills/hyperliquidOutcome/SKILL.md +47 -0
  9. package/dist/agent/skills/trueo/SKILL.md +64 -0
  10. package/dist/core/index.cjs +3 -1
  11. package/dist/core/index.cjs.map +1 -1
  12. package/dist/core/index.js +3 -1
  13. package/dist/core/index.js.map +1 -1
  14. package/dist/index.cjs +3 -1
  15. package/dist/index.cjs.map +1 -1
  16. package/dist/index.js +3 -1
  17. package/dist/index.js.map +1 -1
  18. package/dist/protocols/evm/aerodrome/index.cjs.map +1 -1
  19. package/dist/protocols/evm/aerodrome/index.js.map +1 -1
  20. package/dist/protocols/evm/continuum-dao/index.cjs +2274 -59
  21. package/dist/protocols/evm/continuum-dao/index.cjs.map +1 -1
  22. package/dist/protocols/evm/continuum-dao/index.d.ts +690 -2
  23. package/dist/protocols/evm/continuum-dao/index.js +2218 -61
  24. package/dist/protocols/evm/continuum-dao/index.js.map +1 -1
  25. package/dist/protocols/evm/hyperliquidOutcome/index.cjs +1294 -0
  26. package/dist/protocols/evm/hyperliquidOutcome/index.cjs.map +1 -0
  27. package/dist/protocols/evm/hyperliquidOutcome/index.d.ts +465 -0
  28. package/dist/protocols/evm/hyperliquidOutcome/index.js +1247 -0
  29. package/dist/protocols/evm/hyperliquidOutcome/index.js.map +1 -0
  30. package/dist/protocols/evm/pendle/index.cjs +3 -1
  31. package/dist/protocols/evm/pendle/index.cjs.map +1 -1
  32. package/dist/protocols/evm/pendle/index.js +3 -1
  33. package/dist/protocols/evm/pendle/index.js.map +1 -1
  34. package/dist/protocols/evm/trueo/index.cjs +2868 -0
  35. package/dist/protocols/evm/trueo/index.cjs.map +1 -0
  36. package/dist/protocols/evm/trueo/index.d.ts +1295 -0
  37. package/dist/protocols/evm/trueo/index.js +2725 -0
  38. package/dist/protocols/evm/trueo/index.js.map +1 -0
  39. package/package.json +11 -1
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../src/chains/evm/chainIdParse.ts","../../../../src/protocols/evm/continuum-dao/constants.ts","../../../../src/core/defiEvmClient.ts","../../../../src/core/purpose.ts","../../../../src/core/envelope.ts","../../../../src/chains/evm/routerSwapGas.ts","../../../../src/chains/evm/buildBatch.ts","../../../../src/core/eip712Multisign.ts","../../../../src/protocols/evm/continuum-dao/forum.ts","../../../../src/protocols/evm/continuum-dao/explainProposal.ts","../../../../src/protocols/evm/continuum-dao/foundryProposalScript.ts","../../../../src/protocols/evm/continuum-dao/simulateProposal.ts","../../../../src/protocols/evm/continuum-dao/governance.ts","../../../../src/core/registry.ts","../../../../src/protocols/evm/continuum-dao/index.ts","../../../../src/protocols/evm/continuum-dao/escrowRules.ts","../../../../src/protocols/evm/continuum-dao/escrowPreflight.ts","../../../../src/protocols/evm/continuum-dao/multisign.ts","../../../../src/protocols/evm/continuum-dao/attachGroup.ts","../../../../src/protocols/evm/continuum-dao/composeProposalAction.ts","../../../../src/protocols/evm/continuum-dao/proposalVotes.ts"],"names":["getAddress","CONTINUUM_DAO_COMMITTEE_PROPOSERS","zeroAddress","CONTINUUM_DAO_DEPLOYMENTS","CONTINUUM_DAO_LINEA_CHAIN_ID","CONTINUUM_DAO_LINEA_SEPOLIA_CHAIN_ID","VECTM_TOKEN_NAME","CTM_TOKEN_SYMBOL","CONTINUUM_DAO_ETHEREUM_CHAIN_ID","CTM_TOKEN_NAME","CTM_TOKEN_DECIMALS","VECTM_TOKEN_SYMBOL","CONTINUUM_DAO_PROTOCOL_ID","WEEK_SECONDS","MAXTIME_SECONDS","VECTM_MAX_LOCK_WEEKS","VECTM_DEFAULT_MINIMUM_LOCK_WEI","VECTM_LIQ_MIN_LOCKED_WEI","VECTM_LIQ_PENALTY_NUM","VECTM_LIQ_PENALTY_DEN","CTM_TOKEN_ADDRESS","VOTING_ESCROW_LINEA_ADDRESS","CONTINUUM_DAO_LINEA_GOVERNOR_ADDRESS","CONTINUUM_DAO_LINEA_GOVERNOR_LEGACY_ADDRESS","CONTINUUM_DAO_GOVERNANCE_API","http","getClientIdFromKeyGenResult","gasLimitFromEstimateAndChainConfig","defineChain","publicClient","createPublicClient","fetchChainFeeParams","parseGwei","gweiToDecimalString","serializeTransaction","proposalTxParamsToFeeSnapshot","alignEip1559FeesWithLatestBase","keccak256","stringToHex","hashTypedData","typeLabel","PROPOSAL_TYPE_TO_FORUM_SECTION","FORUM_IDEA_SECTION","FORUM_LOGIN_DELIVERY_KIND","FORUM_GOVERNANCE_SECTIONS","PROPOSAL_TYPE_LABELS","FOUNDRY_PROPOSAL_REQUIRED_SERVERS","proposalArgs","toHex","encodeFunctionData","governorWriteAbi","encodePacked","padHex","meta","votingPowerRefuse","assertContinuumDaoProposalSimulation","CONTINUUM_DAO_PROPOSE_FALLBACK","CONTINUUM_DAO_VOTE_FALLBACK","CONTINUUM_DAO_EXECUTE_FALLBACK","CONTINUUM_DAO_CANCEL_FALLBACK","asRecord","GOVERNOR_STATE","GOVERNOR_STATE_LABELS","CONTINUUM_DAO_GOV_EVM_TYPES","parseAbi","erc20Abi","parseUnits","veReadAbi","isAddress","rows","encodedActions","table","fn","parseAbiItem","formatUnits","str","raw"],"mappings":"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","file":"index.cjs","sourcesContent":["/** Parse chain id for comparisons (decimal, 0x hex, CAIP-2 eip155:N, bigint). */\nexport function parseEvmChainIdToNumber(chainId: string | number | bigint | null | undefined): number {\n if (chainId == null) return Number.NaN\n if (typeof chainId === 'bigint') {\n const n = Number(chainId)\n return Number.isSafeInteger(n) && n >= 0 ? n : Number.NaN\n }\n if (typeof chainId === 'number') {\n return Number.isInteger(chainId) && chainId >= 0 ? chainId : Number.NaN\n }\n const t = String(chainId).trim()\n if (!t) return Number.NaN\n const low = t.toLowerCase()\n if (low.startsWith('eip155:')) {\n const rest = t.slice('eip155:'.length).trim()\n const n = Number.parseInt(rest, 10)\n return Number.isNaN(n) || n < 0 ? Number.NaN : n\n }\n if (low.startsWith('0x')) {\n return Number.parseInt(t, 16)\n }\n return Number.parseInt(t, 10)\n}\n","/**\n * ContinuumDAO (CTM / veCTM) — Linea escrow + node attach, Ethereum CTM hold.\n * CTM and Linea VotingEscrow are configured on mainnet; other deployment fields\n * stay zero until redeployed. Callers must skip seed / write paths when\n * {@link isConfiguredAddress} is false.\n */\nimport { getAddress, zeroAddress } from 'viem'\nimport { parseEvmChainIdToNumber } from '../../../chains/evm/chainIdParse.js'\n\nexport const CONTINUUM_DAO_PROTOCOL_ID = 'continuum-dao'\n\nexport const CONTINUUM_DAO_ETHEREUM_CHAIN_ID = 1\nexport const CONTINUUM_DAO_LINEA_CHAIN_ID = 59144\nexport const CONTINUUM_DAO_LINEA_SEPOLIA_CHAIN_ID = 59141\n\nexport const CTM_TOKEN_NAME = 'Continuum'\nexport const CTM_TOKEN_SYMBOL = 'CTM'\nexport const VECTM_TOKEN_NAME = 'Voting Escrow Continuum'\nexport const VECTM_TOKEN_SYMBOL = 'veCTM'\nexport const CTM_TOKEN_DECIMALS = 18\n\nexport const WEEK_SECONDS = 7 * 86400\nexport const MAXTIME_SECONDS = 4 * 365 * 86400\n/** Node-app / MCP lock-duration cap (4 years floored to whole weeks). */\nexport const VECTM_MAX_LOCK_WEEKS = 208\n/** VotingEscrow.minimumLock default (1 CTM). Live value is read on-chain when available. */\nexport const VECTM_DEFAULT_MINIMUM_LOCK_WEI = 10n ** 18n\n/** VotingEscrow.liquidate — `value <= 100 gwei` reverts VotingEscrow_InvalidValue. */\nexport const VECTM_LIQ_MIN_LOCKED_WEI = 100n\nexport const VECTM_LIQ_PENALTY_NUM = 50_000n\nexport const VECTM_LIQ_PENALTY_DEN = 100_000n\n\nexport type ContinuumDaoDeployment = {\n ctm: `0x${string}`\n votingEscrow: `0x${string}`\n nodeProperties: `0x${string}`\n rewards: `0x${string}`\n governor: `0x${string}`\n}\n\nconst UNSET: ContinuumDaoDeployment = {\n ctm: zeroAddress,\n votingEscrow: zeroAddress,\n nodeProperties: zeroAddress,\n rewards: zeroAddress,\n governor: zeroAddress,\n}\n\n/** Production CTM token — same address on Linea mainnet and Ethereum mainnet. */\nexport const CTM_TOKEN_ADDRESS = getAddress('0x2026027054F5beBCEB650aBD62dC623e327658e7')\n\n/** Linea mainnet VotingEscrow (veCTM). */\nexport const VOTING_ESCROW_LINEA_ADDRESS = getAddress('0x221EC90B3B083A8501A37bdeb7035CeaedF3C31f')\n\n/** Current Linea ContinuumDAO governor (backend catalog ids start at 0). */\nexport const CONTINUUM_DAO_LINEA_GOVERNOR_ADDRESS = getAddress('0x76FF2CB03175900F1D83328C82D27EA9aeaF2355')\n\n/**\n * Superseded Linea ContinuumDAO governor. The public catalog keeps its two\n * proposals as ids **-2** and **-1** so the new contract can start at 0.\n */\nexport const CONTINUUM_DAO_LINEA_GOVERNOR_LEGACY_ADDRESS = getAddress('0x4800F9f1dC1b6daCA841B71E0531F547D374168E')\n\n/**\n * Hint list matching Constitution.md Committee List (Selqui, Hal, John CTM).\n * Agents must still fetch docs `sectionId=committee-list`; this is not user-editable.\n */\nexport const CONTINUUM_DAO_COMMITTEE_PROPOSERS = [\n getAddress('0xd23eecBe0362F36b254F774C274823Cbfc482a10'),\n getAddress('0x482cdCbdd72ef307997153Ee7eb627B7a2348d34'),\n getAddress('0x14C189354702b7f2aC7b19e61522A41632226BD8'),\n] as const\n\nexport function isContinuumDaoCommitteeProposer(addr?: string | null): boolean {\n if (!addr || !isConfiguredAddress(addr)) return false\n try {\n const a = getAddress(addr)\n return CONTINUUM_DAO_COMMITTEE_PROPOSERS.some((c) => c === a)\n } catch {\n return false\n }\n}\n\n/** Placeholder deployments — fill NodeProperties / Rewards / governor after redeploy. */\nexport const CONTINUUM_DAO_DEPLOYMENTS: Readonly<Record<number, ContinuumDaoDeployment>> = {\n [CONTINUUM_DAO_LINEA_CHAIN_ID]: {\n ...UNSET,\n ctm: CTM_TOKEN_ADDRESS,\n votingEscrow: VOTING_ESCROW_LINEA_ADDRESS,\n },\n [CONTINUUM_DAO_LINEA_SEPOLIA_CHAIN_ID]: { ...UNSET },\n [CONTINUUM_DAO_ETHEREUM_CHAIN_ID]: {\n ...UNSET,\n ctm: CTM_TOKEN_ADDRESS,\n },\n}\n\n/** Public ContinuumDAO governance API (same host continuumdao-app proxies). */\nexport const CONTINUUM_DAO_GOVERNANCE_API = 'https://app-api.continuumdao.org'\n\nexport function isConfiguredAddress(addr?: string | null): boolean {\n if (!addr?.trim()) return false\n try {\n return getAddress(addr) !== zeroAddress\n } catch {\n return false\n }\n}\n\nexport function continuumDaoDeployment(chainId: number): ContinuumDaoDeployment | null {\n return CONTINUUM_DAO_DEPLOYMENTS[chainId] ?? null\n}\n\nexport function isContinuumDaoLockChain(chainId: number): boolean {\n return chainId === CONTINUUM_DAO_LINEA_CHAIN_ID || chainId === CONTINUUM_DAO_LINEA_SEPOLIA_CHAIN_ID\n}\n\nexport function isContinuumDaoSupportedChainId(chainId: number): boolean {\n return continuumDaoDeployment(chainId) != null\n}\n\nexport function ctmTokenAddressOnEvmChain(chainId: number): `0x${string}` | null {\n const ctm = continuumDaoDeployment(chainId)?.ctm\n return ctm && isConfiguredAddress(ctm) ? getAddress(ctm) : null\n}\n\nexport function votingEscrowAddressOnEvmChain(chainId: number): `0x${string}` | null {\n const ve = continuumDaoDeployment(chainId)?.votingEscrow\n return ve && isConfiguredAddress(ve) ? getAddress(ve) : null\n}\n\nexport function governorAddressOnEvmChain(chainId: number): `0x${string}` | null {\n const gov = continuumDaoDeployment(chainId)?.governor\n return gov && isConfiguredAddress(gov) ? getAddress(gov) : null\n}\n\nfunction sameAddr(a: string, b: string): boolean {\n try {\n return getAddress(a) === getAddress(b)\n } catch {\n return false\n }\n}\n\nexport function isContinuumDaoCtmOnAssetsChain(assetsChainId: string, contractAddress: string): boolean {\n const n = parseEvmChainIdToNumber(assetsChainId)\n if (Number.isNaN(n) || n < 0) return false\n const expected = ctmTokenAddressOnEvmChain(n)\n if (!expected) return false\n return sameAddr(contractAddress, expected)\n}\n\nexport function isContinuumDaoVeCtmOnAssetsChain(assetsChainId: string, contractAddress: string): boolean {\n const n = parseEvmChainIdToNumber(assetsChainId)\n if (Number.isNaN(n) || n < 0) return false\n const expected = votingEscrowAddressOnEvmChain(n)\n if (!expected) return false\n return sameAddr(contractAddress, expected)\n}\n\nexport function isVotingEscrowContinuumName(name?: string | null): boolean {\n return (name ?? '').trim() === VECTM_TOKEN_NAME\n}\n\nexport function isCtmTokenSymbol(symbol?: string | null): boolean {\n return (symbol ?? '').trim().toUpperCase() === CTM_TOKEN_SYMBOL\n}\n\nexport type ContinuumDaoDefaultAsset = {\n chainId: number\n tokenType: 'CTMERC20' | 'ERC721'\n contractAddress: `0x${string}`\n name: string\n symbol: string\n decimals?: number\n}\n\n/** Default registry rows when the configured address is non-zero. */\nexport function listContinuumDaoDefaultAssets(): ContinuumDaoDefaultAsset[] {\n const out: ContinuumDaoDefaultAsset[] = []\n for (const chainId of [\n CONTINUUM_DAO_LINEA_CHAIN_ID,\n CONTINUUM_DAO_LINEA_SEPOLIA_CHAIN_ID,\n CONTINUUM_DAO_ETHEREUM_CHAIN_ID,\n ]) {\n const dep = continuumDaoDeployment(chainId)\n if (!dep) continue\n if (isConfiguredAddress(dep.ctm)) {\n out.push({\n chainId,\n tokenType: 'CTMERC20',\n contractAddress: getAddress(dep.ctm),\n name: CTM_TOKEN_NAME,\n symbol: CTM_TOKEN_SYMBOL,\n decimals: CTM_TOKEN_DECIMALS,\n })\n }\n if (isContinuumDaoLockChain(chainId) && isConfiguredAddress(dep.votingEscrow)) {\n out.push({\n chainId,\n tokenType: 'ERC721',\n contractAddress: getAddress(dep.votingEscrow),\n name: VECTM_TOKEN_NAME,\n symbol: VECTM_TOKEN_SYMBOL,\n })\n }\n }\n return out\n}\n","import { http, type Transport } from 'viem'\n\n/**\n * Optional browser transport for protocol `eth_*` reads (allowance, decimals, spoke views).\n * Node / MCP leave this unset and use viem `http(rpcUrl)`.\n */\nlet evmRpcTransportFactory: ((rpcUrl: string) => Transport) | undefined\n\nexport function setDefiEvmRpcTransportFactory(factory: ((rpcUrl: string) => Transport) | undefined): void {\n evmRpcTransportFactory = factory\n}\n\nexport function getDefiEvmRpcTransportFactory(): ((rpcUrl: string) => Transport) | undefined {\n return evmRpcTransportFactory\n}\n\n/** Same-origin proxy in the browser when the app has called {@link setDefiEvmRpcTransportFactory}. */\nexport function defiEvmTransport(rpcUrl: string, opts?: Parameters<typeof http>[1]): Transport {\n const url = rpcUrl.trim()\n return evmRpcTransportFactory?.(url) ?? http(url, opts)\n}\n","/** Merge user purpose text with an optional batch / protocol suffix. */\nexport function mergePurposeText(purposeText: string | undefined, purposeSuffix?: string): string {\n const t = (purposeText ?? '').trim()\n const suffix = (purposeSuffix ?? '').trim()\n if (!suffix) return t\n return t ? `${t}\\n\\n${suffix}` : suffix\n}\n","import type { ChainCategory, MultisignBuildResult, KeyGenSubset } from './types.js'\nimport { getClientIdFromKeyGenResult } from '@continuumdao/continuum-node-sdk'\nimport { mergePurposeText } from './purpose.js'\n\nexport interface MultisignLeg {\n msgHash: string\n msgRaw: string\n destinationAddress: string\n signatureText: string\n audit: Record<string, unknown>\n feeSnapshot: Record<string, unknown>\n proposalTxParams?: Record<string, unknown>\n /** Payable value wei string for first leg only when relevant */\n valueWei?: bigint\n}\n\nexport interface ChainCategoryBuildInput {\n keyGen: KeyGenSubset\n purposeText: string\n purposeSuffix?: string\n destinationChainID: string\n legs: MultisignLeg[]\n extraJSON?: Record<string, unknown>\n /** Top-level destination address (first leg destination if omitted) */\n destinationAddress?: string\n /** Unix seconds (UTC) for mpc-auth multiSignRequest expiryDate. */\n expiryDate?: number\n}\n\nexport interface ChainCategoryModule {\n category: ChainCategory\n finalizeMultisign(input: ChainCategoryBuildInput): MultisignBuildResult\n}\n\n/**\n * Assemble mpc-auth `bodyForSign` from category-built legs.\n * Supports single-tx and batch (messageHashes / messageRawBatch / proposalTxParams).\n */\nexport function finalizeMultisign(input: ChainCategoryBuildInput): MultisignBuildResult {\n const { keyGen, destinationChainID, legs } = input\n if (legs.length === 0) {\n throw new Error('finalizeMultisign requires at least one leg')\n }\n\n const ph = (keyGen.pubkeyhex ?? '').trim()\n if (!ph) throw new Error('keyGen pubKey (pubkeyhex) is required')\n\n const keyList = keyGen.keylist ?? []\n const clientId = getClientIdFromKeyGenResult(keyGen)\n const first = legs[0]!\n\n const messageHashes = legs.map((l) => l.msgHash)\n const messageRawBatch = legs.map((l) => l.msgRaw)\n const batchMeta = legs.map((l) => ({\n destinationAddress: l.destinationAddress,\n signatureText: l.signatureText,\n ...l.audit,\n }))\n\n const proposalTxParams = legs\n .map((l) => l.proposalTxParams)\n .filter((p): p is Record<string, unknown> => p != null && typeof p === 'object')\n\n const extraPayload: Record<string, unknown> = {\n batchMeta,\n ...(input.extraJSON ?? {}),\n }\n const extraJSON = JSON.stringify(extraPayload, (_, v) => (typeof v === 'bigint' ? v.toString() : v))\n\n const bodyForSign: Record<string, unknown> = {\n keyList,\n pubKey: ph,\n msgHash: messageHashes[0],\n msgRaw: first.msgRaw,\n destinationChainID,\n destinationAddress: input.destinationAddress ?? first.destinationAddress,\n extraJSON,\n signatureText: first.signatureText,\n purpose: mergePurposeText(input.purposeText, input.purposeSuffix),\n ...first.feeSnapshot,\n }\n\n if (legs.length > 1) {\n bodyForSign.messageHashes = messageHashes\n bodyForSign.messageRawBatch = messageRawBatch\n }\n\n if (proposalTxParams.length > 0) {\n bodyForSign.proposalTxParams = proposalTxParams\n }\n\n const valueWei = first.valueWei\n if (valueWei != null && valueWei > 0n) {\n bodyForSign.value = valueWei.toString()\n }\n\n if (clientId) bodyForSign.clientId = clientId\n\n if (input.expiryDate != null && input.expiryDate > 0) {\n bodyForSign.expiryDate = Math.floor(input.expiryDate)\n }\n\n return { bodyForSign, messageToSign: JSON.stringify(bodyForSign) }\n}\n\nexport const coreChainCategoryModule: ChainCategoryModule = {\n category: 'evm',\n finalizeMultisign,\n}\n","import { gasLimitFromEstimateAndChainConfig } from '@continuumdao/continuum-node-sdk'\n\n/** Curve router swap gas: chain cap when set, else 12/10 estimate bump. */\nexport function routerSwapGasLimitFromEstimate(\n estimatedGas: bigint,\n chainGasLimit?: number | null,\n): bigint {\n if (chainGasLimit != null && Number.isFinite(chainGasLimit) && chainGasLimit > 0) {\n return gasLimitFromEstimateAndChainConfig(estimatedGas, chainGasLimit)\n }\n return (estimatedGas * 12n + 9n) / 10n\n}\n","import { keccak256, createPublicClient, defineChain, serializeTransaction, getAddress, parseGwei, type Address, type PublicClient } from 'viem'\nimport { defiEvmTransport } from '../../core/defiEvmClient.js'\nimport type { MultisignBuildResult } from '../../core/types.js'\nimport { finalizeMultisign, type MultisignLeg } from '../../core/envelope.js'\nimport type { KeyGenSubset } from '../../core/types.js'\nimport {\n fetchChainFeeParams,\n alignEip1559FeesWithLatestBase,\n gweiToDecimalString,\n gasLimitFromEstimateAndChainConfig,\n proposalTxParamsToFeeSnapshot,\n type ProposalTxParams,\n} from '@continuumdao/continuum-node-sdk'\nimport { routerSwapGasLimitFromEstimate } from './routerSwapGas.js'\nimport type { EvmProtocolContext, EvmTxStep } from './types.js'\n\nexport type EvmBatchMetaBuilder = (args: {\n step: EvmTxStep\n index: number\n gasLimit: bigint\n}) => Record<string, unknown>\n\nexport type EvmBuildBatchArgs = {\n context: EvmProtocolContext\n steps: EvmTxStep[]\n purposeSuffix?: string\n buildBatchMeta: EvmBatchMetaBuilder\n /** First leg msgRaw without 0x prefix; defaults to first step calldata */\n firstMsgRawNo0x?: string\n destinationAddress?: Address\n /** Top-level `value` on bodyForSign when the payable amount is not on the first leg */\n payableValueWei?: bigint\n resolveGasLimit?: (args: {\n step: EvmTxStep\n index: number\n estimatedGas: bigint\n publicClient: PublicClient\n }) => Promise<bigint> | bigint\n /** Override default `estimateGas` (e.g. trade-API gas, skip post-approve deposit estimate). */\n estimateGasForStep?: (args: {\n step: EvmTxStep\n index: number\n publicClient: PublicClient\n executor: Address\n }) => Promise<bigint> | bigint\n}\n\n/**\n * Build unsigned EVM txs, estimate gas, serialize, hash — then assemble mpc-auth body via core envelope.\n */\nexport async function buildEvmMultisignBatch(args: EvmBuildBatchArgs): Promise<MultisignBuildResult> {\n const { context, steps } = args\n const {\n chainId,\n rpcUrl,\n executorAddress,\n chainDetail,\n useCustomGas,\n customGasChainDetails,\n keyGen,\n purposeText,\n } = context\n\n if (steps.length === 0) throw new Error('buildEvmMultisignBatch requires at least one step')\n\n const ch = defineChain({\n id: chainId,\n name: 'Destination',\n nativeCurrency: { decimals: 18, name: 'Ether', symbol: 'ETH' },\n rpcUrls: { default: { http: [rpcUrl] } },\n })\n const publicClient = createPublicClient({ chain: ch, transport: defiEvmTransport(rpcUrl) })\n\n const feeParams = await fetchChainFeeParams(rpcUrl, chainId)\n const legacy = Boolean(chainDetail?.legacy) || !feeParams.isEip1559\n const latestBaseFeeWei = !legacy\n ? ((await publicClient.getBlock({ blockTag: 'latest' })).baseFeePerGas ?? 0n)\n : 0n\n\n const gasLimitConfig =\n useCustomGas && chainDetail?.gasLimit != null ? Number(chainDetail.gasLimit) : undefined\n const chainGasLimitRouter =\n chainDetail?.gasLimit != null &&\n Number.isFinite(Number(chainDetail.gasLimit)) &&\n Number(chainDetail.gasLimit) > 0\n ? Number(chainDetail.gasLimit)\n : undefined\n const gasFeeMultiplier =\n useCustomGas && chainDetail?.gasMultiplier != null ? Number(chainDetail.gasMultiplier) : undefined\n\n const executor = getAddress(executorAddress)\n const baseNonce = await publicClient.getTransactionCount({ address: executor, blockTag: 'pending' })\n\n const legs: MultisignLeg[] = []\n\n for (let i = 0; i < steps.length; i++) {\n const step = steps[i]!\n const currentNonce = baseNonce + i\n\n let estimatedGas: bigint\n if (args.estimateGasForStep) {\n estimatedGas = await args.estimateGasForStep({ step, index: i, publicClient, executor })\n } else {\n try {\n estimatedGas = await publicClient.estimateGas({\n to: step.to,\n data: step.data,\n value: step.value,\n account: executor,\n })\n } catch {\n estimatedGas = step.fallbackGas ?? 100_000n\n }\n }\n\n let gasLimitI: bigint\n if (args.resolveGasLimit) {\n gasLimitI = await args.resolveGasLimit({ step, index: i, estimatedGas, publicClient })\n } else if (step.routerSwap) {\n gasLimitI = routerSwapGasLimitFromEstimate(estimatedGas, chainGasLimitRouter)\n } else {\n gasLimitI = useCustomGas\n ? gasLimitFromEstimateAndChainConfig(estimatedGas, gasLimitConfig)\n : estimatedGas\n }\n\n let proposalTxParams: ProposalTxParams\n let feeSnapshot: Record<string, unknown>\n let serialized: `0x${string}`\n\n if (legacy) {\n let gasPriceWei = await publicClient.getGasPrice()\n if (useCustomGas && gasFeeMultiplier != null && gasFeeMultiplier > 0) {\n gasPriceWei = (gasPriceWei * BigInt(100 + gasFeeMultiplier)) / 100n\n }\n if (useCustomGas && chainDetail?.gasPrice != null && chainDetail.gasPrice > 0) {\n const configured = parseGwei(gweiToDecimalString(Number(chainDetail.gasPrice)))\n if (configured > gasPriceWei) gasPriceWei = configured\n }\n serialized = serializeTransaction({\n type: 'legacy',\n to: step.to,\n data: step.data,\n value: step.value,\n gas: gasLimitI,\n gasPrice: gasPriceWei,\n nonce: currentNonce,\n chainId,\n })\n proposalTxParams = {\n nonce: currentNonce,\n gasLimit: gasLimitI.toString(),\n txType: 'legacy',\n gasPrice: gasPriceWei.toString(),\n }\n feeSnapshot = proposalTxParamsToFeeSnapshot(proposalTxParams)\n } else {\n const fetchedBase = feeParams.baseFeeGwei ?? 0\n const fetchedPriority = feeParams.priorityFeeGwei ?? 0\n const configuredBase =\n useCustomGas && chainDetail?.baseFee != null ? Number(chainDetail.baseFee) : 0\n const configuredPriority =\n useCustomGas && chainDetail?.priorityFee != null ? Number(chainDetail.priorityFee) : 0\n const effectiveBaseFeeGwei = Math.max(fetchedBase, configuredBase)\n const effectivePriorityFeeGwei = Math.max(fetchedPriority, configuredPriority)\n const baseFeeMultiplierPct =\n useCustomGas && chainDetail?.baseFeeMultiplier != null\n ? Math.max(100, Number(chainDetail.baseFeeMultiplier))\n : 100\n const baseComponentGwei = (effectiveBaseFeeGwei * baseFeeMultiplierPct) / 100\n const maxFeePerGasGwei = baseComponentGwei + effectivePriorityFeeGwei\n let maxPriorityFeePerGas =\n effectivePriorityFeeGwei > 0\n ? parseGwei(gweiToDecimalString(effectivePriorityFeeGwei))\n : parseGwei('1')\n let maxFeePerGas = parseGwei(gweiToDecimalString(maxFeePerGasGwei))\n if (useCustomGas && gasFeeMultiplier != null && gasFeeMultiplier > 0) {\n maxPriorityFeePerGas = (maxPriorityFeePerGas * BigInt(100 + gasFeeMultiplier)) / 100n\n maxFeePerGas = (maxFeePerGas * BigInt(100 + gasFeeMultiplier)) / 100n\n }\n ;({ maxFeePerGas, maxPriorityFeePerGas } = alignEip1559FeesWithLatestBase(\n maxFeePerGas,\n maxPriorityFeePerGas,\n latestBaseFeeWei,\n ))\n serialized = serializeTransaction({\n type: 'eip1559',\n to: step.to,\n data: step.data,\n value: step.value,\n gas: gasLimitI,\n maxFeePerGas,\n maxPriorityFeePerGas,\n nonce: currentNonce,\n chainId,\n })\n proposalTxParams = {\n nonce: currentNonce,\n gasLimit: gasLimitI.toString(),\n txType: 'eip1559',\n maxFeePerGas: maxFeePerGas.toString(),\n maxPriorityFeePerGas: maxPriorityFeePerGas.toString(),\n }\n feeSnapshot = i === 0 ? proposalTxParamsToFeeSnapshot(proposalTxParams) : {}\n }\n\n const h = keccak256(serialized)\n const msgHash = h.startsWith('0x') ? h.slice(2) : h\n\n const batchMetaExtra = args.buildBatchMeta({ step, index: i, gasLimit: gasLimitI })\n\n legs.push({\n msgHash,\n msgRaw: i === 0 && args.firstMsgRawNo0x != null ? args.firstMsgRawNo0x : serialized,\n destinationAddress: step.to,\n signatureText:\n typeof batchMetaExtra.signatureText === 'string'\n ? batchMetaExtra.signatureText\n : JSON.stringify(batchMetaExtra.signatureText ?? {}),\n audit: batchMetaExtra,\n feeSnapshot: i === 0 ? feeSnapshot : {},\n proposalTxParams,\n valueWei: i === 0 ? step.value : undefined,\n })\n\n if (i === 0 && args.firstMsgRawNo0x != null) {\n legs[0]!.msgRaw = args.firstMsgRawNo0x\n }\n }\n\n const extraJSON: Record<string, unknown> = {}\n if (useCustomGas && customGasChainDetails && Object.keys(customGasChainDetails).length > 0) {\n extraJSON.customGasChainDetails = customGasChainDetails\n }\n\n const result = finalizeMultisign({\n keyGen: keyGen as KeyGenSubset,\n purposeText,\n purposeSuffix: args.purposeSuffix,\n destinationChainID: String(chainId),\n destinationAddress: args.destinationAddress ?? steps[0]!.to,\n legs,\n extraJSON: Object.keys(extraJSON).length > 0 ? extraJSON : undefined,\n expiryDate: context.expiryDate,\n })\n const pv = args.payableValueWei\n if (pv != null && pv > 0n) {\n result.bodyForSign.value = pv.toString()\n }\n return result\n}\n\nexport const evmChainCategoryModule = {\n category: 'evm' as const,\n finalizeMultisign,\n buildEvmMultisignBatch,\n}\n","import { hashTypedData, stringToHex, type TypedDataDomain } from 'viem'\nimport type { KeyGenSubset, MultisignBuildResult } from './types.js'\nimport { finalizeMultisign } from './envelope.js'\n\nexport const EIP712_SIGN_REQUEST_KIND = 'eip712' as const\n\nexport type Eip712TypedDataField = { name: string; type: string }\n\nexport type Eip712TypedDataPayload = {\n domain: TypedDataDomain\n types: Record<string, readonly Eip712TypedDataField[] | Eip712TypedDataField[]>\n primaryType: string\n message: Record<string, unknown>\n}\n\nexport type Eip712MultisignDelivery = Record<string, unknown> & { kind: string }\n\nexport type BuildEip712MultisignLeg = {\n typedData: Eip712TypedDataPayload\n delivery: Eip712MultisignDelivery\n audit?: Record<string, unknown>\n}\n\nexport type BuildEip712MultisignArgs = {\n keyGen: KeyGenSubset\n purposeText: string\n purposeSuffix?: string\n /** Chain id stored on the sign request (protocol context; may differ from EIP-712 domain chainId). */\n destinationChainID: string\n destinationAddress: string\n legs: readonly BuildEip712MultisignLeg[]\n expiryDate?: number\n}\n\nfunction msgHashNo0x(digest: `0x${string}`): string {\n return digest.startsWith('0x') ? digest.slice(2) : digest\n}\n\nfunction eip712SignatureText(domain: TypedDataDomain, primaryType: string): string {\n return JSON.stringify({\n kind: 'EIP-712',\n ...(typeof domain.name === 'string' ? { name: domain.name } : {}),\n primaryType,\n })\n}\n\nfunction jsonStringifyForAudit(value: unknown): string {\n return JSON.stringify(value, (_, v) => (typeof v === 'bigint' ? v.toString() : v))\n}\n\nfunction eip712LegEnvelope(\n typedData: Eip712TypedDataPayload,\n delivery: Eip712MultisignDelivery,\n digest: `0x${string}`,\n): Record<string, unknown> {\n return {\n version: 1,\n digest,\n domain: typedData.domain,\n types: typedData.types,\n primaryType: typedData.primaryType,\n message: typedData.message,\n delivery,\n }\n}\n\nfunction eip712MsgRawHex(envelope: Record<string, unknown>): string {\n return stringToHex(jsonStringifyForAudit(envelope))\n}\n\n/**\n * Build an mpc-auth multiSignRequest body for one or more EIP-712 digests (no EVM tx broadcast).\n * `extraJSON.eip712` is always an array. N=1 uses `msgHash`/`msgRaw`; N>=2 uses `messageHashes`/`messageRawBatch`.\n */\nexport function buildEip712Multisign(args: BuildEip712MultisignArgs): MultisignBuildResult {\n if (args.legs.length < 1) {\n throw new Error('buildEip712Multisign requires at least one leg')\n }\n\n const eip712: Record<string, unknown>[] = []\n const legs = args.legs.map((leg) => {\n const digest = hashTypedData({\n domain: leg.typedData.domain,\n types: leg.typedData.types,\n primaryType: leg.typedData.primaryType,\n message: leg.typedData.message,\n })\n const envelope = eip712LegEnvelope(leg.typedData, leg.delivery, digest)\n eip712.push(envelope)\n return {\n msgHash: msgHashNo0x(digest),\n msgRaw: eip712MsgRawHex(envelope),\n destinationAddress: args.destinationAddress,\n signatureText: eip712SignatureText(leg.typedData.domain, leg.typedData.primaryType),\n audit: {\n kind: 'EIP712',\n primaryType: leg.typedData.primaryType,\n deliveryKind: leg.delivery.kind,\n ...(leg.audit ?? {}),\n },\n feeSnapshot: {},\n }\n })\n\n return finalizeMultisign({\n keyGen: args.keyGen,\n purposeText: args.purposeText,\n purposeSuffix: args.purposeSuffix,\n destinationChainID: args.destinationChainID,\n destinationAddress: args.destinationAddress,\n extraJSON: {\n signRequestKind: EIP712_SIGN_REQUEST_KIND,\n eip712,\n },\n expiryDate: args.expiryDate,\n legs,\n })\n}\n","import { getAddress } from 'viem'\nimport { buildEip712Multisign } from '../../../core/eip712Multisign.js'\nimport type { KeyGenSubset } from '../../../core/types.js'\n\nconst DEFAULT_FORUM_URL = 'https://forum.continuumdao.org'\n\nexport const FORUM_GOVERNANCE_SECTIONS = [\n 'decision',\n 'election',\n 'treasury',\n 'constitution',\n 'admin',\n] as const\n\nexport type ForumGovernanceSection = (typeof FORUM_GOVERNANCE_SECTIONS)[number]\n\nexport const FORUM_IDEA_SECTION = 'ideas' as const\n\nexport const PROPOSAL_TYPE_TO_FORUM_SECTION: Record<string, ForumGovernanceSection> = {\n Admin: 'admin',\n Constitution: 'constitution',\n Decision: 'decision',\n Election: 'election',\n Treasury: 'treasury',\n}\n\nconst IDEA_SECTION_ALIASES = new Set(['ideas', 'ideas-suggestions', 'suggestions'])\n\nexport function expectedForumSectionForProposalType(typeLabel: string): ForumGovernanceSection | null {\n return PROPOSAL_TYPE_TO_FORUM_SECTION[typeLabel] ?? null\n}\n\nexport function isForumIdeaSection(section?: string): boolean {\n return IDEA_SECTION_ALIASES.has(String(section || '').toLowerCase())\n}\n\nexport function applyForumSectionCheck<T extends { typeLabel: string; briefing: string; risks: string[] }>(\n out: T,\n section: string | null | undefined,\n cid?: number | null,\n): T & { forumSection: string | null; forumCid: number | null } {\n const forumSection = section?.trim() || null\n const forumCid = cid != null && Number(cid) > 0 ? Number(cid) : null\n const expected = expectedForumSectionForProposalType(out.typeLabel)\n const added: string[] = []\n if (forumSection === FORUM_IDEA_SECTION || isForumIdeaSection(forumSection ?? undefined)) {\n added.push(\n 'Forum thread is in Ideas & Suggestions, not a Governance proposal category. Ideas are discussion only and must not be used as forumKey.',\n )\n } else if (expected && forumSection && forumSection !== expected) {\n added.push(`Forum section is ${forumSection} but proposal type is ${out.typeLabel} (expected ${expected}).`)\n }\n const extraLine =\n forumSection === FORUM_IDEA_SECTION || isForumIdeaSection(forumSection ?? undefined)\n ? `Forum section: ideas (mismatch — expected ${expected ?? 'a Governance category'}).`\n : expected && forumSection && forumSection !== expected\n ? `Forum section: ${forumSection} (mismatch — expected ${expected}).`\n : forumSection\n ? `Forum section: ${forumSection}`\n : null\n const lines = out.briefing.split('\\n')\n if (extraLine) {\n const forumLine = lines.findIndex((l) => l.startsWith('Forum:'))\n if (forumLine >= 0) lines.splice(forumLine + 1, 0, extraLine)\n else lines.splice(1, 0, extraLine)\n }\n if (added.length) {\n if (!lines.includes('Risks:')) lines.push('Risks:')\n for (const r of added) lines.push(`- ${r}`)\n }\n return { ...out, briefing: lines.join('\\n'), risks: [...out.risks, ...added], forumSection, forumCid }\n}\n\nexport const FORUM_LOGIN_DELIVERY_KIND = 'forumLogin' as const\n\nexport function continuumDaoForumUrl(explicit?: string): string {\n const raw =\n explicit?.trim() ||\n (typeof process !== 'undefined' ? process.env.FORUM_URL || process.env.NEXT_PUBLIC_FORUM_URL : '') ||\n DEFAULT_FORUM_URL\n return raw.replace(/\\/+$/, '')\n}\n\n/** Homepage or empty string is refused. A proposal must point at a created /topic/:tid or /t/:tid. */\nexport function assertContinuumDaoForumTopicKey(forumKey: string, forumUrl?: string): string {\n const raw = String(forumKey || '').trim()\n if (!raw) {\n throw new Error(\n 'A forum thread is required. Create one with ctm_continuum_dao_forum_create_topic in a Governance section (decision / election / treasury / constitution / admin) before propose or register_proposal. Ideas & Suggestions threads are not valid forumKey values.',\n )\n }\n let url: URL\n try {\n url = new URL(raw)\n } catch {\n throw new Error('forumKey must be a full forum topic URL (https://forum.continuumdao.org/topic/123).')\n }\n const expected = new URL(`${continuumDaoForumUrl(forumUrl)}/`)\n if (url.host !== expected.host) {\n throw new Error(`forumKey must be on ${expected.host}.`)\n }\n if (!/\\/(?:topic|t)\\/\\d+/.test(url.pathname)) {\n throw new Error('forumKey must be a created thread (/topic/:tid or /t/:tid), not the forum homepage.')\n }\n return raw.replace(/\\/+$/, '')\n}\n\nfunction forumError(body: unknown, status: number): Error {\n const o = body && typeof body === 'object' ? (body as Record<string, unknown>) : {}\n const st = o.status && typeof o.status === 'object' ? (o.status as Record<string, unknown>) : null\n const msg = (st && typeof st.message === 'string' && st.message) ||\n (typeof o.message === 'string' && o.message) ||\n `forum HTTP ${status}`\n return new Error(msg)\n}\n\nasync function forumFetch(path: string, init: RequestInit & { forumUrl?: string; ticket?: string } = {}) {\n const url = `${continuumDaoForumUrl(init.forumUrl)}${path}`\n const headers: Record<string, string> = {\n Accept: 'application/json',\n ...(init.body ? { 'Content-Type': 'application/json' } : {}),\n }\n if (init.ticket) {\n headers.Authorization = `Bearer ${init.ticket}`\n }\n const res = await fetch(url, {\n method: init.method || 'GET',\n headers,\n body: init.body,\n cache: 'no-store',\n })\n const body = await res.json().catch(() => ({}))\n if (!res.ok) {\n throw forumError(body, res.status)\n }\n return body\n}\n\nexport async function continuumDaoForumResolve(args: { url?: string; tid?: string | number; forumUrl?: string }) {\n const qs = new URLSearchParams()\n if (args.url) qs.set('url', String(args.url))\n if (args.tid != null) qs.set('tid', String(args.tid))\n return forumFetch(`/api/continuum/forum/resolve?${qs}`, { forumUrl: args.forumUrl })\n}\n\nexport async function continuumDaoForumFetchThread(args: {\n url?: string\n tid?: string | number\n index?: number\n start?: number\n limit?: number\n forumUrl?: string\n}) {\n const qs = new URLSearchParams()\n if (args.url) qs.set('url', String(args.url))\n if (args.tid != null) qs.set('tid', String(args.tid))\n if (args.index != null) qs.set('index', String(args.index))\n if (args.start != null) qs.set('start', String(args.start))\n if (args.limit != null) qs.set('limit', String(args.limit))\n return forumFetch(`/api/continuum/forum/thread?${qs}`, { forumUrl: args.forumUrl })\n}\n\nexport async function continuumDaoForumReplyCount(args: { url?: string; tid?: string | number; forumUrl?: string }) {\n const qs = new URLSearchParams()\n if (args.url) qs.set('url', String(args.url))\n if (args.tid != null) qs.set('tid', String(args.tid))\n return forumFetch(`/api/continuum/forum/thread/replies?${qs}`, { forumUrl: args.forumUrl })\n}\n\nexport async function continuumDaoForumFetchPost(args: { pid: string | number; forumUrl?: string }) {\n return forumFetch(`/api/continuum/forum/post?pid=${encodeURIComponent(String(args.pid))}`, {\n forumUrl: args.forumUrl,\n })\n}\n\nfunction assertForumHours(hours?: number) {\n if (hours != null && (!Number.isFinite(hours) || hours <= 0)) {\n throw new Error('hours must be a positive number')\n }\n}\n\nexport function assertContinuumDaoForumSearchInput(args: {\n query?: string\n hours?: number\n since?: string\n}) {\n assertForumHours(args.hours)\n if (!args.query?.trim() && args.hours == null && !args.since?.trim()) {\n throw new Error('Provide query and/or a time filter (hours or since)')\n }\n}\n\nexport function assertContinuumDaoForumRecentInput(args: { hours?: number; since?: string }) {\n assertForumHours(args.hours)\n if (args.hours == null && !args.since?.trim()) {\n throw new Error('Provide a time filter (hours or since)')\n }\n}\n\n/** Search thread titles (original posts) and post bodies. Returns `{ id, title, username, timestamp, createdAt }` (`id` is pid). */\nexport async function continuumDaoForumSearch(args: {\n query?: string\n hours?: number\n since?: string\n start?: number\n limit?: number\n forumUrl?: string\n}) {\n assertContinuumDaoForumSearchInput(args)\n const qs = new URLSearchParams()\n if (args.query?.trim()) qs.set('query', args.query.trim())\n if (args.hours != null) qs.set('hours', String(args.hours))\n if (args.since?.trim()) qs.set('since', args.since.trim())\n if (args.start != null) qs.set('start', String(args.start))\n if (args.limit != null) qs.set('limit', String(args.limit))\n return forumFetch(`/api/continuum/forum/search?${qs}`, { forumUrl: args.forumUrl })\n}\n\n/** Newest readable posts across the whole forum. Returns `{ id, title, username, timestamp, createdAt }`. */\nexport async function continuumDaoForumRecent(args: {\n hours?: number\n since?: string\n start?: number\n limit?: number\n ticket?: string\n forumUrl?: string\n}) {\n assertContinuumDaoForumRecentInput(args)\n const qs = new URLSearchParams()\n if (args.hours != null) qs.set('hours', String(args.hours))\n if (args.since?.trim()) qs.set('since', args.since.trim())\n if (args.start != null) qs.set('start', String(args.start))\n if (args.limit != null) qs.set('limit', String(args.limit))\n return forumFetch(`/api/continuum/forum/recent?${qs}`, {\n forumUrl: args.forumUrl,\n ticket: args.ticket,\n })\n}\n\nexport function assertContinuumDaoForumDeleteInput(args: {\n pid?: string | number\n tid?: string | number\n url?: string\n username?: string\n hours?: number\n since?: string\n ticket?: string\n}) {\n if (!args.ticket?.trim()) {\n throw new Error('ticket is required to delete forum posts')\n }\n assertForumHours(args.hours)\n const hasPost = args.pid != null && String(args.pid).trim() !== ''\n const hasThread = Boolean(args.url?.trim() || (args.tid != null && String(args.tid).trim() !== ''))\n const hasUser = Boolean(args.username?.trim())\n if (Number(hasPost) + Number(hasThread) + Number(hasUser) !== 1) {\n throw new Error('Provide exactly one of pid, tid/url, or username')\n }\n}\n\n/** Admin/moderator soft-delete. Recency (`hours` / `since`) is optional; default is all. */\nexport async function continuumDaoForumDelete(args: {\n pid?: string | number\n tid?: string | number\n url?: string\n username?: string\n hours?: number\n since?: string\n ticket?: string\n forumUrl?: string\n}) {\n assertContinuumDaoForumDeleteInput(args)\n return forumFetch('/api/continuum/forum/delete', {\n method: 'POST',\n forumUrl: args.forumUrl,\n ticket: args.ticket,\n body: JSON.stringify({\n pid: args.pid,\n tid: args.tid,\n url: args.url,\n username: args.username,\n hours: args.hours,\n since: args.since,\n }),\n })\n}\n\nexport async function continuumDaoForumUserPostIds(args: {\n username: string\n start?: number\n limit?: number\n forumUrl?: string\n}) {\n const qs = new URLSearchParams({ username: args.username })\n if (args.start != null) qs.set('start', String(args.start))\n if (args.limit != null) qs.set('limit', String(args.limit))\n return forumFetch(`/api/continuum/forum/user/posts?${qs}`, { forumUrl: args.forumUrl })\n}\n\nexport async function continuumDaoForumReply(args: {\n url?: string\n tid?: string | number\n content: string\n toPid?: number\n ticket?: string\n forumUrl?: string\n}) {\n return forumFetch('/api/continuum/forum/reply', {\n method: 'POST',\n forumUrl: args.forumUrl,\n ticket: args.ticket,\n body: JSON.stringify({\n url: args.url,\n tid: args.tid,\n content: args.content,\n toPid: args.toPid,\n }),\n })\n}\n\nexport async function continuumDaoForumReact(args: {\n pid: string | number\n emoji: string\n ticket?: string\n forumUrl?: string\n}) {\n return forumFetch('/api/continuum/forum/react', {\n method: 'POST',\n forumUrl: args.forumUrl,\n ticket: args.ticket,\n body: JSON.stringify({ pid: args.pid, emoji: args.emoji }),\n })\n}\n\nexport async function continuumDaoForumCreateTopic(args: {\n section?: string\n cid?: number\n title: string\n content: string\n ticket?: string\n forumUrl?: string\n}) {\n if (isForumIdeaSection(args.section)) {\n throw new Error(\n 'Ideas & Suggestions is not a proposal category. Use ctm_continuum_dao_forum_create_idea for discussion. Formal proposals must use decision, election, treasury, constitution, or admin.',\n )\n }\n return forumFetch('/api/continuum/forum/topic', {\n method: 'POST',\n forumUrl: args.forumUrl,\n ticket: args.ticket,\n body: JSON.stringify({\n section: args.section,\n cid: args.cid,\n title: args.title,\n content: args.content,\n }),\n })\n}\n\n/** Informal Ideas & Suggestions post. Not a proposal and not a valid forumKey. */\nexport async function continuumDaoForumCreateIdea(args: {\n title: string\n content: string\n ticket?: string\n forumUrl?: string\n}) {\n return forumFetch('/api/continuum/forum/topic', {\n method: 'POST',\n forumUrl: args.forumUrl,\n ticket: args.ticket,\n body: JSON.stringify({\n section: FORUM_IDEA_SECTION,\n title: args.title,\n content: args.content,\n }),\n })\n}\n\nexport async function continuumDaoForumMe(args: { ticket?: string; forumUrl?: string } = {}) {\n return forumFetch('/api/continuum/forum/me', { forumUrl: args.forumUrl, ticket: args.ticket })\n}\n\nexport function assertContinuumDaoForumMarkReadInput(args: {\n ticket?: string\n tid?: string | number\n url?: string\n tids?: Array<string | number>\n all?: boolean\n}) {\n if (!args.ticket?.trim()) {\n throw new Error('ticket is required to mark forum topics read')\n }\n const all = Boolean(args.all)\n const one = Boolean(args.url?.trim() || (args.tid != null && String(args.tid).trim() !== ''))\n const many = Array.isArray(args.tids) && args.tids.length > 0\n if (Number(all) + Number(one) + Number(many) !== 1) {\n throw new Error('Provide exactly one of tid/url, tids, or all')\n }\n}\n\nexport async function continuumDaoForumUnread(args: {\n ticket?: string\n filter?: string\n start?: number\n limit?: number\n forumUrl?: string\n}) {\n if (!args.ticket?.trim()) {\n throw new Error('ticket is required to list unread forum topics')\n }\n const qs = new URLSearchParams()\n if (args.filter?.trim()) qs.set('filter', args.filter.trim())\n if (args.start != null) qs.set('start', String(args.start))\n if (args.limit != null) qs.set('limit', String(args.limit))\n const suffix = qs.toString() ? `?${qs}` : ''\n return forumFetch(`/api/continuum/forum/unread${suffix}`, {\n forumUrl: args.forumUrl,\n ticket: args.ticket,\n })\n}\n\nexport async function continuumDaoForumMarkRead(args: {\n ticket?: string\n tid?: string | number\n url?: string\n tids?: Array<string | number>\n all?: boolean\n forumUrl?: string\n}) {\n assertContinuumDaoForumMarkReadInput(args)\n return forumFetch('/api/continuum/forum/read', {\n method: 'POST',\n forumUrl: args.forumUrl,\n ticket: args.ticket,\n body: JSON.stringify({\n tid: args.tid,\n url: args.url,\n tids: args.tids,\n all: args.all,\n }),\n })\n}\n\nexport async function continuumDaoForumMarkUnread(args: {\n ticket?: string\n tid?: string | number\n url?: string\n forumUrl?: string\n}) {\n if (!args.ticket?.trim()) {\n throw new Error('ticket is required to mark a forum topic unread')\n }\n if (!args.url?.trim() && (args.tid == null || String(args.tid).trim() === '')) {\n throw new Error('Provide tid or url')\n }\n return forumFetch('/api/continuum/forum/unread', {\n method: 'POST',\n forumUrl: args.forumUrl,\n ticket: args.ticket,\n body: JSON.stringify({ tid: args.tid, url: args.url }),\n })\n}\n\nexport async function continuumDaoForumSections(args: { forumUrl?: string } = {}) {\n return forumFetch('/api/continuum/forum/sections', { forumUrl: args.forumUrl })\n}\n\nexport async function continuumDaoMpaListing(args: {\n kind: 'offer' | 'request' | 'directory' | 'opportunity'\n title?: string\n summary: string\n details: string\n capabilities: string[]\n expiresAt?: string\n contact?: string\n ticket?: string\n forumUrl?: string\n}) {\n if (!args.ticket?.trim()) {\n throw new Error('ticket is required to post an MPA listing')\n }\n return forumFetch('/api/continuum/forum/listing', {\n method: 'POST',\n forumUrl: args.forumUrl,\n ticket: args.ticket,\n body: JSON.stringify({\n kind: args.kind,\n title: args.title,\n summary: args.summary,\n details: args.details,\n capabilities: args.capabilities,\n expiresAt: args.expiresAt,\n contact: args.contact,\n }),\n })\n}\n\nexport async function continuumDaoMpaRetract(args: {\n url?: string\n tid?: string | number\n ticket?: string\n forumUrl?: string\n}) {\n if (!args.ticket?.trim()) {\n throw new Error('ticket is required to retract an MPA listing')\n }\n return forumFetch('/api/continuum/forum/retract', {\n method: 'POST',\n forumUrl: args.forumUrl,\n ticket: args.ticket,\n body: JSON.stringify({ url: args.url, tid: args.tid }),\n })\n}\n\nexport async function continuumDaoMpaFlag(args: {\n url?: string\n tid?: string | number\n reason: string\n ticket?: string\n forumUrl?: string\n}) {\n if (!args.ticket?.trim()) {\n throw new Error('ticket is required to flag an MPA listing')\n }\n return forumFetch('/api/continuum/forum/flag', {\n method: 'POST',\n forumUrl: args.forumUrl,\n ticket: args.ticket,\n body: JSON.stringify({ url: args.url, tid: args.tid, reason: args.reason }),\n })\n}\n\nexport async function continuumDaoMpaMailboxList(args: { ticket?: string; forumUrl?: string } = {}) {\n if (!args.ticket?.trim()) {\n throw new Error('ticket is required to list Agent Mail')\n }\n return forumFetch('/api/continuum/forum/mailbox', { forumUrl: args.forumUrl, ticket: args.ticket })\n}\n\nexport async function continuumDaoMpaMailboxOpen(args: {\n username: string\n content?: string\n ticket?: string\n forumUrl?: string\n}) {\n if (!args.ticket?.trim()) {\n throw new Error('ticket is required to open Agent Mail')\n }\n return forumFetch('/api/continuum/forum/mailbox', {\n method: 'POST',\n forumUrl: args.forumUrl,\n ticket: args.ticket,\n body: JSON.stringify({ username: args.username, content: args.content }),\n })\n}\n\nexport async function continuumDaoMpaMailboxSend(args: {\n username?: string\n url?: string\n tid?: string | number\n content: string\n ticket?: string\n forumUrl?: string\n}) {\n if (!args.ticket?.trim()) {\n throw new Error('ticket is required to send Agent Mail')\n }\n return forumFetch('/api/continuum/forum/mailbox/send', {\n method: 'POST',\n forumUrl: args.forumUrl,\n ticket: args.ticket,\n body: JSON.stringify({\n username: args.username,\n url: args.url,\n tid: args.tid,\n content: args.content,\n }),\n })\n}\n\nexport async function continuumDaoTechnocoreBind(args: {\n did: string\n signature: string\n ticket?: string\n forumUrl?: string\n}) {\n if (!args.ticket?.trim()) {\n throw new Error('ticket is required to bind a Technocore DID')\n }\n return forumFetch('/api/continuum/forum/technocore/bind', {\n method: 'POST',\n forumUrl: args.forumUrl,\n ticket: args.ticket,\n body: JSON.stringify({ did: args.did, signature: args.signature }),\n })\n}\n\nexport async function continuumDaoForumSignOut(args: { ticket?: string; forumUrl?: string } = {}) {\n if (!args.ticket?.trim()) {\n throw new Error('ticket is required to sign out')\n }\n return forumFetch('/api/continuum/eip712/logout', {\n method: 'POST',\n forumUrl: args.forumUrl,\n ticket: args.ticket,\n body: JSON.stringify({}),\n })\n}\n\nexport type ForumSignInEligible = {\n ok: boolean\n eligible: boolean\n address?: string\n reason?: string\n}\n\nexport async function continuumDaoForumSignInEligible(args: {\n address: string\n forumUrl?: string\n}): Promise<ForumSignInEligible> {\n const address = getAddress(args.address)\n const url = `${continuumDaoForumUrl(args.forumUrl)}/api/continuum/eip712/eligible?address=${encodeURIComponent(address)}`\n const res = await fetch(url, { headers: { Accept: 'application/json' }, cache: 'no-store' })\n const body = (await res.json().catch(() => ({}))) as Record<string, unknown>\n const st = body.status && typeof body.status === 'object' ? (body.status as Record<string, unknown>) : null\n const reason =\n (typeof body.reason === 'string' && body.reason) ||\n (st && typeof st.message === 'string' && st.message) ||\n undefined\n const ok = res.ok && Boolean(body.ok ?? body.eligible)\n return {\n ok,\n eligible: ok,\n address: typeof body.address === 'string' ? body.address : address,\n reason: ok ? undefined : reason || 'Address does not meet the veCTM threshold',\n }\n}\n\nexport async function continuumDaoForumSignInNonce(args: {\n address: string\n nodeKey?: string\n username?: string\n forumUrl?: string\n}) {\n const qs = new URLSearchParams({\n address: args.address,\n nodeKey: args.nodeKey || '',\n username: args.username || '',\n })\n return forumFetch(`/api/continuum/eip712/nonce?${qs}`, { forumUrl: args.forumUrl })\n}\n\nexport async function buildEvmMultisignBodyContinuumDaoForumSignIn(args: {\n keyGen: KeyGenSubset\n executorAddress: string\n chainId: number\n purposeText: string\n nodeKey?: string\n username?: string\n forumUrl?: string\n expiryDate?: number\n}) {\n const owner = getAddress(args.executorAddress)\n const gate = await continuumDaoForumSignInEligible({ address: owner, forumUrl: args.forumUrl })\n if (!gate.ok) {\n throw new Error(\n `${gate.reason || 'Address does not meet the veCTM threshold'}. Do not start a multi-sign request.`,\n )\n }\n const typed = (await continuumDaoForumSignInNonce({\n address: owner,\n nodeKey: args.nodeKey,\n username: args.username,\n forumUrl: args.forumUrl,\n })) as {\n domain: { name: string; version: string; chainId: number; verifyingContract: `0x${string}` }\n types: Record<string, { name: string; type: string }[]>\n primaryType: string\n message: Record<string, unknown>\n nodeKey?: string\n }\n const types = { ...typed.types }\n delete types.EIP712Domain\n return buildEip712Multisign({\n keyGen: args.keyGen,\n purposeText: args.purposeText,\n destinationChainID: String(args.chainId),\n destinationAddress: owner,\n legs: [\n {\n typedData: {\n domain: typed.domain,\n types,\n primaryType: typed.primaryType,\n message: typed.message,\n },\n delivery: {\n kind: FORUM_LOGIN_DELIVERY_KIND,\n forum: continuumDaoForumUrl(args.forumUrl),\n nodeKey: args.nodeKey || typed.nodeKey || '',\n },\n },\n ],\n expiryDate: args.expiryDate,\n })\n}\n","/**\n * Turn a backend proposal into a briefing the agent can read aloud.\n * Encoder no-ops (value 0, calldata 0x) are labeled signaling, not transfers.\n */\nimport { isContinuumDaoCommitteeProposer } from './constants.js'\nimport { applyForumSectionCheck, continuumDaoForumFetchThread } from './forum.js'\nimport { continuumDaoFetchProposal, continuumDaoFetchProposals, isLegacyContinuumDaoGovernor } from './governance.js'\n\nexport const PROPOSAL_TYPE_LABELS = ['Admin', 'Constitution', 'Decision', 'Election', 'Treasury'] as const\n\nconst APPROVE_RE = /^(approve|increaseAllowance|increaseapproval)\\(/i\nconst DENY_SIG_RE = /^(transfer|transferFrom|approve|increaseAllowance|setOwner|upgradeTo|upgradeToAndCall)\\(/i\n\nexport type ExplainedAction = {\n line: string\n noOp: boolean\n networkLabel: string\n chainId: string\n viaC3: boolean\n target: string\n value: string\n signature: string\n flags: string[]\n}\n\nexport type ExplainedOption = {\n label: string\n actions: ExplainedAction[]\n}\n\nexport type ContinuumDaoExplainProposalResult = {\n id?: number\n onchainId: string\n title: string\n description: string\n proposer: string\n /** True when `proposer` is a ContinuumDAO Committee address. */\n committeeProposer: boolean\n forumKey: string\n forumSection?: string | null\n forumCid?: number | null\n typeLabel: string\n configuration: 'bravo' | 'delta'\n nWinners?: number\n governorAddress?: string\n briefing: string\n actions: ExplainedAction[]\n options: ExplainedOption[]\n risks: string[]\n}\n\nfunction asRecord(value: unknown): Record<string, unknown> | null {\n return value && typeof value === 'object' && !Array.isArray(value) ? (value as Record<string, unknown>) : null\n}\n\nfunction str(v: unknown, fallback = ''): string {\n return v == null ? fallback : String(v)\n}\n\nexport function isGovNoOpAction(action: {\n target?: string\n value?: string\n signature?: string\n calldata?: string\n}): boolean {\n const value = (action.value ?? '0').trim()\n const sig = (action.signature ?? '').trim()\n const data = (action.calldata ?? '').trim()\n const emptyData = data === '' || data === '0x'\n return (value === '' || value === '0') && sig === '' && emptyData\n}\n\nconst LINEA_HOME_CHAIN_IDS = new Set(['59144', '59141'])\n\n/** Linea (DAO home chain) is never a C3 remote action, even when `network.c3governor` is set. */\nexport function isLineaHomeNetwork(net: { name?: string; label?: string; chainId?: string | number }): boolean {\n const name = `${net.name ?? ''} ${net.label ?? ''}`.toLowerCase()\n if (name.includes('linea')) return true\n return LINEA_HOME_CHAIN_IDS.has(String(net.chainId ?? ''))\n}\n\nexport function isRemoteC3Action(net: {\n name?: string\n label?: string\n chainId?: string | number\n c3governor?: string\n}): boolean {\n const c3 = (net.c3governor ?? '').trim()\n const hasC3 = Boolean(c3 && c3 !== '0x0000000000000000000000000000000000000000')\n return hasC3 && !isLineaHomeNetwork(net)\n}\n\nexport function explainGovAction(raw: unknown): ExplainedAction {\n const a = asRecord(raw) ?? {}\n const net = asRecord(a.network) ?? {}\n const networkLabel = str(net.label || net.name, 'Unknown network')\n const chainId = str(net.chainId)\n const viaC3 = isRemoteC3Action({\n name: str(net.name),\n label: str(net.label),\n chainId,\n c3governor: str(net.c3governor),\n })\n const target = str(a.target)\n const value = str(a.value, '0')\n const signature = str(a.signature)\n const inputs = Array.isArray(a.inputs) ? a.inputs : []\n const inputParts = inputs.map((inp) => {\n const row = asRecord(inp) ?? {}\n return `${str(row.name || row.type, 'arg')}=${str(row.value)}`\n })\n const noOp = isGovNoOpAction({ target, value, signature, calldata: str(a.calldata) })\n const flags: string[] = []\n if (noOp) flags.push('signaling-noop')\n if (viaC3) flags.push('c3-remote')\n if (BigInt(value || '0') > 0n) flags.push('sends-value')\n if (APPROVE_RE.test(signature)) flags.push('allowance')\n if (DENY_SIG_RE.test(signature)) flags.push('sensitive-signature')\n if (!noOp && !signature) flags.push('unknown-signature')\n const valueBit = BigInt(value || '0') > 0n ? `; send ${value} wei` : ''\n const argsBit = inputParts.length ? ` with ${inputParts.join(', ')}` : ''\n const c3Bit = viaC3 ? ' via C3' : ''\n const line = noOp\n ? `On ${networkLabel}${c3Bit}: no on-chain effect (encoder no-op / signaling).`\n : `On ${networkLabel} (chain ${chainId || '—'})${c3Bit}: call ${signature || '(no signature)'} on ${target || '—'} ${argsBit}${valueBit}.`.replace(/\\s+/g, ' ').trim()\n return { line, noOp, networkLabel, chainId, viaC3, target, value, signature, flags }\n}\n\nfunction typeLabel(type: unknown): string {\n const n = Number(type)\n return Number.isFinite(n) && PROPOSAL_TYPE_LABELS[n] ? PROPOSAL_TYPE_LABELS[n] : str(type, 'Unknown')\n}\n\nexport function explainProposalRecord(raw: unknown): ContinuumDaoExplainProposalResult {\n const row = asRecord(raw)\n if (!row) throw new Error('explain_proposal: empty proposal')\n const onchainId = str(row.onchainId ?? row.onchain_id ?? row.proposalId)\n if (!onchainId) throw new Error('explain_proposal: missing onchainId')\n const idNum = typeof row.id === 'number' ? row.id : Number(row.id)\n const governorAddress = str(row.governorAddress ?? row.governor_address).trim() || undefined\n const configuration = Number(row.configuration) === 1 ? 'delta' : 'bravo'\n const nWinners = row.nWinners != null ? Number(row.nWinners) : undefined\n const actionsRaw = Array.isArray(row.actions) ? row.actions : []\n const optionsRaw = Array.isArray(row.options) ? row.options : []\n const actions = actionsRaw.map(explainGovAction)\n const options = optionsRaw.map((opt) => {\n const o = asRecord(opt) ?? {}\n const optActions = Array.isArray(o.actions) ? o.actions.map(explainGovAction) : []\n return { label: str(o.label, 'Untitled option'), actions: optActions }\n })\n const risks: string[] = []\n const t = typeLabel(row.type)\n if (t === 'Treasury' || t === 'Admin' || t === 'Constitution') {\n risks.push(`${t} proposal — treat as high impact.`)\n }\n const all = configuration === 'delta' ? options.flatMap((o) => o.actions) : actions\n if (all.some((a) => a.flags.includes('sends-value'))) risks.push('At least one action sends native value.')\n if (all.some((a) => a.flags.includes('allowance'))) risks.push('At least one action changes token allowance.')\n if (all.some((a) => a.flags.includes('sensitive-signature'))) risks.push('Sensitive signature (transfer / approve / upgrade / ownership).')\n if (all.some((a) => a.flags.includes('unknown-signature') && !a.noOp)) risks.push('An action has no readable signature.')\n if (all.some((a) => a.viaC3)) risks.push('One or more actions execute on another network via C3, not on Linea.')\n if (!str(row.description).trim() && all.some((a) => !a.noOp)) {\n risks.push('Empty description with on-chain actions.')\n }\n\n const proposer = str(row.proposer)\n const committeeProposer = isContinuumDaoCommitteeProposer(proposer)\n const lines: string[] = []\n lines.push(`#${row.id ?? '—'} ${str(row.title, 'Untitled')} (${t}, ${configuration === 'delta' ? 'Delta' : 'Bravo'}).`)\n if (committeeProposer) {\n lines.push(\n `Proposer ${proposer} is a ContinuumDAO Committee member (any EOA or contract — not required to be a KeyGen).`,\n )\n } else {\n lines.push(\n `Proposer ${proposer || '—'} (any EOA or contract — not required to be a KeyGen). This is not a Committee proposal.`,\n )\n }\n if (governorAddress) {\n lines.push(\n isLegacyContinuumDaoGovernor(governorAddress)\n ? `Governor ${governorAddress} (superseded Linea DAO; catalog ids are negative).`\n : `Governor ${governorAddress}.`,\n )\n }\n if (str(row.forumKey)) lines.push(`Forum: ${str(row.forumKey)}`)\n if (configuration === 'bravo') {\n lines.push('If this passes, the DAO will execute, in order:')\n for (const a of actions) lines.push(`- ${a.line}`)\n if (actions.length === 0) lines.push('- No user actions (signaling / no-op).')\n } else {\n lines.push(`Delta: top ${nWinners ?? '?'} option(s) execute. None of the above (NOTA) is a vote slot, not an option with actions.`)\n for (const [i, opt] of options.entries()) {\n lines.push(`Option ${i + 1} — ${opt.label}:`)\n for (const a of opt.actions) lines.push(` - ${a.line}`)\n if (opt.actions.length === 0) lines.push(' - No user actions (signaling / no-op).')\n }\n }\n if (risks.length) {\n lines.push('Risks:')\n for (const r of risks) lines.push(`- ${r}`)\n }\n lines.push('Queue is not implemented. Vote while Active; execute from Succeeded.')\n\n return {\n id: Number.isFinite(idNum) ? idNum : undefined,\n onchainId,\n title: str(row.title, 'Untitled'),\n description: str(row.description),\n proposer,\n committeeProposer,\n forumKey: str(row.forumKey),\n typeLabel: t,\n configuration,\n nWinners: Number.isFinite(nWinners) ? nWinners : undefined,\n governorAddress,\n briefing: lines.join('\\n'),\n actions,\n options,\n risks,\n }\n}\n\nasync function withForumSection(\n out: ContinuumDaoExplainProposalResult,\n forumUrl?: string,\n): Promise<ContinuumDaoExplainProposalResult> {\n if (!out.forumKey) return out\n try {\n const thread = (await continuumDaoForumFetchThread({ url: out.forumKey, index: 0, forumUrl })) as {\n section?: string\n cid?: number\n }\n return applyForumSectionCheck(out, thread.section ?? null, thread.cid ?? null)\n } catch {\n return { ...out, forumSection: null, forumCid: null }\n }\n}\n\nexport async function continuumDaoExplainProposal(args: {\n id?: string | number\n onchainId?: string\n forumUrl?: string\n}): Promise<ContinuumDaoExplainProposalResult> {\n if (args.id != null && String(args.id).trim() !== '') {\n const { proposal } = await continuumDaoFetchProposal({ id: args.id })\n return withForumSection(explainProposalRecord(proposal), args.forumUrl)\n }\n const want = (args.onchainId ?? '').trim()\n if (!want) throw new Error('explain_proposal: pass id or onchainId')\n const listed = await continuumDaoFetchProposals()\n const rawList = Array.isArray(listed.proposals) ? listed.proposals : []\n const hit = rawList.find((p) => {\n const row = asRecord(p)\n return row && str(row.onchainId ?? row.onchain_id ?? row.proposalId) === want\n })\n if (!hit) throw new Error(`explain_proposal: no catalog row with onchainId ${want}`)\n const id = asRecord(hit)?.id\n if (id != null) {\n const { proposal } = await continuumDaoFetchProposal({ id: Number(id) })\n return withForumSection(explainProposalRecord(proposal), args.forumUrl)\n }\n return withForumSection(explainProposalRecord(hit), args.forumUrl)\n}\n","/**\n * Sequential Foundry forge-script plan for ContinuumDAO proposal dry-run.\n * Isolated eth_call / cast call cannot carry state from one action to the next.\n */\nimport { getAddress, type Address, type Hex } from 'viem'\n\nexport type FoundryGovLeg = {\n target: Address\n value: string\n data: Hex\n signature: string\n noOp: boolean\n}\n\nexport type FoundryGovBatch = {\n label?: string\n optionIndex?: number\n legs: FoundryGovLeg[]\n}\n\nexport const FOUNDRY_PROPOSAL_REQUIRED_SERVERS = ['etherscan', 'foundry'] as const\n\nexport type FoundryProposalScriptFile = {\n path: string\n contractName: string\n source: string\n label?: string\n}\n\nexport type FoundryProposalSimulatePlan = {\n loadServers: readonly ['etherscan', 'foundry']\n chainId: number\n governor: string\n proposer: string\n files: FoundryProposalScriptFile[]\n forgeScript: {\n tool: 'forge_script'\n broadcast: false\n forkUrlFromRegistry: true\n }\n note: string\n}\n\nfunction hexLiteral(data: string): string {\n const t = data.trim()\n const h = (t.startsWith('0x') ? t.slice(2) : t).toLowerCase()\n if (!h) return '\"\"'\n if (h.length % 2 !== 0) throw new Error('calldata hex must be even length')\n return `hex\"${h}\"`\n}\n\nfunction addrLit(address: string): string {\n return getAddress(address)\n}\n\nfunction solIdent(raw: string, fallback: string): string {\n const cleaned = raw.replace(/[^a-zA-Z0-9_]/g, '')\n const start = cleaned.match(/^[A-Za-z_]/) ? cleaned : `_${cleaned}`\n return start.slice(0, 40) || fallback\n}\n\nfunction actionRequireLabel(batch: FoundryGovBatch, index: number): string {\n const leg = batch.legs[index]\n const where = batch.label ? `${batch.label} action ${index + 1}` : `action ${index + 1}`\n const sig = leg?.signature?.trim() ? ` ${leg.signature.trim()}` : ''\n return `${where}${sig} reverted`\n}\n\nfunction emitActionCalls(batch: FoundryGovBatch, indent: string): string {\n const lines: string[] = []\n batch.legs.forEach((leg, i) => {\n if (leg.noOp) {\n lines.push(`${indent}// signaling no-op (skipped)`)\n return\n }\n const value = BigInt(leg.value)\n const valuePart = value === 0n ? '' : `{value: ${value.toString()}}`\n const label = JSON.stringify(actionRequireLabel(batch, i))\n lines.push(`${indent}{`)\n lines.push(`${indent} (bool ok, ) = payable(${addrLit(leg.target)}).call${valuePart}(${hexLiteral(leg.data)});`)\n lines.push(`${indent} require(ok, ${label});`)\n lines.push(`${indent}}`)\n })\n return lines.join('\\n')\n}\n\nfunction wrapScript(contractName: string, body: string, headerComment: string): string {\n return [\n '// SPDX-License-Identifier: MIT',\n 'pragma solidity ^0.8.24;',\n '',\n 'import {Script} from \"forge-std/Script.sol\";',\n '',\n headerComment,\n `contract ${contractName} is Script {`,\n body,\n '}',\n '',\n ].join('\\n')\n}\n\n/**\n * One forge script per executable batch (Bravo = one file; Delta = one file per option).\n * Each `run()` pranks the governor and applies actions in order so later calls see earlier state.\n */\nexport function buildFoundryProposalSimulatePlan(args: {\n chainId: number\n governor: string\n proposer: string\n proposeData: Hex\n batches: FoundryGovBatch[]\n}): FoundryProposalSimulatePlan {\n const governor = getAddress(args.governor)\n const proposer = getAddress(args.proposer)\n const files: FoundryProposalScriptFile[] = []\n\n const proposeBody = [\n ' function run() external {',\n ` address proposer = ${addrLit(proposer)};`,\n ` address governor = ${addrLit(governor)};`,\n ' vm.startPrank(proposer, proposer);',\n ` (bool ok, ) = governor.call(${hexLiteral(args.proposeData)});`,\n ' require(ok, \"ContinuumDAO.propose reverted\");',\n ' vm.stopPrank();',\n ' }',\n ].join('\\n')\n files.push({\n path: 'script/ContinuumDaoSimulatePropose.s.sol',\n contractName: 'ContinuumDaoSimulatePropose',\n source: wrapScript(\n 'ContinuumDaoSimulatePropose',\n proposeBody,\n '/// Dry-run ContinuumDAO.propose from the draft proposer. Do not --broadcast.',\n ),\n })\n\n args.batches.forEach((batch, bi) => {\n const suffix =\n batch.label != null\n ? solIdent(batch.label, `Option${(batch.optionIndex ?? bi) + 1}`)\n : 'Bravo'\n const contractName = `ContinuumDaoSimulateExecute${suffix}`\n const path = `script/${contractName}.s.sol`\n const body = [\n ' function run() external {',\n ` address governor = ${addrLit(governor)};`,\n ' vm.startPrank(governor, governor);',\n emitActionCalls(batch, ' '),\n ' vm.stopPrank();',\n ' }',\n ].join('\\n')\n const label =\n batch.label != null\n ? `Delta option ${(batch.optionIndex ?? bi) + 1} (${batch.label})`\n : 'Bravo execute'\n files.push({\n path,\n contractName,\n label,\n source: wrapScript(\n contractName,\n body,\n `/// Sequential governor execute dry-run (${label}). msg.sender = governor. Do not --broadcast.`,\n ),\n })\n })\n\n return {\n loadServers: FOUNDRY_PROPOSAL_REQUIRED_SERVERS,\n chainId: args.chainId,\n governor,\n proposer,\n files,\n forgeScript: {\n tool: 'forge_script',\n broadcast: false,\n forkUrlFromRegistry: true,\n },\n note:\n 'Load MCP servers etherscan (official V2, https://mcp.etherscan.io/mcp) and foundry before compose/simulate. ' +\n 'Write each file with foundry__create_solidity_file, then foundry__forge_script with the Linea fork RPC and no --broadcast. ' +\n 'Execute scripts are sequential: later actions see state from earlier ones in the same run(). ' +\n 'Do not use isolated eth_call or cast call as the execute sim. Never broadcast these scripts.',\n }\n}\n\nexport function foundryPlanHasSequentialExecute(plan: FoundryProposalSimulatePlan): boolean {\n return plan.files.some((f) => f.contractName.startsWith('ContinuumDaoSimulateExecute'))\n}\n\n/** @internal test helper */\nexport function foundryScriptContainsCall(source: string, target: Address, data: Hex): boolean {\n return source.includes(getAddress(target)) && source.toLowerCase().includes(data.slice(2).toLowerCase())\n}\n","/**\n * Dry-run a ContinuumDAO Bravo/Delta proposal before submitting.\n * propose() is simulated from `account` (any EOA — not only the preferred KeyGen).\n * Sequential execute is a Foundry forge script (later actions see earlier state).\n * Isolated eth_call / cast call is not a complete execute sim.\n */\nimport { type Address, type Hex, type PublicClient, encodeFunctionData, getAddress, toHex, zeroAddress } from 'viem'\nimport { isContinuumDaoCommitteeProposer } from './constants.js'\nimport { isGovNoOpAction } from './explainProposal.js'\nimport {\n buildFoundryProposalSimulatePlan,\n type FoundryProposalSimulatePlan,\n} from './foundryProposalScript.js'\nimport {\n buildBravoProposalArgs,\n buildDeltaProposalArgs,\n continuumDaoFetchVotingPower,\n governorWriteAbi,\n publicClient,\n requireGovernor,\n type GovActionInput,\n type GovOptionInput,\n} from './governance.js'\n\nexport type ContinuumDaoGovConfiguration = 'bravo' | 'delta'\n\nexport type SimulatedGovLeg = {\n index: number\n target: Address\n value: string\n data: Hex\n signature: string\n noOp: boolean\n}\n\nexport type SimulatedGovBatch = {\n label?: string\n optionIndex?: number\n legs: SimulatedGovLeg[]\n}\n\nexport type ProposalActionSimResult = {\n index: number\n target: string\n signature: string\n noOp: boolean\n ok: boolean\n error?: string\n gasUsed?: string\n}\n\nexport type ProposalBatchSimResult = {\n label?: string\n optionIndex?: number\n ok: boolean\n actions: ProposalActionSimResult[]\n}\n\nexport type ContinuumDaoSimulateProposalResult = {\n ok: boolean\n configuration: ContinuumDaoGovConfiguration\n account: string\n governor: string\n votes: string\n threshold: string\n canPropose: boolean\n /** Set when getVotes(account) < live proposalThreshold() — caller must read this aloud. */\n warning?: string\n propose: { ok: boolean; error?: string }\n execute: {\n ok: boolean\n source: 'simulate' | 'foundry_required'\n batches: ProposalBatchSimResult[]\n }\n /** Sequential forge-script plan. Isolated eth_call is not a complete execute sim. */\n foundry: FoundryProposalSimulatePlan\n note: string\n}\n\nexport function normalizeGovConfiguration(value: unknown): ContinuumDaoGovConfiguration {\n const s = String(value ?? '').trim().toLowerCase()\n if (s === 'bravo' || s === '0') return 'bravo'\n if (s === 'delta' || s === '1') return 'delta'\n throw new Error('configuration must be bravo (0) or delta (1).')\n}\n\nfunction asHex(data: string): Hex {\n const t = data.trim()\n return (t.startsWith('0x') ? t : `0x${t}`) as Hex\n}\n\nfunction formatCallError(err: unknown): string {\n if (err && typeof err === 'object') {\n const o = err as { shortMessage?: unknown; message?: unknown; details?: unknown }\n const short = typeof o.shortMessage === 'string' ? o.shortMessage.trim() : ''\n if (short) return short\n const msg = typeof o.message === 'string' ? o.message.trim() : ''\n if (msg) return msg.split('\\n')[0]!.trim()\n if (typeof o.details === 'string' && o.details.trim()) return o.details.trim()\n }\n return err instanceof Error ? err.message : String(err)\n}\n\nfunction isSimulateUnsupportedError(err: unknown): boolean {\n const walk: unknown[] = [err]\n const seen = new Set<unknown>()\n while (walk.length) {\n const cur = walk.shift()\n if (cur == null || seen.has(cur)) continue\n seen.add(cur)\n if (typeof cur === 'object') {\n const o = cur as { code?: unknown; message?: unknown; details?: unknown; cause?: unknown }\n if (o.code === -32601) return true\n const msg = `${o.message ?? ''} ${o.details ?? ''}`.toLowerCase()\n if (\n msg.includes('method not found') ||\n msg.includes('does not exist') ||\n msg.includes('not available') ||\n msg.includes('not supported') ||\n msg.includes('unknown method') ||\n msg.includes('unimplemented')\n ) {\n return true\n }\n if (o.cause) walk.push(o.cause)\n } else if (typeof cur === 'string') {\n const msg = cur.toLowerCase()\n if (msg.includes('method not found') || msg.includes('does not exist')) return true\n }\n }\n return false\n}\n\nfunction legsFromEncoded(\n targets: Address[],\n values: bigint[],\n calldatas: Hex[],\n signatures: string[],\n): SimulatedGovLeg[] {\n return targets.map((target, i) => {\n const data = calldatas[i] ?? '0x'\n const value = values[i] ?? 0n\n const signature = signatures[i] ?? ''\n return {\n index: i,\n target,\n value: value.toString(),\n data,\n signature,\n noOp: isGovNoOpAction({ target, value: value.toString(), signature, calldata: data }),\n }\n })\n}\n\n/** Encode Bravo/Delta user actions into governor-executed batches (Delta skips metadata slot 0). */\nexport function executableGovBatches(args: {\n configuration: ContinuumDaoGovConfiguration\n title: string\n actions?: GovActionInput[]\n options?: GovOptionInput[]\n nWinners?: number\n noOpTarget: string\n}): {\n proposalArgs: ReturnType<typeof buildBravoProposalArgs>\n batches: SimulatedGovBatch[]\n} {\n const title = args.title.trim() || 'draft'\n const noOp = args.noOpTarget\n if (args.configuration === 'bravo') {\n const proposalArgs = buildBravoProposalArgs(args.actions ?? [], title, noOp)\n const signatures = (args.actions ?? []).map((a) => (a.signature ?? '').trim())\n if (signatures.length === 0) signatures.push('')\n return {\n proposalArgs,\n batches: [\n {\n legs: legsFromEncoded(proposalArgs.targets, proposalArgs.values, proposalArgs.calldatas, signatures),\n },\n ],\n }\n }\n const options = args.options ?? []\n const nWinners = Number(args.nWinners)\n const proposalArgs = buildDeltaProposalArgs(options, nWinners, title, noOp)\n const batches: SimulatedGovBatch[] = options.map((opt, optionIndex) => {\n const encoded = buildBravoProposalArgs(opt.actions ?? [], title, noOp)\n const signatures = (opt.actions ?? []).map((a) => (a.signature ?? '').trim())\n if (signatures.length === 0) signatures.push('')\n return {\n label: opt.label,\n optionIndex,\n legs: legsFromEncoded(encoded.targets, encoded.values, encoded.calldatas, signatures),\n }\n })\n return { proposalArgs, batches }\n}\n\ntype SequentialSimResult =\n | { kind: 'ok'; gasUsed: bigint[] }\n | { kind: 'unsupported' }\n | { kind: 'revert'; index: number; message: string }\n\nasync function simulateSequential(\n client: Pick<PublicClient, 'request'>,\n account: Address,\n legs: Array<{ to: Address; data: Hex; value: bigint }>,\n): Promise<SequentialSimResult> {\n if (legs.length === 0) return { kind: 'ok', gasUsed: [] }\n const calls = legs.map((leg) => ({\n from: account,\n to: leg.to,\n data: asHex(leg.data),\n value: toHex(leg.value),\n }))\n try {\n const raw = await client.request({\n method: 'eth_simulateV1',\n params: [\n {\n blockStateCalls: [{ calls }],\n traceTransfers: false,\n validation: false,\n },\n 'latest',\n ],\n } as never)\n const blocks = Array.isArray(raw) ? raw : []\n const first = blocks[0] as { calls?: unknown } | undefined\n const simCalls = Array.isArray(first?.calls) ? first.calls : []\n if (simCalls.length !== legs.length) {\n return {\n kind: 'revert',\n index: 0,\n message: `eth_simulateV1 returned ${simCalls.length} call result(s); expected ${legs.length}.`,\n }\n }\n const gasUsed: bigint[] = []\n for (let i = 0; i < simCalls.length; i++) {\n const row = simCalls[i] as {\n status?: unknown\n gasUsed?: unknown\n error?: unknown\n revertReason?: unknown\n }\n const status = String(row.status ?? '').toLowerCase()\n const failed = status === '0x0' || status === '0' || row.error != null\n if (failed) {\n const detail =\n typeof row.error === 'string' && row.error.trim()\n ? row.error.trim()\n : typeof row.revertReason === 'string' && row.revertReason.trim()\n ? row.revertReason.trim()\n : typeof row.error === 'object' && row.error\n ? JSON.stringify(row.error)\n : 'execution reverted'\n return { kind: 'revert', index: i, message: detail }\n }\n try {\n gasUsed.push(BigInt(String(row.gasUsed ?? '0')))\n } catch {\n return { kind: 'revert', index: i, message: 'eth_simulateV1 call missing gasUsed' }\n }\n }\n return { kind: 'ok', gasUsed }\n } catch (err) {\n if (isSimulateUnsupportedError(err)) return { kind: 'unsupported' }\n return { kind: 'revert', index: 0, message: formatCallError(err) }\n }\n}\n\nfunction applySequentialResult(\n batch: SimulatedGovBatch,\n sim: Extract<SequentialSimResult, { kind: 'ok' } | { kind: 'revert' }>,\n): ProposalBatchSimResult {\n if (sim.kind === 'ok') {\n return {\n label: batch.label,\n optionIndex: batch.optionIndex,\n ok: true,\n actions: batch.legs.map((leg, i) => ({\n index: leg.index,\n target: leg.target,\n signature: leg.signature,\n noOp: leg.noOp,\n ok: true,\n gasUsed: sim.gasUsed[i]?.toString(),\n })),\n }\n }\n return {\n label: batch.label,\n optionIndex: batch.optionIndex,\n ok: false,\n actions: batch.legs.map((leg, i) => ({\n index: leg.index,\n target: leg.target,\n signature: leg.signature,\n noOp: leg.noOp,\n ok: i !== sim.index,\n error: i === sim.index ? sim.message : i > sim.index ? 'not simulated (prior action reverted)' : undefined,\n })),\n }\n}\n\nfunction summarizeNote(args: {\n canPropose: boolean\n proposeOk: boolean\n executeOk: boolean\n source: 'simulate' | 'foundry_required'\n configuration: ContinuumDaoGovConfiguration\n}): string {\n const parts: string[] = []\n if (args.canPropose && args.proposeOk && args.executeOk) {\n parts.push(\n 'RPC sequential simulate succeeded. Still run the Foundry forge scripts in `foundry.files` on a Linea fork (no --broadcast) so action N sees state from action N-1.',\n )\n } else {\n if (!args.canPropose) {\n parts.push(\n 'Warning: this account’s veCTM voting power is below live proposalThreshold(). Do not submit from this address until votes meet the bar.',\n )\n } else if (!args.proposeOk) {\n parts.push('propose() reverted for this account. Fix the revert before submitting.')\n }\n if (!args.executeOk) {\n parts.push(\n args.source === 'foundry_required'\n ? 'RPC cannot run sequential eth_simulateV1. Isolated eth_call is not sufficient. Run the Foundry forge scripts in `foundry.files` on a Linea fork (no --broadcast).'\n : 'One or more actions reverted as the governor. Submitting now would waste the voting period — fix the reverting signature first.',\n )\n }\n }\n if (args.configuration === 'delta') {\n parts.push('Each Delta option has its own execute script (only winning options execute).')\n }\n parts.push(\n 'Load MCP servers etherscan (official V2) and foundry before compose or this dry-run. Time-sensitive calls can still fail after the vote if on-chain state changes.',\n )\n return parts.join(' ')\n}\n\nfunction votingPowerShortfallBody(args: { account: string; votes: string; threshold: string }): string {\n const committee = isContinuumDaoCommitteeProposer(args.account)\n ? ' This is a ContinuumDAO Committee address — Committee is not exempt from proposalThreshold().'\n : ''\n return (\n `${args.account} has veCTM voting power ${args.votes}, below live proposalThreshold() ${args.threshold}. ` +\n `On-chain rule: max(1000e18 ve power, 1% of total voting power). Delegation applies at this address ` +\n `(fetch_delegates).` +\n committee\n )\n}\n\n/** Warning for the draft/other-address simulate tool (does not create a sign request). */\nexport function votingPowerWarning(args: {\n account: string\n votes: string\n threshold: string\n}): string | undefined {\n if (BigInt(args.votes) >= BigInt(args.threshold)) return undefined\n return (\n `Warning: ${votingPowerShortfallBody(args)} ` +\n `ContinuumDAO.propose will revert until this account holds or is delegated enough votes.`\n )\n}\n\n/** Hard-fail copy for KeyGen create (`build_propose_*` / UI). */\nexport function votingPowerRefuse(args: { account: string; votes: string; threshold: string }): string {\n return (\n `Refused: ${votingPowerShortfallBody(args)} ` +\n `A KeyGen cannot create a ContinuumDAO proposal until getVotes at this address meets the bar.`\n )\n}\n\n/** Human-readable first failure from a simulate_proposal result. */\nexport function formatProposalSimulationFailure(result: ContinuumDaoSimulateProposalResult): string | null {\n if (result.ok) return null\n if (!result.canPropose) {\n return votingPowerRefuse(result)\n }\n if (!result.propose.ok) {\n return `ContinuumDAO.propose would revert from ${result.account}: ${result.propose.error ?? 'execution reverted'}`\n }\n if (!result.execute.ok) {\n if (result.execute.source === 'foundry_required') {\n return (\n 'RPC does not support sequential eth_simulateV1. Isolated eth_call cannot carry state between actions. ' +\n 'Run the Foundry forge scripts in foundry.files on a Linea fork (foundry__forge_script, no --broadcast) before submitting.'\n )\n }\n for (const batch of result.execute.batches) {\n const failed = batch.actions.find((a) => !a.ok)\n if (!failed) continue\n const where =\n batch.label != null\n ? `Delta option ${((batch.optionIndex ?? 0) + 1).toString()} (${batch.label}) action ${failed.index + 1}`\n : `action ${failed.index + 1}`\n const sig = failed.signature ? ` ${failed.signature}` : ''\n return (\n `Proposal ${where}${sig} would revert when the governor executes (${failed.target}): ` +\n `${failed.error ?? 'execution reverted'}. Submitting now would waste the voting period.`\n )\n }\n return 'Proposal actions would revert when the governor executes. Submitting now would waste the voting period.'\n }\n return result.note\n}\n\nexport function throwIfProposalSimulationFailed(result: ContinuumDaoSimulateProposalResult): void {\n // Builders cannot invoke Foundry MCP. Sequential execute is the agent's forge-script step.\n if (result.execute.source === 'foundry_required' && result.canPropose && result.propose.ok) {\n return\n }\n const message = formatProposalSimulationFailure(result)\n if (message) throw new Error(message)\n}\n\n/** Preferred-signer / builder gate: simulate then refuse a reverting propose or execute. */\nexport async function assertContinuumDaoProposalSimulation(args: {\n chainId: number | string\n rpcUrl: string\n account: string\n configuration: ContinuumDaoGovConfiguration\n title: string\n actions?: GovActionInput[]\n options?: GovOptionInput[]\n nWinners?: string | number\n governor?: string\n noOpTarget?: string\n}): Promise<ContinuumDaoSimulateProposalResult> {\n const result = await continuumDaoSimulateProposal(args)\n throwIfProposalSimulationFailed(result)\n return result\n}\n\nexport async function continuumDaoSimulateProposal(args: {\n chainId: number | string\n rpcUrl: string\n account: string\n configuration: ContinuumDaoGovConfiguration | 0 | 1 | '0' | '1' | 'bravo' | 'delta'\n title?: string\n actions?: GovActionInput[]\n options?: GovOptionInput[]\n nWinners?: string | number\n governor?: string\n noOpTarget?: string\n}): Promise<ContinuumDaoSimulateProposalResult> {\n const chainId = Number(args.chainId)\n const configuration = normalizeGovConfiguration(args.configuration)\n if (!String(args.rpcUrl ?? '').trim()) {\n throw new Error('rpcUrl is required (pass it or let the server resolve it from the chain registry).')\n }\n const account = getAddress(args.account)\n const gov = requireGovernor(chainId, args.governor)\n const title = (args.title ?? 'draft').trim() || 'draft'\n const noOpTarget = args.noOpTarget?.trim() || account\n if (noOpTarget === zeroAddress) {\n throw new Error('noOpTarget / account cannot be the zero address.')\n }\n if (configuration === 'delta') {\n if (!args.options || args.options.length < 2) {\n throw new Error('Delta simulation needs at least 2 options.')\n }\n const nWinners = Number(args.nWinners)\n if (!Number.isFinite(nWinners) || nWinners < 1 || nWinners >= args.options.length) {\n throw new Error('Delta nWinners must be >= 1 and < nOptions.')\n }\n }\n\n const { proposalArgs, batches } = executableGovBatches({\n configuration,\n title,\n actions: args.actions,\n options: args.options,\n nWinners: args.nWinners == null ? undefined : Number(args.nWinners),\n noOpTarget,\n })\n\n const power = await continuumDaoFetchVotingPower({\n chainId,\n rpcUrl: args.rpcUrl,\n account,\n governor: gov,\n })\n const canPropose = BigInt(power.votes) >= BigInt(power.threshold)\n\n const client = publicClient(args.rpcUrl, chainId)\n const proposeData = encodeFunctionData({\n abi: governorWriteAbi,\n functionName: 'propose',\n args: [proposalArgs.targets, proposalArgs.values, proposalArgs.calldatas, proposalArgs.description],\n })\n let proposeOk = false\n let proposeError: string | undefined\n try {\n await client.call({\n to: gov,\n data: proposeData,\n account,\n batch: false,\n })\n proposeOk = true\n } catch (err) {\n proposeError = formatCallError(err)\n }\n\n let source: 'simulate' | 'foundry_required' = 'simulate'\n const batchResults: ProposalBatchSimResult[] = []\n for (const batch of batches) {\n const legs = batch.legs.map((leg) => ({\n to: leg.target,\n data: asHex(leg.data),\n value: BigInt(leg.value),\n }))\n const sim = await simulateSequential(client, gov, legs)\n if (sim.kind === 'unsupported') {\n source = 'foundry_required'\n batchResults.push({\n label: batch.label,\n optionIndex: batch.optionIndex,\n ok: false,\n actions: batch.legs.map((leg) => ({\n index: leg.index,\n target: leg.target,\n signature: leg.signature,\n noOp: leg.noOp,\n ok: false,\n error:\n 'RPC lacks eth_simulateV1. Isolated eth_call is not a sequential execute sim. Run foundry.files via forge script on a Linea fork.',\n })),\n })\n continue\n }\n batchResults.push(applySequentialResult(batch, sim))\n }\n const executeOk = source !== 'foundry_required' && batchResults.every((b) => b.ok)\n const ok = canPropose && proposeOk && executeOk\n const warning = votingPowerWarning({ account, votes: power.votes, threshold: power.threshold })\n const foundry = buildFoundryProposalSimulatePlan({\n chainId,\n governor: gov,\n proposer: account,\n proposeData,\n batches,\n })\n return {\n ok,\n configuration,\n account,\n governor: gov,\n votes: power.votes,\n threshold: power.threshold,\n canPropose,\n ...(warning ? { warning } : {}),\n propose: proposeOk ? { ok: true } : { ok: false, error: proposeError },\n execute: { ok: executeOk, source, batches: batchResults },\n foundry,\n note: summarizeNote({ canPropose, proposeOk, executeOk, source, configuration }),\n }\n}\n","/**\n * ContinuumDAO governor encode + Multi-Sign builders.\n * Do not prepend billing legs. Queue is not implemented on-chain (no timelock).\n */\nimport { type Address, createPublicClient, defineChain, encodeFunctionData, encodePacked, getAddress, keccak256, padHex, parseAbi, toHex, zeroAddress } from 'viem'\nimport { defiEvmTransport } from '../../../core/defiEvmClient.js'\nimport { buildEvmMultisignBatch } from '../../../chains/evm/buildBatch.js'\nimport type { EvmTxStep } from '../../../chains/evm/types.js'\nimport {\n CONTINUUM_DAO_GOVERNANCE_API,\n CONTINUUM_DAO_LINEA_GOVERNOR_LEGACY_ADDRESS,\n CONTINUUM_DAO_PROTOCOL_ID,\n governorAddressOnEvmChain,\n isConfiguredAddress,\n isContinuumDaoCommitteeProposer,\n isContinuumDaoLockChain,\n} from './constants.js'\nimport { assertContinuumDaoForumTopicKey } from './forum.js'\nimport type { ContinuumDaoCommonArgs } from './multisign.js'\n\nexport const CONTINUUM_DAO_PROPOSE_FALLBACK = 550_000n\nexport const CONTINUUM_DAO_VOTE_FALLBACK = 220_000n\nexport const CONTINUUM_DAO_EXECUTE_FALLBACK = 800_000n\nexport const CONTINUUM_DAO_CANCEL_FALLBACK = 180_000n\n\nexport const CONTINUUM_DAO_GOV_EVM_TYPES = new Set([\n 'continuum_dao_propose',\n 'continuum_dao_cast_vote',\n 'continuum_dao_execute',\n 'continuum_dao_cancel',\n])\n\nexport const governorWriteAbi = parseAbi([\n 'function propose(address[] targets, uint256[] values, bytes[] calldatas, string description) returns (uint256)',\n 'function castVote(uint256 proposalId, uint8 support) returns (uint256)',\n 'function castVoteWithReasonAndParams(uint256 proposalId, uint8 support, string reason, bytes params) returns (uint256)',\n 'function execute(uint256 proposalId) payable',\n 'function cancel(uint256 proposalId)',\n])\n\nconst governorReadAbi = parseAbi([\n 'function hashProposal(address[] targets, uint256[] values, bytes[] calldatas, bytes32 descriptionHash) view returns (uint256)',\n 'function state(uint256 proposalId) view returns (uint8)',\n 'function getVotes(address account, uint256 timepoint) view returns (uint256)',\n 'function proposalThreshold() view returns (uint256)',\n 'function proposalCount() view returns (uint256)',\n 'function clock() view returns (uint48)',\n 'function proposalVotes(uint256 proposalId) view returns (uint256 againstVotes, uint256 forVotes, uint256 abstainVotes)',\n 'function hasVoted(uint256 proposalId, address account) view returns (bool)',\n 'function proposalSnapshot(uint256 proposalId) view returns (uint256)',\n])\n\nexport type GovActionInput = {\n target: string\n value?: string\n signature?: string\n inputs?: { name?: string; type: string; value: string }[]\n}\n\nexport type GovOptionInput = {\n label: string\n actions: GovActionInput[]\n}\n\nfunction splitAbiParamList(inner: string): string[] {\n const out: string[] = []\n let buf = ''\n let depth = 0\n for (const ch of inner) {\n if (ch === '(') depth += 1\n if (ch === ')') depth -= 1\n if (ch === ',' && depth === 0) {\n if (buf.trim()) out.push(buf.trim())\n buf = ''\n continue\n }\n buf += ch\n }\n if (buf.trim()) out.push(buf.trim())\n return out\n}\n\nfunction signatureToAbiInputs(signature: string): { type: string }[] {\n const start = signature.indexOf('(')\n if (start === -1) return []\n let depth = 0\n let end = -1\n for (let i = start; i < signature.length; i++) {\n const ch = signature[i]\n if (ch === '(') depth += 1\n if (ch === ')') {\n depth -= 1\n if (depth === 0) {\n end = i\n break\n }\n }\n }\n if (end === -1) return []\n const inner = signature.slice(start + 1, end)\n if (!inner.trim()) return []\n return splitAbiParamList(inner).map((t) => ({ type: t }))\n}\n\nfunction coerceAbiValue(type: string, value: string): string | bigint | boolean | unknown[] {\n const trimmed = (value ?? '').trim()\n if (type.startsWith('(') && type.endsWith(')')) {\n const parsed = JSON.parse(trimmed || '[]') as unknown\n if (!Array.isArray(parsed)) throw new Error('tuple value must be a JSON array')\n const parts = splitAbiParamList(type.slice(1, -1))\n return parts.map((part, i) => {\n const child = parsed[i]\n if (typeof child === 'string') return coerceAbiValue(part, child)\n return coerceAbiValue(part, JSON.stringify(child ?? ''))\n })\n }\n const fixed = type.match(/^(.+)\\[(\\d+)\\]$/)\n if (fixed && !type.endsWith('[]')) {\n const parsed = trimmed.startsWith('[') ? (JSON.parse(trimmed) as unknown) : trimmed.split(',')\n if (!Array.isArray(parsed)) throw new Error('fixed array value must be a JSON array')\n return (parsed as unknown[]).map((x) => coerceAbiValue(fixed[1]!, String(x)))\n }\n if (type.endsWith('[]')) {\n const arr = trimmed.startsWith('[')\n ? (JSON.parse(trimmed) as unknown[]).map((x) => String(x))\n : trimmed\n ? trimmed.split(',').map((s) => s.trim())\n : []\n const baseType = type.slice(0, -2)\n return arr.map((v) => coerceAbiValue(baseType, v)) as unknown[]\n }\n if (type === 'address') return trimmed as `0x${string}`\n if (type.startsWith('uint') || type.startsWith('int')) return BigInt(trimmed || '0')\n if (type === 'bool') return trimmed === 'true' || trimmed === '1'\n return trimmed\n}\n\nexport function encodeGovActionCalldata(signature: string, inputs: { type: string; value: string }[] = []): `0x${string}` {\n const sig = signature.trim()\n if (!sig) return '0x'\n const name = sig.slice(0, sig.indexOf('(') === -1 ? sig.length : sig.indexOf('('))\n const types = signatureToAbiInputs(sig)\n if (types.length !== inputs.length) throw new Error('encodeGovActionCalldata: inputs length mismatch')\n const args = inputs.map((inp, i) => coerceAbiValue(types[i]!.type, inp.value))\n return encodeFunctionData({\n abi: [\n {\n type: 'function' as const,\n name,\n inputs: types.map((t, i) => ({ name: `arg${i}`, type: t.type })),\n outputs: [],\n stateMutability: 'nonpayable' as const,\n },\n ],\n functionName: name,\n args,\n })\n}\n\nexport function proposalDescriptionHash(description: string): `0x${string}` {\n return keccak256(encodePacked(['string'], [description]))\n}\n\nexport function encodeDeltaMetadata(nOptions: number, nWinners: number, optionStartIndices: number[]): `0x${string}` {\n if (optionStartIndices.length !== nOptions) {\n throw new Error('encodeDeltaMetadata: optionStartIndices length must equal nOptions')\n }\n const parts = [\n padHex(toHex(nOptions), { size: 32 }).slice(2),\n padHex(toHex(nWinners), { size: 32 }).slice(2),\n ...optionStartIndices.map((i) => padHex(toHex(i), { size: 32 }).slice(2)),\n ]\n return (`0x${parts.join('')}`) as `0x${string}`\n}\n\n/** Delta vote params: one uint256 per option plus a final NOTA slot. */\nexport function encodeDeltaVoteParams(weights: Array<string | number | bigint>): `0x${string}` {\n if (weights.length < 3) throw new Error('Delta vote params need nOptions + NOTA (at least 3 slots).')\n return (`0x${weights.map((w) => padHex(toHex(BigInt(w)), { size: 32 }).slice(2)).join('')}`) as `0x${string}`\n}\n\nfunction noOpAction(noOpTarget: Address): { target: Address; value: bigint; calldata: `0x${string}` } {\n return { target: getAddress(noOpTarget), value: 0n, calldata: '0x' }\n}\n\nfunction encodeUserAction(a: GovActionInput): { target: Address; value: bigint; calldata: `0x${string}` } {\n const target = getAddress(a.target)\n if (target === zeroAddress) throw new Error('Action target cannot be the zero address (reserved for Delta metadata).')\n const value = BigInt(String(a.value || '0'))\n const calldata = encodeGovActionCalldata(a.signature ?? '', a.inputs ?? [])\n return { target, value, calldata }\n}\n\nexport function buildBravoProposalArgs(\n actions: GovActionInput[],\n description: string,\n noOpTarget: string,\n): {\n targets: Address[]\n values: bigint[]\n calldatas: `0x${string}`[]\n description: string\n} {\n const encoded =\n actions.length === 0 ? [noOpAction(getAddress(noOpTarget))] : actions.map(encodeUserAction)\n if (encoded[0]!.target === zeroAddress) {\n throw new Error('Bravo first target cannot be address(0); that encoding is Delta.')\n }\n return {\n targets: encoded.map((e) => e.target),\n values: encoded.map((e) => e.value),\n calldatas: encoded.map((e) => e.calldata),\n description,\n }\n}\n\nexport function buildDeltaProposalArgs(\n options: GovOptionInput[],\n nWinners: number,\n description: string,\n noOpTarget: string,\n): {\n targets: Address[]\n values: bigint[]\n calldatas: `0x${string}`[]\n description: string\n} {\n if (options.length < 2) throw new Error('Delta proposals need at least 2 options.')\n if (nWinners < 1 || nWinners >= options.length) throw new Error('Delta nWinners must be >= 1 and < nOptions.')\n const fallback = getAddress(noOpTarget)\n const targets: Address[] = [zeroAddress]\n const values: bigint[] = [0n]\n const calldatas: `0x${string}`[] = []\n const optionStartIndices: number[] = []\n let nextIndex = 1\n for (const opt of options) {\n optionStartIndices.push(nextIndex)\n const userActions = opt.actions ?? []\n const encoded = userActions.length === 0 ? [noOpAction(fallback)] : userActions.map(encodeUserAction)\n for (const e of encoded) {\n targets.push(e.target)\n values.push(e.value)\n calldatas.push(e.calldata)\n nextIndex += 1\n }\n }\n calldatas.unshift(encodeDeltaMetadata(options.length, nWinners, optionStartIndices))\n return { targets, values, calldatas, description }\n}\n\nfunction requireGovChain(chainId: number): void {\n if (!isContinuumDaoLockChain(chainId)) {\n throw new Error('ContinuumDAO governance is Linea-only.')\n }\n}\n\nexport function requireGovernor(chainId: number, override?: string): Address {\n requireGovChain(chainId)\n if (override && isConfiguredAddress(override)) return getAddress(override)\n const gov = governorAddressOnEvmChain(chainId)\n if (!gov) throw new Error('Governor address is not configured for this chain yet.')\n return gov\n}\n\nfunction meta(\n evmType: string,\n chainId: number,\n to: Address,\n extra: Record<string, unknown>,\n gasLimit: bigint,\n): Record<string, unknown> {\n return {\n destinationAddress: to,\n signatureText: JSON.stringify({ kind: 'ContinuumDAO', ...extra, chainId }),\n evm: { type: evmType, version: 1, chainId: String(chainId), protocolId: CONTINUUM_DAO_PROTOCOL_ID },\n continuumDao: { ...extra, gas: { baseGasUnits: gasLimit.toString() } },\n }\n}\n\nasync function finalizeGov(\n args: ContinuumDaoCommonArgs,\n to: Address,\n data: `0x${string}`,\n fallbackGas: bigint,\n evmType: string,\n extra: Record<string, unknown>,\n purposeSuffix: string,\n value = 0n,\n): Promise<{ bodyForSign: Record<string, unknown>; messageToSign: string }> {\n const step: EvmTxStep = { to, data, value, fallbackGas }\n const firstDataNo0x = data.startsWith('0x') ? data.slice(2) : data\n return buildEvmMultisignBatch({\n context: {\n chainCategory: 'evm',\n keyGen: args.keyGen,\n purposeText: args.purposeText,\n chainId: args.chainId,\n rpcUrl: args.rpcUrl.trim(),\n executorAddress: args.executorAddress,\n chainDetail: args.chainDetail,\n useCustomGas: args.useCustomGas,\n customGasChainDetails: args.customGasChainDetails,\n },\n steps: [step],\n purposeSuffix,\n firstMsgRawNo0x: firstDataNo0x,\n destinationAddress: to,\n buildBatchMeta: ({ gasLimit }) => meta(evmType, args.chainId, to, extra, gasLimit),\n })\n}\n\nasync function requireProposalThreshold(\n args: ContinuumDaoCommonArgs & { governor?: string },\n): Promise<{ votes: string; threshold: string }> {\n const power = await continuumDaoFetchVotingPower({\n chainId: args.chainId,\n rpcUrl: args.rpcUrl,\n account: args.executorAddress,\n governor: args.governor,\n })\n if (BigInt(power.votes) < BigInt(power.threshold)) {\n const { votingPowerRefuse } = await import('./simulateProposal.js')\n throw new Error(\n votingPowerRefuse({\n account: args.executorAddress,\n votes: power.votes,\n threshold: power.threshold,\n }),\n )\n }\n return power\n}\n\nexport async function buildEvmMultisignBodyContinuumDaoProposeBravo(\n args: ContinuumDaoCommonArgs & {\n title: string\n actions?: GovActionInput[]\n governor?: string\n noOpTarget?: string\n forumKey: string\n forumUrl?: string\n },\n): Promise<{ bodyForSign: Record<string, unknown>; messageToSign: string; proposalArgs: ReturnType<typeof buildBravoProposalArgs> }> {\n const forumKey = assertContinuumDaoForumTopicKey(args.forumKey, args.forumUrl)\n const gov = requireGovernor(args.chainId, args.governor)\n await requireProposalThreshold(args)\n const noOp = args.noOpTarget?.trim() || args.executorAddress\n const { assertContinuumDaoProposalSimulation } = await import('./simulateProposal.js')\n const simulation = await assertContinuumDaoProposalSimulation({\n chainId: args.chainId,\n rpcUrl: args.rpcUrl,\n account: args.executorAddress,\n configuration: 'bravo',\n title: args.title,\n actions: args.actions,\n governor: gov,\n noOpTarget: noOp,\n })\n const proposalArgs = buildBravoProposalArgs(args.actions ?? [], args.title.trim(), noOp)\n const data = encodeFunctionData({\n abi: governorWriteAbi,\n functionName: 'propose',\n args: [proposalArgs.targets, proposalArgs.values, proposalArgs.calldatas, proposalArgs.description],\n })\n const built = await finalizeGov(\n args,\n gov,\n data,\n CONTINUUM_DAO_PROPOSE_FALLBACK,\n 'continuum_dao_propose',\n {\n name: 'ContinuumDAO.propose',\n configuration: 'bravo',\n title: proposalArgs.description,\n forumKey,\n simulation: { ok: simulation.ok, account: simulation.account, source: simulation.execute.source },\n },\n 'continuum-dao propose bravo',\n )\n return { ...built, proposalArgs }\n}\n\nexport async function buildEvmMultisignBodyContinuumDaoProposeDelta(\n args: ContinuumDaoCommonArgs & {\n title: string\n options: GovOptionInput[]\n nWinners: number\n governor?: string\n noOpTarget?: string\n forumKey: string\n forumUrl?: string\n },\n): Promise<{ bodyForSign: Record<string, unknown>; messageToSign: string; proposalArgs: ReturnType<typeof buildDeltaProposalArgs> }> {\n const forumKey = assertContinuumDaoForumTopicKey(args.forumKey, args.forumUrl)\n const gov = requireGovernor(args.chainId, args.governor)\n await requireProposalThreshold(args)\n const noOp = args.noOpTarget?.trim() || args.executorAddress\n const { assertContinuumDaoProposalSimulation } = await import('./simulateProposal.js')\n const simulation = await assertContinuumDaoProposalSimulation({\n chainId: args.chainId,\n rpcUrl: args.rpcUrl,\n account: args.executorAddress,\n configuration: 'delta',\n title: args.title,\n options: args.options,\n nWinners: args.nWinners,\n governor: gov,\n noOpTarget: noOp,\n })\n const proposalArgs = buildDeltaProposalArgs(args.options, Number(args.nWinners), args.title.trim(), noOp)\n const data = encodeFunctionData({\n abi: governorWriteAbi,\n functionName: 'propose',\n args: [proposalArgs.targets, proposalArgs.values, proposalArgs.calldatas, proposalArgs.description],\n })\n const built = await finalizeGov(\n args,\n gov,\n data,\n CONTINUUM_DAO_PROPOSE_FALLBACK,\n 'continuum_dao_propose',\n {\n name: 'ContinuumDAO.propose',\n configuration: 'delta',\n title: proposalArgs.description,\n nWinners: args.nWinners,\n forumKey,\n simulation: { ok: simulation.ok, account: simulation.account, source: simulation.execute.source },\n },\n 'continuum-dao propose delta',\n )\n return { ...built, proposalArgs }\n}\n\nasync function requireVoteEligible(\n args: ContinuumDaoCommonArgs & { proposalId: string | number | bigint; governor?: string },\n): Promise<void> {\n const st = await continuumDaoFetchProposalState({\n chainId: args.chainId,\n rpcUrl: args.rpcUrl,\n proposalId: args.proposalId,\n governor: args.governor,\n })\n if (st.state !== 1) {\n throw new Error(`Proposal is not Active (on-chain state ${st.state}).`)\n }\n const elig = await continuumDaoFetchProposalVoteEligibility({\n chainId: args.chainId,\n rpcUrl: args.rpcUrl,\n proposalId: args.proposalId,\n account: args.executorAddress,\n governor: args.governor,\n })\n if (elig.hasVoted) throw new Error('This KeyGen has already voted on this proposal.')\n if (BigInt(elig.snapshotVotes) === 0n) {\n throw new Error('No veCTM voting power at snapshot for this KeyGen.')\n }\n}\n\nexport async function buildEvmMultisignBodyContinuumDaoCastVoteBravo(\n args: ContinuumDaoCommonArgs & { proposalId: string | number | bigint; support: 0 | 1 | 2; governor?: string },\n): Promise<{ bodyForSign: Record<string, unknown>; messageToSign: string }> {\n const resolved = await resolveGovernorProposalRef(args.proposalId)\n const gov = requireGovernor(args.chainId, resolved.governorAddress ?? args.governor)\n const proposalId = resolved.proposalId\n await requireVoteEligible({\n ...args,\n proposalId,\n governor: resolved.governorAddress ?? args.governor,\n })\n const data = encodeFunctionData({\n abi: governorWriteAbi,\n functionName: 'castVote',\n args: [proposalId, args.support],\n })\n return finalizeGov(\n args,\n gov,\n data,\n CONTINUUM_DAO_VOTE_FALLBACK,\n 'continuum_dao_cast_vote',\n { name: 'ContinuumDAO.castVote', proposalId: proposalId.toString(), support: args.support },\n 'continuum-dao vote bravo',\n )\n}\n\nexport async function buildEvmMultisignBodyContinuumDaoCastVoteDelta(\n args: ContinuumDaoCommonArgs & {\n proposalId: string | number | bigint\n weights: Array<string | number | bigint>\n governor?: string\n },\n): Promise<{ bodyForSign: Record<string, unknown>; messageToSign: string }> {\n const resolved = await resolveGovernorProposalRef(args.proposalId)\n const gov = requireGovernor(args.chainId, resolved.governorAddress ?? args.governor)\n const proposalId = resolved.proposalId\n if (args.weights.length < 3) {\n throw new Error('Delta vote must include one weight per option plus a NOTA slot.')\n }\n await requireVoteEligible({\n ...args,\n proposalId,\n governor: resolved.governorAddress ?? args.governor,\n })\n const params = encodeDeltaVoteParams(args.weights)\n const data = encodeFunctionData({\n abi: governorWriteAbi,\n functionName: 'castVoteWithReasonAndParams',\n args: [proposalId, 0, '', params],\n })\n return finalizeGov(\n args,\n gov,\n data,\n CONTINUUM_DAO_VOTE_FALLBACK,\n 'continuum_dao_cast_vote',\n { name: 'ContinuumDAO.castVoteWithReasonAndParams', proposalId: proposalId.toString() },\n 'continuum-dao vote delta',\n )\n}\n\nexport async function buildEvmMultisignBodyContinuumDaoExecute(\n args: ContinuumDaoCommonArgs & { proposalId: string | number | bigint; governor?: string },\n): Promise<{ bodyForSign: Record<string, unknown>; messageToSign: string }> {\n const resolved = await resolveGovernorProposalRef(args.proposalId)\n const gov = requireGovernor(args.chainId, resolved.governorAddress ?? args.governor)\n const proposalId = resolved.proposalId\n const data = encodeFunctionData({\n abi: governorWriteAbi,\n functionName: 'execute',\n args: [proposalId],\n })\n return finalizeGov(\n args,\n gov,\n data,\n CONTINUUM_DAO_EXECUTE_FALLBACK,\n 'continuum_dao_execute',\n { name: 'ContinuumDAO.execute', proposalId: proposalId.toString() },\n 'continuum-dao execute',\n )\n}\n\nexport async function buildEvmMultisignBodyContinuumDaoCancel(\n args: ContinuumDaoCommonArgs & { proposalId: string | number | bigint; governor?: string },\n): Promise<{ bodyForSign: Record<string, unknown>; messageToSign: string }> {\n const resolved = await resolveGovernorProposalRef(args.proposalId)\n const gov = requireGovernor(args.chainId, resolved.governorAddress ?? args.governor)\n const proposalId = resolved.proposalId\n const data = encodeFunctionData({\n abi: governorWriteAbi,\n functionName: 'cancel',\n args: [proposalId],\n })\n return finalizeGov(\n args,\n gov,\n data,\n CONTINUUM_DAO_CANCEL_FALLBACK,\n 'continuum_dao_cancel',\n { name: 'ContinuumDAO.cancel', proposalId: proposalId.toString() },\n 'continuum-dao cancel',\n )\n}\n\nexport function publicClient(rpcUrl: string, chainId: number) {\n return createPublicClient({\n chain: defineChain({\n id: chainId,\n name: 'ContinuumDAO',\n nativeCurrency: { decimals: 18, name: 'Ether', symbol: 'ETH' },\n rpcUrls: { default: { http: [rpcUrl.trim()] } },\n }),\n transport: defiEvmTransport(rpcUrl.trim()),\n })\n}\n\nexport async function continuumDaoHashProposal(args: {\n chainId: number | string\n rpcUrl: string\n targets: Address[]\n values: bigint[]\n calldatas: `0x${string}`[]\n description: string\n governor?: string\n}): Promise<{ proposalId: string }> {\n const chainId = Number(args.chainId)\n const gov = requireGovernor(chainId, args.governor)\n const client = publicClient(args.rpcUrl, chainId)\n const id = await client.readContract({\n address: gov,\n abi: governorReadAbi,\n functionName: 'hashProposal',\n args: [args.targets, args.values, args.calldatas, proposalDescriptionHash(args.description)],\n })\n return { proposalId: id.toString() }\n}\n\nexport async function continuumDaoFetchVotingPower(args: {\n chainId: number | string\n rpcUrl: string\n account: string\n governor?: string\n}): Promise<{ votes: string; threshold: string; clock: string }> {\n const chainId = Number(args.chainId)\n const gov = requireGovernor(chainId, args.governor)\n const client = publicClient(args.rpcUrl, chainId)\n const clock = await client.readContract({ address: gov, abi: governorReadAbi, functionName: 'clock' })\n const timepoint = clock > 0 ? clock - 1 : 0\n const [votes, threshold] = await Promise.all([\n client.readContract({\n address: gov,\n abi: governorReadAbi,\n functionName: 'getVotes',\n args: [getAddress(args.account), BigInt(timepoint)],\n }),\n client.readContract({ address: gov, abi: governorReadAbi, functionName: 'proposalThreshold' }),\n ])\n return { votes: votes.toString(), threshold: threshold.toString(), clock: clock.toString() }\n}\n\nexport async function continuumDaoFetchProposalState(args: {\n chainId: number | string\n rpcUrl: string\n proposalId: string | number | bigint\n governor?: string\n}): Promise<{\n state: number\n againstVotes: string\n forVotes: string\n abstainVotes: string\n /** True when proposalVotes() failed but state() succeeded. */\n votesPartial: boolean\n /** Governor proposal id actually used (hash). */\n proposalId: string\n /** Backend catalog id when `proposalId` was resolved from one. */\n catalogId?: number\n}> {\n const chainId = Number(args.chainId)\n const resolved = await resolveGovernorProposalRef(args.proposalId)\n const gov = requireGovernor(chainId, resolved.governorAddress ?? args.governor)\n const client = publicClient(args.rpcUrl, chainId)\n const proposalId = resolved.proposalId\n const state = await client.readContract({\n address: gov,\n abi: governorReadAbi,\n functionName: 'state',\n args: [proposalId],\n })\n let againstVotes = '0'\n let forVotes = '0'\n let abstainVotes = '0'\n let votesPartial = false\n try {\n const votes = await client.readContract({\n address: gov,\n abi: governorReadAbi,\n functionName: 'proposalVotes',\n args: [proposalId],\n })\n againstVotes = votes[0].toString()\n forVotes = votes[1].toString()\n abstainVotes = votes[2].toString()\n } catch {\n votesPartial = true\n }\n return {\n state: Number(state),\n againstVotes,\n forVotes,\n abstainVotes,\n votesPartial,\n proposalId: proposalId.toString(),\n catalogId: resolved.catalogId,\n }\n}\n\n/** Snapshot voting power and prior vote for a KeyGen on a proposal. */\nexport async function continuumDaoFetchProposalVoteEligibility(args: {\n chainId: number | string\n rpcUrl: string\n proposalId: string | number | bigint\n account: string\n governor?: string\n}): Promise<{ hasVoted: boolean; snapshotVotes: string; snapshotBlock: string }> {\n const chainId = Number(args.chainId)\n const resolved = await resolveGovernorProposalRef(args.proposalId)\n const gov = requireGovernor(chainId, resolved.governorAddress ?? args.governor)\n const client = publicClient(args.rpcUrl, chainId)\n const proposalId = resolved.proposalId\n const account = getAddress(args.account)\n const [hasVoted, snapshotBlock] = await Promise.all([\n client.readContract({\n address: gov,\n abi: governorReadAbi,\n functionName: 'hasVoted',\n args: [proposalId, account],\n }),\n client.readContract({\n address: gov,\n abi: governorReadAbi,\n functionName: 'proposalSnapshot',\n args: [proposalId],\n }),\n ])\n const snapshotVotes = await client.readContract({\n address: gov,\n abi: governorReadAbi,\n functionName: 'getVotes',\n args: [account, snapshotBlock],\n })\n return {\n hasVoted,\n snapshotVotes: snapshotVotes.toString(),\n snapshotBlock: snapshotBlock.toString(),\n }\n}\n\nexport async function continuumDaoFetchProposalCount(args: {\n chainId: number\n rpcUrl: string\n governor?: string\n}): Promise<{ count: string }> {\n const gov = requireGovernor(args.chainId, args.governor)\n const client = publicClient(args.rpcUrl, args.chainId)\n const count = await client.readContract({ address: gov, abi: governorReadAbi, functionName: 'proposalCount' })\n return { count: count.toString() }\n}\n\nexport type ContinuumDaoProposalCatalog = {\n proposals: unknown[]\n total?: number\n minIndex?: number\n maxIndex?: number\n}\n\n/**\n * POST /proposals `start`/`end` are **catalog id indexes**, not offsets.\n * `end` is exclusive. Superseded-governor rows use negative ids (currently -2, -1).\n */\n/**\n * Backend catalog ids are small signed integers (including 0, -1, -2).\n * Governor `proposalId` values are 256-bit hashes — never 0 for a real proposal.\n */\nexport function looksLikeProposalCatalogId(raw: string | number | bigint): boolean {\n const s = String(raw).trim()\n if (!/^-?\\d+$/.test(s)) return false\n const n = Number(s)\n return Number.isSafeInteger(n) && Math.abs(n) <= 1_000_000\n}\n\nexport type ResolvedGovernorProposalRef = {\n proposalId: bigint\n catalogId?: number\n governorAddress?: string\n}\n\n/** Map catalog id 0 / -1 / -2 to the row’s onchainId + governor; leave hashes unchanged. */\nexport async function resolveGovernorProposalRef(\n raw: string | number | bigint,\n): Promise<ResolvedGovernorProposalRef> {\n if (!looksLikeProposalCatalogId(raw)) {\n return { proposalId: BigInt(String(raw).trim()) }\n }\n const catalogId = Number(String(raw).trim())\n const { proposal } = await continuumDaoFetchProposal({ id: catalogId })\n const wrap = asRecord(proposal)\n const parsed =\n parseBackendProposal(proposal) ??\n parseBackendProposal(wrap?.proposal) ??\n parseBackendProposal(wrap?.data)\n if (!parsed?.onchainId) {\n throw new Error(`catalog id ${catalogId} has no onchainId`)\n }\n return {\n proposalId: BigInt(parsed.onchainId),\n catalogId: parsed.id ?? catalogId,\n governorAddress: parsed.governorAddress,\n }\n}\n\nexport function resolveProposalCatalogRange(\n catalog: { minIndex?: number; maxIndex?: number },\n args?: { start?: number; end?: number },\n): { start: number; end: number } {\n const hasBounds = Number.isFinite(catalog.minIndex) && Number.isFinite(catalog.maxIndex)\n const minIndex = hasBounds ? Number(catalog.minIndex) : 0\n const maxIndex = hasBounds ? Number(catalog.maxIndex) : 0\n if (!hasBounds) {\n const start = args?.start ?? 0\n const end = args?.end ?? start + 20\n return { start, end }\n }\n return {\n start: args?.start ?? minIndex,\n end: args?.end ?? maxIndex + 1,\n }\n}\n\nasync function postProposalCatalog(body: Record<string, number>): Promise<ContinuumDaoProposalCatalog> {\n const res = await fetch(`${CONTINUUM_DAO_GOVERNANCE_API}/proposals`, {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify(body),\n })\n if (!res.ok) throw new Error(`proposals: ${res.status} ${await res.text()}`)\n return (await res.json()) as ContinuumDaoProposalCatalog\n}\n\nexport async function continuumDaoFetchProposals(args: {\n start?: number\n end?: number\n} = {}): Promise<ContinuumDaoProposalCatalog> {\n const bounds = await postProposalCatalog({})\n const { start, end } = resolveProposalCatalogRange(bounds, args)\n const listed = await postProposalCatalog({ start, end })\n return {\n ...listed,\n total: listed.total ?? bounds.total,\n minIndex: listed.minIndex ?? bounds.minIndex,\n maxIndex: listed.maxIndex ?? bounds.maxIndex,\n }\n}\n\nexport const GOVERNOR_STATE = {\n Pending: 0,\n Active: 1,\n Canceled: 2,\n Defeated: 3,\n Succeeded: 4,\n Queued: 5,\n Expired: 6,\n Executed: 7,\n} as const\n\nexport const GOVERNOR_STATE_LABELS = [\n 'Pending',\n 'Active',\n 'Canceled',\n 'Defeated',\n 'Succeeded',\n 'Queued',\n 'Expired',\n 'Executed',\n] as const\n\nexport type LiveProposalBucket = 'live' | 'pending' | 'readyToExecute' | 'recentlyCompleted' | 'unknown'\n\nexport function bucketGovernorState(state: number | null | undefined): LiveProposalBucket {\n if (state == null || !Number.isFinite(state)) return 'unknown'\n if (state === GOVERNOR_STATE.Active) return 'live'\n if (state === GOVERNOR_STATE.Pending) return 'pending'\n if (state === GOVERNOR_STATE.Succeeded) return 'readyToExecute'\n if (\n state === GOVERNOR_STATE.Canceled ||\n state === GOVERNOR_STATE.Defeated ||\n state === GOVERNOR_STATE.Queued ||\n state === GOVERNOR_STATE.Expired ||\n state === GOVERNOR_STATE.Executed\n ) {\n return 'recentlyCompleted'\n }\n return 'unknown'\n}\n\nexport type LiveProposalRow = {\n id?: number\n onchainId: string\n title: string\n configuration?: number\n governorAddress?: string\n proposer?: string\n committeeProposer?: boolean\n state: number | null\n stateLabel: string\n bucket: LiveProposalBucket\n againstVotes?: string\n forVotes?: string\n abstainVotes?: string\n}\n\nexport type ContinuumDaoLiveProposalsResult = {\n overlay: 'on-chain' | 'backend-only'\n scanned: number\n live: LiveProposalRow[]\n pending: LiveProposalRow[]\n readyToExecute: LiveProposalRow[]\n recentlyCompleted: LiveProposalRow[]\n unknown: LiveProposalRow[]\n note: string\n}\n\nfunction asRecord(value: unknown): Record<string, unknown> | null {\n return value && typeof value === 'object' && !Array.isArray(value) ? (value as Record<string, unknown>) : null\n}\n\nfunction parseBackendProposal(raw: unknown): {\n id?: number\n onchainId: string\n title: string\n configuration?: number\n governorAddress?: string\n proposer?: string\n committeeProposer?: boolean\n} | null {\n const row = asRecord(raw)\n if (!row) return null\n const onchainId = String(row.onchainId ?? row.onchain_id ?? row.proposalId ?? '').trim()\n if (!onchainId) return null\n const idRaw = row.id\n const id = typeof idRaw === 'number' ? idRaw : Number(idRaw)\n const governorRaw = String(row.governorAddress ?? row.governor_address ?? '').trim()\n const proposerRaw = String(row.proposer ?? '').trim()\n const proposer = isConfiguredAddress(proposerRaw) ? getAddress(proposerRaw) : undefined\n return {\n id: Number.isFinite(id) ? id : undefined,\n onchainId,\n title: String(row.title ?? 'Untitled'),\n configuration: typeof row.configuration === 'number' ? row.configuration : undefined,\n governorAddress: isConfiguredAddress(governorRaw) ? getAddress(governorRaw) : undefined,\n proposer,\n committeeProposer: proposer ? isContinuumDaoCommitteeProposer(proposer) : undefined,\n }\n}\n\nexport function isLegacyContinuumDaoGovernor(addr?: string | null): boolean {\n if (!addr || !isConfiguredAddress(addr)) return false\n return getAddress(addr) === CONTINUUM_DAO_LINEA_GOVERNOR_LEGACY_ADDRESS\n}\n\nexport function summarizeLiveProposals(result: Omit<ContinuumDaoLiveProposalsResult, 'note'>): string {\n if (result.overlay === 'backend-only') {\n return `Scanned ${result.scanned} backend proposal(s) but could not overlay ContinuumDAO.state. Do not call them live. Pass Linea chainId + rpcUrl + a non-zero governor.`\n }\n const label = (p: LiveProposalRow) =>\n `#${p.id ?? '—'} ${p.title}${p.committeeProposer ? ' [Committee]' : ''}`\n const liveTitles = result.live.map(label).join('; ') || 'none'\n const execTitles = result.readyToExecute.map(label).join('; ') || 'none'\n return `Live (Active, voting now): ${result.live.length} (${liveTitles}). Pending: ${result.pending.length}. Passed, ready to execute (Succeeded): ${result.readyToExecute.length} (${execTitles}). Recently completed in this scan: ${result.recentlyCompleted.length}. Queue is not implemented. After naming a proposal, offer ctm_continuum_dao_fetch_proposal_votes so the operator can see who voted and how.`\n}\n\nasync function mapPool<T, R>(items: T[], concurrency: number, fn: (item: T) => Promise<R>): Promise<R[]> {\n const out: R[] = []\n let i = 0\n const workers = Array.from({ length: Math.min(concurrency, items.length) }, async () => {\n while (i < items.length) {\n const idx = i\n i += 1\n out[idx] = await fn(items[idx]!)\n }\n })\n await Promise.all(workers)\n return out\n}\n\nexport async function continuumDaoFetchLiveProposals(args: {\n chainId?: number | string\n rpcUrl?: string\n governor?: string\n limit?: number\n completedLimit?: number\n}): Promise<ContinuumDaoLiveProposalsResult> {\n const limit = Math.min(Math.max(Number(args.limit) || 40, 1), 100)\n const completedLimit = Math.min(Math.max(Number(args.completedLimit) || 8, 0), 20)\n const listed = await continuumDaoFetchProposals()\n const rawList = Array.isArray(listed.proposals) ? listed.proposals : []\n const parsed = rawList.map(parseBackendProposal).filter((p): p is NonNullable<typeof p> => p != null)\n const ordered = [...parsed].sort((a, b) => (a.id ?? 0) - (b.id ?? 0))\n const latest = ordered.length > limit ? ordered.slice(ordered.length - limit) : ordered\n\n const chainId = args.chainId != null && String(args.chainId).trim() !== '' ? Number(args.chainId) : NaN\n const rpcUrl = (args.rpcUrl ?? '').trim()\n let overlay: 'on-chain' | 'backend-only' = 'backend-only'\n try {\n if (rpcUrl && Number.isFinite(chainId)) {\n requireGovernor(chainId, args.governor)\n overlay = 'on-chain'\n }\n } catch {\n overlay = 'backend-only'\n }\n\n const rows: LiveProposalRow[] = overlay === 'on-chain'\n ? await mapPool(latest, 6, async (p) => {\n try {\n const st = await continuumDaoFetchProposalState({\n chainId,\n rpcUrl,\n proposalId: p.onchainId,\n governor: p.governorAddress ?? args.governor,\n })\n return {\n ...p,\n state: st.state,\n stateLabel: GOVERNOR_STATE_LABELS[st.state] ?? String(st.state),\n bucket: bucketGovernorState(st.state),\n againstVotes: st.againstVotes,\n forVotes: st.forVotes,\n abstainVotes: st.abstainVotes,\n }\n } catch {\n return { ...p, state: null, stateLabel: 'Unknown', bucket: 'unknown' as const }\n }\n })\n : latest.map((p) => ({ ...p, state: null, stateLabel: 'Unknown', bucket: 'unknown' as const }))\n\n const live = rows.filter((r) => r.bucket === 'live')\n const pending = rows.filter((r) => r.bucket === 'pending')\n const readyToExecute = rows.filter((r) => r.bucket === 'readyToExecute')\n const recentlyCompleted = rows.filter((r) => r.bucket === 'recentlyCompleted').slice(0, completedLimit)\n const unknown = rows.filter((r) => r.bucket === 'unknown')\n const grouped = {\n overlay,\n scanned: rows.length,\n live,\n pending,\n readyToExecute,\n recentlyCompleted,\n unknown,\n }\n return { ...grouped, note: summarizeLiveProposals(grouped) }\n}\n\nexport async function continuumDaoFetchProposal(args: { id: string | number }): Promise<{ proposal: unknown }> {\n const res = await fetch(`${CONTINUUM_DAO_GOVERNANCE_API}/proposals/${args.id}`, { cache: 'no-store' })\n if (!res.ok) throw new Error(`proposal: ${res.status} ${await res.text()}`)\n return { proposal: await res.json() }\n}\n\nexport type ContinuumDaoRegisterProposalPayload = {\n onchainId: string\n title: string\n description: string\n proposer: string\n forumKey: string\n type: number\n configuration: 0 | 1\n actions?: unknown[]\n options?: unknown[]\n}\n\nexport async function buildEvmMultisignBodyContinuumDaoProposeDeltaFromMcp(\n args: ContinuumDaoCommonArgs & {\n title: string\n options: GovOptionInput[]\n nWinners: string | number\n governor?: string\n noOpTarget?: string\n forumKey: string\n forumUrl?: string\n },\n) {\n return buildEvmMultisignBodyContinuumDaoProposeDelta({\n ...args,\n nWinners: Number(args.nWinners),\n })\n}\n\nexport async function buildEvmMultisignBodyContinuumDaoCastVoteBravoFromMcp(\n args: ContinuumDaoCommonArgs & { proposalId: string | number | bigint; support: 0 | 1 | 2 | string; governor?: string },\n) {\n const support = Number(args.support)\n if (support !== 0 && support !== 1 && support !== 2) throw new Error('Bravo support must be 0, 1, or 2.')\n return buildEvmMultisignBodyContinuumDaoCastVoteBravo({ ...args, support })\n}\n\nexport async function continuumDaoRegisterProposal(\n payload: ContinuumDaoRegisterProposalPayload,\n): Promise<{ ok: true; result: unknown }> {\n assertContinuumDaoForumTopicKey(payload.forumKey)\n const res = await fetch(`${CONTINUUM_DAO_GOVERNANCE_API}/proposals/create`, {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify(payload),\n })\n if (!res.ok) throw new Error(`proposals/create: ${res.status} ${await res.text()}`)\n return { ok: true, result: await res.json() }\n}\n","import type { ProtocolModule } from './types.js'\n\nconst modules: ProtocolModule[] = []\n\nexport function registerProtocolModule(mod: ProtocolModule): void {\n const existing = modules.findIndex((m) => m.id === mod.id)\n if (existing >= 0) {\n modules[existing] = mod\n } else {\n modules.push(mod)\n }\n}\n\nexport function getProtocolModules(): readonly ProtocolModule[] {\n return modules\n}\n\nexport function getProtocolModule(id: string): ProtocolModule | undefined {\n return modules.find((m) => m.id === id)\n}\n\nexport function getActionsByChainCategory(category: string): ProtocolModule['actions'] {\n return modules.filter((m) => m.chainCategory === category).flatMap((m) => m.actions)\n}\n","import type { ProtocolModule } from '../../../core/types.js'\nimport { registerProtocolModule } from '../../../core/registry.js'\nimport { CONTINUUM_DAO_PROTOCOL_ID, isContinuumDaoSupportedChainId } from './constants.js'\n\nexport * from './constants.js'\nexport * from './escrowRules.js'\nexport * from './escrowPreflight.js'\nexport * from './multisign.js'\nexport * from './governance.js'\nexport * from './simulateProposal.js'\nexport * from './foundryProposalScript.js'\nexport * from './composeProposalAction.js'\nexport * from './explainProposal.js'\nexport * from './proposalVotes.js'\nexport * from './forum.js'\n\nexport { CONTINUUM_DAO_PROTOCOL_ID }\n\nexport const continuumDaoProtocolModule: ProtocolModule = {\n id: CONTINUUM_DAO_PROTOCOL_ID,\n chainCategory: 'evm',\n isChainSupported(ctx) {\n if (ctx.chainCategory !== 'evm') return false\n const n = typeof ctx.chainId === 'number' ? ctx.chainId : Number.parseInt(String(ctx.chainId), 10)\n return isContinuumDaoSupportedChainId(n)\n },\n isTokenSupported(token) {\n return token.category === 'evm' && (token.kind === 'erc20' || token.kind === 'erc721')\n },\n actions: [\n { id: 'continuum-dao.create-lock', protocolId: CONTINUUM_DAO_PROTOCOL_ID, chainCategory: 'evm', description: 'Approve CTM + create_lock', commonParams: ['keyGen', 'purposeText', 'useCustomGas'], params: { amountHuman: { type: 'string', required: true, description: 'CTM amount' }, lockDurationSeconds: { type: 'string', required: true, description: 'Lock duration in seconds' } } },\n { id: 'continuum-dao.increase-amount', protocolId: CONTINUUM_DAO_PROTOCOL_ID, chainCategory: 'evm', description: 'Increase lock amount', commonParams: ['keyGen', 'purposeText', 'useCustomGas'], params: { tokenId: { type: 'string', required: true, description: 'veCTM token id' }, amountHuman: { type: 'string', required: true, description: 'CTM amount to add' } } },\n { id: 'continuum-dao.increase-unlock-time', protocolId: CONTINUUM_DAO_PROTOCOL_ID, chainCategory: 'evm', description: 'Increase unlock time', commonParams: ['keyGen', 'purposeText', 'useCustomGas'], params: { tokenId: { type: 'string', required: true, description: 'veCTM token id' }, lockDurationSeconds: { type: 'string', required: true, description: 'Duration from week boundary to new unlock' } } },\n { id: 'continuum-dao.split', protocolId: CONTINUUM_DAO_PROTOCOL_ID, chainCategory: 'evm', description: 'Split a veCTM lock', commonParams: ['keyGen', 'purposeText', 'useCustomGas'], params: { tokenId: { type: 'string', required: true, description: 'Source token id' }, extractedHuman: { type: 'string', required: true, description: 'CTM extracted into the new lock' } } },\n { id: 'continuum-dao.merge', protocolId: CONTINUUM_DAO_PROTOCOL_ID, chainCategory: 'evm', description: 'Merge two veCTM locks', commonParams: ['keyGen', 'purposeText', 'useCustomGas'], params: { fromTokenId: { type: 'string', required: true, description: 'Burned token id' }, toTokenId: { type: 'string', required: true, description: 'Surviving token id' } } },\n { id: 'continuum-dao.withdraw', protocolId: CONTINUUM_DAO_PROTOCOL_ID, chainCategory: 'evm', description: 'Withdraw an expired lock', commonParams: ['keyGen', 'purposeText', 'useCustomGas'], params: { tokenId: { type: 'string', required: true, description: 'veCTM token id' } } },\n { id: 'continuum-dao.liquidate', protocolId: CONTINUUM_DAO_PROTOCOL_ID, chainCategory: 'evm', description: 'Liquidate a lock', commonParams: ['keyGen', 'purposeText', 'useCustomGas'], params: { tokenId: { type: 'string', required: true, description: 'veCTM token id' } } },\n { id: 'continuum-dao.delegate', protocolId: CONTINUUM_DAO_PROTOCOL_ID, chainCategory: 'evm', description: 'Delegate voting power', commonParams: ['keyGen', 'purposeText', 'useCustomGas'], params: { delegatee: { type: 'string', required: true, description: 'Delegatee address' } } },\n { id: 'continuum-dao.undelegate', protocolId: CONTINUUM_DAO_PROTOCOL_ID, chainCategory: 'evm', description: 'Return voting power to the KeyGen (delegate to self)', commonParams: ['keyGen', 'purposeText', 'useCustomGas'], params: {} },\n { id: 'continuum-dao.fetch-delegates', protocolId: CONTINUUM_DAO_PROTOCOL_ID, chainCategory: 'evm', description: 'Read VotingEscrow.delegates(account)', commonParams: [], params: { account: { type: 'string', required: true, description: 'KeyGen or wallet address' } } },\n { id: 'continuum-dao.transfer', protocolId: CONTINUUM_DAO_PROTOCOL_ID, chainCategory: 'evm', description: 'Transfer a veCTM NFT', commonParams: ['keyGen', 'purposeText', 'useCustomGas'], params: { tokenId: { type: 'string', required: true, description: 'veCTM token id' }, to: { type: 'string', required: true, description: 'Recipient' } } },\n { id: 'continuum-dao.attach', protocolId: CONTINUUM_DAO_PROTOCOL_ID, chainCategory: 'evm', description: 'Attach veCTM to the node (authority KeyGen). groupId is implicit from that KeyGen and binds the fee waiver. A second group attaches after rotating authority.', commonParams: ['keyGen', 'purposeText', 'useCustomGas'], params: { nodeKey: { type: 'string', required: true, description: 'Node key' }, tokenId: { type: 'string', required: true, description: 'veCTM token id' }, mpaWallet: { type: 'string', required: true, description: 'MultiSignAgentWallet address' } } },\n { id: 'continuum-dao.request-detach', protocolId: CONTINUUM_DAO_PROTOCOL_ID, chainCategory: 'evm', description: 'Request governance detach', commonParams: ['keyGen', 'purposeText', 'useCustomGas'], params: { tokenId: { type: 'string', required: true, description: 'Attached token id' }, nodeProperties: { type: 'string', required: true, description: 'NodeProperties address' } } },\n { id: 'continuum-dao.propose-bravo', protocolId: CONTINUUM_DAO_PROTOCOL_ID, chainCategory: 'evm', description: 'Propose a Bravo (For/Against/Abstain) proposal', commonParams: ['keyGen', 'purposeText', 'useCustomGas'], params: { title: { type: 'string', required: true, description: 'On-chain description (title)' }, forumKey: { type: 'string', required: true, description: 'Created forum thread URL from forum_create_topic' } } },\n { id: 'continuum-dao.propose-delta', protocolId: CONTINUUM_DAO_PROTOCOL_ID, chainCategory: 'evm', description: 'Propose a Delta multi-option proposal', commonParams: ['keyGen', 'purposeText', 'useCustomGas'], params: { title: { type: 'string', required: true, description: 'On-chain description (title)' }, nWinners: { type: 'number', required: true, description: 'Winning options to execute' }, forumKey: { type: 'string', required: true, description: 'Created forum thread URL from forum_create_topic' } } },\n { id: 'continuum-dao.simulate-proposal', protocolId: CONTINUUM_DAO_PROTOCOL_ID, chainCategory: 'evm', description: 'Dry-run a Bravo/Delta proposal; returns sequential Foundry forge scripts (not isolated eth_call)', commonParams: [], params: { account: { type: 'string', required: false, description: 'Proposer EOA; defaults to KeyGen when keyGenId is set' }, configuration: { type: 'string', required: true, description: 'bravo or delta' } } },\n { id: 'continuum-dao.compose-proposal-action', protocolId: CONTINUUM_DAO_PROTOCOL_ID, chainCategory: 'evm', description: 'Look up a contract function ABI, type-check parameter values, and preview a Bravo/Delta draft table', commonParams: [], params: { target: { type: 'string', required: false, description: 'Action contract address' }, functionName: { type: 'string', required: false, description: 'Function name or signature' }, configuration: { type: 'string', required: false, description: 'bravo or delta for preview' } } },\n { id: 'continuum-dao.cast-vote-bravo', protocolId: CONTINUUM_DAO_PROTOCOL_ID, chainCategory: 'evm', description: 'Cast a Bravo vote', commonParams: ['keyGen', 'purposeText', 'useCustomGas'], params: { proposalId: { type: 'string', required: true, description: 'Catalog id or governor proposal hash' }, support: { type: 'number', required: true, description: '0 against, 1 for, 2 abstain' } } },\n { id: 'continuum-dao.cast-vote-delta', protocolId: CONTINUUM_DAO_PROTOCOL_ID, chainCategory: 'evm', description: 'Cast a Delta vote including NOTA', commonParams: ['keyGen', 'purposeText', 'useCustomGas'], params: { proposalId: { type: 'string', required: true, description: 'Catalog id or governor proposal hash' } } },\n { id: 'continuum-dao.execute', protocolId: CONTINUUM_DAO_PROTOCOL_ID, chainCategory: 'evm', description: 'Execute a succeeded proposal', commonParams: ['keyGen', 'purposeText', 'useCustomGas'], params: { proposalId: { type: 'string', required: true, description: 'Catalog id or governor proposal hash' } } },\n { id: 'continuum-dao.cancel', protocolId: CONTINUUM_DAO_PROTOCOL_ID, chainCategory: 'evm', description: 'Cancel a proposal', commonParams: ['keyGen', 'purposeText', 'useCustomGas'], params: { proposalId: { type: 'string', required: true, description: 'Catalog id or governor proposal hash' } } },\n { id: 'continuum-dao.fetch-live-proposals', protocolId: CONTINUUM_DAO_PROTOCOL_ID, chainCategory: 'evm', description: 'List live/pending/succeeded proposals with on-chain state overlay', commonParams: [], params: { chainId: { type: 'number', required: false, description: 'Linea chain id' }, rpcUrl: { type: 'string', required: false, description: 'Linea RPC for state overlay' } } },\n { id: 'continuum-dao.explain-proposal', protocolId: CONTINUUM_DAO_PROTOCOL_ID, chainCategory: 'evm', description: 'Deconstruct a proposal into a readable briefing (actions, C3, no-ops, risks)', commonParams: [], params: { id: { type: 'string', required: false, description: 'Backend proposal id' }, onchainId: { type: 'string', required: false, description: 'Governor proposal id' } } },\n { id: 'continuum-dao.fetch-proposal-votes', protocolId: CONTINUUM_DAO_PROTOCOL_ID, chainCategory: 'evm', description: 'Who voted on a proposal and how (VoteCast / VoteCastWithParams)', commonParams: [], params: { proposalId: { type: 'string', required: true, description: 'Catalog id or governor proposal hash' } } },\n { id: 'continuum-dao.forum-sign-in', protocolId: CONTINUUM_DAO_PROTOCOL_ID, chainCategory: 'evm', description: 'EIP-712 forum login (veCTM gate first)', commonParams: ['keyGen', 'purposeText'], params: { nodeKey: { type: 'string', required: false, description: 'Attached node key' }, username: { type: 'string', required: false, description: 'Username when there is no node key' } } },\n { id: 'continuum-dao.forum-sign-in-eligible', protocolId: CONTINUUM_DAO_PROTOCOL_ID, chainCategory: 'evm', description: 'Check veCTM forum login eligibility', commonParams: [], params: { address: { type: 'string', required: true, description: 'KeyGen or wallet address' } } },\n { id: 'continuum-dao.forum-sign-out', protocolId: CONTINUUM_DAO_PROTOCOL_ID, chainCategory: 'evm', description: 'Revoke forum ticket and sessions', commonParams: [], params: { ticket: { type: 'string', required: true, description: 'Forum write ticket' } } },\n { id: 'continuum-dao.forum-create-topic', protocolId: CONTINUUM_DAO_PROTOCOL_ID, chainCategory: 'evm', description: 'Create a Governance proposal thread (not Ideas)', commonParams: [], params: { section: { type: 'string', required: false, description: 'decision | election | treasury | constitution | admin' }, title: { type: 'string', required: true, description: 'Thread title' }, content: { type: 'string', required: true, description: 'Proposal body' } } },\n { id: 'continuum-dao.forum-create-idea', protocolId: CONTINUUM_DAO_PROTOCOL_ID, chainCategory: 'evm', description: 'Post an Idea or Suggestion (not a proposal)', commonParams: [], params: { title: { type: 'string', required: true, description: 'Thread title' }, content: { type: 'string', required: true, description: 'Idea body' } } },\n { id: 'continuum-dao.forum-search', protocolId: CONTINUUM_DAO_PROTOCOL_ID, chainCategory: 'evm', description: 'Search forum titles and bodies; optional hours/since', commonParams: [], params: { query: { type: 'string', required: false, description: 'Case-insensitive title or body substring' }, hours: { type: 'number', required: false, description: 'Only posts from the last X hours' }, since: { type: 'string', required: false, description: 'Only posts since this ISO date or unix timestamp' } } },\n { id: 'continuum-dao.forum-recent', protocolId: CONTINUUM_DAO_PROTOCOL_ID, chainCategory: 'evm', description: 'List recent readable posts (id, title, username, createdAt); requires hours or since', commonParams: [], params: { hours: { type: 'number', required: false, description: 'Only posts from the last X hours' }, since: { type: 'string', required: false, description: 'Only posts since this ISO date or unix timestamp' } } },\n { id: 'continuum-dao.forum-delete', protocolId: CONTINUUM_DAO_PROTOCOL_ID, chainCategory: 'evm', description: 'Admin/moderator soft-delete a post, thread, or a user’s posts', commonParams: [], params: { pid: { type: 'string', required: false, description: 'Post id' }, tid: { type: 'string', required: false, description: 'Thread id' }, username: { type: 'string', required: false, description: 'Delete all posts by this user' }, hours: { type: 'number', required: false, description: 'Only in the last X hours (default all)' }, since: { type: 'string', required: false, description: 'Only since this date (default all)' } } },\n { id: 'continuum-dao.forum-unread', protocolId: CONTINUUM_DAO_PROTOCOL_ID, chainCategory: 'evm', description: 'List unread topics for the logged-in user', commonParams: [], params: { filter: { type: 'string', required: false, description: 'all | new | watched | unreplied' } } },\n { id: 'continuum-dao.forum-mark-read', protocolId: CONTINUUM_DAO_PROTOCOL_ID, chainCategory: 'evm', description: 'Mark topic(s) read (tid/url, tids, or all)', commonParams: [], params: { tid: { type: 'string', required: false, description: 'Thread id' }, all: { type: 'boolean', required: false, description: 'Mark every unread topic read' } } },\n { id: 'continuum-dao.forum-mark-unread', protocolId: CONTINUUM_DAO_PROTOCOL_ID, chainCategory: 'evm', description: 'Mark one topic unread', commonParams: [], params: { tid: { type: 'string', required: false, description: 'Thread id' } } },\n ],\n}\n\nregisterProtocolModule(continuumDaoProtocolModule)\n","/**\n * Shared CTM / veCTM escrow rules used by MCP builders and (via the same\n * builders) the node-app dialog. Mirrors VotingEscrow.sol + ContinuumDaoDialog.\n */\nimport { getAddress, zeroAddress } from 'viem'\nimport {\n MAXTIME_SECONDS,\n VECTM_DEFAULT_MINIMUM_LOCK_WEI,\n VECTM_LIQ_MIN_LOCKED_WEI,\n VECTM_LIQ_PENALTY_DEN,\n VECTM_LIQ_PENALTY_NUM,\n VECTM_MAX_LOCK_WEEKS,\n WEEK_SECONDS,\n} from './constants.js'\n\nexport type VeCtmLockState = {\n tokenId: bigint\n amountWei: bigint\n endSec: bigint\n owner: `0x${string}`\n attached: boolean\n vePowerWei: bigint\n}\n\nexport function maxLockDurationSeconds(): number {\n return Math.min(VECTM_MAX_LOCK_WEEKS * WEEK_SECONDS, MAXTIME_SECONDS)\n}\n\nexport function floorUnlockTimeSeconds(nowSec: number, durationSec: bigint): bigint {\n return ((BigInt(nowSec) + durationSec) / BigInt(WEEK_SECONDS)) * BigInt(WEEK_SECONDS)\n}\n\nexport function assertCtmAmountAtLeastMinimum(amountWei: bigint, minimumLockWei: bigint, label: string): void {\n const min = minimumLockWei > 0n ? minimumLockWei : VECTM_DEFAULT_MINIMUM_LOCK_WEI\n if (amountWei < min) {\n throw new Error(`${label} must be at least ${formatCtmWei(min)} CTM (VotingEscrow.minimumLock).`)\n }\n}\n\nexport function assertCreateLockAmount(amountWei: bigint, minimumLockWei: bigint, balanceWei?: bigint): void {\n if (amountWei <= 0n) throw new Error('CTM amount must be greater than zero.')\n assertCtmAmountAtLeastMinimum(amountWei, minimumLockWei, 'Create lock')\n if (balanceWei != null && amountWei > balanceWei) {\n throw new Error(`Create lock ${formatCtmWei(amountWei)} CTM exceeds KeyGen balance ${formatCtmWei(balanceWei)} CTM.`)\n }\n}\n\nexport function assertLockDurationSeconds(durationSec: bigint, nowSec: number, label: string): bigint {\n if (durationSec <= 0n) throw new Error(`${label} duration must be greater than zero.`)\n if (durationSec < BigInt(WEEK_SECONDS)) {\n throw new Error(`${label} duration must be at least 1 week (${WEEK_SECONDS} seconds).`)\n }\n if (durationSec > BigInt(maxLockDurationSeconds())) {\n throw new Error(\n `${label} duration cannot exceed ${VECTM_MAX_LOCK_WEEKS} weeks (VotingEscrow MAXTIME, week-aligned).`,\n )\n }\n const unlock = floorUnlockTimeSeconds(nowSec, durationSec)\n if (unlock <= BigInt(nowSec)) {\n throw new Error(`${label} unlock time must be after the current week boundary.`)\n }\n if (unlock > BigInt(nowSec) + BigInt(MAXTIME_SECONDS)) {\n throw new Error(`${label} unlock time exceeds VotingEscrow MAXTIME (4 years).`)\n }\n return unlock\n}\n\nexport function assertIncreaseAmount(amountWei: bigint, lock: VeCtmLockState, nowSec: number, balanceWei?: bigint): void {\n if (amountWei <= 0n) throw new Error('CTM amount must be greater than zero.')\n if (lock.amountWei === 0n) throw new Error(`veCTM #${lock.tokenId} has no existing lock.`)\n if (lock.endSec <= BigInt(nowSec)) {\n throw new Error(`Cannot increase amount on expired veCTM #${lock.tokenId}. Withdraw or create a new lock.`)\n }\n if (balanceWei != null && amountWei > balanceWei) {\n throw new Error(\n `Increase amount ${formatCtmWei(amountWei)} CTM exceeds KeyGen balance ${formatCtmWei(balanceWei)} CTM.`,\n )\n }\n}\n\nexport function assertIncreaseUnlockTime(durationSec: bigint, lock: VeCtmLockState, nowSec: number): bigint {\n if (lock.amountWei === 0n) throw new Error(`veCTM #${lock.tokenId} has no existing lock.`)\n if (lock.endSec <= BigInt(nowSec)) {\n throw new Error(`Cannot increase unlock time on expired veCTM #${lock.tokenId}.`)\n }\n const unlock = assertLockDurationSeconds(durationSec, nowSec, 'Increase unlock time')\n if (unlock <= lock.endSec) {\n throw new Error(\n `New unlock time must be after the current lock end (${lock.endSec.toString()}). Pick a later week-aligned date.`,\n )\n }\n return unlock\n}\n\nexport function assertSplitExtracted(\n extractedWei: bigint,\n lock: VeCtmLockState,\n minimumLockWei: bigint,\n nowSec: number,\n): void {\n if (lock.attached) {\n throw new Error(`Split is blocked while veCTM #${lock.tokenId} is attached to a node. Request detach first.`)\n }\n if (lock.amountWei === 0n) throw new Error(`veCTM #${lock.tokenId} has no existing lock.`)\n if (lock.endSec <= BigInt(nowSec)) {\n throw new Error(`Cannot split expired veCTM #${lock.tokenId}.`)\n }\n const min = minimumLockWei > 0n ? minimumLockWei : VECTM_DEFAULT_MINIMUM_LOCK_WEI\n if (lock.amountWei < min * 2n) {\n throw new Error('Split requires at least 2 CTM locked (1 CTM minimum per resulting lock).')\n }\n if (extractedWei < min) {\n throw new Error(`Extract at least ${formatCtmWei(min)} CTM into the new lock.`)\n }\n if (extractedWei > lock.amountWei - min) {\n throw new Error(`The original lock must keep at least ${formatCtmWei(min)} CTM after the split.`)\n }\n}\n\nexport function assertMerge(fromLock: VeCtmLockState, toLock: VeCtmLockState): void {\n if (fromLock.tokenId === toLock.tokenId) throw new Error('Merge requires two different token ids.')\n if (fromLock.attached) {\n throw new Error(`Merge is blocked while veCTM #${fromLock.tokenId} is attached to a node.`)\n }\n if (toLock.attached) {\n throw new Error(`Merge is blocked while veCTM #${toLock.tokenId} is attached to a node.`)\n }\n if (fromLock.owner.toLowerCase() !== toLock.owner.toLowerCase()) {\n throw new Error('Merge requires both veCTM locks to have the same owner.')\n }\n}\n\nexport function assertWithdraw(lock: VeCtmLockState, nowSec: number): void {\n if (lock.attached) {\n throw new Error(`Withdraw is blocked while veCTM #${lock.tokenId} is attached to a node. Request detach first.`)\n }\n if (lock.endSec <= 0n) throw new Error(`Unlock time unavailable for veCTM #${lock.tokenId}.`)\n if (lock.endSec > BigInt(nowSec)) {\n throw new Error(`Withdraw is available after the lock expires (unlock ${lock.endSec.toString()}).`)\n }\n}\n\nexport function computeLiquidationAmounts(args: {\n lockedAmountWei: bigint\n vePowerWei: bigint\n lockEndSec: bigint\n nowSec: number\n}): {\n userWei: bigint\n treasuryWei: bigint\n lockExpired: boolean\n tooSmall: boolean\n zeroPenalty: boolean\n} {\n if (args.lockEndSec > 0n && BigInt(args.nowSec) >= args.lockEndSec) {\n return {\n userWei: args.lockedAmountWei,\n treasuryWei: 0n,\n lockExpired: true,\n tooSmall: false,\n zeroPenalty: false,\n }\n }\n if (args.lockedAmountWei <= VECTM_LIQ_MIN_LOCKED_WEI) {\n return {\n userWei: 0n,\n treasuryWei: 0n,\n lockExpired: false,\n tooSmall: true,\n zeroPenalty: false,\n }\n }\n const penalty = (args.vePowerWei * VECTM_LIQ_PENALTY_NUM) / VECTM_LIQ_PENALTY_DEN\n if (penalty === 0n) {\n return {\n userWei: 0n,\n treasuryWei: 0n,\n lockExpired: false,\n tooSmall: false,\n zeroPenalty: true,\n }\n }\n return {\n userWei: args.lockedAmountWei - penalty,\n treasuryWei: penalty,\n lockExpired: false,\n tooSmall: false,\n zeroPenalty: false,\n }\n}\n\nexport function assertLiquidate(lock: VeCtmLockState, liquidationsEnabled: boolean | null, nowSec: number): void {\n if (lock.attached) {\n throw new Error(`Liquidate is blocked while veCTM #${lock.tokenId} is attached to a node. Request detach first.`)\n }\n if (liquidationsEnabled === false) {\n throw new Error('Liquidations are currently disabled on-chain.')\n }\n const preview = computeLiquidationAmounts({\n lockedAmountWei: lock.amountWei,\n vePowerWei: lock.vePowerWei,\n lockEndSec: lock.endSec,\n nowSec,\n })\n if (preview.tooSmall) throw new Error('Locked amount is too small to liquidate.')\n if (preview.zeroPenalty) throw new Error('Voting power is too low to compute a liquidation penalty.')\n}\n\nexport function assertDelegatee(delegateeRaw: string, executor: string): `0x${string}` {\n const delegatee = getAddress(delegateeRaw)\n if (delegatee === zeroAddress) {\n throw new Error('Zero address is not allowed. Use undelegate to return power to this KeyGen.')\n }\n const self = getAddress(executor)\n if (delegatee === self) {\n throw new Error('This is this KeyGen’s address — use undelegate instead.')\n }\n return delegatee\n}\n\nexport function assertUndelegateNotAlreadySelf(alreadySelf: boolean, account: string): void {\n if (alreadySelf) {\n throw new Error(`Voting power is already at this KeyGen (${getAddress(account)}).`)\n }\n}\n\nexport function assertTransfer(lock: VeCtmLockState, toRaw: string, fromRaw: string): `0x${string}` {\n if (lock.attached) {\n throw new Error(`Transfer is blocked while veCTM #${lock.tokenId} is attached to a node.`)\n }\n const to = getAddress(toRaw)\n const from = getAddress(fromRaw)\n if (to === zeroAddress) throw new Error('Cannot transfer veCTM to the zero address.')\n if (to === from) throw new Error('Transfer recipient must be different from this KeyGen.')\n return to\n}\n\nexport function assertExecutorOwnsLock(lock: VeCtmLockState, executor: string): void {\n if (lock.owner.toLowerCase() !== getAddress(executor).toLowerCase()) {\n throw new Error(`KeyGen ${getAddress(executor)} does not own veCTM #${lock.tokenId} (owner ${lock.owner}).`)\n }\n}\n\nfunction formatCtmWei(wei: bigint): string {\n const whole = wei / 10n ** 18n\n const frac = wei % 10n ** 18n\n if (frac === 0n) return whole.toString()\n const fracStr = frac.toString().padStart(18, '0').replace(/0+$/, '')\n return `${whole.toString()}.${fracStr}`\n}\n","/**\n * On-chain preflight for CTM / veCTM MCP builders.\n * Reads VotingEscrow + NodeProperties so agents cannot assemble reverting batches.\n */\nimport { createPublicClient, defineChain, getAddress, parseAbi, zeroAddress, type Address } from 'viem'\nimport { defiEvmTransport } from '../../../core/defiEvmClient.js'\nimport { VECTM_DEFAULT_MINIMUM_LOCK_WEI, isConfiguredAddress } from './constants.js'\nimport {\n assertCreateLockAmount,\n assertDelegatee,\n assertExecutorOwnsLock,\n assertIncreaseAmount,\n assertIncreaseUnlockTime,\n assertLiquidate,\n assertLockDurationSeconds,\n assertMerge,\n assertSplitExtracted,\n assertTransfer,\n assertUndelegateNotAlreadySelf,\n assertWithdraw,\n type VeCtmLockState,\n} from './escrowRules.js'\n\nconst veReadAbi = parseAbi([\n 'function minimumLock() view returns (uint256)',\n 'function locked(uint256 tokenId) view returns (int128 amount, uint256 end)',\n 'function ownerOf(uint256 tokenId) view returns (address)',\n 'function balanceOfNFT(uint256 tokenId) view returns (uint256)',\n 'function liquidationsEnabled() view returns (bool)',\n 'function nodeProperties() view returns (address)',\n 'function rewards() view returns (address)',\n 'function delegates(address account) view returns (address)',\n 'function token() view returns (address)',\n])\nconst erc20Abi = parseAbi(['function balanceOf(address owner) view returns (uint256)'])\nconst nodePropsAbi = parseAbi([\n 'function attachedKeyGen(uint256 tokenId) view returns (address)',\n 'function attachedTokenId(address keyGen) view returns (uint256)',\n 'function nodeRequestingDetachment(uint256 tokenId) view returns (bool)',\n])\nconst rewardsAbi = parseAbi(['function unclaimedRewards(uint256 tokenId) view returns (uint256)'])\nconst mpaReadAbi = parseAbi([\n 'function getNodeWithdrawAuthority(string nodeKey) view returns (address)',\n 'function ve() view returns (address)',\n 'function veCtmThresholdPower() view returns (uint256)',\n 'function nodeProperties() view returns (address)',\n])\n\nfunction publicClient(rpcUrl: string, chainId: number) {\n return createPublicClient({\n chain: defineChain({\n id: chainId,\n name: 'ContinuumDAO escrow',\n nativeCurrency: { decimals: 18, name: 'Ether', symbol: 'ETH' },\n rpcUrls: { default: { http: [rpcUrl.trim()] } },\n }),\n transport: defiEvmTransport(rpcUrl.trim()),\n })\n}\n\nexport async function readMinimumLockWei(args: {\n rpcUrl: string\n chainId: number\n votingEscrow: Address\n}): Promise<bigint> {\n const client = publicClient(args.rpcUrl, args.chainId)\n try {\n const min = await client.readContract({\n address: args.votingEscrow,\n abi: veReadAbi,\n functionName: 'minimumLock',\n })\n return min > 0n ? min : VECTM_DEFAULT_MINIMUM_LOCK_WEI\n } catch {\n return VECTM_DEFAULT_MINIMUM_LOCK_WEI\n }\n}\n\nexport async function readCtmBalanceWei(args: {\n rpcUrl: string\n chainId: number\n ctm: Address\n owner: Address\n}): Promise<bigint | undefined> {\n const client = publicClient(args.rpcUrl, args.chainId)\n try {\n return await client.readContract({\n address: args.ctm,\n abi: erc20Abi,\n functionName: 'balanceOf',\n args: [args.owner],\n })\n } catch {\n return undefined\n }\n}\n\nexport async function readVeCtmLockState(args: {\n rpcUrl: string\n chainId: number\n votingEscrow: Address\n tokenId: bigint\n}): Promise<VeCtmLockState> {\n const client = publicClient(args.rpcUrl, args.chainId)\n const [lockedPair, owner, vePower, nodeProperties] = await Promise.all([\n client.readContract({\n address: args.votingEscrow,\n abi: veReadAbi,\n functionName: 'locked',\n args: [args.tokenId],\n }),\n client.readContract({\n address: args.votingEscrow,\n abi: veReadAbi,\n functionName: 'ownerOf',\n args: [args.tokenId],\n }),\n client.readContract({\n address: args.votingEscrow,\n abi: veReadAbi,\n functionName: 'balanceOfNFT',\n args: [args.tokenId],\n }),\n client.readContract({\n address: args.votingEscrow,\n abi: veReadAbi,\n functionName: 'nodeProperties',\n }),\n ])\n const amountRaw = lockedPair[0]\n const amountWei = amountRaw < 0n ? 0n : BigInt(amountRaw)\n let attached = false\n if (isConfiguredAddress(nodeProperties)) {\n try {\n const attachedKey = await client.readContract({\n address: getAddress(nodeProperties),\n abi: nodePropsAbi,\n functionName: 'attachedKeyGen',\n args: [args.tokenId],\n })\n attached = attachedKey !== zeroAddress\n } catch {\n attached = false\n }\n }\n return {\n tokenId: args.tokenId,\n amountWei,\n endSec: lockedPair[1],\n owner: getAddress(owner),\n attached,\n vePowerWei: vePower,\n }\n}\n\nasync function assertNoUnclaimedRewards(args: {\n rpcUrl: string\n chainId: number\n votingEscrow: Address\n tokenId: bigint\n}): Promise<void> {\n const client = publicClient(args.rpcUrl, args.chainId)\n let rewards: Address\n try {\n rewards = await client.readContract({\n address: args.votingEscrow,\n abi: veReadAbi,\n functionName: 'rewards',\n })\n } catch {\n return\n }\n if (!isConfiguredAddress(rewards)) return\n try {\n const unclaimed = await client.readContract({\n address: rewards,\n abi: rewardsAbi,\n functionName: 'unclaimedRewards',\n args: [args.tokenId],\n })\n if (unclaimed !== 0n) {\n throw new Error(`veCTM #${args.tokenId} has unclaimed rewards. Claim them before this escrow action.`)\n }\n } catch (err) {\n if (err instanceof Error && err.message.includes('unclaimed rewards')) throw err\n }\n}\n\nexport async function preflightCreateLock(args: {\n rpcUrl: string\n chainId: number\n votingEscrow: Address\n ctm: Address\n owner: Address\n amountWei: bigint\n durationSec: bigint\n}): Promise<void> {\n const nowSec = Math.floor(Date.now() / 1000)\n const [minimumLockWei, balanceWei] = await Promise.all([\n readMinimumLockWei(args),\n readCtmBalanceWei(args),\n ])\n assertCreateLockAmount(args.amountWei, minimumLockWei, balanceWei)\n assertLockDurationSeconds(args.durationSec, nowSec, 'Create lock')\n}\n\nexport async function preflightIncreaseAmount(args: {\n rpcUrl: string\n chainId: number\n votingEscrow: Address\n ctm: Address\n owner: Address\n tokenId: bigint\n amountWei: bigint\n}): Promise<void> {\n const nowSec = Math.floor(Date.now() / 1000)\n const [lock, balanceWei] = await Promise.all([\n readVeCtmLockState(args),\n readCtmBalanceWei(args),\n ])\n assertExecutorOwnsLock(lock, args.owner)\n assertIncreaseAmount(args.amountWei, lock, nowSec, balanceWei)\n await assertNoUnclaimedRewards(args)\n}\n\nexport async function preflightIncreaseUnlockTime(args: {\n rpcUrl: string\n chainId: number\n votingEscrow: Address\n owner: Address\n tokenId: bigint\n durationSec: bigint\n}): Promise<void> {\n const nowSec = Math.floor(Date.now() / 1000)\n const lock = await readVeCtmLockState(args)\n assertExecutorOwnsLock(lock, args.owner)\n assertIncreaseUnlockTime(args.durationSec, lock, nowSec)\n await assertNoUnclaimedRewards(args)\n}\n\nexport async function preflightSplit(args: {\n rpcUrl: string\n chainId: number\n votingEscrow: Address\n owner: Address\n tokenId: bigint\n extractedWei: bigint\n}): Promise<void> {\n const nowSec = Math.floor(Date.now() / 1000)\n const [lock, minimumLockWei] = await Promise.all([\n readVeCtmLockState(args),\n readMinimumLockWei(args),\n ])\n assertExecutorOwnsLock(lock, args.owner)\n assertSplitExtracted(args.extractedWei, lock, minimumLockWei, nowSec)\n await assertNoUnclaimedRewards(args)\n}\n\nexport async function preflightMerge(args: {\n rpcUrl: string\n chainId: number\n votingEscrow: Address\n owner: Address\n fromTokenId: bigint\n toTokenId: bigint\n}): Promise<void> {\n const [fromLock, toLock] = await Promise.all([\n readVeCtmLockState({ ...args, tokenId: args.fromTokenId }),\n readVeCtmLockState({ ...args, tokenId: args.toTokenId }),\n ])\n assertExecutorOwnsLock(fromLock, args.owner)\n assertExecutorOwnsLock(toLock, args.owner)\n assertMerge(fromLock, toLock)\n await Promise.all([\n assertNoUnclaimedRewards({ ...args, tokenId: args.fromTokenId }),\n assertNoUnclaimedRewards({ ...args, tokenId: args.toTokenId }),\n ])\n}\n\nexport async function preflightWithdraw(args: {\n rpcUrl: string\n chainId: number\n votingEscrow: Address\n owner: Address\n tokenId: bigint\n}): Promise<void> {\n const nowSec = Math.floor(Date.now() / 1000)\n const lock = await readVeCtmLockState(args)\n assertExecutorOwnsLock(lock, args.owner)\n assertWithdraw(lock, nowSec)\n await assertNoUnclaimedRewards(args)\n}\n\nexport async function preflightLiquidate(args: {\n rpcUrl: string\n chainId: number\n votingEscrow: Address\n owner: Address\n tokenId: bigint\n}): Promise<void> {\n const nowSec = Math.floor(Date.now() / 1000)\n const client = publicClient(args.rpcUrl, args.chainId)\n const [lock, liquidationsEnabled] = await Promise.all([\n readVeCtmLockState(args),\n client\n .readContract({\n address: args.votingEscrow,\n abi: veReadAbi,\n functionName: 'liquidationsEnabled',\n })\n .catch(() => null),\n ])\n assertExecutorOwnsLock(lock, args.owner)\n assertLiquidate(lock, liquidationsEnabled, nowSec)\n await assertNoUnclaimedRewards(args)\n}\n\nexport async function preflightDelegate(args: {\n rpcUrl: string\n chainId: number\n votingEscrow: Address\n owner: Address\n delegatee: string\n}): Promise<`0x${string}`> {\n return assertDelegatee(args.delegatee, args.owner)\n}\n\nexport async function preflightUndelegate(args: {\n rpcUrl: string\n chainId: number\n votingEscrow: Address\n owner: Address\n}): Promise<void> {\n const client = publicClient(args.rpcUrl, args.chainId)\n const delegatee = await client.readContract({\n address: args.votingEscrow,\n abi: veReadAbi,\n functionName: 'delegates',\n args: [args.owner],\n })\n assertUndelegateNotAlreadySelf(getAddress(delegatee) === getAddress(args.owner), args.owner)\n}\n\nexport async function preflightTransfer(args: {\n rpcUrl: string\n chainId: number\n votingEscrow: Address\n owner: Address\n tokenId: bigint\n to: string\n}): Promise<`0x${string}`> {\n const lock = await readVeCtmLockState(args)\n assertExecutorOwnsLock(lock, args.owner)\n return assertTransfer(lock, args.to, args.owner)\n}\n\nexport async function preflightAttachVeCtm(args: {\n rpcUrl: string\n chainId: number\n mpaWallet: Address\n nodeKey: string\n tokenId: bigint\n owner: Address\n votingEscrow?: Address\n}): Promise<void> {\n const client = publicClient(args.rpcUrl, args.chainId)\n const [authority, veFromWallet, threshold, nodeProperties] = await Promise.all([\n client.readContract({\n address: args.mpaWallet,\n abi: mpaReadAbi,\n functionName: 'getNodeWithdrawAuthority',\n args: [args.nodeKey],\n }),\n client.readContract({ address: args.mpaWallet, abi: mpaReadAbi, functionName: 've' }),\n client.readContract({\n address: args.mpaWallet,\n abi: mpaReadAbi,\n functionName: 'veCtmThresholdPower',\n }),\n client.readContract({\n address: args.mpaWallet,\n abi: mpaReadAbi,\n functionName: 'nodeProperties',\n }),\n ])\n const ve = args.votingEscrow && isConfiguredAddress(args.votingEscrow)\n ? getAddress(args.votingEscrow)\n : getAddress(veFromWallet)\n if (!isConfiguredAddress(ve)) throw new Error('veCTM is not live on the fee contract yet.')\n const lock = await readVeCtmLockState({\n rpcUrl: args.rpcUrl,\n chainId: args.chainId,\n votingEscrow: ve,\n tokenId: args.tokenId,\n })\n assertExecutorOwnsLock(lock, args.owner)\n const executor = getAddress(args.owner)\n if (authority === zeroAddress || getAddress(authority) !== executor) {\n throw new Error(\n `Compose attachVeCtm from the claimed authority KeyGen (${authority}), which must own the NFT.`,\n )\n }\n if (isConfiguredAddress(nodeProperties)) {\n const np = getAddress(nodeProperties)\n const [attachedKey, attachedForKey] = await Promise.all([\n client.readContract({\n address: np,\n abi: nodePropsAbi,\n functionName: 'attachedKeyGen',\n args: [args.tokenId],\n }),\n client.readContract({\n address: np,\n abi: nodePropsAbi,\n functionName: 'attachedTokenId',\n args: [executor],\n }),\n ])\n if (attachedKey !== zeroAddress) {\n throw new Error(`veCTM #${args.tokenId} is already attached. You cannot replace an attached NFT.`)\n }\n if (attachedForKey !== 0n) {\n throw new Error(\n `This KeyGen already has veCTM #${attachedForKey} attached. Request detach and wait for governance. ` +\n \"A second group on this node attaches after rotating nodeWithdrawAuthority to that group's secp256k1 KeyGen.\",\n )\n }\n }\n if (threshold > 0n && lock.amountWei < threshold) {\n throw new Error(\n `Locked CTM on veCTM #${args.tokenId} is below MultiSignAgentWallet.veCtmThresholdPower (${threshold.toString()} wei).`,\n )\n }\n}\n\nexport async function preflightRequestDetach(args: {\n rpcUrl: string\n chainId: number\n nodeProperties: Address\n owner: Address\n tokenId: bigint\n}): Promise<void> {\n const client = publicClient(args.rpcUrl, args.chainId)\n const [attachedKey, alreadyRequested] = await Promise.all([\n client.readContract({\n address: args.nodeProperties,\n abi: nodePropsAbi,\n functionName: 'attachedKeyGen',\n args: [args.tokenId],\n }),\n client.readContract({\n address: args.nodeProperties,\n abi: nodePropsAbi,\n functionName: 'nodeRequestingDetachment',\n args: [args.tokenId],\n }),\n ])\n if (attachedKey === zeroAddress) {\n throw new Error(`veCTM #${args.tokenId} is not attached to a node.`)\n }\n if (alreadyRequested) {\n throw new Error(\n `Detach already requested for veCTM #${args.tokenId}. The NFT stays attached until governance executes detach.`,\n )\n }\n if (getAddress(attachedKey) !== getAddress(args.owner)) {\n throw new Error(\n `Request detach from the attached KeyGen (${getAddress(attachedKey)}).`,\n )\n }\n}\n","/**\n * ContinuumDAO multi-sign builders: CTM lock / veCTM escrow + MPA attach / request detach.\n * Do not prepend billing legs — these are protocol txs, not register / deposit / syncBilling.\n */\nimport { type Address, createPublicClient, defineChain, encodeFunctionData, getAddress, parseAbi, parseUnits, zeroAddress } from 'viem'\nimport { defiEvmTransport } from '../../../core/defiEvmClient.js'\nimport type { KeyGenSubsetForPermit } from '../../../core/types.js'\nimport { ATTACH_VECTM_SIGNATURE, resolveAttachGroupId, VECTM_NODE_INFO_TUPLE } from './attachGroup.js'\nimport { buildEvmMultisignBatch } from '../../../chains/evm/buildBatch.js'\nimport type { EvmTxStep } from '../../../chains/evm/types.js'\nimport {\n CONTINUUM_DAO_PROTOCOL_ID,\n CTM_TOKEN_DECIMALS,\n ctmTokenAddressOnEvmChain,\n isConfiguredAddress,\n isContinuumDaoLockChain,\n votingEscrowAddressOnEvmChain,\n} from './constants.js'\nimport {\n preflightAttachVeCtm,\n preflightCreateLock,\n preflightDelegate,\n preflightIncreaseAmount,\n preflightIncreaseUnlockTime,\n preflightLiquidate,\n preflightMerge,\n preflightRequestDetach,\n preflightSplit,\n preflightTransfer,\n preflightUndelegate,\n preflightWithdraw,\n} from './escrowPreflight.js'\n\nexport const CONTINUUM_DAO_APPROVE_FALLBACK = 100_000n\nexport const CONTINUUM_DAO_CREATE_LOCK_FALLBACK = 550_000n\nexport const CONTINUUM_DAO_INCREASE_AMOUNT_FALLBACK = 400_000n\nexport const CONTINUUM_DAO_INCREASE_UNLOCK_FALLBACK = 400_000n\nexport const CONTINUUM_DAO_SPLIT_FALLBACK = 650_000n\nexport const CONTINUUM_DAO_MERGE_FALLBACK = 550_000n\nexport const CONTINUUM_DAO_WITHDRAW_FALLBACK = 350_000n\nexport const CONTINUUM_DAO_LIQUIDATE_FALLBACK = 450_000n\nexport const CONTINUUM_DAO_DELEGATE_FALLBACK = 160_000n\nexport const CONTINUUM_DAO_TRANSFER_FALLBACK = 160_000n\nexport const CONTINUUM_DAO_ATTACH_FALLBACK = 450_000n\nexport const CONTINUUM_DAO_DETACH_FALLBACK = 220_000n\n\nexport const INCREASE_UNLOCK_TIME_SIGNATURE = 'increase_unlock_time(uint256,uint256)'\n\nexport { ATTACH_VECTM_SIGNATURE, resolveAttachGroupId, VECTM_NODE_INFO_TUPLE } from './attachGroup.js'\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 veWriteAbi = parseAbi([\n 'function create_lock(uint256 _value, uint256 _lock_duration) returns (uint256)',\n 'function increase_amount(uint256 _tokenId, uint256 _value)',\n 'function increase_unlock_time(uint256 _tokenId, uint256 _lock_duration)',\n 'function withdraw(uint256 _tokenId)',\n 'function split(uint256 _tokenId, uint256 _extracted) returns (uint256)',\n 'function merge(uint256 _from, uint256 _to)',\n 'function liquidate(uint256 _tokenId)',\n 'function delegate(address delegatee)',\n 'function transferFrom(address _from, address _to, uint256 _tokenId)',\n])\nconst attachAbi = parseAbi([\n `function attachVeCtm(string nodeKey, uint256 tokenId, ${VECTM_NODE_INFO_TUPLE} nodeInfo, string groupId)`,\n])\nconst detachAbi = parseAbi(['function setNodeRemovalStatus(uint256 tokenId, bool status)'])\n\nexport const CONTINUUM_DAO_EVM_TYPES = new Set([\n 'continuum_dao_approve',\n 'continuum_dao_create_lock',\n 'continuum_dao_increase_amount',\n 'continuum_dao_increase_unlock_time',\n 'continuum_dao_split',\n 'continuum_dao_merge',\n 'continuum_dao_withdraw',\n 'continuum_dao_liquidate',\n 'continuum_dao_delegate',\n 'continuum_dao_undelegate',\n 'continuum_dao_transfer',\n 'continuum_dao_attach',\n 'continuum_dao_request_detach',\n])\n\ntype ChainRow = {\n legacy?: boolean\n gasLimit?: number\n gasMultiplier?: number\n gasPrice?: number\n baseFee?: number\n priorityFee?: number\n baseFeeMultiplier?: number\n}\n\nexport type ContinuumDaoCommonArgs = {\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}\n\ntype StepKind = {\n to: Address\n data: `0x${string}`\n value: bigint\n fallbackGas: bigint\n buildBatchMeta: (args: { gasLimit: bigint }) => Record<string, unknown>\n}\n\nfunction requireLockChain(chainId: number): void {\n if (!isContinuumDaoLockChain(chainId)) {\n throw new Error('ContinuumDAO lock and attach actions are Linea-only.')\n }\n}\n\nfunction requireVe(chainId: number): Address {\n requireLockChain(chainId)\n const ve = votingEscrowAddressOnEvmChain(chainId)\n if (!ve) throw new Error('Voting Escrow address is not configured for this chain yet.')\n return ve\n}\n\nfunction requireCtm(chainId: number): Address {\n const ctm = ctmTokenAddressOnEvmChain(chainId)\n if (!ctm) throw new Error('CTM address is not configured for this chain yet.')\n return ctm\n}\n\nfunction parseTokenId(raw: string | number | bigint): bigint {\n const id = typeof raw === 'bigint' ? raw : BigInt(String(raw).trim())\n if (id <= 0n) throw new Error('veCTM token id must be greater than zero.')\n return id\n}\n\nexport function continuumDaoSignatureText(\n extra: Record<string, unknown>,\n chainId: number,\n): string {\n return JSON.stringify({\n kind: 'ContinuumDAO',\n ...extra,\n chainId,\n })\n}\n\nfunction meta(\n evmType: string,\n chainId: number,\n to: Address,\n extra: Record<string, unknown>,\n gasLimit: bigint,\n): Record<string, unknown> {\n return {\n destinationAddress: to,\n signatureText: continuumDaoSignatureText(extra, chainId),\n evm: { type: evmType, version: 1, chainId: String(chainId), protocolId: CONTINUUM_DAO_PROTOCOL_ID },\n continuumDao: { ...extra, gas: { baseGasUnits: gasLimit.toString() } },\n }\n}\n\nasync function finalize(\n steps: StepKind[],\n args: ContinuumDaoCommonArgs,\n purposeSuffix: string,\n): Promise<{ bodyForSign: Record<string, unknown>; messageToSign: string }> {\n if (steps.length === 0) throw new Error('ContinuumDAO batch requires at least one step.')\n const evmSteps: EvmTxStep[] = steps.map((s) => ({\n to: s.to,\n data: s.data,\n value: s.value,\n fallbackGas: s.fallbackGas,\n }))\n const firstDataNo0x = evmSteps[0]!.data.startsWith('0x') ? evmSteps[0]!.data.slice(2) : evmSteps[0]!.data\n return buildEvmMultisignBatch({\n context: {\n chainCategory: 'evm',\n keyGen: args.keyGen,\n purposeText: args.purposeText,\n chainId: args.chainId,\n rpcUrl: args.rpcUrl.trim(),\n executorAddress: args.executorAddress,\n chainDetail: args.chainDetail,\n useCustomGas: args.useCustomGas,\n customGasChainDetails: args.customGasChainDetails,\n },\n steps: evmSteps,\n purposeSuffix,\n firstMsgRawNo0x: firstDataNo0x,\n destinationAddress: steps[0]!.to,\n buildBatchMeta: ({ index, gasLimit }) => steps[index]!.buildBatchMeta({ gasLimit }),\n })\n}\n\nasync function maybeApproveCtmStep(args: {\n rpcUrl: string\n chainId: number\n owner: Address\n ctm: Address\n spender: Address\n amountWei: bigint\n}): Promise<StepKind | null> {\n const ch = defineChain({\n id: args.chainId,\n name: 'ContinuumDAO',\n nativeCurrency: { decimals: 18, name: 'Ether', symbol: 'ETH' },\n rpcUrls: { default: { http: [args.rpcUrl.trim()] } },\n })\n const client = createPublicClient({ chain: ch, transport: defiEvmTransport(args.rpcUrl.trim()) })\n let allowance = 0n\n try {\n allowance = await client.readContract({\n address: args.ctm,\n abi: erc20Abi,\n functionName: 'allowance',\n args: [args.owner, args.spender],\n })\n } catch {\n allowance = 0n\n }\n if (allowance >= args.amountWei) return null\n const data = encodeFunctionData({\n abi: erc20Abi,\n functionName: 'approve',\n args: [args.spender, args.amountWei],\n })\n return {\n to: args.ctm,\n data,\n value: 0n,\n fallbackGas: CONTINUUM_DAO_APPROVE_FALLBACK,\n buildBatchMeta: ({ gasLimit }) =>\n meta('continuum_dao_approve', args.chainId, args.ctm, {\n name: 'CTM.approve',\n spender: args.spender,\n amountWei: args.amountWei.toString(),\n }, gasLimit),\n }\n}\n\nexport async function buildEvmMultisignBodyContinuumDaoCreateLock(\n args: ContinuumDaoCommonArgs & {\n amountHuman: string\n lockDurationSeconds: string | number | bigint\n ctm?: string\n votingEscrow?: string\n },\n): Promise<{ bodyForSign: Record<string, unknown>; messageToSign: string }> {\n const ve = args.votingEscrow && isConfiguredAddress(args.votingEscrow)\n ? getAddress(args.votingEscrow)\n : requireVe(args.chainId)\n const ctm = args.ctm && isConfiguredAddress(args.ctm) ? getAddress(args.ctm) : requireCtm(args.chainId)\n const amountWei = parseUnits(String(args.amountHuman).trim().replace(/,/g, ''), CTM_TOKEN_DECIMALS)\n const duration = BigInt(String(args.lockDurationSeconds).trim())\n const owner = getAddress(args.executorAddress)\n await preflightCreateLock({\n rpcUrl: args.rpcUrl,\n chainId: args.chainId,\n votingEscrow: ve,\n ctm,\n owner,\n amountWei,\n durationSec: duration,\n })\n const approve = await maybeApproveCtmStep({\n rpcUrl: args.rpcUrl,\n chainId: args.chainId,\n owner,\n ctm,\n spender: ve,\n amountWei,\n })\n const data = encodeFunctionData({\n abi: veWriteAbi,\n functionName: 'create_lock',\n args: [amountWei, duration],\n })\n const lockStep: StepKind = {\n to: ve,\n data,\n value: 0n,\n fallbackGas: CONTINUUM_DAO_CREATE_LOCK_FALLBACK,\n buildBatchMeta: ({ gasLimit }) =>\n meta('continuum_dao_create_lock', args.chainId, ve, {\n name: 'VotingEscrow.create_lock',\n amountWei: amountWei.toString(),\n lockDurationSeconds: duration.toString(),\n }, gasLimit),\n }\n const steps = approve ? [approve, lockStep] : [lockStep]\n return finalize(steps, args, `ContinuumDAO: create lock ${args.amountHuman} CTM.`)\n}\n\nexport async function buildEvmMultisignBodyContinuumDaoIncreaseAmount(\n args: ContinuumDaoCommonArgs & {\n tokenId: string | number | bigint\n amountHuman: string\n ctm?: string\n votingEscrow?: string\n },\n): Promise<{ bodyForSign: Record<string, unknown>; messageToSign: string }> {\n const ve = args.votingEscrow && isConfiguredAddress(args.votingEscrow)\n ? getAddress(args.votingEscrow)\n : requireVe(args.chainId)\n const ctm = args.ctm && isConfiguredAddress(args.ctm) ? getAddress(args.ctm) : requireCtm(args.chainId)\n const tokenId = parseTokenId(args.tokenId)\n const amountWei = parseUnits(String(args.amountHuman).trim().replace(/,/g, ''), CTM_TOKEN_DECIMALS)\n const owner = getAddress(args.executorAddress)\n await preflightIncreaseAmount({\n rpcUrl: args.rpcUrl,\n chainId: args.chainId,\n votingEscrow: ve,\n ctm,\n owner,\n tokenId,\n amountWei,\n })\n const approve = await maybeApproveCtmStep({\n rpcUrl: args.rpcUrl,\n chainId: args.chainId,\n owner,\n ctm,\n spender: ve,\n amountWei,\n })\n const data = encodeFunctionData({\n abi: veWriteAbi,\n functionName: 'increase_amount',\n args: [tokenId, amountWei],\n })\n const step: StepKind = {\n to: ve,\n data,\n value: 0n,\n fallbackGas: CONTINUUM_DAO_INCREASE_AMOUNT_FALLBACK,\n buildBatchMeta: ({ gasLimit }) =>\n meta('continuum_dao_increase_amount', args.chainId, ve, {\n name: 'VotingEscrow.increase_amount',\n tokenId: tokenId.toString(),\n amountWei: amountWei.toString(),\n }, gasLimit),\n }\n const steps = approve ? [approve, step] : [step]\n return finalize(steps, args, `ContinuumDAO: increase amount on veCTM #${tokenId}.`)\n}\n\nexport async function buildEvmMultisignBodyContinuumDaoIncreaseUnlockTime(\n args: ContinuumDaoCommonArgs & {\n tokenId: string | number | bigint\n lockDurationSeconds: string | number | bigint\n votingEscrow?: string\n },\n): Promise<{ bodyForSign: Record<string, unknown>; messageToSign: string }> {\n const ve = args.votingEscrow && isConfiguredAddress(args.votingEscrow)\n ? getAddress(args.votingEscrow)\n : requireVe(args.chainId)\n const tokenId = parseTokenId(args.tokenId)\n const duration = BigInt(String(args.lockDurationSeconds).trim())\n const owner = getAddress(args.executorAddress)\n await preflightIncreaseUnlockTime({\n rpcUrl: args.rpcUrl,\n chainId: args.chainId,\n votingEscrow: ve,\n owner,\n tokenId,\n durationSec: duration,\n })\n const data = encodeFunctionData({\n abi: veWriteAbi,\n functionName: 'increase_unlock_time',\n args: [tokenId, duration],\n })\n const step: StepKind = {\n to: ve,\n data,\n value: 0n,\n fallbackGas: CONTINUUM_DAO_INCREASE_UNLOCK_FALLBACK,\n buildBatchMeta: ({ gasLimit }) =>\n meta('continuum_dao_increase_unlock_time', args.chainId, ve, {\n name: 'VotingEscrow.increase_unlock_time',\n signature: INCREASE_UNLOCK_TIME_SIGNATURE,\n tokenId: tokenId.toString(),\n lockDurationSeconds: duration.toString(),\n }, gasLimit),\n }\n return finalize([step], args, `ContinuumDAO: increase unlock time on veCTM #${tokenId}.`)\n}\n\nexport async function buildEvmMultisignBodyContinuumDaoSplit(\n args: ContinuumDaoCommonArgs & {\n tokenId: string | number | bigint\n extractedHuman: string\n votingEscrow?: string\n },\n): Promise<{ bodyForSign: Record<string, unknown>; messageToSign: string }> {\n const ve = args.votingEscrow && isConfiguredAddress(args.votingEscrow)\n ? getAddress(args.votingEscrow)\n : requireVe(args.chainId)\n const tokenId = parseTokenId(args.tokenId)\n const extracted = parseUnits(String(args.extractedHuman).trim().replace(/,/g, ''), CTM_TOKEN_DECIMALS)\n await preflightSplit({\n rpcUrl: args.rpcUrl,\n chainId: args.chainId,\n votingEscrow: ve,\n owner: getAddress(args.executorAddress),\n tokenId,\n extractedWei: extracted,\n })\n const data = encodeFunctionData({\n abi: veWriteAbi,\n functionName: 'split',\n args: [tokenId, extracted],\n })\n const step: StepKind = {\n to: ve,\n data,\n value: 0n,\n fallbackGas: CONTINUUM_DAO_SPLIT_FALLBACK,\n buildBatchMeta: ({ gasLimit }) =>\n meta('continuum_dao_split', args.chainId, ve, {\n name: 'VotingEscrow.split',\n tokenId: tokenId.toString(),\n extractedWei: extracted.toString(),\n }, gasLimit),\n }\n return finalize([step], args, `ContinuumDAO: split veCTM #${tokenId}.`)\n}\n\nexport async function buildEvmMultisignBodyContinuumDaoMerge(\n args: ContinuumDaoCommonArgs & {\n fromTokenId: string | number | bigint\n toTokenId: string | number | bigint\n votingEscrow?: string\n },\n): Promise<{ bodyForSign: Record<string, unknown>; messageToSign: string }> {\n const ve = args.votingEscrow && isConfiguredAddress(args.votingEscrow)\n ? getAddress(args.votingEscrow)\n : requireVe(args.chainId)\n const fromId = parseTokenId(args.fromTokenId)\n const toId = parseTokenId(args.toTokenId)\n await preflightMerge({\n rpcUrl: args.rpcUrl,\n chainId: args.chainId,\n votingEscrow: ve,\n owner: getAddress(args.executorAddress),\n fromTokenId: fromId,\n toTokenId: toId,\n })\n const data = encodeFunctionData({\n abi: veWriteAbi,\n functionName: 'merge',\n args: [fromId, toId],\n })\n const step: StepKind = {\n to: ve,\n data,\n value: 0n,\n fallbackGas: CONTINUUM_DAO_MERGE_FALLBACK,\n buildBatchMeta: ({ gasLimit }) =>\n meta('continuum_dao_merge', args.chainId, ve, {\n name: 'VotingEscrow.merge',\n fromTokenId: fromId.toString(),\n toTokenId: toId.toString(),\n }, gasLimit),\n }\n return finalize([step], args, `ContinuumDAO: merge veCTM #${fromId} into #${toId}.`)\n}\n\nexport async function buildEvmMultisignBodyContinuumDaoWithdraw(\n args: ContinuumDaoCommonArgs & { tokenId: string | number | bigint; votingEscrow?: string },\n): Promise<{ bodyForSign: Record<string, unknown>; messageToSign: string }> {\n const ve = args.votingEscrow && isConfiguredAddress(args.votingEscrow)\n ? getAddress(args.votingEscrow)\n : requireVe(args.chainId)\n const tokenId = parseTokenId(args.tokenId)\n await preflightWithdraw({\n rpcUrl: args.rpcUrl,\n chainId: args.chainId,\n votingEscrow: ve,\n owner: getAddress(args.executorAddress),\n tokenId,\n })\n const data = encodeFunctionData({ abi: veWriteAbi, functionName: 'withdraw', args: [tokenId] })\n const step: StepKind = {\n to: ve,\n data,\n value: 0n,\n fallbackGas: CONTINUUM_DAO_WITHDRAW_FALLBACK,\n buildBatchMeta: ({ gasLimit }) =>\n meta('continuum_dao_withdraw', args.chainId, ve, {\n name: 'VotingEscrow.withdraw',\n tokenId: tokenId.toString(),\n }, gasLimit),\n }\n return finalize([step], args, `ContinuumDAO: withdraw veCTM #${tokenId}.`)\n}\n\nexport async function buildEvmMultisignBodyContinuumDaoLiquidate(\n args: ContinuumDaoCommonArgs & { tokenId: string | number | bigint; votingEscrow?: string },\n): Promise<{ bodyForSign: Record<string, unknown>; messageToSign: string }> {\n const ve = args.votingEscrow && isConfiguredAddress(args.votingEscrow)\n ? getAddress(args.votingEscrow)\n : requireVe(args.chainId)\n const tokenId = parseTokenId(args.tokenId)\n await preflightLiquidate({\n rpcUrl: args.rpcUrl,\n chainId: args.chainId,\n votingEscrow: ve,\n owner: getAddress(args.executorAddress),\n tokenId,\n })\n const data = encodeFunctionData({ abi: veWriteAbi, functionName: 'liquidate', args: [tokenId] })\n const step: StepKind = {\n to: ve,\n data,\n value: 0n,\n fallbackGas: CONTINUUM_DAO_LIQUIDATE_FALLBACK,\n buildBatchMeta: ({ gasLimit }) =>\n meta('continuum_dao_liquidate', args.chainId, ve, {\n name: 'VotingEscrow.liquidate',\n tokenId: tokenId.toString(),\n }, gasLimit),\n }\n return finalize([step], args, `ContinuumDAO: liquidate veCTM #${tokenId}.`)\n}\n\nexport async function buildEvmMultisignBodyContinuumDaoDelegate(\n args: ContinuumDaoCommonArgs & { delegatee: string; votingEscrow?: string },\n): Promise<{ bodyForSign: Record<string, unknown>; messageToSign: string }> {\n const ve = args.votingEscrow && isConfiguredAddress(args.votingEscrow)\n ? getAddress(args.votingEscrow)\n : requireVe(args.chainId)\n const delegatee = await preflightDelegate({\n rpcUrl: args.rpcUrl,\n chainId: args.chainId,\n votingEscrow: ve,\n owner: getAddress(args.executorAddress),\n delegatee: args.delegatee,\n })\n const data = encodeFunctionData({ abi: veWriteAbi, functionName: 'delegate', args: [delegatee] })\n const step: StepKind = {\n to: ve,\n data,\n value: 0n,\n fallbackGas: CONTINUUM_DAO_DELEGATE_FALLBACK,\n buildBatchMeta: ({ gasLimit }) =>\n meta('continuum_dao_delegate', args.chainId, ve, {\n name: 'VotingEscrow.delegate',\n delegatee,\n }, gasLimit),\n }\n return finalize([step], args, `ContinuumDAO: delegate voting power to ${delegatee}.`)\n}\n\n/** veCTM has no undelegate(). Delegating to self (or address(0), which becomes self) returns voting power. */\nexport async function buildEvmMultisignBodyContinuumDaoUndelegate(\n args: ContinuumDaoCommonArgs & { votingEscrow?: string },\n): Promise<{ bodyForSign: Record<string, unknown>; messageToSign: string }> {\n const ve = args.votingEscrow && isConfiguredAddress(args.votingEscrow)\n ? getAddress(args.votingEscrow)\n : requireVe(args.chainId)\n const self = getAddress(args.executorAddress)\n await preflightUndelegate({\n rpcUrl: args.rpcUrl,\n chainId: args.chainId,\n votingEscrow: ve,\n owner: self,\n })\n const data = encodeFunctionData({ abi: veWriteAbi, functionName: 'delegate', args: [self] })\n const step: StepKind = {\n to: ve,\n data,\n value: 0n,\n fallbackGas: CONTINUUM_DAO_DELEGATE_FALLBACK,\n buildBatchMeta: ({ gasLimit }) =>\n meta('continuum_dao_undelegate', args.chainId, ve, {\n name: 'VotingEscrow.delegate',\n delegatee: self,\n undelegate: true,\n }, gasLimit),\n }\n return finalize([step], args, `ContinuumDAO: undelegate voting power (delegate back to ${self}).`)\n}\n\nconst veReadAbi = parseAbi(['function delegates(address account) view returns (address)'])\n\nexport async function continuumDaoFetchDelegates(args: {\n chainId: number | string\n rpcUrl: string\n account: string\n votingEscrow?: string\n}): Promise<{ account: string; delegatee: string; self: boolean }> {\n const chainId = Number(args.chainId)\n requireLockChain(chainId)\n const ve = args.votingEscrow && isConfiguredAddress(args.votingEscrow)\n ? getAddress(args.votingEscrow)\n : requireVe(chainId)\n const account = getAddress(args.account)\n const client = createPublicClient({\n chain: defineChain({\n id: chainId,\n name: 'ContinuumDAO',\n nativeCurrency: { decimals: 18, name: 'Ether', symbol: 'ETH' },\n rpcUrls: { default: { http: [args.rpcUrl.trim()] } },\n }),\n transport: defiEvmTransport(args.rpcUrl.trim()),\n })\n const delegatee = getAddress(\n await client.readContract({ address: ve, abi: veReadAbi, functionName: 'delegates', args: [account] }),\n )\n return { account, delegatee, self: delegatee === account }\n}\n\nexport async function buildEvmMultisignBodyContinuumDaoTransfer(\n args: ContinuumDaoCommonArgs & {\n tokenId: string | number | bigint\n to: string\n votingEscrow?: string\n },\n): Promise<{ bodyForSign: Record<string, unknown>; messageToSign: string }> {\n const ve = args.votingEscrow && isConfiguredAddress(args.votingEscrow)\n ? getAddress(args.votingEscrow)\n : requireVe(args.chainId)\n const tokenId = parseTokenId(args.tokenId)\n const from = getAddress(args.executorAddress)\n const to = await preflightTransfer({\n rpcUrl: args.rpcUrl,\n chainId: args.chainId,\n votingEscrow: ve,\n owner: from,\n tokenId,\n to: args.to,\n })\n const data = encodeFunctionData({\n abi: veWriteAbi,\n functionName: 'transferFrom',\n args: [from, to, tokenId],\n })\n const step: StepKind = {\n to: ve,\n data,\n value: 0n,\n fallbackGas: CONTINUUM_DAO_TRANSFER_FALLBACK,\n buildBatchMeta: ({ gasLimit }) =>\n meta('continuum_dao_transfer', args.chainId, ve, {\n name: 'VotingEscrow.transferFrom',\n tokenId: tokenId.toString(),\n from,\n to,\n }, gasLimit),\n }\n return finalize([step], args, `ContinuumDAO: transfer veCTM #${tokenId} to ${to}.`)\n}\n\nexport type ContinuumDaoNodeInfoTuple = [\n string,\n string,\n readonly [number, number, number, number],\n readonly [number, number, number, number, number, number, number, number],\n string,\n bigint,\n bigint,\n string,\n string,\n `0x${string}`,\n]\n\nexport function encodeContinuumDaoNodeInfo(info?: {\n forumHandle?: string\n email?: string\n ipv4?: number[]\n ipv6?: number[]\n vps?: string\n ram?: number | string\n cpu?: number | string\n dIDType?: string\n dID?: string\n extra?: string\n}): ContinuumDaoNodeInfoTuple {\n const ipv4Src = info?.ipv4 ?? [0, 0, 0, 0]\n const ipv6Src = info?.ipv6 ?? [0, 0, 0, 0, 0, 0, 0, 0]\n const ipv4: [number, number, number, number] = [\n ipv4Src[0] ?? 0,\n ipv4Src[1] ?? 0,\n ipv4Src[2] ?? 0,\n ipv4Src[3] ?? 0,\n ]\n const ipv6: [number, number, number, number, number, number, number, number] = [\n ipv6Src[0] ?? 0,\n ipv6Src[1] ?? 0,\n ipv6Src[2] ?? 0,\n ipv6Src[3] ?? 0,\n ipv6Src[4] ?? 0,\n ipv6Src[5] ?? 0,\n ipv6Src[6] ?? 0,\n ipv6Src[7] ?? 0,\n ]\n const extraRaw = (info?.extra ?? '0x').trim() || '0x'\n const extra = (extraRaw.startsWith('0x') ? extraRaw : `0x${extraRaw}`) as `0x${string}`\n return [\n info?.forumHandle ?? '',\n info?.email ?? '',\n ipv4,\n ipv6,\n info?.vps ?? '',\n BigInt(String(info?.ram ?? 0)),\n BigInt(String(info?.cpu ?? 0)),\n info?.dIDType ?? '',\n info?.dID ?? '',\n extra,\n ]\n}\n\nexport async function buildEvmMultisignBodyContinuumDaoAttachVeCtm(\n args: ContinuumDaoCommonArgs & {\n nodeKey: string\n tokenId: string | number | bigint\n mpaWallet: string\n nodeInfo?: Parameters<typeof encodeContinuumDaoNodeInfo>[0]\n nodeInfoTuple?: ContinuumDaoNodeInfoTuple\n groupId?: string\n },\n): Promise<{ bodyForSign: Record<string, unknown>; messageToSign: string }> {\n requireLockChain(args.chainId)\n const wallet = getAddress(args.mpaWallet)\n if (wallet === zeroAddress) throw new Error('MPA wallet address is required to attach veCTM.')\n const tokenId = parseTokenId(args.tokenId)\n const nodeKey = args.nodeKey.trim()\n if (!nodeKey) throw new Error('nodeKey is required to attach veCTM.')\n const groupId = resolveAttachGroupId(args.keyGen, args.groupId)\n await preflightAttachVeCtm({\n rpcUrl: args.rpcUrl,\n chainId: args.chainId,\n mpaWallet: wallet,\n nodeKey,\n tokenId,\n owner: getAddress(args.executorAddress),\n })\n const tuple = args.nodeInfoTuple ?? encodeContinuumDaoNodeInfo(args.nodeInfo)\n const data = encodeFunctionData({\n abi: attachAbi,\n functionName: 'attachVeCtm',\n args: [nodeKey, tokenId, tuple, groupId],\n })\n const step: StepKind = {\n to: wallet,\n data,\n value: 0n,\n fallbackGas: CONTINUUM_DAO_ATTACH_FALLBACK,\n buildBatchMeta: ({ gasLimit }) =>\n meta('continuum_dao_attach', args.chainId, wallet, {\n name: 'MultiSignAgentWallet.attachVeCtm',\n signature: ATTACH_VECTM_SIGNATURE,\n nodeKey,\n tokenId: tokenId.toString(),\n groupId,\n }, gasLimit),\n }\n return finalize([step], args, `ContinuumDAO: attach veCTM #${tokenId} (group ${groupId}).`)\n}\n\nexport async function buildEvmMultisignBodyContinuumDaoRequestDetach(\n args: ContinuumDaoCommonArgs & {\n tokenId: string | number | bigint\n nodeProperties: string\n },\n): Promise<{ bodyForSign: Record<string, unknown>; messageToSign: string }> {\n requireLockChain(args.chainId)\n const np = getAddress(args.nodeProperties)\n if (np === zeroAddress) throw new Error('NodeProperties address is required to request detach.')\n const tokenId = parseTokenId(args.tokenId)\n await preflightRequestDetach({\n rpcUrl: args.rpcUrl,\n chainId: args.chainId,\n nodeProperties: np,\n owner: getAddress(args.executorAddress),\n tokenId,\n })\n const data = encodeFunctionData({\n abi: detachAbi,\n functionName: 'setNodeRemovalStatus',\n args: [tokenId, true],\n })\n const step: StepKind = {\n to: np,\n data,\n value: 0n,\n fallbackGas: CONTINUUM_DAO_DETACH_FALLBACK,\n buildBatchMeta: ({ gasLimit }) =>\n meta('continuum_dao_request_detach', args.chainId, np, {\n name: 'NodeProperties.setNodeRemovalStatus',\n tokenId: tokenId.toString(),\n status: true,\n }, gasLimit),\n }\n return finalize([step], args, `ContinuumDAO: request detach of veCTM #${tokenId}.`)\n}\n\n/** MCP adapter: flatten NodeInfo fields onto the attach builder. */\nexport async function buildEvmMultisignBodyContinuumDaoAttachVeCtmFromMcp(\n args: ContinuumDaoCommonArgs & {\n nodeKey: string\n tokenId: string | number | bigint\n mpaWallet: string\n groupId?: string\n forumHandle?: string\n email?: string\n vps?: string\n ram?: number | string\n cpu?: number | string\n dIDType?: string\n dID?: string\n },\n): Promise<{ bodyForSign: Record<string, unknown>; messageToSign: string }> {\n return buildEvmMultisignBodyContinuumDaoAttachVeCtm({\n ...args,\n nodeInfo: {\n forumHandle: args.forumHandle,\n email: args.email,\n vps: args.vps,\n ram: args.ram,\n cpu: args.cpu,\n dIDType: args.dIDType,\n dID: args.dID,\n },\n })\n}\n","import type { KeyGenSubsetForPermit } from '../../../core/types.js'\n\nexport const VECTM_NODE_INFO_TUPLE =\n '(string,string,uint8[4],uint16[8],string,uint256,uint256,string,string,bytes)'\n\nexport const ATTACH_VECTM_SIGNATURE = `attachVeCtm(string,uint256,${VECTM_NODE_INFO_TUPLE},string)`\n\n/** Bind attach to the attaching KeyGen's mpc-auth GroupId. Do not pick a different group. */\nexport function resolveAttachGroupId(\n keyGen: KeyGenSubsetForPermit,\n explicit?: string,\n): string {\n const fromKg = (keyGen.groupId ?? keyGen.GroupId ?? '').trim()\n const fromArg = (explicit ?? '').trim()\n if (fromKg && fromArg && fromKg !== fromArg) {\n throw new Error(\n `groupId must be the attaching KeyGen's mpc-auth GroupId (${fromKg}), not a different group.`,\n )\n }\n if (fromKg) return fromKg\n if (fromArg) return fromArg\n throw new Error(\n \"groupId is required to attach veCTM (use the attaching KeyGen's mpc-auth GroupId).\",\n )\n}\n","/**\n * Interactive proposal-action compose: fetch a verified ABI, match a function,\n * type-check parameter values, encode calldata, and preview a Bravo/Delta draft.\n */\nimport { getAddress, isAddress } from 'viem'\nimport { encodeGovActionCalldata, type GovActionInput, type GovOptionInput } from './governance.js'\nimport { normalizeGovConfiguration } from './simulateProposal.js'\n\nexport type AbiParam = { name: string; type: string }\n\nexport type ComposeParamCheck = {\n name: string\n type: string\n value?: string\n valid: boolean\n error?: string\n}\n\nexport type ComposeFunctionMatch = {\n name: string\n signature: string\n stateMutability: string\n payable: boolean\n inputs: AbiParam[]\n}\n\nexport type ComposeEncodedAction = {\n target: string\n value: string\n signature: string\n calldata: `0x${string}`\n inputs: { name?: string; type: string; value: string }[]\n}\n\nexport type ComposeDraftRow = {\n option?: string\n index: number\n target: string\n function: string\n signature: string\n param: string\n type: string\n value: string\n valid: boolean\n error?: string\n}\n\nexport type ContinuumDaoComposeProposalActionArgs = {\n chainId: string | number\n rpcUrl?: string\n target?: string\n functionName?: string\n value?: string\n inputs?: { name?: string; type?: string; value?: string }[]\n abi?: string | unknown[]\n configuration?: unknown\n title?: string\n actions?: GovActionInput[]\n options?: GovOptionInput[]\n nWinners?: string | number\n}\n\nexport type ContinuumDaoComposeProposalActionResult = {\n ok: boolean\n step: 'lookup' | 'validate' | 'preview'\n target?: string\n functionName?: string\n signature?: string\n stateMutability?: string\n payable?: boolean\n overloads?: ComposeFunctionMatch[]\n parameters?: ComposeParamCheck[]\n encoded?: ComposeEncodedAction\n table?: string\n rows?: ComposeDraftRow[]\n actions?: GovActionInput[]\n options?: GovOptionInput[]\n configuration?: 'bravo' | 'delta'\n nWinners?: number\n title?: string\n abiSource?: string\n missing?: string[]\n warning?: string\n error?: string\n note: string\n next: string\n}\n\ntype JsonAbiItem = {\n type?: string\n name?: string\n stateMutability?: string\n payable?: boolean\n inputs?: Array<{ name?: string; type?: string; internalType?: string; components?: unknown[] }>\n}\n\nconst EIP1967_IMPL_SLOT = '0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc' as const\n\nfunction parseChainId(raw: string | number): number {\n const n = typeof raw === 'number' ? raw : Number.parseInt(String(raw), 10)\n if (n !== 59144 && n !== 59141) {\n throw new Error('chainId must be 59144 (Linea) or 59141 (Linea Sepolia).')\n }\n return n\n}\n\nfunction explorerHost(chainId: number): string {\n return chainId === 59141 ? 'https://api-sepolia.lineascan.build' : 'https://api.lineascan.build'\n}\n\nfunction formatAbiType(input: { type?: string; components?: unknown[] }): string {\n const raw = String(input.type ?? '').trim()\n if (!raw) return 'bytes'\n if (!raw.startsWith('tuple')) return raw\n const comps = Array.isArray(input.components) ? input.components : []\n const inner = comps\n .map((c) => formatAbiType(c as { type?: string; components?: unknown[] }))\n .join(',')\n return raw.replace(/^tuple/, `(${inner})`)\n}\n\nfunction abiFunctionToMatch(item: JsonAbiItem): ComposeFunctionMatch | null {\n if (item.type && item.type !== 'function') return null\n const name = String(item.name ?? '').trim()\n if (!name) return null\n const inputs = (item.inputs ?? []).map((inp, i) => ({\n name: String(inp.name ?? '').trim() || `arg${i}`,\n type: formatAbiType(inp),\n }))\n const mut = String(item.stateMutability ?? (item.payable ? 'payable' : 'nonpayable'))\n return {\n name,\n signature: `${name}(${inputs.map((p) => p.type).join(',')})`,\n stateMutability: mut,\n payable: mut === 'payable',\n inputs,\n }\n}\n\nfunction parseAbiJson(raw: unknown): JsonAbiItem[] {\n if (typeof raw === 'string') {\n const trimmed = raw.trim()\n if (!trimmed) return []\n return parseAbiJson(JSON.parse(trimmed))\n }\n if (!Array.isArray(raw)) return []\n return raw as JsonAbiItem[]\n}\n\nfunction functionsFromAbi(abi: unknown): ComposeFunctionMatch[] {\n return parseAbiJson(abi)\n .map(abiFunctionToMatch)\n .filter((x): x is ComposeFunctionMatch => x != null)\n}\n\nfunction parseSignature(signature: string): ComposeFunctionMatch {\n const sig = signature.trim()\n const start = sig.indexOf('(')\n if (start === -1) {\n return {\n name: sig,\n signature: `${sig}()`,\n stateMutability: 'nonpayable',\n payable: false,\n inputs: [],\n }\n }\n const name = sig.slice(0, start).trim()\n let depth = 0\n let end = -1\n for (let i = start; i < sig.length; i++) {\n if (sig[i] === '(') depth += 1\n if (sig[i] === ')') {\n depth -= 1\n if (depth === 0) {\n end = i\n break\n }\n }\n }\n const inner = end === -1 ? '' : sig.slice(start + 1, end)\n const types = inner.trim()\n ? splitTopLevel(inner)\n : []\n const inputs = types.map((type, i) => ({ name: `arg${i}`, type: type.trim() }))\n return {\n name,\n signature: `${name}(${inputs.map((p) => p.type).join(',')})`,\n stateMutability: 'nonpayable',\n payable: false,\n inputs,\n }\n}\n\nfunction splitTopLevel(inner: string): string[] {\n const out: string[] = []\n let buf = ''\n let depth = 0\n for (const ch of inner) {\n if (ch === '(') depth += 1\n if (ch === ')') depth -= 1\n if (ch === ',' && depth === 0) {\n if (buf.trim()) out.push(buf.trim())\n buf = ''\n continue\n }\n buf += ch\n }\n if (buf.trim()) out.push(buf.trim())\n return out\n}\n\nexport function validateAbiParameter(type: string, value: string): { ok: boolean; error?: string } {\n const trimmed = (value ?? '').trim()\n if (type === 'string') return { ok: true }\n if (trimmed === '' && type !== 'bytes') {\n return { ok: false, error: `missing value for ${type}` }\n }\n try {\n if (type === 'address') {\n if (!isAddress(trimmed)) return { ok: false, error: 'not a valid Ethereum address' }\n getAddress(trimmed)\n return { ok: true }\n }\n if (type === 'bool') {\n const n = trimmed.toLowerCase()\n if (!['true', 'false', '1', '0'].includes(n)) {\n return { ok: false, error: 'bool must be true/false or 1/0' }\n }\n return { ok: true }\n }\n if (type.startsWith('uint')) {\n if (!/^(0x[0-9a-fA-F]+|[0-9]+)$/.test(trimmed)) {\n return { ok: false, error: `${type} must be a non-negative integer or 0x hex` }\n }\n const bits = Number(type.slice(4) || '256')\n const n = BigInt(trimmed)\n if (n < 0n) return { ok: false, error: `${type} cannot be negative` }\n if (Number.isFinite(bits) && bits > 0 && n >= 1n << BigInt(bits)) {\n return { ok: false, error: `${type} overflow` }\n }\n return { ok: true }\n }\n if (type.startsWith('int') && !type.startsWith('internal')) {\n if (!/^-?(0x[0-9a-fA-F]+|[0-9]+)$/.test(trimmed)) {\n return { ok: false, error: `${type} must be an integer` }\n }\n BigInt(trimmed)\n return { ok: true }\n }\n if (type === 'bytes') {\n if (trimmed !== '' && !/^0x[0-9a-fA-F]*$/.test(trimmed)) {\n return { ok: false, error: 'bytes must be 0x-prefixed hex' }\n }\n if (trimmed.length % 2 !== 0) return { ok: false, error: 'bytes hex must be even length' }\n return { ok: true }\n }\n const bytesN = type.match(/^bytes(\\d+)$/)\n if (bytesN) {\n const n = Number(bytesN[1])\n if (!/^0x[0-9a-fA-F]+$/.test(trimmed)) return { ok: false, error: `${type} must be 0x hex` }\n if (trimmed.slice(2).length !== n * 2) {\n return { ok: false, error: `${type} must be ${n} bytes (${n * 2} hex chars)` }\n }\n return { ok: true }\n }\n encodeGovActionCalldata(`check(${type})`, [{ type, value: trimmed }])\n return { ok: true }\n } catch (err) {\n return { ok: false, error: err instanceof Error ? err.message : String(err) }\n }\n}\n\nfunction checkParameters(fn: ComposeFunctionMatch, rawInputs: { name?: string; type?: string; value?: string }[] = []): ComposeParamCheck[] {\n return fn.inputs.map((param, i) => {\n const provided = rawInputs[i]\n const value = provided?.value\n if (value == null || String(value).trim() === '') {\n return { name: param.name, type: param.type, valid: false, error: 'value not provided yet' }\n }\n const check = validateAbiParameter(param.type, String(value))\n return {\n name: param.name,\n type: param.type,\n value: String(value),\n valid: check.ok,\n error: check.error,\n }\n })\n}\n\nfunction encodeChecked(target: string, value: string, fn: ComposeFunctionMatch, checks: ComposeParamCheck[]): ComposeEncodedAction {\n const inputs = checks.map((c) => ({ name: c.name, type: c.type, value: c.value ?? '' }))\n const calldata = encodeGovActionCalldata(fn.signature, inputs)\n return {\n target: getAddress(target),\n value: String(value || '0'),\n signature: fn.signature,\n calldata,\n inputs,\n }\n}\n\nasync function fetchJson(url: string, timeoutMs = 8000): Promise<unknown> {\n const ac = new AbortController()\n const t = setTimeout(() => ac.abort(), timeoutMs)\n try {\n const res = await fetch(url, {\n method: 'GET',\n signal: ac.signal,\n headers: { accept: 'application/json' },\n })\n if (!res.ok) throw new Error(`${res.status} ${res.statusText}`)\n return await res.json()\n } finally {\n clearTimeout(t)\n }\n}\n\nfunction extractAbiFromUnknown(data: unknown): unknown[] | null {\n if (Array.isArray(data)) return data\n if (!data || typeof data !== 'object') return null\n const o = data as Record<string, unknown>\n if (Array.isArray(o.abi)) return o.abi\n if (o.compilation && typeof o.compilation === 'object') {\n const c = o.compilation as Record<string, unknown>\n if (Array.isArray(c.abi)) return c.abi\n }\n if (o.output && typeof o.output === 'object') {\n const out = o.output as Record<string, unknown>\n if (Array.isArray(out.abi)) return out.abi\n }\n if (typeof o.result === 'string' && o.result.trim().startsWith('[')) {\n try {\n const parsed = JSON.parse(o.result) as unknown\n if (Array.isArray(parsed)) return parsed\n } catch {\n return null\n }\n }\n return null\n}\n\nfunction extractAbiFromSourcifyFiles(data: unknown): unknown[] | null {\n if (!Array.isArray(data)) return null\n for (const file of data) {\n if (!file || typeof file !== 'object') continue\n const f = file as { name?: string; path?: string; content?: string }\n const label = `${f.name ?? ''} ${f.path ?? ''}`.toLowerCase()\n if (!label.includes('metadata.json') && f.name !== 'metadata.json') continue\n if (typeof f.content !== 'string') continue\n try {\n const meta = JSON.parse(f.content) as unknown\n const abi = extractAbiFromUnknown(meta)\n if (abi) return abi\n } catch {\n continue\n }\n }\n return null\n}\n\nasync function fetchVerifiedAbi(chainId: number, address: string): Promise<{ abi: unknown[]; source: string } | null> {\n const checksum = getAddress(address)\n const lower = checksum.toLowerCase()\n\n const sourcifyUrls = [\n `https://sourcify.dev/server/v2/contract/${chainId}/${checksum}`,\n `https://sourcify.dev/server/files/any/${chainId}/${checksum}`,\n `https://repo.sourcify.dev/contracts/full_match/${chainId}/${checksum}/metadata.json`,\n `https://repo.sourcify.dev/contracts/partial_match/${chainId}/${checksum}/metadata.json`,\n ]\n for (const url of sourcifyUrls) {\n try {\n const data = await fetchJson(url)\n const abi = url.includes('/files/') ? extractAbiFromSourcifyFiles(data) : extractAbiFromUnknown(data)\n if (abi && abi.length) return { abi, source: 'sourcify' }\n } catch {\n /* try next */\n }\n }\n\n const etherscanKey = String(process.env.ETHERSCAN_API_KEY ?? '').trim()\n if (etherscanKey) {\n try {\n const url = new URL('https://api.etherscan.io/v2/api')\n url.searchParams.set('apikey', etherscanKey)\n url.searchParams.set('chainid', String(chainId))\n url.searchParams.set('module', 'contract')\n url.searchParams.set('action', 'getabi')\n url.searchParams.set('address', checksum)\n const data = await fetchJson(url.toString())\n const abi = extractAbiFromUnknown(data)\n if (abi && abi.length) return { abi, source: 'etherscan' }\n } catch {\n /* fall through */\n }\n }\n\n try {\n const url = new URL(`${explorerHost(chainId)}/api`)\n url.searchParams.set('module', 'contract')\n url.searchParams.set('action', 'getabi')\n url.searchParams.set('address', lower)\n const data = await fetchJson(url.toString())\n const abi = extractAbiFromUnknown(data)\n if (abi && abi.length) return { abi, source: 'lineascan' }\n } catch {\n /* unverified */\n }\n return null\n}\n\nasync function readEip1967Implementation(rpcUrl: string, address: string): Promise<string | null> {\n try {\n const res = await fetch(rpcUrl, {\n method: 'POST',\n headers: { 'content-type': 'application/json' },\n body: JSON.stringify({\n jsonrpc: '2.0',\n id: 1,\n method: 'eth_getStorageAt',\n params: [getAddress(address), EIP1967_IMPL_SLOT, 'latest'],\n }),\n })\n const json = (await res.json()) as { result?: string }\n const hex = String(json.result ?? '')\n if (!hex || hex === '0x' || /^0x0+$/.test(hex)) return null\n const impl = `0x${hex.slice(-40)}`\n if (!isAddress(impl) || /^0x0+$/.test(impl)) return null\n return getAddress(impl)\n } catch {\n return null\n }\n}\n\nfunction matchFunction(fns: ComposeFunctionMatch[], functionName: string): ComposeFunctionMatch[] {\n const raw = functionName.trim()\n if (!raw) return []\n if (raw.includes('(')) {\n const parsed = parseSignature(raw)\n const exact = fns.filter((f) => f.signature.toLowerCase() === parsed.signature.toLowerCase())\n return exact.length ? exact : [parsed]\n }\n const byName = fns.filter((f) => f.name === raw)\n if (byName.length) return byName\n return fns.filter((f) => f.name.toLowerCase() === raw.toLowerCase())\n}\n\nfunction markdownTable(rows: ComposeDraftRow[]): string {\n const header =\n '| # | Option | Target | Function | Param | Type | Value | Valid |\\n|---|--------|--------|----------|-------|------|-------|-------|'\n if (!rows.length) {\n return `${header}\\n| — | — | — | *(signaling / no user actions)* | — | — | — | yes |`\n }\n const body = rows.map((r) => {\n const valid = r.valid ? 'yes' : `no${r.error ? ` (${r.error.replace(/\\|/g, '/')})` : ''}`\n return `| ${r.index} | ${r.option ?? '—'} | \\`${r.target}\\` | ${r.function} | ${r.param} | \\`${r.type}\\` | ${r.value || '—'} | ${valid} |`\n })\n return [header, ...body].join('\\n')\n}\n\nfunction actionToRows(action: GovActionInput, index: number, option?: string): ComposeDraftRow[] {\n const target = action.target\n const fn = parseSignature(action.signature ?? '')\n const inputs = action.inputs ?? []\n if (!fn.name && inputs.length === 0) {\n return [\n {\n option,\n index,\n target,\n function: '(no-op / signaling)',\n signature: '',\n param: '—',\n type: '—',\n value: action.value ?? '0',\n valid: true,\n },\n ]\n }\n if (!inputs.length) {\n return [\n {\n option,\n index,\n target,\n function: fn.name,\n signature: fn.signature,\n param: '—',\n type: '—',\n value: action.value ?? '0',\n valid: true,\n },\n ]\n }\n return inputs.map((inp) => {\n const check = validateAbiParameter(inp.type, inp.value)\n return {\n option,\n index,\n target,\n function: fn.name,\n signature: fn.signature,\n param: inp.name || 'arg',\n type: inp.type,\n value: inp.value,\n valid: check.ok,\n error: check.error,\n }\n })\n}\n\nfunction encodeActionOrThrow(action: GovActionInput): GovActionInput {\n const target = getAddress(action.target)\n const value = String(action.value || '0')\n const signature = (action.signature ?? '').trim()\n const inputs = (action.inputs ?? []).map((inp) => ({\n name: inp.name,\n type: inp.type,\n value: String(inp.value ?? ''),\n }))\n if (signature) encodeGovActionCalldata(signature, inputs)\n return { target, value, signature, inputs }\n}\n\nasync function resolveFunction(\n chainId: number,\n target: string,\n functionName: string,\n providedAbi: unknown,\n rpcUrl?: string,\n): Promise<{ matches: ComposeFunctionMatch[]; source: string; warning?: string }> {\n if (functionName.includes('(') && providedAbi == null) {\n return { matches: [parseSignature(functionName)], source: 'signature' }\n }\n let source = 'provided'\n let abiItems: unknown[] | null = providedAbi != null ? parseAbiJson(providedAbi) : null\n if (providedAbi != null && !abiItems?.length) {\n abiItems = extractAbiFromUnknown(providedAbi)\n }\n if (!abiItems?.length) {\n const fetched = await fetchVerifiedAbi(chainId, target)\n if (fetched) {\n abiItems = fetched.abi\n source = fetched.source\n }\n }\n let fns = functionsFromAbi(abiItems ?? [])\n if (rpcUrl && fns.length && !matchFunction(fns, functionName).length) {\n const impl = await readEip1967Implementation(rpcUrl, target)\n if (impl) {\n const implAbi = await fetchVerifiedAbi(chainId, impl)\n if (implAbi) {\n fns = functionsFromAbi(implAbi.abi)\n source = `${source}+proxy-impl`\n }\n }\n }\n const matches = matchFunction(fns, functionName)\n if (!matches.length && functionName.includes('(')) {\n return { matches: [parseSignature(functionName)], source: source === 'provided' ? 'signature' : source }\n }\n return { matches, source, warning: fns.length ? undefined : 'No verified ABI found. Pass abi JSON or a full signature like transfer(address,uint256).' }\n}\n\nfunction lookupNote(matches: ComposeFunctionMatch[], source: string): { note: string; next: string } {\n if (matches.length > 1) {\n return {\n note: `Found ${matches.length} overloads (${source}). Ask the operator which signature to use, then call this tool again with that full signature.`,\n next: 'Ask the operator to pick an overload, then collect a value for each parameter and call this tool with inputs[].value set.',\n }\n }\n const fn = matches[0]\n if (!fn) {\n return {\n note: 'Function not found on the verified ABI.',\n next: 'Confirm the contract address and function name, or pass abi / a full signature.',\n }\n }\n if (!fn.inputs.length) {\n return {\n note: `${fn.signature} takes no parameters (${source}).`,\n next: 'Confirm ETH value (0 unless payable), then add this action to the draft and ask if there is another action. After all actions, call this tool with configuration + actions/options for the preview table.',\n }\n }\n return {\n note: `Interface for ${fn.signature} (${source}). Ask the operator for each parameter value, then call this tool again with those values to type-check.`,\n next: `Ask one parameter at a time: ${fn.inputs.map((p) => `${p.name} (${p.type})`).join(', ')}. Then re-call with inputs values to validate.`,\n }\n}\n\n/**\n * Lookup a contract function, type-check values, or preview a full Bravo/Delta draft.\n */\nexport async function continuumDaoComposeProposalAction(\n args: ContinuumDaoComposeProposalActionArgs,\n): Promise<ContinuumDaoComposeProposalActionResult> {\n const chainId = parseChainId(args.chainId)\n const hasPreview =\n args.configuration != null &&\n (Array.isArray(args.actions) || Array.isArray(args.options))\n\n if (hasPreview) {\n const configuration = normalizeGovConfiguration(args.configuration)\n const title = args.title?.trim() || undefined\n const rows: ComposeDraftRow[] = []\n let ok = true\n const errors: string[] = []\n\n if (configuration === 'delta') {\n const options = args.options ?? []\n if (options.length < 2) {\n return {\n ok: false,\n step: 'preview',\n configuration,\n error: 'Delta preview needs at least 2 options.',\n note: 'Delta drafts need nOptions >= 2 and nWinners strictly less than nOptions.',\n next: 'Collect option labels and at least two options, then preview again.',\n }\n }\n const nWinners = Number(args.nWinners)\n if (!Number.isFinite(nWinners) || nWinners < 1 || nWinners >= options.length) {\n return {\n ok: false,\n step: 'preview',\n configuration,\n error: 'Delta nWinners must be >= 1 and strictly less than nOptions.',\n note: 'Fix nWinners before simulating.',\n next: 'Ask for nWinners, then preview again.',\n }\n }\n const encodedOptions: GovOptionInput[] = []\n options.forEach((opt) => {\n const encodedActions = (opt.actions ?? []).map((a, ai) => {\n const actionRows = actionToRows(a, ai + 1, opt.label)\n rows.push(...actionRows)\n if (actionRows.some((r) => !r.valid)) ok = false\n try {\n return encodeActionOrThrow(a)\n } catch (err) {\n ok = false\n errors.push(`${opt.label} action ${ai + 1}: ${err instanceof Error ? err.message : String(err)}`)\n return a\n }\n })\n encodedOptions.push({ label: opt.label, actions: encodedActions })\n })\n const table = markdownTable(rows)\n return {\n ok,\n step: 'preview',\n configuration,\n title,\n nWinners,\n options: encodedOptions,\n table,\n rows,\n error: errors.length ? errors.join('; ') : undefined,\n note: ok\n ? 'Draft inputs are type-valid. Present this table, then ask whether to dry-run with ctm_continuum_dao_simulate_proposal and run the returned Foundry forge scripts (foundry__forge_script, no --broadcast). Isolated eth_call is not sufficient.'\n : 'Some parameter values failed type checks. Fix the rows marked no before simulating.',\n next: ok\n ? 'Show the table. Load etherscan and foundry first. Ask if the operator wants to simulate via forge script (pass account for another EOA, or keyGenId / omit account for the preferred KeyGen). Do not call build_propose_* until they confirm, the forge script succeeded, and, for KeyGen submit, a Governance forum topic exists.'\n : 'Re-ask the invalid parameters and call this tool again to preview.',\n }\n }\n\n const actions = args.actions ?? []\n const encodedActions = actions.map((a, ai) => {\n const actionRows = actionToRows(a, ai + 1)\n rows.push(...actionRows)\n if (actionRows.some((r) => !r.valid)) ok = false\n try {\n return encodeActionOrThrow(a)\n } catch (err) {\n ok = false\n errors.push(`action ${ai + 1}: ${err instanceof Error ? err.message : String(err)}`)\n return a\n }\n })\n const table = markdownTable(rows)\n return {\n ok,\n step: 'preview',\n configuration,\n title,\n actions: encodedActions,\n table,\n rows,\n error: errors.length ? errors.join('; ') : undefined,\n note: ok\n ? 'Draft inputs are type-valid. Present this table, then ask whether to dry-run with ctm_continuum_dao_simulate_proposal and run the returned Foundry forge scripts (foundry__forge_script, no --broadcast). Isolated eth_call is not sufficient.'\n : 'Some parameter values failed type checks. Fix the rows marked no before simulating.',\n next: ok\n ? 'Show the table. Load etherscan and foundry first. Ask if the operator wants to simulate via forge script (pass account for another EOA, or keyGenId / omit account for the preferred KeyGen). Do not call build_propose_* until they confirm, the forge script succeeded, and, for KeyGen submit, a Governance forum topic exists.'\n : 'Re-ask the invalid parameters and call this tool again to preview.',\n }\n }\n\n const targetRaw = args.target?.trim()\n const functionName = args.functionName?.trim()\n if (!targetRaw || !functionName) {\n throw new Error('Pass target + functionName to look up / validate an action, or configuration + actions/options to preview the draft.')\n }\n if (!isAddress(targetRaw)) throw new Error('target must be a valid Ethereum address.')\n const target = getAddress(targetRaw)\n\n const resolved = await resolveFunction(chainId, target, functionName, args.abi, args.rpcUrl)\n if (!resolved.matches.length) {\n return {\n ok: false,\n step: 'lookup',\n target,\n functionName,\n abiSource: resolved.source,\n warning: resolved.warning,\n error: `No function named ${functionName} on ${target}.`,\n note: resolved.warning ?? 'Function not found.',\n next: 'Confirm the address and name, or pass abi JSON / a full signature.',\n }\n }\n\n const valuesProvided = (args.inputs ?? []).some((inp) => inp.value != null && String(inp.value).trim() !== '')\n if (!valuesProvided || resolved.matches.length > 1) {\n const { note, next } = lookupNote(resolved.matches, resolved.source)\n const fn = resolved.matches.length === 1 ? resolved.matches[0] : undefined\n return {\n ok: resolved.matches.length === 1,\n step: 'lookup',\n target,\n functionName,\n signature: fn?.signature,\n stateMutability: fn?.stateMutability,\n payable: fn?.payable,\n overloads: resolved.matches,\n parameters: fn ? fn.inputs.map((p) => ({ name: p.name, type: p.type, valid: false, error: 'value not provided yet' })) : undefined,\n abiSource: resolved.source,\n warning: resolved.warning,\n missing: fn?.inputs.map((p) => p.name),\n note,\n next,\n }\n }\n\n const fn = resolved.matches[0]!\n const checks = checkParameters(fn, args.inputs)\n const missing = checks.filter((c) => !c.valid).map((c) => c.name)\n const value = String(args.value || '0')\n if (!fn.payable && value !== '0') {\n checks.push({\n name: 'value',\n type: 'uint256',\n value,\n valid: false,\n error: `${fn.signature} is not payable; ETH value must be 0`,\n })\n missing.push('value')\n }\n const allValid = checks.every((c) => c.valid)\n const encoded = allValid ? encodeChecked(target, value, fn, checks) : undefined\n\n const rows: ComposeDraftRow[] = checks.map((c) => ({\n index: 1,\n target,\n function: fn.name,\n signature: fn.signature,\n param: c.name,\n type: c.type,\n value: c.value ?? '',\n valid: c.valid,\n error: c.error,\n }))\n\n return {\n ok: allValid,\n step: 'validate',\n target,\n functionName: fn.name,\n signature: fn.signature,\n stateMutability: fn.stateMutability,\n payable: fn.payable,\n parameters: checks,\n encoded,\n table: markdownTable(rows),\n rows,\n actions: encoded\n ? [{ target: encoded.target, value: encoded.value, signature: encoded.signature, inputs: encoded.inputs }]\n : undefined,\n abiSource: resolved.source,\n missing: missing.length ? missing : undefined,\n error: allValid ? undefined : checks.filter((c) => !c.valid).map((c) => `${c.name}: ${c.error}`).join('; '),\n note: allValid\n ? `${fn.signature} values are type-valid. Add this action to the draft. Ask if there is another action, then preview with configuration + actions/options.`\n : 'One or more parameter values do not match the ABI types. Re-ask those fields.',\n next: allValid\n ? 'Keep this encoded action. Repeat lookup/validate for the next action, or call this tool with configuration + the collected actions/options to print the conclusion table and offer a Foundry forge-script simulate.'\n : 'Re-ask the invalid parameters and call this tool again with the corrected values.',\n }\n}\n","/**\n * Per-voter roll for a ContinuumDAO proposal (VoteCast / VoteCastWithParams).\n * Backend /proposalVotes only store aggregates — who voted lives in Governor logs.\n */\nimport { type Address, formatUnits, getAddress, parseAbi, parseAbiItem } from 'viem'\nimport {\n CONTINUUM_DAO_LINEA_SEPOLIA_CHAIN_ID,\n isConfiguredAddress,\n votingEscrowAddressOnEvmChain,\n} from './constants.js'\nimport {\n continuumDaoFetchProposal,\n publicClient,\n requireGovernor,\n resolveGovernorProposalRef,\n} from './governance.js'\n\nexport const VOTE_CAST_EVENT = parseAbiItem(\n 'event VoteCast(address indexed voter, uint256 proposalId, uint8 support, uint256 weight, string reason)',\n)\nexport const VOTE_CAST_WITH_PARAMS_EVENT = parseAbiItem(\n 'event VoteCastWithParams(address indexed voter, uint256 proposalId, uint8 support, uint256 weight, string reason, bytes params)',\n)\n\nconst snapshotDeadlineAbi = parseAbi([\n 'function proposalSnapshot(uint256 proposalId) view returns (uint256)',\n 'function proposalDeadline(uint256 proposalId) view returns (uint256)',\n 'function token() view returns (address)',\n])\n\nconst veNodePropertiesAbi = parseAbi(['function nodeProperties() view returns (address)'])\n\nconst nodePropsAttachAbi = parseAbi([\n 'function attachedTokenId(address keyGen) view returns (uint256)',\n])\n\nconst nodeInfoAbi = [\n {\n type: 'function',\n name: 'nodeInfo',\n stateMutability: 'view',\n inputs: [\n { name: '_tokenId', type: 'uint256' },\n { name: '_account', type: 'address' },\n ],\n outputs: [\n {\n name: '',\n type: 'tuple',\n components: [\n { name: 'forumHandle', type: 'string' },\n { name: 'email', type: 'string' },\n { name: 'ipv4', type: 'uint8[4]' },\n { name: 'ipv6', type: 'uint16[8]' },\n { name: 'vpsProvider', type: 'string' },\n { name: 'ramInstalled', type: 'uint256' },\n { name: 'cpuCores', type: 'uint256' },\n { name: 'dIDType', type: 'string' },\n { name: 'dID', type: 'string' },\n { name: 'data', type: 'bytes' },\n ],\n },\n ],\n },\n] as const\n\nexport const BRAVO_SUPPORT_LABELS = ['Against', 'For', 'Abstain'] as const\n\nconst LOG_CHUNK_BLOCKS = 8_000n\nconst MAX_LOG_CHUNKS = 80\nconst MAX_VOTES = 2_000\nconst TIMESTAMP_FLOOR = 1_600_000_000n\nconst LINEA_BLOCK_SECONDS = 2n\nconst RANGE_BUFFER_BLOCKS = 20_000n\n\nexport function bravoSupportLabel(support: number): string {\n return BRAVO_SUPPORT_LABELS[support] ?? `support=${support}`\n}\n\n/** Inverse of packed Delta vote params (32-byte uint256 slots, last is NOTA). */\nexport function decodeDeltaVoteParams(params: `0x${string}` | string | undefined): string[] {\n if (!params || params === '0x') return []\n const hex = params.startsWith('0x') ? params.slice(2) : params\n if (hex.length === 0 || hex.length % 64 !== 0) return []\n const out: string[] = []\n for (let i = 0; i < hex.length; i += 64) {\n out.push(BigInt(`0x${hex.slice(i, i + 64)}`).toString())\n }\n return out\n}\n\nexport function looksLikeUnixSeconds(value: bigint): boolean {\n return value >= TIMESTAMP_FLOOR && value < 4_000_000_000n\n}\n\nexport function estimateBlockAtTimestamp(\n timestamp: bigint,\n latest: { number: bigint; timestamp: bigint },\n): bigint {\n if (timestamp >= latest.timestamp) return latest.number\n const deltaSec = latest.timestamp - timestamp\n const approx = deltaSec / LINEA_BLOCK_SECONDS + RANGE_BUFFER_BLOCKS\n return latest.number > approx ? latest.number - approx : 0n\n}\n\nexport function explorerBase(chainId: number): string {\n return chainId === CONTINUUM_DAO_LINEA_SEPOLIA_CHAIN_ID\n ? 'https://sepolia.lineascan.build'\n : 'https://lineascan.build'\n}\n\nexport type ProposalVoteLogLike = {\n eventName?: string\n args?: {\n voter?: unknown\n proposalId?: unknown\n support?: unknown\n weight?: unknown\n reason?: unknown\n params?: unknown\n }\n blockNumber?: bigint | null\n transactionHash?: `0x${string}` | null\n}\n\nexport type ProposalVoteRow = {\n voter: string\n explorerUrl: string\n support: number\n supportLabel: string\n weight: string\n weightCtm: string\n reason: string\n optionWeights?: string[]\n how: string\n attached: boolean\n attachedTokenId?: string\n nodeInfo?: ContinuumDaoNodeInfo\n txHash?: string\n txExplorerUrl?: string\n blockNumber?: string\n}\n\nexport function howVoted(input: {\n support: number\n optionWeights?: string[]\n optionLabels?: string[]\n}): string {\n if (input.optionWeights && input.optionWeights.length > 0) {\n const labels = input.optionLabels ?? []\n const parts = input.optionWeights.map((w, i) => {\n const last = i === input.optionWeights!.length - 1\n const name = last ? 'NOTA' : (labels[i] ?? `option ${i + 1}`)\n return `${name} ${w}`\n })\n return parts.join(', ')\n }\n return bravoSupportLabel(input.support)\n}\n\nfunction asBigInt(value: unknown): bigint | null {\n if (typeof value === 'bigint') return value\n if (typeof value === 'number' && Number.isFinite(value)) return BigInt(value)\n if (typeof value === 'string' && /^-?\\d+$/.test(value.trim())) return BigInt(value.trim())\n return null\n}\n\nexport function collectVotesFromLogs(\n logs: readonly ProposalVoteLogLike[],\n proposalId: bigint,\n chainId: number,\n optionLabels?: string[],\n): ProposalVoteRow[] {\n const base = explorerBase(chainId)\n const rows: ProposalVoteRow[] = []\n for (const log of logs) {\n const args = log.args ?? {}\n const logProposal = asBigInt(args.proposalId)\n if (logProposal == null || logProposal !== proposalId) continue\n let voter: string\n try {\n voter = getAddress(String(args.voter ?? ''))\n } catch {\n continue\n }\n const support = Number(args.support ?? 0)\n const weight = asBigInt(args.weight) ?? 0n\n const reason = typeof args.reason === 'string' ? args.reason : ''\n const params =\n typeof args.params === 'string' && args.params.startsWith('0x')\n ? (args.params as `0x${string}`)\n : undefined\n const optionWeights =\n log.eventName === 'VoteCastWithParams' || params ? decodeDeltaVoteParams(params) : undefined\n const how = howVoted({\n support,\n ...(optionWeights && optionWeights.length > 0 ? { optionWeights, optionLabels } : {}),\n })\n const txHash = log.transactionHash ?? undefined\n rows.push({\n voter,\n explorerUrl: `${base}/address/${voter}`,\n support,\n supportLabel: bravoSupportLabel(support),\n weight: weight.toString(),\n weightCtm: formatUnits(weight, 18),\n reason,\n attached: false,\n ...(optionWeights && optionWeights.length > 0 ? { optionWeights } : {}),\n how,\n ...(txHash ? { txHash, txExplorerUrl: `${base}/tx/${txHash}` } : {}),\n ...(log.blockNumber != null ? { blockNumber: log.blockNumber.toString() } : {}),\n })\n }\n return rows\n}\n\nexport function summarizeProposalVotes(votes: readonly ProposalVoteRow[]): {\n voterCount: number\n attachedVoterCount: number\n forWeight: string\n againstWeight: string\n abstainWeight: string\n note: string\n} {\n let forW = 0n\n let againstW = 0n\n let abstainW = 0n\n for (const vote of votes) {\n const w = BigInt(vote.weight)\n if (vote.support === 1) forW += w\n else if (vote.support === 0) againstW += w\n else if (vote.support === 2) abstainW += w\n }\n const note =\n votes.length === 0\n ? 'No VoteCast logs for this proposal in the scanned window. If it just started, wait; if it is older than the window, pass fromBlock/toBlock or load official etherscan get_logs on the governor.'\n : `Found ${votes.length} vote(s). Read voter + how + whether they are attached to a node. Offer this after listing or explaining a proposal.`\n const attachedCount = votes.filter((vote) => vote.attached).length\n const attachBit =\n votes.length === 0\n ? ''\n : ` ${attachedCount} of ${votes.length} voting address(es) are attached to a node (NodeProperties.attachedTokenId after attachNodeFor).`\n return {\n voterCount: votes.length,\n attachedVoterCount: attachedCount,\n forWeight: forW.toString(),\n againstWeight: againstW.toString(),\n abstainWeight: abstainW.toString(),\n note: `${note}${attachBit}`,\n }\n}\n\nexport type ContinuumDaoNodeInfo = {\n forumHandle?: string\n email?: string\n ipv4?: string\n ipv6?: string\n vpsProvider?: string\n ramInstalled?: string\n cpuCores?: string\n dIDType?: string\n dID?: string\n dataHex?: string\n}\n\nexport type VoterNodeAttachment = {\n attached: boolean\n attachedTokenId?: string\n nodeInfo?: ContinuumDaoNodeInfo\n}\n\nfunction asNumberList(value: unknown): number[] {\n if (!Array.isArray(value)) return []\n return value.map((part) => Number(part))\n}\n\nfunction formatIpv4(parts: unknown): string | undefined {\n const n = asNumberList(parts)\n if (n.length !== 4 || n.every((x) => x === 0)) return undefined\n return n.join('.')\n}\n\nfunction formatIpv6(parts: unknown): string | undefined {\n const n = asNumberList(parts)\n if (n.length !== 8 || n.every((x) => x === 0)) return undefined\n return n.map((x) => x.toString(16)).join(':')\n}\n\nexport function normalizeNodeInfo(raw: unknown): ContinuumDaoNodeInfo | undefined {\n if (raw == null) return undefined\n const rec = Array.isArray(raw)\n ? {\n forumHandle: raw[0],\n email: raw[1],\n ipv4: raw[2],\n ipv6: raw[3],\n vpsProvider: raw[4],\n ramInstalled: raw[5],\n cpuCores: raw[6],\n dIDType: raw[7],\n dID: raw[8],\n data: raw[9],\n }\n : typeof raw === 'object'\n ? (raw as Record<string, unknown>)\n : null\n if (!rec) return undefined\n const str = (value: unknown) => (typeof value === 'string' && value.trim() ? value.trim() : undefined)\n const ram = asBigInt(rec.ramInstalled)\n const cpu = asBigInt(rec.cpuCores)\n const data =\n typeof rec.data === 'string' && rec.data.startsWith('0x') && rec.data !== '0x' ? rec.data : undefined\n const info: ContinuumDaoNodeInfo = {\n ...(str(rec.forumHandle) ? { forumHandle: str(rec.forumHandle) } : {}),\n ...(str(rec.email) ? { email: str(rec.email) } : {}),\n ...(formatIpv4(rec.ipv4) ? { ipv4: formatIpv4(rec.ipv4) } : {}),\n ...(formatIpv6(rec.ipv6) ? { ipv6: formatIpv6(rec.ipv6) } : {}),\n ...(str(rec.vpsProvider) ? { vpsProvider: str(rec.vpsProvider) } : {}),\n ...(ram != null && ram > 0n ? { ramInstalled: ram.toString() } : {}),\n ...(cpu != null && cpu > 0n ? { cpuCores: cpu.toString() } : {}),\n ...(str(rec.dIDType) ? { dIDType: str(rec.dIDType) } : {}),\n ...(str(rec.dID) ? { dID: str(rec.dID) } : {}),\n ...(data ? { dataHex: data } : {}),\n }\n return Object.keys(info).length > 0 ? info : undefined\n}\n\nexport function applyNodeAttachments(\n votes: readonly ProposalVoteRow[],\n attachments: ReadonlyMap<string, VoterNodeAttachment>,\n): ProposalVoteRow[] {\n return votes.map((vote) => {\n const hit = attachments.get(vote.voter.toLowerCase())\n if (!hit) return { ...vote, attached: false }\n return {\n ...vote,\n attached: hit.attached,\n ...(hit.attached && hit.attachedTokenId ? { attachedTokenId: hit.attachedTokenId } : {}),\n ...(hit.nodeInfo ? { nodeInfo: hit.nodeInfo } : {}),\n }\n })\n}\n\nexport type ContinuumDaoFetchProposalVotesInput = {\n chainId: number | string\n rpcUrl: string\n proposalId: string | number | bigint\n governor?: string\n votingEscrow?: string\n nodeProperties?: string\n fromBlock?: string | number\n toBlock?: string | number\n}\n\nexport type ContinuumDaoFetchProposalVotesResult = {\n proposalId: string\n catalogId?: number\n governor: string\n nodeProperties?: string\n title?: string\n configuration?: 'bravo' | 'delta'\n fromBlock: string\n toBlock: string\n truncated: boolean\n votes: ProposalVoteRow[]\n voterCount: number\n attachedVoterCount: number\n forWeight: string\n againstWeight: string\n abstainWeight: string\n note: string\n}\n\nexport type ContinuumDaoProposalVotesDeps = {\n getLogs?: (args: {\n address: Address\n events: readonly [typeof VOTE_CAST_EVENT, typeof VOTE_CAST_WITH_PARAMS_EVENT]\n fromBlock: bigint\n toBlock: bigint\n }) => Promise<readonly ProposalVoteLogLike[]>\n getBlock?: () => Promise<{ number: bigint; timestamp: bigint }>\n readSnapshotDeadline?: (\n gov: Address,\n proposalId: bigint,\n ) => Promise<{ snapshot?: bigint; deadline?: bigint }>\n fetchProposal?: typeof continuumDaoFetchProposal\n readNodeProperties?: () => Promise<Address | null>\n readAttachedTokenId?: (keyGen: Address) => Promise<bigint>\n readNodeInfo?: (tokenId: bigint, account: Address) => Promise<unknown>\n}\n\nfunction backendOptionLabels(raw: unknown): string[] | undefined {\n if (!raw || typeof raw !== 'object' || Array.isArray(raw)) return undefined\n const options = (raw as { options?: unknown }).options\n if (!Array.isArray(options)) return undefined\n const labels = options\n .map((opt) => {\n if (!opt || typeof opt !== 'object' || Array.isArray(opt)) return ''\n return String((opt as { label?: unknown }).label ?? '').trim()\n })\n .filter(Boolean)\n return labels.length > 0 ? labels : undefined\n}\n\nfunction backendTitle(raw: unknown): string | undefined {\n if (!raw || typeof raw !== 'object' || Array.isArray(raw)) return undefined\n const title = (raw as { title?: unknown }).title\n return typeof title === 'string' && title.trim() ? title.trim() : undefined\n}\n\nfunction backendConfiguration(raw: unknown): 'bravo' | 'delta' | undefined {\n if (!raw || typeof raw !== 'object' || Array.isArray(raw)) return undefined\n const cfg = (raw as { configuration?: unknown }).configuration\n if (cfg === 1 || cfg === '1' || cfg === 'delta') return 'delta'\n if (cfg === 0 || cfg === '0' || cfg === 'bravo') return 'bravo'\n return undefined\n}\n\nasync function readWindow(\n client: ReturnType<typeof publicClient>,\n gov: Address,\n proposalId: bigint,\n latest: { number: bigint; timestamp: bigint },\n deps?: ContinuumDaoProposalVotesDeps,\n): Promise<{ fromBlock: bigint; toBlock: bigint }> {\n let snapshot: bigint | undefined\n let deadline: bigint | undefined\n try {\n const read = deps?.readSnapshotDeadline\n ? await deps.readSnapshotDeadline(gov, proposalId)\n : {\n snapshot: await client.readContract({\n address: gov,\n abi: snapshotDeadlineAbi,\n functionName: 'proposalSnapshot',\n args: [proposalId],\n }),\n deadline: await client.readContract({\n address: gov,\n abi: snapshotDeadlineAbi,\n functionName: 'proposalDeadline',\n args: [proposalId],\n }),\n }\n snapshot = read.snapshot\n deadline = read.deadline\n } catch {\n /* fall back to a recent lookback */\n }\n const toFromTs = (ts: bigint | undefined, fallback: bigint) => {\n if (ts == null) return fallback\n if (looksLikeUnixSeconds(ts)) return estimateBlockAtTimestamp(ts, latest)\n return ts > latest.number ? latest.number : ts\n }\n const fromBlock = toFromTs(snapshot, latest.number > 200_000n ? latest.number - 200_000n : 0n)\n const toBlock = toFromTs(deadline, latest.number)\n return {\n fromBlock,\n toBlock: toBlock < fromBlock ? latest.number : toBlock,\n }\n}\n\nasync function resolveNodePropertiesAddress(\n client: ReturnType<typeof publicClient>,\n chainId: number,\n gov: Address,\n args: ContinuumDaoFetchProposalVotesInput,\n deps?: ContinuumDaoProposalVotesDeps,\n): Promise<Address | null> {\n if (deps?.readNodeProperties) {\n return deps.readNodeProperties()\n }\n if (isConfiguredAddress(args.nodeProperties)) {\n return getAddress(args.nodeProperties!)\n }\n let ve: Address | null = isConfiguredAddress(args.votingEscrow)\n ? getAddress(args.votingEscrow!)\n : votingEscrowAddressOnEvmChain(chainId)\n if (!ve) {\n try {\n const token = await client.readContract({\n address: gov,\n abi: snapshotDeadlineAbi,\n functionName: 'token',\n })\n ve = isConfiguredAddress(token) ? getAddress(token) : null\n } catch {\n ve = null\n }\n }\n if (!ve) return null\n try {\n const np = await client.readContract({\n address: ve,\n abi: veNodePropertiesAbi,\n functionName: 'nodeProperties',\n })\n return isConfiguredAddress(np) ? getAddress(np) : null\n } catch {\n return null\n }\n}\n\nasync function readAttachmentsForVoters(\n client: ReturnType<typeof publicClient>,\n nodeProperties: Address,\n voters: readonly string[],\n deps?: ContinuumDaoProposalVotesDeps,\n): Promise<Map<string, VoterNodeAttachment>> {\n const out = new Map<string, VoterNodeAttachment>()\n await Promise.all(\n voters.map(async (raw) => {\n const keyGen = getAddress(raw)\n try {\n const tokenId = deps?.readAttachedTokenId\n ? await deps.readAttachedTokenId(keyGen)\n : await client.readContract({\n address: nodeProperties,\n abi: nodePropsAttachAbi,\n functionName: 'attachedTokenId',\n args: [keyGen],\n })\n if (tokenId > 0n) {\n let nodeInfo: ContinuumDaoNodeInfo | undefined\n try {\n const raw = deps?.readNodeInfo\n ? await deps.readNodeInfo(tokenId, keyGen)\n : await client.readContract({\n address: nodeProperties,\n abi: nodeInfoAbi,\n functionName: 'nodeInfo',\n args: [tokenId, keyGen],\n })\n nodeInfo = normalizeNodeInfo(raw)\n } catch {\n /* NodeInfo is optional; attachment still stands */\n }\n out.set(keyGen.toLowerCase(), {\n attached: true,\n attachedTokenId: tokenId.toString(),\n ...(nodeInfo ? { nodeInfo } : {}),\n })\n } else {\n out.set(keyGen.toLowerCase(), { attached: false })\n }\n } catch {\n out.set(keyGen.toLowerCase(), { attached: false })\n }\n }),\n )\n return out\n}\n\nasync function collectLogsInRange(\n client: ReturnType<typeof publicClient>,\n gov: Address,\n fromBlock: bigint,\n toBlock: bigint,\n deps?: ContinuumDaoProposalVotesDeps,\n): Promise<{ logs: ProposalVoteLogLike[]; truncated: boolean }> {\n const logs: ProposalVoteLogLike[] = []\n let chunks = 0\n let truncated = false\n for (let start = fromBlock; start <= toBlock; start += LOG_CHUNK_BLOCKS) {\n if (chunks >= MAX_LOG_CHUNKS) {\n truncated = true\n break\n }\n const end = start + LOG_CHUNK_BLOCKS - 1n > toBlock ? toBlock : start + LOG_CHUNK_BLOCKS - 1n\n const args = {\n address: gov,\n events: [VOTE_CAST_EVENT, VOTE_CAST_WITH_PARAMS_EVENT] as const,\n fromBlock: start,\n toBlock: end,\n }\n const chunk = deps?.getLogs\n ? await deps.getLogs(args)\n : ((await client.getLogs(args)) as ProposalVoteLogLike[])\n logs.push(...chunk)\n chunks += 1\n }\n return { logs, truncated }\n}\n\nexport async function continuumDaoFetchProposalVotes(\n args: ContinuumDaoFetchProposalVotesInput,\n deps?: ContinuumDaoProposalVotesDeps,\n): Promise<ContinuumDaoFetchProposalVotesResult> {\n const chainId = Number(args.chainId)\n const resolved = await resolveGovernorProposalRef(args.proposalId)\n const gov = requireGovernor(chainId, resolved.governorAddress ?? args.governor)\n const client = publicClient(args.rpcUrl, chainId)\n const latest = deps?.getBlock\n ? await deps.getBlock()\n : await client.getBlock()\n const latestHead = { number: latest.number, timestamp: latest.timestamp }\n\n let fromBlock: bigint\n let toBlock: bigint\n if (args.fromBlock != null || args.toBlock != null) {\n fromBlock = args.fromBlock != null ? BigInt(String(args.fromBlock)) : 0n\n toBlock = args.toBlock != null ? BigInt(String(args.toBlock)) : latestHead.number\n } else {\n const window = await readWindow(client, gov, resolved.proposalId, latestHead, deps)\n fromBlock = window.fromBlock\n toBlock = window.toBlock\n }\n\n let optionLabels: string[] | undefined\n let title: string | undefined\n let configuration: 'bravo' | 'delta' | undefined\n if (resolved.catalogId != null) {\n try {\n const fetched = await (deps?.fetchProposal ?? continuumDaoFetchProposal)({\n id: resolved.catalogId,\n })\n optionLabels = backendOptionLabels(fetched.proposal)\n title = backendTitle(fetched.proposal)\n configuration = backendConfiguration(fetched.proposal)\n } catch {\n /* labels optional */\n }\n }\n\n let logs: ProposalVoteLogLike[] = []\n let truncated = false\n let logNote: string | undefined\n try {\n const collected = await collectLogsInRange(client, gov, fromBlock, toBlock, deps)\n logs = collected.logs\n truncated = collected.truncated\n } catch (error) {\n const message = error instanceof Error ? error.message : String(error)\n logNote = `Could not read Governor VoteCast logs: ${message}. Load official etherscan and call get_logs on the governor if the operator chooses it.`\n }\n\n let votes = collectVotesFromLogs(logs, resolved.proposalId, chainId, optionLabels).slice(\n 0,\n MAX_VOTES,\n )\n if (votes.length === MAX_VOTES) truncated = true\n\n let nodeProperties: Address | undefined\n let attachNote: string | undefined\n try {\n const np = await resolveNodePropertiesAddress(client, chainId, gov, args, deps)\n if (np) {\n nodeProperties = np\n const unique = [...new Set(votes.map((vote) => vote.voter))]\n const attachments = await readAttachmentsForVoters(client, np, unique, deps)\n votes = applyNodeAttachments(votes, attachments)\n } else {\n attachNote =\n 'Could not resolve NodeProperties (VotingEscrow.nodeProperties after attachNodeFor). Pass nodeProperties if the operator has it.'\n }\n } catch (error) {\n const message = error instanceof Error ? error.message : String(error)\n attachNote = `Could not read NodeProperties.attachedTokenId: ${message}.`\n }\n\n const summary = summarizeProposalVotes(votes)\n const note = [\n summary.note,\n logNote,\n attachNote,\n truncated ? 'Result truncated; narrow fromBlock/toBlock if you need the rest.' : '',\n ]\n .filter(Boolean)\n .join(' ')\n\n return {\n proposalId: resolved.proposalId.toString(),\n ...(resolved.catalogId != null ? { catalogId: resolved.catalogId } : {}),\n governor: gov,\n ...(nodeProperties ? { nodeProperties } : {}),\n ...(title ? { title } : {}),\n ...(configuration ? { configuration } : {}),\n fromBlock: fromBlock.toString(),\n toBlock: toBlock.toString(),\n truncated,\n votes,\n voterCount: summary.voterCount,\n attachedVoterCount: summary.attachedVoterCount,\n forWeight: summary.forWeight,\n againstWeight: summary.againstWeight,\n abstainWeight: summary.abstainWeight,\n note,\n }\n}\n"]}
1
+ {"version":3,"sources":["../../../../src/chains/evm/chainIdParse.ts","../../../../src/protocols/evm/continuum-dao/constants.ts","../../../../src/core/defiEvmClient.ts","../../../../src/core/purpose.ts","../../../../src/core/envelope.ts","../../../../src/chains/evm/routerSwapGas.ts","../../../../src/chains/evm/buildBatch.ts","../../../../src/core/eip712Multisign.ts","../../../../src/protocols/evm/continuum-dao/forum.ts","../../../../src/protocols/evm/continuum-dao/explainProposal.ts","../../../../src/protocols/evm/continuum-dao/foundryProposalScript.ts","../../../../src/protocols/evm/continuum-dao/simulateProposal.ts","../../../../src/protocols/evm/continuum-dao/governance.ts","../../../../src/core/registry.ts","../../../../src/protocols/evm/continuum-dao/index.ts","../../../../src/protocols/evm/continuum-dao/marketplaceModule.ts","../../../../src/protocols/evm/continuum-dao/escrowRules.ts","../../../../src/protocols/evm/continuum-dao/escrowPreflight.ts","../../../../src/protocols/evm/continuum-dao/multisign.ts","../../../../src/protocols/evm/continuum-dao/attachGroup.ts","../../../../src/protocols/evm/continuum-dao/composeProposalAction.ts","../../../../src/protocols/evm/continuum-dao/proposalVotes.ts","../../../../src/protocols/evm/continuum-dao/marketplaceTypes.ts","../../../../src/protocols/evm/continuum-dao/marketplaceFold.ts","../../../../src/protocols/evm/continuum-dao/marketplaceAbi.ts","../../../../src/protocols/evm/continuum-dao/marketplacePlan.ts","../../../../src/protocols/evm/continuum-dao/marketplaceChain.ts","../../../../src/protocols/evm/continuum-dao/marketplaceIndex.ts","../../../../src/protocols/evm/continuum-dao/marketplaceCatalog.ts","../../../../src/protocols/evm/continuum-dao/marketplaceSearch.ts","../../../../src/protocols/evm/continuum-dao/marketplaceFeeAlternative.ts","../../../../src/protocols/evm/continuum-dao/marketplaceMultisign.ts","../../../../src/protocols/evm/continuum-dao/marketplaceAddAsset.ts"],"names":["addr","getAddress","CONTINUUM_DAO_COMMITTEE_PROPOSERS","zeroAddress","CONTINUUM_DAO_DEPLOYMENTS","CONTINUUM_DAO_LINEA_CHAIN_ID","CONTINUUM_DAO_LINEA_SEPOLIA_CHAIN_ID","VOTING_ESCROW_MARKETPLACE_LINEA_ADDRESS","VECTM_TOKEN_NAME","CTM_TOKEN_SYMBOL","CONTINUUM_DAO_ETHEREUM_CHAIN_ID","CTM_TOKEN_NAME","CTM_TOKEN_DECIMALS","VECTM_TOKEN_SYMBOL","CONTINUUM_DAO_PROTOCOL_ID","WEEK_SECONDS","MAXTIME_SECONDS","VECTM_MAX_LOCK_WEEKS","VECTM_DEFAULT_MINIMUM_LOCK_WEI","VECTM_LIQ_MIN_LOCKED_WEI","VECTM_LIQ_PENALTY_NUM","VECTM_LIQ_PENALTY_DEN","CTM_TOKEN_ADDRESS","VOTING_ESCROW_LINEA_ADDRESS","MULTISIGN_AGENT_WALLET_LINEA_ADDRESS","CTM_FEE_RATE_SCALE","VOTING_ESCROW_MARKETPLACE_START_BLOCK","MARKETPLACE_WETH_LINEA_ADDRESS","MARKETPLACE_USDC_LINEA_ADDRESS","CONTINUUM_DAO_MARKETPLACE_PROTOCOL_ID","CONTINUUM_DAO_LINEA_GOVERNOR_ADDRESS","CONTINUUM_DAO_LINEA_GOVERNOR_LEGACY_ADDRESS","CONTINUUM_DAO_GOVERNANCE_API","CONTINUUM_DAO_MARKETPLACE_API","http","getClientIdFromKeyGenResult","gasLimitFromEstimateAndChainConfig","defineChain","publicClient","createPublicClient","fetchChainFeeParams","parseGwei","gweiToDecimalString","serializeTransaction","proposalTxParamsToFeeSnapshot","alignEip1559FeesWithLatestBase","keccak256","stringToHex","hashTypedData","typeLabel","PROPOSAL_TYPE_TO_FORUM_SECTION","FORUM_IDEA_SECTION","qs","FORUM_LOGIN_DELIVERY_KIND","FORUM_GOVERNANCE_SECTIONS","PROPOSAL_TYPE_LABELS","FOUNDRY_PROPOSAL_REQUIRED_SERVERS","proposalArgs","toHex","encodeFunctionData","governorWriteAbi","encodePacked","padHex","meta","votingPowerRefuse","assertContinuumDaoProposalSimulation","CONTINUUM_DAO_PROPOSE_FALLBACK","CONTINUUM_DAO_VOTE_FALLBACK","CONTINUUM_DAO_EXECUTE_FALLBACK","CONTINUUM_DAO_CANCEL_FALLBACK","asRecord","GOVERNOR_STATE","GOVERNOR_STATE_LABELS","CONTINUUM_DAO_GOV_EVM_TYPES","parseAbi","attachedKey","erc20Abi","parseUnits","veReadAbi","isAddress","rows","encodedActions","table","fn","parseAbiItem","formatUnits","str","raw","same","decodeEventLog","now","derived","cache","iso","PAGE_SIZE","MAX_PAGES","trimDecimal","paymentMeta","parseTokenId","finalize"],"mappings":"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","file":"index.cjs","sourcesContent":["/** Parse chain id for comparisons (decimal, 0x hex, CAIP-2 eip155:N, bigint). */\nexport function parseEvmChainIdToNumber(chainId: string | number | bigint | null | undefined): number {\n if (chainId == null) return Number.NaN\n if (typeof chainId === 'bigint') {\n const n = Number(chainId)\n return Number.isSafeInteger(n) && n >= 0 ? n : Number.NaN\n }\n if (typeof chainId === 'number') {\n return Number.isInteger(chainId) && chainId >= 0 ? chainId : Number.NaN\n }\n const t = String(chainId).trim()\n if (!t) return Number.NaN\n const low = t.toLowerCase()\n if (low.startsWith('eip155:')) {\n const rest = t.slice('eip155:'.length).trim()\n const n = Number.parseInt(rest, 10)\n return Number.isNaN(n) || n < 0 ? Number.NaN : n\n }\n if (low.startsWith('0x')) {\n return Number.parseInt(t, 16)\n }\n return Number.parseInt(t, 10)\n}\n","/**\n * ContinuumDAO (CTM / veCTM) — Linea escrow + node attach, Ethereum CTM hold.\n * CTM and Linea VotingEscrow are configured on mainnet; other deployment fields\n * stay zero until redeployed. Callers must skip seed / write paths when\n * {@link isConfiguredAddress} is false.\n */\nimport { getAddress, zeroAddress } from 'viem'\nimport { parseEvmChainIdToNumber } from '../../../chains/evm/chainIdParse.js'\n\nexport const CONTINUUM_DAO_PROTOCOL_ID = 'continuum-dao'\n\nexport const CONTINUUM_DAO_ETHEREUM_CHAIN_ID = 1\nexport const CONTINUUM_DAO_LINEA_CHAIN_ID = 59144\nexport const CONTINUUM_DAO_LINEA_SEPOLIA_CHAIN_ID = 59141\n\nexport const CTM_TOKEN_NAME = 'Continuum'\nexport const CTM_TOKEN_SYMBOL = 'CTM'\nexport const VECTM_TOKEN_NAME = 'Voting Escrow Continuum'\nexport const VECTM_TOKEN_SYMBOL = 'veCTM'\nexport const CTM_TOKEN_DECIMALS = 18\n\nexport const WEEK_SECONDS = 7 * 86400\nexport const MAXTIME_SECONDS = 4 * 365 * 86400\n/** Node-app / MCP lock-duration cap (4 years floored to whole weeks). */\nexport const VECTM_MAX_LOCK_WEEKS = 208\n/** VotingEscrow.minimumLock default (1 CTM). Live value is read on-chain when available. */\nexport const VECTM_DEFAULT_MINIMUM_LOCK_WEI = 10n ** 18n\n/** VotingEscrow.liquidate — `value <= 100 gwei` reverts VotingEscrow_InvalidValue. */\nexport const VECTM_LIQ_MIN_LOCKED_WEI = 100n\nexport const VECTM_LIQ_PENALTY_NUM = 50_000n\nexport const VECTM_LIQ_PENALTY_DEN = 100_000n\n\nexport type ContinuumDaoDeployment = {\n ctm: `0x${string}`\n votingEscrow: `0x${string}`\n nodeProperties: `0x${string}`\n rewards: `0x${string}`\n governor: `0x${string}`\n}\n\nconst UNSET: ContinuumDaoDeployment = {\n ctm: zeroAddress,\n votingEscrow: zeroAddress,\n nodeProperties: zeroAddress,\n rewards: zeroAddress,\n governor: zeroAddress,\n}\n\n/** Production CTM token — same address on Linea mainnet and Ethereum mainnet. */\nexport const CTM_TOKEN_ADDRESS = getAddress('0x2026027054F5beBCEB650aBD62dC623e327658e7')\n\n/** Linea mainnet VotingEscrow (veCTM). */\nexport const VOTING_ESCROW_LINEA_ADDRESS = getAddress('0x221EC90B3B083A8501A37bdeb7035CeaedF3C31f')\n\n/** Linea mainnet MultiSignAgentWallet. Monthly fee and veCTM threshold live here. */\nexport const MULTISIGN_AGENT_WALLET_LINEA_ADDRESS = getAddress('0x4ebd7cCBe32a51d1638cFE90E8eD1c4BdF42f729')\n\n/** MultiSignAgentWallet scales `ctmPerFeeToken` by this amount. */\nexport const CTM_FEE_RATE_SCALE = 1000n\n\n/** Linea mainnet VotingEscrowMarketplace. */\nexport const VOTING_ESCROW_MARKETPLACE_LINEA_ADDRESS = getAddress('0x92557d38beAe4658d3c03A02F349FFB60c3bfFA5')\n\n/** First marketplace block the continuumdao-server crawler scans. */\nexport const VOTING_ESCROW_MARKETPLACE_START_BLOCK = 32_100_001n\n\n/** Linea WETH9 used by the marketplace for ETH-denominated orders. */\nexport const MARKETPLACE_WETH_LINEA_ADDRESS = getAddress('0xe5D7C2a44FfDDf6b295A15c148167daaAf5Cf34f')\n\n/** Linea USDC, a whitelisted marketplace payment token. */\nexport const MARKETPLACE_USDC_LINEA_ADDRESS = getAddress('0x176211869cA2b568f2A7D4EE941E073a821EE1ff')\n\nexport const CONTINUUM_DAO_MARKETPLACE_PROTOCOL_ID = 'continuum-dao-marketplace'\n\n/** Current Linea ContinuumDAO governor (backend catalog ids start at 0). */\nexport const CONTINUUM_DAO_LINEA_GOVERNOR_ADDRESS = getAddress('0x76FF2CB03175900F1D83328C82D27EA9aeaF2355')\n\n/**\n * Superseded Linea ContinuumDAO governor. The public catalog keeps its two\n * proposals as ids **-2** and **-1** so the new contract can start at 0.\n */\nexport const CONTINUUM_DAO_LINEA_GOVERNOR_LEGACY_ADDRESS = getAddress('0x4800F9f1dC1b6daCA841B71E0531F547D374168E')\n\n/**\n * Hint list matching Constitution.md Committee List (Selqui, Hal, John CTM).\n * Agents must still fetch docs `sectionId=committee-list`; this is not user-editable.\n */\nexport const CONTINUUM_DAO_COMMITTEE_PROPOSERS = [\n getAddress('0xd23eecBe0362F36b254F774C274823Cbfc482a10'),\n getAddress('0x482cdCbdd72ef307997153Ee7eb627B7a2348d34'),\n getAddress('0x14C189354702b7f2aC7b19e61522A41632226BD8'),\n] as const\n\nexport function isContinuumDaoCommitteeProposer(addr?: string | null): boolean {\n if (!addr || !isConfiguredAddress(addr)) return false\n try {\n const a = getAddress(addr)\n return CONTINUUM_DAO_COMMITTEE_PROPOSERS.some((c) => c === a)\n } catch {\n return false\n }\n}\n\n/** Placeholder deployments — fill NodeProperties / Rewards / governor after redeploy. */\nexport const CONTINUUM_DAO_DEPLOYMENTS: Readonly<Record<number, ContinuumDaoDeployment>> = {\n [CONTINUUM_DAO_LINEA_CHAIN_ID]: {\n ...UNSET,\n ctm: CTM_TOKEN_ADDRESS,\n votingEscrow: VOTING_ESCROW_LINEA_ADDRESS,\n },\n [CONTINUUM_DAO_LINEA_SEPOLIA_CHAIN_ID]: { ...UNSET },\n [CONTINUUM_DAO_ETHEREUM_CHAIN_ID]: {\n ...UNSET,\n ctm: CTM_TOKEN_ADDRESS,\n },\n}\n\n/** Public ContinuumDAO governance API (same host continuumdao-app proxies). */\nexport const CONTINUUM_DAO_GOVERNANCE_API = 'https://app-api.continuumdao.org'\n\n/** Marketplace catalog on the same host (`/marketplace/*`). */\nexport const CONTINUUM_DAO_MARKETPLACE_API = CONTINUUM_DAO_GOVERNANCE_API\n\nexport function isConfiguredAddress(addr?: string | null): boolean {\n if (!addr?.trim()) return false\n try {\n return getAddress(addr) !== zeroAddress\n } catch {\n return false\n }\n}\n\nexport function continuumDaoDeployment(chainId: number): ContinuumDaoDeployment | null {\n return CONTINUUM_DAO_DEPLOYMENTS[chainId] ?? null\n}\n\nexport function isContinuumDaoLockChain(chainId: number): boolean {\n return chainId === CONTINUUM_DAO_LINEA_CHAIN_ID || chainId === CONTINUUM_DAO_LINEA_SEPOLIA_CHAIN_ID\n}\n\nexport function isContinuumDaoSupportedChainId(chainId: number): boolean {\n return continuumDaoDeployment(chainId) != null\n}\n\nexport function ctmTokenAddressOnEvmChain(chainId: number): `0x${string}` | null {\n const ctm = continuumDaoDeployment(chainId)?.ctm\n return ctm && isConfiguredAddress(ctm) ? getAddress(ctm) : null\n}\n\nexport function votingEscrowAddressOnEvmChain(chainId: number): `0x${string}` | null {\n const ve = continuumDaoDeployment(chainId)?.votingEscrow\n return ve && isConfiguredAddress(ve) ? getAddress(ve) : null\n}\n\nexport function votingEscrowMarketplaceAddressOnEvmChain(chainId: number): `0x${string}` | null {\n if (chainId !== CONTINUUM_DAO_LINEA_CHAIN_ID) return null\n return VOTING_ESCROW_MARKETPLACE_LINEA_ADDRESS\n}\n\nexport function governorAddressOnEvmChain(chainId: number): `0x${string}` | null {\n const gov = continuumDaoDeployment(chainId)?.governor\n return gov && isConfiguredAddress(gov) ? getAddress(gov) : null\n}\n\nfunction sameAddr(a: string, b: string): boolean {\n try {\n return getAddress(a) === getAddress(b)\n } catch {\n return false\n }\n}\n\nexport function isContinuumDaoCtmOnAssetsChain(assetsChainId: string, contractAddress: string): boolean {\n const n = parseEvmChainIdToNumber(assetsChainId)\n if (Number.isNaN(n) || n < 0) return false\n const expected = ctmTokenAddressOnEvmChain(n)\n if (!expected) return false\n return sameAddr(contractAddress, expected)\n}\n\nexport function isContinuumDaoVeCtmOnAssetsChain(assetsChainId: string, contractAddress: string): boolean {\n const n = parseEvmChainIdToNumber(assetsChainId)\n if (Number.isNaN(n) || n < 0) return false\n const expected = votingEscrowAddressOnEvmChain(n)\n if (!expected) return false\n return sameAddr(contractAddress, expected)\n}\n\nexport function isVotingEscrowContinuumName(name?: string | null): boolean {\n return (name ?? '').trim() === VECTM_TOKEN_NAME\n}\n\nexport function isCtmTokenSymbol(symbol?: string | null): boolean {\n return (symbol ?? '').trim().toUpperCase() === CTM_TOKEN_SYMBOL\n}\n\nexport type ContinuumDaoDefaultAsset = {\n chainId: number\n tokenType: 'CTMERC20' | 'ERC721'\n contractAddress: `0x${string}`\n name: string\n symbol: string\n decimals?: number\n}\n\n/** Default registry rows when the configured address is non-zero. */\nexport function listContinuumDaoDefaultAssets(): ContinuumDaoDefaultAsset[] {\n const out: ContinuumDaoDefaultAsset[] = []\n for (const chainId of [\n CONTINUUM_DAO_LINEA_CHAIN_ID,\n CONTINUUM_DAO_LINEA_SEPOLIA_CHAIN_ID,\n CONTINUUM_DAO_ETHEREUM_CHAIN_ID,\n ]) {\n const dep = continuumDaoDeployment(chainId)\n if (!dep) continue\n if (isConfiguredAddress(dep.ctm)) {\n out.push({\n chainId,\n tokenType: 'CTMERC20',\n contractAddress: getAddress(dep.ctm),\n name: CTM_TOKEN_NAME,\n symbol: CTM_TOKEN_SYMBOL,\n decimals: CTM_TOKEN_DECIMALS,\n })\n }\n if (isContinuumDaoLockChain(chainId) && isConfiguredAddress(dep.votingEscrow)) {\n out.push({\n chainId,\n tokenType: 'ERC721',\n contractAddress: getAddress(dep.votingEscrow),\n name: VECTM_TOKEN_NAME,\n symbol: VECTM_TOKEN_SYMBOL,\n })\n }\n }\n return out\n}\n","import { http, type Transport } from 'viem'\n\n/**\n * Optional browser transport for protocol `eth_*` reads (allowance, decimals, spoke views).\n * Node / MCP leave this unset and use viem `http(rpcUrl)`.\n */\nlet evmRpcTransportFactory: ((rpcUrl: string) => Transport) | undefined\n\nexport function setDefiEvmRpcTransportFactory(factory: ((rpcUrl: string) => Transport) | undefined): void {\n evmRpcTransportFactory = factory\n}\n\nexport function getDefiEvmRpcTransportFactory(): ((rpcUrl: string) => Transport) | undefined {\n return evmRpcTransportFactory\n}\n\n/** Same-origin proxy in the browser when the app has called {@link setDefiEvmRpcTransportFactory}. */\nexport function defiEvmTransport(rpcUrl: string, opts?: Parameters<typeof http>[1]): Transport {\n const url = rpcUrl.trim()\n return evmRpcTransportFactory?.(url) ?? http(url, opts)\n}\n","/** Merge user purpose text with an optional batch / protocol suffix. */\nexport function mergePurposeText(purposeText: string | undefined, purposeSuffix?: string): string {\n const t = (purposeText ?? '').trim()\n const suffix = (purposeSuffix ?? '').trim()\n if (!suffix) return t\n return t ? `${t}\\n\\n${suffix}` : suffix\n}\n","import type { ChainCategory, MultisignBuildResult, KeyGenSubset } from './types.js'\nimport { getClientIdFromKeyGenResult } from '@continuumdao/continuum-node-sdk'\nimport { mergePurposeText } from './purpose.js'\n\nexport interface MultisignLeg {\n msgHash: string\n msgRaw: string\n destinationAddress: string\n signatureText: string\n audit: Record<string, unknown>\n feeSnapshot: Record<string, unknown>\n proposalTxParams?: Record<string, unknown>\n /** Payable value wei string for first leg only when relevant */\n valueWei?: bigint\n}\n\nexport interface ChainCategoryBuildInput {\n keyGen: KeyGenSubset\n purposeText: string\n purposeSuffix?: string\n destinationChainID: string\n legs: MultisignLeg[]\n extraJSON?: Record<string, unknown>\n /** Top-level destination address (first leg destination if omitted) */\n destinationAddress?: string\n /** Unix seconds (UTC) for mpc-auth multiSignRequest expiryDate. */\n expiryDate?: number\n}\n\nexport interface ChainCategoryModule {\n category: ChainCategory\n finalizeMultisign(input: ChainCategoryBuildInput): MultisignBuildResult\n}\n\n/**\n * Assemble mpc-auth `bodyForSign` from category-built legs.\n * Supports single-tx and batch (messageHashes / messageRawBatch / proposalTxParams).\n */\nexport function finalizeMultisign(input: ChainCategoryBuildInput): MultisignBuildResult {\n const { keyGen, destinationChainID, legs } = input\n if (legs.length === 0) {\n throw new Error('finalizeMultisign requires at least one leg')\n }\n\n const ph = (keyGen.pubkeyhex ?? '').trim()\n if (!ph) throw new Error('keyGen pubKey (pubkeyhex) is required')\n\n const keyList = keyGen.keylist ?? []\n const clientId = getClientIdFromKeyGenResult(keyGen)\n const first = legs[0]!\n\n const messageHashes = legs.map((l) => l.msgHash)\n const messageRawBatch = legs.map((l) => l.msgRaw)\n const batchMeta = legs.map((l) => ({\n destinationAddress: l.destinationAddress,\n signatureText: l.signatureText,\n ...l.audit,\n }))\n\n const proposalTxParams = legs\n .map((l) => l.proposalTxParams)\n .filter((p): p is Record<string, unknown> => p != null && typeof p === 'object')\n\n const extraPayload: Record<string, unknown> = {\n batchMeta,\n ...(input.extraJSON ?? {}),\n }\n const extraJSON = JSON.stringify(extraPayload, (_, v) => (typeof v === 'bigint' ? v.toString() : v))\n\n const bodyForSign: Record<string, unknown> = {\n keyList,\n pubKey: ph,\n msgHash: messageHashes[0],\n msgRaw: first.msgRaw,\n destinationChainID,\n destinationAddress: input.destinationAddress ?? first.destinationAddress,\n extraJSON,\n signatureText: first.signatureText,\n purpose: mergePurposeText(input.purposeText, input.purposeSuffix),\n ...first.feeSnapshot,\n }\n\n if (legs.length > 1) {\n bodyForSign.messageHashes = messageHashes\n bodyForSign.messageRawBatch = messageRawBatch\n }\n\n if (proposalTxParams.length > 0) {\n bodyForSign.proposalTxParams = proposalTxParams\n }\n\n const valueWei = first.valueWei\n if (valueWei != null && valueWei > 0n) {\n bodyForSign.value = valueWei.toString()\n }\n\n if (clientId) bodyForSign.clientId = clientId\n\n if (input.expiryDate != null && input.expiryDate > 0) {\n bodyForSign.expiryDate = Math.floor(input.expiryDate)\n }\n\n return { bodyForSign, messageToSign: JSON.stringify(bodyForSign) }\n}\n\nexport const coreChainCategoryModule: ChainCategoryModule = {\n category: 'evm',\n finalizeMultisign,\n}\n","import { gasLimitFromEstimateAndChainConfig } from '@continuumdao/continuum-node-sdk'\n\n/** Curve router swap gas: chain cap when set, else 12/10 estimate bump. */\nexport function routerSwapGasLimitFromEstimate(\n estimatedGas: bigint,\n chainGasLimit?: number | null,\n): bigint {\n if (chainGasLimit != null && Number.isFinite(chainGasLimit) && chainGasLimit > 0) {\n return gasLimitFromEstimateAndChainConfig(estimatedGas, chainGasLimit)\n }\n return (estimatedGas * 12n + 9n) / 10n\n}\n","import { keccak256, createPublicClient, defineChain, serializeTransaction, getAddress, parseGwei, type Address, type PublicClient } from 'viem'\nimport { defiEvmTransport } from '../../core/defiEvmClient.js'\nimport type { MultisignBuildResult } from '../../core/types.js'\nimport { finalizeMultisign, type MultisignLeg } from '../../core/envelope.js'\nimport type { KeyGenSubset } from '../../core/types.js'\nimport {\n fetchChainFeeParams,\n alignEip1559FeesWithLatestBase,\n gweiToDecimalString,\n gasLimitFromEstimateAndChainConfig,\n proposalTxParamsToFeeSnapshot,\n type ProposalTxParams,\n} from '@continuumdao/continuum-node-sdk'\nimport { routerSwapGasLimitFromEstimate } from './routerSwapGas.js'\nimport type { EvmProtocolContext, EvmTxStep } from './types.js'\n\nexport type EvmBatchMetaBuilder = (args: {\n step: EvmTxStep\n index: number\n gasLimit: bigint\n}) => Record<string, unknown>\n\nexport type EvmBuildBatchArgs = {\n context: EvmProtocolContext\n steps: EvmTxStep[]\n purposeSuffix?: string\n buildBatchMeta: EvmBatchMetaBuilder\n /** First leg msgRaw without 0x prefix; defaults to first step calldata */\n firstMsgRawNo0x?: string\n destinationAddress?: Address\n /** Top-level `value` on bodyForSign when the payable amount is not on the first leg */\n payableValueWei?: bigint\n resolveGasLimit?: (args: {\n step: EvmTxStep\n index: number\n estimatedGas: bigint\n publicClient: PublicClient\n }) => Promise<bigint> | bigint\n /** Override default `estimateGas` (e.g. trade-API gas, skip post-approve deposit estimate). */\n estimateGasForStep?: (args: {\n step: EvmTxStep\n index: number\n publicClient: PublicClient\n executor: Address\n }) => Promise<bigint> | bigint\n}\n\n/**\n * Build unsigned EVM txs, estimate gas, serialize, hash — then assemble mpc-auth body via core envelope.\n */\nexport async function buildEvmMultisignBatch(args: EvmBuildBatchArgs): Promise<MultisignBuildResult> {\n const { context, steps } = args\n const {\n chainId,\n rpcUrl,\n executorAddress,\n chainDetail,\n useCustomGas,\n customGasChainDetails,\n keyGen,\n purposeText,\n } = context\n\n if (steps.length === 0) throw new Error('buildEvmMultisignBatch requires at least one step')\n\n const ch = defineChain({\n id: chainId,\n name: 'Destination',\n nativeCurrency: { decimals: 18, name: 'Ether', symbol: 'ETH' },\n rpcUrls: { default: { http: [rpcUrl] } },\n })\n const publicClient = createPublicClient({ chain: ch, transport: defiEvmTransport(rpcUrl) })\n\n const feeParams = await fetchChainFeeParams(rpcUrl, chainId)\n const legacy = Boolean(chainDetail?.legacy) || !feeParams.isEip1559\n const latestBaseFeeWei = !legacy\n ? ((await publicClient.getBlock({ blockTag: 'latest' })).baseFeePerGas ?? 0n)\n : 0n\n\n const gasLimitConfig =\n useCustomGas && chainDetail?.gasLimit != null ? Number(chainDetail.gasLimit) : undefined\n const chainGasLimitRouter =\n chainDetail?.gasLimit != null &&\n Number.isFinite(Number(chainDetail.gasLimit)) &&\n Number(chainDetail.gasLimit) > 0\n ? Number(chainDetail.gasLimit)\n : undefined\n const gasFeeMultiplier =\n useCustomGas && chainDetail?.gasMultiplier != null ? Number(chainDetail.gasMultiplier) : undefined\n\n const executor = getAddress(executorAddress)\n const baseNonce = await publicClient.getTransactionCount({ address: executor, blockTag: 'pending' })\n\n const legs: MultisignLeg[] = []\n\n for (let i = 0; i < steps.length; i++) {\n const step = steps[i]!\n const currentNonce = baseNonce + i\n\n let estimatedGas: bigint\n if (args.estimateGasForStep) {\n estimatedGas = await args.estimateGasForStep({ step, index: i, publicClient, executor })\n } else {\n try {\n estimatedGas = await publicClient.estimateGas({\n to: step.to,\n data: step.data,\n value: step.value,\n account: executor,\n })\n } catch {\n estimatedGas = step.fallbackGas ?? 100_000n\n }\n }\n\n let gasLimitI: bigint\n if (args.resolveGasLimit) {\n gasLimitI = await args.resolveGasLimit({ step, index: i, estimatedGas, publicClient })\n } else if (step.routerSwap) {\n gasLimitI = routerSwapGasLimitFromEstimate(estimatedGas, chainGasLimitRouter)\n } else {\n gasLimitI = useCustomGas\n ? gasLimitFromEstimateAndChainConfig(estimatedGas, gasLimitConfig)\n : estimatedGas\n }\n\n let proposalTxParams: ProposalTxParams\n let feeSnapshot: Record<string, unknown>\n let serialized: `0x${string}`\n\n if (legacy) {\n let gasPriceWei = await publicClient.getGasPrice()\n if (useCustomGas && gasFeeMultiplier != null && gasFeeMultiplier > 0) {\n gasPriceWei = (gasPriceWei * BigInt(100 + gasFeeMultiplier)) / 100n\n }\n if (useCustomGas && chainDetail?.gasPrice != null && chainDetail.gasPrice > 0) {\n const configured = parseGwei(gweiToDecimalString(Number(chainDetail.gasPrice)))\n if (configured > gasPriceWei) gasPriceWei = configured\n }\n serialized = serializeTransaction({\n type: 'legacy',\n to: step.to,\n data: step.data,\n value: step.value,\n gas: gasLimitI,\n gasPrice: gasPriceWei,\n nonce: currentNonce,\n chainId,\n })\n proposalTxParams = {\n nonce: currentNonce,\n gasLimit: gasLimitI.toString(),\n txType: 'legacy',\n gasPrice: gasPriceWei.toString(),\n }\n feeSnapshot = proposalTxParamsToFeeSnapshot(proposalTxParams)\n } else {\n const fetchedBase = feeParams.baseFeeGwei ?? 0\n const fetchedPriority = feeParams.priorityFeeGwei ?? 0\n const configuredBase =\n useCustomGas && chainDetail?.baseFee != null ? Number(chainDetail.baseFee) : 0\n const configuredPriority =\n useCustomGas && chainDetail?.priorityFee != null ? Number(chainDetail.priorityFee) : 0\n const effectiveBaseFeeGwei = Math.max(fetchedBase, configuredBase)\n const effectivePriorityFeeGwei = Math.max(fetchedPriority, configuredPriority)\n const baseFeeMultiplierPct =\n useCustomGas && chainDetail?.baseFeeMultiplier != null\n ? Math.max(100, Number(chainDetail.baseFeeMultiplier))\n : 100\n const baseComponentGwei = (effectiveBaseFeeGwei * baseFeeMultiplierPct) / 100\n const maxFeePerGasGwei = baseComponentGwei + effectivePriorityFeeGwei\n let maxPriorityFeePerGas =\n effectivePriorityFeeGwei > 0\n ? parseGwei(gweiToDecimalString(effectivePriorityFeeGwei))\n : parseGwei('1')\n let maxFeePerGas = parseGwei(gweiToDecimalString(maxFeePerGasGwei))\n if (useCustomGas && gasFeeMultiplier != null && gasFeeMultiplier > 0) {\n maxPriorityFeePerGas = (maxPriorityFeePerGas * BigInt(100 + gasFeeMultiplier)) / 100n\n maxFeePerGas = (maxFeePerGas * BigInt(100 + gasFeeMultiplier)) / 100n\n }\n ;({ maxFeePerGas, maxPriorityFeePerGas } = alignEip1559FeesWithLatestBase(\n maxFeePerGas,\n maxPriorityFeePerGas,\n latestBaseFeeWei,\n ))\n serialized = serializeTransaction({\n type: 'eip1559',\n to: step.to,\n data: step.data,\n value: step.value,\n gas: gasLimitI,\n maxFeePerGas,\n maxPriorityFeePerGas,\n nonce: currentNonce,\n chainId,\n })\n proposalTxParams = {\n nonce: currentNonce,\n gasLimit: gasLimitI.toString(),\n txType: 'eip1559',\n maxFeePerGas: maxFeePerGas.toString(),\n maxPriorityFeePerGas: maxPriorityFeePerGas.toString(),\n }\n feeSnapshot = i === 0 ? proposalTxParamsToFeeSnapshot(proposalTxParams) : {}\n }\n\n const h = keccak256(serialized)\n const msgHash = h.startsWith('0x') ? h.slice(2) : h\n\n const batchMetaExtra = args.buildBatchMeta({ step, index: i, gasLimit: gasLimitI })\n\n legs.push({\n msgHash,\n msgRaw: i === 0 && args.firstMsgRawNo0x != null ? args.firstMsgRawNo0x : serialized,\n destinationAddress: step.to,\n signatureText:\n typeof batchMetaExtra.signatureText === 'string'\n ? batchMetaExtra.signatureText\n : JSON.stringify(batchMetaExtra.signatureText ?? {}),\n audit: batchMetaExtra,\n feeSnapshot: i === 0 ? feeSnapshot : {},\n proposalTxParams,\n valueWei: i === 0 ? step.value : undefined,\n })\n\n if (i === 0 && args.firstMsgRawNo0x != null) {\n legs[0]!.msgRaw = args.firstMsgRawNo0x\n }\n }\n\n const extraJSON: Record<string, unknown> = {}\n if (useCustomGas && customGasChainDetails && Object.keys(customGasChainDetails).length > 0) {\n extraJSON.customGasChainDetails = customGasChainDetails\n }\n\n const result = finalizeMultisign({\n keyGen: keyGen as KeyGenSubset,\n purposeText,\n purposeSuffix: args.purposeSuffix,\n destinationChainID: String(chainId),\n destinationAddress: args.destinationAddress ?? steps[0]!.to,\n legs,\n extraJSON: Object.keys(extraJSON).length > 0 ? extraJSON : undefined,\n expiryDate: context.expiryDate,\n })\n const pv = args.payableValueWei\n if (pv != null && pv > 0n) {\n result.bodyForSign.value = pv.toString()\n }\n return result\n}\n\nexport const evmChainCategoryModule = {\n category: 'evm' as const,\n finalizeMultisign,\n buildEvmMultisignBatch,\n}\n","import { hashTypedData, stringToHex, type TypedDataDomain } from 'viem'\nimport type { KeyGenSubset, MultisignBuildResult } from './types.js'\nimport { finalizeMultisign } from './envelope.js'\n\nexport const EIP712_SIGN_REQUEST_KIND = 'eip712' as const\n\nexport type Eip712TypedDataField = { name: string; type: string }\n\nexport type Eip712TypedDataPayload = {\n domain: TypedDataDomain\n types: Record<string, readonly Eip712TypedDataField[] | Eip712TypedDataField[]>\n primaryType: string\n message: Record<string, unknown>\n}\n\nexport type Eip712MultisignDelivery = Record<string, unknown> & { kind: string }\n\nexport type BuildEip712MultisignLeg = {\n typedData: Eip712TypedDataPayload\n delivery: Eip712MultisignDelivery\n audit?: Record<string, unknown>\n}\n\nexport type BuildEip712MultisignArgs = {\n keyGen: KeyGenSubset\n purposeText: string\n purposeSuffix?: string\n /** Chain id stored on the sign request (protocol context; may differ from EIP-712 domain chainId). */\n destinationChainID: string\n destinationAddress: string\n legs: readonly BuildEip712MultisignLeg[]\n expiryDate?: number\n}\n\nfunction msgHashNo0x(digest: `0x${string}`): string {\n return digest.startsWith('0x') ? digest.slice(2) : digest\n}\n\nfunction eip712SignatureText(domain: TypedDataDomain, primaryType: string): string {\n return JSON.stringify({\n kind: 'EIP-712',\n ...(typeof domain.name === 'string' ? { name: domain.name } : {}),\n primaryType,\n })\n}\n\nfunction jsonStringifyForAudit(value: unknown): string {\n return JSON.stringify(value, (_, v) => (typeof v === 'bigint' ? v.toString() : v))\n}\n\nfunction eip712LegEnvelope(\n typedData: Eip712TypedDataPayload,\n delivery: Eip712MultisignDelivery,\n digest: `0x${string}`,\n): Record<string, unknown> {\n return {\n version: 1,\n digest,\n domain: typedData.domain,\n types: typedData.types,\n primaryType: typedData.primaryType,\n message: typedData.message,\n delivery,\n }\n}\n\nfunction eip712MsgRawHex(envelope: Record<string, unknown>): string {\n return stringToHex(jsonStringifyForAudit(envelope))\n}\n\n/**\n * Build an mpc-auth multiSignRequest body for one or more EIP-712 digests (no EVM tx broadcast).\n * `extraJSON.eip712` is always an array. N=1 uses `msgHash`/`msgRaw`; N>=2 uses `messageHashes`/`messageRawBatch`.\n */\nexport function buildEip712Multisign(args: BuildEip712MultisignArgs): MultisignBuildResult {\n if (args.legs.length < 1) {\n throw new Error('buildEip712Multisign requires at least one leg')\n }\n\n const eip712: Record<string, unknown>[] = []\n const legs = args.legs.map((leg) => {\n const digest = hashTypedData({\n domain: leg.typedData.domain,\n types: leg.typedData.types,\n primaryType: leg.typedData.primaryType,\n message: leg.typedData.message,\n })\n const envelope = eip712LegEnvelope(leg.typedData, leg.delivery, digest)\n eip712.push(envelope)\n return {\n msgHash: msgHashNo0x(digest),\n msgRaw: eip712MsgRawHex(envelope),\n destinationAddress: args.destinationAddress,\n signatureText: eip712SignatureText(leg.typedData.domain, leg.typedData.primaryType),\n audit: {\n kind: 'EIP712',\n primaryType: leg.typedData.primaryType,\n deliveryKind: leg.delivery.kind,\n ...(leg.audit ?? {}),\n },\n feeSnapshot: {},\n }\n })\n\n return finalizeMultisign({\n keyGen: args.keyGen,\n purposeText: args.purposeText,\n purposeSuffix: args.purposeSuffix,\n destinationChainID: args.destinationChainID,\n destinationAddress: args.destinationAddress,\n extraJSON: {\n signRequestKind: EIP712_SIGN_REQUEST_KIND,\n eip712,\n },\n expiryDate: args.expiryDate,\n legs,\n })\n}\n","import { getAddress } from 'viem'\nimport { buildEip712Multisign } from '../../../core/eip712Multisign.js'\nimport type { KeyGenSubset } from '../../../core/types.js'\n\nconst DEFAULT_FORUM_URL = 'https://forum.continuumdao.org'\n\nexport const FORUM_GOVERNANCE_SECTIONS = [\n 'decision',\n 'election',\n 'treasury',\n 'constitution',\n 'admin',\n] as const\n\nexport type ForumGovernanceSection = (typeof FORUM_GOVERNANCE_SECTIONS)[number]\n\nexport const FORUM_IDEA_SECTION = 'ideas' as const\n\nexport const PROPOSAL_TYPE_TO_FORUM_SECTION: Record<string, ForumGovernanceSection> = {\n Admin: 'admin',\n Constitution: 'constitution',\n Decision: 'decision',\n Election: 'election',\n Treasury: 'treasury',\n}\n\nconst IDEA_SECTION_ALIASES = new Set(['ideas', 'ideas-suggestions', 'suggestions'])\n\nexport function expectedForumSectionForProposalType(typeLabel: string): ForumGovernanceSection | null {\n return PROPOSAL_TYPE_TO_FORUM_SECTION[typeLabel] ?? null\n}\n\nexport function isForumIdeaSection(section?: string): boolean {\n return IDEA_SECTION_ALIASES.has(String(section || '').toLowerCase())\n}\n\nexport function applyForumSectionCheck<T extends { typeLabel: string; briefing: string; risks: string[] }>(\n out: T,\n section: string | null | undefined,\n cid?: number | null,\n): T & { forumSection: string | null; forumCid: number | null } {\n const forumSection = section?.trim() || null\n const forumCid = cid != null && Number(cid) > 0 ? Number(cid) : null\n const expected = expectedForumSectionForProposalType(out.typeLabel)\n const added: string[] = []\n if (forumSection === FORUM_IDEA_SECTION || isForumIdeaSection(forumSection ?? undefined)) {\n added.push(\n 'Forum thread is in Ideas & Suggestions, not a Governance proposal category. Ideas are discussion only and must not be used as forumKey.',\n )\n } else if (expected && forumSection && forumSection !== expected) {\n added.push(`Forum section is ${forumSection} but proposal type is ${out.typeLabel} (expected ${expected}).`)\n }\n const extraLine =\n forumSection === FORUM_IDEA_SECTION || isForumIdeaSection(forumSection ?? undefined)\n ? `Forum section: ideas (mismatch — expected ${expected ?? 'a Governance category'}).`\n : expected && forumSection && forumSection !== expected\n ? `Forum section: ${forumSection} (mismatch — expected ${expected}).`\n : forumSection\n ? `Forum section: ${forumSection}`\n : null\n const lines = out.briefing.split('\\n')\n if (extraLine) {\n const forumLine = lines.findIndex((l) => l.startsWith('Forum:'))\n if (forumLine >= 0) lines.splice(forumLine + 1, 0, extraLine)\n else lines.splice(1, 0, extraLine)\n }\n if (added.length) {\n if (!lines.includes('Risks:')) lines.push('Risks:')\n for (const r of added) lines.push(`- ${r}`)\n }\n return { ...out, briefing: lines.join('\\n'), risks: [...out.risks, ...added], forumSection, forumCid }\n}\n\nexport const FORUM_LOGIN_DELIVERY_KIND = 'forumLogin' as const\n\nexport function continuumDaoForumUrl(explicit?: string): string {\n const raw =\n explicit?.trim() ||\n (typeof process !== 'undefined' ? process.env.FORUM_URL || process.env.NEXT_PUBLIC_FORUM_URL : '') ||\n DEFAULT_FORUM_URL\n return raw.replace(/\\/+$/, '')\n}\n\n/** Homepage or empty string is refused. A proposal must point at a created /topic/:tid or /t/:tid. */\nexport function assertContinuumDaoForumTopicKey(forumKey: string, forumUrl?: string): string {\n const raw = String(forumKey || '').trim()\n if (!raw) {\n throw new Error(\n 'A forum thread is required. Create one with ctm_continuum_dao_forum_create_topic in a Governance section (decision / election / treasury / constitution / admin) before propose or register_proposal. Ideas & Suggestions threads are not valid forumKey values.',\n )\n }\n let url: URL\n try {\n url = new URL(raw)\n } catch {\n throw new Error('forumKey must be a full forum topic URL (https://forum.continuumdao.org/topic/123).')\n }\n const expected = new URL(`${continuumDaoForumUrl(forumUrl)}/`)\n if (url.host !== expected.host) {\n throw new Error(`forumKey must be on ${expected.host}.`)\n }\n if (!/\\/(?:topic|t)\\/\\d+/.test(url.pathname)) {\n throw new Error('forumKey must be a created thread (/topic/:tid or /t/:tid), not the forum homepage.')\n }\n return raw.replace(/\\/+$/, '')\n}\n\nfunction forumError(body: unknown, status: number): Error {\n const o = body && typeof body === 'object' ? (body as Record<string, unknown>) : {}\n const st = o.status && typeof o.status === 'object' ? (o.status as Record<string, unknown>) : null\n const msg = (st && typeof st.message === 'string' && st.message) ||\n (typeof o.message === 'string' && o.message) ||\n `forum HTTP ${status}`\n return new Error(msg)\n}\n\nasync function forumFetch(path: string, init: RequestInit & { forumUrl?: string; ticket?: string } = {}) {\n const url = `${continuumDaoForumUrl(init.forumUrl)}${path}`\n const headers: Record<string, string> = {\n Accept: 'application/json',\n ...(init.body ? { 'Content-Type': 'application/json' } : {}),\n }\n if (init.ticket) {\n headers.Authorization = `Bearer ${init.ticket}`\n }\n const res = await fetch(url, {\n method: init.method || 'GET',\n headers,\n body: init.body,\n cache: 'no-store',\n })\n const body = await res.json().catch(() => ({}))\n if (!res.ok) {\n throw forumError(body, res.status)\n }\n return body\n}\n\nexport async function continuumDaoForumResolve(args: { url?: string; tid?: string | number; forumUrl?: string }) {\n const qs = new URLSearchParams()\n if (args.url) qs.set('url', String(args.url))\n if (args.tid != null) qs.set('tid', String(args.tid))\n return forumFetch(`/api/continuum/forum/resolve?${qs}`, { forumUrl: args.forumUrl })\n}\n\nexport async function continuumDaoForumFetchThread(args: {\n url?: string\n tid?: string | number\n index?: number\n start?: number\n limit?: number\n forumUrl?: string\n}) {\n const qs = new URLSearchParams()\n if (args.url) qs.set('url', String(args.url))\n if (args.tid != null) qs.set('tid', String(args.tid))\n if (args.index != null) qs.set('index', String(args.index))\n if (args.start != null) qs.set('start', String(args.start))\n if (args.limit != null) qs.set('limit', String(args.limit))\n return forumFetch(`/api/continuum/forum/thread?${qs}`, { forumUrl: args.forumUrl })\n}\n\nexport async function continuumDaoForumReplyCount(args: { url?: string; tid?: string | number; forumUrl?: string }) {\n const qs = new URLSearchParams()\n if (args.url) qs.set('url', String(args.url))\n if (args.tid != null) qs.set('tid', String(args.tid))\n return forumFetch(`/api/continuum/forum/thread/replies?${qs}`, { forumUrl: args.forumUrl })\n}\n\nexport async function continuumDaoForumFetchPost(args: { pid: string | number; forumUrl?: string }) {\n return forumFetch(`/api/continuum/forum/post?pid=${encodeURIComponent(String(args.pid))}`, {\n forumUrl: args.forumUrl,\n })\n}\n\nfunction assertForumHours(hours?: number) {\n if (hours != null && (!Number.isFinite(hours) || hours <= 0)) {\n throw new Error('hours must be a positive number')\n }\n}\n\nexport function assertContinuumDaoForumSearchInput(args: {\n query?: string\n hours?: number\n since?: string\n}) {\n assertForumHours(args.hours)\n if (!args.query?.trim() && args.hours == null && !args.since?.trim()) {\n throw new Error('Provide query and/or a time filter (hours or since)')\n }\n}\n\nexport function assertContinuumDaoForumRecentInput(args: { hours?: number; since?: string }) {\n assertForumHours(args.hours)\n if (args.hours == null && !args.since?.trim()) {\n throw new Error('Provide a time filter (hours or since)')\n }\n}\n\n/** Search thread titles (original posts) and post bodies. Returns `{ id, title, username, timestamp, createdAt }` (`id` is pid). */\nexport async function continuumDaoForumSearch(args: {\n query?: string\n hours?: number\n since?: string\n start?: number\n limit?: number\n forumUrl?: string\n}) {\n assertContinuumDaoForumSearchInput(args)\n const qs = new URLSearchParams()\n if (args.query?.trim()) qs.set('query', args.query.trim())\n if (args.hours != null) qs.set('hours', String(args.hours))\n if (args.since?.trim()) qs.set('since', args.since.trim())\n if (args.start != null) qs.set('start', String(args.start))\n if (args.limit != null) qs.set('limit', String(args.limit))\n return forumFetch(`/api/continuum/forum/search?${qs}`, { forumUrl: args.forumUrl })\n}\n\n/** Newest readable posts across the whole forum. Returns `{ id, title, username, timestamp, createdAt }`. */\nexport async function continuumDaoForumRecent(args: {\n hours?: number\n since?: string\n start?: number\n limit?: number\n ticket?: string\n forumUrl?: string\n}) {\n assertContinuumDaoForumRecentInput(args)\n const qs = new URLSearchParams()\n if (args.hours != null) qs.set('hours', String(args.hours))\n if (args.since?.trim()) qs.set('since', args.since.trim())\n if (args.start != null) qs.set('start', String(args.start))\n if (args.limit != null) qs.set('limit', String(args.limit))\n return forumFetch(`/api/continuum/forum/recent?${qs}`, {\n forumUrl: args.forumUrl,\n ticket: args.ticket,\n })\n}\n\nexport function assertContinuumDaoForumDeleteInput(args: {\n pid?: string | number\n tid?: string | number\n url?: string\n username?: string\n hours?: number\n since?: string\n ticket?: string\n}) {\n if (!args.ticket?.trim()) {\n throw new Error('ticket is required to delete forum posts')\n }\n assertForumHours(args.hours)\n const hasPost = args.pid != null && String(args.pid).trim() !== ''\n const hasThread = Boolean(args.url?.trim() || (args.tid != null && String(args.tid).trim() !== ''))\n const hasUser = Boolean(args.username?.trim())\n if (Number(hasPost) + Number(hasThread) + Number(hasUser) !== 1) {\n throw new Error('Provide exactly one of pid, tid/url, or username')\n }\n}\n\n/** Admin/moderator soft-delete. Recency (`hours` / `since`) is optional; default is all. */\nexport async function continuumDaoForumDelete(args: {\n pid?: string | number\n tid?: string | number\n url?: string\n username?: string\n hours?: number\n since?: string\n ticket?: string\n forumUrl?: string\n}) {\n assertContinuumDaoForumDeleteInput(args)\n return forumFetch('/api/continuum/forum/delete', {\n method: 'POST',\n forumUrl: args.forumUrl,\n ticket: args.ticket,\n body: JSON.stringify({\n pid: args.pid,\n tid: args.tid,\n url: args.url,\n username: args.username,\n hours: args.hours,\n since: args.since,\n }),\n })\n}\n\nexport async function continuumDaoForumUserPostIds(args: {\n username: string\n start?: number\n limit?: number\n forumUrl?: string\n}) {\n const qs = new URLSearchParams({ username: args.username })\n if (args.start != null) qs.set('start', String(args.start))\n if (args.limit != null) qs.set('limit', String(args.limit))\n return forumFetch(`/api/continuum/forum/user/posts?${qs}`, { forumUrl: args.forumUrl })\n}\n\nexport async function continuumDaoForumReply(args: {\n url?: string\n tid?: string | number\n content: string\n toPid?: number\n ticket?: string\n forumUrl?: string\n}) {\n return forumFetch('/api/continuum/forum/reply', {\n method: 'POST',\n forumUrl: args.forumUrl,\n ticket: args.ticket,\n body: JSON.stringify({\n url: args.url,\n tid: args.tid,\n content: args.content,\n toPid: args.toPid,\n }),\n })\n}\n\nexport async function continuumDaoForumReact(args: {\n pid: string | number\n emoji: string\n ticket?: string\n forumUrl?: string\n}) {\n return forumFetch('/api/continuum/forum/react', {\n method: 'POST',\n forumUrl: args.forumUrl,\n ticket: args.ticket,\n body: JSON.stringify({ pid: args.pid, emoji: args.emoji }),\n })\n}\n\nexport async function continuumDaoForumCreateTopic(args: {\n section?: string\n cid?: number\n title: string\n content: string\n ticket?: string\n forumUrl?: string\n}) {\n if (isForumIdeaSection(args.section)) {\n throw new Error(\n 'Ideas & Suggestions is not a proposal category. Use ctm_continuum_dao_forum_create_idea for discussion. Formal proposals must use decision, election, treasury, constitution, or admin.',\n )\n }\n return forumFetch('/api/continuum/forum/topic', {\n method: 'POST',\n forumUrl: args.forumUrl,\n ticket: args.ticket,\n body: JSON.stringify({\n section: args.section,\n cid: args.cid,\n title: args.title,\n content: args.content,\n }),\n })\n}\n\n/** Informal Ideas & Suggestions post. Not a proposal and not a valid forumKey. */\nexport async function continuumDaoForumCreateIdea(args: {\n title: string\n content: string\n ticket?: string\n forumUrl?: string\n}) {\n return forumFetch('/api/continuum/forum/topic', {\n method: 'POST',\n forumUrl: args.forumUrl,\n ticket: args.ticket,\n body: JSON.stringify({\n section: FORUM_IDEA_SECTION,\n title: args.title,\n content: args.content,\n }),\n })\n}\n\nexport async function continuumDaoForumMe(args: { ticket?: string; forumUrl?: string } = {}) {\n return forumFetch('/api/continuum/forum/me', { forumUrl: args.forumUrl, ticket: args.ticket })\n}\n\nexport function assertContinuumDaoForumMarkReadInput(args: {\n ticket?: string\n tid?: string | number\n url?: string\n tids?: Array<string | number>\n all?: boolean\n}) {\n if (!args.ticket?.trim()) {\n throw new Error('ticket is required to mark forum topics read')\n }\n const all = Boolean(args.all)\n const one = Boolean(args.url?.trim() || (args.tid != null && String(args.tid).trim() !== ''))\n const many = Array.isArray(args.tids) && args.tids.length > 0\n if (Number(all) + Number(one) + Number(many) !== 1) {\n throw new Error('Provide exactly one of tid/url, tids, or all')\n }\n}\n\nexport async function continuumDaoForumUnread(args: {\n ticket?: string\n filter?: string\n start?: number\n limit?: number\n forumUrl?: string\n}) {\n if (!args.ticket?.trim()) {\n throw new Error('ticket is required to list unread forum topics')\n }\n const qs = new URLSearchParams()\n if (args.filter?.trim()) qs.set('filter', args.filter.trim())\n if (args.start != null) qs.set('start', String(args.start))\n if (args.limit != null) qs.set('limit', String(args.limit))\n const suffix = qs.toString() ? `?${qs}` : ''\n return forumFetch(`/api/continuum/forum/unread${suffix}`, {\n forumUrl: args.forumUrl,\n ticket: args.ticket,\n })\n}\n\nexport async function continuumDaoForumMarkRead(args: {\n ticket?: string\n tid?: string | number\n url?: string\n tids?: Array<string | number>\n all?: boolean\n forumUrl?: string\n}) {\n assertContinuumDaoForumMarkReadInput(args)\n return forumFetch('/api/continuum/forum/read', {\n method: 'POST',\n forumUrl: args.forumUrl,\n ticket: args.ticket,\n body: JSON.stringify({\n tid: args.tid,\n url: args.url,\n tids: args.tids,\n all: args.all,\n }),\n })\n}\n\nexport async function continuumDaoForumMarkUnread(args: {\n ticket?: string\n tid?: string | number\n url?: string\n forumUrl?: string\n}) {\n if (!args.ticket?.trim()) {\n throw new Error('ticket is required to mark a forum topic unread')\n }\n if (!args.url?.trim() && (args.tid == null || String(args.tid).trim() === '')) {\n throw new Error('Provide tid or url')\n }\n return forumFetch('/api/continuum/forum/unread', {\n method: 'POST',\n forumUrl: args.forumUrl,\n ticket: args.ticket,\n body: JSON.stringify({ tid: args.tid, url: args.url }),\n })\n}\n\nexport async function continuumDaoForumSections(args: { forumUrl?: string } = {}) {\n return forumFetch('/api/continuum/forum/sections', { forumUrl: args.forumUrl })\n}\n\nexport async function continuumDaoMpaListing(args: {\n kind: 'offer' | 'request' | 'directory' | 'opportunity'\n title?: string\n summary: string\n details: string\n capabilities: string[]\n expiresAt?: string\n contact?: string\n ticket?: string\n forumUrl?: string\n}) {\n if (!args.ticket?.trim()) {\n throw new Error('ticket is required to post an MPA listing')\n }\n return forumFetch('/api/continuum/forum/listing', {\n method: 'POST',\n forumUrl: args.forumUrl,\n ticket: args.ticket,\n body: JSON.stringify({\n kind: args.kind,\n title: args.title,\n summary: args.summary,\n details: args.details,\n capabilities: args.capabilities,\n expiresAt: args.expiresAt,\n contact: args.contact,\n }),\n })\n}\n\nexport async function continuumDaoMpaRetract(args: {\n url?: string\n tid?: string | number\n ticket?: string\n forumUrl?: string\n}) {\n if (!args.ticket?.trim()) {\n throw new Error('ticket is required to retract an MPA listing')\n }\n return forumFetch('/api/continuum/forum/retract', {\n method: 'POST',\n forumUrl: args.forumUrl,\n ticket: args.ticket,\n body: JSON.stringify({ url: args.url, tid: args.tid }),\n })\n}\n\nexport async function continuumDaoMpaFlag(args: {\n url?: string\n tid?: string | number\n reason: string\n ticket?: string\n forumUrl?: string\n}) {\n if (!args.ticket?.trim()) {\n throw new Error('ticket is required to flag an MPA listing')\n }\n return forumFetch('/api/continuum/forum/flag', {\n method: 'POST',\n forumUrl: args.forumUrl,\n ticket: args.ticket,\n body: JSON.stringify({ url: args.url, tid: args.tid, reason: args.reason }),\n })\n}\n\nexport async function continuumDaoMpaMailboxList(args: { ticket?: string; forumUrl?: string } = {}) {\n if (!args.ticket?.trim()) {\n throw new Error('ticket is required to list Agent Mail')\n }\n return forumFetch('/api/continuum/forum/mailbox', { forumUrl: args.forumUrl, ticket: args.ticket })\n}\n\nexport async function continuumDaoMpaMailboxOpen(args: {\n username: string\n content?: string\n ticket?: string\n forumUrl?: string\n}) {\n if (!args.ticket?.trim()) {\n throw new Error('ticket is required to open Agent Mail')\n }\n return forumFetch('/api/continuum/forum/mailbox', {\n method: 'POST',\n forumUrl: args.forumUrl,\n ticket: args.ticket,\n body: JSON.stringify({ username: args.username, content: args.content }),\n })\n}\n\nexport async function continuumDaoMpaMailboxSend(args: {\n username?: string\n url?: string\n tid?: string | number\n content: string\n ticket?: string\n forumUrl?: string\n}) {\n if (!args.ticket?.trim()) {\n throw new Error('ticket is required to send Agent Mail')\n }\n return forumFetch('/api/continuum/forum/mailbox/send', {\n method: 'POST',\n forumUrl: args.forumUrl,\n ticket: args.ticket,\n body: JSON.stringify({\n username: args.username,\n url: args.url,\n tid: args.tid,\n content: args.content,\n }),\n })\n}\n\nexport async function continuumDaoTechnocoreBind(args: {\n did: string\n signature: string\n ticket?: string\n forumUrl?: string\n}) {\n if (!args.ticket?.trim()) {\n throw new Error('ticket is required to bind a Technocore DID')\n }\n return forumFetch('/api/continuum/forum/technocore/bind', {\n method: 'POST',\n forumUrl: args.forumUrl,\n ticket: args.ticket,\n body: JSON.stringify({ did: args.did, signature: args.signature }),\n })\n}\n\nexport async function continuumDaoForumSignOut(args: { ticket?: string; forumUrl?: string } = {}) {\n if (!args.ticket?.trim()) {\n throw new Error('ticket is required to sign out')\n }\n return forumFetch('/api/continuum/eip712/logout', {\n method: 'POST',\n forumUrl: args.forumUrl,\n ticket: args.ticket,\n body: JSON.stringify({}),\n })\n}\n\nexport type ForumSignInEligible = {\n ok: boolean\n eligible: boolean\n address?: string\n reason?: string\n}\n\nexport async function continuumDaoForumSignInEligible(args: {\n address: string\n forumUrl?: string\n}): Promise<ForumSignInEligible> {\n const address = getAddress(args.address)\n const url = `${continuumDaoForumUrl(args.forumUrl)}/api/continuum/eip712/eligible?address=${encodeURIComponent(address)}`\n const res = await fetch(url, { headers: { Accept: 'application/json' }, cache: 'no-store' })\n const body = (await res.json().catch(() => ({}))) as Record<string, unknown>\n const st = body.status && typeof body.status === 'object' ? (body.status as Record<string, unknown>) : null\n const reason =\n (typeof body.reason === 'string' && body.reason) ||\n (st && typeof st.message === 'string' && st.message) ||\n undefined\n const ok = res.ok && Boolean(body.ok ?? body.eligible)\n return {\n ok,\n eligible: ok,\n address: typeof body.address === 'string' ? body.address : address,\n reason: ok ? undefined : reason || 'Address does not meet the veCTM threshold',\n }\n}\n\nexport async function continuumDaoForumSignInNonce(args: {\n address: string\n nodeKey?: string\n username?: string\n forumUrl?: string\n}) {\n const qs = new URLSearchParams({\n address: args.address,\n nodeKey: args.nodeKey || '',\n username: args.username || '',\n })\n return forumFetch(`/api/continuum/eip712/nonce?${qs}`, { forumUrl: args.forumUrl })\n}\n\nexport async function buildEvmMultisignBodyContinuumDaoForumSignIn(args: {\n keyGen: KeyGenSubset\n executorAddress: string\n chainId: number\n purposeText: string\n nodeKey?: string\n username?: string\n forumUrl?: string\n expiryDate?: number\n}) {\n const owner = getAddress(args.executorAddress)\n const gate = await continuumDaoForumSignInEligible({ address: owner, forumUrl: args.forumUrl })\n if (!gate.ok) {\n throw new Error(\n `${gate.reason || 'Address does not meet the veCTM threshold'}. Do not start a multi-sign request.`,\n )\n }\n const typed = (await continuumDaoForumSignInNonce({\n address: owner,\n nodeKey: args.nodeKey,\n username: args.username,\n forumUrl: args.forumUrl,\n })) as {\n domain: { name: string; version: string; chainId: number; verifyingContract: `0x${string}` }\n types: Record<string, { name: string; type: string }[]>\n primaryType: string\n message: Record<string, unknown>\n nodeKey?: string\n }\n const types = { ...typed.types }\n delete types.EIP712Domain\n return buildEip712Multisign({\n keyGen: args.keyGen,\n purposeText: args.purposeText,\n destinationChainID: String(args.chainId),\n destinationAddress: owner,\n legs: [\n {\n typedData: {\n domain: typed.domain,\n types,\n primaryType: typed.primaryType,\n message: typed.message,\n },\n delivery: {\n kind: FORUM_LOGIN_DELIVERY_KIND,\n forum: continuumDaoForumUrl(args.forumUrl),\n nodeKey: args.nodeKey || typed.nodeKey || '',\n },\n },\n ],\n expiryDate: args.expiryDate,\n })\n}\n","/**\n * Turn a backend proposal into a briefing the agent can read aloud.\n * Encoder no-ops (value 0, calldata 0x) are labeled signaling, not transfers.\n */\nimport { isContinuumDaoCommitteeProposer } from './constants.js'\nimport { applyForumSectionCheck, continuumDaoForumFetchThread } from './forum.js'\nimport { continuumDaoFetchProposal, continuumDaoFetchProposals, isLegacyContinuumDaoGovernor } from './governance.js'\n\nexport const PROPOSAL_TYPE_LABELS = ['Admin', 'Constitution', 'Decision', 'Election', 'Treasury'] as const\n\nconst APPROVE_RE = /^(approve|increaseAllowance|increaseapproval)\\(/i\nconst DENY_SIG_RE = /^(transfer|transferFrom|approve|increaseAllowance|setOwner|upgradeTo|upgradeToAndCall)\\(/i\n\nexport type ExplainedAction = {\n line: string\n noOp: boolean\n networkLabel: string\n chainId: string\n viaC3: boolean\n target: string\n value: string\n signature: string\n flags: string[]\n}\n\nexport type ExplainedOption = {\n label: string\n actions: ExplainedAction[]\n}\n\nexport type ContinuumDaoExplainProposalResult = {\n id?: number\n onchainId: string\n title: string\n description: string\n proposer: string\n /** True when `proposer` is a ContinuumDAO Committee address. */\n committeeProposer: boolean\n forumKey: string\n forumSection?: string | null\n forumCid?: number | null\n typeLabel: string\n configuration: 'bravo' | 'delta'\n nWinners?: number\n governorAddress?: string\n briefing: string\n actions: ExplainedAction[]\n options: ExplainedOption[]\n risks: string[]\n}\n\nfunction asRecord(value: unknown): Record<string, unknown> | null {\n return value && typeof value === 'object' && !Array.isArray(value) ? (value as Record<string, unknown>) : null\n}\n\nfunction str(v: unknown, fallback = ''): string {\n return v == null ? fallback : String(v)\n}\n\nexport function isGovNoOpAction(action: {\n target?: string\n value?: string\n signature?: string\n calldata?: string\n}): boolean {\n const value = (action.value ?? '0').trim()\n const sig = (action.signature ?? '').trim()\n const data = (action.calldata ?? '').trim()\n const emptyData = data === '' || data === '0x'\n return (value === '' || value === '0') && sig === '' && emptyData\n}\n\nconst LINEA_HOME_CHAIN_IDS = new Set(['59144', '59141'])\n\n/** Linea (DAO home chain) is never a C3 remote action, even when `network.c3governor` is set. */\nexport function isLineaHomeNetwork(net: { name?: string; label?: string; chainId?: string | number }): boolean {\n const name = `${net.name ?? ''} ${net.label ?? ''}`.toLowerCase()\n if (name.includes('linea')) return true\n return LINEA_HOME_CHAIN_IDS.has(String(net.chainId ?? ''))\n}\n\nexport function isRemoteC3Action(net: {\n name?: string\n label?: string\n chainId?: string | number\n c3governor?: string\n}): boolean {\n const c3 = (net.c3governor ?? '').trim()\n const hasC3 = Boolean(c3 && c3 !== '0x0000000000000000000000000000000000000000')\n return hasC3 && !isLineaHomeNetwork(net)\n}\n\nexport function explainGovAction(raw: unknown): ExplainedAction {\n const a = asRecord(raw) ?? {}\n const net = asRecord(a.network) ?? {}\n const networkLabel = str(net.label || net.name, 'Unknown network')\n const chainId = str(net.chainId)\n const viaC3 = isRemoteC3Action({\n name: str(net.name),\n label: str(net.label),\n chainId,\n c3governor: str(net.c3governor),\n })\n const target = str(a.target)\n const value = str(a.value, '0')\n const signature = str(a.signature)\n const inputs = Array.isArray(a.inputs) ? a.inputs : []\n const inputParts = inputs.map((inp) => {\n const row = asRecord(inp) ?? {}\n return `${str(row.name || row.type, 'arg')}=${str(row.value)}`\n })\n const noOp = isGovNoOpAction({ target, value, signature, calldata: str(a.calldata) })\n const flags: string[] = []\n if (noOp) flags.push('signaling-noop')\n if (viaC3) flags.push('c3-remote')\n if (BigInt(value || '0') > 0n) flags.push('sends-value')\n if (APPROVE_RE.test(signature)) flags.push('allowance')\n if (DENY_SIG_RE.test(signature)) flags.push('sensitive-signature')\n if (!noOp && !signature) flags.push('unknown-signature')\n const valueBit = BigInt(value || '0') > 0n ? `; send ${value} wei` : ''\n const argsBit = inputParts.length ? ` with ${inputParts.join(', ')}` : ''\n const c3Bit = viaC3 ? ' via C3' : ''\n const line = noOp\n ? `On ${networkLabel}${c3Bit}: no on-chain effect (encoder no-op / signaling).`\n : `On ${networkLabel} (chain ${chainId || '—'})${c3Bit}: call ${signature || '(no signature)'} on ${target || '—'} ${argsBit}${valueBit}.`.replace(/\\s+/g, ' ').trim()\n return { line, noOp, networkLabel, chainId, viaC3, target, value, signature, flags }\n}\n\nfunction typeLabel(type: unknown): string {\n const n = Number(type)\n return Number.isFinite(n) && PROPOSAL_TYPE_LABELS[n] ? PROPOSAL_TYPE_LABELS[n] : str(type, 'Unknown')\n}\n\nexport function explainProposalRecord(raw: unknown): ContinuumDaoExplainProposalResult {\n const row = asRecord(raw)\n if (!row) throw new Error('explain_proposal: empty proposal')\n const onchainId = str(row.onchainId ?? row.onchain_id ?? row.proposalId)\n if (!onchainId) throw new Error('explain_proposal: missing onchainId')\n const idNum = typeof row.id === 'number' ? row.id : Number(row.id)\n const governorAddress = str(row.governorAddress ?? row.governor_address).trim() || undefined\n const configuration = Number(row.configuration) === 1 ? 'delta' : 'bravo'\n const nWinners = row.nWinners != null ? Number(row.nWinners) : undefined\n const actionsRaw = Array.isArray(row.actions) ? row.actions : []\n const optionsRaw = Array.isArray(row.options) ? row.options : []\n const actions = actionsRaw.map(explainGovAction)\n const options = optionsRaw.map((opt) => {\n const o = asRecord(opt) ?? {}\n const optActions = Array.isArray(o.actions) ? o.actions.map(explainGovAction) : []\n return { label: str(o.label, 'Untitled option'), actions: optActions }\n })\n const risks: string[] = []\n const t = typeLabel(row.type)\n if (t === 'Treasury' || t === 'Admin' || t === 'Constitution') {\n risks.push(`${t} proposal — treat as high impact.`)\n }\n const all = configuration === 'delta' ? options.flatMap((o) => o.actions) : actions\n if (all.some((a) => a.flags.includes('sends-value'))) risks.push('At least one action sends native value.')\n if (all.some((a) => a.flags.includes('allowance'))) risks.push('At least one action changes token allowance.')\n if (all.some((a) => a.flags.includes('sensitive-signature'))) risks.push('Sensitive signature (transfer / approve / upgrade / ownership).')\n if (all.some((a) => a.flags.includes('unknown-signature') && !a.noOp)) risks.push('An action has no readable signature.')\n if (all.some((a) => a.viaC3)) risks.push('One or more actions execute on another network via C3, not on Linea.')\n if (!str(row.description).trim() && all.some((a) => !a.noOp)) {\n risks.push('Empty description with on-chain actions.')\n }\n\n const proposer = str(row.proposer)\n const committeeProposer = isContinuumDaoCommitteeProposer(proposer)\n const lines: string[] = []\n lines.push(`#${row.id ?? '—'} ${str(row.title, 'Untitled')} (${t}, ${configuration === 'delta' ? 'Delta' : 'Bravo'}).`)\n if (committeeProposer) {\n lines.push(\n `Proposer ${proposer} is a ContinuumDAO Committee member (any EOA or contract — not required to be a KeyGen).`,\n )\n } else {\n lines.push(\n `Proposer ${proposer || '—'} (any EOA or contract — not required to be a KeyGen). This is not a Committee proposal.`,\n )\n }\n if (governorAddress) {\n lines.push(\n isLegacyContinuumDaoGovernor(governorAddress)\n ? `Governor ${governorAddress} (superseded Linea DAO; catalog ids are negative).`\n : `Governor ${governorAddress}.`,\n )\n }\n if (str(row.forumKey)) lines.push(`Forum: ${str(row.forumKey)}`)\n if (configuration === 'bravo') {\n lines.push('If this passes, the DAO will execute, in order:')\n for (const a of actions) lines.push(`- ${a.line}`)\n if (actions.length === 0) lines.push('- No user actions (signaling / no-op).')\n } else {\n lines.push(`Delta: top ${nWinners ?? '?'} option(s) execute. None of the above (NOTA) is a vote slot, not an option with actions.`)\n for (const [i, opt] of options.entries()) {\n lines.push(`Option ${i + 1} — ${opt.label}:`)\n for (const a of opt.actions) lines.push(` - ${a.line}`)\n if (opt.actions.length === 0) lines.push(' - No user actions (signaling / no-op).')\n }\n }\n if (risks.length) {\n lines.push('Risks:')\n for (const r of risks) lines.push(`- ${r}`)\n }\n lines.push('Queue is not implemented. Vote while Active; execute from Succeeded.')\n\n return {\n id: Number.isFinite(idNum) ? idNum : undefined,\n onchainId,\n title: str(row.title, 'Untitled'),\n description: str(row.description),\n proposer,\n committeeProposer,\n forumKey: str(row.forumKey),\n typeLabel: t,\n configuration,\n nWinners: Number.isFinite(nWinners) ? nWinners : undefined,\n governorAddress,\n briefing: lines.join('\\n'),\n actions,\n options,\n risks,\n }\n}\n\nasync function withForumSection(\n out: ContinuumDaoExplainProposalResult,\n forumUrl?: string,\n): Promise<ContinuumDaoExplainProposalResult> {\n if (!out.forumKey) return out\n try {\n const thread = (await continuumDaoForumFetchThread({ url: out.forumKey, index: 0, forumUrl })) as {\n section?: string\n cid?: number\n }\n return applyForumSectionCheck(out, thread.section ?? null, thread.cid ?? null)\n } catch {\n return { ...out, forumSection: null, forumCid: null }\n }\n}\n\nexport async function continuumDaoExplainProposal(args: {\n id?: string | number\n onchainId?: string\n forumUrl?: string\n}): Promise<ContinuumDaoExplainProposalResult> {\n if (args.id != null && String(args.id).trim() !== '') {\n const { proposal } = await continuumDaoFetchProposal({ id: args.id })\n return withForumSection(explainProposalRecord(proposal), args.forumUrl)\n }\n const want = (args.onchainId ?? '').trim()\n if (!want) throw new Error('explain_proposal: pass id or onchainId')\n const listed = await continuumDaoFetchProposals()\n const rawList = Array.isArray(listed.proposals) ? listed.proposals : []\n const hit = rawList.find((p) => {\n const row = asRecord(p)\n return row && str(row.onchainId ?? row.onchain_id ?? row.proposalId) === want\n })\n if (!hit) throw new Error(`explain_proposal: no catalog row with onchainId ${want}`)\n const id = asRecord(hit)?.id\n if (id != null) {\n const { proposal } = await continuumDaoFetchProposal({ id: Number(id) })\n return withForumSection(explainProposalRecord(proposal), args.forumUrl)\n }\n return withForumSection(explainProposalRecord(hit), args.forumUrl)\n}\n","/**\n * Sequential Foundry forge-script plan for ContinuumDAO proposal dry-run.\n * Isolated eth_call / cast call cannot carry state from one action to the next.\n */\nimport { getAddress, type Address, type Hex } from 'viem'\n\nexport type FoundryGovLeg = {\n target: Address\n value: string\n data: Hex\n signature: string\n noOp: boolean\n}\n\nexport type FoundryGovBatch = {\n label?: string\n optionIndex?: number\n legs: FoundryGovLeg[]\n}\n\nexport const FOUNDRY_PROPOSAL_REQUIRED_SERVERS = ['etherscan', 'foundry'] as const\n\nexport type FoundryProposalScriptFile = {\n path: string\n contractName: string\n source: string\n label?: string\n}\n\nexport type FoundryProposalSimulatePlan = {\n loadServers: readonly ['etherscan', 'foundry']\n chainId: number\n governor: string\n proposer: string\n files: FoundryProposalScriptFile[]\n forgeScript: {\n tool: 'forge_script'\n broadcast: false\n forkUrlFromRegistry: true\n }\n note: string\n}\n\nfunction hexLiteral(data: string): string {\n const t = data.trim()\n const h = (t.startsWith('0x') ? t.slice(2) : t).toLowerCase()\n if (!h) return '\"\"'\n if (h.length % 2 !== 0) throw new Error('calldata hex must be even length')\n return `hex\"${h}\"`\n}\n\nfunction addrLit(address: string): string {\n return getAddress(address)\n}\n\nfunction solIdent(raw: string, fallback: string): string {\n const cleaned = raw.replace(/[^a-zA-Z0-9_]/g, '')\n const start = cleaned.match(/^[A-Za-z_]/) ? cleaned : `_${cleaned}`\n return start.slice(0, 40) || fallback\n}\n\nfunction actionRequireLabel(batch: FoundryGovBatch, index: number): string {\n const leg = batch.legs[index]\n const where = batch.label ? `${batch.label} action ${index + 1}` : `action ${index + 1}`\n const sig = leg?.signature?.trim() ? ` ${leg.signature.trim()}` : ''\n return `${where}${sig} reverted`\n}\n\nfunction emitActionCalls(batch: FoundryGovBatch, indent: string): string {\n const lines: string[] = []\n batch.legs.forEach((leg, i) => {\n if (leg.noOp) {\n lines.push(`${indent}// signaling no-op (skipped)`)\n return\n }\n const value = BigInt(leg.value)\n const valuePart = value === 0n ? '' : `{value: ${value.toString()}}`\n const label = JSON.stringify(actionRequireLabel(batch, i))\n lines.push(`${indent}{`)\n lines.push(`${indent} (bool ok, ) = payable(${addrLit(leg.target)}).call${valuePart}(${hexLiteral(leg.data)});`)\n lines.push(`${indent} require(ok, ${label});`)\n lines.push(`${indent}}`)\n })\n return lines.join('\\n')\n}\n\nfunction wrapScript(contractName: string, body: string, headerComment: string): string {\n return [\n '// SPDX-License-Identifier: MIT',\n 'pragma solidity ^0.8.24;',\n '',\n 'import {Script} from \"forge-std/Script.sol\";',\n '',\n headerComment,\n `contract ${contractName} is Script {`,\n body,\n '}',\n '',\n ].join('\\n')\n}\n\n/**\n * One forge script per executable batch (Bravo = one file; Delta = one file per option).\n * Each `run()` pranks the governor and applies actions in order so later calls see earlier state.\n */\nexport function buildFoundryProposalSimulatePlan(args: {\n chainId: number\n governor: string\n proposer: string\n proposeData: Hex\n batches: FoundryGovBatch[]\n}): FoundryProposalSimulatePlan {\n const governor = getAddress(args.governor)\n const proposer = getAddress(args.proposer)\n const files: FoundryProposalScriptFile[] = []\n\n const proposeBody = [\n ' function run() external {',\n ` address proposer = ${addrLit(proposer)};`,\n ` address governor = ${addrLit(governor)};`,\n ' vm.startPrank(proposer, proposer);',\n ` (bool ok, ) = governor.call(${hexLiteral(args.proposeData)});`,\n ' require(ok, \"ContinuumDAO.propose reverted\");',\n ' vm.stopPrank();',\n ' }',\n ].join('\\n')\n files.push({\n path: 'script/ContinuumDaoSimulatePropose.s.sol',\n contractName: 'ContinuumDaoSimulatePropose',\n source: wrapScript(\n 'ContinuumDaoSimulatePropose',\n proposeBody,\n '/// Dry-run ContinuumDAO.propose from the draft proposer. Do not --broadcast.',\n ),\n })\n\n args.batches.forEach((batch, bi) => {\n const suffix =\n batch.label != null\n ? solIdent(batch.label, `Option${(batch.optionIndex ?? bi) + 1}`)\n : 'Bravo'\n const contractName = `ContinuumDaoSimulateExecute${suffix}`\n const path = `script/${contractName}.s.sol`\n const body = [\n ' function run() external {',\n ` address governor = ${addrLit(governor)};`,\n ' vm.startPrank(governor, governor);',\n emitActionCalls(batch, ' '),\n ' vm.stopPrank();',\n ' }',\n ].join('\\n')\n const label =\n batch.label != null\n ? `Delta option ${(batch.optionIndex ?? bi) + 1} (${batch.label})`\n : 'Bravo execute'\n files.push({\n path,\n contractName,\n label,\n source: wrapScript(\n contractName,\n body,\n `/// Sequential governor execute dry-run (${label}). msg.sender = governor. Do not --broadcast.`,\n ),\n })\n })\n\n return {\n loadServers: FOUNDRY_PROPOSAL_REQUIRED_SERVERS,\n chainId: args.chainId,\n governor,\n proposer,\n files,\n forgeScript: {\n tool: 'forge_script',\n broadcast: false,\n forkUrlFromRegistry: true,\n },\n note:\n 'Load MCP servers etherscan (official V2, https://mcp.etherscan.io/mcp) and foundry before compose/simulate. ' +\n 'Write each file with foundry__create_solidity_file, then foundry__forge_script with the Linea fork RPC and no --broadcast. ' +\n 'Execute scripts are sequential: later actions see state from earlier ones in the same run(). ' +\n 'Do not use isolated eth_call or cast call as the execute sim. Never broadcast these scripts.',\n }\n}\n\nexport function foundryPlanHasSequentialExecute(plan: FoundryProposalSimulatePlan): boolean {\n return plan.files.some((f) => f.contractName.startsWith('ContinuumDaoSimulateExecute'))\n}\n\n/** @internal test helper */\nexport function foundryScriptContainsCall(source: string, target: Address, data: Hex): boolean {\n return source.includes(getAddress(target)) && source.toLowerCase().includes(data.slice(2).toLowerCase())\n}\n","/**\n * Dry-run a ContinuumDAO Bravo/Delta proposal before submitting.\n * propose() is simulated from `account` (any EOA — not only the preferred KeyGen).\n * Sequential execute is a Foundry forge script (later actions see earlier state).\n * Isolated eth_call / cast call is not a complete execute sim.\n */\nimport { type Address, type Hex, type PublicClient, encodeFunctionData, getAddress, toHex, zeroAddress } from 'viem'\nimport { isContinuumDaoCommitteeProposer } from './constants.js'\nimport { isGovNoOpAction } from './explainProposal.js'\nimport {\n buildFoundryProposalSimulatePlan,\n type FoundryProposalSimulatePlan,\n} from './foundryProposalScript.js'\nimport {\n buildBravoProposalArgs,\n buildDeltaProposalArgs,\n continuumDaoFetchVotingPower,\n governorWriteAbi,\n publicClient,\n requireGovernor,\n type GovActionInput,\n type GovOptionInput,\n} from './governance.js'\n\nexport type ContinuumDaoGovConfiguration = 'bravo' | 'delta'\n\nexport type SimulatedGovLeg = {\n index: number\n target: Address\n value: string\n data: Hex\n signature: string\n noOp: boolean\n}\n\nexport type SimulatedGovBatch = {\n label?: string\n optionIndex?: number\n legs: SimulatedGovLeg[]\n}\n\nexport type ProposalActionSimResult = {\n index: number\n target: string\n signature: string\n noOp: boolean\n ok: boolean\n error?: string\n gasUsed?: string\n}\n\nexport type ProposalBatchSimResult = {\n label?: string\n optionIndex?: number\n ok: boolean\n actions: ProposalActionSimResult[]\n}\n\nexport type ContinuumDaoSimulateProposalResult = {\n ok: boolean\n configuration: ContinuumDaoGovConfiguration\n account: string\n governor: string\n votes: string\n threshold: string\n canPropose: boolean\n /** Set when getVotes(account) < live proposalThreshold() — caller must read this aloud. */\n warning?: string\n propose: { ok: boolean; error?: string }\n execute: {\n ok: boolean\n source: 'simulate' | 'foundry_required'\n batches: ProposalBatchSimResult[]\n }\n /** Sequential forge-script plan. Isolated eth_call is not a complete execute sim. */\n foundry: FoundryProposalSimulatePlan\n note: string\n}\n\nexport function normalizeGovConfiguration(value: unknown): ContinuumDaoGovConfiguration {\n const s = String(value ?? '').trim().toLowerCase()\n if (s === 'bravo' || s === '0') return 'bravo'\n if (s === 'delta' || s === '1') return 'delta'\n throw new Error('configuration must be bravo (0) or delta (1).')\n}\n\nfunction asHex(data: string): Hex {\n const t = data.trim()\n return (t.startsWith('0x') ? t : `0x${t}`) as Hex\n}\n\nfunction formatCallError(err: unknown): string {\n if (err && typeof err === 'object') {\n const o = err as { shortMessage?: unknown; message?: unknown; details?: unknown }\n const short = typeof o.shortMessage === 'string' ? o.shortMessage.trim() : ''\n if (short) return short\n const msg = typeof o.message === 'string' ? o.message.trim() : ''\n if (msg) return msg.split('\\n')[0]!.trim()\n if (typeof o.details === 'string' && o.details.trim()) return o.details.trim()\n }\n return err instanceof Error ? err.message : String(err)\n}\n\nfunction isSimulateUnsupportedError(err: unknown): boolean {\n const walk: unknown[] = [err]\n const seen = new Set<unknown>()\n while (walk.length) {\n const cur = walk.shift()\n if (cur == null || seen.has(cur)) continue\n seen.add(cur)\n if (typeof cur === 'object') {\n const o = cur as { code?: unknown; message?: unknown; details?: unknown; cause?: unknown }\n if (o.code === -32601) return true\n const msg = `${o.message ?? ''} ${o.details ?? ''}`.toLowerCase()\n if (\n msg.includes('method not found') ||\n msg.includes('does not exist') ||\n msg.includes('not available') ||\n msg.includes('not supported') ||\n msg.includes('unknown method') ||\n msg.includes('unimplemented')\n ) {\n return true\n }\n if (o.cause) walk.push(o.cause)\n } else if (typeof cur === 'string') {\n const msg = cur.toLowerCase()\n if (msg.includes('method not found') || msg.includes('does not exist')) return true\n }\n }\n return false\n}\n\nfunction legsFromEncoded(\n targets: Address[],\n values: bigint[],\n calldatas: Hex[],\n signatures: string[],\n): SimulatedGovLeg[] {\n return targets.map((target, i) => {\n const data = calldatas[i] ?? '0x'\n const value = values[i] ?? 0n\n const signature = signatures[i] ?? ''\n return {\n index: i,\n target,\n value: value.toString(),\n data,\n signature,\n noOp: isGovNoOpAction({ target, value: value.toString(), signature, calldata: data }),\n }\n })\n}\n\n/** Encode Bravo/Delta user actions into governor-executed batches (Delta skips metadata slot 0). */\nexport function executableGovBatches(args: {\n configuration: ContinuumDaoGovConfiguration\n title: string\n actions?: GovActionInput[]\n options?: GovOptionInput[]\n nWinners?: number\n noOpTarget: string\n}): {\n proposalArgs: ReturnType<typeof buildBravoProposalArgs>\n batches: SimulatedGovBatch[]\n} {\n const title = args.title.trim() || 'draft'\n const noOp = args.noOpTarget\n if (args.configuration === 'bravo') {\n const proposalArgs = buildBravoProposalArgs(args.actions ?? [], title, noOp)\n const signatures = (args.actions ?? []).map((a) => (a.signature ?? '').trim())\n if (signatures.length === 0) signatures.push('')\n return {\n proposalArgs,\n batches: [\n {\n legs: legsFromEncoded(proposalArgs.targets, proposalArgs.values, proposalArgs.calldatas, signatures),\n },\n ],\n }\n }\n const options = args.options ?? []\n const nWinners = Number(args.nWinners)\n const proposalArgs = buildDeltaProposalArgs(options, nWinners, title, noOp)\n const batches: SimulatedGovBatch[] = options.map((opt, optionIndex) => {\n const encoded = buildBravoProposalArgs(opt.actions ?? [], title, noOp)\n const signatures = (opt.actions ?? []).map((a) => (a.signature ?? '').trim())\n if (signatures.length === 0) signatures.push('')\n return {\n label: opt.label,\n optionIndex,\n legs: legsFromEncoded(encoded.targets, encoded.values, encoded.calldatas, signatures),\n }\n })\n return { proposalArgs, batches }\n}\n\ntype SequentialSimResult =\n | { kind: 'ok'; gasUsed: bigint[] }\n | { kind: 'unsupported' }\n | { kind: 'revert'; index: number; message: string }\n\nasync function simulateSequential(\n client: Pick<PublicClient, 'request'>,\n account: Address,\n legs: Array<{ to: Address; data: Hex; value: bigint }>,\n): Promise<SequentialSimResult> {\n if (legs.length === 0) return { kind: 'ok', gasUsed: [] }\n const calls = legs.map((leg) => ({\n from: account,\n to: leg.to,\n data: asHex(leg.data),\n value: toHex(leg.value),\n }))\n try {\n const raw = await client.request({\n method: 'eth_simulateV1',\n params: [\n {\n blockStateCalls: [{ calls }],\n traceTransfers: false,\n validation: false,\n },\n 'latest',\n ],\n } as never)\n const blocks = Array.isArray(raw) ? raw : []\n const first = blocks[0] as { calls?: unknown } | undefined\n const simCalls = Array.isArray(first?.calls) ? first.calls : []\n if (simCalls.length !== legs.length) {\n return {\n kind: 'revert',\n index: 0,\n message: `eth_simulateV1 returned ${simCalls.length} call result(s); expected ${legs.length}.`,\n }\n }\n const gasUsed: bigint[] = []\n for (let i = 0; i < simCalls.length; i++) {\n const row = simCalls[i] as {\n status?: unknown\n gasUsed?: unknown\n error?: unknown\n revertReason?: unknown\n }\n const status = String(row.status ?? '').toLowerCase()\n const failed = status === '0x0' || status === '0' || row.error != null\n if (failed) {\n const detail =\n typeof row.error === 'string' && row.error.trim()\n ? row.error.trim()\n : typeof row.revertReason === 'string' && row.revertReason.trim()\n ? row.revertReason.trim()\n : typeof row.error === 'object' && row.error\n ? JSON.stringify(row.error)\n : 'execution reverted'\n return { kind: 'revert', index: i, message: detail }\n }\n try {\n gasUsed.push(BigInt(String(row.gasUsed ?? '0')))\n } catch {\n return { kind: 'revert', index: i, message: 'eth_simulateV1 call missing gasUsed' }\n }\n }\n return { kind: 'ok', gasUsed }\n } catch (err) {\n if (isSimulateUnsupportedError(err)) return { kind: 'unsupported' }\n return { kind: 'revert', index: 0, message: formatCallError(err) }\n }\n}\n\nfunction applySequentialResult(\n batch: SimulatedGovBatch,\n sim: Extract<SequentialSimResult, { kind: 'ok' } | { kind: 'revert' }>,\n): ProposalBatchSimResult {\n if (sim.kind === 'ok') {\n return {\n label: batch.label,\n optionIndex: batch.optionIndex,\n ok: true,\n actions: batch.legs.map((leg, i) => ({\n index: leg.index,\n target: leg.target,\n signature: leg.signature,\n noOp: leg.noOp,\n ok: true,\n gasUsed: sim.gasUsed[i]?.toString(),\n })),\n }\n }\n return {\n label: batch.label,\n optionIndex: batch.optionIndex,\n ok: false,\n actions: batch.legs.map((leg, i) => ({\n index: leg.index,\n target: leg.target,\n signature: leg.signature,\n noOp: leg.noOp,\n ok: i !== sim.index,\n error: i === sim.index ? sim.message : i > sim.index ? 'not simulated (prior action reverted)' : undefined,\n })),\n }\n}\n\nfunction summarizeNote(args: {\n canPropose: boolean\n proposeOk: boolean\n executeOk: boolean\n source: 'simulate' | 'foundry_required'\n configuration: ContinuumDaoGovConfiguration\n}): string {\n const parts: string[] = []\n if (args.canPropose && args.proposeOk && args.executeOk) {\n parts.push(\n 'RPC sequential simulate succeeded. Still run the Foundry forge scripts in `foundry.files` on a Linea fork (no --broadcast) so action N sees state from action N-1.',\n )\n } else {\n if (!args.canPropose) {\n parts.push(\n 'Warning: this account’s veCTM voting power is below live proposalThreshold(). Do not submit from this address until votes meet the bar.',\n )\n } else if (!args.proposeOk) {\n parts.push('propose() reverted for this account. Fix the revert before submitting.')\n }\n if (!args.executeOk) {\n parts.push(\n args.source === 'foundry_required'\n ? 'RPC cannot run sequential eth_simulateV1. Isolated eth_call is not sufficient. Run the Foundry forge scripts in `foundry.files` on a Linea fork (no --broadcast).'\n : 'One or more actions reverted as the governor. Submitting now would waste the voting period — fix the reverting signature first.',\n )\n }\n }\n if (args.configuration === 'delta') {\n parts.push('Each Delta option has its own execute script (only winning options execute).')\n }\n parts.push(\n 'Load MCP servers etherscan (official V2) and foundry before compose or this dry-run. Time-sensitive calls can still fail after the vote if on-chain state changes.',\n )\n return parts.join(' ')\n}\n\nfunction votingPowerShortfallBody(args: { account: string; votes: string; threshold: string }): string {\n const committee = isContinuumDaoCommitteeProposer(args.account)\n ? ' This is a ContinuumDAO Committee address — Committee is not exempt from proposalThreshold().'\n : ''\n return (\n `${args.account} has veCTM voting power ${args.votes}, below live proposalThreshold() ${args.threshold}. ` +\n `On-chain rule: max(1000e18 ve power, 1% of total voting power). Delegation applies at this address ` +\n `(fetch_delegates).` +\n committee\n )\n}\n\n/** Warning for the draft/other-address simulate tool (does not create a sign request). */\nexport function votingPowerWarning(args: {\n account: string\n votes: string\n threshold: string\n}): string | undefined {\n if (BigInt(args.votes) >= BigInt(args.threshold)) return undefined\n return (\n `Warning: ${votingPowerShortfallBody(args)} ` +\n `ContinuumDAO.propose will revert until this account holds or is delegated enough votes.`\n )\n}\n\n/** Hard-fail copy for KeyGen create (`build_propose_*` / UI). */\nexport function votingPowerRefuse(args: { account: string; votes: string; threshold: string }): string {\n return (\n `Refused: ${votingPowerShortfallBody(args)} ` +\n `A KeyGen cannot create a ContinuumDAO proposal until getVotes at this address meets the bar.`\n )\n}\n\n/** Human-readable first failure from a simulate_proposal result. */\nexport function formatProposalSimulationFailure(result: ContinuumDaoSimulateProposalResult): string | null {\n if (result.ok) return null\n if (!result.canPropose) {\n return votingPowerRefuse(result)\n }\n if (!result.propose.ok) {\n return `ContinuumDAO.propose would revert from ${result.account}: ${result.propose.error ?? 'execution reverted'}`\n }\n if (!result.execute.ok) {\n if (result.execute.source === 'foundry_required') {\n return (\n 'RPC does not support sequential eth_simulateV1. Isolated eth_call cannot carry state between actions. ' +\n 'Run the Foundry forge scripts in foundry.files on a Linea fork (foundry__forge_script, no --broadcast) before submitting.'\n )\n }\n for (const batch of result.execute.batches) {\n const failed = batch.actions.find((a) => !a.ok)\n if (!failed) continue\n const where =\n batch.label != null\n ? `Delta option ${((batch.optionIndex ?? 0) + 1).toString()} (${batch.label}) action ${failed.index + 1}`\n : `action ${failed.index + 1}`\n const sig = failed.signature ? ` ${failed.signature}` : ''\n return (\n `Proposal ${where}${sig} would revert when the governor executes (${failed.target}): ` +\n `${failed.error ?? 'execution reverted'}. Submitting now would waste the voting period.`\n )\n }\n return 'Proposal actions would revert when the governor executes. Submitting now would waste the voting period.'\n }\n return result.note\n}\n\nexport function throwIfProposalSimulationFailed(result: ContinuumDaoSimulateProposalResult): void {\n // Builders cannot invoke Foundry MCP. Sequential execute is the agent's forge-script step.\n if (result.execute.source === 'foundry_required' && result.canPropose && result.propose.ok) {\n return\n }\n const message = formatProposalSimulationFailure(result)\n if (message) throw new Error(message)\n}\n\n/** Preferred-signer / builder gate: simulate then refuse a reverting propose or execute. */\nexport async function assertContinuumDaoProposalSimulation(args: {\n chainId: number | string\n rpcUrl: string\n account: string\n configuration: ContinuumDaoGovConfiguration\n title: string\n actions?: GovActionInput[]\n options?: GovOptionInput[]\n nWinners?: string | number\n governor?: string\n noOpTarget?: string\n}): Promise<ContinuumDaoSimulateProposalResult> {\n const result = await continuumDaoSimulateProposal(args)\n throwIfProposalSimulationFailed(result)\n return result\n}\n\nexport async function continuumDaoSimulateProposal(args: {\n chainId: number | string\n rpcUrl: string\n account: string\n configuration: ContinuumDaoGovConfiguration | 0 | 1 | '0' | '1' | 'bravo' | 'delta'\n title?: string\n actions?: GovActionInput[]\n options?: GovOptionInput[]\n nWinners?: string | number\n governor?: string\n noOpTarget?: string\n}): Promise<ContinuumDaoSimulateProposalResult> {\n const chainId = Number(args.chainId)\n const configuration = normalizeGovConfiguration(args.configuration)\n if (!String(args.rpcUrl ?? '').trim()) {\n throw new Error('rpcUrl is required (pass it or let the server resolve it from the chain registry).')\n }\n const account = getAddress(args.account)\n const gov = requireGovernor(chainId, args.governor)\n const title = (args.title ?? 'draft').trim() || 'draft'\n const noOpTarget = args.noOpTarget?.trim() || account\n if (noOpTarget === zeroAddress) {\n throw new Error('noOpTarget / account cannot be the zero address.')\n }\n if (configuration === 'delta') {\n if (!args.options || args.options.length < 2) {\n throw new Error('Delta simulation needs at least 2 options.')\n }\n const nWinners = Number(args.nWinners)\n if (!Number.isFinite(nWinners) || nWinners < 1 || nWinners >= args.options.length) {\n throw new Error('Delta nWinners must be >= 1 and < nOptions.')\n }\n }\n\n const { proposalArgs, batches } = executableGovBatches({\n configuration,\n title,\n actions: args.actions,\n options: args.options,\n nWinners: args.nWinners == null ? undefined : Number(args.nWinners),\n noOpTarget,\n })\n\n const power = await continuumDaoFetchVotingPower({\n chainId,\n rpcUrl: args.rpcUrl,\n account,\n governor: gov,\n })\n const canPropose = BigInt(power.votes) >= BigInt(power.threshold)\n\n const client = publicClient(args.rpcUrl, chainId)\n const proposeData = encodeFunctionData({\n abi: governorWriteAbi,\n functionName: 'propose',\n args: [proposalArgs.targets, proposalArgs.values, proposalArgs.calldatas, proposalArgs.description],\n })\n let proposeOk = false\n let proposeError: string | undefined\n try {\n await client.call({\n to: gov,\n data: proposeData,\n account,\n batch: false,\n })\n proposeOk = true\n } catch (err) {\n proposeError = formatCallError(err)\n }\n\n let source: 'simulate' | 'foundry_required' = 'simulate'\n const batchResults: ProposalBatchSimResult[] = []\n for (const batch of batches) {\n const legs = batch.legs.map((leg) => ({\n to: leg.target,\n data: asHex(leg.data),\n value: BigInt(leg.value),\n }))\n const sim = await simulateSequential(client, gov, legs)\n if (sim.kind === 'unsupported') {\n source = 'foundry_required'\n batchResults.push({\n label: batch.label,\n optionIndex: batch.optionIndex,\n ok: false,\n actions: batch.legs.map((leg) => ({\n index: leg.index,\n target: leg.target,\n signature: leg.signature,\n noOp: leg.noOp,\n ok: false,\n error:\n 'RPC lacks eth_simulateV1. Isolated eth_call is not a sequential execute sim. Run foundry.files via forge script on a Linea fork.',\n })),\n })\n continue\n }\n batchResults.push(applySequentialResult(batch, sim))\n }\n const executeOk = source !== 'foundry_required' && batchResults.every((b) => b.ok)\n const ok = canPropose && proposeOk && executeOk\n const warning = votingPowerWarning({ account, votes: power.votes, threshold: power.threshold })\n const foundry = buildFoundryProposalSimulatePlan({\n chainId,\n governor: gov,\n proposer: account,\n proposeData,\n batches,\n })\n return {\n ok,\n configuration,\n account,\n governor: gov,\n votes: power.votes,\n threshold: power.threshold,\n canPropose,\n ...(warning ? { warning } : {}),\n propose: proposeOk ? { ok: true } : { ok: false, error: proposeError },\n execute: { ok: executeOk, source, batches: batchResults },\n foundry,\n note: summarizeNote({ canPropose, proposeOk, executeOk, source, configuration }),\n }\n}\n","/**\n * ContinuumDAO governor encode + Multi-Sign builders.\n * Do not prepend billing legs. Queue is not implemented on-chain (no timelock).\n */\nimport { type Address, createPublicClient, defineChain, encodeFunctionData, encodePacked, getAddress, keccak256, padHex, parseAbi, toHex, zeroAddress } from 'viem'\nimport { defiEvmTransport } from '../../../core/defiEvmClient.js'\nimport { buildEvmMultisignBatch } from '../../../chains/evm/buildBatch.js'\nimport type { EvmTxStep } from '../../../chains/evm/types.js'\nimport {\n CONTINUUM_DAO_GOVERNANCE_API,\n CONTINUUM_DAO_LINEA_GOVERNOR_LEGACY_ADDRESS,\n CONTINUUM_DAO_PROTOCOL_ID,\n governorAddressOnEvmChain,\n isConfiguredAddress,\n isContinuumDaoCommitteeProposer,\n isContinuumDaoLockChain,\n} from './constants.js'\nimport { assertContinuumDaoForumTopicKey } from './forum.js'\nimport type { ContinuumDaoCommonArgs } from './multisign.js'\n\nexport const CONTINUUM_DAO_PROPOSE_FALLBACK = 550_000n\nexport const CONTINUUM_DAO_VOTE_FALLBACK = 220_000n\nexport const CONTINUUM_DAO_EXECUTE_FALLBACK = 800_000n\nexport const CONTINUUM_DAO_CANCEL_FALLBACK = 180_000n\n\nexport const CONTINUUM_DAO_GOV_EVM_TYPES = new Set([\n 'continuum_dao_propose',\n 'continuum_dao_cast_vote',\n 'continuum_dao_execute',\n 'continuum_dao_cancel',\n])\n\nexport const governorWriteAbi = parseAbi([\n 'function propose(address[] targets, uint256[] values, bytes[] calldatas, string description) returns (uint256)',\n 'function castVote(uint256 proposalId, uint8 support) returns (uint256)',\n 'function castVoteWithReasonAndParams(uint256 proposalId, uint8 support, string reason, bytes params) returns (uint256)',\n 'function execute(uint256 proposalId) payable',\n 'function cancel(uint256 proposalId)',\n])\n\nconst governorReadAbi = parseAbi([\n 'function hashProposal(address[] targets, uint256[] values, bytes[] calldatas, bytes32 descriptionHash) view returns (uint256)',\n 'function state(uint256 proposalId) view returns (uint8)',\n 'function getVotes(address account, uint256 timepoint) view returns (uint256)',\n 'function proposalThreshold() view returns (uint256)',\n 'function proposalCount() view returns (uint256)',\n 'function clock() view returns (uint48)',\n 'function proposalVotes(uint256 proposalId) view returns (uint256 againstVotes, uint256 forVotes, uint256 abstainVotes)',\n 'function hasVoted(uint256 proposalId, address account) view returns (bool)',\n 'function proposalSnapshot(uint256 proposalId) view returns (uint256)',\n])\n\nexport type GovActionInput = {\n target: string\n value?: string\n signature?: string\n inputs?: { name?: string; type: string; value: string }[]\n}\n\nexport type GovOptionInput = {\n label: string\n actions: GovActionInput[]\n}\n\nfunction splitAbiParamList(inner: string): string[] {\n const out: string[] = []\n let buf = ''\n let depth = 0\n for (const ch of inner) {\n if (ch === '(') depth += 1\n if (ch === ')') depth -= 1\n if (ch === ',' && depth === 0) {\n if (buf.trim()) out.push(buf.trim())\n buf = ''\n continue\n }\n buf += ch\n }\n if (buf.trim()) out.push(buf.trim())\n return out\n}\n\nfunction signatureToAbiInputs(signature: string): { type: string }[] {\n const start = signature.indexOf('(')\n if (start === -1) return []\n let depth = 0\n let end = -1\n for (let i = start; i < signature.length; i++) {\n const ch = signature[i]\n if (ch === '(') depth += 1\n if (ch === ')') {\n depth -= 1\n if (depth === 0) {\n end = i\n break\n }\n }\n }\n if (end === -1) return []\n const inner = signature.slice(start + 1, end)\n if (!inner.trim()) return []\n return splitAbiParamList(inner).map((t) => ({ type: t }))\n}\n\nfunction coerceAbiValue(type: string, value: string): string | bigint | boolean | unknown[] {\n const trimmed = (value ?? '').trim()\n if (type.startsWith('(') && type.endsWith(')')) {\n const parsed = JSON.parse(trimmed || '[]') as unknown\n if (!Array.isArray(parsed)) throw new Error('tuple value must be a JSON array')\n const parts = splitAbiParamList(type.slice(1, -1))\n return parts.map((part, i) => {\n const child = parsed[i]\n if (typeof child === 'string') return coerceAbiValue(part, child)\n return coerceAbiValue(part, JSON.stringify(child ?? ''))\n })\n }\n const fixed = type.match(/^(.+)\\[(\\d+)\\]$/)\n if (fixed && !type.endsWith('[]')) {\n const parsed = trimmed.startsWith('[') ? (JSON.parse(trimmed) as unknown) : trimmed.split(',')\n if (!Array.isArray(parsed)) throw new Error('fixed array value must be a JSON array')\n return (parsed as unknown[]).map((x) => coerceAbiValue(fixed[1]!, String(x)))\n }\n if (type.endsWith('[]')) {\n const arr = trimmed.startsWith('[')\n ? (JSON.parse(trimmed) as unknown[]).map((x) => String(x))\n : trimmed\n ? trimmed.split(',').map((s) => s.trim())\n : []\n const baseType = type.slice(0, -2)\n return arr.map((v) => coerceAbiValue(baseType, v)) as unknown[]\n }\n if (type === 'address') return trimmed as `0x${string}`\n if (type.startsWith('uint') || type.startsWith('int')) return BigInt(trimmed || '0')\n if (type === 'bool') return trimmed === 'true' || trimmed === '1'\n return trimmed\n}\n\nexport function encodeGovActionCalldata(signature: string, inputs: { type: string; value: string }[] = []): `0x${string}` {\n const sig = signature.trim()\n if (!sig) return '0x'\n const name = sig.slice(0, sig.indexOf('(') === -1 ? sig.length : sig.indexOf('('))\n const types = signatureToAbiInputs(sig)\n if (types.length !== inputs.length) throw new Error('encodeGovActionCalldata: inputs length mismatch')\n const args = inputs.map((inp, i) => coerceAbiValue(types[i]!.type, inp.value))\n return encodeFunctionData({\n abi: [\n {\n type: 'function' as const,\n name,\n inputs: types.map((t, i) => ({ name: `arg${i}`, type: t.type })),\n outputs: [],\n stateMutability: 'nonpayable' as const,\n },\n ],\n functionName: name,\n args,\n })\n}\n\nexport function proposalDescriptionHash(description: string): `0x${string}` {\n return keccak256(encodePacked(['string'], [description]))\n}\n\nexport function encodeDeltaMetadata(nOptions: number, nWinners: number, optionStartIndices: number[]): `0x${string}` {\n if (optionStartIndices.length !== nOptions) {\n throw new Error('encodeDeltaMetadata: optionStartIndices length must equal nOptions')\n }\n const parts = [\n padHex(toHex(nOptions), { size: 32 }).slice(2),\n padHex(toHex(nWinners), { size: 32 }).slice(2),\n ...optionStartIndices.map((i) => padHex(toHex(i), { size: 32 }).slice(2)),\n ]\n return (`0x${parts.join('')}`) as `0x${string}`\n}\n\n/** Delta vote params: one uint256 per option plus a final NOTA slot. */\nexport function encodeDeltaVoteParams(weights: Array<string | number | bigint>): `0x${string}` {\n if (weights.length < 3) throw new Error('Delta vote params need nOptions + NOTA (at least 3 slots).')\n return (`0x${weights.map((w) => padHex(toHex(BigInt(w)), { size: 32 }).slice(2)).join('')}`) as `0x${string}`\n}\n\nfunction noOpAction(noOpTarget: Address): { target: Address; value: bigint; calldata: `0x${string}` } {\n return { target: getAddress(noOpTarget), value: 0n, calldata: '0x' }\n}\n\nfunction encodeUserAction(a: GovActionInput): { target: Address; value: bigint; calldata: `0x${string}` } {\n const target = getAddress(a.target)\n if (target === zeroAddress) throw new Error('Action target cannot be the zero address (reserved for Delta metadata).')\n const value = BigInt(String(a.value || '0'))\n const calldata = encodeGovActionCalldata(a.signature ?? '', a.inputs ?? [])\n return { target, value, calldata }\n}\n\nexport function buildBravoProposalArgs(\n actions: GovActionInput[],\n description: string,\n noOpTarget: string,\n): {\n targets: Address[]\n values: bigint[]\n calldatas: `0x${string}`[]\n description: string\n} {\n const encoded =\n actions.length === 0 ? [noOpAction(getAddress(noOpTarget))] : actions.map(encodeUserAction)\n if (encoded[0]!.target === zeroAddress) {\n throw new Error('Bravo first target cannot be address(0); that encoding is Delta.')\n }\n return {\n targets: encoded.map((e) => e.target),\n values: encoded.map((e) => e.value),\n calldatas: encoded.map((e) => e.calldata),\n description,\n }\n}\n\nexport function buildDeltaProposalArgs(\n options: GovOptionInput[],\n nWinners: number,\n description: string,\n noOpTarget: string,\n): {\n targets: Address[]\n values: bigint[]\n calldatas: `0x${string}`[]\n description: string\n} {\n if (options.length < 2) throw new Error('Delta proposals need at least 2 options.')\n if (nWinners < 1 || nWinners >= options.length) throw new Error('Delta nWinners must be >= 1 and < nOptions.')\n const fallback = getAddress(noOpTarget)\n const targets: Address[] = [zeroAddress]\n const values: bigint[] = [0n]\n const calldatas: `0x${string}`[] = []\n const optionStartIndices: number[] = []\n let nextIndex = 1\n for (const opt of options) {\n optionStartIndices.push(nextIndex)\n const userActions = opt.actions ?? []\n const encoded = userActions.length === 0 ? [noOpAction(fallback)] : userActions.map(encodeUserAction)\n for (const e of encoded) {\n targets.push(e.target)\n values.push(e.value)\n calldatas.push(e.calldata)\n nextIndex += 1\n }\n }\n calldatas.unshift(encodeDeltaMetadata(options.length, nWinners, optionStartIndices))\n return { targets, values, calldatas, description }\n}\n\nfunction requireGovChain(chainId: number): void {\n if (!isContinuumDaoLockChain(chainId)) {\n throw new Error('ContinuumDAO governance is Linea-only.')\n }\n}\n\nexport function requireGovernor(chainId: number, override?: string): Address {\n requireGovChain(chainId)\n if (override && isConfiguredAddress(override)) return getAddress(override)\n const gov = governorAddressOnEvmChain(chainId)\n if (!gov) throw new Error('Governor address is not configured for this chain yet.')\n return gov\n}\n\nfunction meta(\n evmType: string,\n chainId: number,\n to: Address,\n extra: Record<string, unknown>,\n gasLimit: bigint,\n): Record<string, unknown> {\n return {\n destinationAddress: to,\n signatureText: JSON.stringify({ kind: 'ContinuumDAO', ...extra, chainId }),\n evm: { type: evmType, version: 1, chainId: String(chainId), protocolId: CONTINUUM_DAO_PROTOCOL_ID },\n continuumDao: { ...extra, gas: { baseGasUnits: gasLimit.toString() } },\n }\n}\n\nasync function finalizeGov(\n args: ContinuumDaoCommonArgs,\n to: Address,\n data: `0x${string}`,\n fallbackGas: bigint,\n evmType: string,\n extra: Record<string, unknown>,\n purposeSuffix: string,\n value = 0n,\n): Promise<{ bodyForSign: Record<string, unknown>; messageToSign: string }> {\n const step: EvmTxStep = { to, data, value, fallbackGas }\n const firstDataNo0x = data.startsWith('0x') ? data.slice(2) : data\n return buildEvmMultisignBatch({\n context: {\n chainCategory: 'evm',\n keyGen: args.keyGen,\n purposeText: args.purposeText,\n chainId: args.chainId,\n rpcUrl: args.rpcUrl.trim(),\n executorAddress: args.executorAddress,\n chainDetail: args.chainDetail,\n useCustomGas: args.useCustomGas,\n customGasChainDetails: args.customGasChainDetails,\n },\n steps: [step],\n purposeSuffix,\n firstMsgRawNo0x: firstDataNo0x,\n destinationAddress: to,\n buildBatchMeta: ({ gasLimit }) => meta(evmType, args.chainId, to, extra, gasLimit),\n })\n}\n\nasync function requireProposalThreshold(\n args: ContinuumDaoCommonArgs & { governor?: string },\n): Promise<{ votes: string; threshold: string }> {\n const power = await continuumDaoFetchVotingPower({\n chainId: args.chainId,\n rpcUrl: args.rpcUrl,\n account: args.executorAddress,\n governor: args.governor,\n })\n if (BigInt(power.votes) < BigInt(power.threshold)) {\n const { votingPowerRefuse } = await import('./simulateProposal.js')\n throw new Error(\n votingPowerRefuse({\n account: args.executorAddress,\n votes: power.votes,\n threshold: power.threshold,\n }),\n )\n }\n return power\n}\n\nexport async function buildEvmMultisignBodyContinuumDaoProposeBravo(\n args: ContinuumDaoCommonArgs & {\n title: string\n actions?: GovActionInput[]\n governor?: string\n noOpTarget?: string\n forumKey: string\n forumUrl?: string\n },\n): Promise<{ bodyForSign: Record<string, unknown>; messageToSign: string; proposalArgs: ReturnType<typeof buildBravoProposalArgs> }> {\n const forumKey = assertContinuumDaoForumTopicKey(args.forumKey, args.forumUrl)\n const gov = requireGovernor(args.chainId, args.governor)\n await requireProposalThreshold(args)\n const noOp = args.noOpTarget?.trim() || args.executorAddress\n const { assertContinuumDaoProposalSimulation } = await import('./simulateProposal.js')\n const simulation = await assertContinuumDaoProposalSimulation({\n chainId: args.chainId,\n rpcUrl: args.rpcUrl,\n account: args.executorAddress,\n configuration: 'bravo',\n title: args.title,\n actions: args.actions,\n governor: gov,\n noOpTarget: noOp,\n })\n const proposalArgs = buildBravoProposalArgs(args.actions ?? [], args.title.trim(), noOp)\n const data = encodeFunctionData({\n abi: governorWriteAbi,\n functionName: 'propose',\n args: [proposalArgs.targets, proposalArgs.values, proposalArgs.calldatas, proposalArgs.description],\n })\n const built = await finalizeGov(\n args,\n gov,\n data,\n CONTINUUM_DAO_PROPOSE_FALLBACK,\n 'continuum_dao_propose',\n {\n name: 'ContinuumDAO.propose',\n configuration: 'bravo',\n title: proposalArgs.description,\n forumKey,\n simulation: { ok: simulation.ok, account: simulation.account, source: simulation.execute.source },\n },\n 'continuum-dao propose bravo',\n )\n return { ...built, proposalArgs }\n}\n\nexport async function buildEvmMultisignBodyContinuumDaoProposeDelta(\n args: ContinuumDaoCommonArgs & {\n title: string\n options: GovOptionInput[]\n nWinners: number\n governor?: string\n noOpTarget?: string\n forumKey: string\n forumUrl?: string\n },\n): Promise<{ bodyForSign: Record<string, unknown>; messageToSign: string; proposalArgs: ReturnType<typeof buildDeltaProposalArgs> }> {\n const forumKey = assertContinuumDaoForumTopicKey(args.forumKey, args.forumUrl)\n const gov = requireGovernor(args.chainId, args.governor)\n await requireProposalThreshold(args)\n const noOp = args.noOpTarget?.trim() || args.executorAddress\n const { assertContinuumDaoProposalSimulation } = await import('./simulateProposal.js')\n const simulation = await assertContinuumDaoProposalSimulation({\n chainId: args.chainId,\n rpcUrl: args.rpcUrl,\n account: args.executorAddress,\n configuration: 'delta',\n title: args.title,\n options: args.options,\n nWinners: args.nWinners,\n governor: gov,\n noOpTarget: noOp,\n })\n const proposalArgs = buildDeltaProposalArgs(args.options, Number(args.nWinners), args.title.trim(), noOp)\n const data = encodeFunctionData({\n abi: governorWriteAbi,\n functionName: 'propose',\n args: [proposalArgs.targets, proposalArgs.values, proposalArgs.calldatas, proposalArgs.description],\n })\n const built = await finalizeGov(\n args,\n gov,\n data,\n CONTINUUM_DAO_PROPOSE_FALLBACK,\n 'continuum_dao_propose',\n {\n name: 'ContinuumDAO.propose',\n configuration: 'delta',\n title: proposalArgs.description,\n nWinners: args.nWinners,\n forumKey,\n simulation: { ok: simulation.ok, account: simulation.account, source: simulation.execute.source },\n },\n 'continuum-dao propose delta',\n )\n return { ...built, proposalArgs }\n}\n\nasync function requireVoteEligible(\n args: ContinuumDaoCommonArgs & { proposalId: string | number | bigint; governor?: string },\n): Promise<void> {\n const st = await continuumDaoFetchProposalState({\n chainId: args.chainId,\n rpcUrl: args.rpcUrl,\n proposalId: args.proposalId,\n governor: args.governor,\n })\n if (st.state !== 1) {\n throw new Error(`Proposal is not Active (on-chain state ${st.state}).`)\n }\n const elig = await continuumDaoFetchProposalVoteEligibility({\n chainId: args.chainId,\n rpcUrl: args.rpcUrl,\n proposalId: args.proposalId,\n account: args.executorAddress,\n governor: args.governor,\n })\n if (elig.hasVoted) throw new Error('This KeyGen has already voted on this proposal.')\n if (BigInt(elig.snapshotVotes) === 0n) {\n throw new Error('No veCTM voting power at snapshot for this KeyGen.')\n }\n}\n\nexport async function buildEvmMultisignBodyContinuumDaoCastVoteBravo(\n args: ContinuumDaoCommonArgs & { proposalId: string | number | bigint; support: 0 | 1 | 2; governor?: string },\n): Promise<{ bodyForSign: Record<string, unknown>; messageToSign: string }> {\n const resolved = await resolveGovernorProposalRef(args.proposalId)\n const gov = requireGovernor(args.chainId, resolved.governorAddress ?? args.governor)\n const proposalId = resolved.proposalId\n await requireVoteEligible({\n ...args,\n proposalId,\n governor: resolved.governorAddress ?? args.governor,\n })\n const data = encodeFunctionData({\n abi: governorWriteAbi,\n functionName: 'castVote',\n args: [proposalId, args.support],\n })\n return finalizeGov(\n args,\n gov,\n data,\n CONTINUUM_DAO_VOTE_FALLBACK,\n 'continuum_dao_cast_vote',\n { name: 'ContinuumDAO.castVote', proposalId: proposalId.toString(), support: args.support },\n 'continuum-dao vote bravo',\n )\n}\n\nexport async function buildEvmMultisignBodyContinuumDaoCastVoteDelta(\n args: ContinuumDaoCommonArgs & {\n proposalId: string | number | bigint\n weights: Array<string | number | bigint>\n governor?: string\n },\n): Promise<{ bodyForSign: Record<string, unknown>; messageToSign: string }> {\n const resolved = await resolveGovernorProposalRef(args.proposalId)\n const gov = requireGovernor(args.chainId, resolved.governorAddress ?? args.governor)\n const proposalId = resolved.proposalId\n if (args.weights.length < 3) {\n throw new Error('Delta vote must include one weight per option plus a NOTA slot.')\n }\n await requireVoteEligible({\n ...args,\n proposalId,\n governor: resolved.governorAddress ?? args.governor,\n })\n const params = encodeDeltaVoteParams(args.weights)\n const data = encodeFunctionData({\n abi: governorWriteAbi,\n functionName: 'castVoteWithReasonAndParams',\n args: [proposalId, 0, '', params],\n })\n return finalizeGov(\n args,\n gov,\n data,\n CONTINUUM_DAO_VOTE_FALLBACK,\n 'continuum_dao_cast_vote',\n { name: 'ContinuumDAO.castVoteWithReasonAndParams', proposalId: proposalId.toString() },\n 'continuum-dao vote delta',\n )\n}\n\nexport async function buildEvmMultisignBodyContinuumDaoExecute(\n args: ContinuumDaoCommonArgs & { proposalId: string | number | bigint; governor?: string },\n): Promise<{ bodyForSign: Record<string, unknown>; messageToSign: string }> {\n const resolved = await resolveGovernorProposalRef(args.proposalId)\n const gov = requireGovernor(args.chainId, resolved.governorAddress ?? args.governor)\n const proposalId = resolved.proposalId\n const data = encodeFunctionData({\n abi: governorWriteAbi,\n functionName: 'execute',\n args: [proposalId],\n })\n return finalizeGov(\n args,\n gov,\n data,\n CONTINUUM_DAO_EXECUTE_FALLBACK,\n 'continuum_dao_execute',\n { name: 'ContinuumDAO.execute', proposalId: proposalId.toString() },\n 'continuum-dao execute',\n )\n}\n\nexport async function buildEvmMultisignBodyContinuumDaoCancel(\n args: ContinuumDaoCommonArgs & { proposalId: string | number | bigint; governor?: string },\n): Promise<{ bodyForSign: Record<string, unknown>; messageToSign: string }> {\n const resolved = await resolveGovernorProposalRef(args.proposalId)\n const gov = requireGovernor(args.chainId, resolved.governorAddress ?? args.governor)\n const proposalId = resolved.proposalId\n const data = encodeFunctionData({\n abi: governorWriteAbi,\n functionName: 'cancel',\n args: [proposalId],\n })\n return finalizeGov(\n args,\n gov,\n data,\n CONTINUUM_DAO_CANCEL_FALLBACK,\n 'continuum_dao_cancel',\n { name: 'ContinuumDAO.cancel', proposalId: proposalId.toString() },\n 'continuum-dao cancel',\n )\n}\n\nexport function publicClient(rpcUrl: string, chainId: number) {\n return createPublicClient({\n chain: defineChain({\n id: chainId,\n name: 'ContinuumDAO',\n nativeCurrency: { decimals: 18, name: 'Ether', symbol: 'ETH' },\n rpcUrls: { default: { http: [rpcUrl.trim()] } },\n }),\n transport: defiEvmTransport(rpcUrl.trim()),\n })\n}\n\nexport async function continuumDaoHashProposal(args: {\n chainId: number | string\n rpcUrl: string\n targets: Address[]\n values: bigint[]\n calldatas: `0x${string}`[]\n description: string\n governor?: string\n}): Promise<{ proposalId: string }> {\n const chainId = Number(args.chainId)\n const gov = requireGovernor(chainId, args.governor)\n const client = publicClient(args.rpcUrl, chainId)\n const id = await client.readContract({\n address: gov,\n abi: governorReadAbi,\n functionName: 'hashProposal',\n args: [args.targets, args.values, args.calldatas, proposalDescriptionHash(args.description)],\n })\n return { proposalId: id.toString() }\n}\n\nexport async function continuumDaoFetchVotingPower(args: {\n chainId: number | string\n rpcUrl: string\n account: string\n governor?: string\n}): Promise<{ votes: string; threshold: string; clock: string }> {\n const chainId = Number(args.chainId)\n const gov = requireGovernor(chainId, args.governor)\n const client = publicClient(args.rpcUrl, chainId)\n const clock = await client.readContract({ address: gov, abi: governorReadAbi, functionName: 'clock' })\n const timepoint = clock > 0 ? clock - 1 : 0\n const [votes, threshold] = await Promise.all([\n client.readContract({\n address: gov,\n abi: governorReadAbi,\n functionName: 'getVotes',\n args: [getAddress(args.account), BigInt(timepoint)],\n }),\n client.readContract({ address: gov, abi: governorReadAbi, functionName: 'proposalThreshold' }),\n ])\n return { votes: votes.toString(), threshold: threshold.toString(), clock: clock.toString() }\n}\n\nexport async function continuumDaoFetchProposalState(args: {\n chainId: number | string\n rpcUrl: string\n proposalId: string | number | bigint\n governor?: string\n}): Promise<{\n state: number\n againstVotes: string\n forVotes: string\n abstainVotes: string\n /** True when proposalVotes() failed but state() succeeded. */\n votesPartial: boolean\n /** Governor proposal id actually used (hash). */\n proposalId: string\n /** Backend catalog id when `proposalId` was resolved from one. */\n catalogId?: number\n}> {\n const chainId = Number(args.chainId)\n const resolved = await resolveGovernorProposalRef(args.proposalId)\n const gov = requireGovernor(chainId, resolved.governorAddress ?? args.governor)\n const client = publicClient(args.rpcUrl, chainId)\n const proposalId = resolved.proposalId\n const state = await client.readContract({\n address: gov,\n abi: governorReadAbi,\n functionName: 'state',\n args: [proposalId],\n })\n let againstVotes = '0'\n let forVotes = '0'\n let abstainVotes = '0'\n let votesPartial = false\n try {\n const votes = await client.readContract({\n address: gov,\n abi: governorReadAbi,\n functionName: 'proposalVotes',\n args: [proposalId],\n })\n againstVotes = votes[0].toString()\n forVotes = votes[1].toString()\n abstainVotes = votes[2].toString()\n } catch {\n votesPartial = true\n }\n return {\n state: Number(state),\n againstVotes,\n forVotes,\n abstainVotes,\n votesPartial,\n proposalId: proposalId.toString(),\n catalogId: resolved.catalogId,\n }\n}\n\n/** Snapshot voting power and prior vote for a KeyGen on a proposal. */\nexport async function continuumDaoFetchProposalVoteEligibility(args: {\n chainId: number | string\n rpcUrl: string\n proposalId: string | number | bigint\n account: string\n governor?: string\n}): Promise<{ hasVoted: boolean; snapshotVotes: string; snapshotBlock: string }> {\n const chainId = Number(args.chainId)\n const resolved = await resolveGovernorProposalRef(args.proposalId)\n const gov = requireGovernor(chainId, resolved.governorAddress ?? args.governor)\n const client = publicClient(args.rpcUrl, chainId)\n const proposalId = resolved.proposalId\n const account = getAddress(args.account)\n const [hasVoted, snapshotBlock] = await Promise.all([\n client.readContract({\n address: gov,\n abi: governorReadAbi,\n functionName: 'hasVoted',\n args: [proposalId, account],\n }),\n client.readContract({\n address: gov,\n abi: governorReadAbi,\n functionName: 'proposalSnapshot',\n args: [proposalId],\n }),\n ])\n const snapshotVotes = await client.readContract({\n address: gov,\n abi: governorReadAbi,\n functionName: 'getVotes',\n args: [account, snapshotBlock],\n })\n return {\n hasVoted,\n snapshotVotes: snapshotVotes.toString(),\n snapshotBlock: snapshotBlock.toString(),\n }\n}\n\nexport async function continuumDaoFetchProposalCount(args: {\n chainId: number\n rpcUrl: string\n governor?: string\n}): Promise<{ count: string }> {\n const gov = requireGovernor(args.chainId, args.governor)\n const client = publicClient(args.rpcUrl, args.chainId)\n const count = await client.readContract({ address: gov, abi: governorReadAbi, functionName: 'proposalCount' })\n return { count: count.toString() }\n}\n\nexport type ContinuumDaoProposalCatalog = {\n proposals: unknown[]\n total?: number\n minIndex?: number\n maxIndex?: number\n}\n\n/**\n * POST /proposals `start`/`end` are **catalog id indexes**, not offsets.\n * `end` is exclusive. Superseded-governor rows use negative ids (currently -2, -1).\n */\n/**\n * Backend catalog ids are small signed integers (including 0, -1, -2).\n * Governor `proposalId` values are 256-bit hashes — never 0 for a real proposal.\n */\nexport function looksLikeProposalCatalogId(raw: string | number | bigint): boolean {\n const s = String(raw).trim()\n if (!/^-?\\d+$/.test(s)) return false\n const n = Number(s)\n return Number.isSafeInteger(n) && Math.abs(n) <= 1_000_000\n}\n\nexport type ResolvedGovernorProposalRef = {\n proposalId: bigint\n catalogId?: number\n governorAddress?: string\n}\n\n/** Map catalog id 0 / -1 / -2 to the row’s onchainId + governor; leave hashes unchanged. */\nexport async function resolveGovernorProposalRef(\n raw: string | number | bigint,\n): Promise<ResolvedGovernorProposalRef> {\n if (!looksLikeProposalCatalogId(raw)) {\n return { proposalId: BigInt(String(raw).trim()) }\n }\n const catalogId = Number(String(raw).trim())\n const { proposal } = await continuumDaoFetchProposal({ id: catalogId })\n const wrap = asRecord(proposal)\n const parsed =\n parseBackendProposal(proposal) ??\n parseBackendProposal(wrap?.proposal) ??\n parseBackendProposal(wrap?.data)\n if (!parsed?.onchainId) {\n throw new Error(`catalog id ${catalogId} has no onchainId`)\n }\n return {\n proposalId: BigInt(parsed.onchainId),\n catalogId: parsed.id ?? catalogId,\n governorAddress: parsed.governorAddress,\n }\n}\n\nexport function resolveProposalCatalogRange(\n catalog: { minIndex?: number; maxIndex?: number },\n args?: { start?: number; end?: number },\n): { start: number; end: number } {\n const hasBounds = Number.isFinite(catalog.minIndex) && Number.isFinite(catalog.maxIndex)\n const minIndex = hasBounds ? Number(catalog.minIndex) : 0\n const maxIndex = hasBounds ? Number(catalog.maxIndex) : 0\n if (!hasBounds) {\n const start = args?.start ?? 0\n const end = args?.end ?? start + 20\n return { start, end }\n }\n return {\n start: args?.start ?? minIndex,\n end: args?.end ?? maxIndex + 1,\n }\n}\n\nasync function postProposalCatalog(body: Record<string, number>): Promise<ContinuumDaoProposalCatalog> {\n const res = await fetch(`${CONTINUUM_DAO_GOVERNANCE_API}/proposals`, {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify(body),\n })\n if (!res.ok) throw new Error(`proposals: ${res.status} ${await res.text()}`)\n return (await res.json()) as ContinuumDaoProposalCatalog\n}\n\nexport async function continuumDaoFetchProposals(args: {\n start?: number\n end?: number\n} = {}): Promise<ContinuumDaoProposalCatalog> {\n const bounds = await postProposalCatalog({})\n const { start, end } = resolveProposalCatalogRange(bounds, args)\n const listed = await postProposalCatalog({ start, end })\n return {\n ...listed,\n total: listed.total ?? bounds.total,\n minIndex: listed.minIndex ?? bounds.minIndex,\n maxIndex: listed.maxIndex ?? bounds.maxIndex,\n }\n}\n\nexport const GOVERNOR_STATE = {\n Pending: 0,\n Active: 1,\n Canceled: 2,\n Defeated: 3,\n Succeeded: 4,\n Queued: 5,\n Expired: 6,\n Executed: 7,\n} as const\n\nexport const GOVERNOR_STATE_LABELS = [\n 'Pending',\n 'Active',\n 'Canceled',\n 'Defeated',\n 'Succeeded',\n 'Queued',\n 'Expired',\n 'Executed',\n] as const\n\nexport type LiveProposalBucket = 'live' | 'pending' | 'readyToExecute' | 'recentlyCompleted' | 'unknown'\n\nexport function bucketGovernorState(state: number | null | undefined): LiveProposalBucket {\n if (state == null || !Number.isFinite(state)) return 'unknown'\n if (state === GOVERNOR_STATE.Active) return 'live'\n if (state === GOVERNOR_STATE.Pending) return 'pending'\n if (state === GOVERNOR_STATE.Succeeded) return 'readyToExecute'\n if (\n state === GOVERNOR_STATE.Canceled ||\n state === GOVERNOR_STATE.Defeated ||\n state === GOVERNOR_STATE.Queued ||\n state === GOVERNOR_STATE.Expired ||\n state === GOVERNOR_STATE.Executed\n ) {\n return 'recentlyCompleted'\n }\n return 'unknown'\n}\n\nexport type LiveProposalRow = {\n id?: number\n onchainId: string\n title: string\n configuration?: number\n governorAddress?: string\n proposer?: string\n committeeProposer?: boolean\n state: number | null\n stateLabel: string\n bucket: LiveProposalBucket\n againstVotes?: string\n forVotes?: string\n abstainVotes?: string\n}\n\nexport type ContinuumDaoLiveProposalsResult = {\n overlay: 'on-chain' | 'backend-only'\n scanned: number\n live: LiveProposalRow[]\n pending: LiveProposalRow[]\n readyToExecute: LiveProposalRow[]\n recentlyCompleted: LiveProposalRow[]\n unknown: LiveProposalRow[]\n note: string\n}\n\nfunction asRecord(value: unknown): Record<string, unknown> | null {\n return value && typeof value === 'object' && !Array.isArray(value) ? (value as Record<string, unknown>) : null\n}\n\nfunction parseBackendProposal(raw: unknown): {\n id?: number\n onchainId: string\n title: string\n configuration?: number\n governorAddress?: string\n proposer?: string\n committeeProposer?: boolean\n} | null {\n const row = asRecord(raw)\n if (!row) return null\n const onchainId = String(row.onchainId ?? row.onchain_id ?? row.proposalId ?? '').trim()\n if (!onchainId) return null\n const idRaw = row.id\n const id = typeof idRaw === 'number' ? idRaw : Number(idRaw)\n const governorRaw = String(row.governorAddress ?? row.governor_address ?? '').trim()\n const proposerRaw = String(row.proposer ?? '').trim()\n const proposer = isConfiguredAddress(proposerRaw) ? getAddress(proposerRaw) : undefined\n return {\n id: Number.isFinite(id) ? id : undefined,\n onchainId,\n title: String(row.title ?? 'Untitled'),\n configuration: typeof row.configuration === 'number' ? row.configuration : undefined,\n governorAddress: isConfiguredAddress(governorRaw) ? getAddress(governorRaw) : undefined,\n proposer,\n committeeProposer: proposer ? isContinuumDaoCommitteeProposer(proposer) : undefined,\n }\n}\n\nexport function isLegacyContinuumDaoGovernor(addr?: string | null): boolean {\n if (!addr || !isConfiguredAddress(addr)) return false\n return getAddress(addr) === CONTINUUM_DAO_LINEA_GOVERNOR_LEGACY_ADDRESS\n}\n\nexport function summarizeLiveProposals(result: Omit<ContinuumDaoLiveProposalsResult, 'note'>): string {\n if (result.overlay === 'backend-only') {\n return `Scanned ${result.scanned} backend proposal(s) but could not overlay ContinuumDAO.state. Do not call them live. Pass Linea chainId + rpcUrl + a non-zero governor.`\n }\n const label = (p: LiveProposalRow) =>\n `#${p.id ?? '—'} ${p.title}${p.committeeProposer ? ' [Committee]' : ''}`\n const liveTitles = result.live.map(label).join('; ') || 'none'\n const execTitles = result.readyToExecute.map(label).join('; ') || 'none'\n return `Live (Active, voting now): ${result.live.length} (${liveTitles}). Pending: ${result.pending.length}. Passed, ready to execute (Succeeded): ${result.readyToExecute.length} (${execTitles}). Recently completed in this scan: ${result.recentlyCompleted.length}. Queue is not implemented. After naming a proposal, offer ctm_continuum_dao_fetch_proposal_votes so the operator can see who voted and how.`\n}\n\nasync function mapPool<T, R>(items: T[], concurrency: number, fn: (item: T) => Promise<R>): Promise<R[]> {\n const out: R[] = []\n let i = 0\n const workers = Array.from({ length: Math.min(concurrency, items.length) }, async () => {\n while (i < items.length) {\n const idx = i\n i += 1\n out[idx] = await fn(items[idx]!)\n }\n })\n await Promise.all(workers)\n return out\n}\n\nexport async function continuumDaoFetchLiveProposals(args: {\n chainId?: number | string\n rpcUrl?: string\n governor?: string\n limit?: number\n completedLimit?: number\n}): Promise<ContinuumDaoLiveProposalsResult> {\n const limit = Math.min(Math.max(Number(args.limit) || 40, 1), 100)\n const completedLimit = Math.min(Math.max(Number(args.completedLimit) || 8, 0), 20)\n const listed = await continuumDaoFetchProposals()\n const rawList = Array.isArray(listed.proposals) ? listed.proposals : []\n const parsed = rawList.map(parseBackendProposal).filter((p): p is NonNullable<typeof p> => p != null)\n const ordered = [...parsed].sort((a, b) => (a.id ?? 0) - (b.id ?? 0))\n const latest = ordered.length > limit ? ordered.slice(ordered.length - limit) : ordered\n\n const chainId = args.chainId != null && String(args.chainId).trim() !== '' ? Number(args.chainId) : NaN\n const rpcUrl = (args.rpcUrl ?? '').trim()\n let overlay: 'on-chain' | 'backend-only' = 'backend-only'\n try {\n if (rpcUrl && Number.isFinite(chainId)) {\n requireGovernor(chainId, args.governor)\n overlay = 'on-chain'\n }\n } catch {\n overlay = 'backend-only'\n }\n\n const rows: LiveProposalRow[] = overlay === 'on-chain'\n ? await mapPool(latest, 6, async (p) => {\n try {\n const st = await continuumDaoFetchProposalState({\n chainId,\n rpcUrl,\n proposalId: p.onchainId,\n governor: p.governorAddress ?? args.governor,\n })\n return {\n ...p,\n state: st.state,\n stateLabel: GOVERNOR_STATE_LABELS[st.state] ?? String(st.state),\n bucket: bucketGovernorState(st.state),\n againstVotes: st.againstVotes,\n forVotes: st.forVotes,\n abstainVotes: st.abstainVotes,\n }\n } catch {\n return { ...p, state: null, stateLabel: 'Unknown', bucket: 'unknown' as const }\n }\n })\n : latest.map((p) => ({ ...p, state: null, stateLabel: 'Unknown', bucket: 'unknown' as const }))\n\n const live = rows.filter((r) => r.bucket === 'live')\n const pending = rows.filter((r) => r.bucket === 'pending')\n const readyToExecute = rows.filter((r) => r.bucket === 'readyToExecute')\n const recentlyCompleted = rows.filter((r) => r.bucket === 'recentlyCompleted').slice(0, completedLimit)\n const unknown = rows.filter((r) => r.bucket === 'unknown')\n const grouped = {\n overlay,\n scanned: rows.length,\n live,\n pending,\n readyToExecute,\n recentlyCompleted,\n unknown,\n }\n return { ...grouped, note: summarizeLiveProposals(grouped) }\n}\n\nexport async function continuumDaoFetchProposal(args: { id: string | number }): Promise<{ proposal: unknown }> {\n const res = await fetch(`${CONTINUUM_DAO_GOVERNANCE_API}/proposals/${args.id}`, { cache: 'no-store' })\n if (!res.ok) throw new Error(`proposal: ${res.status} ${await res.text()}`)\n return { proposal: await res.json() }\n}\n\nexport type ContinuumDaoRegisterProposalPayload = {\n onchainId: string\n title: string\n description: string\n proposer: string\n forumKey: string\n type: number\n configuration: 0 | 1\n actions?: unknown[]\n options?: unknown[]\n}\n\nexport async function buildEvmMultisignBodyContinuumDaoProposeDeltaFromMcp(\n args: ContinuumDaoCommonArgs & {\n title: string\n options: GovOptionInput[]\n nWinners: string | number\n governor?: string\n noOpTarget?: string\n forumKey: string\n forumUrl?: string\n },\n) {\n return buildEvmMultisignBodyContinuumDaoProposeDelta({\n ...args,\n nWinners: Number(args.nWinners),\n })\n}\n\nexport async function buildEvmMultisignBodyContinuumDaoCastVoteBravoFromMcp(\n args: ContinuumDaoCommonArgs & { proposalId: string | number | bigint; support: 0 | 1 | 2 | string; governor?: string },\n) {\n const support = Number(args.support)\n if (support !== 0 && support !== 1 && support !== 2) throw new Error('Bravo support must be 0, 1, or 2.')\n return buildEvmMultisignBodyContinuumDaoCastVoteBravo({ ...args, support })\n}\n\nexport async function continuumDaoRegisterProposal(\n payload: ContinuumDaoRegisterProposalPayload,\n): Promise<{ ok: true; result: unknown }> {\n assertContinuumDaoForumTopicKey(payload.forumKey)\n const res = await fetch(`${CONTINUUM_DAO_GOVERNANCE_API}/proposals/create`, {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify(payload),\n })\n if (!res.ok) throw new Error(`proposals/create: ${res.status} ${await res.text()}`)\n return { ok: true, result: await res.json() }\n}\n","import type { ProtocolModule } from './types.js'\n\nconst modules: ProtocolModule[] = []\n\nexport function registerProtocolModule(mod: ProtocolModule): void {\n const existing = modules.findIndex((m) => m.id === mod.id)\n if (existing >= 0) {\n modules[existing] = mod\n } else {\n modules.push(mod)\n }\n}\n\nexport function getProtocolModules(): readonly ProtocolModule[] {\n return modules\n}\n\nexport function getProtocolModule(id: string): ProtocolModule | undefined {\n return modules.find((m) => m.id === id)\n}\n\nexport function getActionsByChainCategory(category: string): ProtocolModule['actions'] {\n return modules.filter((m) => m.chainCategory === category).flatMap((m) => m.actions)\n}\n","import type { ProtocolModule } from '../../../core/types.js'\nimport { registerProtocolModule } from '../../../core/registry.js'\nimport { CONTINUUM_DAO_PROTOCOL_ID, isContinuumDaoSupportedChainId } from './constants.js'\nimport { continuumDaoMarketplaceProtocolModule } from './marketplaceModule.js'\n\nexport * from './constants.js'\nexport * from './escrowRules.js'\nexport * from './escrowPreflight.js'\nexport * from './multisign.js'\nexport * from './governance.js'\nexport * from './simulateProposal.js'\nexport * from './foundryProposalScript.js'\nexport * from './composeProposalAction.js'\nexport * from './explainProposal.js'\nexport * from './proposalVotes.js'\nexport * from './forum.js'\nexport * from './marketplaceTypes.js'\nexport * from './marketplaceFold.js'\nexport * from './marketplacePlan.js'\nexport * from './marketplaceChain.js'\nexport * from './marketplaceIndex.js'\nexport * from './marketplaceCatalog.js'\nexport * from './marketplaceSearch.js'\nexport * from './marketplaceFeeAlternative.js'\nexport * from './marketplaceMultisign.js'\nexport * from './marketplaceAddAsset.js'\nexport { continuumDaoMarketplaceProtocolModule } from './marketplaceModule.js'\n\nexport { CONTINUUM_DAO_PROTOCOL_ID }\n\nregisterProtocolModule(continuumDaoMarketplaceProtocolModule)\n\nexport const continuumDaoProtocolModule: ProtocolModule = {\n id: CONTINUUM_DAO_PROTOCOL_ID,\n chainCategory: 'evm',\n isChainSupported(ctx) {\n if (ctx.chainCategory !== 'evm') return false\n const n = typeof ctx.chainId === 'number' ? ctx.chainId : Number.parseInt(String(ctx.chainId), 10)\n return isContinuumDaoSupportedChainId(n)\n },\n isTokenSupported(token) {\n return token.category === 'evm' && (token.kind === 'erc20' || token.kind === 'erc721')\n },\n actions: [\n { id: 'continuum-dao.create-lock', protocolId: CONTINUUM_DAO_PROTOCOL_ID, chainCategory: 'evm', description: 'Approve CTM + create_lock', commonParams: ['keyGen', 'purposeText', 'useCustomGas'], params: { amountHuman: { type: 'string', required: true, description: 'CTM amount' }, lockDurationSeconds: { type: 'string', required: true, description: 'Lock duration in seconds' } } },\n { id: 'continuum-dao.increase-amount', protocolId: CONTINUUM_DAO_PROTOCOL_ID, chainCategory: 'evm', description: 'Increase lock amount', commonParams: ['keyGen', 'purposeText', 'useCustomGas'], params: { tokenId: { type: 'string', required: true, description: 'veCTM token id' }, amountHuman: { type: 'string', required: true, description: 'CTM amount to add' } } },\n { id: 'continuum-dao.increase-unlock-time', protocolId: CONTINUUM_DAO_PROTOCOL_ID, chainCategory: 'evm', description: 'Increase unlock time', commonParams: ['keyGen', 'purposeText', 'useCustomGas'], params: { tokenId: { type: 'string', required: true, description: 'veCTM token id' }, lockDurationSeconds: { type: 'string', required: true, description: 'Duration from week boundary to new unlock' } } },\n { id: 'continuum-dao.split', protocolId: CONTINUUM_DAO_PROTOCOL_ID, chainCategory: 'evm', description: 'Split a veCTM lock', commonParams: ['keyGen', 'purposeText', 'useCustomGas'], params: { tokenId: { type: 'string', required: true, description: 'Source token id' }, extractedHuman: { type: 'string', required: true, description: 'CTM extracted into the new lock' } } },\n { id: 'continuum-dao.merge', protocolId: CONTINUUM_DAO_PROTOCOL_ID, chainCategory: 'evm', description: 'Merge two veCTM locks', commonParams: ['keyGen', 'purposeText', 'useCustomGas'], params: { fromTokenId: { type: 'string', required: true, description: 'Burned token id' }, toTokenId: { type: 'string', required: true, description: 'Surviving token id' } } },\n { id: 'continuum-dao.withdraw', protocolId: CONTINUUM_DAO_PROTOCOL_ID, chainCategory: 'evm', description: 'Withdraw an expired lock', commonParams: ['keyGen', 'purposeText', 'useCustomGas'], params: { tokenId: { type: 'string', required: true, description: 'veCTM token id' } } },\n { id: 'continuum-dao.liquidate', protocolId: CONTINUUM_DAO_PROTOCOL_ID, chainCategory: 'evm', description: 'Liquidate a lock', commonParams: ['keyGen', 'purposeText', 'useCustomGas'], params: { tokenId: { type: 'string', required: true, description: 'veCTM token id' } } },\n { id: 'continuum-dao.delegate', protocolId: CONTINUUM_DAO_PROTOCOL_ID, chainCategory: 'evm', description: 'Delegate voting power', commonParams: ['keyGen', 'purposeText', 'useCustomGas'], params: { delegatee: { type: 'string', required: true, description: 'Delegatee address' } } },\n { id: 'continuum-dao.undelegate', protocolId: CONTINUUM_DAO_PROTOCOL_ID, chainCategory: 'evm', description: 'Return voting power to the KeyGen (delegate to self)', commonParams: ['keyGen', 'purposeText', 'useCustomGas'], params: {} },\n { id: 'continuum-dao.fetch-delegates', protocolId: CONTINUUM_DAO_PROTOCOL_ID, chainCategory: 'evm', description: 'Read VotingEscrow.delegates(account)', commonParams: [], params: { account: { type: 'string', required: true, description: 'KeyGen or wallet address' } } },\n { id: 'continuum-dao.transfer', protocolId: CONTINUUM_DAO_PROTOCOL_ID, chainCategory: 'evm', description: 'Transfer a veCTM NFT', commonParams: ['keyGen', 'purposeText', 'useCustomGas'], params: { tokenId: { type: 'string', required: true, description: 'veCTM token id' }, to: { type: 'string', required: true, description: 'Recipient' } } },\n { id: 'continuum-dao.attach', protocolId: CONTINUUM_DAO_PROTOCOL_ID, chainCategory: 'evm', description: 'Attach veCTM to the node (authority KeyGen). groupId is implicit from that KeyGen and binds the fee waiver. A second group attaches after rotating authority.', commonParams: ['keyGen', 'purposeText', 'useCustomGas'], params: { nodeKey: { type: 'string', required: true, description: 'Node key' }, tokenId: { type: 'string', required: true, description: 'veCTM token id' }, mpaWallet: { type: 'string', required: true, description: 'MultiSignAgentWallet address' } } },\n { id: 'continuum-dao.request-detach', protocolId: CONTINUUM_DAO_PROTOCOL_ID, chainCategory: 'evm', description: 'Request governance detach', commonParams: ['keyGen', 'purposeText', 'useCustomGas'], params: { tokenId: { type: 'string', required: true, description: 'Attached token id' }, nodeProperties: { type: 'string', required: true, description: 'NodeProperties address' } } },\n { id: 'continuum-dao.propose-bravo', protocolId: CONTINUUM_DAO_PROTOCOL_ID, chainCategory: 'evm', description: 'Propose a Bravo (For/Against/Abstain) proposal', commonParams: ['keyGen', 'purposeText', 'useCustomGas'], params: { title: { type: 'string', required: true, description: 'On-chain description (title)' }, forumKey: { type: 'string', required: true, description: 'Created forum thread URL from forum_create_topic' } } },\n { id: 'continuum-dao.propose-delta', protocolId: CONTINUUM_DAO_PROTOCOL_ID, chainCategory: 'evm', description: 'Propose a Delta multi-option proposal', commonParams: ['keyGen', 'purposeText', 'useCustomGas'], params: { title: { type: 'string', required: true, description: 'On-chain description (title)' }, nWinners: { type: 'number', required: true, description: 'Winning options to execute' }, forumKey: { type: 'string', required: true, description: 'Created forum thread URL from forum_create_topic' } } },\n { id: 'continuum-dao.simulate-proposal', protocolId: CONTINUUM_DAO_PROTOCOL_ID, chainCategory: 'evm', description: 'Dry-run a Bravo/Delta proposal; returns sequential Foundry forge scripts (not isolated eth_call)', commonParams: [], params: { account: { type: 'string', required: false, description: 'Proposer EOA; defaults to KeyGen when keyGenId is set' }, configuration: { type: 'string', required: true, description: 'bravo or delta' } } },\n { id: 'continuum-dao.compose-proposal-action', protocolId: CONTINUUM_DAO_PROTOCOL_ID, chainCategory: 'evm', description: 'Look up a contract function ABI, type-check parameter values, and preview a Bravo/Delta draft table', commonParams: [], params: { target: { type: 'string', required: false, description: 'Action contract address' }, functionName: { type: 'string', required: false, description: 'Function name or signature' }, configuration: { type: 'string', required: false, description: 'bravo or delta for preview' } } },\n { id: 'continuum-dao.cast-vote-bravo', protocolId: CONTINUUM_DAO_PROTOCOL_ID, chainCategory: 'evm', description: 'Cast a Bravo vote', commonParams: ['keyGen', 'purposeText', 'useCustomGas'], params: { proposalId: { type: 'string', required: true, description: 'Catalog id or governor proposal hash' }, support: { type: 'number', required: true, description: '0 against, 1 for, 2 abstain' } } },\n { id: 'continuum-dao.cast-vote-delta', protocolId: CONTINUUM_DAO_PROTOCOL_ID, chainCategory: 'evm', description: 'Cast a Delta vote including NOTA', commonParams: ['keyGen', 'purposeText', 'useCustomGas'], params: { proposalId: { type: 'string', required: true, description: 'Catalog id or governor proposal hash' } } },\n { id: 'continuum-dao.execute', protocolId: CONTINUUM_DAO_PROTOCOL_ID, chainCategory: 'evm', description: 'Execute a succeeded proposal', commonParams: ['keyGen', 'purposeText', 'useCustomGas'], params: { proposalId: { type: 'string', required: true, description: 'Catalog id or governor proposal hash' } } },\n { id: 'continuum-dao.cancel', protocolId: CONTINUUM_DAO_PROTOCOL_ID, chainCategory: 'evm', description: 'Cancel a proposal', commonParams: ['keyGen', 'purposeText', 'useCustomGas'], params: { proposalId: { type: 'string', required: true, description: 'Catalog id or governor proposal hash' } } },\n { id: 'continuum-dao.fetch-live-proposals', protocolId: CONTINUUM_DAO_PROTOCOL_ID, chainCategory: 'evm', description: 'List live/pending/succeeded proposals with on-chain state overlay', commonParams: [], params: { chainId: { type: 'number', required: false, description: 'Linea chain id' }, rpcUrl: { type: 'string', required: false, description: 'Linea RPC for state overlay' } } },\n { id: 'continuum-dao.explain-proposal', protocolId: CONTINUUM_DAO_PROTOCOL_ID, chainCategory: 'evm', description: 'Deconstruct a proposal into a readable briefing (actions, C3, no-ops, risks)', commonParams: [], params: { id: { type: 'string', required: false, description: 'Backend proposal id' }, onchainId: { type: 'string', required: false, description: 'Governor proposal id' } } },\n { id: 'continuum-dao.fetch-proposal-votes', protocolId: CONTINUUM_DAO_PROTOCOL_ID, chainCategory: 'evm', description: 'Who voted on a proposal and how (VoteCast / VoteCastWithParams)', commonParams: [], params: { proposalId: { type: 'string', required: true, description: 'Catalog id or governor proposal hash' } } },\n { id: 'continuum-dao.forum-sign-in', protocolId: CONTINUUM_DAO_PROTOCOL_ID, chainCategory: 'evm', description: 'EIP-712 forum login (veCTM gate first)', commonParams: ['keyGen', 'purposeText'], params: { nodeKey: { type: 'string', required: false, description: 'Attached node key' }, username: { type: 'string', required: false, description: 'Username when there is no node key' } } },\n { id: 'continuum-dao.forum-sign-in-eligible', protocolId: CONTINUUM_DAO_PROTOCOL_ID, chainCategory: 'evm', description: 'Check veCTM forum login eligibility', commonParams: [], params: { address: { type: 'string', required: true, description: 'KeyGen or wallet address' } } },\n { id: 'continuum-dao.forum-sign-out', protocolId: CONTINUUM_DAO_PROTOCOL_ID, chainCategory: 'evm', description: 'Revoke forum ticket and sessions', commonParams: [], params: { ticket: { type: 'string', required: true, description: 'Forum write ticket' } } },\n { id: 'continuum-dao.forum-create-topic', protocolId: CONTINUUM_DAO_PROTOCOL_ID, chainCategory: 'evm', description: 'Create a Governance proposal thread (not Ideas)', commonParams: [], params: { section: { type: 'string', required: false, description: 'decision | election | treasury | constitution | admin' }, title: { type: 'string', required: true, description: 'Thread title' }, content: { type: 'string', required: true, description: 'Proposal body' } } },\n { id: 'continuum-dao.forum-create-idea', protocolId: CONTINUUM_DAO_PROTOCOL_ID, chainCategory: 'evm', description: 'Post an Idea or Suggestion (not a proposal)', commonParams: [], params: { title: { type: 'string', required: true, description: 'Thread title' }, content: { type: 'string', required: true, description: 'Idea body' } } },\n { id: 'continuum-dao.forum-search', protocolId: CONTINUUM_DAO_PROTOCOL_ID, chainCategory: 'evm', description: 'Search forum titles and bodies; optional hours/since', commonParams: [], params: { query: { type: 'string', required: false, description: 'Case-insensitive title or body substring' }, hours: { type: 'number', required: false, description: 'Only posts from the last X hours' }, since: { type: 'string', required: false, description: 'Only posts since this ISO date or unix timestamp' } } },\n { id: 'continuum-dao.forum-recent', protocolId: CONTINUUM_DAO_PROTOCOL_ID, chainCategory: 'evm', description: 'List recent readable posts (id, title, username, createdAt); requires hours or since', commonParams: [], params: { hours: { type: 'number', required: false, description: 'Only posts from the last X hours' }, since: { type: 'string', required: false, description: 'Only posts since this ISO date or unix timestamp' } } },\n { id: 'continuum-dao.forum-delete', protocolId: CONTINUUM_DAO_PROTOCOL_ID, chainCategory: 'evm', description: 'Admin/moderator soft-delete a post, thread, or a user’s posts', commonParams: [], params: { pid: { type: 'string', required: false, description: 'Post id' }, tid: { type: 'string', required: false, description: 'Thread id' }, username: { type: 'string', required: false, description: 'Delete all posts by this user' }, hours: { type: 'number', required: false, description: 'Only in the last X hours (default all)' }, since: { type: 'string', required: false, description: 'Only since this date (default all)' } } },\n { id: 'continuum-dao.forum-unread', protocolId: CONTINUUM_DAO_PROTOCOL_ID, chainCategory: 'evm', description: 'List unread topics for the logged-in user', commonParams: [], params: { filter: { type: 'string', required: false, description: 'all | new | watched | unreplied' } } },\n { id: 'continuum-dao.forum-mark-read', protocolId: CONTINUUM_DAO_PROTOCOL_ID, chainCategory: 'evm', description: 'Mark topic(s) read (tid/url, tids, or all)', commonParams: [], params: { tid: { type: 'string', required: false, description: 'Thread id' }, all: { type: 'boolean', required: false, description: 'Mark every unread topic read' } } },\n { id: 'continuum-dao.forum-mark-unread', protocolId: CONTINUUM_DAO_PROTOCOL_ID, chainCategory: 'evm', description: 'Mark one topic unread', commonParams: [], params: { tid: { type: 'string', required: false, description: 'Thread id' } } },\n ],\n}\n\nregisterProtocolModule(continuumDaoProtocolModule)\n","import type { ProtocolModule } from '../../../core/types.js'\nimport {\n CONTINUUM_DAO_LINEA_CHAIN_ID,\n CONTINUUM_DAO_MARKETPLACE_PROTOCOL_ID,\n} from './constants.js'\n\nconst common = ['keyGen', 'purposeText', 'useCustomGas'] as const\n\nexport const continuumDaoMarketplaceProtocolModule: ProtocolModule = {\n id: CONTINUUM_DAO_MARKETPLACE_PROTOCOL_ID,\n chainCategory: 'evm',\n isChainSupported(ctx) {\n if (ctx.chainCategory !== 'evm') return false\n const n = typeof ctx.chainId === 'number' ? ctx.chainId : Number.parseInt(String(ctx.chainId), 10)\n return n === CONTINUUM_DAO_LINEA_CHAIN_ID\n },\n isTokenSupported(token) {\n return token.category === 'evm' && (token.kind === 'erc20' || token.kind === 'erc721')\n },\n actions: [\n { id: 'continuum-dao-marketplace.fetch-config', protocolId: CONTINUUM_DAO_MARKETPLACE_PROTOCOL_ID, chainCategory: 'evm', description: 'Marketplace payment tokens, durations, and fees', commonParams: [], params: {} },\n { id: 'continuum-dao-marketplace.search', protocolId: CONTINUUM_DAO_MARKETPLACE_PROTOCOL_ID, chainCategory: 'evm', description: 'Rank veCTMs for sale by price, locked CTM, or unlock time', commonParams: [], params: {} },\n { id: 'continuum-dao-marketplace.fee-alternative', protocolId: CONTINUUM_DAO_MARKETPLACE_PROTOCOL_ID, chainCategory: 'evm', description: 'One qualifying direct listing beside 12 times the KeyGen monthly fee', commonParams: [], params: {} },\n { id: 'continuum-dao-marketplace.fetch-listings', protocolId: CONTINUUM_DAO_MARKETPLACE_PROTOCOL_ID, chainCategory: 'evm', description: 'Open listings, or past sales when includeInactive is set', commonParams: [], params: {} },\n { id: 'continuum-dao-marketplace.fetch-offerings', protocolId: CONTINUUM_DAO_MARKETPLACE_PROTOCOL_ID, chainCategory: 'evm', description: 'Open offerings, or closed offers when includeInactive is set', commonParams: [], params: {} },\n { id: 'continuum-dao-marketplace.fetch-auctions', protocolId: CONTINUUM_DAO_MARKETPLACE_PROTOCOL_ID, chainCategory: 'evm', description: 'Live auctions, or settled auctions when includeInactive is set. Each row includes bids.', commonParams: [], params: {} },\n { id: 'continuum-dao-marketplace.fetch-token', protocolId: CONTINUUM_DAO_MARKETPLACE_PROTOCOL_ID, chainCategory: 'evm', description: 'One veCTM: live orders plus history of sales and auctions', commonParams: [], params: { tokenId: { type: 'string', required: true, description: 'veCTM token id' } } },\n { id: 'continuum-dao-marketplace.fetch-activity', protocolId: CONTINUUM_DAO_MARKETPLACE_PROTOCOL_ID, chainCategory: 'evm', description: 'An address’s sales, buys, and auctions including bids', commonParams: [], params: { address: { type: 'string', required: true, description: 'KeyGen or wallet' } } },\n { id: 'continuum-dao-marketplace.fetch-fee-preview', protocolId: CONTINUUM_DAO_MARKETPLACE_PROTOCOL_ID, chainCategory: 'evm', description: 'Protocol fee for a price and veCTM', commonParams: [], params: {} },\n { id: 'continuum-dao-marketplace.create-listing', protocolId: CONTINUUM_DAO_MARKETPLACE_PROTOCOL_ID, chainCategory: 'evm', description: 'Approve veCTM if needed and create a listing', commonParams: [...common], params: { tokenId: { type: 'string', required: true, description: 'veCTM token id' }, askWei: { type: 'string', required: true, description: 'Ask in payment-token wei' } } },\n { id: 'continuum-dao-marketplace.delist', protocolId: CONTINUUM_DAO_MARKETPLACE_PROTOCOL_ID, chainCategory: 'evm', description: 'Delist an open listing', commonParams: [...common], params: { tokenId: { type: 'string', required: true, description: 'veCTM token id' } } },\n { id: 'continuum-dao-marketplace.fulfill-listing', protocolId: CONTINUUM_DAO_MARKETPLACE_PROTOCOL_ID, chainCategory: 'evm', description: 'Buy a listed veCTM', commonParams: [...common], params: { tokenId: { type: 'string', required: true, description: 'veCTM token id' } } },\n { id: 'continuum-dao-marketplace.create-offering', protocolId: CONTINUUM_DAO_MARKETPLACE_PROTOCOL_ID, chainCategory: 'evm', description: 'Make an offering on a veCTM', commonParams: [...common], params: { tokenId: { type: 'string', required: true, description: 'veCTM token id' } } },\n { id: 'continuum-dao-marketplace.rescind', protocolId: CONTINUUM_DAO_MARKETPLACE_PROTOCOL_ID, chainCategory: 'evm', description: 'Rescind an open offering', commonParams: [...common], params: { tokenId: { type: 'string', required: true, description: 'veCTM token id' } } },\n { id: 'continuum-dao-marketplace.fulfill-offering', protocolId: CONTINUUM_DAO_MARKETPLACE_PROTOCOL_ID, chainCategory: 'evm', description: 'Accept an offering on a veCTM you own', commonParams: [...common], params: { tokenId: { type: 'string', required: true, description: 'veCTM token id' } } },\n { id: 'continuum-dao-marketplace.create-auction', protocolId: CONTINUUM_DAO_MARKETPLACE_PROTOCOL_ID, chainCategory: 'evm', description: 'Escrow a veCTM into an auction', commonParams: [...common], params: { tokenId: { type: 'string', required: true, description: 'veCTM token id' } } },\n { id: 'continuum-dao-marketplace.cancel-auction', protocolId: CONTINUUM_DAO_MARKETPLACE_PROTOCOL_ID, chainCategory: 'evm', description: 'Cancel a pending auction with no bids', commonParams: [...common], params: { tokenId: { type: 'string', required: true, description: 'veCTM token id' } } },\n { id: 'continuum-dao-marketplace.auction-bid', protocolId: CONTINUUM_DAO_MARKETPLACE_PROTOCOL_ID, chainCategory: 'evm', description: 'Bid on a live auction', commonParams: [...common], params: { tokenId: { type: 'string', required: true, description: 'veCTM token id' } } },\n { id: 'continuum-dao-marketplace.settle-auction', protocolId: CONTINUUM_DAO_MARKETPLACE_PROTOCOL_ID, chainCategory: 'evm', description: 'Settle a completed or expired auction', commonParams: [...common], params: { tokenId: { type: 'string', required: true, description: 'veCTM token id' } } },\n ],\n}\n","/**\n * Shared CTM / veCTM escrow rules used by MCP builders and (via the same\n * builders) the node-app dialog. Mirrors VotingEscrow.sol + ContinuumDaoDialog.\n */\nimport { getAddress, zeroAddress } from 'viem'\nimport {\n MAXTIME_SECONDS,\n VECTM_DEFAULT_MINIMUM_LOCK_WEI,\n VECTM_LIQ_MIN_LOCKED_WEI,\n VECTM_LIQ_PENALTY_DEN,\n VECTM_LIQ_PENALTY_NUM,\n VECTM_MAX_LOCK_WEEKS,\n WEEK_SECONDS,\n} from './constants.js'\n\nexport type VeCtmLockState = {\n tokenId: bigint\n amountWei: bigint\n endSec: bigint\n owner: `0x${string}`\n attached: boolean\n vePowerWei: bigint\n}\n\nexport function maxLockDurationSeconds(): number {\n return Math.min(VECTM_MAX_LOCK_WEEKS * WEEK_SECONDS, MAXTIME_SECONDS)\n}\n\nexport function floorUnlockTimeSeconds(nowSec: number, durationSec: bigint): bigint {\n return ((BigInt(nowSec) + durationSec) / BigInt(WEEK_SECONDS)) * BigInt(WEEK_SECONDS)\n}\n\nexport function assertCtmAmountAtLeastMinimum(amountWei: bigint, minimumLockWei: bigint, label: string): void {\n const min = minimumLockWei > 0n ? minimumLockWei : VECTM_DEFAULT_MINIMUM_LOCK_WEI\n if (amountWei < min) {\n throw new Error(`${label} must be at least ${formatCtmWei(min)} CTM (VotingEscrow.minimumLock).`)\n }\n}\n\nexport function assertCreateLockAmount(amountWei: bigint, minimumLockWei: bigint, balanceWei?: bigint): void {\n if (amountWei <= 0n) throw new Error('CTM amount must be greater than zero.')\n assertCtmAmountAtLeastMinimum(amountWei, minimumLockWei, 'Create lock')\n if (balanceWei != null && amountWei > balanceWei) {\n throw new Error(`Create lock ${formatCtmWei(amountWei)} CTM exceeds KeyGen balance ${formatCtmWei(balanceWei)} CTM.`)\n }\n}\n\nexport function assertLockDurationSeconds(durationSec: bigint, nowSec: number, label: string): bigint {\n if (durationSec <= 0n) throw new Error(`${label} duration must be greater than zero.`)\n if (durationSec < BigInt(WEEK_SECONDS)) {\n throw new Error(`${label} duration must be at least 1 week (${WEEK_SECONDS} seconds).`)\n }\n if (durationSec > BigInt(maxLockDurationSeconds())) {\n throw new Error(\n `${label} duration cannot exceed ${VECTM_MAX_LOCK_WEEKS} weeks (VotingEscrow MAXTIME, week-aligned).`,\n )\n }\n const unlock = floorUnlockTimeSeconds(nowSec, durationSec)\n if (unlock <= BigInt(nowSec)) {\n throw new Error(`${label} unlock time must be after the current week boundary.`)\n }\n if (unlock > BigInt(nowSec) + BigInt(MAXTIME_SECONDS)) {\n throw new Error(`${label} unlock time exceeds VotingEscrow MAXTIME (4 years).`)\n }\n return unlock\n}\n\nexport function assertIncreaseAmount(amountWei: bigint, lock: VeCtmLockState, nowSec: number, balanceWei?: bigint): void {\n if (amountWei <= 0n) throw new Error('CTM amount must be greater than zero.')\n if (lock.amountWei === 0n) throw new Error(`veCTM #${lock.tokenId} has no existing lock.`)\n if (lock.endSec <= BigInt(nowSec)) {\n throw new Error(`Cannot increase amount on expired veCTM #${lock.tokenId}. Withdraw or create a new lock.`)\n }\n if (balanceWei != null && amountWei > balanceWei) {\n throw new Error(\n `Increase amount ${formatCtmWei(amountWei)} CTM exceeds KeyGen balance ${formatCtmWei(balanceWei)} CTM.`,\n )\n }\n}\n\nexport function assertIncreaseUnlockTime(durationSec: bigint, lock: VeCtmLockState, nowSec: number): bigint {\n if (lock.amountWei === 0n) throw new Error(`veCTM #${lock.tokenId} has no existing lock.`)\n if (lock.endSec <= BigInt(nowSec)) {\n throw new Error(`Cannot increase unlock time on expired veCTM #${lock.tokenId}.`)\n }\n const unlock = assertLockDurationSeconds(durationSec, nowSec, 'Increase unlock time')\n if (unlock <= lock.endSec) {\n throw new Error(\n `New unlock time must be after the current lock end (${lock.endSec.toString()}). Pick a later week-aligned date.`,\n )\n }\n return unlock\n}\n\nexport function assertSplitExtracted(\n extractedWei: bigint,\n lock: VeCtmLockState,\n minimumLockWei: bigint,\n nowSec: number,\n): void {\n if (lock.attached) {\n throw new Error(`Split is blocked while veCTM #${lock.tokenId} is attached to a node. Request detach first.`)\n }\n if (lock.amountWei === 0n) throw new Error(`veCTM #${lock.tokenId} has no existing lock.`)\n if (lock.endSec <= BigInt(nowSec)) {\n throw new Error(`Cannot split expired veCTM #${lock.tokenId}.`)\n }\n const min = minimumLockWei > 0n ? minimumLockWei : VECTM_DEFAULT_MINIMUM_LOCK_WEI\n if (lock.amountWei < min * 2n) {\n throw new Error('Split requires at least 2 CTM locked (1 CTM minimum per resulting lock).')\n }\n if (extractedWei < min) {\n throw new Error(`Extract at least ${formatCtmWei(min)} CTM into the new lock.`)\n }\n if (extractedWei > lock.amountWei - min) {\n throw new Error(`The original lock must keep at least ${formatCtmWei(min)} CTM after the split.`)\n }\n}\n\nexport function assertMerge(fromLock: VeCtmLockState, toLock: VeCtmLockState): void {\n if (fromLock.tokenId === toLock.tokenId) throw new Error('Merge requires two different token ids.')\n if (fromLock.attached) {\n throw new Error(`Merge is blocked while veCTM #${fromLock.tokenId} is attached to a node.`)\n }\n if (toLock.attached) {\n throw new Error(`Merge is blocked while veCTM #${toLock.tokenId} is attached to a node.`)\n }\n if (fromLock.owner.toLowerCase() !== toLock.owner.toLowerCase()) {\n throw new Error('Merge requires both veCTM locks to have the same owner.')\n }\n}\n\nexport function assertWithdraw(lock: VeCtmLockState, nowSec: number): void {\n if (lock.attached) {\n throw new Error(`Withdraw is blocked while veCTM #${lock.tokenId} is attached to a node. Request detach first.`)\n }\n if (lock.endSec <= 0n) throw new Error(`Unlock time unavailable for veCTM #${lock.tokenId}.`)\n if (lock.endSec > BigInt(nowSec)) {\n throw new Error(`Withdraw is available after the lock expires (unlock ${lock.endSec.toString()}).`)\n }\n}\n\nexport function computeLiquidationAmounts(args: {\n lockedAmountWei: bigint\n vePowerWei: bigint\n lockEndSec: bigint\n nowSec: number\n}): {\n userWei: bigint\n treasuryWei: bigint\n lockExpired: boolean\n tooSmall: boolean\n zeroPenalty: boolean\n} {\n if (args.lockEndSec > 0n && BigInt(args.nowSec) >= args.lockEndSec) {\n return {\n userWei: args.lockedAmountWei,\n treasuryWei: 0n,\n lockExpired: true,\n tooSmall: false,\n zeroPenalty: false,\n }\n }\n if (args.lockedAmountWei <= VECTM_LIQ_MIN_LOCKED_WEI) {\n return {\n userWei: 0n,\n treasuryWei: 0n,\n lockExpired: false,\n tooSmall: true,\n zeroPenalty: false,\n }\n }\n const penalty = (args.vePowerWei * VECTM_LIQ_PENALTY_NUM) / VECTM_LIQ_PENALTY_DEN\n if (penalty === 0n) {\n return {\n userWei: 0n,\n treasuryWei: 0n,\n lockExpired: false,\n tooSmall: false,\n zeroPenalty: true,\n }\n }\n return {\n userWei: args.lockedAmountWei - penalty,\n treasuryWei: penalty,\n lockExpired: false,\n tooSmall: false,\n zeroPenalty: false,\n }\n}\n\nexport function assertLiquidate(lock: VeCtmLockState, liquidationsEnabled: boolean | null, nowSec: number): void {\n if (lock.attached) {\n throw new Error(`Liquidate is blocked while veCTM #${lock.tokenId} is attached to a node. Request detach first.`)\n }\n if (liquidationsEnabled === false) {\n throw new Error('Liquidations are currently disabled on-chain.')\n }\n const preview = computeLiquidationAmounts({\n lockedAmountWei: lock.amountWei,\n vePowerWei: lock.vePowerWei,\n lockEndSec: lock.endSec,\n nowSec,\n })\n if (preview.tooSmall) throw new Error('Locked amount is too small to liquidate.')\n if (preview.zeroPenalty) throw new Error('Voting power is too low to compute a liquidation penalty.')\n}\n\nexport function assertDelegatee(delegateeRaw: string, executor: string): `0x${string}` {\n const delegatee = getAddress(delegateeRaw)\n if (delegatee === zeroAddress) {\n throw new Error('Zero address is not allowed. Use undelegate to return power to this KeyGen.')\n }\n const self = getAddress(executor)\n if (delegatee === self) {\n throw new Error('This is this KeyGen’s address — use undelegate instead.')\n }\n return delegatee\n}\n\nexport function assertUndelegateNotAlreadySelf(alreadySelf: boolean, account: string): void {\n if (alreadySelf) {\n throw new Error(`Voting power is already at this KeyGen (${getAddress(account)}).`)\n }\n}\n\nexport function assertTransfer(lock: VeCtmLockState, toRaw: string, fromRaw: string): `0x${string}` {\n if (lock.attached) {\n throw new Error(`Transfer is blocked while veCTM #${lock.tokenId} is attached to a node.`)\n }\n const to = getAddress(toRaw)\n const from = getAddress(fromRaw)\n if (to === zeroAddress) throw new Error('Cannot transfer veCTM to the zero address.')\n if (to === from) throw new Error('Transfer recipient must be different from this KeyGen.')\n return to\n}\n\nexport function assertExecutorOwnsLock(lock: VeCtmLockState, executor: string): void {\n if (lock.owner.toLowerCase() !== getAddress(executor).toLowerCase()) {\n throw new Error(`KeyGen ${getAddress(executor)} does not own veCTM #${lock.tokenId} (owner ${lock.owner}).`)\n }\n}\n\nfunction formatCtmWei(wei: bigint): string {\n const whole = wei / 10n ** 18n\n const frac = wei % 10n ** 18n\n if (frac === 0n) return whole.toString()\n const fracStr = frac.toString().padStart(18, '0').replace(/0+$/, '')\n return `${whole.toString()}.${fracStr}`\n}\n","/**\n * On-chain preflight for CTM / veCTM MCP builders.\n * Reads VotingEscrow + NodeProperties so agents cannot assemble reverting batches.\n */\nimport { createPublicClient, defineChain, getAddress, parseAbi, zeroAddress, type Address } from 'viem'\nimport { defiEvmTransport } from '../../../core/defiEvmClient.js'\nimport { VECTM_DEFAULT_MINIMUM_LOCK_WEI, isConfiguredAddress } from './constants.js'\nimport {\n assertCreateLockAmount,\n assertDelegatee,\n assertExecutorOwnsLock,\n assertIncreaseAmount,\n assertIncreaseUnlockTime,\n assertLiquidate,\n assertLockDurationSeconds,\n assertMerge,\n assertSplitExtracted,\n assertTransfer,\n assertUndelegateNotAlreadySelf,\n assertWithdraw,\n type VeCtmLockState,\n} from './escrowRules.js'\n\nconst veReadAbi = parseAbi([\n 'function minimumLock() view returns (uint256)',\n 'function locked(uint256 tokenId) view returns (int128 amount, uint256 end)',\n 'function ownerOf(uint256 tokenId) view returns (address)',\n 'function balanceOfNFT(uint256 tokenId) view returns (uint256)',\n 'function liquidationsEnabled() view returns (bool)',\n 'function nodeProperties() view returns (address)',\n 'function rewards() view returns (address)',\n 'function delegates(address account) view returns (address)',\n 'function token() view returns (address)',\n])\nconst erc20Abi = parseAbi(['function balanceOf(address owner) view returns (uint256)'])\nconst nodePropsAbi = parseAbi([\n 'function attachedKeyGen(uint256 tokenId) view returns (address)',\n 'function attachedTokenId(address keyGen) view returns (uint256)',\n 'function nodeRequestingDetachment(uint256 tokenId) view returns (bool)',\n])\nconst rewardsAbi = parseAbi(['function unclaimedRewards(uint256 tokenId) view returns (uint256)'])\nconst mpaReadAbi = parseAbi([\n 'function getNodeWithdrawAuthority(string nodeKey) view returns (address)',\n 'function ve() view returns (address)',\n 'function veCtmThresholdPower() view returns (uint256)',\n 'function nodeProperties() view returns (address)',\n])\n\nfunction publicClient(rpcUrl: string, chainId: number) {\n return createPublicClient({\n chain: defineChain({\n id: chainId,\n name: 'ContinuumDAO escrow',\n nativeCurrency: { decimals: 18, name: 'Ether', symbol: 'ETH' },\n rpcUrls: { default: { http: [rpcUrl.trim()] } },\n }),\n transport: defiEvmTransport(rpcUrl.trim()),\n })\n}\n\nexport async function readMinimumLockWei(args: {\n rpcUrl: string\n chainId: number\n votingEscrow: Address\n}): Promise<bigint> {\n const client = publicClient(args.rpcUrl, args.chainId)\n try {\n const min = await client.readContract({\n address: args.votingEscrow,\n abi: veReadAbi,\n functionName: 'minimumLock',\n })\n return min > 0n ? min : VECTM_DEFAULT_MINIMUM_LOCK_WEI\n } catch {\n return VECTM_DEFAULT_MINIMUM_LOCK_WEI\n }\n}\n\nexport async function readCtmBalanceWei(args: {\n rpcUrl: string\n chainId: number\n ctm: Address\n owner: Address\n}): Promise<bigint | undefined> {\n const client = publicClient(args.rpcUrl, args.chainId)\n try {\n return await client.readContract({\n address: args.ctm,\n abi: erc20Abi,\n functionName: 'balanceOf',\n args: [args.owner],\n })\n } catch {\n return undefined\n }\n}\n\nexport async function readVeCtmLockState(args: {\n rpcUrl: string\n chainId: number\n votingEscrow: Address\n tokenId: bigint\n}): Promise<VeCtmLockState> {\n const client = publicClient(args.rpcUrl, args.chainId)\n const [lockedPair, owner, vePower, nodeProperties] = await Promise.all([\n client.readContract({\n address: args.votingEscrow,\n abi: veReadAbi,\n functionName: 'locked',\n args: [args.tokenId],\n }),\n client.readContract({\n address: args.votingEscrow,\n abi: veReadAbi,\n functionName: 'ownerOf',\n args: [args.tokenId],\n }),\n client.readContract({\n address: args.votingEscrow,\n abi: veReadAbi,\n functionName: 'balanceOfNFT',\n args: [args.tokenId],\n }),\n client.readContract({\n address: args.votingEscrow,\n abi: veReadAbi,\n functionName: 'nodeProperties',\n }),\n ])\n const amountRaw = lockedPair[0]\n const amountWei = amountRaw < 0n ? 0n : BigInt(amountRaw)\n let attached = false\n if (isConfiguredAddress(nodeProperties)) {\n try {\n const attachedKey = await client.readContract({\n address: getAddress(nodeProperties),\n abi: nodePropsAbi,\n functionName: 'attachedKeyGen',\n args: [args.tokenId],\n })\n attached = attachedKey !== zeroAddress\n } catch {\n attached = false\n }\n }\n return {\n tokenId: args.tokenId,\n amountWei,\n endSec: lockedPair[1],\n owner: getAddress(owner),\n attached,\n vePowerWei: vePower,\n }\n}\n\nasync function assertNoUnclaimedRewards(args: {\n rpcUrl: string\n chainId: number\n votingEscrow: Address\n tokenId: bigint\n}): Promise<void> {\n const client = publicClient(args.rpcUrl, args.chainId)\n let rewards: Address\n try {\n rewards = await client.readContract({\n address: args.votingEscrow,\n abi: veReadAbi,\n functionName: 'rewards',\n })\n } catch {\n return\n }\n if (!isConfiguredAddress(rewards)) return\n try {\n const unclaimed = await client.readContract({\n address: rewards,\n abi: rewardsAbi,\n functionName: 'unclaimedRewards',\n args: [args.tokenId],\n })\n if (unclaimed !== 0n) {\n throw new Error(`veCTM #${args.tokenId} has unclaimed rewards. Claim them before this escrow action.`)\n }\n } catch (err) {\n if (err instanceof Error && err.message.includes('unclaimed rewards')) throw err\n }\n}\n\nexport async function preflightCreateLock(args: {\n rpcUrl: string\n chainId: number\n votingEscrow: Address\n ctm: Address\n owner: Address\n amountWei: bigint\n durationSec: bigint\n}): Promise<void> {\n const nowSec = Math.floor(Date.now() / 1000)\n const [minimumLockWei, balanceWei] = await Promise.all([\n readMinimumLockWei(args),\n readCtmBalanceWei(args),\n ])\n assertCreateLockAmount(args.amountWei, minimumLockWei, balanceWei)\n assertLockDurationSeconds(args.durationSec, nowSec, 'Create lock')\n}\n\nexport async function preflightIncreaseAmount(args: {\n rpcUrl: string\n chainId: number\n votingEscrow: Address\n ctm: Address\n owner: Address\n tokenId: bigint\n amountWei: bigint\n}): Promise<void> {\n const nowSec = Math.floor(Date.now() / 1000)\n const [lock, balanceWei] = await Promise.all([\n readVeCtmLockState(args),\n readCtmBalanceWei(args),\n ])\n assertExecutorOwnsLock(lock, args.owner)\n assertIncreaseAmount(args.amountWei, lock, nowSec, balanceWei)\n await assertNoUnclaimedRewards(args)\n}\n\nexport async function preflightIncreaseUnlockTime(args: {\n rpcUrl: string\n chainId: number\n votingEscrow: Address\n owner: Address\n tokenId: bigint\n durationSec: bigint\n}): Promise<void> {\n const nowSec = Math.floor(Date.now() / 1000)\n const lock = await readVeCtmLockState(args)\n assertExecutorOwnsLock(lock, args.owner)\n assertIncreaseUnlockTime(args.durationSec, lock, nowSec)\n await assertNoUnclaimedRewards(args)\n}\n\nexport async function preflightSplit(args: {\n rpcUrl: string\n chainId: number\n votingEscrow: Address\n owner: Address\n tokenId: bigint\n extractedWei: bigint\n}): Promise<void> {\n const nowSec = Math.floor(Date.now() / 1000)\n const [lock, minimumLockWei] = await Promise.all([\n readVeCtmLockState(args),\n readMinimumLockWei(args),\n ])\n assertExecutorOwnsLock(lock, args.owner)\n assertSplitExtracted(args.extractedWei, lock, minimumLockWei, nowSec)\n await assertNoUnclaimedRewards(args)\n}\n\nexport async function preflightMerge(args: {\n rpcUrl: string\n chainId: number\n votingEscrow: Address\n owner: Address\n fromTokenId: bigint\n toTokenId: bigint\n}): Promise<void> {\n const [fromLock, toLock] = await Promise.all([\n readVeCtmLockState({ ...args, tokenId: args.fromTokenId }),\n readVeCtmLockState({ ...args, tokenId: args.toTokenId }),\n ])\n assertExecutorOwnsLock(fromLock, args.owner)\n assertExecutorOwnsLock(toLock, args.owner)\n assertMerge(fromLock, toLock)\n await Promise.all([\n assertNoUnclaimedRewards({ ...args, tokenId: args.fromTokenId }),\n assertNoUnclaimedRewards({ ...args, tokenId: args.toTokenId }),\n ])\n}\n\nexport async function preflightWithdraw(args: {\n rpcUrl: string\n chainId: number\n votingEscrow: Address\n owner: Address\n tokenId: bigint\n}): Promise<void> {\n const nowSec = Math.floor(Date.now() / 1000)\n const lock = await readVeCtmLockState(args)\n assertExecutorOwnsLock(lock, args.owner)\n assertWithdraw(lock, nowSec)\n await assertNoUnclaimedRewards(args)\n}\n\nexport async function preflightLiquidate(args: {\n rpcUrl: string\n chainId: number\n votingEscrow: Address\n owner: Address\n tokenId: bigint\n}): Promise<void> {\n const nowSec = Math.floor(Date.now() / 1000)\n const client = publicClient(args.rpcUrl, args.chainId)\n const [lock, liquidationsEnabled] = await Promise.all([\n readVeCtmLockState(args),\n client\n .readContract({\n address: args.votingEscrow,\n abi: veReadAbi,\n functionName: 'liquidationsEnabled',\n })\n .catch(() => null),\n ])\n assertExecutorOwnsLock(lock, args.owner)\n assertLiquidate(lock, liquidationsEnabled, nowSec)\n await assertNoUnclaimedRewards(args)\n}\n\nexport async function preflightDelegate(args: {\n rpcUrl: string\n chainId: number\n votingEscrow: Address\n owner: Address\n delegatee: string\n}): Promise<`0x${string}`> {\n return assertDelegatee(args.delegatee, args.owner)\n}\n\nexport async function preflightUndelegate(args: {\n rpcUrl: string\n chainId: number\n votingEscrow: Address\n owner: Address\n}): Promise<void> {\n const client = publicClient(args.rpcUrl, args.chainId)\n const delegatee = await client.readContract({\n address: args.votingEscrow,\n abi: veReadAbi,\n functionName: 'delegates',\n args: [args.owner],\n })\n assertUndelegateNotAlreadySelf(getAddress(delegatee) === getAddress(args.owner), args.owner)\n}\n\nexport async function preflightTransfer(args: {\n rpcUrl: string\n chainId: number\n votingEscrow: Address\n owner: Address\n tokenId: bigint\n to: string\n}): Promise<`0x${string}`> {\n const lock = await readVeCtmLockState(args)\n assertExecutorOwnsLock(lock, args.owner)\n return assertTransfer(lock, args.to, args.owner)\n}\n\nexport async function preflightAttachVeCtm(args: {\n rpcUrl: string\n chainId: number\n mpaWallet: Address\n nodeKey: string\n tokenId: bigint\n owner: Address\n votingEscrow?: Address\n}): Promise<void> {\n const client = publicClient(args.rpcUrl, args.chainId)\n const [authority, veFromWallet, threshold, nodeProperties] = await Promise.all([\n client.readContract({\n address: args.mpaWallet,\n abi: mpaReadAbi,\n functionName: 'getNodeWithdrawAuthority',\n args: [args.nodeKey],\n }),\n client.readContract({ address: args.mpaWallet, abi: mpaReadAbi, functionName: 've' }),\n client.readContract({\n address: args.mpaWallet,\n abi: mpaReadAbi,\n functionName: 'veCtmThresholdPower',\n }),\n client.readContract({\n address: args.mpaWallet,\n abi: mpaReadAbi,\n functionName: 'nodeProperties',\n }),\n ])\n const ve = args.votingEscrow && isConfiguredAddress(args.votingEscrow)\n ? getAddress(args.votingEscrow)\n : getAddress(veFromWallet)\n if (!isConfiguredAddress(ve)) throw new Error('veCTM is not live on the fee contract yet.')\n const lock = await readVeCtmLockState({\n rpcUrl: args.rpcUrl,\n chainId: args.chainId,\n votingEscrow: ve,\n tokenId: args.tokenId,\n })\n assertExecutorOwnsLock(lock, args.owner)\n const executor = getAddress(args.owner)\n if (authority === zeroAddress || getAddress(authority) !== executor) {\n throw new Error(\n `Compose attachVeCtm from the claimed authority KeyGen (${authority}), which must own the NFT.`,\n )\n }\n if (isConfiguredAddress(nodeProperties)) {\n const np = getAddress(nodeProperties)\n const [attachedKey, attachedForKey] = await Promise.all([\n client.readContract({\n address: np,\n abi: nodePropsAbi,\n functionName: 'attachedKeyGen',\n args: [args.tokenId],\n }),\n client.readContract({\n address: np,\n abi: nodePropsAbi,\n functionName: 'attachedTokenId',\n args: [executor],\n }),\n ])\n if (attachedKey !== zeroAddress) {\n throw new Error(`veCTM #${args.tokenId} is already attached. You cannot replace an attached NFT.`)\n }\n if (attachedForKey !== 0n) {\n throw new Error(\n `This KeyGen already has veCTM #${attachedForKey} attached. Request detach and wait for governance. ` +\n \"A second group on this node attaches after rotating nodeWithdrawAuthority to that group's secp256k1 KeyGen.\",\n )\n }\n }\n if (threshold > 0n && lock.amountWei < threshold) {\n throw new Error(\n `Locked CTM on veCTM #${args.tokenId} is below MultiSignAgentWallet.veCtmThresholdPower (${threshold.toString()} wei).`,\n )\n }\n}\n\nexport async function preflightRequestDetach(args: {\n rpcUrl: string\n chainId: number\n nodeProperties: Address\n owner: Address\n tokenId: bigint\n}): Promise<void> {\n const client = publicClient(args.rpcUrl, args.chainId)\n const [attachedKey, alreadyRequested] = await Promise.all([\n client.readContract({\n address: args.nodeProperties,\n abi: nodePropsAbi,\n functionName: 'attachedKeyGen',\n args: [args.tokenId],\n }),\n client.readContract({\n address: args.nodeProperties,\n abi: nodePropsAbi,\n functionName: 'nodeRequestingDetachment',\n args: [args.tokenId],\n }),\n ])\n if (attachedKey === zeroAddress) {\n throw new Error(`veCTM #${args.tokenId} is not attached to a node.`)\n }\n if (alreadyRequested) {\n throw new Error(\n `Detach already requested for veCTM #${args.tokenId}. The NFT stays attached until governance executes detach.`,\n )\n }\n if (getAddress(attachedKey) !== getAddress(args.owner)) {\n throw new Error(\n `Request detach from the attached KeyGen (${getAddress(attachedKey)}).`,\n )\n }\n}\n","/**\n * ContinuumDAO multi-sign builders: CTM lock / veCTM escrow + MPA attach / request detach.\n * Do not prepend billing legs — these are protocol txs, not register / deposit / syncBilling.\n */\nimport { type Address, createPublicClient, defineChain, encodeFunctionData, getAddress, parseAbi, parseUnits, zeroAddress } from 'viem'\nimport { defiEvmTransport } from '../../../core/defiEvmClient.js'\nimport type { KeyGenSubsetForPermit } from '../../../core/types.js'\nimport { ATTACH_VECTM_SIGNATURE, resolveAttachGroupId, VECTM_NODE_INFO_TUPLE } from './attachGroup.js'\nimport { buildEvmMultisignBatch } from '../../../chains/evm/buildBatch.js'\nimport type { EvmTxStep } from '../../../chains/evm/types.js'\nimport {\n CONTINUUM_DAO_PROTOCOL_ID,\n CTM_TOKEN_DECIMALS,\n ctmTokenAddressOnEvmChain,\n isConfiguredAddress,\n isContinuumDaoLockChain,\n votingEscrowAddressOnEvmChain,\n} from './constants.js'\nimport {\n preflightAttachVeCtm,\n preflightCreateLock,\n preflightDelegate,\n preflightIncreaseAmount,\n preflightIncreaseUnlockTime,\n preflightLiquidate,\n preflightMerge,\n preflightRequestDetach,\n preflightSplit,\n preflightTransfer,\n preflightUndelegate,\n preflightWithdraw,\n} from './escrowPreflight.js'\n\nexport const CONTINUUM_DAO_APPROVE_FALLBACK = 100_000n\nexport const CONTINUUM_DAO_CREATE_LOCK_FALLBACK = 550_000n\nexport const CONTINUUM_DAO_INCREASE_AMOUNT_FALLBACK = 400_000n\nexport const CONTINUUM_DAO_INCREASE_UNLOCK_FALLBACK = 400_000n\nexport const CONTINUUM_DAO_SPLIT_FALLBACK = 650_000n\nexport const CONTINUUM_DAO_MERGE_FALLBACK = 550_000n\nexport const CONTINUUM_DAO_WITHDRAW_FALLBACK = 350_000n\nexport const CONTINUUM_DAO_LIQUIDATE_FALLBACK = 450_000n\nexport const CONTINUUM_DAO_DELEGATE_FALLBACK = 160_000n\nexport const CONTINUUM_DAO_TRANSFER_FALLBACK = 160_000n\nexport const CONTINUUM_DAO_ATTACH_FALLBACK = 450_000n\nexport const CONTINUUM_DAO_DETACH_FALLBACK = 220_000n\n\nexport const INCREASE_UNLOCK_TIME_SIGNATURE = 'increase_unlock_time(uint256,uint256)'\n\nexport { ATTACH_VECTM_SIGNATURE, resolveAttachGroupId, VECTM_NODE_INFO_TUPLE } from './attachGroup.js'\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 veWriteAbi = parseAbi([\n 'function create_lock(uint256 _value, uint256 _lock_duration) returns (uint256)',\n 'function increase_amount(uint256 _tokenId, uint256 _value)',\n 'function increase_unlock_time(uint256 _tokenId, uint256 _lock_duration)',\n 'function withdraw(uint256 _tokenId)',\n 'function split(uint256 _tokenId, uint256 _extracted) returns (uint256)',\n 'function merge(uint256 _from, uint256 _to)',\n 'function liquidate(uint256 _tokenId)',\n 'function delegate(address delegatee)',\n 'function transferFrom(address _from, address _to, uint256 _tokenId)',\n])\nconst attachAbi = parseAbi([\n `function attachVeCtm(string nodeKey, uint256 tokenId, ${VECTM_NODE_INFO_TUPLE} nodeInfo, string groupId)`,\n])\nconst detachAbi = parseAbi(['function setNodeRemovalStatus(uint256 tokenId, bool status)'])\n\nexport const CONTINUUM_DAO_EVM_TYPES = new Set([\n 'continuum_dao_approve',\n 'continuum_dao_create_lock',\n 'continuum_dao_increase_amount',\n 'continuum_dao_increase_unlock_time',\n 'continuum_dao_split',\n 'continuum_dao_merge',\n 'continuum_dao_withdraw',\n 'continuum_dao_liquidate',\n 'continuum_dao_delegate',\n 'continuum_dao_undelegate',\n 'continuum_dao_transfer',\n 'continuum_dao_attach',\n 'continuum_dao_request_detach',\n])\n\ntype ChainRow = {\n legacy?: boolean\n gasLimit?: number\n gasMultiplier?: number\n gasPrice?: number\n baseFee?: number\n priorityFee?: number\n baseFeeMultiplier?: number\n}\n\nexport type ContinuumDaoCommonArgs = {\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}\n\ntype StepKind = {\n to: Address\n data: `0x${string}`\n value: bigint\n fallbackGas: bigint\n buildBatchMeta: (args: { gasLimit: bigint }) => Record<string, unknown>\n}\n\nfunction requireLockChain(chainId: number): void {\n if (!isContinuumDaoLockChain(chainId)) {\n throw new Error('ContinuumDAO lock and attach actions are Linea-only.')\n }\n}\n\nfunction requireVe(chainId: number): Address {\n requireLockChain(chainId)\n const ve = votingEscrowAddressOnEvmChain(chainId)\n if (!ve) throw new Error('Voting Escrow address is not configured for this chain yet.')\n return ve\n}\n\nfunction requireCtm(chainId: number): Address {\n const ctm = ctmTokenAddressOnEvmChain(chainId)\n if (!ctm) throw new Error('CTM address is not configured for this chain yet.')\n return ctm\n}\n\nfunction parseTokenId(raw: string | number | bigint): bigint {\n const id = typeof raw === 'bigint' ? raw : BigInt(String(raw).trim())\n if (id <= 0n) throw new Error('veCTM token id must be greater than zero.')\n return id\n}\n\nexport function continuumDaoSignatureText(\n extra: Record<string, unknown>,\n chainId: number,\n): string {\n return JSON.stringify({\n kind: 'ContinuumDAO',\n ...extra,\n chainId,\n })\n}\n\nfunction meta(\n evmType: string,\n chainId: number,\n to: Address,\n extra: Record<string, unknown>,\n gasLimit: bigint,\n): Record<string, unknown> {\n return {\n destinationAddress: to,\n signatureText: continuumDaoSignatureText(extra, chainId),\n evm: { type: evmType, version: 1, chainId: String(chainId), protocolId: CONTINUUM_DAO_PROTOCOL_ID },\n continuumDao: { ...extra, gas: { baseGasUnits: gasLimit.toString() } },\n }\n}\n\nasync function finalize(\n steps: StepKind[],\n args: ContinuumDaoCommonArgs,\n purposeSuffix: string,\n): Promise<{ bodyForSign: Record<string, unknown>; messageToSign: string }> {\n if (steps.length === 0) throw new Error('ContinuumDAO batch requires at least one step.')\n const evmSteps: EvmTxStep[] = steps.map((s) => ({\n to: s.to,\n data: s.data,\n value: s.value,\n fallbackGas: s.fallbackGas,\n }))\n const firstDataNo0x = evmSteps[0]!.data.startsWith('0x') ? evmSteps[0]!.data.slice(2) : evmSteps[0]!.data\n return buildEvmMultisignBatch({\n context: {\n chainCategory: 'evm',\n keyGen: args.keyGen,\n purposeText: args.purposeText,\n chainId: args.chainId,\n rpcUrl: args.rpcUrl.trim(),\n executorAddress: args.executorAddress,\n chainDetail: args.chainDetail,\n useCustomGas: args.useCustomGas,\n customGasChainDetails: args.customGasChainDetails,\n },\n steps: evmSteps,\n purposeSuffix,\n firstMsgRawNo0x: firstDataNo0x,\n destinationAddress: steps[0]!.to,\n buildBatchMeta: ({ index, gasLimit }) => steps[index]!.buildBatchMeta({ gasLimit }),\n })\n}\n\nasync function maybeApproveCtmStep(args: {\n rpcUrl: string\n chainId: number\n owner: Address\n ctm: Address\n spender: Address\n amountWei: bigint\n}): Promise<StepKind | null> {\n const ch = defineChain({\n id: args.chainId,\n name: 'ContinuumDAO',\n nativeCurrency: { decimals: 18, name: 'Ether', symbol: 'ETH' },\n rpcUrls: { default: { http: [args.rpcUrl.trim()] } },\n })\n const client = createPublicClient({ chain: ch, transport: defiEvmTransport(args.rpcUrl.trim()) })\n let allowance = 0n\n try {\n allowance = await client.readContract({\n address: args.ctm,\n abi: erc20Abi,\n functionName: 'allowance',\n args: [args.owner, args.spender],\n })\n } catch {\n allowance = 0n\n }\n if (allowance >= args.amountWei) return null\n const data = encodeFunctionData({\n abi: erc20Abi,\n functionName: 'approve',\n args: [args.spender, args.amountWei],\n })\n return {\n to: args.ctm,\n data,\n value: 0n,\n fallbackGas: CONTINUUM_DAO_APPROVE_FALLBACK,\n buildBatchMeta: ({ gasLimit }) =>\n meta('continuum_dao_approve', args.chainId, args.ctm, {\n name: 'CTM.approve',\n spender: args.spender,\n amountWei: args.amountWei.toString(),\n }, gasLimit),\n }\n}\n\nexport async function buildEvmMultisignBodyContinuumDaoCreateLock(\n args: ContinuumDaoCommonArgs & {\n amountHuman: string\n lockDurationSeconds: string | number | bigint\n ctm?: string\n votingEscrow?: string\n },\n): Promise<{ bodyForSign: Record<string, unknown>; messageToSign: string }> {\n const ve = args.votingEscrow && isConfiguredAddress(args.votingEscrow)\n ? getAddress(args.votingEscrow)\n : requireVe(args.chainId)\n const ctm = args.ctm && isConfiguredAddress(args.ctm) ? getAddress(args.ctm) : requireCtm(args.chainId)\n const amountWei = parseUnits(String(args.amountHuman).trim().replace(/,/g, ''), CTM_TOKEN_DECIMALS)\n const duration = BigInt(String(args.lockDurationSeconds).trim())\n const owner = getAddress(args.executorAddress)\n await preflightCreateLock({\n rpcUrl: args.rpcUrl,\n chainId: args.chainId,\n votingEscrow: ve,\n ctm,\n owner,\n amountWei,\n durationSec: duration,\n })\n const approve = await maybeApproveCtmStep({\n rpcUrl: args.rpcUrl,\n chainId: args.chainId,\n owner,\n ctm,\n spender: ve,\n amountWei,\n })\n const data = encodeFunctionData({\n abi: veWriteAbi,\n functionName: 'create_lock',\n args: [amountWei, duration],\n })\n const lockStep: StepKind = {\n to: ve,\n data,\n value: 0n,\n fallbackGas: CONTINUUM_DAO_CREATE_LOCK_FALLBACK,\n buildBatchMeta: ({ gasLimit }) =>\n meta('continuum_dao_create_lock', args.chainId, ve, {\n name: 'VotingEscrow.create_lock',\n amountWei: amountWei.toString(),\n lockDurationSeconds: duration.toString(),\n }, gasLimit),\n }\n const steps = approve ? [approve, lockStep] : [lockStep]\n return finalize(steps, args, `ContinuumDAO: create lock ${args.amountHuman} CTM.`)\n}\n\nexport async function buildEvmMultisignBodyContinuumDaoIncreaseAmount(\n args: ContinuumDaoCommonArgs & {\n tokenId: string | number | bigint\n amountHuman: string\n ctm?: string\n votingEscrow?: string\n },\n): Promise<{ bodyForSign: Record<string, unknown>; messageToSign: string }> {\n const ve = args.votingEscrow && isConfiguredAddress(args.votingEscrow)\n ? getAddress(args.votingEscrow)\n : requireVe(args.chainId)\n const ctm = args.ctm && isConfiguredAddress(args.ctm) ? getAddress(args.ctm) : requireCtm(args.chainId)\n const tokenId = parseTokenId(args.tokenId)\n const amountWei = parseUnits(String(args.amountHuman).trim().replace(/,/g, ''), CTM_TOKEN_DECIMALS)\n const owner = getAddress(args.executorAddress)\n await preflightIncreaseAmount({\n rpcUrl: args.rpcUrl,\n chainId: args.chainId,\n votingEscrow: ve,\n ctm,\n owner,\n tokenId,\n amountWei,\n })\n const approve = await maybeApproveCtmStep({\n rpcUrl: args.rpcUrl,\n chainId: args.chainId,\n owner,\n ctm,\n spender: ve,\n amountWei,\n })\n const data = encodeFunctionData({\n abi: veWriteAbi,\n functionName: 'increase_amount',\n args: [tokenId, amountWei],\n })\n const step: StepKind = {\n to: ve,\n data,\n value: 0n,\n fallbackGas: CONTINUUM_DAO_INCREASE_AMOUNT_FALLBACK,\n buildBatchMeta: ({ gasLimit }) =>\n meta('continuum_dao_increase_amount', args.chainId, ve, {\n name: 'VotingEscrow.increase_amount',\n tokenId: tokenId.toString(),\n amountWei: amountWei.toString(),\n }, gasLimit),\n }\n const steps = approve ? [approve, step] : [step]\n return finalize(steps, args, `ContinuumDAO: increase amount on veCTM #${tokenId}.`)\n}\n\nexport async function buildEvmMultisignBodyContinuumDaoIncreaseUnlockTime(\n args: ContinuumDaoCommonArgs & {\n tokenId: string | number | bigint\n lockDurationSeconds: string | number | bigint\n votingEscrow?: string\n },\n): Promise<{ bodyForSign: Record<string, unknown>; messageToSign: string }> {\n const ve = args.votingEscrow && isConfiguredAddress(args.votingEscrow)\n ? getAddress(args.votingEscrow)\n : requireVe(args.chainId)\n const tokenId = parseTokenId(args.tokenId)\n const duration = BigInt(String(args.lockDurationSeconds).trim())\n const owner = getAddress(args.executorAddress)\n await preflightIncreaseUnlockTime({\n rpcUrl: args.rpcUrl,\n chainId: args.chainId,\n votingEscrow: ve,\n owner,\n tokenId,\n durationSec: duration,\n })\n const data = encodeFunctionData({\n abi: veWriteAbi,\n functionName: 'increase_unlock_time',\n args: [tokenId, duration],\n })\n const step: StepKind = {\n to: ve,\n data,\n value: 0n,\n fallbackGas: CONTINUUM_DAO_INCREASE_UNLOCK_FALLBACK,\n buildBatchMeta: ({ gasLimit }) =>\n meta('continuum_dao_increase_unlock_time', args.chainId, ve, {\n name: 'VotingEscrow.increase_unlock_time',\n signature: INCREASE_UNLOCK_TIME_SIGNATURE,\n tokenId: tokenId.toString(),\n lockDurationSeconds: duration.toString(),\n }, gasLimit),\n }\n return finalize([step], args, `ContinuumDAO: increase unlock time on veCTM #${tokenId}.`)\n}\n\nexport async function buildEvmMultisignBodyContinuumDaoSplit(\n args: ContinuumDaoCommonArgs & {\n tokenId: string | number | bigint\n extractedHuman: string\n votingEscrow?: string\n },\n): Promise<{ bodyForSign: Record<string, unknown>; messageToSign: string }> {\n const ve = args.votingEscrow && isConfiguredAddress(args.votingEscrow)\n ? getAddress(args.votingEscrow)\n : requireVe(args.chainId)\n const tokenId = parseTokenId(args.tokenId)\n const extracted = parseUnits(String(args.extractedHuman).trim().replace(/,/g, ''), CTM_TOKEN_DECIMALS)\n await preflightSplit({\n rpcUrl: args.rpcUrl,\n chainId: args.chainId,\n votingEscrow: ve,\n owner: getAddress(args.executorAddress),\n tokenId,\n extractedWei: extracted,\n })\n const data = encodeFunctionData({\n abi: veWriteAbi,\n functionName: 'split',\n args: [tokenId, extracted],\n })\n const step: StepKind = {\n to: ve,\n data,\n value: 0n,\n fallbackGas: CONTINUUM_DAO_SPLIT_FALLBACK,\n buildBatchMeta: ({ gasLimit }) =>\n meta('continuum_dao_split', args.chainId, ve, {\n name: 'VotingEscrow.split',\n tokenId: tokenId.toString(),\n extractedWei: extracted.toString(),\n }, gasLimit),\n }\n return finalize([step], args, `ContinuumDAO: split veCTM #${tokenId}.`)\n}\n\nexport async function buildEvmMultisignBodyContinuumDaoMerge(\n args: ContinuumDaoCommonArgs & {\n fromTokenId: string | number | bigint\n toTokenId: string | number | bigint\n votingEscrow?: string\n },\n): Promise<{ bodyForSign: Record<string, unknown>; messageToSign: string }> {\n const ve = args.votingEscrow && isConfiguredAddress(args.votingEscrow)\n ? getAddress(args.votingEscrow)\n : requireVe(args.chainId)\n const fromId = parseTokenId(args.fromTokenId)\n const toId = parseTokenId(args.toTokenId)\n await preflightMerge({\n rpcUrl: args.rpcUrl,\n chainId: args.chainId,\n votingEscrow: ve,\n owner: getAddress(args.executorAddress),\n fromTokenId: fromId,\n toTokenId: toId,\n })\n const data = encodeFunctionData({\n abi: veWriteAbi,\n functionName: 'merge',\n args: [fromId, toId],\n })\n const step: StepKind = {\n to: ve,\n data,\n value: 0n,\n fallbackGas: CONTINUUM_DAO_MERGE_FALLBACK,\n buildBatchMeta: ({ gasLimit }) =>\n meta('continuum_dao_merge', args.chainId, ve, {\n name: 'VotingEscrow.merge',\n fromTokenId: fromId.toString(),\n toTokenId: toId.toString(),\n }, gasLimit),\n }\n return finalize([step], args, `ContinuumDAO: merge veCTM #${fromId} into #${toId}.`)\n}\n\nexport async function buildEvmMultisignBodyContinuumDaoWithdraw(\n args: ContinuumDaoCommonArgs & { tokenId: string | number | bigint; votingEscrow?: string },\n): Promise<{ bodyForSign: Record<string, unknown>; messageToSign: string }> {\n const ve = args.votingEscrow && isConfiguredAddress(args.votingEscrow)\n ? getAddress(args.votingEscrow)\n : requireVe(args.chainId)\n const tokenId = parseTokenId(args.tokenId)\n await preflightWithdraw({\n rpcUrl: args.rpcUrl,\n chainId: args.chainId,\n votingEscrow: ve,\n owner: getAddress(args.executorAddress),\n tokenId,\n })\n const data = encodeFunctionData({ abi: veWriteAbi, functionName: 'withdraw', args: [tokenId] })\n const step: StepKind = {\n to: ve,\n data,\n value: 0n,\n fallbackGas: CONTINUUM_DAO_WITHDRAW_FALLBACK,\n buildBatchMeta: ({ gasLimit }) =>\n meta('continuum_dao_withdraw', args.chainId, ve, {\n name: 'VotingEscrow.withdraw',\n tokenId: tokenId.toString(),\n }, gasLimit),\n }\n return finalize([step], args, `ContinuumDAO: withdraw veCTM #${tokenId}.`)\n}\n\nexport async function buildEvmMultisignBodyContinuumDaoLiquidate(\n args: ContinuumDaoCommonArgs & { tokenId: string | number | bigint; votingEscrow?: string },\n): Promise<{ bodyForSign: Record<string, unknown>; messageToSign: string }> {\n const ve = args.votingEscrow && isConfiguredAddress(args.votingEscrow)\n ? getAddress(args.votingEscrow)\n : requireVe(args.chainId)\n const tokenId = parseTokenId(args.tokenId)\n await preflightLiquidate({\n rpcUrl: args.rpcUrl,\n chainId: args.chainId,\n votingEscrow: ve,\n owner: getAddress(args.executorAddress),\n tokenId,\n })\n const data = encodeFunctionData({ abi: veWriteAbi, functionName: 'liquidate', args: [tokenId] })\n const step: StepKind = {\n to: ve,\n data,\n value: 0n,\n fallbackGas: CONTINUUM_DAO_LIQUIDATE_FALLBACK,\n buildBatchMeta: ({ gasLimit }) =>\n meta('continuum_dao_liquidate', args.chainId, ve, {\n name: 'VotingEscrow.liquidate',\n tokenId: tokenId.toString(),\n }, gasLimit),\n }\n return finalize([step], args, `ContinuumDAO: liquidate veCTM #${tokenId}.`)\n}\n\nexport async function buildEvmMultisignBodyContinuumDaoDelegate(\n args: ContinuumDaoCommonArgs & { delegatee: string; votingEscrow?: string },\n): Promise<{ bodyForSign: Record<string, unknown>; messageToSign: string }> {\n const ve = args.votingEscrow && isConfiguredAddress(args.votingEscrow)\n ? getAddress(args.votingEscrow)\n : requireVe(args.chainId)\n const delegatee = await preflightDelegate({\n rpcUrl: args.rpcUrl,\n chainId: args.chainId,\n votingEscrow: ve,\n owner: getAddress(args.executorAddress),\n delegatee: args.delegatee,\n })\n const data = encodeFunctionData({ abi: veWriteAbi, functionName: 'delegate', args: [delegatee] })\n const step: StepKind = {\n to: ve,\n data,\n value: 0n,\n fallbackGas: CONTINUUM_DAO_DELEGATE_FALLBACK,\n buildBatchMeta: ({ gasLimit }) =>\n meta('continuum_dao_delegate', args.chainId, ve, {\n name: 'VotingEscrow.delegate',\n delegatee,\n }, gasLimit),\n }\n return finalize([step], args, `ContinuumDAO: delegate voting power to ${delegatee}.`)\n}\n\n/** veCTM has no undelegate(). Delegating to self (or address(0), which becomes self) returns voting power. */\nexport async function buildEvmMultisignBodyContinuumDaoUndelegate(\n args: ContinuumDaoCommonArgs & { votingEscrow?: string },\n): Promise<{ bodyForSign: Record<string, unknown>; messageToSign: string }> {\n const ve = args.votingEscrow && isConfiguredAddress(args.votingEscrow)\n ? getAddress(args.votingEscrow)\n : requireVe(args.chainId)\n const self = getAddress(args.executorAddress)\n await preflightUndelegate({\n rpcUrl: args.rpcUrl,\n chainId: args.chainId,\n votingEscrow: ve,\n owner: self,\n })\n const data = encodeFunctionData({ abi: veWriteAbi, functionName: 'delegate', args: [self] })\n const step: StepKind = {\n to: ve,\n data,\n value: 0n,\n fallbackGas: CONTINUUM_DAO_DELEGATE_FALLBACK,\n buildBatchMeta: ({ gasLimit }) =>\n meta('continuum_dao_undelegate', args.chainId, ve, {\n name: 'VotingEscrow.delegate',\n delegatee: self,\n undelegate: true,\n }, gasLimit),\n }\n return finalize([step], args, `ContinuumDAO: undelegate voting power (delegate back to ${self}).`)\n}\n\nconst veReadAbi = parseAbi(['function delegates(address account) view returns (address)'])\n\nexport async function continuumDaoFetchDelegates(args: {\n chainId: number | string\n rpcUrl: string\n account: string\n votingEscrow?: string\n}): Promise<{ account: string; delegatee: string; self: boolean }> {\n const chainId = Number(args.chainId)\n requireLockChain(chainId)\n const ve = args.votingEscrow && isConfiguredAddress(args.votingEscrow)\n ? getAddress(args.votingEscrow)\n : requireVe(chainId)\n const account = getAddress(args.account)\n const client = createPublicClient({\n chain: defineChain({\n id: chainId,\n name: 'ContinuumDAO',\n nativeCurrency: { decimals: 18, name: 'Ether', symbol: 'ETH' },\n rpcUrls: { default: { http: [args.rpcUrl.trim()] } },\n }),\n transport: defiEvmTransport(args.rpcUrl.trim()),\n })\n const delegatee = getAddress(\n await client.readContract({ address: ve, abi: veReadAbi, functionName: 'delegates', args: [account] }),\n )\n return { account, delegatee, self: delegatee === account }\n}\n\nexport async function buildEvmMultisignBodyContinuumDaoTransfer(\n args: ContinuumDaoCommonArgs & {\n tokenId: string | number | bigint\n to: string\n votingEscrow?: string\n },\n): Promise<{ bodyForSign: Record<string, unknown>; messageToSign: string }> {\n const ve = args.votingEscrow && isConfiguredAddress(args.votingEscrow)\n ? getAddress(args.votingEscrow)\n : requireVe(args.chainId)\n const tokenId = parseTokenId(args.tokenId)\n const from = getAddress(args.executorAddress)\n const to = await preflightTransfer({\n rpcUrl: args.rpcUrl,\n chainId: args.chainId,\n votingEscrow: ve,\n owner: from,\n tokenId,\n to: args.to,\n })\n const data = encodeFunctionData({\n abi: veWriteAbi,\n functionName: 'transferFrom',\n args: [from, to, tokenId],\n })\n const step: StepKind = {\n to: ve,\n data,\n value: 0n,\n fallbackGas: CONTINUUM_DAO_TRANSFER_FALLBACK,\n buildBatchMeta: ({ gasLimit }) =>\n meta('continuum_dao_transfer', args.chainId, ve, {\n name: 'VotingEscrow.transferFrom',\n tokenId: tokenId.toString(),\n from,\n to,\n }, gasLimit),\n }\n return finalize([step], args, `ContinuumDAO: transfer veCTM #${tokenId} to ${to}.`)\n}\n\nexport type ContinuumDaoNodeInfoTuple = [\n string,\n string,\n readonly [number, number, number, number],\n readonly [number, number, number, number, number, number, number, number],\n string,\n bigint,\n bigint,\n string,\n string,\n `0x${string}`,\n]\n\nexport function encodeContinuumDaoNodeInfo(info?: {\n forumHandle?: string\n email?: string\n ipv4?: number[]\n ipv6?: number[]\n vps?: string\n ram?: number | string\n cpu?: number | string\n dIDType?: string\n dID?: string\n extra?: string\n}): ContinuumDaoNodeInfoTuple {\n const ipv4Src = info?.ipv4 ?? [0, 0, 0, 0]\n const ipv6Src = info?.ipv6 ?? [0, 0, 0, 0, 0, 0, 0, 0]\n const ipv4: [number, number, number, number] = [\n ipv4Src[0] ?? 0,\n ipv4Src[1] ?? 0,\n ipv4Src[2] ?? 0,\n ipv4Src[3] ?? 0,\n ]\n const ipv6: [number, number, number, number, number, number, number, number] = [\n ipv6Src[0] ?? 0,\n ipv6Src[1] ?? 0,\n ipv6Src[2] ?? 0,\n ipv6Src[3] ?? 0,\n ipv6Src[4] ?? 0,\n ipv6Src[5] ?? 0,\n ipv6Src[6] ?? 0,\n ipv6Src[7] ?? 0,\n ]\n const extraRaw = (info?.extra ?? '0x').trim() || '0x'\n const extra = (extraRaw.startsWith('0x') ? extraRaw : `0x${extraRaw}`) as `0x${string}`\n return [\n info?.forumHandle ?? '',\n info?.email ?? '',\n ipv4,\n ipv6,\n info?.vps ?? '',\n BigInt(String(info?.ram ?? 0)),\n BigInt(String(info?.cpu ?? 0)),\n info?.dIDType ?? '',\n info?.dID ?? '',\n extra,\n ]\n}\n\nexport async function buildEvmMultisignBodyContinuumDaoAttachVeCtm(\n args: ContinuumDaoCommonArgs & {\n nodeKey: string\n tokenId: string | number | bigint\n mpaWallet: string\n nodeInfo?: Parameters<typeof encodeContinuumDaoNodeInfo>[0]\n nodeInfoTuple?: ContinuumDaoNodeInfoTuple\n groupId?: string\n },\n): Promise<{ bodyForSign: Record<string, unknown>; messageToSign: string }> {\n requireLockChain(args.chainId)\n const wallet = getAddress(args.mpaWallet)\n if (wallet === zeroAddress) throw new Error('MPA wallet address is required to attach veCTM.')\n const tokenId = parseTokenId(args.tokenId)\n const nodeKey = args.nodeKey.trim()\n if (!nodeKey) throw new Error('nodeKey is required to attach veCTM.')\n const groupId = resolveAttachGroupId(args.keyGen, args.groupId)\n await preflightAttachVeCtm({\n rpcUrl: args.rpcUrl,\n chainId: args.chainId,\n mpaWallet: wallet,\n nodeKey,\n tokenId,\n owner: getAddress(args.executorAddress),\n })\n const tuple = args.nodeInfoTuple ?? encodeContinuumDaoNodeInfo(args.nodeInfo)\n const data = encodeFunctionData({\n abi: attachAbi,\n functionName: 'attachVeCtm',\n args: [nodeKey, tokenId, tuple, groupId],\n })\n const step: StepKind = {\n to: wallet,\n data,\n value: 0n,\n fallbackGas: CONTINUUM_DAO_ATTACH_FALLBACK,\n buildBatchMeta: ({ gasLimit }) =>\n meta('continuum_dao_attach', args.chainId, wallet, {\n name: 'MultiSignAgentWallet.attachVeCtm',\n signature: ATTACH_VECTM_SIGNATURE,\n nodeKey,\n tokenId: tokenId.toString(),\n groupId,\n }, gasLimit),\n }\n return finalize([step], args, `ContinuumDAO: attach veCTM #${tokenId} (group ${groupId}).`)\n}\n\nexport async function buildEvmMultisignBodyContinuumDaoRequestDetach(\n args: ContinuumDaoCommonArgs & {\n tokenId: string | number | bigint\n nodeProperties: string\n },\n): Promise<{ bodyForSign: Record<string, unknown>; messageToSign: string }> {\n requireLockChain(args.chainId)\n const np = getAddress(args.nodeProperties)\n if (np === zeroAddress) throw new Error('NodeProperties address is required to request detach.')\n const tokenId = parseTokenId(args.tokenId)\n await preflightRequestDetach({\n rpcUrl: args.rpcUrl,\n chainId: args.chainId,\n nodeProperties: np,\n owner: getAddress(args.executorAddress),\n tokenId,\n })\n const data = encodeFunctionData({\n abi: detachAbi,\n functionName: 'setNodeRemovalStatus',\n args: [tokenId, true],\n })\n const step: StepKind = {\n to: np,\n data,\n value: 0n,\n fallbackGas: CONTINUUM_DAO_DETACH_FALLBACK,\n buildBatchMeta: ({ gasLimit }) =>\n meta('continuum_dao_request_detach', args.chainId, np, {\n name: 'NodeProperties.setNodeRemovalStatus',\n tokenId: tokenId.toString(),\n status: true,\n }, gasLimit),\n }\n return finalize([step], args, `ContinuumDAO: request detach of veCTM #${tokenId}.`)\n}\n\n/** MCP adapter: flatten NodeInfo fields onto the attach builder. */\nexport async function buildEvmMultisignBodyContinuumDaoAttachVeCtmFromMcp(\n args: ContinuumDaoCommonArgs & {\n nodeKey: string\n tokenId: string | number | bigint\n mpaWallet: string\n groupId?: string\n forumHandle?: string\n email?: string\n vps?: string\n ram?: number | string\n cpu?: number | string\n dIDType?: string\n dID?: string\n },\n): Promise<{ bodyForSign: Record<string, unknown>; messageToSign: string }> {\n return buildEvmMultisignBodyContinuumDaoAttachVeCtm({\n ...args,\n nodeInfo: {\n forumHandle: args.forumHandle,\n email: args.email,\n vps: args.vps,\n ram: args.ram,\n cpu: args.cpu,\n dIDType: args.dIDType,\n dID: args.dID,\n },\n })\n}\n","import type { KeyGenSubsetForPermit } from '../../../core/types.js'\n\nexport const VECTM_NODE_INFO_TUPLE =\n '(string,string,uint8[4],uint16[8],string,uint256,uint256,string,string,bytes)'\n\nexport const ATTACH_VECTM_SIGNATURE = `attachVeCtm(string,uint256,${VECTM_NODE_INFO_TUPLE},string)`\n\n/** Bind attach to the attaching KeyGen's mpc-auth GroupId. Do not pick a different group. */\nexport function resolveAttachGroupId(\n keyGen: KeyGenSubsetForPermit,\n explicit?: string,\n): string {\n const fromKg = (keyGen.groupId ?? keyGen.GroupId ?? '').trim()\n const fromArg = (explicit ?? '').trim()\n if (fromKg && fromArg && fromKg !== fromArg) {\n throw new Error(\n `groupId must be the attaching KeyGen's mpc-auth GroupId (${fromKg}), not a different group.`,\n )\n }\n if (fromKg) return fromKg\n if (fromArg) return fromArg\n throw new Error(\n \"groupId is required to attach veCTM (use the attaching KeyGen's mpc-auth GroupId).\",\n )\n}\n","/**\n * Interactive proposal-action compose: fetch a verified ABI, match a function,\n * type-check parameter values, encode calldata, and preview a Bravo/Delta draft.\n */\nimport { getAddress, isAddress } from 'viem'\nimport { encodeGovActionCalldata, type GovActionInput, type GovOptionInput } from './governance.js'\nimport { normalizeGovConfiguration } from './simulateProposal.js'\n\nexport type AbiParam = { name: string; type: string }\n\nexport type ComposeParamCheck = {\n name: string\n type: string\n value?: string\n valid: boolean\n error?: string\n}\n\nexport type ComposeFunctionMatch = {\n name: string\n signature: string\n stateMutability: string\n payable: boolean\n inputs: AbiParam[]\n}\n\nexport type ComposeEncodedAction = {\n target: string\n value: string\n signature: string\n calldata: `0x${string}`\n inputs: { name?: string; type: string; value: string }[]\n}\n\nexport type ComposeDraftRow = {\n option?: string\n index: number\n target: string\n function: string\n signature: string\n param: string\n type: string\n value: string\n valid: boolean\n error?: string\n}\n\nexport type ContinuumDaoComposeProposalActionArgs = {\n chainId: string | number\n rpcUrl?: string\n target?: string\n functionName?: string\n value?: string\n inputs?: { name?: string; type?: string; value?: string }[]\n abi?: string | unknown[]\n configuration?: unknown\n title?: string\n actions?: GovActionInput[]\n options?: GovOptionInput[]\n nWinners?: string | number\n}\n\nexport type ContinuumDaoComposeProposalActionResult = {\n ok: boolean\n step: 'lookup' | 'validate' | 'preview'\n target?: string\n functionName?: string\n signature?: string\n stateMutability?: string\n payable?: boolean\n overloads?: ComposeFunctionMatch[]\n parameters?: ComposeParamCheck[]\n encoded?: ComposeEncodedAction\n table?: string\n rows?: ComposeDraftRow[]\n actions?: GovActionInput[]\n options?: GovOptionInput[]\n configuration?: 'bravo' | 'delta'\n nWinners?: number\n title?: string\n abiSource?: string\n missing?: string[]\n warning?: string\n error?: string\n note: string\n next: string\n}\n\ntype JsonAbiItem = {\n type?: string\n name?: string\n stateMutability?: string\n payable?: boolean\n inputs?: Array<{ name?: string; type?: string; internalType?: string; components?: unknown[] }>\n}\n\nconst EIP1967_IMPL_SLOT = '0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc' as const\n\nfunction parseChainId(raw: string | number): number {\n const n = typeof raw === 'number' ? raw : Number.parseInt(String(raw), 10)\n if (n !== 59144 && n !== 59141) {\n throw new Error('chainId must be 59144 (Linea) or 59141 (Linea Sepolia).')\n }\n return n\n}\n\nfunction explorerHost(chainId: number): string {\n return chainId === 59141 ? 'https://api-sepolia.lineascan.build' : 'https://api.lineascan.build'\n}\n\nfunction formatAbiType(input: { type?: string; components?: unknown[] }): string {\n const raw = String(input.type ?? '').trim()\n if (!raw) return 'bytes'\n if (!raw.startsWith('tuple')) return raw\n const comps = Array.isArray(input.components) ? input.components : []\n const inner = comps\n .map((c) => formatAbiType(c as { type?: string; components?: unknown[] }))\n .join(',')\n return raw.replace(/^tuple/, `(${inner})`)\n}\n\nfunction abiFunctionToMatch(item: JsonAbiItem): ComposeFunctionMatch | null {\n if (item.type && item.type !== 'function') return null\n const name = String(item.name ?? '').trim()\n if (!name) return null\n const inputs = (item.inputs ?? []).map((inp, i) => ({\n name: String(inp.name ?? '').trim() || `arg${i}`,\n type: formatAbiType(inp),\n }))\n const mut = String(item.stateMutability ?? (item.payable ? 'payable' : 'nonpayable'))\n return {\n name,\n signature: `${name}(${inputs.map((p) => p.type).join(',')})`,\n stateMutability: mut,\n payable: mut === 'payable',\n inputs,\n }\n}\n\nfunction parseAbiJson(raw: unknown): JsonAbiItem[] {\n if (typeof raw === 'string') {\n const trimmed = raw.trim()\n if (!trimmed) return []\n return parseAbiJson(JSON.parse(trimmed))\n }\n if (!Array.isArray(raw)) return []\n return raw as JsonAbiItem[]\n}\n\nfunction functionsFromAbi(abi: unknown): ComposeFunctionMatch[] {\n return parseAbiJson(abi)\n .map(abiFunctionToMatch)\n .filter((x): x is ComposeFunctionMatch => x != null)\n}\n\nfunction parseSignature(signature: string): ComposeFunctionMatch {\n const sig = signature.trim()\n const start = sig.indexOf('(')\n if (start === -1) {\n return {\n name: sig,\n signature: `${sig}()`,\n stateMutability: 'nonpayable',\n payable: false,\n inputs: [],\n }\n }\n const name = sig.slice(0, start).trim()\n let depth = 0\n let end = -1\n for (let i = start; i < sig.length; i++) {\n if (sig[i] === '(') depth += 1\n if (sig[i] === ')') {\n depth -= 1\n if (depth === 0) {\n end = i\n break\n }\n }\n }\n const inner = end === -1 ? '' : sig.slice(start + 1, end)\n const types = inner.trim()\n ? splitTopLevel(inner)\n : []\n const inputs = types.map((type, i) => ({ name: `arg${i}`, type: type.trim() }))\n return {\n name,\n signature: `${name}(${inputs.map((p) => p.type).join(',')})`,\n stateMutability: 'nonpayable',\n payable: false,\n inputs,\n }\n}\n\nfunction splitTopLevel(inner: string): string[] {\n const out: string[] = []\n let buf = ''\n let depth = 0\n for (const ch of inner) {\n if (ch === '(') depth += 1\n if (ch === ')') depth -= 1\n if (ch === ',' && depth === 0) {\n if (buf.trim()) out.push(buf.trim())\n buf = ''\n continue\n }\n buf += ch\n }\n if (buf.trim()) out.push(buf.trim())\n return out\n}\n\nexport function validateAbiParameter(type: string, value: string): { ok: boolean; error?: string } {\n const trimmed = (value ?? '').trim()\n if (type === 'string') return { ok: true }\n if (trimmed === '' && type !== 'bytes') {\n return { ok: false, error: `missing value for ${type}` }\n }\n try {\n if (type === 'address') {\n if (!isAddress(trimmed)) return { ok: false, error: 'not a valid Ethereum address' }\n getAddress(trimmed)\n return { ok: true }\n }\n if (type === 'bool') {\n const n = trimmed.toLowerCase()\n if (!['true', 'false', '1', '0'].includes(n)) {\n return { ok: false, error: 'bool must be true/false or 1/0' }\n }\n return { ok: true }\n }\n if (type.startsWith('uint')) {\n if (!/^(0x[0-9a-fA-F]+|[0-9]+)$/.test(trimmed)) {\n return { ok: false, error: `${type} must be a non-negative integer or 0x hex` }\n }\n const bits = Number(type.slice(4) || '256')\n const n = BigInt(trimmed)\n if (n < 0n) return { ok: false, error: `${type} cannot be negative` }\n if (Number.isFinite(bits) && bits > 0 && n >= 1n << BigInt(bits)) {\n return { ok: false, error: `${type} overflow` }\n }\n return { ok: true }\n }\n if (type.startsWith('int') && !type.startsWith('internal')) {\n if (!/^-?(0x[0-9a-fA-F]+|[0-9]+)$/.test(trimmed)) {\n return { ok: false, error: `${type} must be an integer` }\n }\n BigInt(trimmed)\n return { ok: true }\n }\n if (type === 'bytes') {\n if (trimmed !== '' && !/^0x[0-9a-fA-F]*$/.test(trimmed)) {\n return { ok: false, error: 'bytes must be 0x-prefixed hex' }\n }\n if (trimmed.length % 2 !== 0) return { ok: false, error: 'bytes hex must be even length' }\n return { ok: true }\n }\n const bytesN = type.match(/^bytes(\\d+)$/)\n if (bytesN) {\n const n = Number(bytesN[1])\n if (!/^0x[0-9a-fA-F]+$/.test(trimmed)) return { ok: false, error: `${type} must be 0x hex` }\n if (trimmed.slice(2).length !== n * 2) {\n return { ok: false, error: `${type} must be ${n} bytes (${n * 2} hex chars)` }\n }\n return { ok: true }\n }\n encodeGovActionCalldata(`check(${type})`, [{ type, value: trimmed }])\n return { ok: true }\n } catch (err) {\n return { ok: false, error: err instanceof Error ? err.message : String(err) }\n }\n}\n\nfunction checkParameters(fn: ComposeFunctionMatch, rawInputs: { name?: string; type?: string; value?: string }[] = []): ComposeParamCheck[] {\n return fn.inputs.map((param, i) => {\n const provided = rawInputs[i]\n const value = provided?.value\n if (value == null || String(value).trim() === '') {\n return { name: param.name, type: param.type, valid: false, error: 'value not provided yet' }\n }\n const check = validateAbiParameter(param.type, String(value))\n return {\n name: param.name,\n type: param.type,\n value: String(value),\n valid: check.ok,\n error: check.error,\n }\n })\n}\n\nfunction encodeChecked(target: string, value: string, fn: ComposeFunctionMatch, checks: ComposeParamCheck[]): ComposeEncodedAction {\n const inputs = checks.map((c) => ({ name: c.name, type: c.type, value: c.value ?? '' }))\n const calldata = encodeGovActionCalldata(fn.signature, inputs)\n return {\n target: getAddress(target),\n value: String(value || '0'),\n signature: fn.signature,\n calldata,\n inputs,\n }\n}\n\nasync function fetchJson(url: string, timeoutMs = 8000): Promise<unknown> {\n const ac = new AbortController()\n const t = setTimeout(() => ac.abort(), timeoutMs)\n try {\n const res = await fetch(url, {\n method: 'GET',\n signal: ac.signal,\n headers: { accept: 'application/json' },\n })\n if (!res.ok) throw new Error(`${res.status} ${res.statusText}`)\n return await res.json()\n } finally {\n clearTimeout(t)\n }\n}\n\nfunction extractAbiFromUnknown(data: unknown): unknown[] | null {\n if (Array.isArray(data)) return data\n if (!data || typeof data !== 'object') return null\n const o = data as Record<string, unknown>\n if (Array.isArray(o.abi)) return o.abi\n if (o.compilation && typeof o.compilation === 'object') {\n const c = o.compilation as Record<string, unknown>\n if (Array.isArray(c.abi)) return c.abi\n }\n if (o.output && typeof o.output === 'object') {\n const out = o.output as Record<string, unknown>\n if (Array.isArray(out.abi)) return out.abi\n }\n if (typeof o.result === 'string' && o.result.trim().startsWith('[')) {\n try {\n const parsed = JSON.parse(o.result) as unknown\n if (Array.isArray(parsed)) return parsed\n } catch {\n return null\n }\n }\n return null\n}\n\nfunction extractAbiFromSourcifyFiles(data: unknown): unknown[] | null {\n if (!Array.isArray(data)) return null\n for (const file of data) {\n if (!file || typeof file !== 'object') continue\n const f = file as { name?: string; path?: string; content?: string }\n const label = `${f.name ?? ''} ${f.path ?? ''}`.toLowerCase()\n if (!label.includes('metadata.json') && f.name !== 'metadata.json') continue\n if (typeof f.content !== 'string') continue\n try {\n const meta = JSON.parse(f.content) as unknown\n const abi = extractAbiFromUnknown(meta)\n if (abi) return abi\n } catch {\n continue\n }\n }\n return null\n}\n\nasync function fetchVerifiedAbi(chainId: number, address: string): Promise<{ abi: unknown[]; source: string } | null> {\n const checksum = getAddress(address)\n const lower = checksum.toLowerCase()\n\n const sourcifyUrls = [\n `https://sourcify.dev/server/v2/contract/${chainId}/${checksum}`,\n `https://sourcify.dev/server/files/any/${chainId}/${checksum}`,\n `https://repo.sourcify.dev/contracts/full_match/${chainId}/${checksum}/metadata.json`,\n `https://repo.sourcify.dev/contracts/partial_match/${chainId}/${checksum}/metadata.json`,\n ]\n for (const url of sourcifyUrls) {\n try {\n const data = await fetchJson(url)\n const abi = url.includes('/files/') ? extractAbiFromSourcifyFiles(data) : extractAbiFromUnknown(data)\n if (abi && abi.length) return { abi, source: 'sourcify' }\n } catch {\n /* try next */\n }\n }\n\n const etherscanKey = String(process.env.ETHERSCAN_API_KEY ?? '').trim()\n if (etherscanKey) {\n try {\n const url = new URL('https://api.etherscan.io/v2/api')\n url.searchParams.set('apikey', etherscanKey)\n url.searchParams.set('chainid', String(chainId))\n url.searchParams.set('module', 'contract')\n url.searchParams.set('action', 'getabi')\n url.searchParams.set('address', checksum)\n const data = await fetchJson(url.toString())\n const abi = extractAbiFromUnknown(data)\n if (abi && abi.length) return { abi, source: 'etherscan' }\n } catch {\n /* fall through */\n }\n }\n\n try {\n const url = new URL(`${explorerHost(chainId)}/api`)\n url.searchParams.set('module', 'contract')\n url.searchParams.set('action', 'getabi')\n url.searchParams.set('address', lower)\n const data = await fetchJson(url.toString())\n const abi = extractAbiFromUnknown(data)\n if (abi && abi.length) return { abi, source: 'lineascan' }\n } catch {\n /* unverified */\n }\n return null\n}\n\nasync function readEip1967Implementation(rpcUrl: string, address: string): Promise<string | null> {\n try {\n const res = await fetch(rpcUrl, {\n method: 'POST',\n headers: { 'content-type': 'application/json' },\n body: JSON.stringify({\n jsonrpc: '2.0',\n id: 1,\n method: 'eth_getStorageAt',\n params: [getAddress(address), EIP1967_IMPL_SLOT, 'latest'],\n }),\n })\n const json = (await res.json()) as { result?: string }\n const hex = String(json.result ?? '')\n if (!hex || hex === '0x' || /^0x0+$/.test(hex)) return null\n const impl = `0x${hex.slice(-40)}`\n if (!isAddress(impl) || /^0x0+$/.test(impl)) return null\n return getAddress(impl)\n } catch {\n return null\n }\n}\n\nfunction matchFunction(fns: ComposeFunctionMatch[], functionName: string): ComposeFunctionMatch[] {\n const raw = functionName.trim()\n if (!raw) return []\n if (raw.includes('(')) {\n const parsed = parseSignature(raw)\n const exact = fns.filter((f) => f.signature.toLowerCase() === parsed.signature.toLowerCase())\n return exact.length ? exact : [parsed]\n }\n const byName = fns.filter((f) => f.name === raw)\n if (byName.length) return byName\n return fns.filter((f) => f.name.toLowerCase() === raw.toLowerCase())\n}\n\nfunction markdownTable(rows: ComposeDraftRow[]): string {\n const header =\n '| # | Option | Target | Function | Param | Type | Value | Valid |\\n|---|--------|--------|----------|-------|------|-------|-------|'\n if (!rows.length) {\n return `${header}\\n| — | — | — | *(signaling / no user actions)* | — | — | — | yes |`\n }\n const body = rows.map((r) => {\n const valid = r.valid ? 'yes' : `no${r.error ? ` (${r.error.replace(/\\|/g, '/')})` : ''}`\n return `| ${r.index} | ${r.option ?? '—'} | \\`${r.target}\\` | ${r.function} | ${r.param} | \\`${r.type}\\` | ${r.value || '—'} | ${valid} |`\n })\n return [header, ...body].join('\\n')\n}\n\nfunction actionToRows(action: GovActionInput, index: number, option?: string): ComposeDraftRow[] {\n const target = action.target\n const fn = parseSignature(action.signature ?? '')\n const inputs = action.inputs ?? []\n if (!fn.name && inputs.length === 0) {\n return [\n {\n option,\n index,\n target,\n function: '(no-op / signaling)',\n signature: '',\n param: '—',\n type: '—',\n value: action.value ?? '0',\n valid: true,\n },\n ]\n }\n if (!inputs.length) {\n return [\n {\n option,\n index,\n target,\n function: fn.name,\n signature: fn.signature,\n param: '—',\n type: '—',\n value: action.value ?? '0',\n valid: true,\n },\n ]\n }\n return inputs.map((inp) => {\n const check = validateAbiParameter(inp.type, inp.value)\n return {\n option,\n index,\n target,\n function: fn.name,\n signature: fn.signature,\n param: inp.name || 'arg',\n type: inp.type,\n value: inp.value,\n valid: check.ok,\n error: check.error,\n }\n })\n}\n\nfunction encodeActionOrThrow(action: GovActionInput): GovActionInput {\n const target = getAddress(action.target)\n const value = String(action.value || '0')\n const signature = (action.signature ?? '').trim()\n const inputs = (action.inputs ?? []).map((inp) => ({\n name: inp.name,\n type: inp.type,\n value: String(inp.value ?? ''),\n }))\n if (signature) encodeGovActionCalldata(signature, inputs)\n return { target, value, signature, inputs }\n}\n\nasync function resolveFunction(\n chainId: number,\n target: string,\n functionName: string,\n providedAbi: unknown,\n rpcUrl?: string,\n): Promise<{ matches: ComposeFunctionMatch[]; source: string; warning?: string }> {\n if (functionName.includes('(') && providedAbi == null) {\n return { matches: [parseSignature(functionName)], source: 'signature' }\n }\n let source = 'provided'\n let abiItems: unknown[] | null = providedAbi != null ? parseAbiJson(providedAbi) : null\n if (providedAbi != null && !abiItems?.length) {\n abiItems = extractAbiFromUnknown(providedAbi)\n }\n if (!abiItems?.length) {\n const fetched = await fetchVerifiedAbi(chainId, target)\n if (fetched) {\n abiItems = fetched.abi\n source = fetched.source\n }\n }\n let fns = functionsFromAbi(abiItems ?? [])\n if (rpcUrl && fns.length && !matchFunction(fns, functionName).length) {\n const impl = await readEip1967Implementation(rpcUrl, target)\n if (impl) {\n const implAbi = await fetchVerifiedAbi(chainId, impl)\n if (implAbi) {\n fns = functionsFromAbi(implAbi.abi)\n source = `${source}+proxy-impl`\n }\n }\n }\n const matches = matchFunction(fns, functionName)\n if (!matches.length && functionName.includes('(')) {\n return { matches: [parseSignature(functionName)], source: source === 'provided' ? 'signature' : source }\n }\n return { matches, source, warning: fns.length ? undefined : 'No verified ABI found. Pass abi JSON or a full signature like transfer(address,uint256).' }\n}\n\nfunction lookupNote(matches: ComposeFunctionMatch[], source: string): { note: string; next: string } {\n if (matches.length > 1) {\n return {\n note: `Found ${matches.length} overloads (${source}). Ask the operator which signature to use, then call this tool again with that full signature.`,\n next: 'Ask the operator to pick an overload, then collect a value for each parameter and call this tool with inputs[].value set.',\n }\n }\n const fn = matches[0]\n if (!fn) {\n return {\n note: 'Function not found on the verified ABI.',\n next: 'Confirm the contract address and function name, or pass abi / a full signature.',\n }\n }\n if (!fn.inputs.length) {\n return {\n note: `${fn.signature} takes no parameters (${source}).`,\n next: 'Confirm ETH value (0 unless payable), then add this action to the draft and ask if there is another action. After all actions, call this tool with configuration + actions/options for the preview table.',\n }\n }\n return {\n note: `Interface for ${fn.signature} (${source}). Ask the operator for each parameter value, then call this tool again with those values to type-check.`,\n next: `Ask one parameter at a time: ${fn.inputs.map((p) => `${p.name} (${p.type})`).join(', ')}. Then re-call with inputs values to validate.`,\n }\n}\n\n/**\n * Lookup a contract function, type-check values, or preview a full Bravo/Delta draft.\n */\nexport async function continuumDaoComposeProposalAction(\n args: ContinuumDaoComposeProposalActionArgs,\n): Promise<ContinuumDaoComposeProposalActionResult> {\n const chainId = parseChainId(args.chainId)\n const hasPreview =\n args.configuration != null &&\n (Array.isArray(args.actions) || Array.isArray(args.options))\n\n if (hasPreview) {\n const configuration = normalizeGovConfiguration(args.configuration)\n const title = args.title?.trim() || undefined\n const rows: ComposeDraftRow[] = []\n let ok = true\n const errors: string[] = []\n\n if (configuration === 'delta') {\n const options = args.options ?? []\n if (options.length < 2) {\n return {\n ok: false,\n step: 'preview',\n configuration,\n error: 'Delta preview needs at least 2 options.',\n note: 'Delta drafts need nOptions >= 2 and nWinners strictly less than nOptions.',\n next: 'Collect option labels and at least two options, then preview again.',\n }\n }\n const nWinners = Number(args.nWinners)\n if (!Number.isFinite(nWinners) || nWinners < 1 || nWinners >= options.length) {\n return {\n ok: false,\n step: 'preview',\n configuration,\n error: 'Delta nWinners must be >= 1 and strictly less than nOptions.',\n note: 'Fix nWinners before simulating.',\n next: 'Ask for nWinners, then preview again.',\n }\n }\n const encodedOptions: GovOptionInput[] = []\n options.forEach((opt) => {\n const encodedActions = (opt.actions ?? []).map((a, ai) => {\n const actionRows = actionToRows(a, ai + 1, opt.label)\n rows.push(...actionRows)\n if (actionRows.some((r) => !r.valid)) ok = false\n try {\n return encodeActionOrThrow(a)\n } catch (err) {\n ok = false\n errors.push(`${opt.label} action ${ai + 1}: ${err instanceof Error ? err.message : String(err)}`)\n return a\n }\n })\n encodedOptions.push({ label: opt.label, actions: encodedActions })\n })\n const table = markdownTable(rows)\n return {\n ok,\n step: 'preview',\n configuration,\n title,\n nWinners,\n options: encodedOptions,\n table,\n rows,\n error: errors.length ? errors.join('; ') : undefined,\n note: ok\n ? 'Draft inputs are type-valid. Present this table, then ask whether to dry-run with ctm_continuum_dao_simulate_proposal and run the returned Foundry forge scripts (foundry__forge_script, no --broadcast). Isolated eth_call is not sufficient.'\n : 'Some parameter values failed type checks. Fix the rows marked no before simulating.',\n next: ok\n ? 'Show the table. Load etherscan and foundry first. Ask if the operator wants to simulate via forge script (pass account for another EOA, or keyGenId / omit account for the preferred KeyGen). Do not call build_propose_* until they confirm, the forge script succeeded, and, for KeyGen submit, a Governance forum topic exists.'\n : 'Re-ask the invalid parameters and call this tool again to preview.',\n }\n }\n\n const actions = args.actions ?? []\n const encodedActions = actions.map((a, ai) => {\n const actionRows = actionToRows(a, ai + 1)\n rows.push(...actionRows)\n if (actionRows.some((r) => !r.valid)) ok = false\n try {\n return encodeActionOrThrow(a)\n } catch (err) {\n ok = false\n errors.push(`action ${ai + 1}: ${err instanceof Error ? err.message : String(err)}`)\n return a\n }\n })\n const table = markdownTable(rows)\n return {\n ok,\n step: 'preview',\n configuration,\n title,\n actions: encodedActions,\n table,\n rows,\n error: errors.length ? errors.join('; ') : undefined,\n note: ok\n ? 'Draft inputs are type-valid. Present this table, then ask whether to dry-run with ctm_continuum_dao_simulate_proposal and run the returned Foundry forge scripts (foundry__forge_script, no --broadcast). Isolated eth_call is not sufficient.'\n : 'Some parameter values failed type checks. Fix the rows marked no before simulating.',\n next: ok\n ? 'Show the table. Load etherscan and foundry first. Ask if the operator wants to simulate via forge script (pass account for another EOA, or keyGenId / omit account for the preferred KeyGen). Do not call build_propose_* until they confirm, the forge script succeeded, and, for KeyGen submit, a Governance forum topic exists.'\n : 'Re-ask the invalid parameters and call this tool again to preview.',\n }\n }\n\n const targetRaw = args.target?.trim()\n const functionName = args.functionName?.trim()\n if (!targetRaw || !functionName) {\n throw new Error('Pass target + functionName to look up / validate an action, or configuration + actions/options to preview the draft.')\n }\n if (!isAddress(targetRaw)) throw new Error('target must be a valid Ethereum address.')\n const target = getAddress(targetRaw)\n\n const resolved = await resolveFunction(chainId, target, functionName, args.abi, args.rpcUrl)\n if (!resolved.matches.length) {\n return {\n ok: false,\n step: 'lookup',\n target,\n functionName,\n abiSource: resolved.source,\n warning: resolved.warning,\n error: `No function named ${functionName} on ${target}.`,\n note: resolved.warning ?? 'Function not found.',\n next: 'Confirm the address and name, or pass abi JSON / a full signature.',\n }\n }\n\n const valuesProvided = (args.inputs ?? []).some((inp) => inp.value != null && String(inp.value).trim() !== '')\n if (!valuesProvided || resolved.matches.length > 1) {\n const { note, next } = lookupNote(resolved.matches, resolved.source)\n const fn = resolved.matches.length === 1 ? resolved.matches[0] : undefined\n return {\n ok: resolved.matches.length === 1,\n step: 'lookup',\n target,\n functionName,\n signature: fn?.signature,\n stateMutability: fn?.stateMutability,\n payable: fn?.payable,\n overloads: resolved.matches,\n parameters: fn ? fn.inputs.map((p) => ({ name: p.name, type: p.type, valid: false, error: 'value not provided yet' })) : undefined,\n abiSource: resolved.source,\n warning: resolved.warning,\n missing: fn?.inputs.map((p) => p.name),\n note,\n next,\n }\n }\n\n const fn = resolved.matches[0]!\n const checks = checkParameters(fn, args.inputs)\n const missing = checks.filter((c) => !c.valid).map((c) => c.name)\n const value = String(args.value || '0')\n if (!fn.payable && value !== '0') {\n checks.push({\n name: 'value',\n type: 'uint256',\n value,\n valid: false,\n error: `${fn.signature} is not payable; ETH value must be 0`,\n })\n missing.push('value')\n }\n const allValid = checks.every((c) => c.valid)\n const encoded = allValid ? encodeChecked(target, value, fn, checks) : undefined\n\n const rows: ComposeDraftRow[] = checks.map((c) => ({\n index: 1,\n target,\n function: fn.name,\n signature: fn.signature,\n param: c.name,\n type: c.type,\n value: c.value ?? '',\n valid: c.valid,\n error: c.error,\n }))\n\n return {\n ok: allValid,\n step: 'validate',\n target,\n functionName: fn.name,\n signature: fn.signature,\n stateMutability: fn.stateMutability,\n payable: fn.payable,\n parameters: checks,\n encoded,\n table: markdownTable(rows),\n rows,\n actions: encoded\n ? [{ target: encoded.target, value: encoded.value, signature: encoded.signature, inputs: encoded.inputs }]\n : undefined,\n abiSource: resolved.source,\n missing: missing.length ? missing : undefined,\n error: allValid ? undefined : checks.filter((c) => !c.valid).map((c) => `${c.name}: ${c.error}`).join('; '),\n note: allValid\n ? `${fn.signature} values are type-valid. Add this action to the draft. Ask if there is another action, then preview with configuration + actions/options.`\n : 'One or more parameter values do not match the ABI types. Re-ask those fields.',\n next: allValid\n ? 'Keep this encoded action. Repeat lookup/validate for the next action, or call this tool with configuration + the collected actions/options to print the conclusion table and offer a Foundry forge-script simulate.'\n : 'Re-ask the invalid parameters and call this tool again with the corrected values.',\n }\n}\n","/**\n * Per-voter roll for a ContinuumDAO proposal (VoteCast / VoteCastWithParams).\n * Backend /proposalVotes only store aggregates — who voted lives in Governor logs.\n */\nimport { type Address, formatUnits, getAddress, parseAbi, parseAbiItem } from 'viem'\nimport {\n CONTINUUM_DAO_LINEA_SEPOLIA_CHAIN_ID,\n isConfiguredAddress,\n votingEscrowAddressOnEvmChain,\n} from './constants.js'\nimport {\n continuumDaoFetchProposal,\n publicClient,\n requireGovernor,\n resolveGovernorProposalRef,\n} from './governance.js'\n\nexport const VOTE_CAST_EVENT = parseAbiItem(\n 'event VoteCast(address indexed voter, uint256 proposalId, uint8 support, uint256 weight, string reason)',\n)\nexport const VOTE_CAST_WITH_PARAMS_EVENT = parseAbiItem(\n 'event VoteCastWithParams(address indexed voter, uint256 proposalId, uint8 support, uint256 weight, string reason, bytes params)',\n)\n\nconst snapshotDeadlineAbi = parseAbi([\n 'function proposalSnapshot(uint256 proposalId) view returns (uint256)',\n 'function proposalDeadline(uint256 proposalId) view returns (uint256)',\n 'function token() view returns (address)',\n])\n\nconst veNodePropertiesAbi = parseAbi(['function nodeProperties() view returns (address)'])\n\nconst nodePropsAttachAbi = parseAbi([\n 'function attachedTokenId(address keyGen) view returns (uint256)',\n])\n\nconst nodeInfoAbi = [\n {\n type: 'function',\n name: 'nodeInfo',\n stateMutability: 'view',\n inputs: [\n { name: '_tokenId', type: 'uint256' },\n { name: '_account', type: 'address' },\n ],\n outputs: [\n {\n name: '',\n type: 'tuple',\n components: [\n { name: 'forumHandle', type: 'string' },\n { name: 'email', type: 'string' },\n { name: 'ipv4', type: 'uint8[4]' },\n { name: 'ipv6', type: 'uint16[8]' },\n { name: 'vpsProvider', type: 'string' },\n { name: 'ramInstalled', type: 'uint256' },\n { name: 'cpuCores', type: 'uint256' },\n { name: 'dIDType', type: 'string' },\n { name: 'dID', type: 'string' },\n { name: 'data', type: 'bytes' },\n ],\n },\n ],\n },\n] as const\n\nexport const BRAVO_SUPPORT_LABELS = ['Against', 'For', 'Abstain'] as const\n\nconst LOG_CHUNK_BLOCKS = 8_000n\nconst MAX_LOG_CHUNKS = 80\nconst MAX_VOTES = 2_000\nconst TIMESTAMP_FLOOR = 1_600_000_000n\nconst LINEA_BLOCK_SECONDS = 2n\nconst RANGE_BUFFER_BLOCKS = 20_000n\n\nexport function bravoSupportLabel(support: number): string {\n return BRAVO_SUPPORT_LABELS[support] ?? `support=${support}`\n}\n\n/** Inverse of packed Delta vote params (32-byte uint256 slots, last is NOTA). */\nexport function decodeDeltaVoteParams(params: `0x${string}` | string | undefined): string[] {\n if (!params || params === '0x') return []\n const hex = params.startsWith('0x') ? params.slice(2) : params\n if (hex.length === 0 || hex.length % 64 !== 0) return []\n const out: string[] = []\n for (let i = 0; i < hex.length; i += 64) {\n out.push(BigInt(`0x${hex.slice(i, i + 64)}`).toString())\n }\n return out\n}\n\nexport function looksLikeUnixSeconds(value: bigint): boolean {\n return value >= TIMESTAMP_FLOOR && value < 4_000_000_000n\n}\n\nexport function estimateBlockAtTimestamp(\n timestamp: bigint,\n latest: { number: bigint; timestamp: bigint },\n): bigint {\n if (timestamp >= latest.timestamp) return latest.number\n const deltaSec = latest.timestamp - timestamp\n const approx = deltaSec / LINEA_BLOCK_SECONDS + RANGE_BUFFER_BLOCKS\n return latest.number > approx ? latest.number - approx : 0n\n}\n\nexport function explorerBase(chainId: number): string {\n return chainId === CONTINUUM_DAO_LINEA_SEPOLIA_CHAIN_ID\n ? 'https://sepolia.lineascan.build'\n : 'https://lineascan.build'\n}\n\nexport type ProposalVoteLogLike = {\n eventName?: string\n args?: {\n voter?: unknown\n proposalId?: unknown\n support?: unknown\n weight?: unknown\n reason?: unknown\n params?: unknown\n }\n blockNumber?: bigint | null\n transactionHash?: `0x${string}` | null\n}\n\nexport type ProposalVoteRow = {\n voter: string\n explorerUrl: string\n support: number\n supportLabel: string\n weight: string\n weightCtm: string\n reason: string\n optionWeights?: string[]\n how: string\n attached: boolean\n attachedTokenId?: string\n nodeInfo?: ContinuumDaoNodeInfo\n txHash?: string\n txExplorerUrl?: string\n blockNumber?: string\n}\n\nexport function howVoted(input: {\n support: number\n optionWeights?: string[]\n optionLabels?: string[]\n}): string {\n if (input.optionWeights && input.optionWeights.length > 0) {\n const labels = input.optionLabels ?? []\n const parts = input.optionWeights.map((w, i) => {\n const last = i === input.optionWeights!.length - 1\n const name = last ? 'NOTA' : (labels[i] ?? `option ${i + 1}`)\n return `${name} ${w}`\n })\n return parts.join(', ')\n }\n return bravoSupportLabel(input.support)\n}\n\nfunction asBigInt(value: unknown): bigint | null {\n if (typeof value === 'bigint') return value\n if (typeof value === 'number' && Number.isFinite(value)) return BigInt(value)\n if (typeof value === 'string' && /^-?\\d+$/.test(value.trim())) return BigInt(value.trim())\n return null\n}\n\nexport function collectVotesFromLogs(\n logs: readonly ProposalVoteLogLike[],\n proposalId: bigint,\n chainId: number,\n optionLabels?: string[],\n): ProposalVoteRow[] {\n const base = explorerBase(chainId)\n const rows: ProposalVoteRow[] = []\n for (const log of logs) {\n const args = log.args ?? {}\n const logProposal = asBigInt(args.proposalId)\n if (logProposal == null || logProposal !== proposalId) continue\n let voter: string\n try {\n voter = getAddress(String(args.voter ?? ''))\n } catch {\n continue\n }\n const support = Number(args.support ?? 0)\n const weight = asBigInt(args.weight) ?? 0n\n const reason = typeof args.reason === 'string' ? args.reason : ''\n const params =\n typeof args.params === 'string' && args.params.startsWith('0x')\n ? (args.params as `0x${string}`)\n : undefined\n const optionWeights =\n log.eventName === 'VoteCastWithParams' || params ? decodeDeltaVoteParams(params) : undefined\n const how = howVoted({\n support,\n ...(optionWeights && optionWeights.length > 0 ? { optionWeights, optionLabels } : {}),\n })\n const txHash = log.transactionHash ?? undefined\n rows.push({\n voter,\n explorerUrl: `${base}/address/${voter}`,\n support,\n supportLabel: bravoSupportLabel(support),\n weight: weight.toString(),\n weightCtm: formatUnits(weight, 18),\n reason,\n attached: false,\n ...(optionWeights && optionWeights.length > 0 ? { optionWeights } : {}),\n how,\n ...(txHash ? { txHash, txExplorerUrl: `${base}/tx/${txHash}` } : {}),\n ...(log.blockNumber != null ? { blockNumber: log.blockNumber.toString() } : {}),\n })\n }\n return rows\n}\n\nexport function summarizeProposalVotes(votes: readonly ProposalVoteRow[]): {\n voterCount: number\n attachedVoterCount: number\n forWeight: string\n againstWeight: string\n abstainWeight: string\n note: string\n} {\n let forW = 0n\n let againstW = 0n\n let abstainW = 0n\n for (const vote of votes) {\n const w = BigInt(vote.weight)\n if (vote.support === 1) forW += w\n else if (vote.support === 0) againstW += w\n else if (vote.support === 2) abstainW += w\n }\n const note =\n votes.length === 0\n ? 'No VoteCast logs for this proposal in the scanned window. If it just started, wait; if it is older than the window, pass fromBlock/toBlock or load official etherscan get_logs on the governor.'\n : `Found ${votes.length} vote(s). Read voter + how + whether they are attached to a node. Offer this after listing or explaining a proposal.`\n const attachedCount = votes.filter((vote) => vote.attached).length\n const attachBit =\n votes.length === 0\n ? ''\n : ` ${attachedCount} of ${votes.length} voting address(es) are attached to a node (NodeProperties.attachedTokenId after attachNodeFor).`\n return {\n voterCount: votes.length,\n attachedVoterCount: attachedCount,\n forWeight: forW.toString(),\n againstWeight: againstW.toString(),\n abstainWeight: abstainW.toString(),\n note: `${note}${attachBit}`,\n }\n}\n\nexport type ContinuumDaoNodeInfo = {\n forumHandle?: string\n email?: string\n ipv4?: string\n ipv6?: string\n vpsProvider?: string\n ramInstalled?: string\n cpuCores?: string\n dIDType?: string\n dID?: string\n dataHex?: string\n}\n\nexport type VoterNodeAttachment = {\n attached: boolean\n attachedTokenId?: string\n nodeInfo?: ContinuumDaoNodeInfo\n}\n\nfunction asNumberList(value: unknown): number[] {\n if (!Array.isArray(value)) return []\n return value.map((part) => Number(part))\n}\n\nfunction formatIpv4(parts: unknown): string | undefined {\n const n = asNumberList(parts)\n if (n.length !== 4 || n.every((x) => x === 0)) return undefined\n return n.join('.')\n}\n\nfunction formatIpv6(parts: unknown): string | undefined {\n const n = asNumberList(parts)\n if (n.length !== 8 || n.every((x) => x === 0)) return undefined\n return n.map((x) => x.toString(16)).join(':')\n}\n\nexport function normalizeNodeInfo(raw: unknown): ContinuumDaoNodeInfo | undefined {\n if (raw == null) return undefined\n const rec = Array.isArray(raw)\n ? {\n forumHandle: raw[0],\n email: raw[1],\n ipv4: raw[2],\n ipv6: raw[3],\n vpsProvider: raw[4],\n ramInstalled: raw[5],\n cpuCores: raw[6],\n dIDType: raw[7],\n dID: raw[8],\n data: raw[9],\n }\n : typeof raw === 'object'\n ? (raw as Record<string, unknown>)\n : null\n if (!rec) return undefined\n const str = (value: unknown) => (typeof value === 'string' && value.trim() ? value.trim() : undefined)\n const ram = asBigInt(rec.ramInstalled)\n const cpu = asBigInt(rec.cpuCores)\n const data =\n typeof rec.data === 'string' && rec.data.startsWith('0x') && rec.data !== '0x' ? rec.data : undefined\n const info: ContinuumDaoNodeInfo = {\n ...(str(rec.forumHandle) ? { forumHandle: str(rec.forumHandle) } : {}),\n ...(str(rec.email) ? { email: str(rec.email) } : {}),\n ...(formatIpv4(rec.ipv4) ? { ipv4: formatIpv4(rec.ipv4) } : {}),\n ...(formatIpv6(rec.ipv6) ? { ipv6: formatIpv6(rec.ipv6) } : {}),\n ...(str(rec.vpsProvider) ? { vpsProvider: str(rec.vpsProvider) } : {}),\n ...(ram != null && ram > 0n ? { ramInstalled: ram.toString() } : {}),\n ...(cpu != null && cpu > 0n ? { cpuCores: cpu.toString() } : {}),\n ...(str(rec.dIDType) ? { dIDType: str(rec.dIDType) } : {}),\n ...(str(rec.dID) ? { dID: str(rec.dID) } : {}),\n ...(data ? { dataHex: data } : {}),\n }\n return Object.keys(info).length > 0 ? info : undefined\n}\n\nexport function applyNodeAttachments(\n votes: readonly ProposalVoteRow[],\n attachments: ReadonlyMap<string, VoterNodeAttachment>,\n): ProposalVoteRow[] {\n return votes.map((vote) => {\n const hit = attachments.get(vote.voter.toLowerCase())\n if (!hit) return { ...vote, attached: false }\n return {\n ...vote,\n attached: hit.attached,\n ...(hit.attached && hit.attachedTokenId ? { attachedTokenId: hit.attachedTokenId } : {}),\n ...(hit.nodeInfo ? { nodeInfo: hit.nodeInfo } : {}),\n }\n })\n}\n\nexport type ContinuumDaoFetchProposalVotesInput = {\n chainId: number | string\n rpcUrl: string\n proposalId: string | number | bigint\n governor?: string\n votingEscrow?: string\n nodeProperties?: string\n fromBlock?: string | number\n toBlock?: string | number\n}\n\nexport type ContinuumDaoFetchProposalVotesResult = {\n proposalId: string\n catalogId?: number\n governor: string\n nodeProperties?: string\n title?: string\n configuration?: 'bravo' | 'delta'\n fromBlock: string\n toBlock: string\n truncated: boolean\n votes: ProposalVoteRow[]\n voterCount: number\n attachedVoterCount: number\n forWeight: string\n againstWeight: string\n abstainWeight: string\n note: string\n}\n\nexport type ContinuumDaoProposalVotesDeps = {\n getLogs?: (args: {\n address: Address\n events: readonly [typeof VOTE_CAST_EVENT, typeof VOTE_CAST_WITH_PARAMS_EVENT]\n fromBlock: bigint\n toBlock: bigint\n }) => Promise<readonly ProposalVoteLogLike[]>\n getBlock?: () => Promise<{ number: bigint; timestamp: bigint }>\n readSnapshotDeadline?: (\n gov: Address,\n proposalId: bigint,\n ) => Promise<{ snapshot?: bigint; deadline?: bigint }>\n fetchProposal?: typeof continuumDaoFetchProposal\n readNodeProperties?: () => Promise<Address | null>\n readAttachedTokenId?: (keyGen: Address) => Promise<bigint>\n readNodeInfo?: (tokenId: bigint, account: Address) => Promise<unknown>\n}\n\nfunction backendOptionLabels(raw: unknown): string[] | undefined {\n if (!raw || typeof raw !== 'object' || Array.isArray(raw)) return undefined\n const options = (raw as { options?: unknown }).options\n if (!Array.isArray(options)) return undefined\n const labels = options\n .map((opt) => {\n if (!opt || typeof opt !== 'object' || Array.isArray(opt)) return ''\n return String((opt as { label?: unknown }).label ?? '').trim()\n })\n .filter(Boolean)\n return labels.length > 0 ? labels : undefined\n}\n\nfunction backendTitle(raw: unknown): string | undefined {\n if (!raw || typeof raw !== 'object' || Array.isArray(raw)) return undefined\n const title = (raw as { title?: unknown }).title\n return typeof title === 'string' && title.trim() ? title.trim() : undefined\n}\n\nfunction backendConfiguration(raw: unknown): 'bravo' | 'delta' | undefined {\n if (!raw || typeof raw !== 'object' || Array.isArray(raw)) return undefined\n const cfg = (raw as { configuration?: unknown }).configuration\n if (cfg === 1 || cfg === '1' || cfg === 'delta') return 'delta'\n if (cfg === 0 || cfg === '0' || cfg === 'bravo') return 'bravo'\n return undefined\n}\n\nasync function readWindow(\n client: ReturnType<typeof publicClient>,\n gov: Address,\n proposalId: bigint,\n latest: { number: bigint; timestamp: bigint },\n deps?: ContinuumDaoProposalVotesDeps,\n): Promise<{ fromBlock: bigint; toBlock: bigint }> {\n let snapshot: bigint | undefined\n let deadline: bigint | undefined\n try {\n const read = deps?.readSnapshotDeadline\n ? await deps.readSnapshotDeadline(gov, proposalId)\n : {\n snapshot: await client.readContract({\n address: gov,\n abi: snapshotDeadlineAbi,\n functionName: 'proposalSnapshot',\n args: [proposalId],\n }),\n deadline: await client.readContract({\n address: gov,\n abi: snapshotDeadlineAbi,\n functionName: 'proposalDeadline',\n args: [proposalId],\n }),\n }\n snapshot = read.snapshot\n deadline = read.deadline\n } catch {\n /* fall back to a recent lookback */\n }\n const toFromTs = (ts: bigint | undefined, fallback: bigint) => {\n if (ts == null) return fallback\n if (looksLikeUnixSeconds(ts)) return estimateBlockAtTimestamp(ts, latest)\n return ts > latest.number ? latest.number : ts\n }\n const fromBlock = toFromTs(snapshot, latest.number > 200_000n ? latest.number - 200_000n : 0n)\n const toBlock = toFromTs(deadline, latest.number)\n return {\n fromBlock,\n toBlock: toBlock < fromBlock ? latest.number : toBlock,\n }\n}\n\nasync function resolveNodePropertiesAddress(\n client: ReturnType<typeof publicClient>,\n chainId: number,\n gov: Address,\n args: ContinuumDaoFetchProposalVotesInput,\n deps?: ContinuumDaoProposalVotesDeps,\n): Promise<Address | null> {\n if (deps?.readNodeProperties) {\n return deps.readNodeProperties()\n }\n if (isConfiguredAddress(args.nodeProperties)) {\n return getAddress(args.nodeProperties!)\n }\n let ve: Address | null = isConfiguredAddress(args.votingEscrow)\n ? getAddress(args.votingEscrow!)\n : votingEscrowAddressOnEvmChain(chainId)\n if (!ve) {\n try {\n const token = await client.readContract({\n address: gov,\n abi: snapshotDeadlineAbi,\n functionName: 'token',\n })\n ve = isConfiguredAddress(token) ? getAddress(token) : null\n } catch {\n ve = null\n }\n }\n if (!ve) return null\n try {\n const np = await client.readContract({\n address: ve,\n abi: veNodePropertiesAbi,\n functionName: 'nodeProperties',\n })\n return isConfiguredAddress(np) ? getAddress(np) : null\n } catch {\n return null\n }\n}\n\nasync function readAttachmentsForVoters(\n client: ReturnType<typeof publicClient>,\n nodeProperties: Address,\n voters: readonly string[],\n deps?: ContinuumDaoProposalVotesDeps,\n): Promise<Map<string, VoterNodeAttachment>> {\n const out = new Map<string, VoterNodeAttachment>()\n await Promise.all(\n voters.map(async (raw) => {\n const keyGen = getAddress(raw)\n try {\n const tokenId = deps?.readAttachedTokenId\n ? await deps.readAttachedTokenId(keyGen)\n : await client.readContract({\n address: nodeProperties,\n abi: nodePropsAttachAbi,\n functionName: 'attachedTokenId',\n args: [keyGen],\n })\n if (tokenId > 0n) {\n let nodeInfo: ContinuumDaoNodeInfo | undefined\n try {\n const raw = deps?.readNodeInfo\n ? await deps.readNodeInfo(tokenId, keyGen)\n : await client.readContract({\n address: nodeProperties,\n abi: nodeInfoAbi,\n functionName: 'nodeInfo',\n args: [tokenId, keyGen],\n })\n nodeInfo = normalizeNodeInfo(raw)\n } catch {\n /* NodeInfo is optional; attachment still stands */\n }\n out.set(keyGen.toLowerCase(), {\n attached: true,\n attachedTokenId: tokenId.toString(),\n ...(nodeInfo ? { nodeInfo } : {}),\n })\n } else {\n out.set(keyGen.toLowerCase(), { attached: false })\n }\n } catch {\n out.set(keyGen.toLowerCase(), { attached: false })\n }\n }),\n )\n return out\n}\n\nasync function collectLogsInRange(\n client: ReturnType<typeof publicClient>,\n gov: Address,\n fromBlock: bigint,\n toBlock: bigint,\n deps?: ContinuumDaoProposalVotesDeps,\n): Promise<{ logs: ProposalVoteLogLike[]; truncated: boolean }> {\n const logs: ProposalVoteLogLike[] = []\n let chunks = 0\n let truncated = false\n for (let start = fromBlock; start <= toBlock; start += LOG_CHUNK_BLOCKS) {\n if (chunks >= MAX_LOG_CHUNKS) {\n truncated = true\n break\n }\n const end = start + LOG_CHUNK_BLOCKS - 1n > toBlock ? toBlock : start + LOG_CHUNK_BLOCKS - 1n\n const args = {\n address: gov,\n events: [VOTE_CAST_EVENT, VOTE_CAST_WITH_PARAMS_EVENT] as const,\n fromBlock: start,\n toBlock: end,\n }\n const chunk = deps?.getLogs\n ? await deps.getLogs(args)\n : ((await client.getLogs(args)) as ProposalVoteLogLike[])\n logs.push(...chunk)\n chunks += 1\n }\n return { logs, truncated }\n}\n\nexport async function continuumDaoFetchProposalVotes(\n args: ContinuumDaoFetchProposalVotesInput,\n deps?: ContinuumDaoProposalVotesDeps,\n): Promise<ContinuumDaoFetchProposalVotesResult> {\n const chainId = Number(args.chainId)\n const resolved = await resolveGovernorProposalRef(args.proposalId)\n const gov = requireGovernor(chainId, resolved.governorAddress ?? args.governor)\n const client = publicClient(args.rpcUrl, chainId)\n const latest = deps?.getBlock\n ? await deps.getBlock()\n : await client.getBlock()\n const latestHead = { number: latest.number, timestamp: latest.timestamp }\n\n let fromBlock: bigint\n let toBlock: bigint\n if (args.fromBlock != null || args.toBlock != null) {\n fromBlock = args.fromBlock != null ? BigInt(String(args.fromBlock)) : 0n\n toBlock = args.toBlock != null ? BigInt(String(args.toBlock)) : latestHead.number\n } else {\n const window = await readWindow(client, gov, resolved.proposalId, latestHead, deps)\n fromBlock = window.fromBlock\n toBlock = window.toBlock\n }\n\n let optionLabels: string[] | undefined\n let title: string | undefined\n let configuration: 'bravo' | 'delta' | undefined\n if (resolved.catalogId != null) {\n try {\n const fetched = await (deps?.fetchProposal ?? continuumDaoFetchProposal)({\n id: resolved.catalogId,\n })\n optionLabels = backendOptionLabels(fetched.proposal)\n title = backendTitle(fetched.proposal)\n configuration = backendConfiguration(fetched.proposal)\n } catch {\n /* labels optional */\n }\n }\n\n let logs: ProposalVoteLogLike[] = []\n let truncated = false\n let logNote: string | undefined\n try {\n const collected = await collectLogsInRange(client, gov, fromBlock, toBlock, deps)\n logs = collected.logs\n truncated = collected.truncated\n } catch (error) {\n const message = error instanceof Error ? error.message : String(error)\n logNote = `Could not read Governor VoteCast logs: ${message}. Load official etherscan and call get_logs on the governor if the operator chooses it.`\n }\n\n let votes = collectVotesFromLogs(logs, resolved.proposalId, chainId, optionLabels).slice(\n 0,\n MAX_VOTES,\n )\n if (votes.length === MAX_VOTES) truncated = true\n\n let nodeProperties: Address | undefined\n let attachNote: string | undefined\n try {\n const np = await resolveNodePropertiesAddress(client, chainId, gov, args, deps)\n if (np) {\n nodeProperties = np\n const unique = [...new Set(votes.map((vote) => vote.voter))]\n const attachments = await readAttachmentsForVoters(client, np, unique, deps)\n votes = applyNodeAttachments(votes, attachments)\n } else {\n attachNote =\n 'Could not resolve NodeProperties (VotingEscrow.nodeProperties after attachNodeFor). Pass nodeProperties if the operator has it.'\n }\n } catch (error) {\n const message = error instanceof Error ? error.message : String(error)\n attachNote = `Could not read NodeProperties.attachedTokenId: ${message}.`\n }\n\n const summary = summarizeProposalVotes(votes)\n const note = [\n summary.note,\n logNote,\n attachNote,\n truncated ? 'Result truncated; narrow fromBlock/toBlock if you need the rest.' : '',\n ]\n .filter(Boolean)\n .join(' ')\n\n return {\n proposalId: resolved.proposalId.toString(),\n ...(resolved.catalogId != null ? { catalogId: resolved.catalogId } : {}),\n governor: gov,\n ...(nodeProperties ? { nodeProperties } : {}),\n ...(title ? { title } : {}),\n ...(configuration ? { configuration } : {}),\n fromBlock: fromBlock.toString(),\n toBlock: toBlock.toString(),\n truncated,\n votes,\n voterCount: summary.voterCount,\n attachedVoterCount: summary.attachedVoterCount,\n forWeight: summary.forWeight,\n againstWeight: summary.againstWeight,\n abstainWeight: summary.abstainWeight,\n note,\n }\n}\n","export type MarketplaceCatalogSource = 'api' | 'logs'\n\nexport type MarketplaceOrderKind = 'Listing' | 'Offering'\n\nexport type MarketplaceOrderStatus =\n | 'NonExistent'\n | 'Open'\n | 'Fulfilled'\n | 'Expired'\n | 'DelistedOrRescinded'\n | 'LockAmountDecreased'\n | 'LockEndIncreased'\n | 'TokenApprovalRequired'\n | 'PaymentApprovalRequired'\n | 'KeyGenAttached'\n\nexport type MarketplaceAuctionStatus =\n | 'NonExistent'\n | 'Pending'\n | 'Active'\n | 'Complete'\n | 'Sold'\n | 'Canceled'\n | 'Expired'\n\nexport type MarketplaceBid = {\n bidder: string\n price: string\n tx: string\n timestamp: string\n logIndex?: string\n block?: string\n}\n\nexport type MarketplaceOrder = {\n kind: MarketplaceOrderKind\n tokenId: string\n onchainIndex: string\n creator: string\n seller?: string\n buyer?: string\n paymentToken: string\n price: string\n deadlineUnix: string\n deadlineAt: string\n snapshotAmount: string\n snapshotEnd: string\n storedStatus: string\n protocolStatus: string\n counterparty?: string\n fee?: string\n net?: string\n createdTx?: string\n createdBlock?: string\n closedTx?: string\n closedBlock?: string\n lockedCTM?: string\n currentLockedAmount?: string\n unlockTime?: string\n unlockTimeAt?: string\n keygen?: string\n}\n\nexport type MarketplaceAuction = {\n tokenId: string\n onchainIndex: string\n seller: string\n paymentToken: string\n reservePrice: string\n minimumBidIncrement: string\n highestBid: string\n highestBidder: string | null\n buyer?: string | null\n deadlineUnix: string\n deadlineAt: string\n storedStatus: string\n derivedStatus: string\n needsSettle: boolean\n fee?: string | null\n net?: string | null\n bids: MarketplaceBid[]\n createdTx?: string\n createdBlock?: string\n closedTx?: string\n closedBlock?: string\n lockedCTM?: string\n currentLockedAmount?: string\n unlockTime?: string\n unlockTimeAt?: string\n keygen?: string\n}\n\nexport type MarketplacePaymentToken = {\n address: string\n symbol: string\n decimals: number\n isValid: boolean\n}\n\nexport type MarketplaceFeeTier = {\n name: string\n index: number\n limit: string\n rateBps: string\n}\n\nexport type MarketplaceConfig = {\n chainId: number\n marketplace: string\n ve: string\n gov: string\n np: string\n weth: string\n minimumDuration: string\n maximumDuration: string\n feeLimits: string[]\n feeRates: string[]\n feeTiers: MarketplaceFeeTier[]\n paymentTokens: MarketplacePaymentToken[]\n source: MarketplaceCatalogSource\n}\n\nexport type MarketplaceFeePreview = {\n tokenId: string\n lockedAmount: string\n tier: string\n tierIndex: number\n limit: string\n rateBps: string\n price: string\n fee: string\n net: string\n source: MarketplaceCatalogSource\n}\n\nexport type MarketplaceTokenPayload = {\n token: { tokenId: string; owner?: string; lockedAmount?: string; keygen?: string; marketplaceApproved?: boolean }\n listing: MarketplaceOrder | null\n offerings: MarketplaceOrder[]\n auction: MarketplaceAuction | null\n history: {\n listings: MarketplaceOrder[]\n offerings: MarketplaceOrder[]\n auctions: MarketplaceAuction[]\n }\n source: MarketplaceCatalogSource\n}\n\nexport type MarketplaceListResult<T> = {\n items: T[]\n nextCursor: string | null\n source: MarketplaceCatalogSource\n}\n\nexport type MarketplaceActivity = {\n address: string\n orders: MarketplaceOrder[]\n auctions: MarketplaceAuction[]\n source: MarketplaceCatalogSource\n}\n\nexport type MarketplaceIndexCache = {\n lastScannedBlock: string\n listings: MarketplaceOrder[]\n offerings: MarketplaceOrder[]\n auctions: MarketplaceAuction[]\n}\n\nexport const MARKET_ORDER_STATUS: readonly MarketplaceOrderStatus[] = [\n 'NonExistent',\n 'Open',\n 'Fulfilled',\n 'Expired',\n 'DelistedOrRescinded',\n 'LockAmountDecreased',\n 'LockEndIncreased',\n 'TokenApprovalRequired',\n 'PaymentApprovalRequired',\n 'KeyGenAttached',\n]\n\nexport const AUCTION_STATUS: readonly MarketplaceAuctionStatus[] = [\n 'NonExistent',\n 'Pending',\n 'Active',\n 'Complete',\n 'Sold',\n 'Canceled',\n 'Expired',\n]\n\nexport const FEE_TIER_NAMES = ['Black', 'Gold', 'Silver', 'Bronze', 'Blue'] as const\n\nexport function orderStatusName(code: number): MarketplaceOrderStatus {\n return MARKET_ORDER_STATUS[code] ?? 'NonExistent'\n}\n\nexport function auctionStatusName(code: number): MarketplaceAuctionStatus {\n return AUCTION_STATUS[code] ?? 'NonExistent'\n}\n","import { getAddress, zeroAddress } from 'viem'\nimport {\n auctionStatusName,\n orderStatusName,\n type MarketplaceAuction,\n type MarketplaceOrder,\n} from './marketplaceTypes.js'\n\nexport type FoldedMarketplaceBook = {\n listings: MarketplaceOrder[]\n offerings: MarketplaceOrder[]\n auctions: MarketplaceAuction[]\n}\n\ntype LogRef = { tx: string; block: string; logIndex: number; timestamp?: string }\n\nexport type MarketplaceFoldEvent =\n | ({ name: 'ListingCreated'; tokenId: string; actor: string; paymentToken: string; amount: string; deadline: string; minIncrement?: string } & LogRef)\n | ({ name: 'OfferingCreated'; tokenId: string; actor: string; paymentToken: string; amount: string; deadline: string } & LogRef)\n | ({ name: 'ListingFulfilled'; tokenId: string; buyer: string; seller: string; price: string; net: string; fee: string } & LogRef)\n | ({ name: 'OfferingFulfilled'; tokenId: string; buyer: string; seller: string; price: string; net: string; fee: string } & LogRef)\n | ({ name: 'Delisted'; tokenId: string; actor: string } & LogRef)\n | ({ name: 'Rescinded'; tokenId: string; actor: string } & LogRef)\n | ({ name: 'AuctionCreated'; tokenId: string; actor: string; paymentToken: string; amount: string; minIncrement: string; deadline: string } & LogRef)\n | ({ name: 'AuctionCanceled'; tokenId: string; actor: string } & LogRef)\n | ({ name: 'AuctionBid'; tokenId: string; seller: string; buyer: string; price: string } & LogRef)\n | ({ name: 'AuctionSettled'; tokenId: string; seller: string; finalStatus: number } & LogRef)\n | ({ name: 'AuctionSuccessful'; tokenId: string; seller: string; buyer: string; price: string; fee: string; net: string } & LogRef)\n\nfunction addr(value: string): string {\n try {\n return getAddress(value)\n } catch {\n return value\n }\n}\n\nfunction same(a: string, b: string): boolean {\n return a.toLowerCase() === b.toLowerCase()\n}\n\nfunction deadlineAt(unix: string): string {\n const n = Number(unix)\n if (!Number.isFinite(n) || n <= 0) return ''\n return new Date(n * 1000).toISOString()\n}\n\n\nfunction blankOrder(kind: 'Listing' | 'Offering', tokenId: string, creator: string, index: string): MarketplaceOrder {\n return {\n kind,\n tokenId,\n onchainIndex: index,\n creator: addr(creator),\n paymentToken: zeroAddress,\n price: '0',\n deadlineUnix: '0',\n deadlineAt: '',\n snapshotAmount: '0',\n snapshotEnd: '0',\n storedStatus: 'Open',\n protocolStatus: 'Open',\n }\n}\n\nfunction blankAuction(tokenId: string, seller: string, index: string): MarketplaceAuction {\n return {\n tokenId,\n onchainIndex: index,\n seller: addr(seller),\n paymentToken: zeroAddress,\n reservePrice: '0',\n minimumBidIncrement: '0',\n highestBid: '0',\n highestBidder: null,\n deadlineUnix: '0',\n deadlineAt: '',\n storedStatus: 'Pending',\n derivedStatus: 'Pending',\n needsSettle: false,\n bids: [],\n }\n}\n\nfunction latestOpenOrder(\n rows: MarketplaceOrder[],\n kind: 'Listing' | 'Offering',\n tokenId: string,\n creator: string,\n): MarketplaceOrder | undefined {\n for (let i = rows.length - 1; i >= 0; i--) {\n const row = rows[i]!\n if (row.kind === kind && row.tokenId === tokenId && same(row.creator, creator) && row.storedStatus === 'Open') {\n return row\n }\n }\n return undefined\n}\n\nfunction latestAuction(rows: MarketplaceAuction[], tokenId: string, seller: string): MarketplaceAuction | undefined {\n for (let i = rows.length - 1; i >= 0; i--) {\n const row = rows[i]!\n if (row.tokenId === tokenId && same(row.seller, seller)) return row\n }\n return undefined\n}\n\n/** Apply one event onto a book. Events must arrive in chain order. */\nexport function applyMarketplaceEvent(book: FoldedMarketplaceBook, ev: MarketplaceFoldEvent): void {\n const listingSeq = book.listings.reduce((max, row) => Math.max(max, Number(row.onchainIndex) || 0), 0)\n const offeringSeq = book.offerings.reduce((max, row) => Math.max(max, Number(row.onchainIndex) || 0), 0)\n const auctionSeq = book.auctions.reduce((max, row) => Math.max(max, Number(row.onchainIndex) || 0), 0)\n const next = (seq: number) => String(seq + 1)\n\n if (ev.name === 'ListingCreated' || ev.name === 'OfferingCreated') {\n const kind = ev.name === 'ListingCreated' ? 'Listing' : 'Offering'\n const rows = kind === 'Listing' ? book.listings : book.offerings\n const prev = latestOpenOrder(rows, kind, ev.tokenId, ev.actor)\n if (prev) {\n prev.storedStatus = 'DelistedOrRescinded'\n prev.protocolStatus = 'DelistedOrRescinded'\n prev.closedTx = ev.tx\n prev.closedBlock = ev.block\n }\n const row = blankOrder(kind, ev.tokenId, ev.actor, next(kind === 'Listing' ? listingSeq : offeringSeq))\n row.paymentToken = addr(ev.paymentToken)\n row.price = ev.amount\n row.deadlineUnix = ev.deadline\n row.deadlineAt = deadlineAt(ev.deadline)\n row.createdTx = ev.tx\n row.createdBlock = ev.block\n if (kind === 'Listing') row.seller = addr(ev.actor)\n else row.buyer = addr(ev.actor)\n rows.push(row)\n return\n }\n if (ev.name === 'Delisted' || ev.name === 'Rescinded') {\n const kind = ev.name === 'Delisted' ? 'Listing' : 'Offering'\n const row = latestOpenOrder(kind === 'Listing' ? book.listings : book.offerings, kind, ev.tokenId, ev.actor)\n if (row) {\n row.storedStatus = 'DelistedOrRescinded'\n row.protocolStatus = 'DelistedOrRescinded'\n row.closedTx = ev.tx\n row.closedBlock = ev.block\n }\n return\n }\n if (ev.name === 'ListingFulfilled' || ev.name === 'OfferingFulfilled') {\n const kind = ev.name === 'ListingFulfilled' ? 'Listing' : 'Offering'\n const actor = kind === 'Listing' ? ev.seller : ev.buyer\n const row = latestOpenOrder(kind === 'Listing' ? book.listings : book.offerings, kind, ev.tokenId, actor)\n if (row) {\n row.storedStatus = 'Fulfilled'\n row.protocolStatus = 'Fulfilled'\n row.counterparty = addr(kind === 'Listing' ? ev.buyer : ev.seller)\n row.seller = addr(ev.seller)\n row.buyer = addr(ev.buyer)\n row.fee = ev.fee\n row.net = ev.net\n row.closedTx = ev.tx\n row.closedBlock = ev.block\n }\n return\n }\n if (ev.name === 'AuctionCreated') {\n const prev = latestAuction(book.auctions, ev.tokenId, ev.actor)\n if (prev && (prev.storedStatus === 'Pending' || prev.storedStatus === 'Active')) {\n prev.storedStatus = 'Canceled'\n prev.derivedStatus = 'Canceled'\n prev.closedTx = ev.tx\n prev.closedBlock = ev.block\n }\n const row = blankAuction(ev.tokenId, ev.actor, next(auctionSeq))\n row.paymentToken = addr(ev.paymentToken)\n row.reservePrice = ev.amount\n row.minimumBidIncrement = ev.minIncrement\n row.deadlineUnix = ev.deadline\n row.deadlineAt = deadlineAt(ev.deadline)\n row.createdTx = ev.tx\n row.createdBlock = ev.block\n book.auctions.push(row)\n return\n }\n if (ev.name === 'AuctionCanceled') {\n const row = latestAuction(book.auctions, ev.tokenId, ev.actor)\n if (row && row.storedStatus === 'Pending') {\n row.storedStatus = 'Canceled'\n row.derivedStatus = 'Canceled'\n row.closedTx = ev.tx\n row.closedBlock = ev.block\n }\n return\n }\n if (ev.name === 'AuctionBid') {\n const row = latestAuction(book.auctions, ev.tokenId, ev.seller)\n if (!row || (row.storedStatus !== 'Pending' && row.storedStatus !== 'Active')) return\n row.bids = [\n ...row.bids,\n {\n bidder: addr(ev.buyer),\n price: ev.price,\n tx: ev.tx,\n timestamp: ev.timestamp ?? '0',\n logIndex: String(ev.logIndex),\n block: ev.block,\n },\n ]\n row.highestBid = ev.price\n row.highestBidder = addr(ev.buyer)\n row.storedStatus = 'Active'\n row.derivedStatus = 'Active'\n return\n }\n if (ev.name === 'AuctionSettled') {\n const row = latestAuction(book.auctions, ev.tokenId, ev.seller)\n if (!row) return\n const name = auctionStatusName(ev.finalStatus)\n row.storedStatus = name\n row.derivedStatus = name\n row.needsSettle = false\n row.closedTx = ev.tx\n row.closedBlock = ev.block\n return\n }\n if (ev.name === 'AuctionSuccessful') {\n const row = latestAuction(book.auctions, ev.tokenId, ev.seller)\n if (!row) return\n row.storedStatus = 'Sold'\n row.derivedStatus = 'Sold'\n row.buyer = addr(ev.buyer)\n row.highestBidder = addr(ev.buyer)\n row.highestBid = ev.price\n row.fee = ev.fee\n row.net = ev.net\n row.needsSettle = false\n row.closedTx = ev.tx\n row.closedBlock = ev.block\n }\n}\n\n/**\n * Replay marketplace events into listings, offerings, and auctions, including closed rows and bids.\n * Events must be in chain order.\n */\nexport function foldMarketplaceEvents(\n events: readonly MarketplaceFoldEvent[],\n initial?: FoldedMarketplaceBook,\n): FoldedMarketplaceBook {\n const book: FoldedMarketplaceBook = {\n listings: [...(initial?.listings ?? [])],\n offerings: [...(initial?.offerings ?? [])],\n auctions: (initial?.auctions ?? []).map((row) => ({ ...row, bids: [...row.bids] })),\n }\n for (const ev of events) applyMarketplaceEvent(book, ev)\n return book\n}\n\n\nexport function deriveAuctionStatus(auction: MarketplaceAuction, nowUnix: number): string {\n const deadline = Number(auction.deadlineUnix)\n if (auction.storedStatus === 'Pending' && Number.isFinite(deadline) && nowUnix >= deadline) return 'Expired'\n if (auction.storedStatus === 'Active' && Number.isFinite(deadline) && nowUnix >= deadline) return 'Complete'\n return auction.derivedStatus || auction.storedStatus\n}\n\nexport function applyDerivedStatuses(book: FoldedMarketplaceBook, nowUnix: number): FoldedMarketplaceBook {\n return {\n listings: book.listings.map((row) => {\n const deadline = Number(row.deadlineUnix)\n if (row.storedStatus === 'Open' && Number.isFinite(deadline) && nowUnix >= deadline) {\n return { ...row, protocolStatus: 'Expired' }\n }\n return row\n }),\n offerings: book.offerings.map((row) => {\n const deadline = Number(row.deadlineUnix)\n if (row.storedStatus === 'Open' && Number.isFinite(deadline) && nowUnix >= deadline) {\n return { ...row, protocolStatus: 'Expired' }\n }\n return row\n }),\n auctions: book.auctions.map((row) => {\n const derived = deriveAuctionStatus(row, nowUnix)\n const needsSettle = derived === 'Complete' || derived === 'Expired'\n return { ...row, derivedStatus: derived, needsSettle }\n }),\n }\n}\n\nexport function isLiveAuctionStatus(status: string): boolean {\n return status === 'Pending' || status === 'Active' || status === 'Complete'\n}\n\nexport function isOpenOrder(row: MarketplaceOrder): boolean {\n return row.storedStatus === 'Open' && row.protocolStatus === 'Open'\n}\n\nexport { orderStatusName, auctionStatusName }\n","import { parseAbi } from 'viem'\n\n/** VotingEscrowMarketplace + the views the catalog and builders call. */\nexport const marketplaceAbi = parseAbi([\n 'function weth() view returns (address)',\n 'function ve() view returns (address)',\n 'function np() view returns (address)',\n 'function gov() view returns (address)',\n 'function minimumDuration() view returns (uint256)',\n 'function maximumDuration() view returns (uint256)',\n 'function isValidPaymentToken(address) view returns (bool)',\n 'function feeLimitByTier(uint8) view returns (uint256)',\n 'function feeRateByTier(uint8) view returns (uint256)',\n 'function listingIndexByTokenSeller(uint256,address) view returns (uint256)',\n 'function listingsByToken(uint256,uint256) view returns (uint256 price, uint256 deadline, uint256 snapshotAmount, uint256 snapshotEnd, address creator, address paymentToken, uint8 status, uint8 kind)',\n 'function offeringIndexByTokenBuyer(uint256,address) view returns (uint256)',\n 'function offeringsByToken(uint256,uint256) view returns (uint256 price, uint256 deadline, uint256 snapshotAmount, uint256 snapshotEnd, address creator, address paymentToken, uint8 status, uint8 kind)',\n 'function auctionIndexByTokenSeller(uint256,address) view returns (uint256)',\n 'function auctionsByToken(uint256,uint256) view returns (uint256 reservePrice, uint256 minimumBidIncrement, uint256 deadline, address seller, address paymentToken, address highestBidder, uint256 highestBid, uint8 status)',\n 'function marketOrderStatus((uint256,uint256,uint256,uint256,address,address,uint8,uint8),uint256,uint256,address,uint256) view returns (uint8)',\n 'function auctionStatus((uint256,uint256,uint256,address,address,address,uint256,uint8)) view returns (uint8)',\n 'function createListing(uint256,address,uint256,uint256)',\n 'function delist(uint256)',\n 'function fulfillListing(uint256,address,address,uint256) payable',\n 'function createOffering(uint256,address,uint256,uint256) payable',\n 'function rescind(uint256)',\n 'function fulfillOffering(uint256,address,address,uint256)',\n 'function createAuction(uint256,address,uint256,uint256,uint256)',\n 'function cancelAuction(uint256)',\n 'function auctionBid(uint256,address,uint256) payable',\n 'function settleAuction(uint256,address)',\n 'event ListingCreated(uint256 indexed _tokenId, address indexed _listedBy, address indexed _paymentToken, uint256 _ask, uint256 _deadline)',\n 'event ListingFulfilled(uint256 indexed _tokenId, address indexed _buyer, address indexed _seller, uint256 _ask, uint256 _netPrice, uint256 _fee)',\n 'event Delisted(uint256 indexed _tokenId, address indexed _seller)',\n 'event OfferingCreated(uint256 indexed _tokenId, address indexed _offeredBy, address indexed _paymentToken, uint256 _bid, uint256 _deadline)',\n 'event OfferingFulfilled(uint256 indexed _tokenId, address indexed _buyer, address indexed _seller, uint256 _bid, uint256 _netPrice, uint256 _fee)',\n 'event Rescinded(uint256 indexed _tokenId, address indexed _buyer)',\n 'event AuctionCreated(uint256 indexed _tokenId, address indexed _createdBy, address indexed _paymentToken, uint256 _reservePrice, uint256 _minimumBidIncrement, uint256 _deadline)',\n 'event AuctionCanceled(uint256 indexed _tokenId, address indexed _seller)',\n 'event AuctionBid(uint256 indexed _tokenId, address indexed _seller, address indexed _buyer, uint256 _price)',\n 'event AuctionSettled(uint256 indexed _tokenId, address indexed _seller, uint8 indexed _finalStatus)',\n 'event AuctionSuccessful(uint256 indexed _tokenId, address indexed _seller, address indexed _buyer, uint256 _price, uint256 _fee, uint256 _net)',\n])\n\nexport const marketplaceReadAbi = parseAbi([\n 'function ownerOf(uint256) view returns (address)',\n 'function getApproved(uint256) view returns (address)',\n 'function isApprovedForAll(address,address) view returns (bool)',\n 'function approve(address,uint256)',\n 'function locked(uint256) view returns (int128 amount, uint256 end)',\n 'function allowance(address,address) view returns (uint256)',\n 'function decimals() view returns (uint8)',\n 'function symbol() view returns (string)',\n 'function attachedKeyGen(uint256) view returns (address)',\n])\n","import { encodeFunctionData, getAddress, zeroAddress, type Address } from 'viem'\nimport { marketplaceAbi, marketplaceReadAbi } from './marketplaceAbi.js'\n\nexport const MARKETPLACE_APPROVE_FALLBACK = 80_000n\nexport const MARKETPLACE_LISTING_FALLBACK = 280_000n\nexport const MARKETPLACE_FULFILL_FALLBACK = 450_000n\nexport const MARKETPLACE_OFFERING_FALLBACK = 320_000n\nexport const MARKETPLACE_AUCTION_CREATE_FALLBACK = 380_000n\nexport const MARKETPLACE_BID_FALLBACK = 280_000n\nexport const MARKETPLACE_SETTLE_FALLBACK = 400_000n\n\nexport type MarketplaceAction =\n | 'createListing'\n | 'delist'\n | 'fulfillListing'\n | 'createOffering'\n | 'rescind'\n | 'fulfillOffering'\n | 'createAuction'\n | 'cancelAuction'\n | 'auctionBid'\n | 'settleAuction'\n\nexport type MarketplaceOrderTuple = {\n price: bigint\n deadline: bigint\n snapshotAmount: bigint\n snapshotEnd: bigint\n creator: Address\n paymentToken: Address\n status: number\n}\n\nexport type MarketplaceAuctionTuple = {\n reservePrice: bigint\n minimumBidIncrement: bigint\n deadline: bigint\n seller: Address\n paymentToken: Address\n highestBidder: Address\n highestBid: bigint\n status: number\n}\n\nexport type MarketplacePlanSnapshot = {\n marketplace: Address\n votingEscrow: Address\n weth: Address\n now: bigint\n minimumDuration: bigint\n maximumDuration: bigint\n executor: Address\n owner: Address\n nftApproved: boolean\n allowance: bigint\n attachedKeyGen: Address\n paymentTokenValid: boolean\n executorOpenListing: boolean\n executorLiveAuction: boolean\n listing: MarketplaceOrderTuple | null\n offering: MarketplaceOrderTuple | null\n auction: MarketplaceAuctionTuple | null\n}\n\nexport type PlannedMarketplaceStep = {\n to: Address\n data: `0x${string}`\n value: bigint\n fallbackGas: bigint\n evmType: string\n name: string\n extra: Record<string, unknown>\n}\n\nfunction same(a: string, b: string): boolean {\n try {\n return getAddress(a) === getAddress(b)\n } catch {\n return a.toLowerCase() === b.toLowerCase()\n }\n}\n\nfunction isWeth(snap: MarketplacePlanSnapshot, token: Address): boolean {\n return same(token, snap.weth)\n}\n\nexport function keyGenOwnsVeCtm(snap: MarketplacePlanSnapshot, seller?: Address): boolean {\n if (same(snap.owner, snap.executor)) return true\n if (seller && same(seller, snap.executor)) return true\n if (snap.executorOpenListing && same(snap.owner, snap.executor)) return true\n if (snap.executorLiveAuction) return true\n return false\n}\n\nfunction assertNotOwn(snap: MarketplacePlanSnapshot, seller: Address | undefined, tokenId: bigint): void {\n if (same(snap.owner, snap.executor) || (seller && same(seller, snap.executor)) || snap.executorLiveAuction) {\n throw new Error(`This KeyGen already owns veCTM #${tokenId.toString()} and cannot buy or bid on it.`)\n }\n}\n\nfunction assertDeadline(snap: MarketplacePlanSnapshot, deadline: bigint): void {\n const min = snap.now + snap.minimumDuration\n const max = snap.now + snap.maximumDuration\n if (deadline < min || deadline > max) {\n throw new Error(`Deadline must be between ${min.toString()} and ${max.toString()} (unix seconds).`)\n }\n}\n\nfunction assertPayment(snap: MarketplacePlanSnapshot): void {\n if (!snap.paymentTokenValid) throw new Error('This payment token is not accepted by the marketplace.')\n}\n\nfunction assertNotAttached(snap: MarketplacePlanSnapshot, tokenId: bigint): void {\n if (snap.attachedKeyGen !== zeroAddress) {\n throw new Error(`veCTM #${tokenId.toString()} has a KeyGen attached.`)\n }\n}\n\nfunction nftApproveStep(snap: MarketplacePlanSnapshot, tokenId: bigint): PlannedMarketplaceStep | null {\n if (snap.nftApproved) return null\n return {\n to: snap.votingEscrow,\n data: encodeFunctionData({\n abi: marketplaceReadAbi,\n functionName: 'approve',\n args: [snap.marketplace, tokenId],\n }),\n value: 0n,\n fallbackGas: MARKETPLACE_APPROVE_FALLBACK,\n evmType: 'continuum_dao_marketplace_nft_approve',\n name: 'VotingEscrow.approve',\n extra: { tokenId: tokenId.toString(), operator: snap.marketplace },\n }\n}\n\nfunction parseApproveAbi() {\n return [\n {\n type: 'function',\n name: 'approve',\n stateMutability: 'nonpayable',\n inputs: [\n { name: 'spender', type: 'address' },\n { name: 'amount', type: 'uint256' },\n ],\n outputs: [{ name: '', type: 'bool' }],\n },\n ] as const\n}\n\nfunction erc20Approve(snap: MarketplacePlanSnapshot, token: Address, amount: bigint): PlannedMarketplaceStep | null {\n if (snap.allowance >= amount) return null\n return {\n to: token,\n data: encodeFunctionData({\n abi: parseApproveAbi(),\n functionName: 'approve',\n args: [snap.marketplace, amount],\n }),\n value: 0n,\n fallbackGas: MARKETPLACE_APPROVE_FALLBACK,\n evmType: 'continuum_dao_marketplace_approve',\n name: 'ERC20.approve',\n extra: { spender: snap.marketplace, amountWei: amount.toString(), token },\n }\n}\n\nfunction withApprovals(steps: Array<PlannedMarketplaceStep | null>): PlannedMarketplaceStep[] {\n return steps.filter((s): s is PlannedMarketplaceStep => s != null)\n}\n\nexport type MarketplacePlanInput =\n | { action: 'createListing'; tokenId: bigint; paymentToken: Address; askWei: bigint; deadline: bigint }\n | { action: 'delist'; tokenId: bigint }\n | { action: 'fulfillListing'; tokenId: bigint; seller: Address; paymentToken: Address; priceWei: bigint }\n | { action: 'createOffering'; tokenId: bigint; paymentToken: Address; bidWei: bigint; deadline: bigint }\n | { action: 'rescind'; tokenId: bigint }\n | { action: 'fulfillOffering'; tokenId: bigint; buyer: Address; paymentToken: Address; priceWei: bigint }\n | {\n action: 'createAuction'\n tokenId: bigint\n paymentToken: Address\n deadline: bigint\n reserveWei: bigint\n minIncrementWei: bigint\n }\n | { action: 'cancelAuction'; tokenId: bigint }\n | { action: 'auctionBid'; tokenId: bigint; seller: Address; priceWei: bigint }\n | { action: 'settleAuction'; tokenId: bigint; seller: Address }\n\nexport function planMarketplaceSteps(\n input: MarketplacePlanInput,\n snap: MarketplacePlanSnapshot,\n): PlannedMarketplaceStep[] {\n const m = snap.marketplace\n switch (input.action) {\n case 'createListing': {\n assertPayment(snap)\n assertDeadline(snap, input.deadline)\n if (!same(snap.owner, snap.executor)) throw new Error('Only the veCTM owner can create a listing.')\n return withApprovals([\n nftApproveStep(snap, input.tokenId),\n {\n to: m,\n data: encodeFunctionData({\n abi: marketplaceAbi,\n functionName: 'createListing',\n args: [input.tokenId, input.paymentToken, input.askWei, input.deadline],\n }),\n value: 0n,\n fallbackGas: MARKETPLACE_LISTING_FALLBACK,\n evmType: 'continuum_dao_marketplace_create_listing',\n name: 'VotingEscrowMarketplace.createListing',\n extra: {\n tokenId: input.tokenId.toString(),\n paymentToken: input.paymentToken,\n askWei: input.askWei.toString(),\n deadline: input.deadline.toString(),\n },\n },\n ])\n }\n case 'delist': {\n if (!snap.listing || snap.listing.status !== 1) throw new Error('No open listing for this KeyGen.')\n return [\n {\n to: m,\n data: encodeFunctionData({ abi: marketplaceAbi, functionName: 'delist', args: [input.tokenId] }),\n value: 0n,\n fallbackGas: MARKETPLACE_LISTING_FALLBACK,\n evmType: 'continuum_dao_marketplace_delist',\n name: 'VotingEscrowMarketplace.delist',\n extra: { tokenId: input.tokenId.toString() },\n },\n ]\n }\n case 'fulfillListing': {\n assertNotOwn(snap, input.seller, input.tokenId)\n const listing = snap.listing\n if (!listing || !same(listing.creator, input.seller)) throw new Error('No open listing for this seller.')\n if (!same(listing.paymentToken, input.paymentToken) || listing.price !== input.priceWei) {\n throw new Error('Listing price or payment token changed. Refresh and try again.')\n }\n const weth = isWeth(snap, listing.paymentToken)\n return withApprovals([\n weth ? null : erc20Approve(snap, listing.paymentToken, listing.price),\n {\n to: m,\n data: encodeFunctionData({\n abi: marketplaceAbi,\n functionName: 'fulfillListing',\n args: [input.tokenId, input.seller, listing.paymentToken, listing.price],\n }),\n value: weth ? listing.price : 0n,\n fallbackGas: MARKETPLACE_FULFILL_FALLBACK,\n evmType: 'continuum_dao_marketplace_fulfill_listing',\n name: 'VotingEscrowMarketplace.fulfillListing',\n extra: {\n tokenId: input.tokenId.toString(),\n seller: input.seller,\n paymentToken: listing.paymentToken,\n priceWei: listing.price.toString(),\n recipient: snap.executor,\n },\n },\n ])\n }\n case 'createOffering': {\n assertNotOwn(snap, undefined, input.tokenId)\n assertPayment(snap)\n assertDeadline(snap, input.deadline)\n const weth = isWeth(snap, input.paymentToken)\n return withApprovals([\n erc20Approve(snap, input.paymentToken, input.bidWei),\n {\n to: m,\n data: encodeFunctionData({\n abi: marketplaceAbi,\n functionName: 'createOffering',\n args: [input.tokenId, input.paymentToken, input.bidWei, input.deadline],\n }),\n value: weth ? input.bidWei : 0n,\n fallbackGas: MARKETPLACE_OFFERING_FALLBACK,\n evmType: 'continuum_dao_marketplace_create_offering',\n name: 'VotingEscrowMarketplace.createOffering',\n extra: {\n tokenId: input.tokenId.toString(),\n paymentToken: input.paymentToken,\n bidWei: input.bidWei.toString(),\n deadline: input.deadline.toString(),\n },\n },\n ])\n }\n case 'rescind': {\n if (!snap.offering || snap.offering.status !== 1) throw new Error('No open offering for this KeyGen.')\n return [\n {\n to: m,\n data: encodeFunctionData({ abi: marketplaceAbi, functionName: 'rescind', args: [input.tokenId] }),\n value: 0n,\n fallbackGas: MARKETPLACE_OFFERING_FALLBACK,\n evmType: 'continuum_dao_marketplace_rescind',\n name: 'VotingEscrowMarketplace.rescind',\n extra: { tokenId: input.tokenId.toString() },\n },\n ]\n }\n case 'fulfillOffering': {\n assertNotAttached(snap, input.tokenId)\n if (!same(snap.owner, snap.executor)) throw new Error('Only the veCTM owner can accept an offering.')\n const offering = snap.offering\n if (!offering || !same(offering.creator, input.buyer)) throw new Error('No open offering for this buyer.')\n if (!same(offering.paymentToken, input.paymentToken) || offering.price !== input.priceWei) {\n throw new Error('Offering price or payment token changed. Refresh and try again.')\n }\n return withApprovals([\n nftApproveStep(snap, input.tokenId),\n {\n to: m,\n data: encodeFunctionData({\n abi: marketplaceAbi,\n functionName: 'fulfillOffering',\n args: [input.tokenId, input.buyer, offering.paymentToken, offering.price],\n }),\n value: 0n,\n fallbackGas: MARKETPLACE_FULFILL_FALLBACK,\n evmType: 'continuum_dao_marketplace_fulfill_offering',\n name: 'VotingEscrowMarketplace.fulfillOffering',\n extra: {\n tokenId: input.tokenId.toString(),\n buyer: input.buyer,\n paymentToken: offering.paymentToken,\n priceWei: offering.price.toString(),\n },\n },\n ])\n }\n case 'createAuction': {\n assertNotAttached(snap, input.tokenId)\n assertPayment(snap)\n assertDeadline(snap, input.deadline)\n if (input.reserveWei <= 0n) throw new Error('Reserve price must be greater than zero.')\n if (!same(snap.owner, snap.executor)) throw new Error('Only the veCTM owner can start an auction.')\n if (snap.executorLiveAuction) throw new Error('A live auction already exists for this token.')\n return withApprovals([\n nftApproveStep(snap, input.tokenId),\n {\n to: m,\n data: encodeFunctionData({\n abi: marketplaceAbi,\n functionName: 'createAuction',\n args: [input.tokenId, input.paymentToken, input.deadline, input.reserveWei, input.minIncrementWei],\n }),\n value: 0n,\n fallbackGas: MARKETPLACE_AUCTION_CREATE_FALLBACK,\n evmType: 'continuum_dao_marketplace_create_auction',\n name: 'VotingEscrowMarketplace.createAuction',\n extra: {\n tokenId: input.tokenId.toString(),\n paymentToken: input.paymentToken,\n reserveWei: input.reserveWei.toString(),\n minIncrementWei: input.minIncrementWei.toString(),\n deadline: input.deadline.toString(),\n },\n },\n ])\n }\n case 'cancelAuction': {\n const auction = snap.auction\n if (!auction || !same(auction.seller, snap.executor)) throw new Error('No auction for this KeyGen.')\n if (auction.status !== 1) throw new Error('Only a pending auction with no bids can be canceled.')\n return [\n {\n to: m,\n data: encodeFunctionData({ abi: marketplaceAbi, functionName: 'cancelAuction', args: [input.tokenId] }),\n value: 0n,\n fallbackGas: MARKETPLACE_AUCTION_CREATE_FALLBACK,\n evmType: 'continuum_dao_marketplace_cancel_auction',\n name: 'VotingEscrowMarketplace.cancelAuction',\n extra: { tokenId: input.tokenId.toString(), recipient: snap.executor },\n },\n ]\n }\n case 'auctionBid': {\n assertNotOwn(snap, input.seller, input.tokenId)\n const auction = snap.auction\n if (!auction || !same(auction.seller, input.seller)) throw new Error('No live auction for this seller.')\n if (auction.status !== 1 && auction.status !== 2) throw new Error('This auction is not accepting bids.')\n if (input.priceWei < auction.reservePrice) throw new Error('Bid is below the reserve price.')\n if (\n auction.highestBidder !== zeroAddress &&\n input.priceWei < auction.highestBid + auction.minimumBidIncrement\n ) {\n throw new Error('Bid is below the highest bid plus the minimum increment.')\n }\n const weth = isWeth(snap, auction.paymentToken)\n return withApprovals([\n weth ? null : erc20Approve(snap, auction.paymentToken, input.priceWei),\n {\n to: m,\n data: encodeFunctionData({\n abi: marketplaceAbi,\n functionName: 'auctionBid',\n args: [input.tokenId, input.seller, input.priceWei],\n }),\n value: weth ? input.priceWei : 0n,\n fallbackGas: MARKETPLACE_BID_FALLBACK,\n evmType: 'continuum_dao_marketplace_auction_bid',\n name: 'VotingEscrowMarketplace.auctionBid',\n extra: {\n tokenId: input.tokenId.toString(),\n seller: input.seller,\n priceWei: input.priceWei.toString(),\n paymentToken: auction.paymentToken,\n },\n },\n ])\n }\n case 'settleAuction': {\n const auction = snap.auction\n if (!auction || !same(auction.seller, input.seller)) throw new Error('Auction not found.')\n const derived =\n auction.status === 2 && snap.now >= auction.deadline\n ? 3\n : auction.status === 1 && snap.now >= auction.deadline\n ? 6\n : auction.status\n if (derived !== 3 && derived !== 6) throw new Error('This auction is not ready to settle.')\n const winner = auction.highestBidder\n return [\n {\n to: m,\n data: encodeFunctionData({\n abi: marketplaceAbi,\n functionName: 'settleAuction',\n args: [input.tokenId, input.seller],\n }),\n value: 0n,\n fallbackGas: MARKETPLACE_SETTLE_FALLBACK,\n evmType: 'continuum_dao_marketplace_settle_auction',\n name: 'VotingEscrowMarketplace.settleAuction',\n extra: {\n tokenId: input.tokenId.toString(),\n seller: input.seller,\n highestBidder: winner,\n recipient: derived === 3 ? winner : input.seller,\n },\n },\n ]\n }\n default:\n throw new Error('Unknown marketplace action.')\n }\n}\n","import { createPublicClient, defineChain, getAddress, zeroAddress, type Address, type PublicClient } from 'viem'\nimport { defiEvmTransport } from '../../../core/defiEvmClient.js'\nimport { marketplaceAbi, marketplaceReadAbi } from './marketplaceAbi.js'\nimport {\n CTM_TOKEN_ADDRESS,\n MARKETPLACE_USDC_LINEA_ADDRESS,\n MARKETPLACE_WETH_LINEA_ADDRESS,\n VOTING_ESCROW_LINEA_ADDRESS,\n VOTING_ESCROW_MARKETPLACE_LINEA_ADDRESS,\n} from './constants.js'\nimport {\n FEE_TIER_NAMES,\n type MarketplaceConfig,\n type MarketplaceFeePreview,\n type MarketplacePaymentToken,\n} from './marketplaceTypes.js'\nimport type { MarketplaceAuctionTuple, MarketplaceOrderTuple, MarketplacePlanSnapshot } from './marketplacePlan.js'\n\nexport function marketplacePublicClient(chainId: number, rpcUrl: string): PublicClient {\n const ch = defineChain({\n id: chainId,\n name: 'Linea',\n nativeCurrency: { decimals: 18, name: 'Ether', symbol: 'ETH' },\n rpcUrls: { default: { http: [rpcUrl] } },\n })\n return createPublicClient({ chain: ch, transport: defiEvmTransport(rpcUrl) })\n}\n\nconst KNOWN_PAYMENT_TOKENS: Array<{ address: Address; symbol: string; decimals: number }> = [\n { address: getAddress(CTM_TOKEN_ADDRESS), symbol: 'CTM', decimals: 18 },\n { address: MARKETPLACE_WETH_LINEA_ADDRESS, symbol: 'WETH', decimals: 18 },\n { address: MARKETPLACE_USDC_LINEA_ADDRESS, symbol: 'USDC', decimals: 6 },\n]\n\nexport function calculateMarketplaceFee(\n price: bigint,\n lockedAmount: bigint,\n limits: readonly bigint[],\n rates: readonly bigint[],\n): { tier: string; tierIndex: number; limit: bigint; rateBps: bigint; fee: bigint; net: bigint } | null {\n for (let i = 0; i < 5; i++) {\n const limit = limits[i] ?? 0n\n if (lockedAmount >= limit) {\n const rateBps = rates[i] ?? 0n\n const fee = (price * rateBps) / 10_000n\n return {\n tier: FEE_TIER_NAMES[i] ?? 'Blue',\n tierIndex: i,\n limit,\n rateBps,\n fee,\n net: price - fee,\n }\n }\n }\n return null\n}\n\nexport async function readMarketplaceConfigFromChain(args: {\n chainId: number\n rpcUrl: string\n marketplace?: Address\n}): Promise<MarketplaceConfig> {\n const marketplace = args.marketplace ?? VOTING_ESCROW_MARKETPLACE_LINEA_ADDRESS\n const client = marketplacePublicClient(args.chainId, args.rpcUrl)\n const [weth, ve, gov, np, minimumDuration, maximumDuration] = await Promise.all([\n client.readContract({ address: marketplace, abi: marketplaceAbi, functionName: 'weth' }),\n client.readContract({ address: marketplace, abi: marketplaceAbi, functionName: 've' }),\n client.readContract({ address: marketplace, abi: marketplaceAbi, functionName: 'gov' }),\n client.readContract({ address: marketplace, abi: marketplaceAbi, functionName: 'np' }),\n client.readContract({ address: marketplace, abi: marketplaceAbi, functionName: 'minimumDuration' }),\n client.readContract({ address: marketplace, abi: marketplaceAbi, functionName: 'maximumDuration' }),\n ])\n const feeLimits: bigint[] = []\n const feeRates: bigint[] = []\n for (let i = 0; i < 5; i++) {\n const [limit, rate] = await Promise.all([\n client.readContract({\n address: marketplace,\n abi: marketplaceAbi,\n functionName: 'feeLimitByTier',\n args: [i],\n }),\n client.readContract({\n address: marketplace,\n abi: marketplaceAbi,\n functionName: 'feeRateByTier',\n args: [i],\n }),\n ])\n feeLimits.push(limit)\n feeRates.push(rate)\n }\n const paymentTokens: MarketplacePaymentToken[] = []\n for (const token of KNOWN_PAYMENT_TOKENS) {\n let isValid = false\n try {\n isValid = await client.readContract({\n address: marketplace,\n abi: marketplaceAbi,\n functionName: 'isValidPaymentToken',\n args: [token.address],\n })\n } catch {\n isValid = false\n }\n if (isValid) paymentTokens.push({ ...token, address: token.address, isValid: true })\n }\n return {\n chainId: args.chainId,\n marketplace,\n ve,\n gov,\n np,\n weth,\n minimumDuration: minimumDuration.toString(),\n maximumDuration: maximumDuration.toString(),\n feeLimits: feeLimits.map((n) => n.toString()),\n feeRates: feeRates.map((n) => n.toString()),\n feeTiers: FEE_TIER_NAMES.map((name, index) => ({\n name,\n index,\n limit: feeLimits[index]!.toString(),\n rateBps: feeRates[index]!.toString(),\n })),\n paymentTokens,\n source: 'logs',\n }\n}\n\nexport async function readMarketplaceFeePreviewFromChain(args: {\n chainId: number\n rpcUrl: string\n tokenId: bigint\n price: bigint\n marketplace?: Address\n votingEscrow?: Address\n}): Promise<MarketplaceFeePreview> {\n const marketplace = args.marketplace ?? VOTING_ESCROW_MARKETPLACE_LINEA_ADDRESS\n const ve = args.votingEscrow ?? VOTING_ESCROW_LINEA_ADDRESS\n const client = marketplacePublicClient(args.chainId, args.rpcUrl)\n const locked = await client.readContract({\n address: ve,\n abi: marketplaceReadAbi,\n functionName: 'locked',\n args: [args.tokenId],\n })\n const lockedAmount = BigInt(locked[0])\n const limits: bigint[] = []\n const rates: bigint[] = []\n for (let i = 0; i < 5; i++) {\n limits.push(\n await client.readContract({\n address: marketplace,\n abi: marketplaceAbi,\n functionName: 'feeLimitByTier',\n args: [i],\n }),\n )\n rates.push(\n await client.readContract({\n address: marketplace,\n abi: marketplaceAbi,\n functionName: 'feeRateByTier',\n args: [i],\n }),\n )\n }\n const fee = calculateMarketplaceFee(args.price, lockedAmount < 0n ? 0n : lockedAmount, limits, rates)\n if (!fee) throw new Error('Locked CTM is below the minimum fee tier.')\n return {\n tokenId: args.tokenId.toString(),\n lockedAmount: (lockedAmount < 0n ? 0n : lockedAmount).toString(),\n tier: fee.tier,\n tierIndex: fee.tierIndex,\n limit: fee.limit.toString(),\n rateBps: fee.rateBps.toString(),\n price: args.price.toString(),\n fee: fee.fee.toString(),\n net: fee.net.toString(),\n source: 'logs',\n }\n}\n\nasync function readOrder(\n client: PublicClient,\n marketplace: Address,\n tokenId: bigint,\n index: bigint,\n kind: 'listing' | 'offering',\n): Promise<MarketplaceOrderTuple | null> {\n if (index === 0n) return null\n const row =\n kind === 'listing'\n ? await client.readContract({\n address: marketplace,\n abi: marketplaceAbi,\n functionName: 'listingsByToken',\n args: [tokenId, index],\n })\n : await client.readContract({\n address: marketplace,\n abi: marketplaceAbi,\n functionName: 'offeringsByToken',\n args: [tokenId, index],\n })\n return {\n price: row[0],\n deadline: row[1],\n snapshotAmount: row[2],\n snapshotEnd: row[3],\n creator: row[4],\n paymentToken: row[5],\n status: Number(row[6]),\n }\n}\n\nasync function readAuction(\n client: PublicClient,\n marketplace: Address,\n tokenId: bigint,\n index: bigint,\n): Promise<MarketplaceAuctionTuple | null> {\n if (index === 0n) return null\n const row = await client.readContract({\n address: marketplace,\n abi: marketplaceAbi,\n functionName: 'auctionsByToken',\n args: [tokenId, index],\n })\n return {\n reservePrice: row[0],\n minimumBidIncrement: row[1],\n deadline: row[2],\n seller: row[3],\n paymentToken: row[4],\n highestBidder: row[5],\n highestBid: row[6],\n status: Number(row[7]),\n }\n}\n\nexport async function loadMarketplacePlanSnapshot(args: {\n chainId: number\n rpcUrl: string\n executor: Address\n tokenId: bigint\n paymentToken?: Address\n seller?: Address\n buyer?: Address\n spendAmount?: bigint\n}): Promise<MarketplacePlanSnapshot> {\n const marketplace = VOTING_ESCROW_MARKETPLACE_LINEA_ADDRESS\n const client = marketplacePublicClient(args.chainId, args.rpcUrl)\n const [weth, ve, np, minimumDuration, maximumDuration, block] = await Promise.all([\n client.readContract({ address: marketplace, abi: marketplaceAbi, functionName: 'weth' }),\n client.readContract({ address: marketplace, abi: marketplaceAbi, functionName: 've' }),\n client.readContract({ address: marketplace, abi: marketplaceAbi, functionName: 'np' }),\n client.readContract({ address: marketplace, abi: marketplaceAbi, functionName: 'minimumDuration' }),\n client.readContract({ address: marketplace, abi: marketplaceAbi, functionName: 'maximumDuration' }),\n client.getBlock({ blockTag: 'latest' }),\n ])\n let owner: Address = zeroAddress\n try {\n owner = await client.readContract({\n address: ve,\n abi: marketplaceReadAbi,\n functionName: 'ownerOf',\n args: [args.tokenId],\n })\n } catch {\n owner = zeroAddress\n }\n const [approved, approvedForAll, attachedKeyGen, listingIndex, offeringIndex, auctionIndex] = await Promise.all([\n client\n .readContract({ address: ve, abi: marketplaceReadAbi, functionName: 'getApproved', args: [args.tokenId] })\n .catch(() => zeroAddress),\n owner === zeroAddress\n ? Promise.resolve(false)\n : client\n .readContract({\n address: ve,\n abi: marketplaceReadAbi,\n functionName: 'isApprovedForAll',\n args: [owner, marketplace],\n })\n .catch(() => false),\n client\n .readContract({ address: np, abi: marketplaceReadAbi, functionName: 'attachedKeyGen', args: [args.tokenId] })\n .catch(() => zeroAddress),\n client.readContract({\n address: marketplace,\n abi: marketplaceAbi,\n functionName: 'listingIndexByTokenSeller',\n args: [args.tokenId, args.seller ?? args.executor],\n }),\n client.readContract({\n address: marketplace,\n abi: marketplaceAbi,\n functionName: 'offeringIndexByTokenBuyer',\n args: [args.tokenId, args.buyer ?? args.executor],\n }),\n client.readContract({\n address: marketplace,\n abi: marketplaceAbi,\n functionName: 'auctionIndexByTokenSeller',\n args: [args.tokenId, args.seller ?? args.executor],\n }),\n ])\n const [listing, offering, auction, executorListingIndex, executorAuctionIndex] = await Promise.all([\n readOrder(client, marketplace, args.tokenId, listingIndex, 'listing'),\n readOrder(client, marketplace, args.tokenId, offeringIndex, 'offering'),\n readAuction(client, marketplace, args.tokenId, auctionIndex),\n args.seller && args.seller !== args.executor\n ? client.readContract({\n address: marketplace,\n abi: marketplaceAbi,\n functionName: 'listingIndexByTokenSeller',\n args: [args.tokenId, args.executor],\n })\n : Promise.resolve(0n),\n args.seller && args.seller !== args.executor\n ? client.readContract({\n address: marketplace,\n abi: marketplaceAbi,\n functionName: 'auctionIndexByTokenSeller',\n args: [args.tokenId, args.executor],\n })\n : Promise.resolve(auctionIndex),\n ])\n const executorAuction =\n executorAuctionIndex === auctionIndex\n ? auction\n : await readAuction(client, marketplace, args.tokenId, executorAuctionIndex)\n const liveAuction =\n executorAuction != null &&\n (executorAuction.status === 1 || executorAuction.status === 2 || executorAuction.status === 3) &&\n executorAuction.seller.toLowerCase() === args.executor.toLowerCase()\n let executorOpenListing = false\n if (executorListingIndex > 0n) {\n const row = await readOrder(client, marketplace, args.tokenId, executorListingIndex, 'listing')\n executorOpenListing = row?.status === 1\n } else if (!args.seller || args.seller === args.executor) {\n executorOpenListing = listing?.status === 1 && listing.creator.toLowerCase() === args.executor.toLowerCase()\n }\n const paymentToken = args.paymentToken ?? listing?.paymentToken ?? offering?.paymentToken ?? auction?.paymentToken\n let paymentTokenValid = true\n if (paymentToken) {\n paymentTokenValid = await client.readContract({\n address: marketplace,\n abi: marketplaceAbi,\n functionName: 'isValidPaymentToken',\n args: [paymentToken],\n })\n }\n const spendToken = paymentToken ?? zeroAddress\n const spendFrom = args.buyer && args.buyer !== args.executor ? args.buyer : args.executor\n let allowance = 0n\n if (spendToken !== zeroAddress && spendToken.toLowerCase() !== weth.toLowerCase()) {\n allowance = await client\n .readContract({\n address: spendToken,\n abi: marketplaceReadAbi,\n functionName: 'allowance',\n args: [spendFrom, marketplace],\n })\n .catch(() => 0n)\n } else if (spendToken.toLowerCase() === weth.toLowerCase()) {\n allowance = await client\n .readContract({\n address: spendToken,\n abi: marketplaceReadAbi,\n functionName: 'allowance',\n args: [args.executor, marketplace],\n })\n .catch(() => 0n)\n }\n return {\n marketplace,\n votingEscrow: ve,\n weth,\n now: block.timestamp,\n minimumDuration,\n maximumDuration,\n executor: args.executor,\n owner,\n nftApproved: approvedForAll || (approved !== zeroAddress && approved.toLowerCase() === marketplace.toLowerCase()),\n allowance,\n attachedKeyGen,\n paymentTokenValid,\n executorOpenListing,\n executorLiveAuction: liveAuction,\n listing: listing && listing.status === 1 ? listing : listing,\n offering: offering && offering.status === 1 ? offering : offering,\n auction,\n }\n}\n","import { decodeEventLog, type Address, type Log } from 'viem'\nimport { marketplaceAbi } from './marketplaceAbi.js'\nimport { marketplacePublicClient } from './marketplaceChain.js'\nimport {\n VOTING_ESCROW_MARKETPLACE_LINEA_ADDRESS,\n VOTING_ESCROW_MARKETPLACE_START_BLOCK,\n} from './constants.js'\nimport { applyDerivedStatuses, foldMarketplaceEvents, type MarketplaceFoldEvent } from './marketplaceFold.js'\nimport type { MarketplaceIndexCache } from './marketplaceTypes.js'\n\nconst memoryCache = new Map<number, MarketplaceIndexCache>()\n\nexport function emptyMarketplaceIndexCache(): MarketplaceIndexCache {\n return { lastScannedBlock: '0', listings: [], offerings: [], auctions: [] }\n}\n\nexport function getMarketplaceIndexMemoryCache(chainId: number): MarketplaceIndexCache | null {\n return memoryCache.get(chainId) ?? null\n}\n\nexport function setMarketplaceIndexMemoryCache(chainId: number, cache: MarketplaceIndexCache): void {\n memoryCache.set(chainId, cache)\n}\n\nfunction arg(args: Record<string, unknown>, key: string, index: number): string {\n const value = args[key] ?? args[index]\n if (typeof value === 'bigint') return value.toString()\n return String(value ?? '')\n}\n\nfunction toFoldEvent(log: Log, timestamp?: string): MarketplaceFoldEvent | null {\n try {\n const decoded = decodeEventLog({\n abi: marketplaceAbi,\n data: log.data,\n topics: log.topics,\n })\n const args = decoded.args as Record<string, unknown>\n const ref = {\n tx: log.transactionHash ?? '',\n block: log.blockNumber != null ? log.blockNumber.toString() : '0',\n logIndex: log.logIndex ?? 0,\n timestamp,\n }\n switch (decoded.eventName) {\n case 'ListingCreated':\n return {\n name: 'ListingCreated',\n tokenId: arg(args, '_tokenId', 0),\n actor: arg(args, '_listedBy', 1),\n paymentToken: arg(args, '_paymentToken', 2),\n amount: arg(args, '_ask', 3),\n deadline: arg(args, '_deadline', 4),\n ...ref,\n }\n case 'OfferingCreated':\n return {\n name: 'OfferingCreated',\n tokenId: arg(args, '_tokenId', 0),\n actor: arg(args, '_offeredBy', 1),\n paymentToken: arg(args, '_paymentToken', 2),\n amount: arg(args, '_bid', 3),\n deadline: arg(args, '_deadline', 4),\n ...ref,\n }\n case 'ListingFulfilled':\n return {\n name: 'ListingFulfilled',\n tokenId: arg(args, '_tokenId', 0),\n buyer: arg(args, '_buyer', 1),\n seller: arg(args, '_seller', 2),\n price: arg(args, '_ask', 3),\n net: arg(args, '_netPrice', 4),\n fee: arg(args, '_fee', 5),\n ...ref,\n }\n case 'OfferingFulfilled':\n return {\n name: 'OfferingFulfilled',\n tokenId: arg(args, '_tokenId', 0),\n buyer: arg(args, '_buyer', 1),\n seller: arg(args, '_seller', 2),\n price: arg(args, '_bid', 3),\n net: arg(args, '_netPrice', 4),\n fee: arg(args, '_fee', 5),\n ...ref,\n }\n case 'Delisted':\n return { name: 'Delisted', tokenId: arg(args, '_tokenId', 0), actor: arg(args, '_seller', 1), ...ref }\n case 'Rescinded':\n return { name: 'Rescinded', tokenId: arg(args, '_tokenId', 0), actor: arg(args, '_buyer', 1), ...ref }\n case 'AuctionCreated':\n return {\n name: 'AuctionCreated',\n tokenId: arg(args, '_tokenId', 0),\n actor: arg(args, '_createdBy', 1),\n paymentToken: arg(args, '_paymentToken', 2),\n amount: arg(args, '_reservePrice', 3),\n minIncrement: arg(args, '_minimumBidIncrement', 4),\n deadline: arg(args, '_deadline', 5),\n ...ref,\n }\n case 'AuctionCanceled':\n return { name: 'AuctionCanceled', tokenId: arg(args, '_tokenId', 0), actor: arg(args, '_seller', 1), ...ref }\n case 'AuctionBid':\n return {\n name: 'AuctionBid',\n tokenId: arg(args, '_tokenId', 0),\n seller: arg(args, '_seller', 1),\n buyer: arg(args, '_buyer', 2),\n price: arg(args, '_price', 3),\n ...ref,\n }\n case 'AuctionSettled':\n return {\n name: 'AuctionSettled',\n tokenId: arg(args, '_tokenId', 0),\n seller: arg(args, '_seller', 1),\n finalStatus: Number(args._finalStatus ?? args[2] ?? 0),\n ...ref,\n }\n case 'AuctionSuccessful':\n return {\n name: 'AuctionSuccessful',\n tokenId: arg(args, '_tokenId', 0),\n seller: arg(args, '_seller', 1),\n buyer: arg(args, '_buyer', 2),\n price: arg(args, '_price', 3),\n fee: arg(args, '_fee', 4),\n net: arg(args, '_net', 5),\n ...ref,\n }\n default:\n return null\n }\n } catch {\n return null\n }\n}\n\nasync function getLogsChunked(args: {\n client: ReturnType<typeof marketplacePublicClient>\n address: Address\n fromBlock: bigint\n toBlock: bigint\n onProgress?: (scanned: bigint, target: bigint) => void\n}): Promise<Log[]> {\n const logs: Log[] = []\n let chunk = 5_000n\n let start = args.fromBlock\n while (start <= args.toBlock) {\n const end = start + chunk - 1n > args.toBlock ? args.toBlock : start + chunk - 1n\n try {\n const part = await args.client.getLogs({\n address: args.address,\n fromBlock: start,\n toBlock: end,\n })\n logs.push(...part)\n args.onProgress?.(end, args.toBlock)\n start = end + 1n\n } catch (err) {\n if (chunk <= 200n) throw err\n chunk = chunk / 2n < 200n ? 200n : chunk / 2n\n }\n }\n return logs\n}\n\nexport async function scanMarketplaceLogs(args: {\n chainId: number\n rpcUrl: string\n cache?: MarketplaceIndexCache | null\n onProgress?: (scanned: bigint, target: bigint) => void\n}): Promise<MarketplaceIndexCache> {\n const client = marketplacePublicClient(args.chainId, args.rpcUrl)\n const head = await client.getBlockNumber()\n const prior = args.cache ?? getMarketplaceIndexMemoryCache(args.chainId) ?? emptyMarketplaceIndexCache()\n const scanned = BigInt(prior.lastScannedBlock || '0')\n const fromBlock =\n scanned > 0n ? scanned + 1n : VOTING_ESCROW_MARKETPLACE_START_BLOCK\n if (fromBlock > head) {\n const now = Number((await client.getBlock({ blockTag: 'latest' })).timestamp)\n const derived = applyDerivedStatuses(\n { listings: prior.listings, offerings: prior.offerings, auctions: prior.auctions },\n now,\n )\n const cache = { lastScannedBlock: head.toString(), ...derived }\n setMarketplaceIndexMemoryCache(args.chainId, cache)\n return cache\n }\n const logs = await getLogsChunked({\n client,\n address: VOTING_ESCROW_MARKETPLACE_LINEA_ADDRESS,\n fromBlock,\n toBlock: head,\n onProgress: args.onProgress,\n })\n const events = logs\n .map((log) => toFoldEvent(log))\n .filter((ev): ev is MarketplaceFoldEvent => ev != null)\n const folded = foldMarketplaceEvents(events, {\n listings: prior.listings,\n offerings: prior.offerings,\n auctions: prior.auctions,\n })\n const now = Number((await client.getBlock({ blockTag: 'latest' })).timestamp)\n const derived = applyDerivedStatuses(folded, now)\n const cache: MarketplaceIndexCache = { lastScannedBlock: head.toString(), ...derived }\n setMarketplaceIndexMemoryCache(args.chainId, cache)\n return cache\n}\n","import {\n CONTINUUM_DAO_LINEA_CHAIN_ID,\n CONTINUUM_DAO_MARKETPLACE_API,\n} from './constants.js'\nimport { readMarketplaceConfigFromChain, readMarketplaceFeePreviewFromChain } from './marketplaceChain.js'\nimport { isLiveAuctionStatus, isOpenOrder } from './marketplaceFold.js'\nimport { scanMarketplaceLogs } from './marketplaceIndex.js'\nimport type {\n MarketplaceActivity,\n MarketplaceAuction,\n MarketplaceCatalogSource,\n MarketplaceConfig,\n MarketplaceFeePreview,\n MarketplaceIndexCache,\n MarketplaceListResult,\n MarketplaceOrder,\n MarketplaceTokenPayload,\n} from './marketplaceTypes.js'\n\nexport type MarketplaceQuery = {\n apiBase?: string\n rpcUrl?: string\n chainId?: number\n cache?: MarketplaceIndexCache | null\n includeInactive?: boolean\n paymentToken?: string\n tokenId?: string\n creator?: string\n seller?: string\n viewer?: string\n limit?: number\n cursor?: string\n onProgress?: (scanned: bigint, target: bigint) => void\n}\n\nfunction apiBase(args: { apiBase?: string }): string {\n return (args.apiBase ?? CONTINUUM_DAO_MARKETPLACE_API).replace(/\\/$/, '')\n}\n\nfunction isOffline(status?: number): boolean {\n if (status == null || status === 0 || status >= 500) return true\n return false\n}\n\nasync function getJson(url: string): Promise<{ ok: true; body: unknown } | { ok: false; status: number; error: Error }> {\n try {\n const res = await fetch(url)\n if (!res.ok) {\n const text = await res.text().catch(() => '')\n return { ok: false, status: res.status, error: new Error(`${url}: ${res.status} ${text}`.trim()) }\n }\n return { ok: true, body: await res.json() }\n } catch (err) {\n return { ok: false, status: 0, error: err instanceof Error ? err : new Error(String(err)) }\n }\n}\n\nfunction qs(params: Record<string, string | number | boolean | undefined>): string {\n const search = new URLSearchParams()\n for (const [key, value] of Object.entries(params)) {\n if (value === undefined || value === '') continue\n search.set(key, String(value))\n }\n const encoded = search.toString()\n return encoded ? `?${encoded}` : ''\n}\n\nasync function logsBook(args: MarketplaceQuery) {\n if (!args.rpcUrl?.trim()) throw new Error('Linea RPC is required to index the marketplace while the API is offline.')\n return scanMarketplaceLogs({\n chainId: args.chainId ?? CONTINUUM_DAO_LINEA_CHAIN_ID,\n rpcUrl: args.rpcUrl.trim(),\n cache: args.cache,\n onProgress: args.onProgress,\n })\n}\n\nfunction matchOrder(row: MarketplaceOrder, args: MarketplaceQuery, includeInactive: boolean): boolean {\n if (!includeInactive && !isOpenOrder(row)) return false\n if (args.tokenId && row.tokenId !== args.tokenId) return false\n if (args.paymentToken && row.paymentToken.toLowerCase() !== args.paymentToken.toLowerCase()) return false\n if (args.creator && row.creator.toLowerCase() !== args.creator.toLowerCase()) return false\n if (args.seller && (row.seller ?? row.creator).toLowerCase() !== args.seller.toLowerCase()) return false\n return true\n}\n\nfunction matchAuction(row: MarketplaceAuction, args: MarketplaceQuery, includeInactive: boolean): boolean {\n if (!includeInactive && !isLiveAuctionStatus(row.derivedStatus)) return false\n if (args.tokenId && row.tokenId !== args.tokenId) return false\n if (args.paymentToken && row.paymentToken.toLowerCase() !== args.paymentToken.toLowerCase()) return false\n if (args.seller && row.seller.toLowerCase() !== args.seller.toLowerCase()) return false\n return true\n}\n\nfunction listFrom<T>(items: T[], source: MarketplaceCatalogSource): MarketplaceListResult<T> {\n return { items, nextCursor: null, source }\n}\n\nexport async function fetchContinuumDaoMarketplaceConfig(\n args: MarketplaceQuery = {},\n): Promise<MarketplaceConfig> {\n const url = `${apiBase(args)}/marketplace/config`\n const res = await getJson(url)\n if (res.ok && res.body && typeof res.body === 'object') {\n return { ...(res.body as MarketplaceConfig), source: 'api' }\n }\n if (!res.ok && !isOffline(res.status)) throw res.error\n return readMarketplaceConfigFromChain({\n chainId: args.chainId ?? CONTINUUM_DAO_LINEA_CHAIN_ID,\n rpcUrl: args.rpcUrl ?? '',\n })\n}\n\nexport async function fetchContinuumDaoMarketplaceListings(\n args: MarketplaceQuery = {},\n): Promise<MarketplaceListResult<MarketplaceOrder>> {\n const includeInactive = Boolean(args.includeInactive)\n const url = `${apiBase(args)}/marketplace/listings${qs({\n includeInactive,\n paymentToken: args.paymentToken,\n tokenId: args.tokenId,\n creator: args.creator,\n limit: args.limit ?? 100,\n cursor: args.cursor,\n viewer: args.viewer,\n })}`\n const res = await getJson(url)\n if (res.ok) {\n const body = res.body as { items?: MarketplaceOrder[]; nextCursor?: string | null }\n return { items: body.items ?? [], nextCursor: body.nextCursor ?? null, source: 'api' }\n }\n if (args.cursor || !isOffline(res.status)) throw res.error\n const book = await logsBook(args)\n return listFrom(book.listings.filter((row) => matchOrder(row, args, includeInactive)), 'logs')\n}\n\nexport async function fetchContinuumDaoMarketplaceOfferings(\n args: MarketplaceQuery = {},\n): Promise<MarketplaceListResult<MarketplaceOrder>> {\n const includeInactive = Boolean(args.includeInactive)\n const url = `${apiBase(args)}/marketplace/offerings${qs({\n includeInactive,\n paymentToken: args.paymentToken,\n tokenId: args.tokenId,\n creator: args.creator,\n limit: args.limit ?? 100,\n cursor: args.cursor,\n viewer: args.viewer,\n })}`\n const res = await getJson(url)\n if (res.ok) {\n const body = res.body as { items?: MarketplaceOrder[]; nextCursor?: string | null }\n return { items: body.items ?? [], nextCursor: body.nextCursor ?? null, source: 'api' }\n }\n if (args.cursor || !isOffline(res.status)) throw res.error\n const book = await logsBook(args)\n return listFrom(book.offerings.filter((row) => matchOrder(row, args, includeInactive)), 'logs')\n}\n\nexport async function fetchContinuumDaoMarketplaceAuctions(\n args: MarketplaceQuery = {},\n): Promise<MarketplaceListResult<MarketplaceAuction>> {\n const includeInactive = Boolean(args.includeInactive)\n const url = `${apiBase(args)}/marketplace/auctions${qs({\n includeInactive,\n paymentToken: args.paymentToken,\n tokenId: args.tokenId,\n seller: args.seller,\n limit: args.limit ?? 100,\n cursor: args.cursor,\n viewer: args.viewer,\n })}`\n const res = await getJson(url)\n if (res.ok) {\n const body = res.body as { items?: MarketplaceAuction[]; nextCursor?: string | null }\n return {\n items: (body.items ?? []).map((row) => ({ ...row, bids: row.bids ?? [] })),\n nextCursor: body.nextCursor ?? null,\n source: 'api',\n }\n }\n if (args.cursor || !isOffline(res.status)) throw res.error\n const book = await logsBook(args)\n return listFrom(book.auctions.filter((row) => matchAuction(row, args, includeInactive)), 'logs')\n}\n\nexport async function fetchContinuumDaoMarketplaceToken(\n args: MarketplaceQuery & { tokenId: string },\n): Promise<MarketplaceTokenPayload> {\n const url = `${apiBase(args)}/marketplace/tokens/${encodeURIComponent(args.tokenId)}${qs({ viewer: args.viewer })}`\n const res = await getJson(url)\n if (res.ok && res.body && typeof res.body === 'object') {\n return { ...(res.body as MarketplaceTokenPayload), source: 'api' }\n }\n if (!res.ok && !isOffline(res.status)) throw res.error\n const book = await logsBook(args)\n const listings = book.listings.filter((row) => row.tokenId === args.tokenId)\n const offerings = book.offerings.filter((row) => row.tokenId === args.tokenId)\n const auctions = book.auctions.filter((row) => row.tokenId === args.tokenId)\n return {\n token: { tokenId: args.tokenId },\n listing: listings.find((row) => isOpenOrder(row)) ?? null,\n offerings: offerings.filter((row) => isOpenOrder(row)),\n auction: auctions.find((row) => isLiveAuctionStatus(row.derivedStatus)) ?? null,\n history: {\n listings: listings.filter((row) => !isOpenOrder(row)),\n offerings: offerings.filter((row) => !isOpenOrder(row)),\n auctions: auctions.filter((row) => !isLiveAuctionStatus(row.derivedStatus)),\n },\n source: 'logs',\n }\n}\n\nexport async function fetchContinuumDaoMarketplaceFeePreview(args: {\n apiBase?: string\n rpcUrl?: string\n chainId?: number\n tokenId: string\n price: string\n}): Promise<MarketplaceFeePreview> {\n const url = `${apiBase(args)}/marketplace/fee-preview${qs({ tokenId: args.tokenId, price: args.price })}`\n const res = await getJson(url)\n if (res.ok && res.body && typeof res.body === 'object') {\n return { ...(res.body as MarketplaceFeePreview), source: 'api' }\n }\n if (!res.ok && !isOffline(res.status)) throw res.error\n return readMarketplaceFeePreviewFromChain({\n chainId: args.chainId ?? CONTINUUM_DAO_LINEA_CHAIN_ID,\n rpcUrl: args.rpcUrl ?? '',\n tokenId: BigInt(args.tokenId),\n price: BigInt(args.price),\n })\n}\n\nexport async function fetchContinuumDaoMarketplaceActivity(args: {\n apiBase?: string\n rpcUrl?: string\n chainId?: number\n cache?: MarketplaceIndexCache | null\n address: string\n limit?: number\n onProgress?: (scanned: bigint, target: bigint) => void\n}): Promise<MarketplaceActivity> {\n const url = `${apiBase(args)}/marketplace/users/${encodeURIComponent(args.address)}/activity${qs({ limit: args.limit ?? 50 })}`\n const res = await getJson(url)\n if (res.ok && res.body && typeof res.body === 'object') {\n const body = res.body as { orders?: MarketplaceOrder[]; auctions?: MarketplaceAuction[] }\n return {\n address: args.address,\n orders: body.orders ?? [],\n auctions: (body.auctions ?? []).map((row) => ({ ...row, bids: row.bids ?? [] })),\n source: 'api',\n }\n }\n if (!res.ok && !isOffline(res.status)) throw res.error\n const book = await logsBook(args)\n const address = args.address.toLowerCase()\n const orders = [...book.listings, ...book.offerings].filter((row) => {\n return (\n row.creator.toLowerCase() === address ||\n (row.counterparty ?? '').toLowerCase() === address ||\n (row.seller ?? '').toLowerCase() === address ||\n (row.buyer ?? '').toLowerCase() === address\n )\n })\n const auctions = book.auctions.filter((row) => {\n return (\n row.seller.toLowerCase() === address ||\n (row.buyer ?? '').toLowerCase() === address ||\n (row.highestBidder ?? '').toLowerCase() === address ||\n row.bids.some((bid) => bid.bidder.toLowerCase() === address)\n )\n })\n return { address: args.address, orders, auctions, source: 'logs' }\n}\n","import { formatUnits, getAddress, parseAbiItem, parseUnits } from 'viem'\nimport {\n CONTINUUM_DAO_LINEA_CHAIN_ID,\n CTM_TOKEN_ADDRESS,\n MARKETPLACE_USDC_LINEA_ADDRESS,\n MARKETPLACE_WETH_LINEA_ADDRESS,\n VOTING_ESCROW_LINEA_ADDRESS,\n} from './constants.js'\nimport { marketplacePublicClient } from './marketplaceChain.js'\nimport {\n fetchContinuumDaoMarketplaceAuctions,\n fetchContinuumDaoMarketplaceListings,\n type MarketplaceQuery,\n} from './marketplaceCatalog.js'\nimport type { MarketplaceAuction, MarketplaceCatalogSource, MarketplaceOrder } from './marketplaceTypes.js'\n\nconst LOCKED_ABI = [parseAbiItem('function locked(uint256 tokenId) view returns (int128 amount, uint256 end)')] as const\nconst MONTH_SECONDS = 30 * 24 * 60 * 60\nconst PAGE_SIZE = 100\nconst MAX_PAGES = 20\nconst DEFAULT_LIMIT = 10\nconst MAX_LIMIT = 25\n\nexport type MarketplaceSearchSort = 'pricePerLockedCtm' | 'price' | 'locked' | 'unlock' | 'deadline'\nexport type MarketplaceSearchKind = 'listing' | 'auction' | 'both'\n\nexport type MarketplaceSearchQuery = MarketplaceQuery & {\n kind?: MarketplaceSearchKind\n /** Human CTM, not wei. */\n minLockedCtm?: string\n maxLockedCtm?: string\n /** ISO date or unix seconds. */\n unlockBefore?: string\n unlockAfter?: string\n /** Unlock is still in the future and within this many 30-day months. */\n maxUnlockMonths?: number\n sort?: MarketplaceSearchSort\n sortDirection?: 'asc' | 'desc'\n executor?: string\n excludeOwned?: boolean\n}\n\nexport type MarketplaceSearchHit = {\n kind: 'listing' | 'auction'\n tokenId: string\n onchainIndex: string\n seller: string\n paymentToken: string\n paymentSymbol: string\n price: string\n priceHuman: string\n priceBasis: 'ask' | 'highestBid' | 'reserve'\n lockedCtm: string\n lockedCtmHuman: string\n unlockAt: string\n monthsToUnlock: string\n pricePerLockedCtm: string\n deadlineAt: string\n attached: boolean\n fillable: boolean\n}\n\nexport type MarketplaceSearchResult = {\n sort: MarketplaceSearchSort\n sortDirection: 'asc' | 'desc'\n paymentToken: string | null\n scanned: number\n truncated: boolean\n items: MarketplaceSearchHit[]\n source: MarketplaceCatalogSource\n}\n\nexport type MarketplaceSearchCandidate = {\n kind: 'listing' | 'auction'\n tokenId: string\n onchainIndex: string\n seller: string\n paymentToken: string\n price: bigint\n priceBasis: MarketplaceSearchHit['priceBasis']\n locked: bigint\n unlockUnix: number\n deadlineUnix: number\n attached: boolean\n fillable: boolean\n protocolStatus: string\n storedStatus: string\n keygen?: string\n}\n\nconst DEFAULT_DIRECTION: Record<MarketplaceSearchSort, 'asc' | 'desc'> = {\n pricePerLockedCtm: 'asc',\n price: 'asc',\n locked: 'desc',\n unlock: 'asc',\n deadline: 'asc',\n}\n\nfunction same(a?: string | null, b?: string | null): boolean {\n if (!a || !b) return false\n try {\n return getAddress(a) === getAddress(b)\n } catch {\n return a.toLowerCase() === b.toLowerCase()\n }\n}\n\nfunction attachedKey(keygen?: string, protocolStatus?: string): boolean {\n if (protocolStatus === 'KeyGenAttached') return true\n const value = (keygen ?? '').trim().toLowerCase()\n return Boolean(value && value !== '0' && !/^0x0+$/.test(value))\n}\n\nfunction asBig(value?: string | null): bigint {\n try {\n return BigInt(value || '0')\n } catch {\n return 0n\n }\n}\n\nfunction parseCtm(raw?: string): bigint | null {\n const trimmed = raw?.trim()\n if (!trimmed) return null\n return parseUnits(trimmed, 18)\n}\n\nfunction parseTime(raw?: string): number | null {\n const trimmed = raw?.trim()\n if (!trimmed) return null\n if (/^\\d+$/.test(trimmed)) {\n const n = Number(trimmed)\n if (!Number.isFinite(n)) throw new Error('Unlock bound must be an ISO date or unix seconds.')\n return n > 1e12 ? Math.floor(n / 1000) : n\n }\n const ms = Date.parse(trimmed)\n if (Number.isNaN(ms)) throw new Error('Unlock bound must be an ISO date or unix seconds.')\n return Math.floor(ms / 1000)\n}\n\nfunction paymentMeta(address: string): { symbol: string; decimals: number } {\n const lower = address.toLowerCase()\n if (lower === MARKETPLACE_USDC_LINEA_ADDRESS.toLowerCase()) return { symbol: 'USDC', decimals: 6 }\n if (lower === MARKETPLACE_WETH_LINEA_ADDRESS.toLowerCase()) return { symbol: 'WETH', decimals: 18 }\n if (lower === CTM_TOKEN_ADDRESS.toLowerCase()) return { symbol: 'CTM', decimals: 18 }\n return { symbol: 'token', decimals: 18 }\n}\n\nfunction trimDecimal(value: string): string {\n return value.replace(/(\\.\\d*?[1-9])0+$/, '$1').replace(/\\.0+$/, '')\n}\n\nfunction humanAmount(wei: bigint, decimals: number): string {\n return trimDecimal(formatUnits(wei, decimals))\n}\n\nfunction positive(value?: string | null): string {\n const trimmed = (value ?? '').trim()\n return trimmed && trimmed !== '0' ? trimmed : ''\n}\n\nfunction unlockUnixFrom(row: { unlockTimeAt?: string; unlockTime?: string; snapshotEnd?: string }): number {\n const iso = positive(row.unlockTimeAt)\n if (iso) {\n const ms = Date.parse(iso)\n if (!Number.isNaN(ms)) return Math.floor(ms / 1000)\n }\n const unix = positive(row.unlockTime) || positive(row.snapshotEnd)\n return unix ? Number(unix) : 0\n}\n\nfunction lockedFrom(row: { lockedCTM?: string; currentLockedAmount?: string; snapshotAmount?: string }): bigint {\n return asBig(positive(row.lockedCTM) || positive(row.currentLockedAmount) || positive(row.snapshotAmount))\n}\n\nexport function listingCandidate(row: MarketplaceOrder): MarketplaceSearchCandidate {\n const attached = attachedKey(row.keygen, row.protocolStatus)\n const open = row.protocolStatus === 'Open' || row.storedStatus === 'Open'\n return {\n kind: 'listing',\n tokenId: row.tokenId,\n onchainIndex: row.onchainIndex,\n seller: row.seller ?? row.creator,\n paymentToken: row.paymentToken,\n price: asBig(row.price),\n priceBasis: 'ask',\n locked: lockedFrom(row),\n unlockUnix: unlockUnixFrom(row),\n deadlineUnix: Number(row.deadlineUnix || '0') || 0,\n attached,\n fillable: open && !attached,\n protocolStatus: row.protocolStatus,\n storedStatus: row.storedStatus,\n keygen: row.keygen,\n }\n}\n\nexport function auctionCandidate(row: MarketplaceAuction): MarketplaceSearchCandidate {\n const attached = attachedKey(row.keygen, row.storedStatus)\n const bid = asBig(row.highestBid)\n const reserve = asBig(row.reservePrice)\n const live = row.derivedStatus === 'Pending' || row.derivedStatus === 'Active'\n return {\n kind: 'auction',\n tokenId: row.tokenId,\n onchainIndex: row.onchainIndex,\n seller: row.seller,\n paymentToken: row.paymentToken,\n price: bid > 0n ? bid : reserve,\n priceBasis: bid > 0n ? 'highestBid' : 'reserve',\n locked: lockedFrom(row),\n unlockUnix: unlockUnixFrom(row),\n deadlineUnix: Number(row.deadlineUnix || '0') || 0,\n attached,\n fillable: live && !attached,\n protocolStatus: row.derivedStatus,\n storedStatus: row.storedStatus,\n keygen: row.keygen,\n }\n}\n\nfunction applyLock(row: MarketplaceSearchCandidate, lock?: { amount: bigint; end: number }): MarketplaceSearchCandidate {\n if (row.locked > 0n && row.unlockUnix > 0) return row\n if (!lock) return row\n return {\n ...row,\n locked: row.locked > 0n ? row.locked : lock.amount,\n unlockUnix: row.unlockUnix > 0 ? row.unlockUnix : lock.end,\n }\n}\n\nexport function rankMarketplaceSearchHits(\n rows: MarketplaceSearchCandidate[],\n query: MarketplaceSearchQuery,\n nowUnix = Math.floor(Date.now() / 1000),\n): MarketplaceSearchHit[] {\n const sort = query.sort ?? 'pricePerLockedCtm'\n const direction = query.sortDirection ?? DEFAULT_DIRECTION[sort]\n const minLocked = parseCtm(query.minLockedCtm)\n const maxLocked = parseCtm(query.maxLockedCtm)\n const unlockAfter = parseTime(query.unlockAfter)\n const unlockBefore = parseTime(query.unlockBefore)\n const monthCap =\n query.maxUnlockMonths != null && Number.isFinite(query.maxUnlockMonths)\n ? nowUnix + Math.floor(query.maxUnlockMonths * MONTH_SECONDS)\n : null\n const executor = query.executor?.trim()\n const excludeOwned = query.excludeOwned !== false && Boolean(executor)\n\n let matched = rows.filter((row) => {\n if (query.paymentToken && !same(row.paymentToken, query.paymentToken)) return false\n if (excludeOwned && same(row.seller, executor)) return false\n if (minLocked != null && row.locked < minLocked) return false\n if (maxLocked != null && row.locked > maxLocked) return false\n if (unlockAfter != null && row.unlockUnix < unlockAfter) return false\n if (unlockBefore != null && (row.unlockUnix <= 0 || row.unlockUnix > unlockBefore)) return false\n if (monthCap != null && (row.unlockUnix <= nowUnix || row.unlockUnix > monthCap)) return false\n return true\n })\n\n const priceSort = sort === 'price' || sort === 'pricePerLockedCtm'\n if (priceSort && !query.paymentToken) {\n const tokens = new Set(matched.map((row) => row.paymentToken.toLowerCase()))\n if (tokens.size > 1) {\n const symbols = [...tokens].map((token) => paymentMeta(token).symbol).join(', ')\n throw new Error(`Pass paymentToken to rank by price. These rows use ${symbols}.`)\n }\n }\n\n const asc = direction === 'asc'\n const key = (row: MarketplaceSearchCandidate): bigint => {\n if (sort === 'locked') return row.locked\n if (sort === 'unlock') return BigInt(row.unlockUnix || 0)\n if (sort === 'deadline') return BigInt(row.deadlineUnix || 0)\n if (sort === 'pricePerLockedCtm') return row.locked > 0n ? (row.price * 10n ** 18n) / row.locked : 2n ** 255n - 1n\n return row.price\n }\n matched = [...matched].sort((a, b) => {\n if (a.fillable !== b.fillable) return a.fillable ? -1 : 1\n if (sort === 'pricePerLockedCtm' && (a.locked <= 0n) !== (b.locked <= 0n)) return a.locked <= 0n ? 1 : -1\n const cmp = key(a) === key(b) ? 0 : key(a) < key(b) ? -1 : 1\n if (cmp !== 0) return asc ? cmp : -cmp\n return a.tokenId.localeCompare(b.tokenId)\n })\n\n const limit = Math.min(MAX_LIMIT, Math.max(1, query.limit ?? DEFAULT_LIMIT))\n return matched.slice(0, limit).map((row) => toHit(row, nowUnix))\n}\n\nfunction toHit(row: MarketplaceSearchCandidate, nowUnix: number): MarketplaceSearchHit {\n const meta = paymentMeta(row.paymentToken)\n const perCtm = row.locked > 0n ? (row.price * 10n ** 18n) / row.locked : 0n\n const months =\n row.unlockUnix > nowUnix ? ((row.unlockUnix - nowUnix) / MONTH_SECONDS).toFixed(1) : row.unlockUnix > 0 ? '0' : ''\n return {\n kind: row.kind,\n tokenId: row.tokenId,\n onchainIndex: row.onchainIndex,\n seller: row.seller,\n paymentToken: row.paymentToken,\n paymentSymbol: meta.symbol,\n price: row.price.toString(),\n priceHuman: humanAmount(row.price, meta.decimals),\n priceBasis: row.priceBasis,\n lockedCtm: row.locked.toString(),\n lockedCtmHuman: humanAmount(row.locked, 18),\n unlockAt: row.unlockUnix > 0 ? new Date(row.unlockUnix * 1000).toISOString() : '',\n monthsToUnlock: months,\n pricePerLockedCtm: row.locked > 0n ? humanAmount(perCtm, meta.decimals) : '',\n deadlineAt: row.deadlineUnix > 0 ? new Date(row.deadlineUnix * 1000).toISOString() : '',\n attached: row.attached,\n fillable: row.fillable,\n }\n}\n\nasync function fillMissingLocks(rows: MarketplaceSearchCandidate[], rpcUrl: string | undefined, chainId: number): Promise<MarketplaceSearchCandidate[]> {\n const missing = [...new Set(rows.filter((row) => row.locked <= 0n || row.unlockUnix <= 0).map((row) => row.tokenId))]\n if (missing.length === 0 || !rpcUrl?.trim()) return rows\n const client = marketplacePublicClient(chainId, rpcUrl.trim())\n const locks = new Map<string, { amount: bigint; end: number }>()\n for (let i = 0; i < missing.length; i += 40) {\n const chunk = missing.slice(i, i + 40)\n const results = await client.multicall({\n contracts: chunk.map((id) => ({\n address: VOTING_ESCROW_LINEA_ADDRESS,\n abi: LOCKED_ABI,\n functionName: 'locked' as const,\n args: [BigInt(id)] as const,\n })),\n allowFailure: true,\n })\n results.forEach((result, index) => {\n if (result.status !== 'success' || !result.result) return\n const [amount, end] = result.result\n const id = chunk[index]\n if (!id) return\n locks.set(id, { amount: amount < 0n ? 0n : amount, end: Number(end) })\n })\n }\n return rows.map((row) => applyLock(row, locks.get(row.tokenId)))\n}\n\nasync function collectKind(\n kind: 'listing' | 'auction',\n args: MarketplaceSearchQuery,\n): Promise<{ rows: MarketplaceSearchCandidate[]; scanned: number; truncated: boolean; source: MarketplaceCatalogSource }> {\n const rows: MarketplaceSearchCandidate[] = []\n let cursor: string | undefined\n let scanned = 0\n let source: MarketplaceCatalogSource = 'api'\n let truncated = false\n for (let page = 0; page < MAX_PAGES; page += 1) {\n const query = { ...args, includeInactive: false, limit: PAGE_SIZE, cursor }\n const res =\n kind === 'listing'\n ? await fetchContinuumDaoMarketplaceListings(query)\n : await fetchContinuumDaoMarketplaceAuctions(query)\n source = res.source\n scanned += res.items.length\n for (const item of res.items) {\n rows.push(kind === 'listing' ? listingCandidate(item as MarketplaceOrder) : auctionCandidate(item as MarketplaceAuction))\n }\n if (res.source === 'logs' || !res.nextCursor) return { rows, scanned, truncated, source }\n cursor = res.nextCursor\n }\n truncated = true\n return { rows, scanned, truncated, source }\n}\n\n/**\n * Rank veCTMs for sale. Walks catalog pages, then filters and sorts.\n * Does not return the raw book.\n */\nexport async function searchContinuumDaoMarketplace(args: MarketplaceSearchQuery = {}): Promise<MarketplaceSearchResult> {\n const kind = args.kind ?? 'listing'\n const chainId = args.chainId ?? CONTINUUM_DAO_LINEA_CHAIN_ID\n const parts = await Promise.all([\n kind !== 'auction' ? collectKind('listing', args) : Promise.resolve(null),\n kind !== 'listing' ? collectKind('auction', args) : Promise.resolve(null),\n ])\n const collected = parts.flatMap((part) => part?.rows ?? [])\n const withLocks = await fillMissingLocks(collected, args.rpcUrl, chainId)\n const sort = args.sort ?? 'pricePerLockedCtm'\n const items = rankMarketplaceSearchHits(withLocks, args)\n return {\n sort,\n sortDirection: args.sortDirection ?? DEFAULT_DIRECTION[sort],\n paymentToken: args.paymentToken ?? null,\n scanned: parts.reduce((sum, part) => sum + (part?.scanned ?? 0), 0),\n truncated: parts.some((part) => part?.truncated),\n items,\n source: parts.some((part) => part?.source === 'logs') ? 'logs' : 'api',\n }\n}\n","import { formatUnits, getAddress, parseAbi } from 'viem'\nimport {\n CONTINUUM_DAO_LINEA_CHAIN_ID,\n CTM_FEE_RATE_SCALE,\n CTM_TOKEN_ADDRESS,\n MARKETPLACE_USDC_LINEA_ADDRESS,\n MARKETPLACE_WETH_LINEA_ADDRESS,\n MULTISIGN_AGENT_WALLET_LINEA_ADDRESS,\n VOTING_ESCROW_LINEA_ADDRESS,\n} from './constants.js'\nimport { marketplacePublicClient } from './marketplaceChain.js'\nimport { fetchContinuumDaoMarketplaceListings, type MarketplaceQuery } from './marketplaceCatalog.js'\nimport { listingCandidate } from './marketplaceSearch.js'\nimport type { MarketplaceCatalogSource } from './marketplaceTypes.js'\n\nconst PAGE_SIZE = 100\nconst MAX_PAGES = 20\nconst feeAbi = parseAbi([\n 'function veCtmThresholdPower() view returns (uint256)',\n 'function getActiveRates() view returns (uint256 monthlyFee, uint256 freeSignaturesPerMonth, uint256 overageFeePerSignature)',\n 'function FEE_TOKEN() view returns (address)',\n 'function ctmPerFeeToken() view returns (uint256)',\n 'function locked(uint256 tokenId) view returns (int128 amount, uint256 end)',\n 'function balanceOfNFT(uint256 tokenId) view returns (uint256)',\n])\n\nexport type FeeAlternativePayment = 'fee' | 'ctm'\n\nexport type FeeAlternativeCandidate = {\n tokenId: string\n paymentToken: string\n price: bigint\n locked: bigint\n unlockUnix: number\n votingPower: bigint\n fillable: boolean\n}\n\nexport type FeeAlternativeExample = {\n tokenId: string\n price: string\n priceHuman: string\n paymentToken: string\n paymentSymbol: string\n lockedCtm: string\n lockedCtmHuman: string\n unlockAt: string\n votingPower: string\n votingPowerHuman: string\n staysAboveThresholdUntil: string\n pricePerLockedCtm: string\n /** Set when the ask uses the same token as the fee being compared. */\n monthsOfFees: string | null\n comparedTo: FeeAlternativePayment | null\n fillable: boolean\n}\n\nexport type FeeAlternativeQuote = {\n payment: FeeAlternativePayment\n threshold: string\n thresholdHuman: string\n monthlyFee: string\n monthlyFeeHuman: string\n monthlyFeeSymbol: string\n annualFee: string\n annualFeeHuman: string\n monthlyFeeCtm: string\n monthlyFeeCtmHuman: string\n annualFeeCtm: string\n annualFeeCtmHuman: string\n feeToken: string\n example: FeeAlternativeExample | null\n scanned: number\n truncated: boolean\n source: MarketplaceCatalogSource\n summary: string\n}\n\nfunction trimDecimal(value: string): string {\n return value.replace(/(\\.\\d*?[1-9])0+$/, '$1').replace(/\\.0+$/, '')\n}\n\nfunction human(wei: bigint, decimals: number): string {\n return trimDecimal(formatUnits(wei, decimals))\n}\n\nfunction paymentMeta(address: string): { symbol: string; decimals: number } {\n const lower = address.toLowerCase()\n if (lower === MARKETPLACE_USDC_LINEA_ADDRESS.toLowerCase()) return { symbol: 'USDC', decimals: 6 }\n if (lower === MARKETPLACE_WETH_LINEA_ADDRESS.toLowerCase()) return { symbol: 'WETH', decimals: 18 }\n if (lower === CTM_TOKEN_ADDRESS.toLowerCase()) return { symbol: 'CTM', decimals: 18 }\n return { symbol: 'token', decimals: 18 }\n}\n\n/** Ask divided by one month of fees, one decimal place. */\nexport function monthsOfFees(price: bigint, monthly: bigint): string | null {\n if (monthly <= 0n || price < 0n) return null\n const tenths = (price * 10n) / monthly\n const whole = tenths / 10n\n const frac = tenths % 10n\n return frac === 0n ? whole.toString() : `${whole}.${frac}`\n}\n\n/**\n * When linearly decaying voting power crosses the threshold.\n * Returns null when power is already at or below the threshold.\n */\nexport function votingPowerAboveUntil(args: {\n votingPower: bigint\n threshold: bigint\n nowUnix: number\n unlockUnix: number\n}): number | null {\n if (args.votingPower <= args.threshold) return null\n if (args.unlockUnix <= args.nowUnix) return null\n if (args.threshold <= 0n) return args.unlockUnix\n const remaining = BigInt(args.unlockUnix - args.nowUnix)\n const drop = (remaining * args.threshold) / args.votingPower\n return args.unlockUnix - Number(drop)\n}\n\nexport function pickFeeAlternativeExample(\n rows: FeeAlternativeCandidate[],\n preferredToken: string | null,\n): FeeAlternativeCandidate | null {\n const fillable = rows.filter((row) => row.fillable && row.locked > 0n && row.votingPower > 0n)\n const preferred = preferredToken\n ? fillable.filter((row) => row.paymentToken.toLowerCase() === preferredToken.toLowerCase())\n : []\n const pool = preferred.length > 0 ? preferred : fillable\n const perCtm = (row: FeeAlternativeCandidate) => (row.price * 10n ** 18n) / row.locked\n return (\n [...pool].sort((a, b) => {\n const left = perCtm(a)\n const right = perCtm(b)\n if (left === right) return a.tokenId.localeCompare(b.tokenId)\n return left < right ? -1 : 1\n })[0] ?? null\n )\n}\n\nfunction iso(unix: number): string {\n return unix > 0 ? new Date(unix * 1000).toISOString() : ''\n}\n\nexport function buildFeeAlternativeSummary(args: {\n thresholdHuman: string\n monthlyFeeHuman: string\n monthlyFeeSymbol: string\n annualFeeHuman: string\n annualFeeCtmHuman: string\n example: FeeAlternativeExample | null\n}): string {\n const fee = `${args.monthlyFeeHuman} ${args.monthlyFeeSymbol}`\n const year = `${args.annualFeeHuman} ${args.monthlyFeeSymbol} (${args.annualFeeCtmHuman} CTM)`\n const lead =\n `Paying this month is ${fee}. A year for one KeyGen is ${year}. ` +\n `As an alternative, buy a veCTM and attach it. Locked CTM and voting power both have to be above ${args.thresholdHuman}. ` +\n 'One attached veCTM waives the monthly fee for KeyGens in that group, and VPN follows a qualifying group on the node. ' +\n 'Voting power decays, so a lock sitting on the line can miss a later month.'\n if (!args.example) {\n return `${lead} No live direct listing is above that threshold right now.`\n }\n const row = args.example\n const compare = row.monthsOfFees\n ? ` That ask is about ${row.monthsOfFees} months of fees. The ask buys a lock you still hold; the monthly fee is spent.`\n : ` The listing is priced in ${row.paymentSymbol}, which is a different token from the fee.`\n return (\n `${lead} Example direct listing #${row.tokenId}: ${row.priceHuman} ${row.paymentSymbol} for ${row.lockedCtmHuman} CTM, ` +\n `unlocks ${row.unlockAt}. Voting power stays above the threshold until ${row.staysAboveThresholdUntil}.${compare}`\n )\n}\n\nasync function readFeeSide(rpcUrl: string, chainId: number) {\n const client = marketplacePublicClient(chainId, rpcUrl)\n const wallet = MULTISIGN_AGENT_WALLET_LINEA_ADDRESS\n const [threshold, rates, feeToken, ctmPerFeeToken] = await Promise.all([\n client.readContract({ address: wallet, abi: feeAbi, functionName: 'veCtmThresholdPower' }),\n client.readContract({ address: wallet, abi: feeAbi, functionName: 'getActiveRates' }),\n client.readContract({ address: wallet, abi: feeAbi, functionName: 'FEE_TOKEN' }),\n client.readContract({ address: wallet, abi: feeAbi, functionName: 'ctmPerFeeToken' }),\n ])\n const monthlyFee = rates[0]\n const monthlyFeeCtm = ctmPerFeeToken > 0n ? (monthlyFee * ctmPerFeeToken) / CTM_FEE_RATE_SCALE : 0n\n return { threshold, monthlyFee, monthlyFeeCtm, feeToken: getAddress(feeToken) }\n}\n\nasync function collectListings(args: MarketplaceQuery) {\n const rows = []\n let cursor: string | undefined\n let scanned = 0\n let source: MarketplaceCatalogSource = 'api'\n let truncated = false\n for (let page = 0; page < MAX_PAGES; page += 1) {\n const res = await fetchContinuumDaoMarketplaceListings({ ...args, includeInactive: false, limit: PAGE_SIZE, cursor })\n source = res.source\n scanned += res.items.length\n rows.push(...res.items.map(listingCandidate))\n if (res.source === 'logs' || !res.nextCursor) return { rows, scanned, truncated, source }\n cursor = res.nextCursor\n }\n return { rows, scanned, truncated: true, source }\n}\n\nasync function fillLocks(\n rows: ReturnType<typeof listingCandidate>[],\n rpcUrl: string,\n chainId: number,\n) {\n const missing = [...new Set(rows.filter((row) => row.locked <= 0n || row.unlockUnix <= 0).map((row) => row.tokenId))]\n if (missing.length === 0) return rows\n const client = marketplacePublicClient(chainId, rpcUrl)\n const locks = new Map<string, { amount: bigint; end: number }>()\n for (let i = 0; i < missing.length; i += 40) {\n const chunk = missing.slice(i, i + 40)\n const results = await client.multicall({\n contracts: chunk.map((id) => ({\n address: VOTING_ESCROW_LINEA_ADDRESS,\n abi: feeAbi,\n functionName: 'locked' as const,\n args: [BigInt(id)] as const,\n })),\n allowFailure: true,\n })\n results.forEach((result, index) => {\n if (result.status !== 'success' || !result.result) return\n const id = chunk[index]\n if (!id) return\n const [amount, end] = result.result\n locks.set(id, { amount: amount < 0n ? 0n : amount, end: Number(end) })\n })\n }\n return rows.map((row) => {\n const lock = locks.get(row.tokenId)\n if (!lock) return row\n return { ...row, locked: row.locked > 0n ? row.locked : lock.amount, unlockUnix: row.unlockUnix > 0 ? row.unlockUnix : lock.end }\n })\n}\n\nasync function readVotingPower(tokenIds: string[], rpcUrl: string, chainId: number) {\n const client = marketplacePublicClient(chainId, rpcUrl)\n const power = new Map<string, bigint>()\n for (let i = 0; i < tokenIds.length; i += 40) {\n const chunk = tokenIds.slice(i, i + 40)\n const results = await client.multicall({\n contracts: chunk.map((id) => ({\n address: VOTING_ESCROW_LINEA_ADDRESS,\n abi: feeAbi,\n functionName: 'balanceOfNFT' as const,\n args: [BigInt(id)] as const,\n })),\n allowFailure: true,\n })\n results.forEach((result, index) => {\n const id = chunk[index]\n if (!id || result.status !== 'success') return\n power.set(id, result.result)\n })\n }\n return power\n}\n\n/**\n * One direct listing that can waive a paid KeyGen month, beside 12 times the live monthly fee.\n * Auctions are not included. Listings at or below the threshold are not included.\n */\nexport async function quoteContinuumDaoMarketplaceFeeAlternative(\n args: MarketplaceQuery & { rpcUrl: string; payment?: FeeAlternativePayment; executor?: string },\n): Promise<FeeAlternativeQuote> {\n const rpcUrl = args.rpcUrl?.trim()\n if (!rpcUrl) throw new Error('Linea RPC is required to read the monthly fee and veCTM threshold.')\n const chainId = args.chainId ?? CONTINUUM_DAO_LINEA_CHAIN_ID\n const payment = args.payment ?? 'fee'\n const nowUnix = Math.floor(Date.now() / 1000)\n const fee = await readFeeSide(rpcUrl, chainId)\n const collected = await collectListings(args)\n const withLocks = await fillLocks(collected.rows, rpcUrl, chainId)\n const executor = args.executor?.trim()\n const visible = executor\n ? withLocks.filter((row) => {\n try {\n return getAddress(row.seller) !== getAddress(executor)\n } catch {\n return row.seller.toLowerCase() !== executor.toLowerCase()\n }\n })\n : withLocks\n const aboveLock = visible.filter((row) => row.fillable && row.locked > fee.threshold)\n const power = await readVotingPower(aboveLock.map((row) => row.tokenId), rpcUrl, chainId)\n const qualified: FeeAlternativeCandidate[] = aboveLock.flatMap((row) => {\n const votingPower = power.get(row.tokenId)\n if (votingPower == null || votingPower <= fee.threshold) return []\n return [\n {\n tokenId: row.tokenId,\n paymentToken: row.paymentToken,\n price: row.price,\n locked: row.locked,\n unlockUnix: row.unlockUnix,\n votingPower,\n fillable: row.fillable,\n },\n ]\n })\n const preferred = payment === 'ctm' ? CTM_TOKEN_ADDRESS : fee.feeToken\n const picked = pickFeeAlternativeExample(qualified, preferred)\n const feeMeta = paymentMeta(fee.feeToken)\n const example = picked ? toExample(picked, fee, payment, preferred, nowUnix) : null\n const quoteBase = {\n payment,\n threshold: fee.threshold.toString(),\n thresholdHuman: human(fee.threshold, 18),\n monthlyFee: fee.monthlyFee.toString(),\n monthlyFeeHuman: human(fee.monthlyFee, feeMeta.decimals),\n monthlyFeeSymbol: feeMeta.symbol,\n annualFee: (fee.monthlyFee * 12n).toString(),\n annualFeeHuman: human(fee.monthlyFee * 12n, feeMeta.decimals),\n monthlyFeeCtm: fee.monthlyFeeCtm.toString(),\n monthlyFeeCtmHuman: human(fee.monthlyFeeCtm, 18),\n annualFeeCtm: (fee.monthlyFeeCtm * 12n).toString(),\n annualFeeCtmHuman: human(fee.monthlyFeeCtm * 12n, 18),\n feeToken: fee.feeToken,\n example,\n scanned: collected.scanned,\n truncated: collected.truncated,\n source: collected.source,\n }\n return {\n ...quoteBase,\n summary: buildFeeAlternativeSummary({\n thresholdHuman: quoteBase.thresholdHuman,\n monthlyFeeHuman: quoteBase.monthlyFeeHuman,\n monthlyFeeSymbol: quoteBase.monthlyFeeSymbol,\n annualFeeHuman: quoteBase.annualFeeHuman,\n annualFeeCtmHuman: quoteBase.annualFeeCtmHuman,\n example,\n }),\n }\n}\n\nfunction toExample(\n row: FeeAlternativeCandidate,\n fee: { threshold: bigint; monthlyFee: bigint; monthlyFeeCtm: bigint },\n payment: FeeAlternativePayment,\n preferred: string,\n nowUnix: number,\n): FeeAlternativeExample {\n const meta = paymentMeta(row.paymentToken)\n const same = row.paymentToken.toLowerCase() === preferred.toLowerCase()\n const monthly = payment === 'ctm' ? fee.monthlyFeeCtm : fee.monthlyFee\n const until = votingPowerAboveUntil({\n votingPower: row.votingPower,\n threshold: fee.threshold,\n nowUnix,\n unlockUnix: row.unlockUnix,\n })\n const perCtm = (row.price * 10n ** 18n) / row.locked\n return {\n tokenId: row.tokenId,\n price: row.price.toString(),\n priceHuman: human(row.price, meta.decimals),\n paymentToken: row.paymentToken,\n paymentSymbol: meta.symbol,\n lockedCtm: row.locked.toString(),\n lockedCtmHuman: human(row.locked, 18),\n unlockAt: iso(row.unlockUnix),\n votingPower: row.votingPower.toString(),\n votingPowerHuman: human(row.votingPower, 18),\n staysAboveThresholdUntil: iso(until ?? 0),\n pricePerLockedCtm: human(perCtm, meta.decimals),\n monthsOfFees: same ? monthsOfFees(row.price, monthly) : null,\n comparedTo: same ? payment : null,\n fillable: row.fillable,\n }\n}\n","import { getAddress, type Address } from 'viem'\nimport { buildEvmMultisignBatch } from '../../../chains/evm/buildBatch.js'\nimport type { EvmTxStep } from '../../../chains/evm/types.js'\nimport { CONTINUUM_DAO_LINEA_CHAIN_ID, CONTINUUM_DAO_MARKETPLACE_PROTOCOL_ID } from './constants.js'\nimport { loadMarketplacePlanSnapshot } from './marketplaceChain.js'\nimport {\n planMarketplaceSteps,\n type MarketplacePlanInput,\n type PlannedMarketplaceStep,\n} from './marketplacePlan.js'\nimport { continuumDaoSignatureText, type ContinuumDaoCommonArgs } from './multisign.js'\n\nfunction parseWei(raw: string | number | bigint, label: string): bigint {\n const value = typeof raw === 'bigint' ? raw : BigInt(String(raw).trim())\n if (value < 0n) throw new Error(`${label} must be zero or greater.`)\n return value\n}\n\nfunction parseTokenId(raw: string | number | bigint): bigint {\n const id = typeof raw === 'bigint' ? raw : BigInt(String(raw).trim())\n if (id <= 0n) throw new Error('veCTM token id must be greater than zero.')\n return id\n}\n\nfunction requireLinea(chainId: number): void {\n if (chainId !== CONTINUUM_DAO_LINEA_CHAIN_ID) {\n throw new Error('veCTM marketplace actions are Linea mainnet only.')\n }\n}\n\nfunction meta(step: PlannedMarketplaceStep, chainId: number, gasLimit: bigint): Record<string, unknown> {\n return {\n destinationAddress: step.to,\n signatureText: continuumDaoSignatureText({ name: step.name, ...step.extra }, chainId),\n evm: {\n type: step.evmType,\n version: 1,\n chainId: String(chainId),\n protocolId: CONTINUUM_DAO_MARKETPLACE_PROTOCOL_ID,\n },\n continuumDaoMarketplace: { ...step.extra, name: step.name, gas: { baseGasUnits: gasLimit.toString() } },\n }\n}\n\nasync function finalize(\n steps: PlannedMarketplaceStep[],\n args: ContinuumDaoCommonArgs,\n purposeSuffix: string,\n): Promise<{ bodyForSign: Record<string, unknown>; messageToSign: string }> {\n const evmSteps: EvmTxStep[] = steps.map((s) => ({\n to: s.to,\n data: s.data,\n value: s.value,\n fallbackGas: s.fallbackGas,\n }))\n const firstDataNo0x = evmSteps[0]!.data.startsWith('0x') ? evmSteps[0]!.data.slice(2) : evmSteps[0]!.data\n return buildEvmMultisignBatch({\n context: {\n chainCategory: 'evm',\n keyGen: args.keyGen,\n purposeText: args.purposeText,\n chainId: args.chainId,\n rpcUrl: args.rpcUrl.trim(),\n executorAddress: args.executorAddress,\n chainDetail: args.chainDetail,\n useCustomGas: args.useCustomGas,\n customGasChainDetails: args.customGasChainDetails,\n },\n steps: evmSteps,\n purposeSuffix,\n firstMsgRawNo0x: firstDataNo0x,\n destinationAddress: steps[0]!.to,\n buildBatchMeta: ({ index, gasLimit }) => meta(steps[index]!, args.chainId, gasLimit),\n })\n}\n\nasync function build(\n args: ContinuumDaoCommonArgs,\n input: MarketplacePlanInput,\n purposeSuffix: string,\n snapshotArgs: {\n paymentToken?: Address\n seller?: Address\n buyer?: Address\n },\n): Promise<{ bodyForSign: Record<string, unknown>; messageToSign: string }> {\n requireLinea(args.chainId)\n const executor = getAddress(args.executorAddress)\n const tokenId = 'tokenId' in input ? input.tokenId : 0n\n const snap = await loadMarketplacePlanSnapshot({\n chainId: args.chainId,\n rpcUrl: args.rpcUrl,\n executor,\n tokenId,\n ...snapshotArgs,\n })\n const steps = planMarketplaceSteps(input, snap)\n return finalize(steps, args, purposeSuffix)\n}\n\nexport async function buildEvmMultisignBodyContinuumDaoMarketplaceCreateListing(\n args: ContinuumDaoCommonArgs & {\n tokenId: string | number | bigint\n paymentToken: string\n askWei: string | number | bigint\n deadline: string | number | bigint\n },\n) {\n const tokenId = parseTokenId(args.tokenId)\n const paymentToken = getAddress(args.paymentToken)\n const askWei = parseWei(args.askWei, 'Ask')\n const deadline = parseWei(args.deadline, 'Deadline')\n return build(\n args,\n { action: 'createListing', tokenId, paymentToken, askWei, deadline },\n `ContinuumDAO marketplace: list veCTM #${tokenId.toString()}.`,\n { paymentToken },\n )\n}\n\nexport async function buildEvmMultisignBodyContinuumDaoMarketplaceDelist(\n args: ContinuumDaoCommonArgs & { tokenId: string | number | bigint },\n) {\n const tokenId = parseTokenId(args.tokenId)\n return build(args, { action: 'delist', tokenId }, `ContinuumDAO marketplace: delist veCTM #${tokenId.toString()}.`, {})\n}\n\nexport async function buildEvmMultisignBodyContinuumDaoMarketplaceFulfillListing(\n args: ContinuumDaoCommonArgs & {\n tokenId: string | number | bigint\n seller: string\n paymentToken: string\n priceWei: string | number | bigint\n },\n) {\n const tokenId = parseTokenId(args.tokenId)\n const seller = getAddress(args.seller)\n const paymentToken = getAddress(args.paymentToken)\n const priceWei = parseWei(args.priceWei, 'Price')\n return build(\n args,\n { action: 'fulfillListing', tokenId, seller, paymentToken, priceWei },\n `ContinuumDAO marketplace: buy veCTM #${tokenId.toString()}.`,\n { seller, paymentToken },\n )\n}\n\nexport async function buildEvmMultisignBodyContinuumDaoMarketplaceCreateOffering(\n args: ContinuumDaoCommonArgs & {\n tokenId: string | number | bigint\n paymentToken: string\n bidWei: string | number | bigint\n deadline: string | number | bigint\n },\n) {\n const tokenId = parseTokenId(args.tokenId)\n const paymentToken = getAddress(args.paymentToken)\n const bidWei = parseWei(args.bidWei, 'Bid')\n const deadline = parseWei(args.deadline, 'Deadline')\n return build(\n args,\n { action: 'createOffering', tokenId, paymentToken, bidWei, deadline },\n `ContinuumDAO marketplace: offer on veCTM #${tokenId.toString()}.`,\n { paymentToken },\n )\n}\n\nexport async function buildEvmMultisignBodyContinuumDaoMarketplaceRescind(\n args: ContinuumDaoCommonArgs & { tokenId: string | number | bigint },\n) {\n const tokenId = parseTokenId(args.tokenId)\n return build(\n args,\n { action: 'rescind', tokenId },\n `ContinuumDAO marketplace: rescind offer on veCTM #${tokenId.toString()}.`,\n {},\n )\n}\n\nexport async function buildEvmMultisignBodyContinuumDaoMarketplaceFulfillOffering(\n args: ContinuumDaoCommonArgs & {\n tokenId: string | number | bigint\n buyer: string\n paymentToken: string\n priceWei: string | number | bigint\n },\n) {\n const tokenId = parseTokenId(args.tokenId)\n const buyer = getAddress(args.buyer)\n const paymentToken = getAddress(args.paymentToken)\n const priceWei = parseWei(args.priceWei, 'Price')\n return build(\n args,\n { action: 'fulfillOffering', tokenId, buyer, paymentToken, priceWei },\n `ContinuumDAO marketplace: accept offer on veCTM #${tokenId.toString()}.`,\n { buyer, paymentToken },\n )\n}\n\nexport async function buildEvmMultisignBodyContinuumDaoMarketplaceCreateAuction(\n args: ContinuumDaoCommonArgs & {\n tokenId: string | number | bigint\n paymentToken: string\n deadline: string | number | bigint\n reserveWei: string | number | bigint\n minIncrementWei: string | number | bigint\n },\n) {\n const tokenId = parseTokenId(args.tokenId)\n const paymentToken = getAddress(args.paymentToken)\n const deadline = parseWei(args.deadline, 'Deadline')\n const reserveWei = parseWei(args.reserveWei, 'Reserve')\n const minIncrementWei = parseWei(args.minIncrementWei, 'Minimum increment')\n return build(\n args,\n { action: 'createAuction', tokenId, paymentToken, deadline, reserveWei, minIncrementWei },\n `ContinuumDAO marketplace: auction veCTM #${tokenId.toString()}.`,\n { paymentToken },\n )\n}\n\nexport async function buildEvmMultisignBodyContinuumDaoMarketplaceCancelAuction(\n args: ContinuumDaoCommonArgs & { tokenId: string | number | bigint },\n) {\n const tokenId = parseTokenId(args.tokenId)\n return build(\n args,\n { action: 'cancelAuction', tokenId },\n `ContinuumDAO marketplace: cancel auction for veCTM #${tokenId.toString()}.`,\n {},\n )\n}\n\nexport async function buildEvmMultisignBodyContinuumDaoMarketplaceAuctionBid(\n args: ContinuumDaoCommonArgs & {\n tokenId: string | number | bigint\n seller: string\n priceWei: string | number | bigint\n },\n) {\n const tokenId = parseTokenId(args.tokenId)\n const seller = getAddress(args.seller)\n const priceWei = parseWei(args.priceWei, 'Bid')\n return build(\n args,\n { action: 'auctionBid', tokenId, seller, priceWei },\n `ContinuumDAO marketplace: bid on veCTM #${tokenId.toString()}.`,\n { seller },\n )\n}\n\nexport async function buildEvmMultisignBodyContinuumDaoMarketplaceSettleAuction(\n args: ContinuumDaoCommonArgs & { tokenId: string | number | bigint; seller: string },\n) {\n const tokenId = parseTokenId(args.tokenId)\n const seller = getAddress(args.seller)\n return build(\n args,\n { action: 'settleAuction', tokenId, seller },\n `ContinuumDAO marketplace: settle auction for veCTM #${tokenId.toString()}.`,\n { seller },\n )\n}\n","import { getAddress } from 'viem'\n\nfunction parseExtra(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 parsed = JSON.parse(raw) as unknown\n if (parsed && typeof parsed === 'object' && !Array.isArray(parsed)) return parsed as Record<string, unknown>\n } catch {\n return null\n }\n }\n return null\n}\n\nfunction same(a: string, b: string): boolean {\n try {\n return getAddress(a) === getAddress(b)\n } catch {\n return a.toLowerCase() === b.toLowerCase()\n }\n}\n\n/**\n * After a successful marketplace broadcast, the veCTM id to offer in Add Token\n * when this KeyGen received the NFT.\n */\nexport function marketplaceVeCtmReceivedBy(\n detail: Record<string, unknown> | null | undefined,\n executor: string,\n): { tokenId: string } | null {\n const extra = parseExtra(detail)\n const batch = extra?.batchMeta\n if (!Array.isArray(batch) || !executor.trim()) return null\n for (const entry of batch) {\n if (!entry || typeof entry !== 'object' || Array.isArray(entry)) continue\n const row = entry as Record<string, unknown>\n const evm = row.evm\n const type = evm && typeof evm === 'object' ? String((evm as Record<string, unknown>).type ?? '') : ''\n const meta = row.continuumDaoMarketplace\n if (!meta || typeof meta !== 'object' || Array.isArray(meta)) continue\n const info = meta as Record<string, unknown>\n const tokenId = String(info.tokenId ?? '').trim()\n if (!tokenId) continue\n if (type === 'continuum_dao_marketplace_fulfill_listing') {\n const recipient = String(info.recipient ?? '')\n if (!recipient || same(recipient, executor)) return { tokenId }\n }\n if (type === 'continuum_dao_marketplace_settle_auction') {\n const highest = String(info.highestBidder ?? '')\n const recipient = String(info.recipient ?? '')\n if (highest && same(highest, executor) && same(recipient, executor)) return { tokenId }\n }\n }\n return null\n}\n"]}