dexe-mcp 0.8.3 → 0.11.0

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.
Files changed (133) hide show
  1. package/CHANGELOG.md +156 -12
  2. package/README.md +6 -5
  3. package/dist/bootstrap.d.ts +14 -0
  4. package/dist/bootstrap.d.ts.map +1 -1
  5. package/dist/bootstrap.js +24 -2
  6. package/dist/bootstrap.js.map +1 -1
  7. package/dist/config.d.ts +22 -0
  8. package/dist/config.d.ts.map +1 -1
  9. package/dist/config.js +30 -0
  10. package/dist/config.js.map +1 -1
  11. package/dist/diag/checks.d.ts.map +1 -1
  12. package/dist/diag/checks.js +5 -4
  13. package/dist/diag/checks.js.map +1 -1
  14. package/dist/env/schema.d.ts +21 -0
  15. package/dist/env/schema.d.ts.map +1 -1
  16. package/dist/env/schema.js +21 -0
  17. package/dist/env/schema.js.map +1 -1
  18. package/dist/lib/amount.d.ts +23 -0
  19. package/dist/lib/amount.d.ts.map +1 -0
  20. package/dist/lib/amount.js +30 -0
  21. package/dist/lib/amount.js.map +1 -0
  22. package/dist/lib/broadcastGuards.d.ts +10 -0
  23. package/dist/lib/broadcastGuards.d.ts.map +1 -1
  24. package/dist/lib/broadcastGuards.js +11 -1
  25. package/dist/lib/broadcastGuards.js.map +1 -1
  26. package/dist/lib/controllingVoters.d.ts +44 -0
  27. package/dist/lib/controllingVoters.d.ts.map +1 -0
  28. package/dist/lib/controllingVoters.js +152 -0
  29. package/dist/lib/controllingVoters.js.map +1 -0
  30. package/dist/lib/dangerousSelectors.d.ts +1 -1
  31. package/dist/lib/dangerousSelectors.d.ts.map +1 -1
  32. package/dist/lib/dangerousSelectors.js +12 -22
  33. package/dist/lib/dangerousSelectors.js.map +1 -1
  34. package/dist/lib/decoders.d.ts +20 -0
  35. package/dist/lib/decoders.d.ts.map +1 -1
  36. package/dist/lib/decoders.js +52 -0
  37. package/dist/lib/decoders.js.map +1 -1
  38. package/dist/lib/govProposalView.d.ts +37 -0
  39. package/dist/lib/govProposalView.d.ts.map +1 -0
  40. package/dist/lib/govProposalView.js +42 -0
  41. package/dist/lib/govProposalView.js.map +1 -0
  42. package/dist/lib/ipfs.d.ts +14 -0
  43. package/dist/lib/ipfs.d.ts.map +1 -1
  44. package/dist/lib/ipfs.js +31 -1
  45. package/dist/lib/ipfs.js.map +1 -1
  46. package/dist/lib/markdownToSlate.d.ts +9 -0
  47. package/dist/lib/markdownToSlate.d.ts.map +1 -1
  48. package/dist/lib/markdownToSlate.js +24 -0
  49. package/dist/lib/markdownToSlate.js.map +1 -1
  50. package/dist/lib/multicall.d.ts.map +1 -1
  51. package/dist/lib/multicall.js +12 -2
  52. package/dist/lib/multicall.js.map +1 -1
  53. package/dist/lib/protocolAdvisories.d.ts +25 -0
  54. package/dist/lib/protocolAdvisories.d.ts.map +1 -0
  55. package/dist/lib/protocolAdvisories.js +46 -0
  56. package/dist/lib/protocolAdvisories.js.map +1 -0
  57. package/dist/lib/quorumRisk.d.ts +92 -0
  58. package/dist/lib/quorumRisk.d.ts.map +1 -0
  59. package/dist/lib/quorumRisk.js +159 -0
  60. package/dist/lib/quorumRisk.js.map +1 -0
  61. package/dist/lib/redact.d.ts +36 -0
  62. package/dist/lib/redact.d.ts.map +1 -0
  63. package/dist/lib/redact.js +72 -0
  64. package/dist/lib/redact.js.map +1 -0
  65. package/dist/lib/sanitize.d.ts +31 -0
  66. package/dist/lib/sanitize.d.ts.map +1 -0
  67. package/dist/lib/sanitize.js +51 -0
  68. package/dist/lib/sanitize.js.map +1 -0
  69. package/dist/lib/signer.d.ts +11 -0
  70. package/dist/lib/signer.d.ts.map +1 -1
  71. package/dist/lib/signer.js +16 -0
  72. package/dist/lib/signer.js.map +1 -1
  73. package/dist/lib/subgraph.d.ts +7 -0
  74. package/dist/lib/subgraph.d.ts.map +1 -1
  75. package/dist/lib/subgraph.js +24 -2
  76. package/dist/lib/subgraph.js.map +1 -1
  77. package/dist/rpc.d.ts.map +1 -1
  78. package/dist/rpc.js +2 -1
  79. package/dist/rpc.js.map +1 -1
  80. package/dist/tools/dao.d.ts.map +1 -1
  81. package/dist/tools/dao.js +2 -1
  82. package/dist/tools/dao.js.map +1 -1
  83. package/dist/tools/daoDeploy.d.ts.map +1 -1
  84. package/dist/tools/daoDeploy.js +32 -0
  85. package/dist/tools/daoDeploy.js.map +1 -1
  86. package/dist/tools/flow.d.ts +6 -0
  87. package/dist/tools/flow.d.ts.map +1 -1
  88. package/dist/tools/flow.js +149 -14
  89. package/dist/tools/flow.js.map +1 -1
  90. package/dist/tools/getConfig.d.ts.map +1 -1
  91. package/dist/tools/getConfig.js +2 -1
  92. package/dist/tools/getConfig.js.map +1 -1
  93. package/dist/tools/gov.d.ts.map +1 -1
  94. package/dist/tools/gov.js +41 -11
  95. package/dist/tools/gov.js.map +1 -1
  96. package/dist/tools/index.d.ts.map +1 -1
  97. package/dist/tools/index.js +2 -0
  98. package/dist/tools/index.js.map +1 -1
  99. package/dist/tools/otc.d.ts +32 -0
  100. package/dist/tools/otc.d.ts.map +1 -1
  101. package/dist/tools/otc.js +217 -74
  102. package/dist/tools/otc.js.map +1 -1
  103. package/dist/tools/proposalBuild.d.ts.map +1 -1
  104. package/dist/tools/proposalBuild.js +20 -5
  105. package/dist/tools/proposalBuild.js.map +1 -1
  106. package/dist/tools/proposalBuildComplex.d.ts.map +1 -1
  107. package/dist/tools/proposalBuildComplex.js +50 -11
  108. package/dist/tools/proposalBuildComplex.js.map +1 -1
  109. package/dist/tools/proposalBuildMore.d.ts.map +1 -1
  110. package/dist/tools/proposalBuildMore.js +12 -4
  111. package/dist/tools/proposalBuildMore.js.map +1 -1
  112. package/dist/tools/read.d.ts +1 -0
  113. package/dist/tools/read.d.ts.map +1 -1
  114. package/dist/tools/read.js +61 -18
  115. package/dist/tools/read.js.map +1 -1
  116. package/dist/tools/risk.d.ts +4 -0
  117. package/dist/tools/risk.d.ts.map +1 -0
  118. package/dist/tools/risk.js +255 -0
  119. package/dist/tools/risk.js.map +1 -0
  120. package/dist/tools/safe.d.ts.map +1 -1
  121. package/dist/tools/safe.js +13 -0
  122. package/dist/tools/safe.js.map +1 -1
  123. package/dist/tools/subgraph.d.ts.map +1 -1
  124. package/dist/tools/subgraph.js +19 -15
  125. package/dist/tools/subgraph.js.map +1 -1
  126. package/dist/tools/txSend.d.ts +6 -0
  127. package/dist/tools/txSend.d.ts.map +1 -1
  128. package/dist/tools/txSend.js +26 -3
  129. package/dist/tools/txSend.js.map +1 -1
  130. package/dist/tools/voteBuild.d.ts.map +1 -1
  131. package/dist/tools/voteBuild.js +40 -25
  132. package/dist/tools/voteBuild.js.map +1 -1
  133. package/package.json +2 -2
