@continuumdao/ctm-mpc-defi 0.2.53 → 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 +33 -12
- package/dist/agent/catalog.cjs.map +1 -1
- package/dist/agent/catalog.d.ts +21 -0
- package/dist/agent/catalog.js +33 -12
- 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 +295 -40
- 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 +288 -40
- 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,159 @@ 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) {
|
|
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
|
+
});
|
|
201
340
|
function defiEvmTransport(rpcUrl, opts) {
|
|
202
341
|
const url = rpcUrl.trim();
|
|
203
342
|
return http(url, opts);
|
|
@@ -1108,7 +1247,7 @@ function typeLabel(type) {
|
|
|
1108
1247
|
const n = Number(type);
|
|
1109
1248
|
return Number.isFinite(n) && PROPOSAL_TYPE_LABELS[n] ? PROPOSAL_TYPE_LABELS[n] : str(type, "Unknown");
|
|
1110
1249
|
}
|
|
1111
|
-
function explainProposalRecord(raw) {
|
|
1250
|
+
function explainProposalRecord(raw, committeeAddresses) {
|
|
1112
1251
|
const row = asRecord(raw);
|
|
1113
1252
|
if (!row) throw new Error("explain_proposal: empty proposal");
|
|
1114
1253
|
const onchainId = str(row.onchainId ?? row.onchain_id ?? row.proposalId);
|
|
@@ -1140,7 +1279,7 @@ function explainProposalRecord(raw) {
|
|
|
1140
1279
|
risks.push("Empty description with on-chain actions.");
|
|
1141
1280
|
}
|
|
1142
1281
|
const proposer = str(row.proposer);
|
|
1143
|
-
const committeeProposer =
|
|
1282
|
+
const committeeProposer = addressInCommitteeList(proposer, committeeAddresses ?? []);
|
|
1144
1283
|
const lines = [];
|
|
1145
1284
|
lines.push(`#${row.id ?? "\u2014"} ${str(row.title, "Untitled")} (${t}, ${configuration === "delta" ? "Delta" : "Bravo"}).`);
|
|
1146
1285
|
if (committeeProposer) {
|
|
@@ -1203,9 +1342,10 @@ async function withForumSection(out, forumUrl) {
|
|
|
1203
1342
|
}
|
|
1204
1343
|
}
|
|
1205
1344
|
async function continuumDaoExplainProposal(args) {
|
|
1345
|
+
const committeeAddresses = await fetchContinuumDaoCommitteeAddresses();
|
|
1206
1346
|
if (args.id != null && String(args.id).trim() !== "") {
|
|
1207
1347
|
const { proposal } = await continuumDaoFetchProposal({ id: args.id });
|
|
1208
|
-
return withForumSection(explainProposalRecord(proposal), args.forumUrl);
|
|
1348
|
+
return withForumSection(explainProposalRecord(proposal, committeeAddresses), args.forumUrl);
|
|
1209
1349
|
}
|
|
1210
1350
|
const want = (args.onchainId ?? "").trim();
|
|
1211
1351
|
if (!want) throw new Error("explain_proposal: pass id or onchainId");
|
|
@@ -1219,14 +1359,14 @@ async function continuumDaoExplainProposal(args) {
|
|
|
1219
1359
|
const id = asRecord(hit)?.id;
|
|
1220
1360
|
if (id != null) {
|
|
1221
1361
|
const { proposal } = await continuumDaoFetchProposal({ id: Number(id) });
|
|
1222
|
-
return withForumSection(explainProposalRecord(proposal), args.forumUrl);
|
|
1362
|
+
return withForumSection(explainProposalRecord(proposal, committeeAddresses), args.forumUrl);
|
|
1223
1363
|
}
|
|
1224
|
-
return withForumSection(explainProposalRecord(hit), args.forumUrl);
|
|
1364
|
+
return withForumSection(explainProposalRecord(hit, committeeAddresses), args.forumUrl);
|
|
1225
1365
|
}
|
|
1226
1366
|
var PROPOSAL_TYPE_LABELS, APPROVE_RE, DENY_SIG_RE, LINEA_HOME_CHAIN_IDS;
|
|
1227
1367
|
var init_explainProposal = __esm({
|
|
1228
1368
|
"src/protocols/evm/continuum-dao/explainProposal.ts"() {
|
|
1229
|
-
|
|
1369
|
+
init_committeeList();
|
|
1230
1370
|
init_forum();
|
|
1231
1371
|
init_governance();
|
|
1232
1372
|
PROPOSAL_TYPE_LABELS = ["Admin", "Constitution", "Decision", "Election", "Treasury"];
|
|
@@ -1572,7 +1712,7 @@ function summarizeNote(args) {
|
|
|
1572
1712
|
return parts.join(" ");
|
|
1573
1713
|
}
|
|
1574
1714
|
function votingPowerShortfallBody(args) {
|
|
1575
|
-
const committee =
|
|
1715
|
+
const committee = addressInCommitteeList(args.account, args.committeeAddresses ?? []) ? " This is a ContinuumDAO Committee address \u2014 Committee is not exempt from proposalThreshold()." : "";
|
|
1576
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;
|
|
1577
1717
|
}
|
|
1578
1718
|
function votingPowerWarning(args) {
|
|
@@ -1703,7 +1843,13 @@ async function continuumDaoSimulateProposal(args) {
|
|
|
1703
1843
|
}
|
|
1704
1844
|
const executeOk = source !== "foundry_required" && batchResults.every((b) => b.ok);
|
|
1705
1845
|
const ok = canPropose && proposeOk && executeOk;
|
|
1706
|
-
const
|
|
1846
|
+
const committeeAddresses = await fetchContinuumDaoCommitteeAddresses();
|
|
1847
|
+
const warning = votingPowerWarning({
|
|
1848
|
+
account,
|
|
1849
|
+
votes: power.votes,
|
|
1850
|
+
threshold: power.threshold,
|
|
1851
|
+
committeeAddresses
|
|
1852
|
+
});
|
|
1707
1853
|
const foundry = buildFoundryProposalSimulatePlan({
|
|
1708
1854
|
chainId,
|
|
1709
1855
|
governor: gov,
|
|
@@ -1719,6 +1865,7 @@ async function continuumDaoSimulateProposal(args) {
|
|
|
1719
1865
|
votes: power.votes,
|
|
1720
1866
|
threshold: power.threshold,
|
|
1721
1867
|
canPropose,
|
|
1868
|
+
committeeAddresses,
|
|
1722
1869
|
...warning ? { warning } : {},
|
|
1723
1870
|
propose: proposeOk ? { ok: true } : { ok: false, error: proposeError },
|
|
1724
1871
|
execute: { ok: executeOk, source, batches: batchResults },
|
|
@@ -1728,7 +1875,7 @@ async function continuumDaoSimulateProposal(args) {
|
|
|
1728
1875
|
}
|
|
1729
1876
|
var init_simulateProposal = __esm({
|
|
1730
1877
|
"src/protocols/evm/continuum-dao/simulateProposal.ts"() {
|
|
1731
|
-
|
|
1878
|
+
init_committeeList();
|
|
1732
1879
|
init_explainProposal();
|
|
1733
1880
|
init_foundryProposalScript();
|
|
1734
1881
|
init_governance();
|
|
@@ -1926,6 +2073,56 @@ async function finalizeGov(args, to, data, fallbackGas, evmType, extra, purposeS
|
|
|
1926
2073
|
buildBatchMeta: ({ gasLimit }) => meta2(evmType, args.chainId, to, extra, gasLimit)
|
|
1927
2074
|
});
|
|
1928
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
|
+
}
|
|
1929
2126
|
async function requireProposalThreshold(args) {
|
|
1930
2127
|
const power = await continuumDaoFetchVotingPower({
|
|
1931
2128
|
chainId: args.chainId,
|
|
@@ -1935,11 +2132,13 @@ async function requireProposalThreshold(args) {
|
|
|
1935
2132
|
});
|
|
1936
2133
|
if (BigInt(power.votes) < BigInt(power.threshold)) {
|
|
1937
2134
|
const { votingPowerRefuse: votingPowerRefuse2 } = await Promise.resolve().then(() => (init_simulateProposal(), simulateProposal_exports));
|
|
2135
|
+
const committeeAddresses = await fetchContinuumDaoCommitteeAddresses();
|
|
1938
2136
|
throw new Error(
|
|
1939
2137
|
votingPowerRefuse2({
|
|
1940
2138
|
account: args.executorAddress,
|
|
1941
2139
|
votes: power.votes,
|
|
1942
|
-
threshold: power.threshold
|
|
2140
|
+
threshold: power.threshold,
|
|
2141
|
+
committeeAddresses
|
|
1943
2142
|
})
|
|
1944
2143
|
);
|
|
1945
2144
|
}
|
|
@@ -1982,7 +2181,25 @@ async function buildEvmMultisignBodyContinuumDaoProposeBravo(args) {
|
|
|
1982
2181
|
},
|
|
1983
2182
|
"continuum-dao propose bravo"
|
|
1984
2183
|
);
|
|
1985
|
-
|
|
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 };
|
|
1986
2203
|
}
|
|
1987
2204
|
async function buildEvmMultisignBodyContinuumDaoProposeDelta(args) {
|
|
1988
2205
|
const forumKey = assertContinuumDaoForumTopicKey(args.forumKey, args.forumUrl);
|
|
@@ -2023,7 +2240,26 @@ async function buildEvmMultisignBodyContinuumDaoProposeDelta(args) {
|
|
|
2023
2240
|
},
|
|
2024
2241
|
"continuum-dao propose delta"
|
|
2025
2242
|
);
|
|
2026
|
-
|
|
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 };
|
|
2027
2263
|
}
|
|
2028
2264
|
async function requireVoteEligible(args) {
|
|
2029
2265
|
const st = await continuumDaoFetchProposalState({
|
|
@@ -2325,7 +2561,7 @@ function bucketGovernorState(state) {
|
|
|
2325
2561
|
function asRecord2(value) {
|
|
2326
2562
|
return value && typeof value === "object" && !Array.isArray(value) ? value : null;
|
|
2327
2563
|
}
|
|
2328
|
-
function parseBackendProposal(raw) {
|
|
2564
|
+
function parseBackendProposal(raw, committeeAddresses) {
|
|
2329
2565
|
const row = asRecord2(raw);
|
|
2330
2566
|
if (!row) return null;
|
|
2331
2567
|
const onchainId = String(row.onchainId ?? row.onchain_id ?? row.proposalId ?? "").trim();
|
|
@@ -2342,7 +2578,7 @@ function parseBackendProposal(raw) {
|
|
|
2342
2578
|
configuration: typeof row.configuration === "number" ? row.configuration : void 0,
|
|
2343
2579
|
governorAddress: isConfiguredAddress(governorRaw) ? getAddress(governorRaw) : void 0,
|
|
2344
2580
|
proposer,
|
|
2345
|
-
committeeProposer: proposer ?
|
|
2581
|
+
committeeProposer: proposer ? addressInCommitteeList(proposer, committeeAddresses ?? []) : void 0
|
|
2346
2582
|
};
|
|
2347
2583
|
}
|
|
2348
2584
|
function isLegacyContinuumDaoGovernor(addr2) {
|
|
@@ -2376,7 +2612,8 @@ async function continuumDaoFetchLiveProposals(args) {
|
|
|
2376
2612
|
const completedLimit = Math.min(Math.max(Number(args.completedLimit) || 8, 0), 20);
|
|
2377
2613
|
const listed = await continuumDaoFetchProposals();
|
|
2378
2614
|
const rawList = Array.isArray(listed.proposals) ? listed.proposals : [];
|
|
2379
|
-
const
|
|
2615
|
+
const committeeAddresses = await fetchContinuumDaoCommitteeAddresses();
|
|
2616
|
+
const parsed = rawList.map((row) => parseBackendProposal(row, committeeAddresses)).filter((p) => p != null);
|
|
2380
2617
|
const ordered = [...parsed].sort((a, b) => (a.id ?? 0) - (b.id ?? 0));
|
|
2381
2618
|
const latest = ordered.length > limit ? ordered.slice(ordered.length - limit) : ordered;
|
|
2382
2619
|
const chainId = args.chainId != null && String(args.chainId).trim() !== "" ? Number(args.chainId) : NaN;
|
|
@@ -2453,13 +2690,15 @@ async function continuumDaoRegisterProposal(payload) {
|
|
|
2453
2690
|
if (!res.ok) throw new Error(`proposals/create: ${res.status} ${await res.text()}`);
|
|
2454
2691
|
return { ok: true, result: await res.json() };
|
|
2455
2692
|
}
|
|
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;
|
|
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;
|
|
2457
2694
|
var init_governance = __esm({
|
|
2458
2695
|
"src/protocols/evm/continuum-dao/governance.ts"() {
|
|
2459
2696
|
init_defiEvmClient();
|
|
2460
2697
|
init_buildBatch();
|
|
2461
2698
|
init_constants();
|
|
2699
|
+
init_committeeList();
|
|
2462
2700
|
init_forum();
|
|
2701
|
+
init_proposalCatalog();
|
|
2463
2702
|
CONTINUUM_DAO_PROPOSE_FALLBACK = 550000n;
|
|
2464
2703
|
CONTINUUM_DAO_VOTE_FALLBACK = 220000n;
|
|
2465
2704
|
CONTINUUM_DAO_EXECUTE_FALLBACK = 800000n;
|
|
@@ -2488,6 +2727,13 @@ var init_governance = __esm({
|
|
|
2488
2727
|
"function hasVoted(uint256 proposalId, address account) view returns (bool)",
|
|
2489
2728
|
"function proposalSnapshot(uint256 proposalId) view returns (uint256)"
|
|
2490
2729
|
]);
|
|
2730
|
+
FORUM_SECTION_TO_PROPOSAL_TYPE = {
|
|
2731
|
+
admin: 0,
|
|
2732
|
+
constitution: 1,
|
|
2733
|
+
decision: 2,
|
|
2734
|
+
election: 3,
|
|
2735
|
+
treasury: 4
|
|
2736
|
+
};
|
|
2491
2737
|
GOVERNOR_STATE = {
|
|
2492
2738
|
Pending: 0,
|
|
2493
2739
|
Active: 1,
|
|
@@ -2564,6 +2810,8 @@ var continuumDaoMarketplaceProtocolModule = {
|
|
|
2564
2810
|
|
|
2565
2811
|
// src/protocols/evm/continuum-dao/index.ts
|
|
2566
2812
|
init_constants();
|
|
2813
|
+
init_committeeList();
|
|
2814
|
+
init_proposalCatalog();
|
|
2567
2815
|
|
|
2568
2816
|
// src/protocols/evm/continuum-dao/escrowRules.ts
|
|
2569
2817
|
init_constants();
|
|
@@ -5794,8 +6042,8 @@ function emptyMarketplaceIndexCache() {
|
|
|
5794
6042
|
function getMarketplaceIndexMemoryCache(chainId) {
|
|
5795
6043
|
return memoryCache.get(chainId) ?? null;
|
|
5796
6044
|
}
|
|
5797
|
-
function setMarketplaceIndexMemoryCache(chainId,
|
|
5798
|
-
memoryCache.set(chainId,
|
|
6045
|
+
function setMarketplaceIndexMemoryCache(chainId, cache2) {
|
|
6046
|
+
memoryCache.set(chainId, cache2);
|
|
5799
6047
|
}
|
|
5800
6048
|
function arg(args, key, index) {
|
|
5801
6049
|
const value = args[key] ?? args[index];
|
|
@@ -5945,9 +6193,9 @@ async function scanMarketplaceLogs(args) {
|
|
|
5945
6193
|
{ listings: prior.listings, offerings: prior.offerings, auctions: prior.auctions },
|
|
5946
6194
|
now2
|
|
5947
6195
|
);
|
|
5948
|
-
const
|
|
5949
|
-
setMarketplaceIndexMemoryCache(args.chainId,
|
|
5950
|
-
return
|
|
6196
|
+
const cache3 = { lastScannedBlock: head.toString(), ...derived2 };
|
|
6197
|
+
setMarketplaceIndexMemoryCache(args.chainId, cache3);
|
|
6198
|
+
return cache3;
|
|
5951
6199
|
}
|
|
5952
6200
|
const logs = await getLogsChunked({
|
|
5953
6201
|
client,
|
|
@@ -5964,9 +6212,9 @@ async function scanMarketplaceLogs(args) {
|
|
|
5964
6212
|
});
|
|
5965
6213
|
const now = Number((await client.getBlock({ blockTag: "latest" })).timestamp);
|
|
5966
6214
|
const derived = applyDerivedStatuses(folded, now);
|
|
5967
|
-
const
|
|
5968
|
-
setMarketplaceIndexMemoryCache(args.chainId,
|
|
5969
|
-
return
|
|
6215
|
+
const cache2 = { lastScannedBlock: head.toString(), ...derived };
|
|
6216
|
+
setMarketplaceIndexMemoryCache(args.chainId, cache2);
|
|
6217
|
+
return cache2;
|
|
5970
6218
|
}
|
|
5971
6219
|
|
|
5972
6220
|
// src/protocols/evm/continuum-dao/marketplaceCatalog.ts
|
|
@@ -6959,6 +7207,6 @@ var continuumDaoProtocolModule = {
|
|
|
6959
7207
|
};
|
|
6960
7208
|
registerProtocolModule(continuumDaoProtocolModule);
|
|
6961
7209
|
|
|
6962
|
-
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 };
|
|
6963
7211
|
//# sourceMappingURL=index.js.map
|
|
6964
7212
|
//# sourceMappingURL=index.js.map
|