@continuumdao/ctm-mpc-defi 0.2.37 → 0.2.39

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 (53) hide show
  1. package/dist/agent/catalog.cjs +49 -38
  2. package/dist/agent/catalog.cjs.map +1 -1
  3. package/dist/agent/catalog.d.ts +722 -2
  4. package/dist/agent/catalog.js +49 -38
  5. package/dist/agent/catalog.js.map +1 -1
  6. package/dist/agent/skills/continuum-dao/SKILL.md +18 -2
  7. package/dist/{buildBatch-CngvebiD.d.ts → buildBatch-tsEUVn_a.d.ts} +3 -3
  8. package/dist/chains/evm/index.cjs +33 -22
  9. package/dist/chains/evm/index.cjs.map +1 -1
  10. package/dist/chains/evm/index.d.ts +10 -6
  11. package/dist/chains/evm/index.js +33 -22
  12. package/dist/chains/evm/index.js.map +1 -1
  13. package/dist/chains/near/index.d.ts +1 -1
  14. package/dist/chains/solana/index.d.ts +1 -1
  15. package/dist/core/index.d.ts +5 -5
  16. package/dist/{eip712Multisign-DCW7heqX.d.ts → eip712Multisign-6oNIlObj.d.ts} +1 -1
  17. package/dist/{envelope-C_bfuKab.d.ts → envelope-Cm-llShH.d.ts} +1 -1
  18. package/dist/index.cjs +33 -22
  19. package/dist/index.cjs.map +1 -1
  20. package/dist/index.d.ts +6 -6
  21. package/dist/index.js +33 -22
  22. package/dist/index.js.map +1 -1
  23. package/dist/protocols/evm/aave-v4/index.d.ts +1 -1
  24. package/dist/protocols/evm/aerodrome/index.d.ts +4 -4
  25. package/dist/protocols/evm/arcus/index.d.ts +2 -2
  26. package/dist/protocols/evm/circle-cctp/index.d.ts +2 -2
  27. package/dist/protocols/evm/compound-v3/index.d.ts +1 -1
  28. package/dist/protocols/evm/continuum-dao/index.cjs +810 -51
  29. package/dist/protocols/evm/continuum-dao/index.cjs.map +1 -1
  30. package/dist/protocols/evm/continuum-dao/index.d.ts +191 -5
  31. package/dist/protocols/evm/continuum-dao/index.js +770 -53
  32. package/dist/protocols/evm/continuum-dao/index.js.map +1 -1
  33. package/dist/protocols/evm/curve-dao/index.d.ts +2 -2
  34. package/dist/protocols/evm/ethena/index.d.ts +1 -1
  35. package/dist/protocols/evm/euler-v2/index.cjs +33 -22
  36. package/dist/protocols/evm/euler-v2/index.cjs.map +1 -1
  37. package/dist/protocols/evm/euler-v2/index.d.ts +1 -1
  38. package/dist/protocols/evm/euler-v2/index.js +33 -22
  39. package/dist/protocols/evm/euler-v2/index.js.map +1 -1
  40. package/dist/protocols/evm/gmx/index.d.ts +2 -2
  41. package/dist/protocols/evm/hyperliquid/index.d.ts +2 -2
  42. package/dist/protocols/evm/lido/index.d.ts +1 -1
  43. package/dist/protocols/evm/maple/index.d.ts +1 -1
  44. package/dist/protocols/evm/morpho/index.d.ts +1 -1
  45. package/dist/protocols/evm/pendle/index.d.ts +4 -4
  46. package/dist/protocols/evm/permit2/index.d.ts +1 -1
  47. package/dist/protocols/evm/sky/index.d.ts +1 -1
  48. package/dist/protocols/evm/uniswap-v4/index.d.ts +3 -3
  49. package/dist/protocols/evm/venice/index.d.ts +1 -1
  50. package/dist/{registry-DxDSPQ-p.d.ts → registry-BvsXh0-r.d.ts} +1 -1
  51. package/dist/{types-RZWOTm8c.d.ts → types-RJpoU4Pc.d.ts} +1 -1
  52. package/dist/{types-PZrvtjv8.d.ts → types-lIfv59N1.d.ts} +2 -0
  53. package/package.json +1 -1