package/dist/tools/otc.js CHANGED
@@ -1,12 +1,14 @@
1
1
  import { z } from "zod";
2
- import { Interface, ZeroAddress, MaxUint256, isAddress, getAddress } from "ethers";
2
+ import { Interface, ZeroAddress, ZeroHash, isAddress, getAddress } from "ethers";
3
3
  import { RpcProvider } from "../rpc.js";
4
4
  import { multicall } from "../lib/multicall.js";
5
5
  import { runProposalCreate, sendOrCollect } from "./flow.js";
6
6
  import { resolveChain } from "../config.js";
7
7
  import { buildTokenSaleMultiActions, tierSchema, } from "./proposalBuildComplex.js";
8
+ import { PinataClient } from "../lib/ipfs.js";
8
9
  import { buildAddressMerkleTree, computeLeafHash, verifyProof, } from "../lib/merkleTree.js";
9
10
  import { simulateCalldata } from "./simulate.js";
11
+ import { parseUintString } from "../lib/amount.js";
10
12
  function errorResult(message) {
11
13
  return { content: [{ type: "text", text: message }], isError: true };
12
14
  }
@@ -16,9 +18,23 @@ const ERC20_ABI = new Interface([
16
18
  "function allowance(address owner, address spender) view returns (uint256)",
17
19
  "function approve(address spender, uint256 amount) returns (bool)",
18
20
  ]);
