@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
@@ -1066,7 +1066,9 @@ var evmAddressSchema = zod.z.string().min(1).describe("EVM address (0x-prefixed,
1066
1066
  var keyGenSchema = zod.z.object({
1067
1067
  pubkeyhex: zod.z.string().min(1).describe("MPC secp256k1 public key hex (required for multiSignRequest pubKey)"),
1068
1068
  keylist: zod.z.array(zod.z.string()).optional().describe("Key list on the sign request"),
1069
- ClientKeys: zod.z.record(zod.z.string()).optional().describe("Optional client key map from keyGen")
1069
+ ClientKeys: zod.z.record(zod.z.string()).optional().describe("Optional client key map from keyGen"),
1070
+ groupId: zod.z.string().optional().describe("mpc-auth GroupId of this KeyGen (server-filled from getKeyGenGroupId)"),
1071
+ GroupId: zod.z.string().optional().describe("Alias for groupId from KeyGen result payloads")
1070
1072
  }).describe(
1071
1073
  "MPC key slice: { pubkeyhex, keylist?, ClientKeys? }. Used for pubKey/keyList on POST /multiSignRequest."
1072
1074
  );
@@ -2807,8 +2809,8 @@ var mcpMorphoMidnightRepayInputSchema = withMultisignKeySourceRefine(
2807
2809
  )
2808
2810
  );
2809
2811
  var mcpContinuumDaoCreateLockInputSchema = mcpMultisignInput({
2810
- amountHuman: zod.z.string().min(1).describe("CTM amount to lock"),
2811
- lockDurationSeconds: zod.z.union([zod.z.string(), zod.z.number()]).describe("Lock duration in seconds"),
2812
+ amountHuman: zod.z.string().min(1).describe("CTM amount to lock. Must be >= VotingEscrow.minimumLock (default 1 CTM)."),
2813
+ lockDurationSeconds: zod.z.union([zod.z.string(), zod.z.number()]).describe("Lock duration in seconds. Must be 1\u2013208 weeks (week-aligned on-chain)."),
2812
2814
  ctm: evmAddressSchema.optional(),
2813
2815
  votingEscrow: evmAddressSchema.optional()
2814
2816
  });
@@ -2825,7 +2827,7 @@ var mcpContinuumDaoIncreaseUnlockTimeInputSchema = mcpMultisignInput({
2825
2827
  });
2826
2828
  var mcpContinuumDaoSplitInputSchema = mcpMultisignInput({
2827
2829
  tokenId: zod.z.union([zod.z.string(), zod.z.number()]),
2828
- extractedHuman: zod.z.string().min(1),
2830
+ extractedHuman: zod.z.string().min(1).describe("CTM extracted into the new lock. Minimum 1 CTM; original lock must also keep 1 CTM."),
2829
2831
  votingEscrow: evmAddressSchema.optional()
2830
2832
  });
2831
2833
  var mcpContinuumDaoMergeInputSchema = mcpMultisignInput({
@@ -5451,8 +5453,14 @@ var MCP_PROTOCOL_TOOL_DEFINITIONS = [
5451
5453
  actionId: "continuum-dao.create-lock",
5452
5454
  protocolId: "continuum-dao",
5453
5455
  chainCategory: "evm",
5454
- description: "Build batch: CTM approve (if needed) + VotingEscrow.create_lock. Linea only. Do not prepend billing legs.",
5455
- prerequisites: ["keyGen", "executorAddress", "Linea RPC", "configured CTM and VotingEscrow addresses"],
5456
+ 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.",
5457
+ prerequisites: [
5458
+ "keyGen",
5459
+ "executorAddress",
5460
+ "Linea RPC",
5461
+ "amountHuman >= 1 CTM (or live minimumLock)",
5462
+ "lockDurationSeconds 1\u2013208 weeks"
5463
+ ],
5456
5464
  handler: { importPath: "protocols/evm/continuum-dao", exportName: "buildEvmMultisignBodyContinuumDaoCreateLock" },
5457
5465
  inputZod: mcpContinuumDaoCreateLockInputSchema
5458
5466
  }),
@@ -5461,8 +5469,8 @@ var MCP_PROTOCOL_TOOL_DEFINITIONS = [
5461
5469
  actionId: "continuum-dao.increase-amount",
5462
5470
  protocolId: "continuum-dao",
5463
5471
  chainCategory: "evm",
5464
- description: "Build batch: CTM approve (if needed) + increase_amount.",
5465
- prerequisites: ["keyGen", "tokenId", "Linea RPC"],
5472
+ description: "Build batch: CTM approve (if needed) + increase_amount. Refuses expired locks, zero amount, and amounts above KeyGen CTM balance.",
5473
+ prerequisites: ["keyGen", "tokenId", "unexpired lock", "Linea RPC"],
5466
5474
  handler: { importPath: "protocols/evm/continuum-dao", exportName: "buildEvmMultisignBodyContinuumDaoIncreaseAmount" },
5467
5475
  inputZod: mcpContinuumDaoIncreaseAmountInputSchema
5468
5476
  }),