@@ -1063,7 +1063,9 @@ var evmAddressSchema = z.string().min(1).describe("EVM address (0x-prefixed, 40
1063
1063
  var keyGenSchema = z.object({
1064
1064
  pubkeyhex: z.string().min(1).describe("MPC secp256k1 public key hex (required for multiSignRequest pubKey)"),
1065
1065
  keylist: z.array(z.string()).optional().describe("Key list on the sign request"),
1066
- ClientKeys: z.record(z.string()).optional().describe("Optional client key map from keyGen")
1066
+ ClientKeys: z.record(z.string()).optional().describe("Optional client key map from keyGen"),
1067
+ groupId: z.string().optional().describe("mpc-auth GroupId of this KeyGen (server-filled from getKeyGenGroupId)"),
1068
+ GroupId: z.string().optional().describe("Alias for groupId from KeyGen result payloads")
1067
1069
  }).describe(
1068
1070
  "MPC key slice: { pubkeyhex, keylist?, ClientKeys? }. Used for pubKey/keyList on POST /multiSignRequest."
1069
1071
  );
@@ -2804,8 +2806,8 @@ var mcpMorphoMidnightRepayInputSchema = withMultisignKeySourceRefine(
2804
2806
  )
2805
2807
  );
2806
2808
  var mcpContinuumDaoCreateLockInputSchema = mcpMultisignInput({
2807
- amountHuman: z.string().min(1).describe("CTM amount to lock"),
2808
- lockDurationSeconds: z.union([z.string(), z.number()]).describe("Lock duration in seconds"),
2809
+ amountHuman: z.string().min(1).describe("CTM amount to lock. Must be >= VotingEscrow.minimumLock (default 1 CTM)."),
2810
+ lockDurationSeconds: z.union([z.string(), z.number()]).describe("Lock duration in seconds. Must be 1\u2013208 weeks (week-aligned on-chain)."),
2809
2811
  ctm: evmAddressSchema.optional(),
2810
2812
  votingEscrow: evmAddressSchema.optional()
2811
2813
  });
@@ -2822,7 +2824,7 @@ var mcpContinuumDaoIncreaseUnlockTimeInputSchema = mcpMultisignInput({
2822
2824
  });
2823
2825
  var mcpContinuumDaoSplitInputSchema = mcpMultisignInput({
2824
2826
  tokenId: z.union([z.string(), z.number()]),
2825
- extractedHuman: z.string().min(1),
2827
+ extractedHuman: z.string().min(1).describe("CTM extracted into the new lock. Minimum 1 CTM; original lock must also keep 1 CTM."),
2826
2828
  votingEscrow: evmAddressSchema.optional()
2827
2829
  });
