@continuumdao/ctm-mpc-defi 0.2.53 → 0.2.55
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 +40 -13
- package/dist/agent/catalog.cjs.map +1 -1
- package/dist/agent/catalog.d.ts +21 -0
- package/dist/agent/catalog.js +40 -13
- package/dist/agent/catalog.js.map +1 -1
- package/dist/agent/skills/continuum-dao/SKILL.md +3 -3
- package/dist/protocols/evm/continuum-dao/index.cjs +311 -43
- package/dist/protocols/evm/continuum-dao/index.cjs.map +1 -1
- package/dist/protocols/evm/continuum-dao/index.d.ts +109 -8
- package/dist/protocols/evm/continuum-dao/index.js +304 -43
- 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,11 +167,6 @@ 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,
|
|
@@ -198,6 +184,160 @@ var init_constants = __esm({
|
|
|
198
184
|
CONTINUUM_DAO_MARKETPLACE_API = CONTINUUM_DAO_GOVERNANCE_API;
|
|
199
185
|
}
|
|
200
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, index) {
|
|
262
|
+
const explicit = String(inp?.name || "").trim();
|
|
263
|
+
return {
|
|
264
|
+
name: explicit || `arg${index}`,
|
|
265
|
+
type: String(inp?.type || ""),
|
|
266
|
+
value: String(inp?.value ?? "")
|
|
267
|
+
};
|
|
268
|
+
}
|
|
269
|
+
function normalizeAction(action) {
|
|
270
|
+
const network = action.network || {};
|
|
271
|
+
return {
|
|
272
|
+
network: {
|
|
273
|
+
name: String(network.name || ""),
|
|
274
|
+
label: String(network.label || ""),
|
|
275
|
+
chainId: String(network.chainId || ""),
|
|
276
|
+
c3governor: checksumOrEmpty(network.c3governor)
|
|
277
|
+
},
|
|
278
|
+
target: checksumOrEmpty(action.target),
|
|
279
|
+
value: String(action.value || "0"),
|
|
280
|
+
signature: String(action.signature || ""),
|
|
281
|
+
inputs: (action.inputs || []).map((inp, index) => normalizeInput(inp, index))
|
|
282
|
+
};
|
|
283
|
+
}
|
|
284
|
+
function assertProposalCatalogConstants() {
|
|
285
|
+
if (!CONTINUUM_DAO_GOVERNANCE_API.startsWith("https://")) {
|
|
286
|
+
throw new Error("CONTINUUM_DAO_GOVERNANCE_API is not configured.");
|
|
287
|
+
}
|
|
288
|
+
if (!isConfiguredAddress(CONTINUUM_DAO_LINEA_GOVERNOR_ADDRESS)) {
|
|
289
|
+
throw new Error("Linea governor constant is not configured.");
|
|
290
|
+
}
|
|
291
|
+
const network = CONTINUUM_DAO_LINEA_CATALOG_NETWORK;
|
|
292
|
+
if (!network.name || !network.label || !network.chainId || !isConfiguredAddress(network.c3governor)) {
|
|
293
|
+
throw new Error("Linea catalog network constant is not configured.");
|
|
294
|
+
}
|
|
295
|
+
}
|
|
296
|
+
function proposalCatalogDocument(body) {
|
|
297
|
+
const doc = {
|
|
298
|
+
onchainId: String(body.onchainId || ""),
|
|
299
|
+
title: String(body.title || ""),
|
|
300
|
+
description: String(body.description || ""),
|
|
301
|
+
proposer: checksumOrEmpty(body.proposer),
|
|
302
|
+
forumKey: String(body.forumKey || ""),
|
|
303
|
+
type: Number(body.type ?? 0),
|
|
304
|
+
configuration: body.configuration,
|
|
305
|
+
pendingOnChain: body.pendingOnChain === true
|
|
306
|
+
};
|
|
307
|
+
if (body.configuration === 1) {
|
|
308
|
+
doc.nWinners = Number(body.nWinners ?? 0);
|
|
309
|
+
doc.options = (body.options || []).map((option) => ({
|
|
310
|
+
label: String(option.label || ""),
|
|
311
|
+
actions: (option.actions || []).map(normalizeAction)
|
|
312
|
+
}));
|
|
313
|
+
} else {
|
|
314
|
+
doc.actions = (body.actions || []).map(normalizeAction);
|
|
315
|
+
}
|
|
316
|
+
return doc;
|
|
317
|
+
}
|
|
318
|
+
function proposalCatalogCanonical(body) {
|
|
319
|
+
return stableJson(proposalCatalogDocument(body));
|
|
320
|
+
}
|
|
321
|
+
function stampLineaCatalogActions(actions) {
|
|
322
|
+
return (actions || []).map(
|
|
323
|
+
(action) => normalizeAction({
|
|
324
|
+
...action,
|
|
325
|
+
network: { ...CONTINUUM_DAO_LINEA_CATALOG_NETWORK }
|
|
326
|
+
})
|
|
327
|
+
);
|
|
328
|
+
}
|
|
329
|
+
var CONTINUUM_DAO_LINEA_CATALOG_NETWORK;
|
|
330
|
+
var init_proposalCatalog = __esm({
|
|
331
|
+
"src/protocols/evm/continuum-dao/proposalCatalog.ts"() {
|
|
332
|
+
init_constants();
|
|
333
|
+
CONTINUUM_DAO_LINEA_CATALOG_NETWORK = {
|
|
334
|
+
name: "linea",
|
|
335
|
+
label: "Linea",
|
|
336
|
+
chainId: "59144",
|
|
337
|
+
c3governor: getAddress("0x58B610a359c870E0fc941139821a51F5aa23f14E")
|
|
338
|
+
};
|
|
339
|
+
}
|
|
340
|
+
});
|
|
201
341
|
function defiEvmTransport(rpcUrl, opts) {
|
|
202
342
|
const url = rpcUrl.trim();
|
|
203
343
|
return http(url, opts);
|
|
@@ -1108,7 +1248,7 @@ function typeLabel(type) {
|
|
|
1108
1248
|
const n = Number(type);
|
|
1109
1249
|
return Number.isFinite(n) && PROPOSAL_TYPE_LABELS[n] ? PROPOSAL_TYPE_LABELS[n] : str(type, "Unknown");
|
|
1110
1250
|
}
|
|
1111
|
-
function explainProposalRecord(raw) {
|
|
1251
|
+
function explainProposalRecord(raw, committeeAddresses) {
|
|
1112
1252
|
const row = asRecord(raw);
|
|
1113
1253
|
if (!row) throw new Error("explain_proposal: empty proposal");
|
|
1114
1254
|
const onchainId = str(row.onchainId ?? row.onchain_id ?? row.proposalId);
|
|
@@ -1140,7 +1280,7 @@ function explainProposalRecord(raw) {
|
|
|
1140
1280
|
risks.push("Empty description with on-chain actions.");
|
|
1141
1281
|
}
|
|
1142
1282
|
const proposer = str(row.proposer);
|
|
1143
|
-
const committeeProposer =
|
|
1283
|
+
const committeeProposer = addressInCommitteeList(proposer, committeeAddresses ?? []);
|
|
1144
1284
|
const lines = [];
|
|
1145
1285
|
lines.push(`#${row.id ?? "\u2014"} ${str(row.title, "Untitled")} (${t}, ${configuration === "delta" ? "Delta" : "Bravo"}).`);
|
|
1146
1286
|
if (committeeProposer) {
|
|
@@ -1203,9 +1343,10 @@ async function withForumSection(out, forumUrl) {
|
|
|
1203
1343
|
}
|
|
1204
1344
|
}
|
|
1205
1345
|
async function continuumDaoExplainProposal(args) {
|
|
1346
|
+
const committeeAddresses = await fetchContinuumDaoCommitteeAddresses();
|
|
1206
1347
|
if (args.id != null && String(args.id).trim() !== "") {
|
|
1207
1348
|
const { proposal } = await continuumDaoFetchProposal({ id: args.id });
|
|
1208
|
-
return withForumSection(explainProposalRecord(proposal), args.forumUrl);
|
|
1349
|
+
return withForumSection(explainProposalRecord(proposal, committeeAddresses), args.forumUrl);
|
|
1209
1350
|
}
|
|
1210
1351
|
const want = (args.onchainId ?? "").trim();
|
|
1211
1352
|
if (!want) throw new Error("explain_proposal: pass id or onchainId");
|
|
@@ -1219,14 +1360,14 @@ async function continuumDaoExplainProposal(args) {
|
|
|
1219
1360
|
const id = asRecord(hit)?.id;
|
|
1220
1361
|
if (id != null) {
|
|
1221
1362
|
const { proposal } = await continuumDaoFetchProposal({ id: Number(id) });
|
|
1222
|
-
return withForumSection(explainProposalRecord(proposal), args.forumUrl);
|
|
1363
|
+
return withForumSection(explainProposalRecord(proposal, committeeAddresses), args.forumUrl);
|
|
1223
1364
|
}
|
|
1224
|
-
return withForumSection(explainProposalRecord(hit), args.forumUrl);
|
|
1365
|
+
return withForumSection(explainProposalRecord(hit, committeeAddresses), args.forumUrl);
|
|
1225
1366
|
}
|
|
1226
1367
|
var PROPOSAL_TYPE_LABELS, APPROVE_RE, DENY_SIG_RE, LINEA_HOME_CHAIN_IDS;
|
|
1227
1368
|
var init_explainProposal = __esm({
|
|
1228
1369
|
"src/protocols/evm/continuum-dao/explainProposal.ts"() {
|
|
1229
|
-
|
|
1370
|
+
init_committeeList();
|
|
1230
1371
|
init_forum();
|
|
1231
1372
|
init_governance();
|
|
1232
1373
|
PROPOSAL_TYPE_LABELS = ["Admin", "Constitution", "Decision", "Election", "Treasury"];
|
|
@@ -1572,7 +1713,7 @@ function summarizeNote(args) {
|
|
|
1572
1713
|
return parts.join(" ");
|
|
1573
1714
|
}
|
|
1574
1715
|
function votingPowerShortfallBody(args) {
|
|
1575
|
-
const committee =
|
|
1716
|
+
const committee = addressInCommitteeList(args.account, args.committeeAddresses ?? []) ? " This is a ContinuumDAO Committee address \u2014 Committee is not exempt from proposalThreshold()." : "";
|
|
1576
1717
|
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;
|
|
1577
1718
|
}
|
|
1578
1719
|
function votingPowerWarning(args) {
|
|
@@ -1703,7 +1844,13 @@ async function continuumDaoSimulateProposal(args) {
|
|
|
1703
1844
|
}
|
|
1704
1845
|
const executeOk = source !== "foundry_required" && batchResults.every((b) => b.ok);
|
|
1705
1846
|
const ok = canPropose && proposeOk && executeOk;
|
|
1706
|
-
const
|
|
1847
|
+
const committeeAddresses = await fetchContinuumDaoCommitteeAddresses();
|
|
1848
|
+
const warning = votingPowerWarning({
|
|
1849
|
+
account,
|
|
1850
|
+
votes: power.votes,
|
|
1851
|
+
threshold: power.threshold,
|
|
1852
|
+
committeeAddresses
|
|
1853
|
+
});
|
|
1707
1854
|
const foundry = buildFoundryProposalSimulatePlan({
|
|
1708
1855
|
chainId,
|
|
1709
1856
|
governor: gov,
|
|
@@ -1719,6 +1866,7 @@ async function continuumDaoSimulateProposal(args) {
|
|
|
1719
1866
|
votes: power.votes,
|
|
1720
1867
|
threshold: power.threshold,
|
|
1721
1868
|
canPropose,
|
|
1869
|
+
committeeAddresses,
|
|
1722
1870
|
...warning ? { warning } : {},
|
|
1723
1871
|
propose: proposeOk ? { ok: true } : { ok: false, error: proposeError },
|
|
1724
1872
|
execute: { ok: executeOk, source, batches: batchResults },
|
|
@@ -1728,7 +1876,7 @@ async function continuumDaoSimulateProposal(args) {
|
|
|
1728
1876
|
}
|
|
1729
1877
|
var init_simulateProposal = __esm({
|
|
1730
1878
|
"src/protocols/evm/continuum-dao/simulateProposal.ts"() {
|
|
1731
|
-
|
|
1879
|
+
init_committeeList();
|
|
1732
1880
|
init_explainProposal();
|
|
1733
1881
|
init_foundryProposalScript();
|
|
1734
1882
|
init_governance();
|
|
@@ -1926,6 +2074,56 @@ async function finalizeGov(args, to, data, fallbackGas, evmType, extra, purposeS
|
|
|
1926
2074
|
buildBatchMeta: ({ gasLimit }) => meta2(evmType, args.chainId, to, extra, gasLimit)
|
|
1927
2075
|
});
|
|
1928
2076
|
}
|
|
2077
|
+
async function assertProposalTypeMatchesForum(forumKey, type, forumUrl) {
|
|
2078
|
+
const thread = await continuumDaoForumFetchThread({ url: forumKey, index: 0, forumUrl });
|
|
2079
|
+
const section = String(thread?.section || "").trim().toLowerCase();
|
|
2080
|
+
const expected = FORUM_SECTION_TO_PROPOSAL_TYPE[section];
|
|
2081
|
+
if (expected == null) {
|
|
2082
|
+
throw new Error(
|
|
2083
|
+
`Forum thread is not in a Governance proposal section (section: ${section || "unknown"}).`
|
|
2084
|
+
);
|
|
2085
|
+
}
|
|
2086
|
+
if (expected !== type) {
|
|
2087
|
+
throw new Error(`Proposal type ${type} does not match forum section ${section} (expected type ${expected}).`);
|
|
2088
|
+
}
|
|
2089
|
+
}
|
|
2090
|
+
async function buildProposeCatalog(args) {
|
|
2091
|
+
assertProposalCatalogConstants();
|
|
2092
|
+
if (!args.description && args.description !== "") {
|
|
2093
|
+
throw new Error("description is required to register the proposal catalog.");
|
|
2094
|
+
}
|
|
2095
|
+
if (!Number.isInteger(args.type) || args.type < 0 || args.type > 4) {
|
|
2096
|
+
throw new Error("type must be 0\u20134 (Admin, Constitution, Decision, Election, Treasury).");
|
|
2097
|
+
}
|
|
2098
|
+
await assertProposalTypeMatchesForum(args.forumKey, args.type, args.forumUrl);
|
|
2099
|
+
const hashed = await continuumDaoHashProposal({
|
|
2100
|
+
chainId: args.chainId,
|
|
2101
|
+
rpcUrl: args.rpcUrl,
|
|
2102
|
+
governor: args.governor,
|
|
2103
|
+
targets: args.targets,
|
|
2104
|
+
values: args.values,
|
|
2105
|
+
calldatas: args.calldatas,
|
|
2106
|
+
description: args.descriptionHashInput
|
|
2107
|
+
});
|
|
2108
|
+
const payload = proposalCatalogDocument({
|
|
2109
|
+
onchainId: hashed.proposalId,
|
|
2110
|
+
title: args.title.trim(),
|
|
2111
|
+
description: args.description,
|
|
2112
|
+
proposer: args.proposer,
|
|
2113
|
+
forumKey: args.forumKey,
|
|
2114
|
+
type: args.type,
|
|
2115
|
+
configuration: args.configuration,
|
|
2116
|
+
pendingOnChain: true,
|
|
2117
|
+
...args.configuration === 1 ? {
|
|
2118
|
+
nWinners: args.nWinners,
|
|
2119
|
+
options: args.catalogOptions ?? (args.options || []).map((option) => ({
|
|
2120
|
+
label: option.label,
|
|
2121
|
+
actions: stampLineaCatalogActions(option.actions)
|
|
2122
|
+
}))
|
|
2123
|
+
} : { actions: args.catalogActions ?? stampLineaCatalogActions(args.actions) }
|
|
2124
|
+
});
|
|
2125
|
+
return { payload, canonical: proposalCatalogCanonical(payload) };
|
|
2126
|
+
}
|
|
1929
2127
|
async function requireProposalThreshold(args) {
|
|
1930
2128
|
const power = await continuumDaoFetchVotingPower({
|
|
1931
2129
|
chainId: args.chainId,
|
|
@@ -1935,11 +2133,13 @@ async function requireProposalThreshold(args) {
|
|
|
1935
2133
|
});
|
|
1936
2134
|
if (BigInt(power.votes) < BigInt(power.threshold)) {
|
|
1937
2135
|
const { votingPowerRefuse: votingPowerRefuse2 } = await Promise.resolve().then(() => (init_simulateProposal(), simulateProposal_exports));
|
|
2136
|
+
const committeeAddresses = await fetchContinuumDaoCommitteeAddresses();
|
|
1938
2137
|
throw new Error(
|
|
1939
2138
|
votingPowerRefuse2({
|
|
1940
2139
|
account: args.executorAddress,
|
|
1941
2140
|
votes: power.votes,
|
|
1942
|
-
threshold: power.threshold
|
|
2141
|
+
threshold: power.threshold,
|
|
2142
|
+
committeeAddresses
|
|
1943
2143
|
})
|
|
1944
2144
|
);
|
|
1945
2145
|
}
|
|
@@ -1982,7 +2182,25 @@ async function buildEvmMultisignBodyContinuumDaoProposeBravo(args) {
|
|
|
1982
2182
|
},
|
|
1983
2183
|
"continuum-dao propose bravo"
|
|
1984
2184
|
);
|
|
1985
|
-
|
|
2185
|
+
const proposalCatalog = await buildProposeCatalog({
|
|
2186
|
+
configuration: 0,
|
|
2187
|
+
title: args.title,
|
|
2188
|
+
description: args.description ?? "",
|
|
2189
|
+
type: Number(args.type),
|
|
2190
|
+
forumKey,
|
|
2191
|
+
forumUrl: args.forumUrl,
|
|
2192
|
+
proposer: args.executorAddress,
|
|
2193
|
+
chainId: args.chainId,
|
|
2194
|
+
rpcUrl: args.rpcUrl,
|
|
2195
|
+
governor: gov,
|
|
2196
|
+
targets: proposalArgs.targets,
|
|
2197
|
+
values: proposalArgs.values,
|
|
2198
|
+
calldatas: proposalArgs.calldatas,
|
|
2199
|
+
descriptionHashInput: proposalArgs.description,
|
|
2200
|
+
actions: args.actions,
|
|
2201
|
+
catalogActions: args.catalogActions
|
|
2202
|
+
});
|
|
2203
|
+
return { ...built, proposalArgs, proposalCatalog };
|
|
1986
2204
|
}
|
|
1987
2205
|
async function buildEvmMultisignBodyContinuumDaoProposeDelta(args) {
|
|
1988
2206
|
const forumKey = assertContinuumDaoForumTopicKey(args.forumKey, args.forumUrl);
|
|
@@ -2023,7 +2241,26 @@ async function buildEvmMultisignBodyContinuumDaoProposeDelta(args) {
|
|
|
2023
2241
|
},
|
|
2024
2242
|
"continuum-dao propose delta"
|
|
2025
2243
|
);
|
|
2026
|
-
|
|
2244
|
+
const proposalCatalog = await buildProposeCatalog({
|
|
2245
|
+
configuration: 1,
|
|
2246
|
+
title: args.title,
|
|
2247
|
+
description: args.description ?? "",
|
|
2248
|
+
type: Number(args.type),
|
|
2249
|
+
forumKey,
|
|
2250
|
+
forumUrl: args.forumUrl,
|
|
2251
|
+
proposer: args.executorAddress,
|
|
2252
|
+
chainId: args.chainId,
|
|
2253
|
+
rpcUrl: args.rpcUrl,
|
|
2254
|
+
governor: gov,
|
|
2255
|
+
targets: proposalArgs.targets,
|
|
2256
|
+
values: proposalArgs.values,
|
|
2257
|
+
calldatas: proposalArgs.calldatas,
|
|
2258
|
+
descriptionHashInput: proposalArgs.description,
|
|
2259
|
+
options: args.options,
|
|
2260
|
+
catalogOptions: args.catalogOptions,
|
|
2261
|
+
nWinners: Number(args.nWinners)
|
|
2262
|
+
});
|
|
2263
|
+
return { ...built, proposalArgs, proposalCatalog };
|
|
2027
2264
|
}
|
|
2028
2265
|
async function requireVoteEligible(args) {
|
|
2029
2266
|
const st = await continuumDaoFetchProposalState({
|
|
@@ -2325,7 +2562,7 @@ function bucketGovernorState(state) {
|
|
|
2325
2562
|
function asRecord2(value) {
|
|
2326
2563
|
return value && typeof value === "object" && !Array.isArray(value) ? value : null;
|
|
2327
2564
|
}
|
|
2328
|
-
function parseBackendProposal(raw) {
|
|
2565
|
+
function parseBackendProposal(raw, committeeAddresses) {
|
|
2329
2566
|
const row = asRecord2(raw);
|
|
2330
2567
|
if (!row) return null;
|
|
2331
2568
|
const onchainId = String(row.onchainId ?? row.onchain_id ?? row.proposalId ?? "").trim();
|
|
@@ -2342,7 +2579,7 @@ function parseBackendProposal(raw) {
|
|
|
2342
2579
|
configuration: typeof row.configuration === "number" ? row.configuration : void 0,
|
|
2343
2580
|
governorAddress: isConfiguredAddress(governorRaw) ? getAddress(governorRaw) : void 0,
|
|
2344
2581
|
proposer,
|
|
2345
|
-
committeeProposer: proposer ?
|
|
2582
|
+
committeeProposer: proposer ? addressInCommitteeList(proposer, committeeAddresses ?? []) : void 0
|
|
2346
2583
|
};
|
|
2347
2584
|
}
|
|
2348
2585
|
function isLegacyContinuumDaoGovernor(addr2) {
|
|
@@ -2376,7 +2613,8 @@ async function continuumDaoFetchLiveProposals(args) {
|
|
|
2376
2613
|
const completedLimit = Math.min(Math.max(Number(args.completedLimit) || 8, 0), 20);
|
|
2377
2614
|
const listed = await continuumDaoFetchProposals();
|
|
2378
2615
|
const rawList = Array.isArray(listed.proposals) ? listed.proposals : [];
|
|
2379
|
-
const
|
|
2616
|
+
const committeeAddresses = await fetchContinuumDaoCommitteeAddresses();
|
|
2617
|
+
const parsed = rawList.map((row) => parseBackendProposal(row, committeeAddresses)).filter((p) => p != null);
|
|
2380
2618
|
const ordered = [...parsed].sort((a, b) => (a.id ?? 0) - (b.id ?? 0));
|
|
2381
2619
|
const latest = ordered.length > limit ? ordered.slice(ordered.length - limit) : ordered;
|
|
2382
2620
|
const chainId = args.chainId != null && String(args.chainId).trim() !== "" ? Number(args.chainId) : NaN;
|
|
@@ -2445,21 +2683,35 @@ async function buildEvmMultisignBodyContinuumDaoCastVoteBravoFromMcp(args) {
|
|
|
2445
2683
|
}
|
|
2446
2684
|
async function continuumDaoRegisterProposal(payload) {
|
|
2447
2685
|
assertContinuumDaoForumTopicKey(payload.forumKey);
|
|
2686
|
+
const body = JSON.stringify(payload);
|
|
2448
2687
|
const res = await fetch(`${CONTINUUM_DAO_GOVERNANCE_API}/proposals/create`, {
|
|
2449
2688
|
method: "POST",
|
|
2450
2689
|
headers: { "Content-Type": "application/json" },
|
|
2451
|
-
body
|
|
2690
|
+
body
|
|
2452
2691
|
});
|
|
2453
|
-
|
|
2454
|
-
|
|
2692
|
+
const text = await res.text();
|
|
2693
|
+
if (res.status === 409) {
|
|
2694
|
+
const repair = await fetch(`${CONTINUUM_DAO_GOVERNANCE_API}/proposals/repair`, {
|
|
2695
|
+
method: "POST",
|
|
2696
|
+
headers: { "Content-Type": "application/json" },
|
|
2697
|
+
body
|
|
2698
|
+
});
|
|
2699
|
+
const repairText = await repair.text();
|
|
2700
|
+
if (!repair.ok) throw new Error(`proposals/repair: ${repair.status} ${repairText}`);
|
|
2701
|
+
return { ok: true, result: JSON.parse(repairText) };
|
|
2702
|
+
}
|
|
2703
|
+
if (!res.ok) throw new Error(`proposals/create: ${res.status} ${text}`);
|
|
2704
|
+
return { ok: true, result: JSON.parse(text) };
|
|
2455
2705
|
}
|
|
2456
|
-
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;
|
|
2706
|
+
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;
|
|
2457
2707
|
var init_governance = __esm({
|
|
2458
2708
|
"src/protocols/evm/continuum-dao/governance.ts"() {
|
|
2459
2709
|
init_defiEvmClient();
|
|
2460
2710
|
init_buildBatch();
|
|
2461
2711
|
init_constants();
|
|
2712
|
+
init_committeeList();
|
|
2462
2713
|
init_forum();
|
|
2714
|
+
init_proposalCatalog();
|
|
2463
2715
|
CONTINUUM_DAO_PROPOSE_FALLBACK = 550000n;
|
|
2464
2716
|
CONTINUUM_DAO_VOTE_FALLBACK = 220000n;
|
|
2465
2717
|
CONTINUUM_DAO_EXECUTE_FALLBACK = 800000n;
|
|
@@ -2488,6 +2740,13 @@ var init_governance = __esm({
|
|
|
2488
2740
|
"function hasVoted(uint256 proposalId, address account) view returns (bool)",
|
|
2489
2741
|
"function proposalSnapshot(uint256 proposalId) view returns (uint256)"
|
|
2490
2742
|
]);
|
|
2743
|
+
FORUM_SECTION_TO_PROPOSAL_TYPE = {
|
|
2744
|
+
admin: 0,
|
|
2745
|
+
constitution: 1,
|
|
2746
|
+
decision: 2,
|
|
2747
|
+
election: 3,
|
|
2748
|
+
treasury: 4
|
|
2749
|
+
};
|
|
2491
2750
|
GOVERNOR_STATE = {
|
|
2492
2751
|
Pending: 0,
|
|
2493
2752
|
Active: 1,
|
|
@@ -2564,6 +2823,8 @@ var continuumDaoMarketplaceProtocolModule = {
|
|
|
2564
2823
|
|
|
2565
2824
|
// src/protocols/evm/continuum-dao/index.ts
|
|
2566
2825
|
init_constants();
|
|
2826
|
+
init_committeeList();
|
|
2827
|
+
init_proposalCatalog();
|
|
2567
2828
|
|
|
2568
2829
|
// src/protocols/evm/continuum-dao/escrowRules.ts
|
|
2569
2830
|
init_constants();
|
|
@@ -5794,8 +6055,8 @@ function emptyMarketplaceIndexCache() {
|
|
|
5794
6055
|
function getMarketplaceIndexMemoryCache(chainId) {
|
|
5795
6056
|
return memoryCache.get(chainId) ?? null;
|
|
5796
6057
|
}
|
|
5797
|
-
function setMarketplaceIndexMemoryCache(chainId,
|
|
5798
|
-
memoryCache.set(chainId,
|
|
6058
|
+
function setMarketplaceIndexMemoryCache(chainId, cache2) {
|
|
6059
|
+
memoryCache.set(chainId, cache2);
|
|
5799
6060
|
}
|
|
5800
6061
|
function arg(args, key, index) {
|
|
5801
6062
|
const value = args[key] ?? args[index];
|
|
@@ -5945,9 +6206,9 @@ async function scanMarketplaceLogs(args) {
|
|
|
5945
6206
|
{ listings: prior.listings, offerings: prior.offerings, auctions: prior.auctions },
|
|
5946
6207
|
now2
|
|
5947
6208
|
);
|
|
5948
|
-
const
|
|
5949
|
-
setMarketplaceIndexMemoryCache(args.chainId,
|
|
5950
|
-
return
|
|
6209
|
+
const cache3 = { lastScannedBlock: head.toString(), ...derived2 };
|
|
6210
|
+
setMarketplaceIndexMemoryCache(args.chainId, cache3);
|
|
6211
|
+
return cache3;
|
|
5951
6212
|
}
|
|
5952
6213
|
const logs = await getLogsChunked({
|
|
5953
6214
|
client,
|
|
@@ -5964,9 +6225,9 @@ async function scanMarketplaceLogs(args) {
|
|
|
5964
6225
|
});
|
|
5965
6226
|
const now = Number((await client.getBlock({ blockTag: "latest" })).timestamp);
|
|
5966
6227
|
const derived = applyDerivedStatuses(folded, now);
|
|
5967
|
-
const
|
|
5968
|
-
setMarketplaceIndexMemoryCache(args.chainId,
|
|
5969
|
-
return
|
|
6228
|
+
const cache2 = { lastScannedBlock: head.toString(), ...derived };
|
|
6229
|
+
setMarketplaceIndexMemoryCache(args.chainId, cache2);
|
|
6230
|
+
return cache2;
|
|
5970
6231
|
}
|
|
5971
6232
|
|
|
5972
6233
|
// src/protocols/evm/continuum-dao/marketplaceCatalog.ts
|
|
@@ -6959,6 +7220,6 @@ var continuumDaoProtocolModule = {
|
|
|
6959
7220
|
};
|
|
6960
7221
|
registerProtocolModule(continuumDaoProtocolModule);
|
|
6961
7222
|
|
|
6962
|
-
export { ATTACH_VECTM_SIGNATURE, AUCTION_STATUS, BRAVO_SUPPORT_LABELS, CONTINUUM_DAO_APPROVE_FALLBACK, CONTINUUM_DAO_ATTACH_FALLBACK, CONTINUUM_DAO_CANCEL_FALLBACK,
|
|
7223
|
+
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 };
|
|
6963
7224
|
//# sourceMappingURL=index.js.map
|
|
6964
7225
|
//# sourceMappingURL=index.js.map
|