@@ -5471,8 +5479,8 @@ var MCP_PROTOCOL_TOOL_DEFINITIONS = [
5471
5479
  actionId: "continuum-dao.increase-unlock-time",
5472
5480
  protocolId: "continuum-dao",
5473
5481
  chainCategory: "evm",
5474
- description: "Build increase_unlock_time. lockDurationSeconds is from the week boundary to the new unlock.",
5475
- prerequisites: ["keyGen", "tokenId", "Linea RPC"],
5482
+ 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.",
5483
+ prerequisites: ["keyGen", "tokenId", "unexpired lock", "Linea RPC"],
5476
5484
  handler: { importPath: "protocols/evm/continuum-dao", exportName: "buildEvmMultisignBodyContinuumDaoIncreaseUnlockTime" },
5477
5485
  inputZod: mcpContinuumDaoIncreaseUnlockTimeInputSchema
5478
5486
  }),
@@ -5481,8 +5489,8 @@ var MCP_PROTOCOL_TOOL_DEFINITIONS = [
5481
5489
  actionId: "continuum-dao.split",
5482
5490
  protocolId: "continuum-dao",
5483
5491
  chainCategory: "evm",
5484
- description: "Build VotingEscrow.split. Blocked on-chain while the token is node-attached.",
5485
- prerequisites: ["keyGen", "tokenId", "Linea RPC"],
5492
+ description: "Build VotingEscrow.split. New lock and remainder must each keep at least minimumLock (default 1 CTM). Blocked while node-attached or expired.",
5493
+ prerequisites: ["keyGen", "tokenId", "extractedHuman >= 1 CTM", "remainder >= 1 CTM", "unattached lock"],
5486
5494
  handler: { importPath: "protocols/evm/continuum-dao", exportName: "buildEvmMultisignBodyContinuumDaoSplit" },
5487
5495
  inputZod: mcpContinuumDaoSplitInputSchema
5488
5496
  }),
@@ -5491,8 +5499,8 @@ var MCP_PROTOCOL_TOOL_DEFINITIONS = [
5491
5499
  actionId: "continuum-dao.merge",
5492
5500
  protocolId: "continuum-dao",
5493
5501
  chainCategory: "evm",
5494
- description: "Build VotingEscrow.merge. Blocked on-chain while either token is node-attached.",
5495
- prerequisites: ["keyGen", "fromTokenId", "toTokenId", "Linea RPC"],
5502
+ description: "Build VotingEscrow.merge. Both NFTs must be owned by the KeyGen and unattached. Blocked if either token is node-attached.",
5503
+ prerequisites: ["keyGen", "fromTokenId", "toTokenId", "same owner", "neither attached"],
5496
5504
  handler: { importPath: "protocols/evm/continuum-dao", exportName: "buildEvmMultisignBodyContinuumDaoMerge" },
5497
5505
  inputZod: mcpContinuumDaoMergeInputSchema
5498
5506
  }),
@@ -5501,8 +5509,8 @@ var MCP_PROTOCOL_TOOL_DEFINITIONS = [
5501
5509
  actionId: "continuum-dao.withdraw",
5502
5510
  protocolId: "continuum-dao",
5503
5511
  chainCategory: "evm",
5504
- description: "Build VotingEscrow.withdraw for an expired, unattached lock.",
5505
- prerequisites: ["keyGen", "tokenId", "Linea RPC"],
5512
+ description: "Build VotingEscrow.withdraw for an expired, unattached lock. Refuses if still locked or node-attached.",
5513
+ prerequisites: ["keyGen", "tokenId", "lock expired", "unattached"],
5506
5514
  handler: { importPath: "protocols/evm/continuum-dao", exportName: "buildEvmMultisignBodyContinuumDaoWithdraw" },
5507
5515
  inputZod: mcpContinuumDaoTokenIdInputSchema
5508
5516
  }),