2828
2830
  var mcpContinuumDaoMergeInputSchema = mcpMultisignInput({
@@ -5448,8 +5450,14 @@ var MCP_PROTOCOL_TOOL_DEFINITIONS = [
5448
5450
  actionId: "continuum-dao.create-lock",
5449
5451
  protocolId: "continuum-dao",
5450
5452
  chainCategory: "evm",
5451
- description: "Build batch: CTM approve (if needed) + VotingEscrow.create_lock. Linea only. Do not prepend billing legs.",
5452
- prerequisites: ["keyGen", "executorAddress", "Linea RPC", "configured CTM and VotingEscrow addresses"],
5453
+ description: "Build batch: CTM approve (if needed) + VotingEscrow.create_lock. Amount must be >= on-chain minimumLock (default 1 CTM). Duration 1\u2013208 weeks. Linea only. Do not prepend billing legs.",
5454
+ prerequisites: [
5455
+ "keyGen",
5456
+ "executorAddress",
5457
+ "Linea RPC",
5458
+ "amountHuman >= 1 CTM (or live minimumLock)",
5459
+ "lockDurationSeconds 1\u2013208 weeks"
5460
+ ],
5453
5461
  handler: { importPath: "protocols/evm/continuum-dao", exportName: "buildEvmMultisignBodyContinuumDaoCreateLock" },
5454
5462
  inputZod: mcpContinuumDaoCreateLockInputSchema
5455
5463
  }),
@@ -5458,8 +5466,8 @@ var MCP_PROTOCOL_TOOL_DEFINITIONS = [
5458
5466
  actionId: "continuum-dao.increase-amount",
5459
5467
  protocolId: "continuum-dao",
5460
5468
  chainCategory: "evm",
5461
- description: "Build batch: CTM approve (if needed) + increase_amount.",
5462
- prerequisites: ["keyGen", "tokenId", "Linea RPC"],
5469
+ description: "Build batch: CTM approve (if needed) + increase_amount. Refuses expired locks, zero amount, and amounts above KeyGen CTM balance.",
5470
+ prerequisites: ["keyGen", "tokenId", "unexpired lock", "Linea RPC"],
5463
5471
  handler: { importPath: "protocols/evm/continuum-dao", exportName: "buildEvmMultisignBodyContinuumDaoIncreaseAmount" },
5464
5472
  inputZod: mcpContinuumDaoIncreaseAmountInputSchema
5465
5473
  }),
@@ -5468,8 +5476,8 @@ var MCP_PROTOCOL_TOOL_DEFINITIONS = [
5468
5476
  actionId: "continuum-dao.increase-unlock-time",
5469
5477
  protocolId: "continuum-dao",
5470
5478
  chainCategory: "evm",
5471
- description: "Build increase_unlock_time. lockDurationSeconds is from the week boundary to the new unlock.",
5472
- prerequisites: ["keyGen", "tokenId", "Linea RPC"],
5479
+ description: "Build increase_unlock_time on Linea VotingEscrow. lockDurationSeconds is from the week boundary to the new unlock (1\u2013208 weeks) and must land after the current lock end. No billing legs \u2014 allowed on an unpaid KeyGen (does not increment globalNonce). To attach in the same request, extend first then attachVeCtm so attach sees the new voting power.",
5480
+ prerequisites: ["keyGen", "tokenId", "unexpired lock", "Linea RPC"],
5473
5481
  handler: { importPath: "protocols/evm/continuum-dao", exportName: "buildEvmMultisignBodyContinuumDaoIncreaseUnlockTime" },
5474
5482
  inputZod: mcpContinuumDaoIncreaseUnlockTimeInputSchema
5475
5483
  }),
@@ -5478,8 +5486,8 @@ var MCP_PROTOCOL_TOOL_DEFINITIONS = [
5478
5486
  actionId: "continuum-dao.split",
5479
5487
  protocolId: "continuum-dao",
5480
5488
  chainCategory: "evm",
5481
- description: "Build VotingEscrow.split. Blocked on-chain while the token is node-attached.",
5482
- prerequisites: ["keyGen", "tokenId", "Linea RPC"],
5489
+ description: "Build VotingEscrow.split. New lock and remainder must each keep at least minimumLock (default 1 CTM). Blocked while node-attached or expired.",
5490
+ prerequisites: ["keyGen", "tokenId", "extractedHuman >= 1 CTM", "remainder >= 1 CTM", "unattached lock"],
5483
5491
  handler: { importPath: "protocols/evm/continuum-dao", exportName: "buildEvmMultisignBodyContinuumDaoSplit" },
5484
5492
  inputZod: mcpContinuumDaoSplitInputSchema
5485
5493
  }),
