@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
|
@@ -38,15 +38,6 @@ var init_chainIdParse = __esm({
|
|
|
38
38
|
"src/chains/evm/chainIdParse.ts"() {
|
|
39
39
|
}
|
|
40
40
|
});
|
|
41
|
-
function isContinuumDaoCommitteeProposer(addr2) {
|
|
42
|
-
if (!addr2 || !isConfiguredAddress(addr2)) return false;
|
|
43
|
-
try {
|
|
44
|
-
const a = getAddress(addr2);
|
|
45
|
-
return CONTINUUM_DAO_COMMITTEE_PROPOSERS.some((c) => c === a);
|
|
46
|
-
} catch {
|
|
47
|
-
return false;
|
|
48
|
-
}
|
|
49
|
-
}
|
|
50
41
|
function isConfiguredAddress(addr2) {
|
|
51
42
|
if (!addr2?.trim()) return false;
|
|
52
43
|
try {
|
|
@@ -138,7 +129,7 @@ function listContinuumDaoDefaultAssets() {
|
|
|
138
129
|
}
|
|
139
130
|
return out;
|
|
140
131
|
}
|
|
141
|
-
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, WEEK_SECONDS, MAXTIME_SECONDS, VECTM_MAX_LOCK_WEEKS, VECTM_DEFAULT_MINIMUM_LOCK_WEI, VECTM_LIQ_MIN_LOCKED_WEI, VECTM_LIQ_PENALTY_NUM, VECTM_LIQ_PENALTY_DEN, UNSET, CTM_TOKEN_ADDRESS, VOTING_ESCROW_LINEA_ADDRESS, MULTISIGN_AGENT_WALLET_LINEA_ADDRESS, CTM_FEE_RATE_SCALE, VOTING_ESCROW_MARKETPLACE_LINEA_ADDRESS, VOTING_ESCROW_MARKETPLACE_START_BLOCK, MARKETPLACE_WETH_LINEA_ADDRESS, MARKETPLACE_USDC_LINEA_ADDRESS, CONTINUUM_DAO_MARKETPLACE_PROTOCOL_ID, CONTINUUM_DAO_LINEA_GOVERNOR_ADDRESS, CONTINUUM_DAO_LINEA_GOVERNOR_LEGACY_ADDRESS,
|
|
132
|
+
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, WEEK_SECONDS, MAXTIME_SECONDS, VECTM_MAX_LOCK_WEEKS, VECTM_DEFAULT_MINIMUM_LOCK_WEI, VECTM_LIQ_MIN_LOCKED_WEI, VECTM_LIQ_PENALTY_NUM, VECTM_LIQ_PENALTY_DEN, UNSET, CTM_TOKEN_ADDRESS, VOTING_ESCROW_LINEA_ADDRESS, MULTISIGN_AGENT_WALLET_LINEA_ADDRESS, CTM_FEE_RATE_SCALE, VOTING_ESCROW_MARKETPLACE_LINEA_ADDRESS, VOTING_ESCROW_MARKETPLACE_START_BLOCK, MARKETPLACE_WETH_LINEA_ADDRESS, MARKETPLACE_USDC_LINEA_ADDRESS, CONTINUUM_DAO_MARKETPLACE_PROTOCOL_ID, CONTINUUM_DAO_LINEA_GOVERNOR_ADDRESS, CONTINUUM_DAO_LINEA_GOVERNOR_LEGACY_ADDRESS, CONTINUUM_DAO_DEPLOYMENTS, CONTINUUM_DAO_GOVERNANCE_API, CONTINUUM_DAO_MARKETPLACE_API;
|
|
142
133
|
var init_constants = __esm({
|
|
143
134
|
"src/protocols/evm/continuum-dao/constants.ts"() {
|
|
144
135
|
init_chainIdParse();
|
|
@@ -176,16 +167,12 @@ var init_constants = __esm({
|
|
|
176
167
|
CONTINUUM_DAO_MARKETPLACE_PROTOCOL_ID = "continuum-dao-marketplace";
|
|
177
168
|
CONTINUUM_DAO_LINEA_GOVERNOR_ADDRESS = getAddress("0x76FF2CB03175900F1D83328C82D27EA9aeaF2355");
|
|
178
169
|
CONTINUUM_DAO_LINEA_GOVERNOR_LEGACY_ADDRESS = getAddress("0x4800F9f1dC1b6daCA841B71E0531F547D374168E");
|
|
179
|
-
CONTINUUM_DAO_COMMITTEE_PROPOSERS = [
|
|
180
|
-
getAddress("0xd23eecBe0362F36b254F774C274823Cbfc482a10"),
|
|
181
|
-
getAddress("0x482cdCbdd72ef307997153Ee7eb627B7a2348d34"),
|
|
182
|
-
getAddress("0x14C189354702b7f2aC7b19e61522A41632226BD8")
|
|
183
|
-
];
|
|
184
170
|
CONTINUUM_DAO_DEPLOYMENTS = {
|
|
185
171
|
[CONTINUUM_DAO_LINEA_CHAIN_ID]: {
|
|
186
172
|
...UNSET,
|
|
187
173
|
ctm: CTM_TOKEN_ADDRESS,
|
|
188
|
-
votingEscrow: VOTING_ESCROW_LINEA_ADDRESS
|
|
174
|
+
votingEscrow: VOTING_ESCROW_LINEA_ADDRESS,
|
|
175
|
+
governor: CONTINUUM_DAO_LINEA_GOVERNOR_ADDRESS
|
|
189
176
|
},
|
|
190
177
|
[CONTINUUM_DAO_LINEA_SEPOLIA_CHAIN_ID]: { ...UNSET },
|
|
191
178
|
[CONTINUUM_DAO_ETHEREUM_CHAIN_ID]: {
|
|
@@ -197,6 +184,159 @@ var init_constants = __esm({
|
|
|
197
184
|
CONTINUUM_DAO_MARKETPLACE_API = CONTINUUM_DAO_GOVERNANCE_API;
|
|
198
185
|
}
|
|
199
186
|
});
|
|
187
|
+
function docsBaseUrl() {
|
|
188
|
+
const raw = (typeof process !== "undefined" ? process.env.CONTINUUM_DOCS_BASE_URL : "")?.trim() || DEFAULT_DOCS_BASE;
|
|
189
|
+
return raw.replace(/\/+$/, "");
|
|
190
|
+
}
|
|
191
|
+
function parseCommitteeAddressesFromConstitution(markdown) {
|
|
192
|
+
const text = String(markdown || "");
|
|
193
|
+
const start = text.search(/^### Committee List\s*$/m);
|
|
194
|
+
if (start < 0) return [];
|
|
195
|
+
const lines = text.slice(start).split("\n");
|
|
196
|
+
const addresses = [];
|
|
197
|
+
for (let i = 1; i < lines.length; i += 1) {
|
|
198
|
+
const line = lines[i] ?? "";
|
|
199
|
+
if (/^#{1,6}\s/.test(line)) break;
|
|
200
|
+
const trimmed = line.trim();
|
|
201
|
+
if (!trimmed.startsWith("|")) continue;
|
|
202
|
+
if (/^\|\s*[-:]+\s*\|/.test(trimmed)) continue;
|
|
203
|
+
if (/^\|\s*Name\s*\|/i.test(trimmed)) continue;
|
|
204
|
+
const match = trimmed.match(/0x[a-fA-F0-9]{40}/);
|
|
205
|
+
if (!match) continue;
|
|
206
|
+
try {
|
|
207
|
+
addresses.push(getAddress(match[0]));
|
|
208
|
+
} catch {
|
|
209
|
+
}
|
|
210
|
+
}
|
|
211
|
+
return addresses;
|
|
212
|
+
}
|
|
213
|
+
function addressInCommitteeList(addr2, addresses) {
|
|
214
|
+
if (!addr2 || addresses.length === 0) return false;
|
|
215
|
+
try {
|
|
216
|
+
const checksummed = getAddress(addr2);
|
|
217
|
+
return addresses.some((item) => getAddress(item) === checksummed);
|
|
218
|
+
} catch {
|
|
219
|
+
return false;
|
|
220
|
+
}
|
|
221
|
+
}
|
|
222
|
+
async function fetchContinuumDaoCommitteeAddresses() {
|
|
223
|
+
const now = Date.now();
|
|
224
|
+
if (cache && cache.expires > now) return cache.addresses;
|
|
225
|
+
const url = `${docsBaseUrl()}/${CONSTITUTION_PATH}`;
|
|
226
|
+
try {
|
|
227
|
+
const res = await fetch(url, { cache: "no-store" });
|
|
228
|
+
if (!res.ok) throw new Error(`constitution: ${res.status}`);
|
|
229
|
+
const markdown = await res.text();
|
|
230
|
+
const addresses = parseCommitteeAddressesFromConstitution(markdown);
|
|
231
|
+
cache = { expires: now + CACHE_TTL_MS, addresses };
|
|
232
|
+
return addresses;
|
|
233
|
+
} catch {
|
|
234
|
+
return [];
|
|
235
|
+
}
|
|
236
|
+
}
|
|
237
|
+
function resetContinuumDaoCommitteeCache() {
|
|
238
|
+
cache = null;
|
|
239
|
+
}
|
|
240
|
+
var DEFAULT_DOCS_BASE, CONSTITUTION_PATH, CACHE_TTL_MS, cache;
|
|
241
|
+
var init_committeeList = __esm({
|
|
242
|
+
"src/protocols/evm/continuum-dao/committeeList.ts"() {
|
|
243
|
+
DEFAULT_DOCS_BASE = "https://docs.continuumdao.org";
|
|
244
|
+
CONSTITUTION_PATH = "ContinuumDAO/Governance/Constitution.md";
|
|
245
|
+
CACHE_TTL_MS = 5 * 60 * 1e3;
|
|
246
|
+
cache = null;
|
|
247
|
+
}
|
|
248
|
+
});
|
|
249
|
+
function stableJson(value) {
|
|
250
|
+
if (value === null || typeof value !== "object") return JSON.stringify(value);
|
|
251
|
+
if (Array.isArray(value)) return `[${value.map((item) => stableJson(item)).join(",")}]`;
|
|
252
|
+
const record = value;
|
|
253
|
+
const keys = Object.keys(record).sort();
|
|
254
|
+
return `{${keys.map((key) => `${JSON.stringify(key)}:${stableJson(record[key])}`).join(",")}}`;
|
|
255
|
+
}
|
|
256
|
+
function checksumOrEmpty(value) {
|
|
257
|
+
const raw = String(value || "").trim();
|
|
258
|
+
if (!raw) return "";
|
|
259
|
+
return getAddress(raw);
|
|
260
|
+
}
|
|
261
|
+
function normalizeInput(inp) {
|
|
262
|
+
return {
|
|
263
|
+
name: String(inp?.name || ""),
|
|
264
|
+
type: String(inp?.type || ""),
|
|
265
|
+
value: String(inp?.value ?? "")
|
|
266
|
+
};
|
|
267
|
+
}
|
|
268
|
+
function normalizeAction(action) {
|
|
269
|
+
const network = action.network || {};
|
|
270
|
+
return {
|
|
271
|
+
network: {
|
|
272
|
+
name: String(network.name || ""),
|
|
273
|
+
label: String(network.label || ""),
|
|
274
|
+
chainId: String(network.chainId || ""),
|
|
275
|
+
c3governor: checksumOrEmpty(network.c3governor)
|
|
276
|
+
},
|
|
277
|
+
target: checksumOrEmpty(action.target),
|
|
278
|
+
value: String(action.value || "0"),
|
|
279
|
+
signature: String(action.signature || ""),
|
|
280
|
+
inputs: (action.inputs || []).map(normalizeInput)
|
|
281
|
+
};
|
|
282
|
+
}
|
|
283
|
+
function assertProposalCatalogConstants() {
|
|
284
|
+
if (!CONTINUUM_DAO_GOVERNANCE_API.startsWith("https://")) {
|
|
285
|
+
throw new Error("CONTINUUM_DAO_GOVERNANCE_API is not configured.");
|
|
286
|
+
}
|
|
287
|
+
if (!isConfiguredAddress(CONTINUUM_DAO_LINEA_GOVERNOR_ADDRESS)) {
|
|
288
|
+
throw new Error("Linea governor constant is not configured.");
|
|
289
|
+
}
|
|
290
|
+
const network = CONTINUUM_DAO_LINEA_CATALOG_NETWORK;
|
|
291
|
+
if (!network.name || !network.label || !network.chainId || !isConfiguredAddress(network.c3governor)) {
|
|
292
|
+
throw new Error("Linea catalog network constant is not configured.");
|
|
293
|
+
}
|
|
294
|
+
}
|
|
295
|
+
function proposalCatalogDocument(body) {
|
|
296
|
+
const doc = {
|
|
297
|
+
onchainId: String(body.onchainId || ""),
|
|
298
|
+
title: String(body.title || ""),
|
|
299
|
+
description: String(body.description || ""),
|
|
300
|
+
proposer: checksumOrEmpty(body.proposer),
|
|
301
|
+
forumKey: String(body.forumKey || ""),
|
|
302
|
+
type: Number(body.type ?? 0),
|
|
303
|
+
configuration: body.configuration,
|
|
304
|
+
pendingOnChain: body.pendingOnChain === true
|
|
305
|
+
};
|
|
306
|
+
if (body.configuration === 1) {
|
|
307
|
+
doc.nWinners = Number(body.nWinners ?? 0);
|
|
308
|
+
doc.options = (body.options || []).map((option) => ({
|
|
309
|
+
label: String(option.label || ""),
|
|
310
|
+
actions: (option.actions || []).map(normalizeAction)
|
|
311
|
+
}));
|
|
312
|
+
} else {
|
|
313
|
+
doc.actions = (body.actions || []).map(normalizeAction);
|
|
314
|
+
}
|
|
315
|
+
return doc;
|
|
316
|
+
}
|
|
317
|
+
function proposalCatalogCanonical(body) {
|
|
318
|
+
return stableJson(proposalCatalogDocument(body));
|
|
319
|
+
}
|
|
320
|
+
function stampLineaCatalogActions(actions) {
|
|
321
|
+
return (actions || []).map(
|
|
322
|
+
(action) => normalizeAction({
|
|
323
|
+
...action,
|
|
324
|
+
network: { ...CONTINUUM_DAO_LINEA_CATALOG_NETWORK }
|
|
325
|
+
})
|
|
326
|
+
);
|
|
327
|
+
}
|
|
328
|
+
var CONTINUUM_DAO_LINEA_CATALOG_NETWORK;
|
|
329
|
+
var init_proposalCatalog = __esm({
|
|
330
|
+
"src/protocols/evm/continuum-dao/proposalCatalog.ts"() {
|
|
331
|
+
init_constants();
|
|
332
|
+
CONTINUUM_DAO_LINEA_CATALOG_NETWORK = {
|
|
333
|
+
name: "linea",
|
|
334
|
+
label: "Linea",
|
|
335
|
+
chainId: "59144",
|
|
336
|
+
c3governor: getAddress("0x58B610a359c870E0fc941139821a51F5aa23f14E")
|
|
337
|
+
};
|
|
338
|
+
}
|
|
339
|
+
});
|
|
200
340
|
function defiEvmTransport(rpcUrl, opts) {
|
|
201
341
|
const url = rpcUrl.trim();
|
|
202
342
|
return http(url, opts);
|
|
@@ -944,14 +1084,19 @@ async function continuumDaoForumSignInEligible(args) {
|
|
|
944
1084
|
function assertForumSignInUsernameChoice(args) {
|
|
945
1085
|
const nodeKey = args.nodeKey?.trim() || "";
|
|
946
1086
|
const username = args.username?.trim() || "";
|
|
1087
|
+
if (!nodeKey) {
|
|
1088
|
+
throw new Error(
|
|
1089
|
+
"KeyGen forum sign-in requires nodeKey from this node, including when the operator chose a custom username. useNodeKeyUsername only selects the username."
|
|
1090
|
+
);
|
|
1091
|
+
}
|
|
947
1092
|
if (username && !FORUM_USERNAME_RE.test(username)) {
|
|
948
1093
|
throw new Error(
|
|
949
|
-
"Ask the operator for a forum username of 2\u201316 letters, numbers, periods, underscores, or hyphens. If they want the node-key name, call again with useNodeKeyUsername true and nodeKey
|
|
1094
|
+
"Ask the operator for a forum username of 2\u201316 letters, numbers, periods, underscores, or hyphens. If they want the node-key name, call again with useNodeKeyUsername true and the same nodeKey."
|
|
950
1095
|
);
|
|
951
1096
|
}
|
|
952
|
-
if (!username && !
|
|
1097
|
+
if (!username && !args.useNodeKeyUsername) {
|
|
953
1098
|
throw new Error(
|
|
954
|
-
"Ask the operator for a custom forum username (2\u201316 letters, numbers, . _ -). If they
|
|
1099
|
+
"Ask the operator for a custom forum username (2\u201316 letters, numbers, . _ -). If they decline, call again with useNodeKeyUsername true and the same nodeKey. The username will be the first 16 characters of the node key. Always pass nodeKey."
|
|
955
1100
|
);
|
|
956
1101
|
}
|
|
957
1102
|
}
|
|
@@ -1102,7 +1247,7 @@ function typeLabel(type) {
|
|
|
1102
1247
|
const n = Number(type);
|
|
1103
1248
|
return Number.isFinite(n) && PROPOSAL_TYPE_LABELS[n] ? PROPOSAL_TYPE_LABELS[n] : str(type, "Unknown");
|
|
1104
1249
|
}
|
|
1105
|
-
function explainProposalRecord(raw) {
|
|
1250
|
+
function explainProposalRecord(raw, committeeAddresses) {
|
|
1106
1251
|
const row = asRecord(raw);
|
|
1107
1252
|
if (!row) throw new Error("explain_proposal: empty proposal");
|
|
1108
1253
|
const onchainId = str(row.onchainId ?? row.onchain_id ?? row.proposalId);
|
|
@@ -1134,7 +1279,7 @@ function explainProposalRecord(raw) {
|
|
|
1134
1279
|
risks.push("Empty description with on-chain actions.");
|
|
1135
1280
|
}
|
|
1136
1281
|
const proposer = str(row.proposer);
|
|
1137
|
-
const committeeProposer =
|
|
1282
|
+
const committeeProposer = addressInCommitteeList(proposer, committeeAddresses ?? []);
|
|
1138
1283
|
const lines = [];
|
|
1139
1284
|
lines.push(`#${row.id ?? "\u2014"} ${str(row.title, "Untitled")} (${t}, ${configuration === "delta" ? "Delta" : "Bravo"}).`);
|
|
1140
1285
|
if (committeeProposer) {
|
|
@@ -1197,9 +1342,10 @@ async function withForumSection(out, forumUrl) {
|
|
|
1197
1342
|
}
|
|
1198
1343
|
}
|
|
1199
1344
|
async function continuumDaoExplainProposal(args) {
|
|
1345
|
+
const committeeAddresses = await fetchContinuumDaoCommitteeAddresses();
|
|
1200
1346
|
if (args.id != null && String(args.id).trim() !== "") {
|
|
1201
1347
|
const { proposal } = await continuumDaoFetchProposal({ id: args.id });
|
|
1202
|
-
return withForumSection(explainProposalRecord(proposal), args.forumUrl);
|
|
1348
|
+
return withForumSection(explainProposalRecord(proposal, committeeAddresses), args.forumUrl);
|
|
1203
1349
|
}
|
|
1204
1350
|
const want = (args.onchainId ?? "").trim();
|
|
1205
1351
|
if (!want) throw new Error("explain_proposal: pass id or onchainId");
|
|
@@ -1213,14 +1359,14 @@ async function continuumDaoExplainProposal(args) {
|
|
|
1213
1359
|
const id = asRecord(hit)?.id;
|
|
1214
1360
|
if (id != null) {
|
|
1215
1361
|
const { proposal } = await continuumDaoFetchProposal({ id: Number(id) });
|
|
1216
|
-
return withForumSection(explainProposalRecord(proposal), args.forumUrl);
|
|
1362
|
+
return withForumSection(explainProposalRecord(proposal, committeeAddresses), args.forumUrl);
|
|
1217
1363
|
}
|
|
1218
|
-
return withForumSection(explainProposalRecord(hit), args.forumUrl);
|
|
1364
|
+
return withForumSection(explainProposalRecord(hit, committeeAddresses), args.forumUrl);
|
|
1219
1365
|
}
|
|
1220
1366
|
var PROPOSAL_TYPE_LABELS, APPROVE_RE, DENY_SIG_RE, LINEA_HOME_CHAIN_IDS;
|
|
1221
1367
|
var init_explainProposal = __esm({
|
|
1222
1368
|
"src/protocols/evm/continuum-dao/explainProposal.ts"() {
|
|
1223
|
-
|
|
1369
|
+
init_committeeList();
|
|
1224
1370
|
init_forum();
|
|
1225
1371
|
init_governance();
|
|
1226
1372
|
PROPOSAL_TYPE_LABELS = ["Admin", "Constitution", "Decision", "Election", "Treasury"];
|
|
@@ -1566,7 +1712,7 @@ function summarizeNote(args) {
|
|
|
1566
1712
|
return parts.join(" ");
|
|
1567
1713
|
}
|
|
1568
1714
|
function votingPowerShortfallBody(args) {
|
|
1569
|
-
const committee =
|
|
1715
|
+
const committee = addressInCommitteeList(args.account, args.committeeAddresses ?? []) ? " This is a ContinuumDAO Committee address \u2014 Committee is not exempt from proposalThreshold()." : "";
|
|
1570
1716
|
return `${args.account} has veCTM voting power ${args.votes}, below live proposalThreshold() ${args.threshold}. On-chain rule: max(1000e18 ve power, 1% of total voting power). Delegation applies at this address (fetch_delegates).` + committee;
|
|
1571
1717
|
}
|
|
1572
1718
|
function votingPowerWarning(args) {
|
|
@@ -1697,7 +1843,13 @@ async function continuumDaoSimulateProposal(args) {
|
|
|
1697
1843
|
}
|
|
1698
1844
|
const executeOk = source !== "foundry_required" && batchResults.every((b) => b.ok);
|
|
1699
1845
|
const ok = canPropose && proposeOk && executeOk;
|
|
1700
|
-
const
|
|
1846
|
+
const committeeAddresses = await fetchContinuumDaoCommitteeAddresses();
|
|
1847
|
+
const warning = votingPowerWarning({
|
|
1848
|
+
account,
|
|
1849
|
+
votes: power.votes,
|
|
1850
|
+
threshold: power.threshold,
|
|
1851
|
+
committeeAddresses
|
|
1852
|
+
});
|
|
1701
1853
|
const foundry = buildFoundryProposalSimulatePlan({
|
|
1702
1854
|
chainId,
|
|
1703
1855
|
governor: gov,
|
|
@@ -1713,6 +1865,7 @@ async function continuumDaoSimulateProposal(args) {
|
|
|
1713
1865
|
votes: power.votes,
|
|
1714
1866
|
threshold: power.threshold,
|
|
1715
1867
|
canPropose,
|
|
1868
|
+
committeeAddresses,
|
|
1716
1869
|
...warning ? { warning } : {},
|
|
1717
1870
|
propose: proposeOk ? { ok: true } : { ok: false, error: proposeError },
|
|
1718
1871
|
execute: { ok: executeOk, source, batches: batchResults },
|
|
@@ -1722,7 +1875,7 @@ async function continuumDaoSimulateProposal(args) {
|
|
|
1722
1875
|
}
|
|
1723
1876
|
var init_simulateProposal = __esm({
|
|
1724
1877
|
"src/protocols/evm/continuum-dao/simulateProposal.ts"() {
|
|
1725
|
-
|
|
1878
|
+
init_committeeList();
|
|
1726
1879
|
init_explainProposal();
|
|
1727
1880
|
init_foundryProposalScript();
|
|
1728
1881
|
init_governance();
|
|
@@ -1920,6 +2073,56 @@ async function finalizeGov(args, to, data, fallbackGas, evmType, extra, purposeS
|
|
|
1920
2073
|
buildBatchMeta: ({ gasLimit }) => meta2(evmType, args.chainId, to, extra, gasLimit)
|
|
1921
2074
|
});
|
|
1922
2075
|
}
|
|
2076
|
+
async function assertProposalTypeMatchesForum(forumKey, type, forumUrl) {
|
|
2077
|
+
const thread = await continuumDaoForumFetchThread({ url: forumKey, index: 0, forumUrl });
|
|
2078
|
+
const section = String(thread?.section || "").trim().toLowerCase();
|
|
2079
|
+
const expected = FORUM_SECTION_TO_PROPOSAL_TYPE[section];
|
|
2080
|
+
if (expected == null) {
|
|
2081
|
+
throw new Error(
|
|
2082
|
+
`Forum thread is not in a Governance proposal section (section: ${section || "unknown"}).`
|
|
2083
|
+
);
|
|
2084
|
+
}
|
|
2085
|
+
if (expected !== type) {
|
|
2086
|
+
throw new Error(`Proposal type ${type} does not match forum section ${section} (expected type ${expected}).`);
|
|
2087
|
+
}
|
|
2088
|
+
}
|
|
2089
|
+
async function buildProposeCatalog(args) {
|
|
2090
|
+
assertProposalCatalogConstants();
|
|
2091
|
+
if (!args.description && args.description !== "") {
|
|
2092
|
+
throw new Error("description is required to register the proposal catalog.");
|
|
2093
|
+
}
|
|
2094
|
+
if (!Number.isInteger(args.type) || args.type < 0 || args.type > 4) {
|
|
2095
|
+
throw new Error("type must be 0\u20134 (Admin, Constitution, Decision, Election, Treasury).");
|
|
2096
|
+
}
|
|
2097
|
+
await assertProposalTypeMatchesForum(args.forumKey, args.type, args.forumUrl);
|
|
2098
|
+
const hashed = await continuumDaoHashProposal({
|
|
2099
|
+
chainId: args.chainId,
|
|
2100
|
+
rpcUrl: args.rpcUrl,
|
|
2101
|
+
governor: args.governor,
|
|
2102
|
+
targets: args.targets,
|
|
2103
|
+
values: args.values,
|
|
2104
|
+
calldatas: args.calldatas,
|
|
2105
|
+
description: args.descriptionHashInput
|
|
2106
|
+
});
|
|
2107
|
+
const payload = proposalCatalogDocument({
|
|
2108
|
+
onchainId: hashed.proposalId,
|
|
2109
|
+
title: args.title.trim(),
|
|
2110
|
+
description: args.description,
|
|
2111
|
+
proposer: args.proposer,
|
|
2112
|
+
forumKey: args.forumKey,
|
|
2113
|
+
type: args.type,
|
|
2114
|
+
configuration: args.configuration,
|
|
2115
|
+
pendingOnChain: true,
|
|
2116
|
+
...args.configuration === 1 ? {
|
|
2117
|
+
nWinners: args.nWinners,
|
|
2118
|
+
options: args.catalogOptions ?? (args.options || []).map((option) => ({
|
|
2119
|
+
label: option.label,
|
|
2120
|
+
actions: stampLineaCatalogActions(option.actions)
|
|
2121
|
+
}))
|
|
2122
|
+
} : { actions: args.catalogActions ?? stampLineaCatalogActions(args.actions) }
|
|
2123
|
+
});
|
|
2124
|
+
return { payload, canonical: proposalCatalogCanonical(payload) };
|
|
2125
|
+
}
|
|
1923
2126
|
async function requireProposalThreshold(args) {
|
|
1924
2127
|
const power = await continuumDaoFetchVotingPower({
|
|
1925
2128
|
chainId: args.chainId,
|
|
@@ -1929,11 +2132,13 @@ async function requireProposalThreshold(args) {
|
|
|
1929
2132
|
});
|
|
1930
2133
|
if (BigInt(power.votes) < BigInt(power.threshold)) {
|
|
1931
2134
|
const { votingPowerRefuse: votingPowerRefuse2 } = await Promise.resolve().then(() => (init_simulateProposal(), simulateProposal_exports));
|
|
2135
|
+
const committeeAddresses = await fetchContinuumDaoCommitteeAddresses();
|
|
1932
2136
|
throw new Error(
|
|
1933
2137
|
votingPowerRefuse2({
|
|
1934
2138
|
account: args.executorAddress,
|
|
1935
2139
|
votes: power.votes,
|
|
1936
|
-
threshold: power.threshold
|
|
2140
|
+
threshold: power.threshold,
|
|
2141
|
+
committeeAddresses
|
|
1937
2142
|
})
|
|
1938
2143
|
);
|
|
1939
2144
|
}
|
|
@@ -1976,7 +2181,25 @@ async function buildEvmMultisignBodyContinuumDaoProposeBravo(args) {
|
|
|
1976
2181
|
},
|
|
1977
2182
|
"continuum-dao propose bravo"
|
|
1978
2183
|
);
|
|
1979
|
-
|
|
2184
|
+
const proposalCatalog = await buildProposeCatalog({
|
|
2185
|
+
configuration: 0,
|
|
2186
|
+
title: args.title,
|
|
2187
|
+
description: args.description ?? "",
|
|
2188
|
+
type: Number(args.type),
|
|
2189
|
+
forumKey,
|
|
2190
|
+
forumUrl: args.forumUrl,
|
|
2191
|
+
proposer: args.executorAddress,
|
|
2192
|
+
chainId: args.chainId,
|
|
2193
|
+
rpcUrl: args.rpcUrl,
|
|
2194
|
+
governor: gov,
|
|
2195
|
+
targets: proposalArgs.targets,
|
|
2196
|
+
values: proposalArgs.values,
|
|
2197
|
+
calldatas: proposalArgs.calldatas,
|
|
2198
|
+
descriptionHashInput: proposalArgs.description,
|
|
2199
|
+
actions: args.actions,
|
|
2200
|
+
catalogActions: args.catalogActions
|
|
2201
|
+
});
|
|
2202
|
+
return { ...built, proposalArgs, proposalCatalog };
|
|
1980
2203
|
}
|
|
1981
2204
|
async function buildEvmMultisignBodyContinuumDaoProposeDelta(args) {
|
|
1982
2205
|
const forumKey = assertContinuumDaoForumTopicKey(args.forumKey, args.forumUrl);
|
|
@@ -2017,7 +2240,26 @@ async function buildEvmMultisignBodyContinuumDaoProposeDelta(args) {
|
|
|
2017
2240
|
},
|
|
2018
2241
|
"continuum-dao propose delta"
|
|
2019
2242
|
);
|
|
2020
|
-
|
|
2243
|
+
const proposalCatalog = await buildProposeCatalog({
|
|
2244
|
+
configuration: 1,
|
|
2245
|
+
title: args.title,
|
|
2246
|
+
description: args.description ?? "",
|
|
2247
|
+
type: Number(args.type),
|
|
2248
|
+
forumKey,
|
|
2249
|
+
forumUrl: args.forumUrl,
|
|
2250
|
+
proposer: args.executorAddress,
|
|
2251
|
+
chainId: args.chainId,
|
|
2252
|
+
rpcUrl: args.rpcUrl,
|
|
2253
|
+
governor: gov,
|
|
2254
|
+
targets: proposalArgs.targets,
|
|
2255
|
+
values: proposalArgs.values,
|
|
2256
|
+
calldatas: proposalArgs.calldatas,
|
|
2257
|
+
descriptionHashInput: proposalArgs.description,
|
|
2258
|
+
options: args.options,
|
|
2259
|
+
catalogOptions: args.catalogOptions,
|
|
2260
|
+
nWinners: Number(args.nWinners)
|
|
2261
|
+
});
|
|
2262
|
+
return { ...built, proposalArgs, proposalCatalog };
|
|
2021
2263
|
}
|
|
2022
2264
|
async function requireVoteEligible(args) {
|
|
2023
2265
|
const st = await continuumDaoFetchProposalState({
|
|
@@ -2319,7 +2561,7 @@ function bucketGovernorState(state) {
|
|
|
2319
2561
|
function asRecord2(value) {
|
|
2320
2562
|
return value && typeof value === "object" && !Array.isArray(value) ? value : null;
|
|
2321
2563
|
}
|
|
2322
|
-
function parseBackendProposal(raw) {
|
|
2564
|
+
function parseBackendProposal(raw, committeeAddresses) {
|
|
2323
2565
|
const row = asRecord2(raw);
|
|
2324
2566
|
if (!row) return null;
|
|
2325
2567
|
const onchainId = String(row.onchainId ?? row.onchain_id ?? row.proposalId ?? "").trim();
|
|
@@ -2336,7 +2578,7 @@ function parseBackendProposal(raw) {
|
|
|
2336
2578
|
configuration: typeof row.configuration === "number" ? row.configuration : void 0,
|
|
2337
2579
|
governorAddress: isConfiguredAddress(governorRaw) ? getAddress(governorRaw) : void 0,
|
|
2338
2580
|
proposer,
|
|
2339
|
-
committeeProposer: proposer ?
|
|
2581
|
+
committeeProposer: proposer ? addressInCommitteeList(proposer, committeeAddresses ?? []) : void 0
|
|
2340
2582
|
};
|
|
2341
2583
|
}
|
|
2342
2584
|
function isLegacyContinuumDaoGovernor(addr2) {
|
|
@@ -2370,7 +2612,8 @@ async function continuumDaoFetchLiveProposals(args) {
|
|
|
2370
2612
|
const completedLimit = Math.min(Math.max(Number(args.completedLimit) || 8, 0), 20);
|
|
2371
2613
|
const listed = await continuumDaoFetchProposals();
|
|
2372
2614
|
const rawList = Array.isArray(listed.proposals) ? listed.proposals : [];
|
|
2373
|
-
const
|
|
2615
|
+
const committeeAddresses = await fetchContinuumDaoCommitteeAddresses();
|
|
2616
|
+
const parsed = rawList.map((row) => parseBackendProposal(row, committeeAddresses)).filter((p) => p != null);
|
|
2374
2617
|
const ordered = [...parsed].sort((a, b) => (a.id ?? 0) - (b.id ?? 0));
|
|
2375
2618
|
const latest = ordered.length > limit ? ordered.slice(ordered.length - limit) : ordered;
|
|
2376
2619
|
const chainId = args.chainId != null && String(args.chainId).trim() !== "" ? Number(args.chainId) : NaN;
|
|
@@ -2447,13 +2690,15 @@ async function continuumDaoRegisterProposal(payload) {
|
|
|
2447
2690
|
if (!res.ok) throw new Error(`proposals/create: ${res.status} ${await res.text()}`);
|
|
2448
2691
|
return { ok: true, result: await res.json() };
|
|
2449
2692
|
}
|
|
2450
|
-
var CONTINUUM_DAO_PROPOSE_FALLBACK, CONTINUUM_DAO_VOTE_FALLBACK, CONTINUUM_DAO_EXECUTE_FALLBACK, CONTINUUM_DAO_CANCEL_FALLBACK, CONTINUUM_DAO_GOV_EVM_TYPES, governorWriteAbi, governorReadAbi, GOVERNOR_STATE, GOVERNOR_STATE_LABELS;
|
|
2693
|
+
var CONTINUUM_DAO_PROPOSE_FALLBACK, CONTINUUM_DAO_VOTE_FALLBACK, CONTINUUM_DAO_EXECUTE_FALLBACK, CONTINUUM_DAO_CANCEL_FALLBACK, CONTINUUM_DAO_GOV_EVM_TYPES, governorWriteAbi, governorReadAbi, FORUM_SECTION_TO_PROPOSAL_TYPE, GOVERNOR_STATE, GOVERNOR_STATE_LABELS;
|
|
2451
2694
|
var init_governance = __esm({
|
|
2452
2695
|
"src/protocols/evm/continuum-dao/governance.ts"() {
|
|
2453
2696
|
init_defiEvmClient();
|
|
2454
2697
|
init_buildBatch();
|
|
2455
2698
|
init_constants();
|
|
2699
|
+
init_committeeList();
|
|
2456
2700
|
init_forum();
|
|
2701
|
+
init_proposalCatalog();
|
|
2457
2702
|
CONTINUUM_DAO_PROPOSE_FALLBACK = 550000n;
|
|
2458
2703
|
CONTINUUM_DAO_VOTE_FALLBACK = 220000n;
|
|
2459
2704
|
CONTINUUM_DAO_EXECUTE_FALLBACK = 800000n;
|
|
@@ -2482,6 +2727,13 @@ var init_governance = __esm({
|
|
|
2482
2727
|
"function hasVoted(uint256 proposalId, address account) view returns (bool)",
|
|
2483
2728
|
"function proposalSnapshot(uint256 proposalId) view returns (uint256)"
|
|
2484
2729
|
]);
|
|
2730
|
+
FORUM_SECTION_TO_PROPOSAL_TYPE = {
|
|
2731
|
+
admin: 0,
|
|
2732
|
+
constitution: 1,
|
|
2733
|
+
decision: 2,
|
|
2734
|
+
election: 3,
|
|
2735
|
+
treasury: 4
|
|
2736
|
+
};
|
|
2485
2737
|
GOVERNOR_STATE = {
|
|
2486
2738
|
Pending: 0,
|
|
2487
2739
|
Active: 1,
|
|
@@ -2558,6 +2810,8 @@ var continuumDaoMarketplaceProtocolModule = {
|
|
|
2558
2810
|
|
|
2559
2811
|
// src/protocols/evm/continuum-dao/index.ts
|
|
2560
2812
|
init_constants();
|
|
2813
|
+
init_committeeList();
|
|
2814
|
+
init_proposalCatalog();
|
|
2561
2815
|
|
|
2562
2816
|
// src/protocols/evm/continuum-dao/escrowRules.ts
|
|
2563
2817
|
init_constants();
|
|
@@ -5788,8 +6042,8 @@ function emptyMarketplaceIndexCache() {
|
|
|
5788
6042
|
function getMarketplaceIndexMemoryCache(chainId) {
|
|
5789
6043
|
return memoryCache.get(chainId) ?? null;
|
|
5790
6044
|
}
|
|
5791
|
-
function setMarketplaceIndexMemoryCache(chainId,
|
|
5792
|
-
memoryCache.set(chainId,
|
|
6045
|
+
function setMarketplaceIndexMemoryCache(chainId, cache2) {
|
|
6046
|
+
memoryCache.set(chainId, cache2);
|
|
5793
6047
|
}
|
|
5794
6048
|
function arg(args, key, index) {
|
|
5795
6049
|
const value = args[key] ?? args[index];
|
|
@@ -5939,9 +6193,9 @@ async function scanMarketplaceLogs(args) {
|
|
|
5939
6193
|
{ listings: prior.listings, offerings: prior.offerings, auctions: prior.auctions },
|
|
5940
6194
|
now2
|
|
5941
6195
|
);
|
|
5942
|
-
const
|
|
5943
|
-
setMarketplaceIndexMemoryCache(args.chainId,
|
|
5944
|
-
return
|
|
6196
|
+
const cache3 = { lastScannedBlock: head.toString(), ...derived2 };
|
|
6197
|
+
setMarketplaceIndexMemoryCache(args.chainId, cache3);
|
|
6198
|
+
return cache3;
|
|
5945
6199
|
}
|
|
5946
6200
|
const logs = await getLogsChunked({
|
|
5947
6201
|
client,
|
|
@@ -5958,9 +6212,9 @@ async function scanMarketplaceLogs(args) {
|
|
|
5958
6212
|
});
|
|
5959
6213
|
const now = Number((await client.getBlock({ blockTag: "latest" })).timestamp);
|
|
5960
6214
|
const derived = applyDerivedStatuses(folded, now);
|
|
5961
|
-
const
|
|
5962
|
-
setMarketplaceIndexMemoryCache(args.chainId,
|
|
5963
|
-
return
|
|
6215
|
+
const cache2 = { lastScannedBlock: head.toString(), ...derived };
|
|
6216
|
+
setMarketplaceIndexMemoryCache(args.chainId, cache2);
|
|
6217
|
+
return cache2;
|
|
5964
6218
|
}
|
|
5965
6219
|
|
|
5966
6220
|
// src/protocols/evm/continuum-dao/marketplaceCatalog.ts
|
|
@@ -6953,6 +7207,6 @@ var continuumDaoProtocolModule = {
|
|
|
6953
7207
|
};
|
|
6954
7208
|
registerProtocolModule(continuumDaoProtocolModule);
|
|
6955
7209
|
|
|
6956
|
-
export { ATTACH_VECTM_SIGNATURE, AUCTION_STATUS, BRAVO_SUPPORT_LABELS, CONTINUUM_DAO_APPROVE_FALLBACK, CONTINUUM_DAO_ATTACH_FALLBACK, CONTINUUM_DAO_CANCEL_FALLBACK,
|
|
7210
|
+
export { ATTACH_VECTM_SIGNATURE, AUCTION_STATUS, BRAVO_SUPPORT_LABELS, 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_CATALOG_NETWORK, 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_MARKETPLACE_API, CONTINUUM_DAO_MARKETPLACE_PROTOCOL_ID, 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_FEE_RATE_SCALE, CTM_TOKEN_ADDRESS, CTM_TOKEN_DECIMALS, CTM_TOKEN_NAME, CTM_TOKEN_SYMBOL, FEE_TIER_NAMES, FORUM_GOVERNANCE_SECTIONS, FORUM_IDEA_SECTION, FORUM_LOGIN_DELIVERY_KIND, FOUNDRY_PROPOSAL_REQUIRED_SERVERS, GOVERNOR_STATE, GOVERNOR_STATE_LABELS, INCREASE_UNLOCK_TIME_SIGNATURE, MARKETPLACE_APPROVE_FALLBACK, MARKETPLACE_AUCTION_CREATE_FALLBACK, MARKETPLACE_BID_FALLBACK, MARKETPLACE_FULFILL_FALLBACK, MARKETPLACE_LISTING_FALLBACK, MARKETPLACE_OFFERING_FALLBACK, MARKETPLACE_SETTLE_FALLBACK, MARKETPLACE_USDC_LINEA_ADDRESS, MARKETPLACE_WETH_LINEA_ADDRESS, MARKET_ORDER_STATUS, MAXTIME_SECONDS, MULTISIGN_AGENT_WALLET_LINEA_ADDRESS, 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, VOTE_CAST_EVENT, VOTE_CAST_WITH_PARAMS_EVENT, VOTING_ESCROW_LINEA_ADDRESS, VOTING_ESCROW_MARKETPLACE_LINEA_ADDRESS, VOTING_ESCROW_MARKETPLACE_START_BLOCK, WEEK_SECONDS, addressInCommitteeList, applyDerivedStatuses, applyForumSectionCheck, applyMarketplaceEvent, applyNodeAttachments, assertContinuumDaoForumDeleteInput, assertContinuumDaoForumMarkReadInput, assertContinuumDaoForumRecentInput, assertContinuumDaoForumSearchInput, assertContinuumDaoForumTopicKey, assertContinuumDaoProposalSimulation, assertCreateLockAmount, assertCtmAmountAtLeastMinimum, assertDelegatee, assertExecutorOwnsLock, assertIncreaseAmount, assertIncreaseUnlockTime, assertLiquidate, assertLockDurationSeconds, assertMerge, assertProposalCatalogConstants, assertSplitExtracted, assertTransfer, assertUndelegateNotAlreadySelf, assertWithdraw, auctionCandidate, auctionStatusName, bravoSupportLabel, bucketGovernorState, buildBravoProposalArgs, buildDeltaProposalArgs, buildEvmMultisignBodyContinuumDaoAttachVeCtm, buildEvmMultisignBodyContinuumDaoAttachVeCtmFromMcp, buildEvmMultisignBodyContinuumDaoCancel, buildEvmMultisignBodyContinuumDaoCastVoteBravo, buildEvmMultisignBodyContinuumDaoCastVoteBravoFromMcp, buildEvmMultisignBodyContinuumDaoCastVoteDelta, buildEvmMultisignBodyContinuumDaoCreateLock, buildEvmMultisignBodyContinuumDaoDelegate, buildEvmMultisignBodyContinuumDaoExecute, buildEvmMultisignBodyContinuumDaoForumSignIn, buildEvmMultisignBodyContinuumDaoIncreaseAmount, buildEvmMultisignBodyContinuumDaoIncreaseUnlockTime, buildEvmMultisignBodyContinuumDaoLiquidate, buildEvmMultisignBodyContinuumDaoMarketplaceAuctionBid, buildEvmMultisignBodyContinuumDaoMarketplaceCancelAuction, buildEvmMultisignBodyContinuumDaoMarketplaceCreateAuction, buildEvmMultisignBodyContinuumDaoMarketplaceCreateListing, buildEvmMultisignBodyContinuumDaoMarketplaceCreateOffering, buildEvmMultisignBodyContinuumDaoMarketplaceDelist, buildEvmMultisignBodyContinuumDaoMarketplaceFulfillListing, buildEvmMultisignBodyContinuumDaoMarketplaceFulfillOffering, buildEvmMultisignBodyContinuumDaoMarketplaceRescind, buildEvmMultisignBodyContinuumDaoMarketplaceSettleAuction, buildEvmMultisignBodyContinuumDaoMerge, buildEvmMultisignBodyContinuumDaoProposeBravo, buildEvmMultisignBodyContinuumDaoProposeDelta, buildEvmMultisignBodyContinuumDaoProposeDeltaFromMcp, buildEvmMultisignBodyContinuumDaoRequestDetach, buildEvmMultisignBodyContinuumDaoSplit, buildEvmMultisignBodyContinuumDaoTransfer, buildEvmMultisignBodyContinuumDaoUndelegate, buildEvmMultisignBodyContinuumDaoWithdraw, buildFeeAlternativeSummary, buildFoundryProposalSimulatePlan, calculateMarketplaceFee, collectVotesFromLogs, computeLiquidationAmounts, continuumDaoComposeProposalAction, continuumDaoDeployment, continuumDaoExplainProposal, continuumDaoFetchDelegates, continuumDaoFetchLiveProposals, continuumDaoFetchProposal, continuumDaoFetchProposalCount, continuumDaoFetchProposalState, continuumDaoFetchProposalVoteEligibility, continuumDaoFetchProposalVotes, continuumDaoFetchProposals, continuumDaoFetchVotingPower, continuumDaoForumCreateIdea, continuumDaoForumCreateTopic, continuumDaoForumDelete, continuumDaoForumFetchPost, continuumDaoForumFetchThread, continuumDaoForumMarkRead, continuumDaoForumMarkUnread, continuumDaoForumMe, continuumDaoForumReact, continuumDaoForumRecent, continuumDaoForumReply, continuumDaoForumReplyCount, continuumDaoForumResolve, continuumDaoForumSearch, continuumDaoForumSections, continuumDaoForumSignInEligible, continuumDaoForumSignInNonce, continuumDaoForumSignOut, continuumDaoForumUnread, continuumDaoForumUrl, continuumDaoForumUserPostIds, continuumDaoHashProposal, continuumDaoMarketplaceProtocolModule, continuumDaoMpaFlag, continuumDaoMpaListing, continuumDaoMpaMailboxList, continuumDaoMpaMailboxOpen, continuumDaoMpaMailboxSend, continuumDaoMpaRetract, continuumDaoProtocolModule, continuumDaoRegisterProposal, continuumDaoSignatureText, continuumDaoSimulateProposal, continuumDaoTechnocoreBind, ctmTokenAddressOnEvmChain, decodeDeltaVoteParams, deriveAuctionStatus, emptyMarketplaceIndexCache, encodeContinuumDaoNodeInfo, encodeDeltaMetadata, encodeDeltaVoteParams, encodeGovActionCalldata, estimateBlockAtTimestamp, executableGovBatches, expectedForumSectionForProposalType, explainGovAction, explainProposalRecord, explorerBase, fetchContinuumDaoCommitteeAddresses, fetchContinuumDaoMarketplaceActivity, fetchContinuumDaoMarketplaceAuctions, fetchContinuumDaoMarketplaceConfig, fetchContinuumDaoMarketplaceFeePreview, fetchContinuumDaoMarketplaceListings, fetchContinuumDaoMarketplaceOfferings, fetchContinuumDaoMarketplaceToken, floorUnlockTimeSeconds, foldMarketplaceEvents, formatProposalSimulationFailure, foundryPlanHasSequentialExecute, foundryScriptContainsCall, getMarketplaceIndexMemoryCache, governorAddressOnEvmChain, governorWriteAbi, howVoted, isConfiguredAddress, isContinuumDaoCtmOnAssetsChain, isContinuumDaoLockChain, isContinuumDaoSupportedChainId, isContinuumDaoVeCtmOnAssetsChain, isCtmTokenSymbol, isForumIdeaSection, isGovNoOpAction, isLegacyContinuumDaoGovernor, isLineaHomeNetwork, isLiveAuctionStatus, isOpenOrder, isRemoteC3Action, isVotingEscrowContinuumName, keyGenOwnsVeCtm, listContinuumDaoDefaultAssets, listingCandidate, loadMarketplacePlanSnapshot, looksLikeProposalCatalogId, looksLikeUnixSeconds, marketplacePublicClient, marketplaceVeCtmReceivedBy, maxLockDurationSeconds, monthsOfFees, normalizeGovConfiguration, normalizeNodeInfo, orderStatusName, parseCommitteeAddressesFromConstitution, pickFeeAlternativeExample, planMarketplaceSteps, preflightAttachVeCtm, preflightCreateLock, preflightDelegate, preflightIncreaseAmount, preflightIncreaseUnlockTime, preflightLiquidate, preflightMerge, preflightRequestDetach, preflightSplit, preflightTransfer, preflightUndelegate, preflightWithdraw, proposalCatalogCanonical, proposalCatalogDocument, proposalDescriptionHash, publicClient2 as publicClient, quoteContinuumDaoMarketplaceFeeAlternative, rankMarketplaceSearchHits, readCtmBalanceWei, readMarketplaceConfigFromChain, readMarketplaceFeePreviewFromChain, readMinimumLockWei, readVeCtmLockState, requireGovernor, resetContinuumDaoCommitteeCache, resolveAttachGroupId, resolveGovernorProposalRef, resolveProposalCatalogRange, scanMarketplaceLogs, searchContinuumDaoMarketplace, setMarketplaceIndexMemoryCache, stampLineaCatalogActions, summarizeLiveProposals, summarizeProposalVotes, throwIfProposalSimulationFailed, validateAbiParameter, votingEscrowAddressOnEvmChain, votingEscrowMarketplaceAddressOnEvmChain, votingPowerAboveUntil, votingPowerRefuse, votingPowerWarning };
|
|
6957
7211
|
//# sourceMappingURL=index.js.map
|
|
6958
7212
|
//# sourceMappingURL=index.js.map
|