@@ -5511,8 +5519,8 @@ var MCP_PROTOCOL_TOOL_DEFINITIONS = [
5511
5519
  actionId: "continuum-dao.liquidate",
5512
5520
  protocolId: "continuum-dao",
5513
5521
  chainCategory: "evm",
5514
- description: "Build VotingEscrow.liquidate. Blocked on-chain while the token is node-attached.",
5515
- prerequisites: ["keyGen", "tokenId", "Linea RPC"],
5522
+ description: "Build VotingEscrow.liquidate. Refuses if attached, liquidations disabled, locked amount <= 100 gwei, or penalty would be zero. Expired locks withdraw instead on-chain.",
5523
+ prerequisites: ["keyGen", "tokenId", "liquidationsEnabled", "unattached"],
5516
5524
  handler: { importPath: "protocols/evm/continuum-dao", exportName: "buildEvmMultisignBodyContinuumDaoLiquidate" },
5517
5525
  inputZod: mcpContinuumDaoTokenIdInputSchema
5518
5526
  }),
@@ -5521,7 +5529,7 @@ var MCP_PROTOCOL_TOOL_DEFINITIONS = [
5521
5529
  actionId: "continuum-dao.delegate",
5522
5530
  protocolId: "continuum-dao",
5523
5531
  chainCategory: "evm",
5524
- 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.",
5532
+ 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.",
5525
5533
  prerequisites: ["keyGen", "delegatee", "Linea RPC"],
5526
5534
  followUp: ["ctm_continuum_dao_fetch_delegates", "ctm_continuum_dao_build_undelegate_multisign"],
5527
5535
  handler: { importPath: "protocols/evm/continuum-dao", exportName: "buildEvmMultisignBodyContinuumDaoDelegate" },
@@ -5532,7 +5540,7 @@ var MCP_PROTOCOL_TOOL_DEFINITIONS = [
5532
5540
  actionId: "continuum-dao.undelegate",
5533
5541
  protocolId: "continuum-dao",
5534
5542
  chainCategory: "evm",
5535
- 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.",
5543
+ 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.",
5536
5544
  prerequisites: ["keyGen", "Linea RPC"],
5537
5545
  followUp: ["ctm_continuum_dao_fetch_delegates"],
5538
5546
  handler: { importPath: "protocols/evm/continuum-dao", exportName: "buildEvmMultisignBodyContinuumDaoUndelegate" },
@@ -5543,8 +5551,8 @@ var MCP_PROTOCOL_TOOL_DEFINITIONS = [
5543
5551
  actionId: "continuum-dao.transfer",
5544
5552
  protocolId: "continuum-dao",
5545
5553
  chainCategory: "evm",
5546
- description: "Build VotingEscrow.transferFrom. Blocked on-chain while the token is node-attached.",
5547
- prerequisites: ["keyGen", "tokenId", "to", "Linea RPC"],
5554
+ description: "Build VotingEscrow.transferFrom. Refuses node-attached tokens, the zero address, and self-transfers.",
5555
+ prerequisites: ["keyGen", "tokenId", "to", "unattached"],
5548
5556
  handler: { importPath: "protocols/evm/continuum-dao", exportName: "buildEvmMultisignBodyContinuumDaoTransfer" },
5549
5557
  inputZod: mcpContinuumDaoTransferInputSchema
5550
5558
  }),
@@ -5553,8 +5561,8 @@ var MCP_PROTOCOL_TOOL_DEFINITIONS = [
5553
5561
  actionId: "continuum-dao.attach",
5554
5562
  protocolId: "continuum-dao",
5555
5563
  chainCategory: "evm",
5556
- description: "Build MultiSignAgentWallet.attachVeCtm. Authority KeyGen only. Cannot replace an attached NFT. No billing legs.",
5557
- prerequisites: ["keyGen", "nodeKey", "tokenId", "mpaWallet"],
5564
+ 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.",
5565
+ prerequisites: ["keyGen is nodeWithdrawAuthority", "owns tokenId", "this KeyGen has no attach", "mpaWallet"],
5558
5566
  handler: { importPath: "protocols/evm/continuum-dao", exportName: "buildEvmMultisignBodyContinuumDaoAttachVeCtmFromMcp" },
5559
5567
  inputZod: mcpContinuumDaoAttachInputSchema
5560
5568
  }),
@@ -5563,8 +5571,8 @@ var MCP_PROTOCOL_TOOL_DEFINITIONS = [
5563
5571
  actionId: "continuum-dao.request-detach",
5564
5572
  protocolId: "continuum-dao",
5565
5573
  chainCategory: "evm",
5566
- description: "Build NodeProperties.setNodeRemovalStatus(tokenId, true). Governance must complete detach.",
5567
- prerequisites: ["keyGen", "tokenId", "nodeProperties"],
5574
+ 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.",
5575
+ prerequisites: ["keyGen is attached owner", "tokenId attached", "detach not already requested"],
5568
5576
  handler: { importPath: "protocols/evm/continuum-dao", exportName: "buildEvmMultisignBodyContinuumDaoRequestDetach" },
5569
5577
  inputZod: mcpContinuumDaoRequestDetachInputSchema
5570
5578
  }),