@@ -5488,8 +5496,8 @@ var MCP_PROTOCOL_TOOL_DEFINITIONS = [
5488
5496
  actionId: "continuum-dao.merge",
5489
5497
  protocolId: "continuum-dao",
5490
5498
  chainCategory: "evm",
5491
- description: "Build VotingEscrow.merge. Blocked on-chain while either token is node-attached.",
5492
- prerequisites: ["keyGen", "fromTokenId", "toTokenId", "Linea RPC"],
5499
+ description: "Build VotingEscrow.merge. Both NFTs must be owned by the KeyGen and unattached. Blocked if either token is node-attached.",
5500
+ prerequisites: ["keyGen", "fromTokenId", "toTokenId", "same owner", "neither attached"],
5493
5501
  handler: { importPath: "protocols/evm/continuum-dao", exportName: "buildEvmMultisignBodyContinuumDaoMerge" },
5494
5502
  inputZod: mcpContinuumDaoMergeInputSchema
5495
5503
  }),
@@ -5498,8 +5506,8 @@ var MCP_PROTOCOL_TOOL_DEFINITIONS = [
5498
5506
  actionId: "continuum-dao.withdraw",
5499
5507
  protocolId: "continuum-dao",
5500
5508
  chainCategory: "evm",
5501
- description: "Build VotingEscrow.withdraw for an expired, unattached lock.",
5502
- prerequisites: ["keyGen", "tokenId", "Linea RPC"],
5509
+ description: "Build VotingEscrow.withdraw for an expired, unattached lock. Refuses if still locked or node-attached.",
5510
+ prerequisites: ["keyGen", "tokenId", "lock expired", "unattached"],
5503
5511
  handler: { importPath: "protocols/evm/continuum-dao", exportName: "buildEvmMultisignBodyContinuumDaoWithdraw" },
5504
5512
  inputZod: mcpContinuumDaoTokenIdInputSchema
5505
5513
  }),
@@ -5508,8 +5516,8 @@ var MCP_PROTOCOL_TOOL_DEFINITIONS = [
5508
5516
  actionId: "continuum-dao.liquidate",
5509
5517
  protocolId: "continuum-dao",
5510
5518
  chainCategory: "evm",
5511
- description: "Build VotingEscrow.liquidate. Blocked on-chain while the token is node-attached.",
5512
- prerequisites: ["keyGen", "tokenId", "Linea RPC"],
5519
+ description: "Build VotingEscrow.liquidate. Refuses if attached, liquidations disabled, locked amount <= 100 gwei, or penalty would be zero. Expired locks withdraw instead on-chain.",
5520
+ prerequisites: ["keyGen", "tokenId", "liquidationsEnabled", "unattached"],
5513
5521
  handler: { importPath: "protocols/evm/continuum-dao", exportName: "buildEvmMultisignBodyContinuumDaoLiquidate" },
5514
5522
  inputZod: mcpContinuumDaoTokenIdInputSchema
5515
5523
  }),
