@continuumdao/ctm-mpc-defi 0.2.52 → 0.2.54
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.
- package/dist/agent/catalog.cjs +44 -20
- package/dist/agent/catalog.cjs.map +1 -1
- package/dist/agent/catalog.d.ts +21 -0
- package/dist/agent/catalog.js +44 -20
- package/dist/agent/catalog.js.map +1 -1
- package/dist/agent/skills/continuum-dao/SKILL.md +4 -4
- package/dist/protocols/evm/continuum-dao/index.cjs +305 -44
- package/dist/protocols/evm/continuum-dao/index.cjs.map +1 -1
- package/dist/protocols/evm/continuum-dao/index.d.ts +110 -9
- package/dist/protocols/evm/continuum-dao/index.js +298 -44
- package/dist/protocols/evm/continuum-dao/index.js.map +1 -1
- package/package.json +1 -1
package/dist/agent/catalog.d.ts
CHANGED
|
@@ -519,12 +519,30 @@ declare const evmMultisignCommonInputSchema: z.ZodObject<{
|
|
|
519
519
|
declare const multisignOutputSchema: z.ZodObject<{
|
|
520
520
|
bodyForSign: z.ZodRecord<z.ZodString, z.ZodUnknown>;
|
|
521
521
|
messageToSign: z.ZodString;
|
|
522
|
+
proposalCatalog: z.ZodOptional<z.ZodObject<{
|
|
523
|
+
payload: z.ZodRecord<z.ZodString, z.ZodUnknown>;
|
|
524
|
+
canonical: z.ZodString;
|
|
525
|
+
}, "strip", z.ZodTypeAny, {
|
|
526
|
+
payload: Record<string, unknown>;
|
|
527
|
+
canonical: string;
|
|
528
|
+
}, {
|
|
529
|
+
payload: Record<string, unknown>;
|
|
530
|
+
canonical: string;
|
|
531
|
+
}>>;
|
|
522
532
|
}, "strip", z.ZodTypeAny, {
|
|
523
533
|
bodyForSign: Record<string, unknown>;
|
|
524
534
|
messageToSign: string;
|
|
535
|
+
proposalCatalog?: {
|
|
536
|
+
payload: Record<string, unknown>;
|
|
537
|
+
canonical: string;
|
|
538
|
+
} | undefined;
|
|
525
539
|
}, {
|
|
526
540
|
bodyForSign: Record<string, unknown>;
|
|
527
541
|
messageToSign: string;
|
|
542
|
+
proposalCatalog?: {
|
|
543
|
+
payload: Record<string, unknown>;
|
|
544
|
+
canonical: string;
|
|
545
|
+
} | undefined;
|
|
528
546
|
}>;
|
|
529
547
|
/** Loose JSON object for protocol API responses passed between MCP tools. */
|
|
530
548
|
declare const jsonObjectSchema: z.ZodRecord<z.ZodString, z.ZodUnknown>;
|
|
@@ -11911,6 +11929,7 @@ declare const mcpContinuumDaoRegisterProposalInputSchema: z.ZodObject<{
|
|
|
11911
11929
|
forumKey: z.ZodString;
|
|
11912
11930
|
type: z.ZodNumber;
|
|
11913
11931
|
configuration: z.ZodUnion<[z.ZodLiteral<0>, z.ZodLiteral<1>]>;
|
|
11932
|
+
nWinners: z.ZodOptional<z.ZodNumber>;
|
|
11914
11933
|
actions: z.ZodOptional<z.ZodArray<z.ZodUnknown, "many">>;
|
|
11915
11934
|
options: z.ZodOptional<z.ZodArray<z.ZodUnknown, "many">>;
|
|
11916
11935
|
}, "strip", z.ZodTypeAny, {
|
|
@@ -11923,6 +11942,7 @@ declare const mcpContinuumDaoRegisterProposalInputSchema: z.ZodObject<{
|
|
|
11923
11942
|
onchainId: string;
|
|
11924
11943
|
actions?: unknown[] | undefined;
|
|
11925
11944
|
options?: unknown[] | undefined;
|
|
11945
|
+
nWinners?: number | undefined;
|
|
11926
11946
|
}, {
|
|
11927
11947
|
type: number;
|
|
11928
11948
|
description: string;
|
|
@@ -11933,6 +11953,7 @@ declare const mcpContinuumDaoRegisterProposalInputSchema: z.ZodObject<{
|
|
|
11933
11953
|
onchainId: string;
|
|
11934
11954
|
actions?: unknown[] | undefined;
|
|
11935
11955
|
options?: unknown[] | undefined;
|
|
11956
|
+
nWinners?: number | undefined;
|
|
11936
11957
|
}>;
|
|
11937
11958
|
declare const mcpContinuumDaoRegisterProposalOutputSchema: z.ZodObject<{
|
|
11938
11959
|
ok: z.ZodLiteral<true>;
|
package/dist/agent/catalog.js
CHANGED
|
@@ -570,7 +570,7 @@ function listContinuumDaoDefaultAssets() {
|
|
|
570
570
|
}
|
|
571
571
|
return out;
|
|
572
572
|
}
|
|
573
|
-
var CONTINUUM_DAO_PROTOCOL_ID, CONTINUUM_DAO_ETHEREUM_CHAIN_ID, CONTINUUM_DAO_LINEA_CHAIN_ID, CONTINUUM_DAO_LINEA_SEPOLIA_CHAIN_ID, CTM_TOKEN_NAME, CTM_TOKEN_SYMBOL, VECTM_TOKEN_NAME, VECTM_TOKEN_SYMBOL, CTM_TOKEN_DECIMALS, UNSET, CTM_TOKEN_ADDRESS, VOTING_ESCROW_LINEA_ADDRESS, VOTING_ESCROW_MARKETPLACE_LINEA_ADDRESS, CONTINUUM_DAO_MARKETPLACE_PROTOCOL_ID, CONTINUUM_DAO_DEPLOYMENTS;
|
|
573
|
+
var CONTINUUM_DAO_PROTOCOL_ID, CONTINUUM_DAO_ETHEREUM_CHAIN_ID, CONTINUUM_DAO_LINEA_CHAIN_ID, CONTINUUM_DAO_LINEA_SEPOLIA_CHAIN_ID, CTM_TOKEN_NAME, CTM_TOKEN_SYMBOL, VECTM_TOKEN_NAME, VECTM_TOKEN_SYMBOL, CTM_TOKEN_DECIMALS, UNSET, CTM_TOKEN_ADDRESS, VOTING_ESCROW_LINEA_ADDRESS, VOTING_ESCROW_MARKETPLACE_LINEA_ADDRESS, CONTINUUM_DAO_MARKETPLACE_PROTOCOL_ID, CONTINUUM_DAO_LINEA_GOVERNOR_ADDRESS, CONTINUUM_DAO_DEPLOYMENTS;
|
|
574
574
|
var init_constants2 = __esm({
|
|
575
575
|
"src/protocols/evm/continuum-dao/constants.ts"() {
|
|
576
576
|
CONTINUUM_DAO_PROTOCOL_ID = "continuum-dao";
|
|
@@ -596,18 +596,14 @@ var init_constants2 = __esm({
|
|
|
596
596
|
getAddress("0xe5D7C2a44FfDDf6b295A15c148167daaAf5Cf34f");
|
|
597
597
|
getAddress("0x176211869cA2b568f2A7D4EE941E073a821EE1ff");
|
|
598
598
|
CONTINUUM_DAO_MARKETPLACE_PROTOCOL_ID = "continuum-dao-marketplace";
|
|
599
|
-
getAddress("0x76FF2CB03175900F1D83328C82D27EA9aeaF2355");
|
|
599
|
+
CONTINUUM_DAO_LINEA_GOVERNOR_ADDRESS = getAddress("0x76FF2CB03175900F1D83328C82D27EA9aeaF2355");
|
|
600
600
|
getAddress("0x4800F9f1dC1b6daCA841B71E0531F547D374168E");
|
|
601
|
-
[
|
|
602
|
-
getAddress("0xd23eecBe0362F36b254F774C274823Cbfc482a10"),
|
|
603
|
-
getAddress("0x482cdCbdd72ef307997153Ee7eb627B7a2348d34"),
|
|
604
|
-
getAddress("0x14C189354702b7f2aC7b19e61522A41632226BD8")
|
|
605
|
-
];
|
|
606
601
|
CONTINUUM_DAO_DEPLOYMENTS = {
|
|
607
602
|
[CONTINUUM_DAO_LINEA_CHAIN_ID]: {
|
|
608
603
|
...UNSET,
|
|
609
604
|
ctm: CTM_TOKEN_ADDRESS,
|
|
610
|
-
votingEscrow: VOTING_ESCROW_LINEA_ADDRESS
|
|
605
|
+
votingEscrow: VOTING_ESCROW_LINEA_ADDRESS,
|
|
606
|
+
governor: CONTINUUM_DAO_LINEA_GOVERNOR_ADDRESS
|
|
611
607
|
},
|
|
612
608
|
[CONTINUUM_DAO_LINEA_SEPOLIA_CHAIN_ID]: { ...UNSET },
|
|
613
609
|
[CONTINUUM_DAO_ETHEREUM_CHAIN_ID]: {
|
|
@@ -617,6 +613,20 @@ var init_constants2 = __esm({
|
|
|
617
613
|
};
|
|
618
614
|
}
|
|
619
615
|
});
|
|
616
|
+
var init_committeeList = __esm({
|
|
617
|
+
"src/protocols/evm/continuum-dao/committeeList.ts"() {
|
|
618
|
+
}
|
|
619
|
+
});
|
|
620
|
+
var init_proposalCatalog = __esm({
|
|
621
|
+
"src/protocols/evm/continuum-dao/proposalCatalog.ts"() {
|
|
622
|
+
({
|
|
623
|
+
name: "linea",
|
|
624
|
+
label: "Linea",
|
|
625
|
+
chainId: "59144",
|
|
626
|
+
c3governor: getAddress("0x58B610a359c870E0fc941139821a51F5aa23f14E")
|
|
627
|
+
});
|
|
628
|
+
}
|
|
629
|
+
});
|
|
620
630
|
var init_forum = __esm({
|
|
621
631
|
"src/protocols/evm/continuum-dao/forum.ts"() {
|
|
622
632
|
}
|
|
@@ -1282,7 +1292,11 @@ var multisignOutputSchema = z.object({
|
|
|
1282
1292
|
bodyForSign: z.record(z.unknown()).describe(
|
|
1283
1293
|
"POST body fields without clientSig: keyList, pubKey, msgHash, msgRaw, destinationChainID, purpose, extraJSON, proposalTxParams (batch), messageHashes/messageRawBatch when N>1 txs."
|
|
1284
1294
|
),
|
|
1285
|
-
messageToSign: z.string().describe("JSON.stringify(bodyForSign) \u2014 exact string to sign before adding clientSig.")
|
|
1295
|
+
messageToSign: z.string().describe("JSON.stringify(bodyForSign) \u2014 exact string to sign before adding clientSig."),
|
|
1296
|
+
proposalCatalog: z.object({
|
|
1297
|
+
payload: z.record(z.unknown()),
|
|
1298
|
+
canonical: z.string()
|
|
1299
|
+
}).optional().describe("Unsigned POST /proposals/create body and the canonical string to sign before the multisign is submitted.")
|
|
1286
1300
|
}).describe(
|
|
1287
1301
|
"Unsigned mpc-auth multiSignRequest payload from protocol builders (used internally before management submit)."
|
|
1288
1302
|
);
|
|
@@ -3297,8 +3311,11 @@ var govOptionSchema = z.object({
|
|
|
3297
3311
|
var forumTopicKeyField = z.string().min(1).describe(
|
|
3298
3312
|
"URL of the Governance forum thread created first with ctm_continuum_dao_forum_create_topic (decision / election / treasury / constitution / admin). Must be /topic/:tid or /t/:tid. Ideas threads and the homepage are refused."
|
|
3299
3313
|
);
|
|
3314
|
+
var proposalTypeField = z.number().int().min(0).max(4).describe("0 Admin, 1 Constitution, 2 Decision, 3 Election, 4 Treasury. Must match the forum thread section.");
|
|
3300
3315
|
var mcpContinuumDaoProposeBravoInputSchema = mcpMultisignInput({
|
|
3301
3316
|
title: z.string().min(1).max(128),
|
|
3317
|
+
description: z.string().describe("Catalog description stored by POST /proposals/create."),
|
|
3318
|
+
type: proposalTypeField,
|
|
3302
3319
|
actions: z.array(govActionSchema).optional(),
|
|
3303
3320
|
governor: evmAddressSchema.optional(),
|
|
3304
3321
|
noOpTarget: evmAddressSchema.optional(),
|
|
@@ -3307,6 +3324,8 @@ var mcpContinuumDaoProposeBravoInputSchema = mcpMultisignInput({
|
|
|
3307
3324
|
});
|
|
3308
3325
|
var mcpContinuumDaoProposeDeltaInputSchema = mcpMultisignInput({
|
|
3309
3326
|
title: z.string().min(1).max(128),
|
|
3327
|
+
description: z.string().describe("Catalog description stored by POST /proposals/create."),
|
|
3328
|
+
type: proposalTypeField,
|
|
3310
3329
|
options: z.array(govOptionSchema).min(2),
|
|
3311
3330
|
nWinners: z.union([z.string(), z.number()]),
|
|
3312
3331
|
governor: evmAddressSchema.optional(),
|
|
@@ -3689,6 +3708,7 @@ var mcpContinuumDaoRegisterProposalInputSchema = z.object({
|
|
|
3689
3708
|
forumKey: forumTopicKeyField,
|
|
3690
3709
|
type: z.number().int().min(0).max(4),
|
|
3691
3710
|
configuration: z.union([z.literal(0), z.literal(1)]),
|
|
3711
|
+
nWinners: z.number().int().min(0).optional(),
|
|
3692
3712
|
actions: z.array(z.unknown()).optional(),
|
|
3693
3713
|
options: z.array(z.unknown()).optional()
|
|
3694
3714
|
});
|
|
@@ -4018,12 +4038,14 @@ var mcpContinuumDaoForumSignInEligibleOutputSchema = z.object({
|
|
|
4018
4038
|
tokenId: z.string().optional()
|
|
4019
4039
|
});
|
|
4020
4040
|
var mcpContinuumDaoForumSignInInputSchema = mcpMultisignInput({
|
|
4021
|
-
nodeKey: z.string().optional().describe(
|
|
4041
|
+
nodeKey: z.string().optional().describe(
|
|
4042
|
+
"Node key bound to this KeyGen. Always required on KeyGen forum sign-in, including when username is a custom name. The server fills it from this node when omitted. useNodeKeyUsername does not replace it."
|
|
4043
|
+
),
|
|
4022
4044
|
username: z.string().min(2).max(16).regex(/^[A-Za-z0-9._-]+$/).optional().describe(
|
|
4023
4045
|
"Custom forum username for a wallet or a KeyGen. Ask the operator before calling. 2\u201316 letters, numbers, . _ -."
|
|
4024
4046
|
),
|
|
4025
4047
|
useNodeKeyUsername: z.boolean().optional().describe(
|
|
4026
|
-
"Set true only after the operator declines a custom username. The forum assigns the first 16 characters of nodeKey."
|
|
4048
|
+
"Set true only after the operator declines a custom username. The forum assigns the first 16 characters of nodeKey as the username. Still pass nodeKey."
|
|
4027
4049
|
),
|
|
4028
4050
|
forumUrl: z.string().optional()
|
|
4029
4051
|
});
|
|
@@ -7101,7 +7123,7 @@ var MCP_PROTOCOL_TOOL_DEFINITIONS = [
|
|
|
7101
7123
|
actionId: "continuum-dao.propose-bravo",
|
|
7102
7124
|
protocolId: "continuum-dao",
|
|
7103
7125
|
chainCategory: "evm",
|
|
7104
|
-
description: "Build ContinuumDAO.propose for a Bravo (For/Against/Abstain) proposal
|
|
7126
|
+
description: "Build ContinuumDAO.propose for a Bravo (For/Against/Abstain) proposal and POST /proposals/create (pendingOnChain) before the multi-sign request is submitted. Requires description and type (0\u20134) matching the forum section. Refuses if getVotes(KeyGen) < live proposalThreshold(), the forum section does not match type, or propose() reverts. forumKey must be a Governance thread from ctm_continuum_dao_forum_create_topic. Ideas threads and the homepage are refused. Empty actions insert a no-op to the KeyGen address. Linea only. No billing legs. register_proposal is only a retry if this POST failed.",
|
|
7105
7127
|
prerequisites: [
|
|
7106
7128
|
"keyGen",
|
|
7107
7129
|
"Linea RPC",
|
|
@@ -7110,7 +7132,7 @@ var MCP_PROTOCOL_TOOL_DEFINITIONS = [
|
|
|
7110
7132
|
"forumKey from forum_create_topic",
|
|
7111
7133
|
"governor-executed actions must simulate without revert"
|
|
7112
7134
|
],
|
|
7113
|
-
followUp: [...MCP_MULTISIGN_SUBMIT_FOLLOW_UP
|
|
7135
|
+
followUp: [...MCP_MULTISIGN_SUBMIT_FOLLOW_UP],
|
|
7114
7136
|
handler: { importPath: "protocols/evm/continuum-dao", exportName: "buildEvmMultisignBodyContinuumDaoProposeBravo" },
|
|
7115
7137
|
inputZod: mcpContinuumDaoProposeBravoInputSchema
|
|
7116
7138
|
}),
|
|
@@ -7119,7 +7141,7 @@ var MCP_PROTOCOL_TOOL_DEFINITIONS = [
|
|
|
7119
7141
|
actionId: "continuum-dao.propose-delta",
|
|
7120
7142
|
protocolId: "continuum-dao",
|
|
7121
7143
|
chainCategory: "evm",
|
|
7122
|
-
description: "Build ContinuumDAO.propose for a Delta multi-option proposal
|
|
7144
|
+
description: "Build ContinuumDAO.propose for a Delta multi-option proposal and POST /proposals/create (pendingOnChain) before the multi-sign request is submitted. Requires description and type (0\u20134) matching the forum section. Refuses if getVotes(KeyGen) < live proposalThreshold(), the forum section does not match type, or propose() reverts. forumKey must be a Governance thread from ctm_continuum_dao_forum_create_topic. Empty options get a no-op so indices increment. Linea only. No billing legs.",
|
|
7123
7145
|
prerequisites: [
|
|
7124
7146
|
"keyGen",
|
|
7125
7147
|
"at least 2 options",
|
|
@@ -7128,7 +7150,7 @@ var MCP_PROTOCOL_TOOL_DEFINITIONS = [
|
|
|
7128
7150
|
"forumKey from forum_create_topic",
|
|
7129
7151
|
"governor-executed actions must simulate without revert"
|
|
7130
7152
|
],
|
|
7131
|
-
followUp: [...MCP_MULTISIGN_SUBMIT_FOLLOW_UP
|
|
7153
|
+
followUp: [...MCP_MULTISIGN_SUBMIT_FOLLOW_UP],
|
|
7132
7154
|
handler: { importPath: "protocols/evm/continuum-dao", exportName: "buildEvmMultisignBodyContinuumDaoProposeDeltaFromMcp" },
|
|
7133
7155
|
inputZod: mcpContinuumDaoProposeDeltaInputSchema
|
|
7134
7156
|
}),
|
|
@@ -7177,11 +7199,11 @@ var MCP_PROTOCOL_TOOL_DEFINITIONS = [
|
|
|
7177
7199
|
actionId: "continuum-dao.forum-sign-in",
|
|
7178
7200
|
protocolId: "continuum-dao",
|
|
7179
7201
|
chainCategory: "evm",
|
|
7180
|
-
description: "Build an EIP-712 forum login multi-sign (no EVM tx). Refuses when this node already has a live forum session for the KeyGen (getForumSession plus forum_me loggedIn) and returns that ticket instead of creating a sign request. Checks current balanceOfNFT on an owned or attached veCTM against MultiSignAgentWallet.veCtmThresholdPower and refuses if that power is short, so other nodes never enter the sign loop. Ask the operator for a custom username (2\u201316 letters, numbers, . _ -) and pass it as username. If they decline, set useNodeKeyUsername true
|
|
7202
|
+
description: "Build an EIP-712 forum login multi-sign (no EVM tx). Refuses when this node already has a live forum session for the KeyGen (getForumSession plus forum_me loggedIn) and returns that ticket instead of creating a sign request. Checks current balanceOfNFT on an owned or attached veCTM against MultiSignAgentWallet.veCtmThresholdPower and refuses if that power is short, so other nodes never enter the sign loop. Always include nodeKey from this node; a custom username does not omit it. Ask the operator for a custom username (2\u201316 letters, numbers, . _ -) and pass it as username. If they decline, set useNodeKeyUsername true; the forum assigns the first 16 characters of the node key as the username. After Get Sig, node-app stores the ticket on the node. The forum stores the verified node key on that user, including when the user already exists, which is what allows MPA Wallet Chat.",
|
|
7181
7203
|
prerequisites: [
|
|
7182
7204
|
"keyGen",
|
|
7183
7205
|
"current balanceOfNFT on an owned or attached veCTM at or above MultiSignAgentWallet.veCtmThresholdPower",
|
|
7184
|
-
"username from the operator
|
|
7206
|
+
"nodeKey from this node, plus username from the operator or useNodeKeyUsername"
|
|
7185
7207
|
],
|
|
7186
7208
|
followUp: [...MCP_MULTISIGN_SUBMIT_FOLLOW_UP, "ctm_continuum_dao_forum_me"],
|
|
7187
7209
|
handler: { importPath: "protocols/evm/continuum-dao", exportName: "buildEvmMultisignBodyContinuumDaoForumSignIn" },
|
|
@@ -9400,7 +9422,7 @@ var CORE_MCP_TOOL_DEFINITIONS = [
|
|
|
9400
9422
|
actionId: "continuum-dao.register-proposal",
|
|
9401
9423
|
protocolId: "continuum-dao",
|
|
9402
9424
|
chainCategory: "evm",
|
|
9403
|
-
description: "POST /proposals/create
|
|
9425
|
+
description: "Retry POST /proposals/create when the propose tool\u2019s optimistic catalog write failed. The node signs with Ed25519. Does not revert a chain tx.",
|
|
9404
9426
|
prerequisites: ["onchainId from hashProposal or ProposalCreated", "title", "proposer", "forumKey", "type", "configuration"],
|
|
9405
9427
|
followUp: [],
|
|
9406
9428
|
handler: { importPath: "protocols/evm/continuum-dao", exportName: "continuumDaoRegisterProposal" },
|
|
@@ -9664,7 +9686,7 @@ var CORE_MCP_TOOL_DEFINITIONS = [
|
|
|
9664
9686
|
actionId: "continuum-dao.forum-me",
|
|
9665
9687
|
protocolId: "continuum-dao",
|
|
9666
9688
|
chainCategory: "evm",
|
|
9667
|
-
description: "Current forum user, votes, canPropose (Governance), canPostIdea (Ideas), and canPostMpa (MPA Wallet Chat listings / mailbox).",
|
|
9689
|
+
description: "Current forum user, votes, canPropose (Governance), canPostIdea (Ideas), and canPostMpa (MPA Wallet Chat listings / mailbox). canPropose is governor getVotes(address, clock-1) >= proposalThreshold(). Null votes means that read failed \u2014 do not say the KeyGen has no veCTM. Attachment is get_ve_ctm_attach_status, not this flag.",
|
|
9668
9690
|
prerequisites: [],
|
|
9669
9691
|
followUp: [
|
|
9670
9692
|
"ctm_continuum_dao_forum_unread",
|
|
@@ -12352,6 +12374,8 @@ var continuumDaoMarketplaceProtocolModule = {
|
|
|
12352
12374
|
|
|
12353
12375
|
// src/protocols/evm/continuum-dao/index.ts
|
|
12354
12376
|
init_constants2();
|
|
12377
|
+
init_committeeList();
|
|
12378
|
+
init_proposalCatalog();
|
|
12355
12379
|
init_governance();
|
|
12356
12380
|
init_simulateProposal();
|
|
12357
12381
|
init_foundryProposalScript();
|
|
@@ -14360,7 +14384,7 @@ var PROTOCOL_SUPPORT_ADVISORS = {
|
|
|
14360
14384
|
if (ve) tokens.push({ address: ve, symbol: "veCTM", roles: ["position_nft"] });
|
|
14361
14385
|
return {
|
|
14362
14386
|
tokens,
|
|
14363
|
-
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). After naming a proposal, offer ctm_continuum_dao_fetch_proposal_votes to see who voted and how. 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.
|
|
14387
|
+
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). After naming a proposal, offer ctm_continuum_dao_fetch_proposal_votes to see who voted and how. 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. build_propose_* writes POST /proposals/create before the multi-sign request; register_proposal is only a retry. 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. After naming a proposal, offer ctm_continuum_dao_fetch_proposal_votes to see who voted and how. 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. build_propose_* writes POST /proposals/create before the multi-sign request; register_proposal is only a retry. Queue is not implemented.`
|
|
14364
14388
|
};
|
|
14365
14389
|
}
|
|
14366
14390
|
}),
|