@@ -5607,8 +5615,8 @@ var MCP_PROTOCOL_TOOL_DEFINITIONS = [
5607
5615
  actionId: "continuum-dao.cast-vote-bravo",
5608
5616
  protocolId: "continuum-dao",
5609
5617
  chainCategory: "evm",
5610
- description: "Build ContinuumDAO.castVote. support: 0 against, 1 for, 2 abstain.",
5611
- prerequisites: ["keyGen", "proposalId", "Active proposal"],
5618
+ 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.",
5619
+ prerequisites: ["keyGen", "proposalId", "Active proposal", "snapshot votes > 0", "hasVoted false"],
5612
5620
  handler: { importPath: "protocols/evm/continuum-dao", exportName: "buildEvmMultisignBodyContinuumDaoCastVoteBravoFromMcp" },
5613
5621
  inputZod: mcpContinuumDaoCastVoteBravoInputSchema
5614
5622
  }),
@@ -5617,8 +5625,8 @@ var MCP_PROTOCOL_TOOL_DEFINITIONS = [
5617
5625
  actionId: "continuum-dao.cast-vote-delta",
5618
5626
  protocolId: "continuum-dao",
5619
5627
  chainCategory: "evm",
5620
- description: "Build ContinuumDAO.castVoteWithReasonAndParams. weights must be nOptions + 1 (final slot is NOTA).",
5621
- prerequisites: ["keyGen", "proposalId", "weights including NOTA"],
5628
+ description: "Build ContinuumDAO.castVoteWithReasonAndParams. weights must be nOptions + 1 (final slot is NOTA). Same Active / snapshot / hasVoted gates as Bravo.",
5629
+ prerequisites: ["keyGen", "proposalId", "weights including NOTA", "Active proposal", "snapshot votes > 0"],
5622
5630
  handler: { importPath: "protocols/evm/continuum-dao", exportName: "buildEvmMultisignBodyContinuumDaoCastVoteDelta" },
5623
5631
  inputZod: mcpContinuumDaoCastVoteDeltaInputSchema
5624
5632
  }),
@@ -9578,15 +9586,18 @@ var UNSET = {
9578
9586
  rewards: viem.zeroAddress,
9579
9587
  governor: viem.zeroAddress
9580
9588
  };
9589
+ var CTM_TOKEN_ADDRESS = viem.getAddress("0x2026027054F5beBCEB650aBD62dC623e327658e7");
9590
+ var VOTING_ESCROW_LINEA_ADDRESS = viem.getAddress("0x221EC90B3B083A8501A37bdeb7035CeaedF3C31f");
9581
9591
  var CONTINUUM_DAO_DEPLOYMENTS = {
9582
- [CONTINUUM_DAO_LINEA_CHAIN_ID]: { ...UNSET },
9592
+ [CONTINUUM_DAO_LINEA_CHAIN_ID]: {
9593
+ ...UNSET,
9594
+ ctm: CTM_TOKEN_ADDRESS,
9595
+ votingEscrow: VOTING_ESCROW_LINEA_ADDRESS
9596
+ },
9583
9597
  [CONTINUUM_DAO_LINEA_SEPOLIA_CHAIN_ID]: { ...UNSET },
9584
9598
  [CONTINUUM_DAO_ETHEREUM_CHAIN_ID]: {
9585
- ctm: viem.zeroAddress,
9586
- votingEscrow: viem.zeroAddress,
9587
- nodeProperties: viem.zeroAddress,
9588
- rewards: viem.zeroAddress,
9589
- governor: viem.zeroAddress
9599
+ ...UNSET,
9600
+ ctm: CTM_TOKEN_ADDRESS
9590
9601
  }
9591
9602
  };
9592
9603
  function isConfiguredAddress(addr) {
@@ -9670,7 +9681,7 @@ var continuumDaoProtocolModule = {
9670
9681
  { 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: {} },
9671
9682
  { 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" } } },
9672
9683
  { 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" } } },
9673
- { 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" } } },
9684
+ { 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" } } },
9674
9685
  { 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" } } },
9675
9686
  { 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" } } },
9676
9687
  { 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" } } },
@@ -11164,7 +11175,7 @@ var PROTOCOL_SUPPORT_ADVISORS = {
11164
11175
  if (ve) tokens.push({ address: ve, symbol: "veCTM", roles: ["position_nft"] });
11165
11176
  return {
11166
11177
  tokens,
11167
- 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.`
11178
+ 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.`
11168
11179
  };
11169
11180
  }
11170
11181
  }),