@@ -5518,7 +5526,7 @@ var MCP_PROTOCOL_TOOL_DEFINITIONS = [
5518
5526
  actionId: "continuum-dao.delegate",
5519
5527
  protocolId: "continuum-dao",
5520
5528
  chainCategory: "evm",
5521
- description: "Build VotingEscrow.delegate(delegatee). Moves all veCTM voting power from the KeyGen to delegatee. Governor getVotes is then at the delegatee. Use undelegate to return power to the KeyGen.",
5529
+ description: "Build VotingEscrow.delegate(delegatee). Moves all veCTM voting power from the KeyGen to delegatee. Refuses the zero address and this KeyGen (use undelegate). Governor getVotes is then at the delegatee. Does not change the fee waiver or VPN gate \u2014 those use the attached NFT balanceOfNFTAt at UTC month start, not getVotes.",
5522
5530
  prerequisites: ["keyGen", "delegatee", "Linea RPC"],
5523
5531
  followUp: ["ctm_continuum_dao_fetch_delegates", "ctm_continuum_dao_build_undelegate_multisign"],
5524
5532
  handler: { importPath: "protocols/evm/continuum-dao", exportName: "buildEvmMultisignBodyContinuumDaoDelegate" },
@@ -5529,7 +5537,7 @@ var MCP_PROTOCOL_TOOL_DEFINITIONS = [
5529
5537
  actionId: "continuum-dao.undelegate",
5530
5538
  protocolId: "continuum-dao",
5531
5539
  chainCategory: "evm",
5532
- description: "Return veCTM voting power to the KeyGen. There is no undelegate() on VotingEscrow \u2014 this calls delegate(self). address(0) would also become self on-chain.",
5540
+ description: "Return veCTM voting power to the KeyGen. There is no undelegate() on VotingEscrow \u2014 this calls delegate(self). Refuses if power is already at this KeyGen.",
5533
5541
  prerequisites: ["keyGen", "Linea RPC"],
5534
5542
  followUp: ["ctm_continuum_dao_fetch_delegates"],
5535
5543
  handler: { importPath: "protocols/evm/continuum-dao", exportName: "buildEvmMultisignBodyContinuumDaoUndelegate" },
@@ -5540,8 +5548,8 @@ var MCP_PROTOCOL_TOOL_DEFINITIONS = [
5540
5548
  actionId: "continuum-dao.transfer",
5541
5549
  protocolId: "continuum-dao",
5542
5550
  chainCategory: "evm",
5543
- description: "Build VotingEscrow.transferFrom. Blocked on-chain while the token is node-attached.",
5544
- prerequisites: ["keyGen", "tokenId", "to", "Linea RPC"],
5551
+ description: "Build VotingEscrow.transferFrom. Refuses node-attached tokens, the zero address, and self-transfers.",
5552
+ prerequisites: ["keyGen", "tokenId", "to", "unattached"],
5545
5553
  handler: { importPath: "protocols/evm/continuum-dao", exportName: "buildEvmMultisignBodyContinuumDaoTransfer" },
5546
5554
  inputZod: mcpContinuumDaoTransferInputSchema
5547
5555
  }),
@@ -5550,8 +5558,8 @@ var MCP_PROTOCOL_TOOL_DEFINITIONS = [
5550
5558
  actionId: "continuum-dao.attach",
5551
5559
  protocolId: "continuum-dao",
5552
5560
  chainCategory: "evm",
5553
- description: "Build MultiSignAgentWallet.attachVeCtm. Authority KeyGen only. Cannot replace an attached NFT. No billing legs.",
5554
- prerequisites: ["keyGen", "nodeKey", "tokenId", "mpaWallet"],
5561
+ description: "Build MultiSignAgentWallet.attachVeCtm(nodeKey, tokenId, nodeInfo, groupId). groupId is the attaching KeyGen's mpc-auth GroupId (server-filled; do not pick another group) and binds the fee waiver immediately. Caller must be nodeWithdrawAuthority and own the NFT. This KeyGen cannot attach a second NFT; a second group on the same node attaches after rotating authority to that group's secp256k1 KeyGen. Locked CTM must meet veCtmThresholdPower at attach; the monthly waiver/VPN then use that NFT's balanceOfNFTAt at UTC month start (governor getVotes and inbound delegation do not count). No billing legs.",
5562
+ prerequisites: ["keyGen is nodeWithdrawAuthority", "owns tokenId", "this KeyGen has no attach", "mpaWallet"],
5555
5563
  handler: { importPath: "protocols/evm/continuum-dao", exportName: "buildEvmMultisignBodyContinuumDaoAttachVeCtmFromMcp" },
5556
5564
  inputZod: mcpContinuumDaoAttachInputSchema
5557
5565
  }),
@@ -5560,8 +5568,8 @@ var MCP_PROTOCOL_TOOL_DEFINITIONS = [
5560
5568
  actionId: "continuum-dao.request-detach",
5561
5569
  protocolId: "continuum-dao",
5562
5570
  chainCategory: "evm",
5563
- description: "Build NodeProperties.setNodeRemovalStatus(tokenId, true). Governance must complete detach.",
5564
- prerequisites: ["keyGen", "tokenId", "nodeProperties"],
5571
+ description: "Build NodeProperties.setNodeRemovalStatus(tokenId, true). Compose from the KeyGen that owns the attached NFT (not the current withdraw authority unless they are the same). Refuses if not attached or detach already requested. Only governance detachNode actually detaches.",
5572
+ prerequisites: ["keyGen is attached owner", "tokenId attached", "detach not already requested"],
5565
5573
  handler: { importPath: "protocols/evm/continuum-dao", exportName: "buildEvmMultisignBodyContinuumDaoRequestDetach" },
5566
5574
  inputZod: mcpContinuumDaoRequestDetachInputSchema
5567
5575
  }),
