@continuumdao/ctm-mpc-defi 0.2.44 → 0.2.46

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.
@@ -31,6 +31,13 @@ type ContinuumDaoDeployment = {
31
31
  declare const CTM_TOKEN_ADDRESS: `0x${string}`;
32
32
  /** Linea mainnet VotingEscrow (veCTM). */
33
33
  declare const VOTING_ESCROW_LINEA_ADDRESS: `0x${string}`;
34
+ /** Current Linea ContinuumDAO governor (backend catalog ids start at 0). */
35
+ declare const CONTINUUM_DAO_LINEA_GOVERNOR_ADDRESS: `0x${string}`;
36
+ /**
37
+ * Superseded Linea ContinuumDAO governor. The public catalog keeps its two
38
+ * proposals as ids **-2** and **-1** so the new contract can start at 0.
39
+ */
40
+ declare const CONTINUUM_DAO_LINEA_GOVERNOR_LEGACY_ADDRESS: `0x${string}`;
34
41
  /** Placeholder deployments — fill NodeProperties / Rewards / governor after redeploy. */
35
42
  declare const CONTINUUM_DAO_DEPLOYMENTS: Readonly<Record<number, ContinuumDaoDeployment>>;
36
43
  /** Public ContinuumDAO governance API (same host continuumdao-app proxies). */
@@ -554,13 +561,30 @@ declare function continuumDaoFetchProposalCount(args: {
554
561
  }): Promise<{
555
562
  count: string;
556
563
  }>;
557
- declare function continuumDaoFetchProposals(args: {
558
- start?: number;
559
- end?: number;
560
- }): Promise<{
564
+ type ContinuumDaoProposalCatalog = {
561
565
  proposals: unknown[];
562
566
  total?: number;
563
- }>;
567
+ minIndex?: number;
568
+ maxIndex?: number;
569
+ };
570
+ /**
571
+ * POST /proposals `start`/`end` are **catalog id indexes**, not offsets.
572
+ * `end` is exclusive. Superseded-governor rows use negative ids (currently -2, -1).
573
+ */
574
+ declare function resolveProposalCatalogRange(catalog: {
575
+ minIndex?: number;
576
+ maxIndex?: number;
577
+ }, args?: {
578
+ start?: number;
579
+ end?: number;
580
+ }): {
581
+ start: number;
582
+ end: number;
583
+ };
584
+ declare function continuumDaoFetchProposals(args?: {
585
+ start?: number;
586
+ end?: number;
587
+ }): Promise<ContinuumDaoProposalCatalog>;
564
588
  declare const GOVERNOR_STATE: {
565
589
  readonly Pending: 0;
566
590
  readonly Active: 1;
@@ -579,6 +603,7 @@ type LiveProposalRow = {
579
603
  onchainId: string;
580
604
  title: string;
581
605
  configuration?: number;
606
+ governorAddress?: string;
582
607
  state: number | null;
583
608
  stateLabel: string;
584
609
  bucket: LiveProposalBucket;
@@ -596,6 +621,7 @@ type ContinuumDaoLiveProposalsResult = {
596
621
  unknown: LiveProposalRow[];
597
622
  note: string;
598
623
  };
624
+ declare function isLegacyContinuumDaoGovernor(addr?: string | null): boolean;
599
625
  declare function summarizeLiveProposals(result: Omit<ContinuumDaoLiveProposalsResult, 'note'>): string;
600
626
  declare function continuumDaoFetchLiveProposals(args: {
601
627
  chainId?: number | string;
@@ -674,6 +700,7 @@ type ContinuumDaoExplainProposalResult = {
674
700
  typeLabel: string;
675
701
  configuration: 'bravo' | 'delta';
676
702
  nWinners?: number;
703
+ governorAddress?: string;
677
704
  briefing: string;
678
705
  actions: ExplainedAction[];
679
706
  options: ExplainedOption[];
@@ -685,6 +712,18 @@ declare function isGovNoOpAction(action: {
685
712
  signature?: string;
686
713
  calldata?: string;
687
714
  }): boolean;
715
+ /** Linea (DAO home chain) is never a C3 remote action, even when `network.c3governor` is set. */
716
+ declare function isLineaHomeNetwork(net: {
717
+ name?: string;
718
+ label?: string;
719
+ chainId?: string | number;
720
+ }): boolean;
721
+ declare function isRemoteC3Action(net: {
722
+ name?: string;
723
+ label?: string;
724
+ chainId?: string | number;
725
+ c3governor?: string;
726
+ }): boolean;
688
727
  declare function explainGovAction(raw: unknown): ExplainedAction;
689
728
  declare function explainProposalRecord(raw: unknown): ContinuumDaoExplainProposalResult;
690
729
  declare function continuumDaoExplainProposal(args: {
@@ -931,4 +970,4 @@ declare function buildEvmMultisignBodyContinuumDaoForumSignIn(args: {
931
970
 
932
971
  declare const continuumDaoProtocolModule: ProtocolModule;
933
972
 
934
- export { ATTACH_VECTM_SIGNATURE, CONTINUUM_DAO_APPROVE_FALLBACK, CONTINUUM_DAO_ATTACH_FALLBACK, CONTINUUM_DAO_CANCEL_FALLBACK, CONTINUUM_DAO_CREATE_LOCK_FALLBACK, CONTINUUM_DAO_DELEGATE_FALLBACK, CONTINUUM_DAO_DEPLOYMENTS, CONTINUUM_DAO_DETACH_FALLBACK, CONTINUUM_DAO_ETHEREUM_CHAIN_ID, CONTINUUM_DAO_EVM_TYPES, CONTINUUM_DAO_EXECUTE_FALLBACK, CONTINUUM_DAO_GOVERNANCE_API, CONTINUUM_DAO_GOV_EVM_TYPES, CONTINUUM_DAO_INCREASE_AMOUNT_FALLBACK, CONTINUUM_DAO_INCREASE_UNLOCK_FALLBACK, CONTINUUM_DAO_LINEA_CHAIN_ID, CONTINUUM_DAO_LINEA_SEPOLIA_CHAIN_ID, CONTINUUM_DAO_LIQUIDATE_FALLBACK, CONTINUUM_DAO_MERGE_FALLBACK, CONTINUUM_DAO_PROPOSE_FALLBACK, CONTINUUM_DAO_PROTOCOL_ID, CONTINUUM_DAO_SPLIT_FALLBACK, CONTINUUM_DAO_TRANSFER_FALLBACK, CONTINUUM_DAO_VOTE_FALLBACK, CONTINUUM_DAO_WITHDRAW_FALLBACK, CTM_TOKEN_ADDRESS, CTM_TOKEN_DECIMALS, CTM_TOKEN_NAME, CTM_TOKEN_SYMBOL, type ContinuumDaoCommonArgs, type ContinuumDaoDefaultAsset, type ContinuumDaoDeployment, type ContinuumDaoExplainProposalResult, type ContinuumDaoLiveProposalsResult, type ContinuumDaoNodeInfoTuple, type ContinuumDaoRegisterProposalPayload, type ExplainedAction, type ExplainedOption, FORUM_GOVERNANCE_SECTIONS, FORUM_IDEA_SECTION, FORUM_LOGIN_DELIVERY_KIND, type ForumGovernanceSection, type ForumSignInEligible, GOVERNOR_STATE, GOVERNOR_STATE_LABELS, type GovActionInput, type GovOptionInput, INCREASE_UNLOCK_TIME_SIGNATURE, type LiveProposalBucket, type LiveProposalRow, MAXTIME_SECONDS, PROPOSAL_TYPE_LABELS, PROPOSAL_TYPE_TO_FORUM_SECTION, VECTM_DEFAULT_MINIMUM_LOCK_WEI, VECTM_LIQ_MIN_LOCKED_WEI, VECTM_LIQ_PENALTY_DEN, VECTM_LIQ_PENALTY_NUM, VECTM_MAX_LOCK_WEEKS, VECTM_NODE_INFO_TUPLE, VECTM_TOKEN_NAME, VECTM_TOKEN_SYMBOL, VOTING_ESCROW_LINEA_ADDRESS, type VeCtmLockState, WEEK_SECONDS, applyForumSectionCheck, assertContinuumDaoForumDeleteInput, assertContinuumDaoForumMarkReadInput, assertContinuumDaoForumRecentInput, assertContinuumDaoForumSearchInput, assertContinuumDaoForumTopicKey, assertCreateLockAmount, assertCtmAmountAtLeastMinimum, assertDelegatee, assertExecutorOwnsLock, assertIncreaseAmount, assertIncreaseUnlockTime, assertLiquidate, assertLockDurationSeconds, assertMerge, assertSplitExtracted, assertTransfer, assertUndelegateNotAlreadySelf, assertWithdraw, bucketGovernorState, buildBravoProposalArgs, buildDeltaProposalArgs, buildEvmMultisignBodyContinuumDaoAttachVeCtm, buildEvmMultisignBodyContinuumDaoAttachVeCtmFromMcp, buildEvmMultisignBodyContinuumDaoCancel, buildEvmMultisignBodyContinuumDaoCastVoteBravo, buildEvmMultisignBodyContinuumDaoCastVoteBravoFromMcp, buildEvmMultisignBodyContinuumDaoCastVoteDelta, buildEvmMultisignBodyContinuumDaoCreateLock, buildEvmMultisignBodyContinuumDaoDelegate, buildEvmMultisignBodyContinuumDaoExecute, buildEvmMultisignBodyContinuumDaoForumSignIn, buildEvmMultisignBodyContinuumDaoIncreaseAmount, buildEvmMultisignBodyContinuumDaoIncreaseUnlockTime, buildEvmMultisignBodyContinuumDaoLiquidate, buildEvmMultisignBodyContinuumDaoMerge, buildEvmMultisignBodyContinuumDaoProposeBravo, buildEvmMultisignBodyContinuumDaoProposeDelta, buildEvmMultisignBodyContinuumDaoProposeDeltaFromMcp, buildEvmMultisignBodyContinuumDaoRequestDetach, buildEvmMultisignBodyContinuumDaoSplit, buildEvmMultisignBodyContinuumDaoTransfer, buildEvmMultisignBodyContinuumDaoUndelegate, buildEvmMultisignBodyContinuumDaoWithdraw, computeLiquidationAmounts, continuumDaoDeployment, continuumDaoExplainProposal, continuumDaoFetchDelegates, continuumDaoFetchLiveProposals, continuumDaoFetchProposal, continuumDaoFetchProposalCount, continuumDaoFetchProposalState, continuumDaoFetchProposalVoteEligibility, continuumDaoFetchProposals, continuumDaoFetchVotingPower, continuumDaoForumCreateIdea, continuumDaoForumCreateTopic, continuumDaoForumDelete, continuumDaoForumFetchPost, continuumDaoForumFetchThread, continuumDaoForumMarkRead, continuumDaoForumMarkUnread, continuumDaoForumMe, continuumDaoForumReact, continuumDaoForumRecent, continuumDaoForumReply, continuumDaoForumReplyCount, continuumDaoForumResolve, continuumDaoForumSearch, continuumDaoForumSections, continuumDaoForumSignInEligible, continuumDaoForumSignInNonce, continuumDaoForumSignOut, continuumDaoForumUnread, continuumDaoForumUrl, continuumDaoForumUserPostIds, continuumDaoHashProposal, continuumDaoMpaFlag, continuumDaoMpaListing, continuumDaoMpaMailboxList, continuumDaoMpaMailboxOpen, continuumDaoMpaMailboxSend, continuumDaoMpaRetract, continuumDaoProtocolModule, continuumDaoRegisterProposal, continuumDaoSignatureText, continuumDaoTechnocoreBind, ctmTokenAddressOnEvmChain, encodeContinuumDaoNodeInfo, encodeDeltaMetadata, encodeDeltaVoteParams, encodeGovActionCalldata, expectedForumSectionForProposalType, explainGovAction, explainProposalRecord, floorUnlockTimeSeconds, governorAddressOnEvmChain, isConfiguredAddress, isContinuumDaoCtmOnAssetsChain, isContinuumDaoLockChain, isContinuumDaoSupportedChainId, isContinuumDaoVeCtmOnAssetsChain, isCtmTokenSymbol, isForumIdeaSection, isGovNoOpAction, isVotingEscrowContinuumName, listContinuumDaoDefaultAssets, maxLockDurationSeconds, preflightAttachVeCtm, preflightCreateLock, preflightDelegate, preflightIncreaseAmount, preflightIncreaseUnlockTime, preflightLiquidate, preflightMerge, preflightRequestDetach, preflightSplit, preflightTransfer, preflightUndelegate, preflightWithdraw, proposalDescriptionHash, readCtmBalanceWei, readMinimumLockWei, readVeCtmLockState, resolveAttachGroupId, summarizeLiveProposals, votingEscrowAddressOnEvmChain };
973
+ export { ATTACH_VECTM_SIGNATURE, CONTINUUM_DAO_APPROVE_FALLBACK, CONTINUUM_DAO_ATTACH_FALLBACK, CONTINUUM_DAO_CANCEL_FALLBACK, CONTINUUM_DAO_CREATE_LOCK_FALLBACK, CONTINUUM_DAO_DELEGATE_FALLBACK, CONTINUUM_DAO_DEPLOYMENTS, CONTINUUM_DAO_DETACH_FALLBACK, CONTINUUM_DAO_ETHEREUM_CHAIN_ID, CONTINUUM_DAO_EVM_TYPES, CONTINUUM_DAO_EXECUTE_FALLBACK, CONTINUUM_DAO_GOVERNANCE_API, CONTINUUM_DAO_GOV_EVM_TYPES, CONTINUUM_DAO_INCREASE_AMOUNT_FALLBACK, CONTINUUM_DAO_INCREASE_UNLOCK_FALLBACK, CONTINUUM_DAO_LINEA_CHAIN_ID, CONTINUUM_DAO_LINEA_GOVERNOR_ADDRESS, CONTINUUM_DAO_LINEA_GOVERNOR_LEGACY_ADDRESS, CONTINUUM_DAO_LINEA_SEPOLIA_CHAIN_ID, CONTINUUM_DAO_LIQUIDATE_FALLBACK, CONTINUUM_DAO_MERGE_FALLBACK, CONTINUUM_DAO_PROPOSE_FALLBACK, CONTINUUM_DAO_PROTOCOL_ID, CONTINUUM_DAO_SPLIT_FALLBACK, CONTINUUM_DAO_TRANSFER_FALLBACK, CONTINUUM_DAO_VOTE_FALLBACK, CONTINUUM_DAO_WITHDRAW_FALLBACK, CTM_TOKEN_ADDRESS, CTM_TOKEN_DECIMALS, CTM_TOKEN_NAME, CTM_TOKEN_SYMBOL, type ContinuumDaoCommonArgs, type ContinuumDaoDefaultAsset, type ContinuumDaoDeployment, type ContinuumDaoExplainProposalResult, type ContinuumDaoLiveProposalsResult, type ContinuumDaoNodeInfoTuple, type ContinuumDaoProposalCatalog, type ContinuumDaoRegisterProposalPayload, type ExplainedAction, type ExplainedOption, FORUM_GOVERNANCE_SECTIONS, FORUM_IDEA_SECTION, FORUM_LOGIN_DELIVERY_KIND, type ForumGovernanceSection, type ForumSignInEligible, GOVERNOR_STATE, GOVERNOR_STATE_LABELS, type GovActionInput, type GovOptionInput, INCREASE_UNLOCK_TIME_SIGNATURE, type LiveProposalBucket, type LiveProposalRow, MAXTIME_SECONDS, PROPOSAL_TYPE_LABELS, PROPOSAL_TYPE_TO_FORUM_SECTION, VECTM_DEFAULT_MINIMUM_LOCK_WEI, VECTM_LIQ_MIN_LOCKED_WEI, VECTM_LIQ_PENALTY_DEN, VECTM_LIQ_PENALTY_NUM, VECTM_MAX_LOCK_WEEKS, VECTM_NODE_INFO_TUPLE, VECTM_TOKEN_NAME, VECTM_TOKEN_SYMBOL, VOTING_ESCROW_LINEA_ADDRESS, type VeCtmLockState, WEEK_SECONDS, applyForumSectionCheck, assertContinuumDaoForumDeleteInput, assertContinuumDaoForumMarkReadInput, assertContinuumDaoForumRecentInput, assertContinuumDaoForumSearchInput, assertContinuumDaoForumTopicKey, assertCreateLockAmount, assertCtmAmountAtLeastMinimum, assertDelegatee, assertExecutorOwnsLock, assertIncreaseAmount, assertIncreaseUnlockTime, assertLiquidate, assertLockDurationSeconds, assertMerge, assertSplitExtracted, assertTransfer, assertUndelegateNotAlreadySelf, assertWithdraw, bucketGovernorState, buildBravoProposalArgs, buildDeltaProposalArgs, buildEvmMultisignBodyContinuumDaoAttachVeCtm, buildEvmMultisignBodyContinuumDaoAttachVeCtmFromMcp, buildEvmMultisignBodyContinuumDaoCancel, buildEvmMultisignBodyContinuumDaoCastVoteBravo, buildEvmMultisignBodyContinuumDaoCastVoteBravoFromMcp, buildEvmMultisignBodyContinuumDaoCastVoteDelta, buildEvmMultisignBodyContinuumDaoCreateLock, buildEvmMultisignBodyContinuumDaoDelegate, buildEvmMultisignBodyContinuumDaoExecute, buildEvmMultisignBodyContinuumDaoForumSignIn, buildEvmMultisignBodyContinuumDaoIncreaseAmount, buildEvmMultisignBodyContinuumDaoIncreaseUnlockTime, buildEvmMultisignBodyContinuumDaoLiquidate, buildEvmMultisignBodyContinuumDaoMerge, buildEvmMultisignBodyContinuumDaoProposeBravo, buildEvmMultisignBodyContinuumDaoProposeDelta, buildEvmMultisignBodyContinuumDaoProposeDeltaFromMcp, buildEvmMultisignBodyContinuumDaoRequestDetach, buildEvmMultisignBodyContinuumDaoSplit, buildEvmMultisignBodyContinuumDaoTransfer, buildEvmMultisignBodyContinuumDaoUndelegate, buildEvmMultisignBodyContinuumDaoWithdraw, computeLiquidationAmounts, continuumDaoDeployment, continuumDaoExplainProposal, continuumDaoFetchDelegates, continuumDaoFetchLiveProposals, continuumDaoFetchProposal, continuumDaoFetchProposalCount, continuumDaoFetchProposalState, continuumDaoFetchProposalVoteEligibility, continuumDaoFetchProposals, continuumDaoFetchVotingPower, continuumDaoForumCreateIdea, continuumDaoForumCreateTopic, continuumDaoForumDelete, continuumDaoForumFetchPost, continuumDaoForumFetchThread, continuumDaoForumMarkRead, continuumDaoForumMarkUnread, continuumDaoForumMe, continuumDaoForumReact, continuumDaoForumRecent, continuumDaoForumReply, continuumDaoForumReplyCount, continuumDaoForumResolve, continuumDaoForumSearch, continuumDaoForumSections, continuumDaoForumSignInEligible, continuumDaoForumSignInNonce, continuumDaoForumSignOut, continuumDaoForumUnread, continuumDaoForumUrl, continuumDaoForumUserPostIds, continuumDaoHashProposal, continuumDaoMpaFlag, continuumDaoMpaListing, continuumDaoMpaMailboxList, continuumDaoMpaMailboxOpen, continuumDaoMpaMailboxSend, continuumDaoMpaRetract, continuumDaoProtocolModule, continuumDaoRegisterProposal, continuumDaoSignatureText, continuumDaoTechnocoreBind, ctmTokenAddressOnEvmChain, encodeContinuumDaoNodeInfo, encodeDeltaMetadata, encodeDeltaVoteParams, encodeGovActionCalldata, expectedForumSectionForProposalType, explainGovAction, explainProposalRecord, floorUnlockTimeSeconds, governorAddressOnEvmChain, isConfiguredAddress, isContinuumDaoCtmOnAssetsChain, isContinuumDaoLockChain, isContinuumDaoSupportedChainId, isContinuumDaoVeCtmOnAssetsChain, isCtmTokenSymbol, isForumIdeaSection, isGovNoOpAction, isLegacyContinuumDaoGovernor, isLineaHomeNetwork, isRemoteC3Action, isVotingEscrowContinuumName, listContinuumDaoDefaultAssets, maxLockDurationSeconds, preflightAttachVeCtm, preflightCreateLock, preflightDelegate, preflightIncreaseAmount, preflightIncreaseUnlockTime, preflightLiquidate, preflightMerge, preflightRequestDetach, preflightSplit, preflightTransfer, preflightUndelegate, preflightWithdraw, proposalDescriptionHash, readCtmBalanceWei, readMinimumLockWei, readVeCtmLockState, resolveAttachGroupId, resolveProposalCatalogRange, summarizeLiveProposals, votingEscrowAddressOnEvmChain };
@@ -62,6 +62,8 @@ var UNSET = {
62
62
  };
63
63
  var CTM_TOKEN_ADDRESS = getAddress("0x2026027054F5beBCEB650aBD62dC623e327658e7");
64
64
  var VOTING_ESCROW_LINEA_ADDRESS = getAddress("0x221EC90B3B083A8501A37bdeb7035CeaedF3C31f");
65
+ var CONTINUUM_DAO_LINEA_GOVERNOR_ADDRESS = getAddress("0x76FF2CB03175900F1D83328C82D27EA9aeaF2355");
66
+ var CONTINUUM_DAO_LINEA_GOVERNOR_LEGACY_ADDRESS = getAddress("0x4800F9f1dC1b6daCA841B71E0531F547D374168E");
65
67
  var CONTINUUM_DAO_DEPLOYMENTS = {
66
68
  [CONTINUUM_DAO_LINEA_CHAIN_ID]: {
67
69
  ...UNSET,
@@ -2557,17 +2559,40 @@ async function continuumDaoFetchProposalCount(args) {
2557
2559
  const count = await client.readContract({ address: gov, abi: governorReadAbi, functionName: "proposalCount" });
2558
2560
  return { count: count.toString() };
2559
2561
  }
2560
- async function continuumDaoFetchProposals(args) {
2561
- const start = args.start ?? 0;
2562
- const end = args.end ?? start + 20;
2562
+ function resolveProposalCatalogRange(catalog, args) {
2563
+ const hasBounds = Number.isFinite(catalog.minIndex) && Number.isFinite(catalog.maxIndex);
2564
+ const minIndex = hasBounds ? Number(catalog.minIndex) : 0;
2565
+ const maxIndex = hasBounds ? Number(catalog.maxIndex) : 0;
2566
+ if (!hasBounds) {
2567
+ const start = args?.start ?? 0;
2568
+ const end = args?.end ?? start + 20;
2569
+ return { start, end };
2570
+ }
2571
+ return {
2572
+ start: args?.start ?? minIndex,
2573
+ end: args?.end ?? maxIndex + 1
2574
+ };
2575
+ }
2576
+ async function postProposalCatalog(body) {
2563
2577
  const res = await fetch(`${CONTINUUM_DAO_GOVERNANCE_API}/proposals`, {
2564
2578
  method: "POST",
2565
2579
  headers: { "Content-Type": "application/json" },
2566
- body: JSON.stringify({ start, end })
2580
+ body: JSON.stringify(body)
2567
2581
  });
2568
2582
  if (!res.ok) throw new Error(`proposals: ${res.status} ${await res.text()}`);
2569
2583
  return await res.json();
2570
2584
  }
2585
+ async function continuumDaoFetchProposals(args = {}) {
2586
+ const bounds = await postProposalCatalog({});
2587
+ const { start, end } = resolveProposalCatalogRange(bounds, args);
2588
+ const listed = await postProposalCatalog({ start, end });
2589
+ return {
2590
+ ...listed,
2591
+ total: listed.total ?? bounds.total,
2592
+ minIndex: listed.minIndex ?? bounds.minIndex,
2593
+ maxIndex: listed.maxIndex ?? bounds.maxIndex
2594
+ };
2595
+ }
2571
2596
  var GOVERNOR_STATE = {
2572
2597
  Pending: 0,
2573
2598
  Active: 1,
@@ -2608,13 +2633,19 @@ function parseBackendProposal(raw) {
2608
2633
  if (!onchainId) return null;
2609
2634
  const idRaw = row.id;
2610
2635
  const id = typeof idRaw === "number" ? idRaw : Number(idRaw);
2636
+ const governorRaw = String(row.governorAddress ?? row.governor_address ?? "").trim();
2611
2637
  return {
2612
2638
  id: Number.isFinite(id) ? id : void 0,
2613
2639
  onchainId,
2614
2640
  title: String(row.title ?? "Untitled"),
2615
- configuration: typeof row.configuration === "number" ? row.configuration : void 0
2641
+ configuration: typeof row.configuration === "number" ? row.configuration : void 0,
2642
+ governorAddress: isConfiguredAddress(governorRaw) ? getAddress(governorRaw) : void 0
2616
2643
  };
2617
2644
  }
2645
+ function isLegacyContinuumDaoGovernor(addr) {
2646
+ if (!addr || !isConfiguredAddress(addr)) return false;
2647
+ return getAddress(addr) === CONTINUUM_DAO_LINEA_GOVERNOR_LEGACY_ADDRESS;
2648
+ }
2618
2649
  function summarizeLiveProposals(result) {
2619
2650
  if (result.overlay === "backend-only") {
2620
2651
  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.`;
@@ -2639,9 +2670,11 @@ async function mapPool(items, concurrency, fn) {
2639
2670
  async function continuumDaoFetchLiveProposals(args) {
2640
2671
  const limit = Math.min(Math.max(Number(args.limit) || 40, 1), 100);
2641
2672
  const completedLimit = Math.min(Math.max(Number(args.completedLimit) || 8, 0), 20);
2642
- const listed = await continuumDaoFetchProposals({ start: 0, end: limit });
2673
+ const listed = await continuumDaoFetchProposals();
2643
2674
  const rawList = Array.isArray(listed.proposals) ? listed.proposals : [];
2644
2675
  const parsed = rawList.map(parseBackendProposal).filter((p) => p != null);
2676
+ const ordered = [...parsed].sort((a, b) => (a.id ?? 0) - (b.id ?? 0));
2677
+ const latest = ordered.length > limit ? ordered.slice(ordered.length - limit) : ordered;
2645
2678
  const chainId = args.chainId != null && String(args.chainId).trim() !== "" ? Number(args.chainId) : NaN;
2646
2679
  const rpcUrl = (args.rpcUrl ?? "").trim();
2647
2680
  let overlay = "backend-only";
@@ -2653,13 +2686,13 @@ async function continuumDaoFetchLiveProposals(args) {
2653
2686
  } catch {
2654
2687
  overlay = "backend-only";
2655
2688
  }
2656
- const rows = overlay === "on-chain" ? await mapPool(parsed, 6, async (p) => {
2689
+ const rows = overlay === "on-chain" ? await mapPool(latest, 6, async (p) => {
2657
2690
  try {
2658
2691
  const st = await continuumDaoFetchProposalState({
2659
2692
  chainId,
2660
2693
  rpcUrl,
2661
2694
  proposalId: p.onchainId,
2662
- governor: args.governor
2695
+ governor: p.governorAddress ?? args.governor
2663
2696
  });
2664
2697
  return {
2665
2698
  ...p,
@@ -2673,7 +2706,7 @@ async function continuumDaoFetchLiveProposals(args) {
2673
2706
  } catch {
2674
2707
  return { ...p, state: null, stateLabel: "Unknown", bucket: "unknown" };
2675
2708
  }
2676
- }) : parsed.map((p) => ({ ...p, state: null, stateLabel: "Unknown", bucket: "unknown" }));
2709
+ }) : latest.map((p) => ({ ...p, state: null, stateLabel: "Unknown", bucket: "unknown" }));
2677
2710
  const live = rows.filter((r) => r.bucket === "live");
2678
2711
  const pending = rows.filter((r) => r.bucket === "pending");
2679
2712
  const readyToExecute = rows.filter((r) => r.bucket === "readyToExecute");
@@ -2734,13 +2767,28 @@ function isGovNoOpAction(action) {
2734
2767
  const emptyData = data === "" || data === "0x";
2735
2768
  return (value === "" || value === "0") && sig === "" && emptyData;
2736
2769
  }
2770
+ var LINEA_HOME_CHAIN_IDS = /* @__PURE__ */ new Set(["59144", "59141"]);
2771
+ function isLineaHomeNetwork(net) {
2772
+ const name = `${net.name ?? ""} ${net.label ?? ""}`.toLowerCase();
2773
+ if (name.includes("linea")) return true;
2774
+ return LINEA_HOME_CHAIN_IDS.has(String(net.chainId ?? ""));
2775
+ }
2776
+ function isRemoteC3Action(net) {
2777
+ const c3 = (net.c3governor ?? "").trim();
2778
+ const hasC3 = Boolean(c3 && c3 !== "0x0000000000000000000000000000000000000000");
2779
+ return hasC3 && !isLineaHomeNetwork(net);
2780
+ }
2737
2781
  function explainGovAction(raw) {
2738
2782
  const a = asRecord2(raw) ?? {};
2739
2783
  const net = asRecord2(a.network) ?? {};
2740
2784
  const networkLabel = str(net.label || net.name, "Unknown network");
2741
2785
  const chainId = str(net.chainId);
2742
- const c3 = str(net.c3governor);
2743
- const viaC3 = Boolean(c3 && c3 !== "0x0000000000000000000000000000000000000000");
2786
+ const viaC3 = isRemoteC3Action({
2787
+ name: str(net.name),
2788
+ label: str(net.label),
2789
+ chainId,
2790
+ c3governor: str(net.c3governor)
2791
+ });
2744
2792
  const target = str(a.target);
2745
2793
  const value = str(a.value, "0");
2746
2794
  const signature = str(a.signature);
@@ -2772,6 +2820,8 @@ function explainProposalRecord(raw) {
2772
2820
  if (!row) throw new Error("explain_proposal: empty proposal");
2773
2821
  const onchainId = str(row.onchainId ?? row.onchain_id ?? row.proposalId);
2774
2822
  if (!onchainId) throw new Error("explain_proposal: missing onchainId");
2823
+ const idNum = typeof row.id === "number" ? row.id : Number(row.id);
2824
+ const governorAddress = str(row.governorAddress ?? row.governor_address).trim() || void 0;
2775
2825
  const configuration = Number(row.configuration) === 1 ? "delta" : "bravo";
2776
2826
  const nWinners = row.nWinners != null ? Number(row.nWinners) : void 0;
2777
2827
  const actionsRaw = Array.isArray(row.actions) ? row.actions : [];
@@ -2799,6 +2849,11 @@ function explainProposalRecord(raw) {
2799
2849
  const lines = [];
2800
2850
  lines.push(`#${row.id ?? "\u2014"} ${str(row.title, "Untitled")} (${t}, ${configuration === "delta" ? "Delta" : "Bravo"}).`);
2801
2851
  lines.push(`Proposer ${str(row.proposer) || "\u2014"} (any EOA or contract \u2014 not required to be a KeyGen).`);
2852
+ if (governorAddress) {
2853
+ lines.push(
2854
+ isLegacyContinuumDaoGovernor(governorAddress) ? `Governor ${governorAddress} (superseded Linea DAO; catalog ids are negative).` : `Governor ${governorAddress}.`
2855
+ );
2856
+ }
2802
2857
  if (str(row.forumKey)) lines.push(`Forum: ${str(row.forumKey)}`);
2803
2858
  if (configuration === "bravo") {
2804
2859
  lines.push("If this passes, the DAO will execute, in order:");
@@ -2818,7 +2873,7 @@ function explainProposalRecord(raw) {
2818
2873
  }
2819
2874
  lines.push("Queue is not implemented. Vote while Active; execute from Succeeded.");
2820
2875
  return {
2821
- id: typeof row.id === "number" ? row.id : Number(row.id) || void 0,
2876
+ id: Number.isFinite(idNum) ? idNum : void 0,
2822
2877
  onchainId,
2823
2878
  title: str(row.title, "Untitled"),
2824
2879
  description: str(row.description),
@@ -2827,6 +2882,7 @@ function explainProposalRecord(raw) {
2827
2882
  typeLabel: t,
2828
2883
  configuration,
2829
2884
  nWinners: Number.isFinite(nWinners) ? nWinners : void 0,
2885
+ governorAddress,
2830
2886
  briefing: lines.join("\n"),
2831
2887
  actions,
2832
2888
  options,
@@ -2849,7 +2905,7 @@ async function continuumDaoExplainProposal(args) {
2849
2905
  }
2850
2906
  const want = (args.onchainId ?? "").trim();
2851
2907
  if (!want) throw new Error("explain_proposal: pass id or onchainId");
2852
- const listed = await continuumDaoFetchProposals({ start: 0, end: 80 });
2908
+ const listed = await continuumDaoFetchProposals();
2853
2909
  const rawList = Array.isArray(listed.proposals) ? listed.proposals : [];
2854
2910
  const hit = rawList.find((p) => {
2855
2911
  const row = asRecord2(p);
@@ -2913,6 +2969,6 @@ var continuumDaoProtocolModule = {
2913
2969
  };
2914
2970
  registerProtocolModule(continuumDaoProtocolModule);
2915
2971
 
2916
- export { ATTACH_VECTM_SIGNATURE, CONTINUUM_DAO_APPROVE_FALLBACK, CONTINUUM_DAO_ATTACH_FALLBACK, CONTINUUM_DAO_CANCEL_FALLBACK, CONTINUUM_DAO_CREATE_LOCK_FALLBACK, CONTINUUM_DAO_DELEGATE_FALLBACK, CONTINUUM_DAO_DEPLOYMENTS, CONTINUUM_DAO_DETACH_FALLBACK, CONTINUUM_DAO_ETHEREUM_CHAIN_ID, CONTINUUM_DAO_EVM_TYPES, CONTINUUM_DAO_EXECUTE_FALLBACK, CONTINUUM_DAO_GOVERNANCE_API, CONTINUUM_DAO_GOV_EVM_TYPES, CONTINUUM_DAO_INCREASE_AMOUNT_FALLBACK, CONTINUUM_DAO_INCREASE_UNLOCK_FALLBACK, CONTINUUM_DAO_LINEA_CHAIN_ID, CONTINUUM_DAO_LINEA_SEPOLIA_CHAIN_ID, CONTINUUM_DAO_LIQUIDATE_FALLBACK, CONTINUUM_DAO_MERGE_FALLBACK, CONTINUUM_DAO_PROPOSE_FALLBACK, CONTINUUM_DAO_PROTOCOL_ID, CONTINUUM_DAO_SPLIT_FALLBACK, CONTINUUM_DAO_TRANSFER_FALLBACK, CONTINUUM_DAO_VOTE_FALLBACK, CONTINUUM_DAO_WITHDRAW_FALLBACK, CTM_TOKEN_ADDRESS, CTM_TOKEN_DECIMALS, CTM_TOKEN_NAME, CTM_TOKEN_SYMBOL, FORUM_GOVERNANCE_SECTIONS, FORUM_IDEA_SECTION, FORUM_LOGIN_DELIVERY_KIND, GOVERNOR_STATE, GOVERNOR_STATE_LABELS, INCREASE_UNLOCK_TIME_SIGNATURE, MAXTIME_SECONDS, PROPOSAL_TYPE_LABELS, PROPOSAL_TYPE_TO_FORUM_SECTION, VECTM_DEFAULT_MINIMUM_LOCK_WEI, VECTM_LIQ_MIN_LOCKED_WEI, VECTM_LIQ_PENALTY_DEN, VECTM_LIQ_PENALTY_NUM, VECTM_MAX_LOCK_WEEKS, VECTM_NODE_INFO_TUPLE, VECTM_TOKEN_NAME, VECTM_TOKEN_SYMBOL, VOTING_ESCROW_LINEA_ADDRESS, WEEK_SECONDS, applyForumSectionCheck, assertContinuumDaoForumDeleteInput, assertContinuumDaoForumMarkReadInput, assertContinuumDaoForumRecentInput, assertContinuumDaoForumSearchInput, assertContinuumDaoForumTopicKey, assertCreateLockAmount, assertCtmAmountAtLeastMinimum, assertDelegatee, assertExecutorOwnsLock, assertIncreaseAmount, assertIncreaseUnlockTime, assertLiquidate, assertLockDurationSeconds, assertMerge, assertSplitExtracted, assertTransfer, assertUndelegateNotAlreadySelf, assertWithdraw, bucketGovernorState, buildBravoProposalArgs, buildDeltaProposalArgs, buildEvmMultisignBodyContinuumDaoAttachVeCtm, buildEvmMultisignBodyContinuumDaoAttachVeCtmFromMcp, buildEvmMultisignBodyContinuumDaoCancel, buildEvmMultisignBodyContinuumDaoCastVoteBravo, buildEvmMultisignBodyContinuumDaoCastVoteBravoFromMcp, buildEvmMultisignBodyContinuumDaoCastVoteDelta, buildEvmMultisignBodyContinuumDaoCreateLock, buildEvmMultisignBodyContinuumDaoDelegate, buildEvmMultisignBodyContinuumDaoExecute, buildEvmMultisignBodyContinuumDaoForumSignIn, buildEvmMultisignBodyContinuumDaoIncreaseAmount, buildEvmMultisignBodyContinuumDaoIncreaseUnlockTime, buildEvmMultisignBodyContinuumDaoLiquidate, buildEvmMultisignBodyContinuumDaoMerge, buildEvmMultisignBodyContinuumDaoProposeBravo, buildEvmMultisignBodyContinuumDaoProposeDelta, buildEvmMultisignBodyContinuumDaoProposeDeltaFromMcp, buildEvmMultisignBodyContinuumDaoRequestDetach, buildEvmMultisignBodyContinuumDaoSplit, buildEvmMultisignBodyContinuumDaoTransfer, buildEvmMultisignBodyContinuumDaoUndelegate, buildEvmMultisignBodyContinuumDaoWithdraw, computeLiquidationAmounts, continuumDaoDeployment, continuumDaoExplainProposal, continuumDaoFetchDelegates, continuumDaoFetchLiveProposals, continuumDaoFetchProposal, continuumDaoFetchProposalCount, continuumDaoFetchProposalState, continuumDaoFetchProposalVoteEligibility, continuumDaoFetchProposals, continuumDaoFetchVotingPower, continuumDaoForumCreateIdea, continuumDaoForumCreateTopic, continuumDaoForumDelete, continuumDaoForumFetchPost, continuumDaoForumFetchThread, continuumDaoForumMarkRead, continuumDaoForumMarkUnread, continuumDaoForumMe, continuumDaoForumReact, continuumDaoForumRecent, continuumDaoForumReply, continuumDaoForumReplyCount, continuumDaoForumResolve, continuumDaoForumSearch, continuumDaoForumSections, continuumDaoForumSignInEligible, continuumDaoForumSignInNonce, continuumDaoForumSignOut, continuumDaoForumUnread, continuumDaoForumUrl, continuumDaoForumUserPostIds, continuumDaoHashProposal, continuumDaoMpaFlag, continuumDaoMpaListing, continuumDaoMpaMailboxList, continuumDaoMpaMailboxOpen, continuumDaoMpaMailboxSend, continuumDaoMpaRetract, continuumDaoProtocolModule, continuumDaoRegisterProposal, continuumDaoSignatureText, continuumDaoTechnocoreBind, ctmTokenAddressOnEvmChain, encodeContinuumDaoNodeInfo, encodeDeltaMetadata, encodeDeltaVoteParams, encodeGovActionCalldata, expectedForumSectionForProposalType, explainGovAction, explainProposalRecord, floorUnlockTimeSeconds, governorAddressOnEvmChain, isConfiguredAddress, isContinuumDaoCtmOnAssetsChain, isContinuumDaoLockChain, isContinuumDaoSupportedChainId, isContinuumDaoVeCtmOnAssetsChain, isCtmTokenSymbol, isForumIdeaSection, isGovNoOpAction, isVotingEscrowContinuumName, listContinuumDaoDefaultAssets, maxLockDurationSeconds, preflightAttachVeCtm, preflightCreateLock, preflightDelegate, preflightIncreaseAmount, preflightIncreaseUnlockTime, preflightLiquidate, preflightMerge, preflightRequestDetach, preflightSplit, preflightTransfer, preflightUndelegate, preflightWithdraw, proposalDescriptionHash, readCtmBalanceWei, readMinimumLockWei, readVeCtmLockState, resolveAttachGroupId, summarizeLiveProposals, votingEscrowAddressOnEvmChain };
2972
+ export { ATTACH_VECTM_SIGNATURE, CONTINUUM_DAO_APPROVE_FALLBACK, CONTINUUM_DAO_ATTACH_FALLBACK, CONTINUUM_DAO_CANCEL_FALLBACK, CONTINUUM_DAO_CREATE_LOCK_FALLBACK, CONTINUUM_DAO_DELEGATE_FALLBACK, CONTINUUM_DAO_DEPLOYMENTS, CONTINUUM_DAO_DETACH_FALLBACK, CONTINUUM_DAO_ETHEREUM_CHAIN_ID, CONTINUUM_DAO_EVM_TYPES, CONTINUUM_DAO_EXECUTE_FALLBACK, CONTINUUM_DAO_GOVERNANCE_API, CONTINUUM_DAO_GOV_EVM_TYPES, CONTINUUM_DAO_INCREASE_AMOUNT_FALLBACK, CONTINUUM_DAO_INCREASE_UNLOCK_FALLBACK, CONTINUUM_DAO_LINEA_CHAIN_ID, CONTINUUM_DAO_LINEA_GOVERNOR_ADDRESS, CONTINUUM_DAO_LINEA_GOVERNOR_LEGACY_ADDRESS, CONTINUUM_DAO_LINEA_SEPOLIA_CHAIN_ID, CONTINUUM_DAO_LIQUIDATE_FALLBACK, CONTINUUM_DAO_MERGE_FALLBACK, CONTINUUM_DAO_PROPOSE_FALLBACK, CONTINUUM_DAO_PROTOCOL_ID, CONTINUUM_DAO_SPLIT_FALLBACK, CONTINUUM_DAO_TRANSFER_FALLBACK, CONTINUUM_DAO_VOTE_FALLBACK, CONTINUUM_DAO_WITHDRAW_FALLBACK, CTM_TOKEN_ADDRESS, CTM_TOKEN_DECIMALS, CTM_TOKEN_NAME, CTM_TOKEN_SYMBOL, FORUM_GOVERNANCE_SECTIONS, FORUM_IDEA_SECTION, FORUM_LOGIN_DELIVERY_KIND, GOVERNOR_STATE, GOVERNOR_STATE_LABELS, INCREASE_UNLOCK_TIME_SIGNATURE, MAXTIME_SECONDS, PROPOSAL_TYPE_LABELS, PROPOSAL_TYPE_TO_FORUM_SECTION, VECTM_DEFAULT_MINIMUM_LOCK_WEI, VECTM_LIQ_MIN_LOCKED_WEI, VECTM_LIQ_PENALTY_DEN, VECTM_LIQ_PENALTY_NUM, VECTM_MAX_LOCK_WEEKS, VECTM_NODE_INFO_TUPLE, VECTM_TOKEN_NAME, VECTM_TOKEN_SYMBOL, VOTING_ESCROW_LINEA_ADDRESS, WEEK_SECONDS, applyForumSectionCheck, assertContinuumDaoForumDeleteInput, assertContinuumDaoForumMarkReadInput, assertContinuumDaoForumRecentInput, assertContinuumDaoForumSearchInput, assertContinuumDaoForumTopicKey, assertCreateLockAmount, assertCtmAmountAtLeastMinimum, assertDelegatee, assertExecutorOwnsLock, assertIncreaseAmount, assertIncreaseUnlockTime, assertLiquidate, assertLockDurationSeconds, assertMerge, assertSplitExtracted, assertTransfer, assertUndelegateNotAlreadySelf, assertWithdraw, bucketGovernorState, buildBravoProposalArgs, buildDeltaProposalArgs, buildEvmMultisignBodyContinuumDaoAttachVeCtm, buildEvmMultisignBodyContinuumDaoAttachVeCtmFromMcp, buildEvmMultisignBodyContinuumDaoCancel, buildEvmMultisignBodyContinuumDaoCastVoteBravo, buildEvmMultisignBodyContinuumDaoCastVoteBravoFromMcp, buildEvmMultisignBodyContinuumDaoCastVoteDelta, buildEvmMultisignBodyContinuumDaoCreateLock, buildEvmMultisignBodyContinuumDaoDelegate, buildEvmMultisignBodyContinuumDaoExecute, buildEvmMultisignBodyContinuumDaoForumSignIn, buildEvmMultisignBodyContinuumDaoIncreaseAmount, buildEvmMultisignBodyContinuumDaoIncreaseUnlockTime, buildEvmMultisignBodyContinuumDaoLiquidate, buildEvmMultisignBodyContinuumDaoMerge, buildEvmMultisignBodyContinuumDaoProposeBravo, buildEvmMultisignBodyContinuumDaoProposeDelta, buildEvmMultisignBodyContinuumDaoProposeDeltaFromMcp, buildEvmMultisignBodyContinuumDaoRequestDetach, buildEvmMultisignBodyContinuumDaoSplit, buildEvmMultisignBodyContinuumDaoTransfer, buildEvmMultisignBodyContinuumDaoUndelegate, buildEvmMultisignBodyContinuumDaoWithdraw, computeLiquidationAmounts, continuumDaoDeployment, continuumDaoExplainProposal, continuumDaoFetchDelegates, continuumDaoFetchLiveProposals, continuumDaoFetchProposal, continuumDaoFetchProposalCount, continuumDaoFetchProposalState, continuumDaoFetchProposalVoteEligibility, continuumDaoFetchProposals, continuumDaoFetchVotingPower, continuumDaoForumCreateIdea, continuumDaoForumCreateTopic, continuumDaoForumDelete, continuumDaoForumFetchPost, continuumDaoForumFetchThread, continuumDaoForumMarkRead, continuumDaoForumMarkUnread, continuumDaoForumMe, continuumDaoForumReact, continuumDaoForumRecent, continuumDaoForumReply, continuumDaoForumReplyCount, continuumDaoForumResolve, continuumDaoForumSearch, continuumDaoForumSections, continuumDaoForumSignInEligible, continuumDaoForumSignInNonce, continuumDaoForumSignOut, continuumDaoForumUnread, continuumDaoForumUrl, continuumDaoForumUserPostIds, continuumDaoHashProposal, continuumDaoMpaFlag, continuumDaoMpaListing, continuumDaoMpaMailboxList, continuumDaoMpaMailboxOpen, continuumDaoMpaMailboxSend, continuumDaoMpaRetract, continuumDaoProtocolModule, continuumDaoRegisterProposal, continuumDaoSignatureText, continuumDaoTechnocoreBind, ctmTokenAddressOnEvmChain, encodeContinuumDaoNodeInfo, encodeDeltaMetadata, encodeDeltaVoteParams, encodeGovActionCalldata, expectedForumSectionForProposalType, explainGovAction, explainProposalRecord, floorUnlockTimeSeconds, governorAddressOnEvmChain, isConfiguredAddress, isContinuumDaoCtmOnAssetsChain, isContinuumDaoLockChain, isContinuumDaoSupportedChainId, isContinuumDaoVeCtmOnAssetsChain, isCtmTokenSymbol, isForumIdeaSection, isGovNoOpAction, isLegacyContinuumDaoGovernor, isLineaHomeNetwork, isRemoteC3Action, isVotingEscrowContinuumName, listContinuumDaoDefaultAssets, maxLockDurationSeconds, preflightAttachVeCtm, preflightCreateLock, preflightDelegate, preflightIncreaseAmount, preflightIncreaseUnlockTime, preflightLiquidate, preflightMerge, preflightRequestDetach, preflightSplit, preflightTransfer, preflightUndelegate, preflightWithdraw, proposalDescriptionHash, readCtmBalanceWei, readMinimumLockWei, readVeCtmLockState, resolveAttachGroupId, resolveProposalCatalogRange, summarizeLiveProposals, votingEscrowAddressOnEvmChain };
2917
2973
  //# sourceMappingURL=index.js.map
2918
2974
  //# sourceMappingURL=index.js.map