@continuumdao/ctm-mpc-defi 0.2.54 → 0.2.56

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.
@@ -189,10 +189,10 @@ function docsBaseUrl() {
189
189
  return raw.replace(/\/+$/, "");
190
190
  }
191
191
  function parseCommitteeAddressesFromConstitution(markdown) {
192
- const text = String(markdown || "");
193
- const start = text.search(/^### Committee List\s*$/m);
192
+ const text2 = String(markdown || "");
193
+ const start = text2.search(/^### Committee List\s*$/m);
194
194
  if (start < 0) return [];
195
- const lines = text.slice(start).split("\n");
195
+ const lines = text2.slice(start).split("\n");
196
196
  const addresses = [];
197
197
  for (let i = 1; i < lines.length; i += 1) {
198
198
  const line = lines[i] ?? "";
@@ -258,9 +258,10 @@ function checksumOrEmpty(value) {
258
258
  if (!raw) return "";
259
259
  return getAddress(raw);
260
260
  }
261
- function normalizeInput(inp) {
261
+ function normalizeInput(inp, index) {
262
+ const explicit = String(inp?.name || "").trim();
262
263
  return {
263
- name: String(inp?.name || ""),
264
+ name: explicit || `arg${index}`,
264
265
  type: String(inp?.type || ""),
265
266
  value: String(inp?.value ?? "")
266
267
  };
@@ -277,7 +278,7 @@ function normalizeAction(action) {
277
278
  target: checksumOrEmpty(action.target),
278
279
  value: String(action.value || "0"),
279
280
  signature: String(action.signature || ""),
280
- inputs: (action.inputs || []).map(normalizeInput)
281
+ inputs: (action.inputs || []).map((inp, index) => normalizeInput(inp, index))
281
282
  };
282
283
  }
283
284
  function assertProposalCatalogConstants() {
@@ -349,11 +350,11 @@ var init_defiEvmClient = __esm({
349
350
  // src/core/purpose.ts
350
351
  function mergePurposeText(purposeText, purposeSuffix) {
351
352
  const t = (purposeText ?? "").trim();
352
- const suffix = (purposeSuffix ?? "").trim();
353
- if (!suffix) return t;
353
+ const suffix2 = (purposeSuffix ?? "").trim();
354
+ if (!suffix2) return t;
354
355
  return t ? `${t}
355
356
 
356
- ${suffix}` : suffix;
357
+ ${suffix2}` : suffix2;
357
358
  }
358
359
  var init_purpose = __esm({
359
360
  "src/core/purpose.ts"() {
@@ -927,8 +928,8 @@ async function continuumDaoForumUnread(args) {
927
928
  if (args.filter?.trim()) qs2.set("filter", args.filter.trim());
928
929
  if (args.start != null) qs2.set("start", String(args.start));
929
930
  if (args.limit != null) qs2.set("limit", String(args.limit));
930
- const suffix = qs2.toString() ? `?${qs2}` : "";
931
- return forumFetch(`/api/continuum/forum/unread${suffix}`, {
931
+ const suffix2 = qs2.toString() ? `?${qs2}` : "";
932
+ return forumFetch(`/api/continuum/forum/unread${suffix2}`, {
932
933
  forumUrl: args.forumUrl,
933
934
  ticket: args.ticket
934
935
  });
@@ -1451,8 +1452,8 @@ function buildFoundryProposalSimulatePlan(args) {
1451
1452
  )
1452
1453
  });
1453
1454
  args.batches.forEach((batch, bi) => {
1454
- const suffix = batch.label != null ? solIdent(batch.label, `Option${(batch.optionIndex ?? bi) + 1}`) : "Bravo";
1455
- const contractName = `ContinuumDaoSimulateExecute${suffix}`;
1455
+ const suffix2 = batch.label != null ? solIdent(batch.label, `Option${(batch.optionIndex ?? bi) + 1}`) : "Bravo";
1456
+ const contractName = `ContinuumDaoSimulateExecute${suffix2}`;
1456
1457
  const path = `script/${contractName}.s.sol`;
1457
1458
  const body = [
1458
1459
  " function run() external {",
@@ -2682,13 +2683,25 @@ async function buildEvmMultisignBodyContinuumDaoCastVoteBravoFromMcp(args) {
2682
2683
  }
2683
2684
  async function continuumDaoRegisterProposal(payload) {
2684
2685
  assertContinuumDaoForumTopicKey(payload.forumKey);
2686
+ const body = JSON.stringify(payload);
2685
2687
  const res = await fetch(`${CONTINUUM_DAO_GOVERNANCE_API}/proposals/create`, {
2686
2688
  method: "POST",
2687
2689
  headers: { "Content-Type": "application/json" },
2688
- body: JSON.stringify(payload)
2690
+ body
2689
2691
  });
2690
- if (!res.ok) throw new Error(`proposals/create: ${res.status} ${await res.text()}`);
2691
- return { ok: true, result: await res.json() };
2692
+ const text2 = 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} ${text2}`);
2704
+ return { ok: true, result: JSON.parse(text2) };
2692
2705
  }
2693
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;
2694
2707
  var init_governance = __esm({
@@ -5284,10 +5297,20 @@ function foldMarketplaceEvents(events, initial) {
5284
5297
  for (const ev of events) applyMarketplaceEvent(book, ev);
5285
5298
  return book;
5286
5299
  }
5300
+ function auctionDeadlineUnix(auction) {
5301
+ const unix = Number(auction.deadlineUnix);
5302
+ if (Number.isFinite(unix) && unix > 0) return unix;
5303
+ if (auction.deadlineAt) {
5304
+ const ms = Date.parse(auction.deadlineAt);
5305
+ if (Number.isFinite(ms) && ms > 0) return Math.floor(ms / 1e3);
5306
+ }
5307
+ return unix;
5308
+ }
5287
5309
  function deriveAuctionStatus(auction, nowUnix) {
5288
- const deadline = Number(auction.deadlineUnix);
5310
+ const deadline = auctionDeadlineUnix(auction);
5289
5311
  if (auction.storedStatus === "Pending" && Number.isFinite(deadline) && nowUnix >= deadline) return "Expired";
5290
5312
  if (auction.storedStatus === "Active" && Number.isFinite(deadline) && nowUnix >= deadline) return "Complete";
5313
+ if (auction.storedStatus === "Pending") return "Active";
5291
5314
  return auction.derivedStatus || auction.storedStatus;
5292
5315
  }
5293
5316
  function applyDerivedStatuses(book, nowUnix) {
@@ -5397,7 +5420,11 @@ function keyGenOwnsVeCtm(snap, seller) {
5397
5420
  return false;
5398
5421
  }
5399
5422
  function assertNotOwn(snap, seller, tokenId) {
5400
- if (same2(snap.owner, snap.executor) || seller && same2(seller, snap.executor) || snap.executorLiveAuction) {
5423
+ const listedByKeyGen = seller != null && same2(seller, snap.executor) || snap.listing != null && snap.listing.status === 1 && same2(snap.listing.creator, snap.executor);
5424
+ if (listedByKeyGen && !snap.executorLiveAuction) {
5425
+ throw new Error(`This KeyGen listed veCTM #${tokenId.toString()}. Delist it instead of buying it.`);
5426
+ }
5427
+ if (same2(snap.owner, snap.executor) || snap.executorLiveAuction) {
5401
5428
  throw new Error(`This KeyGen already owns veCTM #${tokenId.toString()} and cannot buy or bid on it.`);
5402
5429
  }
5403
5430
  }
@@ -5469,6 +5496,7 @@ function planMarketplaceSteps(input, snap) {
5469
5496
  const m = snap.marketplace;
5470
5497
  switch (input.action) {
5471
5498
  case "createListing": {
5499
+ assertNotAttached(snap, input.tokenId);
5472
5500
  assertPayment(snap);
5473
5501
  assertDeadline(snap, input.deadline);
5474
5502
  if (!same2(snap.owner, snap.executor)) throw new Error("Only the veCTM owner can create a listing.");
@@ -5495,7 +5523,9 @@ function planMarketplaceSteps(input, snap) {
5495
5523
  ]);
5496
5524
  }
5497
5525
  case "delist": {
5498
- if (!snap.listing || snap.listing.status !== 1) throw new Error("No open listing for this KeyGen.");
5526
+ const listing = snap.listing;
5527
+ const openForKeyGen = listing != null && listing.status === 1 && same2(listing.creator, snap.executor);
5528
+ if (!openForKeyGen) throw new Error("No open listing for this KeyGen.");
5499
5529
  return [
5500
5530
  {
5501
5531
  to: m,
@@ -5540,6 +5570,7 @@ function planMarketplaceSteps(input, snap) {
5540
5570
  ]);
5541
5571
  }
5542
5572
  case "createOffering": {
5573
+ assertNotAttached(snap, input.tokenId);
5543
5574
  assertNotOwn(snap, void 0, input.tokenId);
5544
5575
  assertPayment(snap);
5545
5576
  assertDeadline(snap, input.deadline);
@@ -6230,8 +6261,8 @@ async function getJson(url) {
6230
6261
  try {
6231
6262
  const res = await fetch(url);
6232
6263
  if (!res.ok) {
6233
- const text = await res.text().catch(() => "");
6234
- return { ok: false, status: res.status, error: new Error(`${url}: ${res.status} ${text}`.trim()) };
6264
+ const text2 = await res.text().catch(() => "");
6265
+ return { ok: false, status: res.status, error: new Error(`${url}: ${res.status} ${text2}`.trim()) };
6235
6266
  }
6236
6267
  return { ok: true, body: await res.json() };
6237
6268
  } catch (err) {
@@ -6271,6 +6302,37 @@ function matchAuction(row, args, includeInactive) {
6271
6302
  if (args.seller && row.seller.toLowerCase() !== args.seller.toLowerCase()) return false;
6272
6303
  return true;
6273
6304
  }
6305
+ function presentAddress(value) {
6306
+ const text2 = (value ?? "").trim();
6307
+ if (!text2 || /^0x0+$/i.test(text2)) return "";
6308
+ return text2;
6309
+ }
6310
+ function sameAddress(a, b) {
6311
+ const left = (a ?? "").trim();
6312
+ const right = (b ?? "").trim();
6313
+ return Boolean(left && right && left.toLowerCase() === right.toLowerCase());
6314
+ }
6315
+ function annotateListingViewer(items, viewer) {
6316
+ const who = presentAddress(viewer);
6317
+ if (!who) return items;
6318
+ return items.map((row) => {
6319
+ const seller = presentAddress(row.seller) || presentAddress(row.creator) || presentAddress(row.currentOwner);
6320
+ const closed = row.storedStatus === "Fulfilled" || row.storedStatus === "Delisted" || row.storedStatus === "DelistedOrRescinded";
6321
+ const open = !closed && (row.storedStatus === "Open" || row.protocolStatus === "Open");
6322
+ const mine = sameAddress(seller, who);
6323
+ return { ...row, viewerAction: mine && open ? "delist" : mine ? "none" : open ? "buy" : "none" };
6324
+ });
6325
+ }
6326
+ function presentAuction(row, nowUnix = Math.floor(Date.now() / 1e3)) {
6327
+ const derivedStatus = deriveAuctionStatus({ ...row, bids: row.bids ?? [] }, nowUnix);
6328
+ const closed = derivedStatus === "Complete" || derivedStatus === "Expired";
6329
+ return {
6330
+ ...row,
6331
+ bids: row.bids ?? [],
6332
+ derivedStatus,
6333
+ needsSettle: closed ? true : row.needsSettle
6334
+ };
6335
+ }
6274
6336
  function listFrom(items, source) {
6275
6337
  return { items, nextCursor: null, source };
6276
6338
  }
@@ -6300,11 +6362,18 @@ async function fetchContinuumDaoMarketplaceListings(args = {}) {
6300
6362
  const res = await getJson(url);
6301
6363
  if (res.ok) {
6302
6364
  const body = res.body;
6303
- return { items: body.items ?? [], nextCursor: body.nextCursor ?? null, source: "api" };
6365
+ return {
6366
+ items: annotateListingViewer(body.items ?? [], args.viewer),
6367
+ nextCursor: body.nextCursor ?? null,
6368
+ source: "api"
6369
+ };
6304
6370
  }
6305
6371
  if (args.cursor || !isOffline(res.status)) throw res.error;
6306
6372
  const book = await logsBook(args);
6307
- return listFrom(book.listings.filter((row) => matchOrder(row, args, includeInactive)), "logs");
6373
+ return listFrom(
6374
+ annotateListingViewer(book.listings.filter((row) => matchOrder(row, args, includeInactive)), args.viewer),
6375
+ "logs"
6376
+ );
6308
6377
  }
6309
6378
  async function fetchContinuumDaoMarketplaceOfferings(args = {}) {
6310
6379
  const includeInactive = Boolean(args.includeInactive);
@@ -6341,20 +6410,30 @@ async function fetchContinuumDaoMarketplaceAuctions(args = {}) {
6341
6410
  if (res.ok) {
6342
6411
  const body = res.body;
6343
6412
  return {
6344
- items: (body.items ?? []).map((row) => ({ ...row, bids: row.bids ?? [] })),
6413
+ items: (body.items ?? []).map((row) => presentAuction(row)).filter((row) => includeInactive || isLiveAuctionStatus(row.derivedStatus)),
6345
6414
  nextCursor: body.nextCursor ?? null,
6346
6415
  source: "api"
6347
6416
  };
6348
6417
  }
6349
6418
  if (args.cursor || !isOffline(res.status)) throw res.error;
6350
6419
  const book = await logsBook(args);
6351
- return listFrom(book.auctions.filter((row) => matchAuction(row, args, includeInactive)), "logs");
6420
+ return listFrom(book.auctions.filter((row) => matchAuction(row, args, includeInactive)).map((row) => presentAuction(row)), "logs");
6352
6421
  }
6353
6422
  async function fetchContinuumDaoMarketplaceToken(args) {
6354
6423
  const url = `${apiBase(args)}/marketplace/tokens/${encodeURIComponent(args.tokenId)}${qs({ viewer: args.viewer })}`;
6355
6424
  const res = await getJson(url);
6356
6425
  if (res.ok && res.body && typeof res.body === "object") {
6357
- return { ...res.body, source: "api" };
6426
+ const body = res.body;
6427
+ return {
6428
+ ...body,
6429
+ auction: body.auction ? presentAuction(body.auction) : null,
6430
+ history: {
6431
+ listings: body.history?.listings ?? [],
6432
+ offerings: body.history?.offerings ?? [],
6433
+ auctions: (body.history?.auctions ?? []).map((row) => presentAuction(row))
6434
+ },
6435
+ source: "api"
6436
+ };
6358
6437
  }
6359
6438
  if (!res.ok && !isOffline(res.status)) throw res.error;
6360
6439
  const book = await logsBook(args);
@@ -6365,11 +6444,14 @@ async function fetchContinuumDaoMarketplaceToken(args) {
6365
6444
  token: { tokenId: args.tokenId },
6366
6445
  listing: listings.find((row) => isOpenOrder(row)) ?? null,
6367
6446
  offerings: offerings.filter((row) => isOpenOrder(row)),
6368
- auction: auctions.find((row) => isLiveAuctionStatus(row.derivedStatus)) ?? null,
6447
+ auction: (() => {
6448
+ const live = auctions.find((row) => isLiveAuctionStatus(row.derivedStatus));
6449
+ return live ? presentAuction(live) : null;
6450
+ })(),
6369
6451
  history: {
6370
6452
  listings: listings.filter((row) => !isOpenOrder(row)),
6371
6453
  offerings: offerings.filter((row) => !isOpenOrder(row)),
6372
- auctions: auctions.filter((row) => !isLiveAuctionStatus(row.derivedStatus))
6454
+ auctions: auctions.filter((row) => !isLiveAuctionStatus(row.derivedStatus)).map((row) => presentAuction(row))
6373
6455
  },
6374
6456
  source: "logs"
6375
6457
  };
@@ -6396,7 +6478,7 @@ async function fetchContinuumDaoMarketplaceActivity(args) {
6396
6478
  return {
6397
6479
  address: args.address,
6398
6480
  orders: body.orders ?? [],
6399
- auctions: (body.auctions ?? []).map((row) => ({ ...row, bids: row.bids ?? [] })),
6481
+ auctions: (body.auctions ?? []).map((row) => presentAuction(row)),
6400
6482
  source: "api"
6401
6483
  };
6402
6484
  }
@@ -6409,7 +6491,7 @@ async function fetchContinuumDaoMarketplaceActivity(args) {
6409
6491
  const auctions = book.auctions.filter((row) => {
6410
6492
  return row.seller.toLowerCase() === address || (row.buyer ?? "").toLowerCase() === address || (row.highestBidder ?? "").toLowerCase() === address || row.bids.some((bid) => bid.bidder.toLowerCase() === address);
6411
6493
  });
6412
- return { address: args.address, orders, auctions, source: "logs" };
6494
+ return { address: args.address, orders, auctions: auctions.map((row) => presentAuction(row)), source: "logs" };
6413
6495
  }
6414
6496
 
6415
6497
  // src/protocols/evm/continuum-dao/marketplaceSearch.ts
@@ -6481,6 +6563,13 @@ function positive(value) {
6481
6563
  const trimmed = (value ?? "").trim();
6482
6564
  return trimmed && trimmed !== "0" ? trimmed : "";
6483
6565
  }
6566
+ function party(...values) {
6567
+ for (const value of values) {
6568
+ const text2 = (value ?? "").trim();
6569
+ if (text2 && !/^0x0+$/i.test(text2)) return text2;
6570
+ }
6571
+ return "";
6572
+ }
6484
6573
  function unlockUnixFrom(row) {
6485
6574
  const iso2 = positive(row.unlockTimeAt);
6486
6575
  if (iso2) {
@@ -6500,7 +6589,7 @@ function listingCandidate(row) {
6500
6589
  kind: "listing",
6501
6590
  tokenId: row.tokenId,
6502
6591
  onchainIndex: row.onchainIndex,
6503
- seller: row.seller ?? row.creator,
6592
+ seller: party(row.seller, row.creator, row.currentOwner),
6504
6593
  paymentToken: row.paymentToken,
6505
6594
  price: asBig(row.price),
6506
6595
  priceBasis: "ask",
@@ -6558,7 +6647,7 @@ function rankMarketplaceSearchHits(rows, query, nowUnix = Math.floor(Date.now()
6558
6647
  const excludeOwned = query.excludeOwned !== false && Boolean(executor);
6559
6648
  let matched = rows.filter((row) => {
6560
6649
  if (query.paymentToken && !same3(row.paymentToken, query.paymentToken)) return false;
6561
- if (excludeOwned && same3(row.seller, executor)) return false;
6650
+ if (excludeOwned && row.kind !== "listing" && same3(row.seller, executor)) return false;
6562
6651
  if (minLocked != null && row.locked < minLocked) return false;
6563
6652
  if (maxLocked != null && row.locked > maxLocked) return false;
6564
6653
  if (unlockAfter != null && row.unlockUnix < unlockAfter) return false;
@@ -6566,6 +6655,10 @@ function rankMarketplaceSearchHits(rows, query, nowUnix = Math.floor(Date.now()
6566
6655
  if (monthCap != null && (row.unlockUnix <= nowUnix || row.unlockUnix > monthCap)) return false;
6567
6656
  return true;
6568
6657
  });
6658
+ matched = matched.map((row) => {
6659
+ const ownListing = Boolean(executor && row.kind === "listing" && same3(row.seller, executor));
6660
+ return ownListing ? { ...row, fillable: false } : row;
6661
+ });
6569
6662
  const priceSort = sort === "price" || sort === "pricePerLockedCtm";
6570
6663
  if (priceSort && !query.paymentToken) {
6571
6664
  const tokens = new Set(matched.map((row) => row.paymentToken.toLowerCase()));
@@ -6590,9 +6683,16 @@ function rankMarketplaceSearchHits(rows, query, nowUnix = Math.floor(Date.now()
6590
6683
  return a.tokenId.localeCompare(b.tokenId);
6591
6684
  });
6592
6685
  const limit = Math.min(MAX_LIMIT, Math.max(1, query.limit ?? DEFAULT_LIMIT));
6593
- return matched.slice(0, limit).map((row) => toHit(row, nowUnix));
6686
+ return matched.slice(0, limit).map((row) => {
6687
+ const ownListing = Boolean(executor && row.kind === "listing" && same3(row.seller, executor));
6688
+ return toHit(
6689
+ ownListing ? { ...row, fillable: false } : row,
6690
+ nowUnix,
6691
+ ownListing ? "delist" : row.kind === "auction" ? "bid" : "buy"
6692
+ );
6693
+ });
6594
6694
  }
6595
- function toHit(row, nowUnix) {
6695
+ function toHit(row, nowUnix, action) {
6596
6696
  const meta4 = paymentMeta(row.paymentToken);
6597
6697
  const perCtm = row.locked > 0n ? row.price * 10n ** 18n / row.locked : 0n;
6598
6698
  const months = row.unlockUnix > nowUnix ? ((row.unlockUnix - nowUnix) / MONTH_SECONDS).toFixed(1) : row.unlockUnix > 0 ? "0" : "";
@@ -6613,7 +6713,8 @@ function toHit(row, nowUnix) {
6613
6713
  pricePerLockedCtm: row.locked > 0n ? humanAmount(perCtm, meta4.decimals) : "",
6614
6714
  deadlineAt: row.deadlineUnix > 0 ? new Date(row.deadlineUnix * 1e3).toISOString() : "",
6615
6715
  attached: row.attached,
6616
- fillable: row.fillable
6716
+ fillable: row.fillable,
6717
+ action
6617
6718
  };
6618
6719
  }
6619
6720
  async function fillMissingLocks(rows, rpcUrl, chainId) {
@@ -7154,6 +7255,172 @@ function marketplaceVeCtmReceivedBy(detail, executor) {
7154
7255
  return null;
7155
7256
  }
7156
7257
 
7258
+ // src/protocols/evm/continuum-dao/purpose.ts
7259
+ init_constants();
7260
+ function chainParts(chainId) {
7261
+ const n = typeof chainId === "number" ? chainId : Number.parseInt(String(chainId ?? "").trim(), 10);
7262
+ const id = Number.isFinite(n) ? n : 0;
7263
+ if (id === CONTINUUM_DAO_LINEA_CHAIN_ID) return { name: "Linea Mainnet", id };
7264
+ if (id === CONTINUUM_DAO_LINEA_SEPOLIA_CHAIN_ID) return { name: "Linea Sepolia", id };
7265
+ if (id === CONTINUUM_DAO_ETHEREUM_CHAIN_ID) return { name: "Ethereum Mainnet", id };
7266
+ return { name: "chain", id };
7267
+ }
7268
+ function suffix(chainId) {
7269
+ const { name, id } = chainParts(chainId);
7270
+ return `on ${name} (chainId ${id})`;
7271
+ }
7272
+ function text(value) {
7273
+ return String(value ?? "").trim();
7274
+ }
7275
+ function tokenLabel(value) {
7276
+ const id = text(value);
7277
+ return id ? `#${id}` : "#\u2026";
7278
+ }
7279
+ function shortAddr(value) {
7280
+ const trimmed = text(value);
7281
+ if (!trimmed) return "\u2026";
7282
+ try {
7283
+ if (!isAddress(trimmed)) return trimmed;
7284
+ const addr2 = getAddress(trimmed);
7285
+ return `${addr2.slice(0, 6)}\u2026${addr2.slice(-4)}`;
7286
+ } catch {
7287
+ return trimmed;
7288
+ }
7289
+ }
7290
+ function weeksLabel(seconds) {
7291
+ const n = Number(text(seconds));
7292
+ if (!Number.isFinite(n) || n <= 0) return "\u2026 weeks";
7293
+ const weeks = Math.max(1, Math.round(n / WEEK_SECONDS));
7294
+ return `${weeks} week${weeks === 1 ? "" : "s"}`;
7295
+ }
7296
+ function paymentMeta3(address) {
7297
+ const lower = text(address).toLowerCase();
7298
+ if (lower === MARKETPLACE_USDC_LINEA_ADDRESS.toLowerCase()) return { symbol: "USDC", decimals: 6 };
7299
+ if (lower === MARKETPLACE_WETH_LINEA_ADDRESS.toLowerCase()) return { symbol: "WETH", decimals: 18 };
7300
+ if (lower === CTM_TOKEN_ADDRESS.toLowerCase()) return { symbol: "CTM", decimals: 18 };
7301
+ return { symbol: "token", decimals: 18 };
7302
+ }
7303
+ function moneyFromWei(wei, paymentToken) {
7304
+ const raw = text(wei);
7305
+ if (!raw) return "\u2026 token";
7306
+ try {
7307
+ const meta4 = paymentMeta3(paymentToken);
7308
+ const human2 = formatUnits(BigInt(raw), meta4.decimals).replace(/(\.\d*?[1-9])0+$/, "$1").replace(/\.0+$/, "");
7309
+ return `${human2} ${meta4.symbol}`;
7310
+ } catch {
7311
+ return raw;
7312
+ }
7313
+ }
7314
+ function deadlineLabel(value) {
7315
+ const n = Number(text(value));
7316
+ if (!Number.isFinite(n) || n <= 0) return "\u2026";
7317
+ const date = new Date(n * 1e3);
7318
+ if (Number.isNaN(date.getTime())) return "\u2026";
7319
+ return `${date.toISOString().slice(0, 16).replace("T", " ")} UTC`;
7320
+ }
7321
+ function bravoLabel(support) {
7322
+ const raw = text(support).toLowerCase();
7323
+ if (raw === "0" || raw === "against") return "Against";
7324
+ if (raw === "1" || raw === "for") return "For";
7325
+ if (raw === "2" || raw === "abstain") return "Abstain";
7326
+ return null;
7327
+ }
7328
+ function proposalLabel(input) {
7329
+ const title = text(input.title || input.proposalTitle);
7330
+ if (title) return title;
7331
+ const id = text(input.proposalId);
7332
+ return id ? `proposal ${id}` : "proposal";
7333
+ }
7334
+ function buildContinuumDaoMcpPurpose(action, input) {
7335
+ const end = suffix(input.chainId);
7336
+ const id = tokenLabel(input.tokenId);
7337
+ switch (action) {
7338
+ case "createLock":
7339
+ return `ContinuumDAO: create lock ${text(input.amountHuman) || "\u2026"} CTM for ${weeksLabel(input.lockDurationSeconds)} ${end}`;
7340
+ case "increaseAmount":
7341
+ return `ContinuumDAO: increase lock ${id} by ${text(input.amountHuman) || "\u2026"} CTM ${end}`;
7342
+ case "increaseUnlockTime":
7343
+ return `ContinuumDAO: extend lock ${id} by ${weeksLabel(input.lockDurationSeconds)} ${end}`;
7344
+ case "split":
7345
+ return `ContinuumDAO: split lock ${id}, extract ${text(input.extractedHuman) || "\u2026"} CTM ${end}`;
7346
+ case "merge": {
7347
+ const from = tokenLabel(input.fromTokenId);
7348
+ const into = text(input.toTokenId);
7349
+ return into ? `ContinuumDAO: merge lock ${from} into #${into} ${end}` : `ContinuumDAO: merge lock ${from} into \u2026 ${end}`;
7350
+ }
7351
+ case "withdraw":
7352
+ return `ContinuumDAO: withdraw expired lock ${id} ${end}`;
7353
+ case "liquidate":
7354
+ return `ContinuumDAO: liquidate lock ${id} ${end}`;
7355
+ case "delegate":
7356
+ return text(input.delegatee) ? `ContinuumDAO: delegate voting power to ${shortAddr(input.delegatee)} ${end}` : `ContinuumDAO: delegate voting power ${end}`;
7357
+ case "undelegate":
7358
+ return `ContinuumDAO: undelegate (return voting power to this KeyGen) ${end}`;
7359
+ case "transfer":
7360
+ return text(input.to) ? `ContinuumDAO: transfer veCTM ${id} to ${shortAddr(input.to)} ${end}` : `ContinuumDAO: transfer veCTM ${id} ${end}`;
7361
+ case "attach":
7362
+ return text(input.tokenId) ? `ContinuumDAO: attach veCTM ${id} to this node ${end}` : `ContinuumDAO: attach veCTM to this node ${end}`;
7363
+ case "requestDetach":
7364
+ return `ContinuumDAO: request detach veCTM ${id} ${end}`;
7365
+ case "proposeBravo": {
7366
+ const title = text(input.title);
7367
+ return title ? `ContinuumDAO: propose "${title}" (Bravo) ${end}` : `ContinuumDAO: propose governance proposal (Bravo) ${end}`;
7368
+ }
7369
+ case "proposeDelta": {
7370
+ const title = text(input.title);
7371
+ return title ? `ContinuumDAO: propose "${title}" (Delta) ${end}` : `ContinuumDAO: propose governance proposal (Delta) ${end}`;
7372
+ }
7373
+ case "castVoteBravo": {
7374
+ const label = proposalLabel(input);
7375
+ const support = bravoLabel(input.support);
7376
+ return support ? `ContinuumDAO: vote ${support} on "${label}" ${end}` : `ContinuumDAO: vote on "${label}" ${end}`;
7377
+ }
7378
+ case "castVoteDelta":
7379
+ return `ContinuumDAO: vote on "${proposalLabel(input)}" (Delta) ${end}`;
7380
+ case "execute":
7381
+ return `ContinuumDAO: execute "${proposalLabel(input)}" ${end}`;
7382
+ case "cancel":
7383
+ return `ContinuumDAO: cancel "${proposalLabel(input)}" ${end}`;
7384
+ case "forumSignIn": {
7385
+ const who = text(input.username);
7386
+ return who ? `ContinuumDAO: sign in to the forum as ${who} ${end}` : `ContinuumDAO: sign in to the forum ${end}`;
7387
+ }
7388
+ case "marketplaceCreateListing":
7389
+ return `ContinuumDAO: list veCTM ${id} for ${moneyFromWei(input.askWei, input.paymentToken)} until ${deadlineLabel(input.deadline)} ${end}`;
7390
+ case "marketplaceDelist":
7391
+ return `ContinuumDAO: delist veCTM ${id} ${end}`;
7392
+ case "marketplaceFulfillListing":
7393
+ return `ContinuumDAO: buy veCTM ${id} for ${moneyFromWei(input.priceWei, input.paymentToken)} ${end}`;
7394
+ case "marketplaceCreateOffering":
7395
+ return `ContinuumDAO: offer ${moneyFromWei(input.bidWei, input.paymentToken)} for veCTM ${id} until ${deadlineLabel(input.deadline)} ${end}`;
7396
+ case "marketplaceRescind":
7397
+ return `ContinuumDAO: rescind offer on veCTM ${id} ${end}`;
7398
+ case "marketplaceFulfillOffering":
7399
+ return `ContinuumDAO: accept offer of ${moneyFromWei(input.priceWei, input.paymentToken)} on veCTM ${id} ${end}`;
7400
+ case "marketplaceCreateAuction":
7401
+ return `ContinuumDAO: auction veCTM ${id} reserve ${moneyFromWei(input.reserveWei, input.paymentToken)}, minimum increment ${moneyFromWei(input.minIncrementWei, input.paymentToken)}, until ${deadlineLabel(input.deadline)} ${end}`;
7402
+ case "marketplaceCancelAuction":
7403
+ return `ContinuumDAO: cancel auction for veCTM ${id} ${end}`;
7404
+ case "marketplaceAuctionBid":
7405
+ return `ContinuumDAO: bid ${moneyFromWei(input.priceWei, input.paymentToken)} on veCTM ${id} ${end}`;
7406
+ case "marketplaceSettleAuction":
7407
+ return `ContinuumDAO: settle auction for veCTM ${id} ${end}`;
7408
+ default:
7409
+ return `ContinuumDAO: ${end}`;
7410
+ }
7411
+ }
7412
+ function preprocessContinuumDaoPurpose(action, raw) {
7413
+ if (!raw || typeof raw !== "object" || Array.isArray(raw)) return raw;
7414
+ const o = { ...raw };
7415
+ const supplied = text(o.purposeText ?? o.purpose);
7416
+ if (supplied) {
7417
+ o.purposeText = supplied;
7418
+ return o;
7419
+ }
7420
+ o.purposeText = buildContinuumDaoMcpPurpose(action, o);
7421
+ return o;
7422
+ }
7423
+
7157
7424
  // src/protocols/evm/continuum-dao/index.ts
7158
7425
  registerProtocolModule(continuumDaoMarketplaceProtocolModule);
7159
7426
  var continuumDaoProtocolModule = {
@@ -7207,6 +7474,6 @@ var continuumDaoProtocolModule = {
7207
7474
  };
7208
7475
  registerProtocolModule(continuumDaoProtocolModule);
7209
7476
 
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 };
7477
+ 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, buildContinuumDaoMcpPurpose, 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, preprocessContinuumDaoPurpose, 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 };
7211
7478
  //# sourceMappingURL=index.js.map
7212
7479
  //# sourceMappingURL=index.js.map