@@ -5604,8 +5612,8 @@ var MCP_PROTOCOL_TOOL_DEFINITIONS = [
5604
5612
  actionId: "continuum-dao.cast-vote-bravo",
5605
5613
  protocolId: "continuum-dao",
5606
5614
  chainCategory: "evm",
5607
- description: "Build ContinuumDAO.castVote. support: 0 against, 1 for, 2 abstain.",
5608
- prerequisites: ["keyGen", "proposalId", "Active proposal"],
5615
+ description: "Build ContinuumDAO.castVote. support: 0 against, 1 for, 2 abstain. Refuses unless the proposal is Active, the KeyGen has snapshot voting power, and has not already voted.",
5616
+ prerequisites: ["keyGen", "proposalId", "Active proposal", "snapshot votes > 0", "hasVoted false"],
5609
5617
  handler: { importPath: "protocols/evm/continuum-dao", exportName: "buildEvmMultisignBodyContinuumDaoCastVoteBravoFromMcp" },
5610
5618
  inputZod: mcpContinuumDaoCastVoteBravoInputSchema
5611
5619
  }),
@@ -5614,8 +5622,8 @@ var MCP_PROTOCOL_TOOL_DEFINITIONS = [
5614
5622
  actionId: "continuum-dao.cast-vote-delta",
5615
5623
  protocolId: "continuum-dao",
5616
5624
  chainCategory: "evm",
5617
- description: "Build ContinuumDAO.castVoteWithReasonAndParams. weights must be nOptions + 1 (final slot is NOTA).",
5618
- prerequisites: ["keyGen", "proposalId", "weights including NOTA"],
5625
+ description: "Build ContinuumDAO.castVoteWithReasonAndParams. weights must be nOptions + 1 (final slot is NOTA). Same Active / snapshot / hasVoted gates as Bravo.",
5626
+ prerequisites: ["keyGen", "proposalId", "weights including NOTA", "Active proposal", "snapshot votes > 0"],
5619
5627
  handler: { importPath: "protocols/evm/continuum-dao", exportName: "buildEvmMultisignBodyContinuumDaoCastVoteDelta" },
5620
5628
  inputZod: mcpContinuumDaoCastVoteDeltaInputSchema
5621
5629
  }),
@@ -9575,15 +9583,18 @@ var UNSET = {
9575
9583
  rewards: zeroAddress,
9576
9584
  governor: zeroAddress
9577
9585
  };
9586
+ var CTM_TOKEN_ADDRESS = getAddress("0x2026027054F5beBCEB650aBD62dC623e327658e7");
9587
+ var VOTING_ESCROW_LINEA_ADDRESS = getAddress("0x221EC90B3B083A8501A37bdeb7035CeaedF3C31f");
9578
9588
  var CONTINUUM_DAO_DEPLOYMENTS = {
9579
- [CONTINUUM_DAO_LINEA_CHAIN_ID]: { ...UNSET },
9589
+ [CONTINUUM_DAO_LINEA_CHAIN_ID]: {
9590
+ ...UNSET,
9591
+ ctm: CTM_TOKEN_ADDRESS,
9592
+ votingEscrow: VOTING_ESCROW_LINEA_ADDRESS
9593
+ },
9580
9594
  [CONTINUUM_DAO_LINEA_SEPOLIA_CHAIN_ID]: { ...UNSET },
9581
9595
  [CONTINUUM_DAO_ETHEREUM_CHAIN_ID]: {
9582
- ctm: zeroAddress,
9583
- votingEscrow: zeroAddress,
9584
- nodeProperties: zeroAddress,
9585
- rewards: zeroAddress,
9586
- governor: zeroAddress
9596
+ ...UNSET,
9597
+ ctm: CTM_TOKEN_ADDRESS
9587
9598
  }
9588
9599
  };