21
+ /**
22
+ * Exact mirror of `ITokenSaleProposal.TierView` — a NESTED struct of
23
+ * `{ tierInitParams, tierInfo, tierAdditionalInfo }`. The previous flat shape
24
+ * (saleTokenAddress before claimLockDuration, reversed VestingSettings) was
25
+ * the pre-Bug-#25 field order and decoded garbage against live tiers.
26
+ * Field order verified against
27
+ * `DeXe-Protocol/contracts/interfaces/gov/proposals/ITokenSaleProposal.sol`.
28
+ */
29
+ export const TIER_VIEW_TUPLE = "tuple(" +
30
+ "tuple(tuple(string name, string description) metadata, uint256 totalTokenProvided, uint64 saleStartTime, uint64 saleEndTime, uint64 claimLockDuration, address saleTokenAddress, address[] purchaseTokenAddresses, uint256[] exchangeRates, uint256 minAllocationPerUser, uint256 maxAllocationPerUser, tuple(uint256 vestingPercentage, uint64 vestingDuration, uint64 cliffPeriod, uint64 unlockStep) vestingSettings, tuple(uint8 participationType, bytes data)[] participationDetails) tierInitParams, " +
31
+ "tuple(bool isOff, uint256 totalSold, string uri, tuple(uint64 vestingStartTime, uint64 vestingEndTime) vestingTierInfo) tierInfo, " +
32
+ "tuple(bytes32 merkleRoot, string merkleUri, uint256 lastModified) tierAdditionalInfo" +
33
+ ")";
34
+ export const GET_TIER_VIEWS_FRAGMENT = `function getTierViews(uint256 offset, uint256 limit) view returns (${TIER_VIEW_TUPLE}[] tierViews)`;
19
35
  const TOKEN_SALE_ABI = new Interface([
20
36
  "function latestTierId() view returns (uint256)",
21
- "function getTierViews(uint256 offset, uint256 limit) view returns (tuple(tuple(string name, string description) metadata, uint256 totalTokenProvided, uint256 saleStartTime, uint256 saleEndTime, address saleTokenAddress, uint256 claimLockDuration, address[] purchaseTokenAddresses, uint256[] exchangeRates, uint256 minAllocationPerUser, uint256 maxAllocationPerUser, tuple(uint256 cliffPeriod, uint256 unlockStep, uint256 vestingDuration, uint256 vestingPercentage) vestingSettings, tuple(uint8 participationType, bytes data)[] participationDetails)[] tiers)",
37
+ GET_TIER_VIEWS_FRAGMENT,
22
38
  "function getUserViews(address user, uint256[] tierIds, bytes32[][] proofs) view returns (tuple(bool canParticipate, tuple(bool isClaimed, bool canClaim, uint64 claimUnlockTime, uint256 claimTotalAmount, uint256 boughtTotalAmount, address[] lockedTokenAddresses, uint256[] lockedTokenAmounts, address[] lockedNftAddresses, uint256[][] lockedNftIds, address[] purchaseTokenAddresses, uint256[] purchaseTokenAmounts) purchaseView, tuple(uint64 latestVestingWithdraw, uint64 nextUnlockTime, uint256 nextUnlockAmount, uint256 vestingTotalAmount, uint256 vestingWithdrawnAmount, uint256 amountToWithdraw, uint256 lockedAmount) vestingUserView)[] userViews)",
23
39
  "function buy(uint256 tierId, address tokenToBuyWith, uint256 amount, bytes32[] proof) payable",
24
40
  "function claim(uint256[] tierIds)",
@@ -44,8 +60,81 @@ function ok(data) {
44
60
  function bigintReplacer(_k, v) {
45
61
  return typeof v === "bigint" ? v.toString() : v;
46
62
  }
47
- function isNativeSentinel(addr) {
48
- return addr.toLowerCase() === ZeroAddress.toLowerCase();
63
+ /**
64
+ * Protocol-wide native-coin sentinel (`Globals.sol::ETHEREUM_ADDRESS`).
65
+ * `TokenSaleProposalBuy` keys exchange rates by this address and checks
66
+ * `tokenToBuyWith != ETHEREUM_ADDRESS` for the native path — passing the
67
+ * zero address on-chain reverts with "TSP: incorrect token". We accept the
68
+ * zero address as caller input for convenience, but calldata must always
69
+ * carry ETHEREUM_ADDRESS.
70
+ */
71
+ export const ETHEREUM_ADDRESS = "0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE";
72
+ export function isNativeSentinel(addr) {
73
+ const a = addr.toLowerCase();
74
+ return a === ZeroAddress || a === ETHEREUM_ADDRESS.toLowerCase();
75
+ }
76
+ /**
77
+ * W29: exact-scope ERC20 approval for an OTC purchase.
78
+ *
79
+ * The spender is a per-proposal `TokenSaleProposal` address that cannot be
80
+ * resolved through the pool registry (it is not a pool helper), so the builder
81
+ * can only `isAddress`-check it. Granting `MAX_UINT256` to an unvalidated,
82
+ * possibly attacker-supplied spender lets it `transferFrom` the buyer's entire
83
+ * payment-token balance and leaves a residual unlimited allowance after the
84
+ * session. Approve exactly what `buy()` will spend — never more.
85
+ */
86
+ export function buildExactApproval(paymentToken, tokenSaleProposal, amount, chainId) {
87
+ return {
88
+ to: paymentToken,
89
+ data: ERC20_ABI.encodeFunctionData("approve", [tokenSaleProposal, amount]),
90
+ value: "0",
91
+ chainId,
92
+ description: `ERC20.approve(${tokenSaleProposal}, ${amount})`,
93
+ };
94
+ }
95
+ /**
96
+ * Frontend-compat (app.dexe.io): the buyer UI regenerates merkle proofs from
97
+ * the IPFS `{ list: [...] }` JSON referenced by the tier's MerkleWhitelist
98
+ * uri (`useTokenSaleWhiteListProofFetcher`). A merkle tier created with an
99
+ * empty uri is unbuyable through the frontend — nobody can fetch the list to
100
+ * derive a proof. So before encoding, upload the whitelist and inject
101
+ * `ipfs://<cid>` into the participation spec (matches the frontend's
102
+ * `IpfsEntity.path` format; addresses lowercased like the frontend does).
103
+ */
104
+ async function resolveMerkleUris(tiers, pinataJwt) {
105
+ const uploaded = [];
106
+ const warnings = [];
107
+ const out = [];
108
+ for (const tier of tiers) {
109
+ const parts = tier.participation ?? [];
110
+ const needsUpload = parts.some((p) => p.type === "MerkleWhitelist" && !p.uri && (p.users?.length ?? 0) > 0);
111
+ if (!needsUpload) {
112
+ out.push(tier);
113
+ continue;
114
+ }
115
+ if (!pinataJwt) {
116
+ warnings.push(`Tier "${tier.name}": MerkleWhitelist uri left empty (DEXE_PINATA_JWT unset) — ` +
117
+ `app.dexe.io buyers cannot regenerate proofs for this tier; distribute the whitelist out-of-band.`);
118
+ out.push(tier);
119
+ continue;
120
+ }
121
+ const pinata = new PinataClient(pinataJwt);
122
+ const newParts = [];
123
+ for (const p of parts) {
124
+ if (p.type === "MerkleWhitelist" && !p.uri && (p.users?.length ?? 0) > 0) {
125
+ const list = p.users.map((u) => u.toLowerCase());
126
+ const res = await pinata.pinJson({ list }, { name: `otc-whitelist:${tier.name.slice(0, 24)}` });
127
+ const uri = `ipfs://${res.cid}`;
128
+ uploaded.push({ tierName: tier.name, uri });
129
+ newParts.push({ ...p, uri });
130
+ }
131
+ else {
132
+ newParts.push(p);
133
+ }
134
+ }
135
+ out.push({ ...tier, participation: newParts });
136
+ }
137
+ return { tiers: out, uploaded, warnings };
49
138
  }
50
139
  // ---------- register ----------
51
140
  export function registerOtcTools(server, ctx, signer) {
@@ -55,7 +144,8 @@ export function registerOtcTools(server, ctx, signer) {
55
144
  // =============================================
56
145
  server.tool("dexe_otc_dao_open_sale", "OTC composite — propose to open a multi-tier token sale on a deployed OTC DAO. " +
57
146
  "Builds the multi-tier `createTiers` envelope (deduped/summed approves, auto-merkle, " +
58
- "auto-addToWhitelist for plain Whitelist tiers), then runs the full proposal_create " +
147
+ "auto-addToWhitelist for plain Whitelist tiers, auto-upload of merkle whitelists to " +
148
+ "IPFS so app.dexe.io buyers can regenerate proofs), then runs the full proposal_create " +
59
149
  "flow: balance + threshold check, ERC20 approve to UserKeeper if needed, deposit, " +
60
150
  "IPFS proposal-metadata upload, `createProposalAndVote`. " +
61
151
  "When DEXE_PRIVATE_KEY is set, signs and broadcasts each tx; otherwise returns " +
@@ -80,9 +170,21 @@ export function registerOtcTools(server, ctx, signer) {
80
170
  buildOnly: z.boolean().default(false).describe("If true, return just the envelope (actions + metadata + merkle roots) without running the proposal_create flow. Skips IPFS upload and DAO state reads."),
81
171
  }, async (input) => {
82
172
  try {
173
+ // Frontend-compat: merkle tiers must reference their whitelist on
174
+ // IPFS or app.dexe.io buyers cannot derive proofs. buildOnly skips
175
+ // uploads by design — the caller owns IPFS there.
176
+ let tiers = input.tiers;
177
+ let whitelistUploads = [];
178
+ let whitelistWarnings = [];
179
+ if (!input.buildOnly) {
180
+ const resolved = await resolveMerkleUris(input.tiers, ctx.config.pinataJwt);
181
+ tiers = resolved.tiers;
182
+ whitelistUploads = resolved.uploaded;
183
+ whitelistWarnings = resolved.warnings;
184
+ }
83
185
  const built = buildTokenSaleMultiActions({
84
186
  tokenSaleProposal: input.tokenSaleProposal,
85
- tiers: input.tiers,
187
+ tiers,
86
188
  latestTierId: input.latestTierId,
87
189
  proposalName: input.proposalName,
88
190
  proposalDescription: input.proposalDescription,
@@ -96,7 +198,7 @@ export function registerOtcTools(server, ctx, signer) {
96
198
  tierNames: built.tierNames,
97
199
  derivedMerkleRoots: built.derivedMerkleRoots,
98
200
  whitelistRequests: built.whitelistRequests,
99
- tierIdsAfterExecute: input.tiers.map((_, i) => (BigInt(input.latestTierId) + 1n + BigInt(i)).toString()),
201
+ tierIdsAfterExecute: input.tiers.map((_, i) => (parseUintString(input.latestTierId, "latestTierId") + 1n + BigInt(i)).toString()),
100
202
  },
101
203
  metadata: built.metadata,
102
204
  actions: built.actions,
@@ -144,7 +246,9 @@ export function registerOtcTools(server, ctx, signer) {
144
246
  tierNames: built.tierNames,
145
247
  derivedMerkleRoots: built.derivedMerkleRoots,
146
248
  whitelistRequests: built.whitelistRequests,
147
- tierIdsAfterExecute: input.tiers.map((_, i) => (BigInt(input.latestTierId) + 1n + BigInt(i)).toString()),
249
+ merkleWhitelistUploads: whitelistUploads,
250
+ ...(whitelistWarnings.length > 0 ? { warnings: whitelistWarnings } : {}),
251
+ tierIdsAfterExecute: input.tiers.map((_, i) => (parseUintString(input.latestTierId, "latestTierId") + 1n + BigInt(i)).toString()),
148
252
  },
149
253
  });
150
254
  }
@@ -157,8 +261,9 @@ export function registerOtcTools(server, ctx, signer) {
157
261
  // =============================================
158
262
  server.tool("dexe_otc_buyer_status", "OTC buyer aggregator — reads tier params + user state across N tiers and returns a " +
159
263
  "render-ready summary (purchasable status, claimable amount, vesting withdrawable, " +
160
- "lockup ETA). When `whitelistUsers` is supplied per tier, computes the merkle proof " +
161
- "for the user against that list. Read-only.", {
264
+ "lockup ETA, totalSold, on-chain merkle root). When `whitelists` is supplied per tier, " +
265
+ "computes the user's merkle proof against that list AND passes it into getUserViews — " +
266
+ "so `canParticipate` is accurate for merkle-gated tiers. Read-only.", {
162
267
  tokenSaleProposal: z.string(),
163
268
  tierIds: z.array(z.string()).min(1),
164
269
  user: z.string(),
@@ -182,28 +287,57 @@ export function registerOtcTools(server, ctx, signer) {
182
287
  // For tier params we need an offset-based getTierViews. The cheapest
183
288
  // path is a single batch query with offset=min(tierIds)-1 and limit=range,
184
289
  // then index into the result by (tierId - offset - 1).
185
- const tierIdNums = tierIds.map((s) => BigInt(s));
290
+ const tierIdNums = tierIds.map((s) => parseUintString(s, "tierId"));
186
291
  const minTier = tierIdNums.reduce((a, b) => (a < b ? a : b));
187
292
  const maxTier = tierIdNums.reduce((a, b) => (a > b ? a : b));
188
293
  const offset = (minTier - 1n).toString();
189
294
  const limit = (maxTier - minTier + 1n).toString();
190
- const calls = [
191
- {
192
- target: tokenSaleProposal,
193
- iface: TOKEN_SALE_ABI,
194
- method: "getTierViews",
195
- args: [BigInt(offset), BigInt(limit)],
196
- allowFailure: true,
197
- },
198
- {
199
- target: tokenSaleProposal,
200
- iface: TOKEN_SALE_ABI,
201
- method: "getUserViews",
202
- args: [userAddr, tierIdNums, tierIdNums.map(() => [])],
203
- allowFailure: true,
204
- },
205
- ];
206
295
  try {
296
+ // Pre-compute merkle proofs per tier BEFORE the reads — the contract's
297
+ // getUserViews takes bytes32[][] proofs, and canParticipate for
298
+ // MerkleWhitelist tiers is proof-dependent (empty proofs => false even
299
+ // for included users). Mirrors the frontend's useFetchMergedTierViews.
300
+ const whitelistByTier = new Map(whitelists.map((w) => [w.tierId, w.users]));
301
+ const merkleByTier = new Map();
302
+ for (const [tierId, wlUsers] of whitelistByTier) {
303
+ if (!wlUsers || wlUsers.length === 0)
304
+ continue;
305
+ const checksummed = wlUsers.map((u) => {
306
+ if (!isAddress(u))
307
+ throw new Error(`whitelist user invalid: ${u}`);
308
+ return getAddress(u);
309
+ });
310
+ const tree = buildAddressMerkleTree(checksummed);
311
+ const idx = checksummed.findIndex((a) => a.toLowerCase() === userAddr.toLowerCase());
312
+ if (idx >= 0) {
313
+ const leaf = computeLeafHash([userAddr], ["address"]);
314
+ const proof = tree.proofs[idx];
315
+ merkleByTier.set(tierId, {
316
+ root: tree.root,
317
+ proof,
318
+ included: verifyProof(proof, tree.root, leaf),
319
+ });
320
+ }
321
+ else {
322
+ merkleByTier.set(tierId, { root: tree.root, proof: [], included: false });
323
+ }
324
+ }
325
+ const calls = [
326
+ {
327
+ target: tokenSaleProposal,
328
+ iface: TOKEN_SALE_ABI,
329
+ method: "getTierViews",
330
+ args: [BigInt(offset), BigInt(limit)],
331
+ allowFailure: true,
332
+ },
333
+ {
334
+ target: tokenSaleProposal,
335
+ iface: TOKEN_SALE_ABI,
336
+ method: "getUserViews",
337
+ args: [userAddr, tierIdNums, tierIds.map((id) => merkleByTier.get(id)?.proof ?? [])],
338
+ allowFailure: true,
339
+ },
340
+ ];
207
341
  const res = await multicall(provider, calls);
208
342
  if (!res[0].success)
209
343
  return err(`getTierViews failed: ${res[0].error}`);
@@ -211,55 +345,64 @@ export function registerOtcTools(server, ctx, signer) {
211
345
  return err(`getUserViews failed: ${res[1].error}`);
212
346
  const tierViewsRange = res[0].value;
213
347
  const userViews = res[1].value;
214
- const whitelistByTier = new Map(whitelists.map((w) => [w.tierId, w.users]));
215
348
  const summaries = tierIds.map((tierIdStr, i) => {
216
349
  const tierIdx = Number(BigInt(tierIdStr) - minTier);
217
- const tier = tierViewsRange[tierIdx];
218
- if (!tier) {
350
+ // Contract returns nested TierView { tierInitParams, tierInfo,
351
+ // tierAdditionalInfo } — see TIER_VIEW_TUPLE.
352
+ const tv = tierViewsRange[tierIdx];
353
+ if (!tv) {
219
354
  return { tierId: tierIdStr, error: "tier not found in range" };
220
355
  }
356
+ const tier = tv.tierInitParams;
221
357
  const uv = userViews[i];
222
358
  if (!uv) {
223
359
  return { tierId: tierIdStr, error: "user view missing" };
224
360
  }
225
- // Surface participation requirements + compute merkle proof for user
226
- // when caller supplied a whitelist.
361
+ // Surface participation requirements; the merkle proof (if a
362
+ // whitelist was supplied) was already computed pre-read.
227
363
  const participation = tier.participationDetails.map((p) => ({
228
- type: PARTICIPATION_TYPE_NAMES[p.participationType] ?? `Unknown(${p.participationType})`,
364
+ type: PARTICIPATION_TYPE_NAMES[Number(p.participationType)] ??
365
+ `Unknown(${p.participationType})`,
229
366
  data: p.data,
230
367
  }));
231
- const wlList = whitelistByTier.get(tierIdStr);
232
- let merkle;
233
- if (wlList && wlList.length > 0) {
234
- const checksummed = wlList.map((u) => {
235
- if (!isAddress(u))
236
- throw new Error(`whitelist user invalid: ${u}`);
237
- return getAddress(u);
238
- });
239
- const tree = buildAddressMerkleTree(checksummed);
240
- const idx = checksummed.findIndex((a) => a.toLowerCase() === userAddr.toLowerCase());
241
- if (idx >= 0) {
242
- const leaf = computeLeafHash([userAddr], ["address"]);
243
- const proof = tree.proofs[idx];
244
- merkle = { root: tree.root, proof, included: verifyProof(proof, tree.root, leaf) };
245
- }
246
- else {
247
- merkle = { root: tree.root, proof: [], included: false };
368
+ const onchainMerkleRoot = tv.tierAdditionalInfo.merkleRoot === ZeroHash
369
+ ? null
370
+ : tv.tierAdditionalInfo.merkleRoot;
371
+ const merkleLocal = merkleByTier.get(tierIdStr);
372
+ const merkle = merkleLocal
373
+ ? {
374
+ ...merkleLocal,
375
+ onchainRoot: onchainMerkleRoot,
376
+ // Guards against a stale/foreign whitelist: the proof only
377
+ // works on-chain when the roots match.
378
+ rootMatchesOnchain: onchainMerkleRoot === null
379
+ ? null
380
+ : merkleLocal.root.toLowerCase() === onchainMerkleRoot.toLowerCase(),
248
381
  }
249
- }
382
+ : undefined;
250
383
  return {
251
384
  tierId: tierIdStr,
252
- metadata: tier.metadata,
385
+ metadata: { name: tier.metadata.name, description: tier.metadata.description },
253
386
  saleTokenAddress: tier.saleTokenAddress,
254
387
  saleStartTime: tier.saleStartTime,
255
388
  saleEndTime: tier.saleEndTime,
256
389
  totalTokenProvided: tier.totalTokenProvided,
257
- purchaseTokenAddresses: tier.purchaseTokenAddresses,
258
- exchangeRates: tier.exchangeRates,
390
+ totalSold: tv.tierInfo.totalSold,
391
+ isOff: tv.tierInfo.isOff,
392
+ tierUri: tv.tierInfo.uri || null,
393
+ onchainMerkleRoot,
394
+ merkleUri: tv.tierAdditionalInfo.merkleUri || null,
395
+ purchaseTokenAddresses: [...tier.purchaseTokenAddresses],
396
+ exchangeRates: [...tier.exchangeRates],
259
397
  minAllocationPerUser: tier.minAllocationPerUser,
260
398
  maxAllocationPerUser: tier.maxAllocationPerUser,
261
399
  claimLockDuration: tier.claimLockDuration,
262
- vestingSettings: tier.vestingSettings,
400
+ vestingSettings: {
401
+ vestingPercentage: tier.vestingSettings.vestingPercentage,
402
+ vestingDuration: tier.vestingSettings.vestingDuration,
403
+ cliffPeriod: tier.vestingSettings.cliffPeriod,
404
+ unlockStep: tier.vestingSettings.unlockStep,
405
+ },
263
406
  participation,
264
407
  user: {
265
408
  canParticipate: uv.canParticipate,
@@ -296,8 +439,13 @@ export function registerOtcTools(server, ctx, signer) {
296
439
  .optional()
297
440
  .describe("Target chain id. Defaults to the MCP's default chain."),
298
441
  tierId: z.string(),
299
- tokenToBuyWith: z.string().describe("Payment token; use 0x000...000 for native BNB"),
300
- amount: z.string().describe("Amount to spend in payment-token wei"),
442
+ tokenToBuyWith: z
443
+ .string()
444
+ .describe("Payment token; for native BNB pass 0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE (protocol ETHEREUM_ADDRESS). " +
445
+ "The zero address is accepted as an alias, but calldata always carries ETHEREUM_ADDRESS — the contract keys exchange rates by it."),
446
+ amount: z
447
+ .string()
448
+ .describe("Amount to spend, as an 18-decimal-normalized quantity. On-chain buy() converts it via from18Safe(token) to the payment token's native decimals: for an 18-decimal token this equals raw wei; for a token with d<18 decimals pass rawAmount * 10^(18-d). Passing raw native wei for a non-18-decimal token under-pays by 10^(18-d)."),
301
449
  proof: z.array(z.string()).default([]),
302
450
  whitelistUsers: z.array(z.string()).default([]).describe("Optional whitelist for proof gen"),
303
451
  user: z.string().optional(),
@@ -315,9 +463,13 @@ export function registerOtcTools(server, ctx, signer) {
315
463
  if (!userResolved)
316
464
  return err(`Provide 'user' or set DEXE_PRIVATE_KEY.`);
317
465
  const userAddr = getAddress(userResolved);
318
- const tierIdBn = BigInt(input.tierId);
319
- const amountBn = BigInt(input.amount);
466
+ const tierIdBn = parseUintString(input.tierId, "tierId");
467
+ const amountBn = parseUintString(input.amount, "amount");
320
468
  const native = isNativeSentinel(input.tokenToBuyWith);
469
+ // Contract-canonical payment token: native buys MUST carry
470
+ // ETHEREUM_ADDRESS (0xEeee…EEeE) — the zero address reverts on-chain
471
+ // with "TSP: incorrect token".
472
+ const tokenArg = native ? ETHEREUM_ADDRESS : getAddress(input.tokenToBuyWith);
321
473
  // Compute proof from whitelistUsers if needed.
322
474
  let proof = input.proof;
323
475
  if (proof.length === 0 && input.whitelistUsers.length > 0) {
@@ -347,14 +499,14 @@ export function registerOtcTools(server, ctx, signer) {
347
499
  if (!native) {
348
500
  const calls = [
349
501
  {
350
- target: input.tokenToBuyWith,
502
+ target: tokenArg,
351
503
  iface: ERC20_ABI,
352
504
  method: "balanceOf",
353
505
  args: [userAddr],
354
506
  allowFailure: true,
355
507
  },
356
508
  {
357
- target: input.tokenToBuyWith,
509
+ target: tokenArg,
358
510
  iface: ERC20_ABI,
359
511
  method: "allowance",
360
512
  args: [userAddr, input.tokenSaleProposal],
@@ -368,16 +520,7 @@ export function registerOtcTools(server, ctx, signer) {
368
520
  return err(`Insufficient ${input.tokenToBuyWith} balance: have ${balance}, need ${amountBn}.`);
369
521
  }
370
522
  if (allowance < amountBn) {
371
- payloads.push({
372
- to: input.tokenToBuyWith,
373
- data: ERC20_ABI.encodeFunctionData("approve", [
374
- input.tokenSaleProposal,
375
- MaxUint256,
376
- ]),
377
- value: "0",
378
- chainId,
379
- description: `ERC20.approve(${input.tokenSaleProposal}, MAX_UINT256)`,
380
- });
523
+ payloads.push(buildExactApproval(tokenArg, input.tokenSaleProposal, amountBn, chainId));
381
524
  }
382
525
  else {
383
526
  skipped.push({ label: "ERC20.approve", reason: "Allowance sufficient" });
@@ -386,7 +529,7 @@ export function registerOtcTools(server, ctx, signer) {
386
529
  // buy()
387
530
  const buyData = TOKEN_SALE_ABI.encodeFunctionData("buy", [
388
531
  tierIdBn,
389
- input.tokenToBuyWith,
532
+ tokenArg,
390
533
  amountBn,
391
534
  proof,
392
535
  ]);
@@ -395,7 +538,7 @@ export function registerOtcTools(server, ctx, signer) {
395
538
  data: buyData,
396
539
  value: native ? amountBn.toString() : "0",
397
540
  chainId,
398
- description: `TokenSaleProposal.buy(tier=${tierIdBn}, ${native ? "native" : input.tokenToBuyWith}, ${amountBn})`,
541
+ description: `TokenSaleProposal.buy(tier=${tierIdBn}, ${native ? `native (${ETHEREUM_ADDRESS})` : tokenArg}, ${amountBn})`,
399
542
  });
400
543
  // Optional simulation gate: preflight the buy() against live state before
401
544
  // we ever touch the broadcast path. Skipped on dryRun since dryRun
@@ -450,7 +593,7 @@ export function registerOtcTools(server, ctx, signer) {
450
593
  if (!userResolved)
451
594
  return err(`Provide 'user' or set DEXE_PRIVATE_KEY.`);
452
595
  const userAddr = getAddress(userResolved);
453
- const tierIdBns = input.tierIds.map((s) => BigInt(s));
596
+ const tierIdBns = input.tierIds.map((s) => parseUintString(s, "tierId"));
454
597
  const chain = resolveChain(ctx.config, input.chainId);
455
598
  const chainId = chain.chainId;
456
599
  const pr2 = rpc.tryProvider(chainId);
@@ -1 +1 @@
1
- {"version":3,"file":"otc.js","sourceRoot":"","sources":["../../src/tools/otc.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"otc.js","sourceRoot":"","sources":["../../src/tools/otc.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"proposalBuild.d.ts","sourceRoot":"","sources":["../../src/tools/proposalBuild.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACzE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AA0ChD,wBAAgB,0BAA0B,CAAC,MAAM,EAAE,SAAS,EAAE,GAAG,EAAE,WAAW,GAAG,IAAI,CAOpF"}
1
+ {"version":3,"file":"proposalBuild.d.ts","sourceRoot":"","sources":["../../src/tools/proposalBuild.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACzE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AA4ChD,wBAAgB,0BAA0B,CAAC,MAAM,EAAE,SAAS,EAAE,GAAG,EAAE,WAAW,GAAG,IAAI,CAOpF"}
@@ -3,6 +3,8 @@ import { Interface, isAddress, ZeroAddress } from "ethers";
3
3
  import { buildPayload } from "../lib/calldata.js";
4
4
  import { checkBlacklist, blacklistError } from "../lib/blacklist.js";
5
5
  import { findForbiddenSelector, dangerousSelectorError } from "../lib/dangerousSelectors.js";
6
+ import { CUSTOM_ABI_DEFAULT_ROUTING_ADVISORY } from "../lib/protocolAdvisories.js";
7
+ import { buildTimeTreasuryAdvisory } from "../lib/quorumRisk.js";
6
8
  import { PROPOSAL_CATALOG, EXTERNAL_METADATA_SHAPE, INTERNAL_METADATA_SHAPE, } from "../lib/proposalCatalog.js";
7
9
  const GOV_POOL_ABI = [
8
10
  "function createProposal(string descriptionURL, tuple(address executor, uint256 value, bytes data)[] actionsOnFor, tuple(address executor, uint256 value, bytes data)[] actionsOnAgainst)",
@@ -118,6 +120,9 @@ function registerBuildExternal(server, ctx) {
118
120
  if (forbidden)
119
121
  return errorResult(dangerousSelectorError(forbidden, a.executor));
120
122
  }
123
+ // Layer 4 (treasury-safety advisory): flag any value-moving /
124
+ // allowance-granting action so a reviewer checks quorum before voting.
125
+ const treasuryAdvisory = buildTimeTreasuryAdvisory([...on, ...against].map((a) => ({ executor: a.executor, value: a.value.toString(), data: a.data })), ctx.config.treasuryGuard);
121
126
  let payload;
122
127
  if (andVote) {
123
128
  payload = buildPayload({
@@ -147,7 +152,7 @@ function registerBuildExternal(server, ctx) {
147
152
  description: `GovPool.createProposal (${on.length} for / ${against.length} against)`,
148
153
  });
149
154
  }
150
- return payloadResult(payload);
155
+ return payloadResult(payload, treasuryAdvisory);
151
156
  }
152
157
  catch (err) {
153
158
  return errorResult(err instanceof Error ? err.message : String(err));
@@ -232,8 +237,15 @@ function registerBuildCustomAbi(server, ctx) {
232
237
  return errorResult(dangerousSelectorError(forbidden, target));
233
238
  const action = { executor: target, value, data };
234
239
  const preview = `ProposalAction → ${target}.${method}(${args.length} args), value=${value}, calldata=${data.slice(0, 18)}…`;
240
+ const treasuryAdvisory = buildTimeTreasuryAdvisory([action], ctx.config.treasuryGuard);
235
241
  return {
236
- content: [{ type: "text", text: preview }],
242
+ content: [
243
+ {
244
+ type: "text",
245
+ text: `${preview}\n\n${CUSTOM_ABI_DEFAULT_ROUTING_ADVISORY}` +
246
+ (treasuryAdvisory ? `\n\n${treasuryAdvisory}` : ""),
247
+ },
248
+ ],
237
249
  structuredContent: { action, preview },
238
250
  };
239
251
  }
@@ -351,11 +363,13 @@ function registerBuildTokenTransfer(server, ctx) {
351
363
  };
352
364
  const nextStep = `1) dexe_ipfs_upload_proposal_metadata with { title: "${proposalName}", description, extra: changes } → get CID\n` +
353
365
  `2) dexe_proposal_build_external with govPool="${govPool}", descriptionURL=<CID>, actionsOnFor=actions`;
366
+ const treasuryAdvisory = buildTimeTreasuryAdvisory(actions, ctx.config.treasuryGuard);
354
367
  return {
355
368
  content: [
356
369
  {
357
370
  type: "text",
358
- text: `Built token-transfer proposal scaffolding.\n\nAction: ${actionLabel}\n\nNext:\n${nextStep}`,
371
+ text: `Built token-transfer proposal scaffolding.\n\nAction: ${actionLabel}\n\nNext:\n${nextStep}` +
372
+ (treasuryAdvisory ? `\n\n${treasuryAdvisory}` : ""),
359
373
  },
360
374
  ],
361
375
  structuredContent: { metadata, actions, nextStep },
@@ -376,12 +390,13 @@ function payloadSchema() {
376
390
  description: z.string(),
377
391
  };
378
392
  }
379
- function payloadResult(payload) {
393
+ function payloadResult(payload, advisory) {
380
394
  return {
381
395
  content: [
382
396
  {
383
397
  type: "text",
384
- text: `${payload.description}\n to : ${payload.to}\n value: ${payload.value}\n data : ${payload.data.slice(0, 66)}…`,
398
+ text: `${payload.description}\n to : ${payload.to}\n value: ${payload.value}\n data : ${payload.data.slice(0, 66)}…` +
399
+ (advisory ? `\n\n${advisory}` : ""),
385
400
  },
386
401
  ],
387
402
  structuredContent: { ...payload },