@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.
@@ -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, CONTINUUM_DAO_COMMITTEE_PROPOSERS, CONTINUUM_DAO_DEPLOYMENTS, CONTINUUM_DAO_GOVERNANCE_API, CONTINUUM_DAO_MARKETPLACE_API;
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 set."
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 && !(args.useNodeKeyUsername && nodeKey)) {
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 want the default, call again with useNodeKeyUsername true and nodeKey set. The username will be the first 16 characters of the node key."
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 = isContinuumDaoCommitteeProposer(proposer);
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
- init_constants();
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 = isContinuumDaoCommitteeProposer(args.account) ? " This is a ContinuumDAO Committee address \u2014 Committee is not exempt from proposalThreshold()." : "";
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 warning = votingPowerWarning({ account, votes: power.votes, threshold: power.threshold });
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
- init_constants();
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
- return { ...built, proposalArgs };
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
- return { ...built, proposalArgs };
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 ? isContinuumDaoCommitteeProposer(proposer) : void 0
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 parsed = rawList.map(parseBackendProposal).filter((p) => p != null);
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, cache) {
5792
- memoryCache.set(chainId, cache);
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 cache2 = { lastScannedBlock: head.toString(), ...derived2 };
5943
- setMarketplaceIndexMemoryCache(args.chainId, cache2);
5944
- return cache2;
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 cache = { lastScannedBlock: head.toString(), ...derived };
5962
- setMarketplaceIndexMemoryCache(args.chainId, cache);
5963
- return cache;
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, CONTINUUM_DAO_COMMITTEE_PROPOSERS, 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_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, applyDerivedStatuses, applyForumSectionCheck, applyMarketplaceEvent, applyNodeAttachments, assertContinuumDaoForumDeleteInput, assertContinuumDaoForumMarkReadInput, assertContinuumDaoForumRecentInput, assertContinuumDaoForumSearchInput, assertContinuumDaoForumTopicKey, assertContinuumDaoProposalSimulation, assertCreateLockAmount, assertCtmAmountAtLeastMinimum, assertDelegatee, assertExecutorOwnsLock, assertIncreaseAmount, assertIncreaseUnlockTime, assertLiquidate, assertLockDurationSeconds, assertMerge, 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, fetchContinuumDaoMarketplaceActivity, fetchContinuumDaoMarketplaceAuctions, fetchContinuumDaoMarketplaceConfig, fetchContinuumDaoMarketplaceFeePreview, fetchContinuumDaoMarketplaceListings, fetchContinuumDaoMarketplaceOfferings, fetchContinuumDaoMarketplaceToken, floorUnlockTimeSeconds, foldMarketplaceEvents, formatProposalSimulationFailure, foundryPlanHasSequentialExecute, foundryScriptContainsCall, getMarketplaceIndexMemoryCache, governorAddressOnEvmChain, governorWriteAbi, howVoted, isConfiguredAddress, isContinuumDaoCommitteeProposer, 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, pickFeeAlternativeExample, planMarketplaceSteps, preflightAttachVeCtm, preflightCreateLock, preflightDelegate, preflightIncreaseAmount, preflightIncreaseUnlockTime, preflightLiquidate, preflightMerge, preflightRequestDetach, preflightSplit, preflightTransfer, preflightUndelegate, preflightWithdraw, proposalDescriptionHash, publicClient2 as publicClient, quoteContinuumDaoMarketplaceFeeAlternative, rankMarketplaceSearchHits, readCtmBalanceWei, readMarketplaceConfigFromChain, readMarketplaceFeePreviewFromChain, readMinimumLockWei, readVeCtmLockState, requireGovernor, resolveAttachGroupId, resolveGovernorProposalRef, resolveProposalCatalogRange, scanMarketplaceLogs, searchContinuumDaoMarketplace, setMarketplaceIndexMemoryCache, summarizeLiveProposals, summarizeProposalVotes, throwIfProposalSimulationFailed, validateAbiParameter, votingEscrowAddressOnEvmChain, votingEscrowMarketplaceAddressOnEvmChain, votingPowerAboveUntil, votingPowerRefuse, votingPowerWarning };
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