9589
9600
  function isConfiguredAddress(addr) {
@@ -9667,7 +9678,7 @@ var continuumDaoProtocolModule = {
9667
9678
  { 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: {} },
9668
9679
  { 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" } } },
9669
9680
  { 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" } } },
9670
- { id: "continuum-dao.attach", protocolId: CONTINUUM_DAO_PROTOCOL_ID, chainCategory: "evm", description: "Attach veCTM to the node (authority KeyGen)", 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" } } },
9681
+ { 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" } } },
9671
9682
  { 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" } } },
9672
9683
  { 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" } } },
9673
9684
  { 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" } } },
@@ -11161,7 +11172,7 @@ var PROTOCOL_SUPPORT_ADVISORS = {
11161
11172
  if (ve) tokens.push({ address: ve, symbol: "veCTM", roles: ["position_nft"] });
11162
11173
  return {
11163
11174
  tokens,
11164
- notes: tokens.length === 0 ? "ContinuumDAO addresses are placeholders until redeploy. Lock/attach/governance stay Linea-only. Prefer live GET /protocol/dao. For \u201Cwhat proposals are live now?\u201D use ctm_continuum_dao_fetch_live_proposals (not fetch_proposals). Propose requires getVotes >= live proposalThreshold() (max of 1000e18 ve power and 1% of total votes). Bravo empty actions insert a KeyGen no-op; Delta votes need nOptions+1 weights (last is NOTA). No billing legs. After propose is mined, ctm_continuum_dao_register_proposal. Queue is not implemented." : `Default ContinuumDAO assets: ${listContinuumDaoDefaultAssets().filter((a) => a.chainId === chainId).map((a) => a.symbol).join(", ")}. Lock/attach/governance stay Linea-only. For \u201Cwhat proposals are live now?\u201D use ctm_continuum_dao_fetch_live_proposals. Propose requires getVotes >= live proposalThreshold() (max of 1000e18 ve power and 1% of total votes). Bravo empty actions insert a KeyGen no-op; Delta votes need nOptions+1 weights (last is NOTA). No billing legs. After propose is mined, ctm_continuum_dao_register_proposal. Queue is not implemented.`
11175
+ notes: tokens.length === 0 ? "ContinuumDAO addresses are placeholders until redeploy. Lock/attach/governance stay Linea-only. Create lock needs >= 1 CTM (live minimumLock) and 1\u2013208 weeks. Prefer live GET /protocol/dao. For \u201Cwhat proposals are live now?\u201D use ctm_continuum_dao_fetch_live_proposals (not fetch_proposals). Propose requires getVotes >= live proposalThreshold() (max of 1000e18 ve power and 1% of total votes). Bravo empty actions insert a KeyGen no-op; Delta votes need nOptions+1 weights (last is NOTA). No billing legs. After propose is mined, ctm_continuum_dao_register_proposal. Queue is not implemented." : `Default ContinuumDAO assets: ${listContinuumDaoDefaultAssets().filter((a) => a.chainId === chainId).map((a) => a.symbol).join(", ")}. Lock/attach/governance stay Linea-only. Create lock needs >= 1 CTM (live minimumLock) and 1\u2013208 weeks. For \u201Cwhat proposals are live now?\u201D use ctm_continuum_dao_fetch_live_proposals. Propose requires getVotes >= live proposalThreshold() (max of 1000e18 ve power and 1% of total votes). Bravo empty actions insert a KeyGen no-op; Delta votes need nOptions+1 weights (last is NOTA). No billing legs. After propose is mined, ctm_continuum_dao_register_proposal. Queue is not implemented.`
11165
11176
  };
11166
11177
  }
11167
11178
  }),