dexe-mcp 0.16.0 → 0.19.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 (83) hide show
  1. package/CHANGELOG.md +108 -0
  2. package/README.md +1 -1
  3. package/dexe-plugin/skills/dexe-create-dao/SKILL.md +90 -66
  4. package/dexe-plugin/skills/dexe-setup/SKILL.md +117 -73
  5. package/dist/cli/init.d.ts.map +1 -1
  6. package/dist/cli/init.js +7 -4
  7. package/dist/cli/init.js.map +1 -1
  8. package/dist/config.d.ts +32 -1
  9. package/dist/config.d.ts.map +1 -1
  10. package/dist/config.js +45 -7
  11. package/dist/config.js.map +1 -1
  12. package/dist/diag/checks.d.ts.map +1 -1
  13. package/dist/diag/checks.js +53 -4
  14. package/dist/diag/checks.js.map +1 -1
  15. package/dist/env/schema.d.ts +7 -0
  16. package/dist/env/schema.d.ts.map +1 -1
  17. package/dist/env/schema.js +7 -0
  18. package/dist/env/schema.js.map +1 -1
  19. package/dist/lib/ipfs.d.ts +9 -7
  20. package/dist/lib/ipfs.d.ts.map +1 -1
  21. package/dist/lib/ipfs.js +36 -8
  22. package/dist/lib/ipfs.js.map +1 -1
  23. package/dist/lib/preflight.d.ts +67 -4
  24. package/dist/lib/preflight.d.ts.map +1 -1
  25. package/dist/lib/preflight.js +155 -14
  26. package/dist/lib/preflight.js.map +1 -1
  27. package/dist/lib/qr.d.ts +43 -0
  28. package/dist/lib/qr.d.ts.map +1 -0
  29. package/dist/lib/qr.js +95 -0
  30. package/dist/lib/qr.js.map +1 -0
  31. package/dist/lib/requireEnv.d.ts +7 -0
  32. package/dist/lib/requireEnv.d.ts.map +1 -1
  33. package/dist/lib/requireEnv.js +13 -0
  34. package/dist/lib/requireEnv.js.map +1 -1
  35. package/dist/lib/walletconnect.d.ts +15 -0
  36. package/dist/lib/walletconnect.d.ts.map +1 -1
  37. package/dist/lib/walletconnect.js +26 -0
  38. package/dist/lib/walletconnect.js.map +1 -1
  39. package/dist/rpc.d.ts.map +1 -1
  40. package/dist/rpc.js +47 -1
  41. package/dist/rpc.js.map +1 -1
  42. package/dist/tools/daoCreate.d.ts +40 -1
  43. package/dist/tools/daoCreate.d.ts.map +1 -1
  44. package/dist/tools/daoCreate.js +264 -29
  45. package/dist/tools/daoCreate.js.map +1 -1
  46. package/dist/tools/daoDeploy.d.ts.map +1 -1
  47. package/dist/tools/daoDeploy.js +41 -3
  48. package/dist/tools/daoDeploy.js.map +1 -1
  49. package/dist/tools/flow.d.ts +16 -1
  50. package/dist/tools/flow.d.ts.map +1 -1
  51. package/dist/tools/flow.js +67 -12
  52. package/dist/tools/flow.js.map +1 -1
  53. package/dist/tools/getConfig.d.ts.map +1 -1
  54. package/dist/tools/getConfig.js +7 -0
  55. package/dist/tools/getConfig.js.map +1 -1
  56. package/dist/tools/index.js +3 -3
  57. package/dist/tools/index.js.map +1 -1
  58. package/dist/tools/ipfs.d.ts.map +1 -1
  59. package/dist/tools/ipfs.js +34 -14
  60. package/dist/tools/ipfs.js.map +1 -1
  61. package/dist/tools/operationalContext.d.ts.map +1 -1
  62. package/dist/tools/operationalContext.js +16 -1
  63. package/dist/tools/operationalContext.js.map +1 -1
  64. package/dist/tools/otc.d.ts +2 -1
  65. package/dist/tools/otc.d.ts.map +1 -1
  66. package/dist/tools/otc.js +6 -4
  67. package/dist/tools/otc.js.map +1 -1
  68. package/dist/tools/proposalBuild.d.ts.map +1 -1
  69. package/dist/tools/proposalBuild.js +3 -4
  70. package/dist/tools/proposalBuild.js.map +1 -1
  71. package/dist/tools/proposalBuildOffchain.d.ts.map +1 -1
  72. package/dist/tools/proposalBuildOffchain.js +3 -6
  73. package/dist/tools/proposalBuildOffchain.js.map +1 -1
  74. package/dist/tools/read.d.ts.map +1 -1
  75. package/dist/tools/read.js +7 -9
  76. package/dist/tools/read.js.map +1 -1
  77. package/dist/tools/txSend.d.ts.map +1 -1
  78. package/dist/tools/txSend.js +36 -14
  79. package/dist/tools/txSend.js.map +1 -1
  80. package/dist/tools/walletconnectStatus.d.ts.map +1 -1
  81. package/dist/tools/walletconnectStatus.js +13 -29
  82. package/dist/tools/walletconnectStatus.js.map +1 -1
  83. package/package.json +3 -1
package/dist/lib/ipfs.js CHANGED
@@ -5,14 +5,20 @@ import { sha256 } from "multiformats/hashes/sha2";
5
5
  import { base32 } from "multiformats/bases/base32";
6
6
  import { base58btc } from "multiformats/bases/base58";
7
7
  /**
8
- * Public IPFS gateways (dweb.link, ipfs.io, cf-ipfs.com, …) are unreliable
9
- * frequent 502s, rate limits, and extended outages in 2025/2026. We do NOT
10
- * ship a default public-gateway chain. Callers must configure a dedicated
11
- * gateway via `DEXE_IPFS_GATEWAY` (e.g. the user's Pinata dedicated gateway,
12
- * Filebase, Quicknode, or a self-hosted one). Public gateways may be
13
- * opted-in as a best-effort fallback via `DEXE_IPFS_GATEWAYS_FALLBACK`.
8
+ * Public IPFS read gateways seeded as a zero-config default when the operator
9
+ * configures no dedicated gateway. Public gateways (ipfs.io, dweb.link,
10
+ * cloudflare) are best-effort — they rate-limit and occasionally 5xx so
11
+ * `fetchIpfs` tries them in order and `dexe_doctor` nudges heavy users toward a
12
+ * dedicated gateway (a free Pinata dedicated gateway, Filebase, Quicknode, or a
13
+ * self-hosted one) via `DEXE_IPFS_GATEWAY`. Opt out of the public default with
14
+ * `DEXE_IPFS_DISABLE_PUBLIC_FALLBACK=1`. This covers READS only — uploads still
15
+ * require a Pinata JWT.
14
16
  */
15
- export const NO_DEFAULT_GATEWAYS = [];
17
+ export const DEFAULT_PUBLIC_READ_GATEWAYS = [
18
+ "https://ipfs.io",
19
+ "https://dweb.link",
20
+ "https://cloudflare-ipfs.com",
21
+ ];
16
22
  export async function fetchIpfs(cid, cfg) {
17
23
  const parsed = CID.parse(stripIpfsPrefix(cid));
18
24
  const cidStr = parsed.toString();
@@ -76,7 +82,29 @@ export async function fetchIpfs(cid, cfg) {
76
82
  clearTimeout(t);
77
83
  }
78
84
  }
79
- throw new Error(`IPFS fetch failed for ${cidStr} across ${attempts} gateway(s): ${errors.join("; ")}`);
85
+ // When every gateway tried was a shared public reader, the failure is almost
86
+ // always public-gateway flakiness, not a bad CID — nudge toward a dedicated one.
87
+ // Match by parsed hostname, not a URL substring (js/incomplete-url-substring-sanitization).
88
+ const PUBLIC_READ_HOSTS = new Set(["ipfs.io", "dweb.link", "cloudflare-ipfs.com", "cf-ipfs.com"]);
89
+ const hostOf = (u) => {
90
+ try {
91
+ return new URL(/^https?:\/\//i.test(u) ? u : `https://${u}`).hostname.toLowerCase();
92
+ }
93
+ catch {
94
+ return null;
95
+ }
96
+ };
97
+ const allPublic = cfg.gateways.length > 0 &&
98
+ cfg.gateways.every((g) => {
99
+ const h = hostOf(g);
100
+ return h != null && PUBLIC_READ_HOSTS.has(h);
101
+ });
102
+ const hint = allPublic
103
+ ? " — the shared public IPFS gateways are failing. Set DEXE_IPFS_GATEWAY to a dedicated " +
104
+ "gateway (a free Pinata dedicated gateway takes ~2 min; Filebase / Quicknode also work), " +
105
+ "then restart. Run /dexe-setup for a guided walkthrough."
106
+ : "";
107
+ throw new Error(`IPFS fetch failed for ${cidStr} across ${attempts} gateway(s): ${errors.join("; ")}${hint}`);
80
108
  }
81
109
  /**
82
110
  * W20 content-address check. Returns "verified" when sha256(bytes) reproduces
@@ -1 +1 @@
1
- {"version":3,"file":"ipfs.js","sourceRoot":"","sources":["../../src/lib/ipfs.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ipfs.js","sourceRoot":"","sources":["../../src/lib/ipfs.ts"],"names":[],"mappings":"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"}
@@ -105,7 +105,15 @@ export declare const DEPOSITED_POWER_REMEDIATION: string;
105
105
  * will under-count. Advisory (never blocks): the flow re-reads live power.
106
106
  */
107
107
  export declare function checkTokensUnlocked(depositedPower: bigint, availablePower: bigint): PreflightResult;
108
- /** cap must be 0 (uncapped) or strictly greater than mintedTotal. */
108
+ /**
109
+ * cap rules (verified live on BSC mainnet via eth_call, 2026-07-06):
110
+ * - `cap = 0` reverts — the gov token is ERC20Capped: "ERC20Capped: cap is 0".
111
+ * There is NO uncapped mode (the old "cap=0 = uncapped" belief was wrong).
112
+ * - `cap < mintedTotal` reverts: "ERC20Gov: mintedTotal should not be greater than cap".
113
+ * - `cap == mintedTotal` is VALID (fixed supply) — the old bug #28 ("cap==minted
114
+ * reverts") is outdated; it succeeds live.
115
+ * So the rule is simply: `cap ≥ mintedTotal` and `cap > 0`.
116
+ */
109
117
  export declare function checkDeployCap(cap: string, mintedTotal: string, isTokenCreation: boolean): PreflightResult;
110
118
  /** LINEAR vote power needs the `__LinearPower_init()` selector, never 0x. */
111
119
  export declare const LINEAR_POWER_INIT_SELECTOR = "0x892aea1f";
@@ -113,10 +121,65 @@ export declare function checkLinearInitData(voteType: string, initData: string |
113
121
  /** UserKeeper needs at least one non-zero governance asset (token or NFT). */
114
122
  export declare function checkUserKeeperAsset(tokenAddress: string, nftAddress: string, isTokenCreation: boolean): PreflightResult;
115
123
  /**
116
- * Mode 7 / bug #32 — on mainnet (chain 56) deployGovPool reverts if
117
- * mintedTotal sum(amounts). Testnet tolerates a remainder; warn only there.
124
+ * Treasury is an IMPLICIT remainder. `sum(amounts)` may be LESS than
125
+ * `mintedTotal`: the contract mints the difference to the DAO (govPool) itself.
126
+ * This is the frontend's proven pattern (`useCreateDAO.ts` — `users`/`amounts`
127
+ * cover only the wallet distribution; the treasury is never an explicit
128
+ * recipient), shipped to BSC mainnet daily. The earlier "mainnet needs
129
+ * mintedTotal == sum(amounts)" belief (old bug #32) was wrong and forced the
130
+ * treasury address into `users[]`. Only OVER-distribution (sum > minted) is
131
+ * invalid. See also `checkNoTreasuryRecipient`.
132
+ */
133
+ export declare function checkTreasuryRemainder(mintedTotal: string, amounts: string[], isTokenCreation: boolean): PreflightResult;
134
+ /**
135
+ * Meritocratic (polynomial) voting power for `votes` at a given `totalSupply`,
136
+ * ported from the frontend `calcMeritocraticVotingPower`
137
+ * (`utils/votePowerMath.ts`) with the default holder coefficient k3 = 0.97.
138
+ * Below the 7%-of-supply threshold, power is linear (== votes); above it the
139
+ * cubic curve applies. Token-amount math stays in bigint (wei); only the
140
+ * dimensionless percentage `t` uses float, at 6-decimal precision.
141
+ */
142
+ export declare function meritocraticVotingPower(votes: bigint, totalSupply: bigint): bigint;
143
+ /**
144
+ * Quorum must be REACHABLE by the votable (wallet-held) token distribution —
145
+ * treasury/undistributed tokens can't vote. Mirrors the frontend's blocking
146
+ * `isLteThanInitialDistribution` (LINEAR) / `isDistributionCanReachQuorum`
147
+ * (POLYNOMIAL). Token-creation only (an external token's supply/distribution
148
+ * is unknown at deploy time, so the frontend skips it too).
149
+ */
150
+ export declare function checkQuorumReachable(args: {
151
+ voteType: string;
152
+ quorumRaw: string;
153
+ mintedTotal: string;
154
+ votable: string;
155
+ isTokenCreation: boolean;
156
+ }): PreflightResult;
157
+ /**
158
+ * `minVotesForVoting` / `minVotesForCreating` must not exceed the largest single
159
+ * recipient's balance — otherwise no holder can ever create or vote. Mirrors the
160
+ * frontend `value-lower-than-distribution` rule. Token-creation only.
161
+ */
162
+ export declare function checkMinVotesVsDistribution(minVotesForVoting: string, minVotesForCreating: string, amounts: string[], isTokenCreation: boolean): PreflightResult;
163
+ /**
164
+ * Contract-level init bounds (`GovSettings.sol:94-106`, `GovValidators.sol`):
165
+ * `0 < quorum ≤ 1e27`, `0 < quorumValidators ≤ 1e27`, `duration > 0`,
166
+ * `durationValidators > 0`. Violations revert `deployGovPool` with an empty
167
+ * reason — catch them here with a readable message.
168
+ */
169
+ export declare function checkSettingsBounds(s: {
170
+ quorum: string;
171
+ quorumValidators: string;
172
+ duration: string;
173
+ durationValidators: string;
174
+ }): PreflightResult;
175
+ /**
176
+ * The DAO treasury (predicted govPool) must NEVER be a token recipient in
177
+ * `tokenParams.users` — treasury tokens can't vote, and the frontend never
178
+ * lists it (the remainder is minted to the DAO implicitly). Listing it inflates
179
+ * `sum(amounts)`, hides an unreachable quorum, and diverges from the frontend
180
+ * calldata shape.
118
181
  */
119
- export declare function checkTreasuryRemainder(mintedTotal: string, amounts: string[], chainId: number, isTokenCreation: boolean): PreflightResult;
182
+ export declare function checkNoTreasuryRecipient(users: string[], predictedGovPool?: string): PreflightResult;
120
183
  /** Avatar must be a real JPEG, not SVG bytes with a .jpeg name (browser rejects). */
121
184
  export declare function checkAvatarIsJpeg(fileName: string, firstBytes?: Uint8Array): PreflightResult;
122
185
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"preflight.d.ts","sourceRoot":"","sources":["../../src/lib/preflight.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AACH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAG/C,MAAM,WAAW,eAAe;IAC9B,oDAAoD;IACpD,KAAK,EAAE,MAAM,CAAC;IACd,EAAE,EAAE,OAAO,CAAC;IACZ,yCAAyC;IACzC,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,mCAAmC;IACnC,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAUD,6DAA6D;AAC7D,wBAAgB,YAAY,CAAC,OAAO,EAAE,eAAe,EAAE,GAAG,eAAe,GAAG,IAAI,CAE/E;AAED,gFAAgF;AAChF,wBAAgB,eAAe,CAAC,OAAO,EAAE,eAAe,EAAE,GAAG,IAAI,CAGhE;AAMD;;;;;GAKG;AACH,eAAO,MAAM,oBAAoB,6KAWvB,CAAC;AAEX,wBAAgB,iBAAiB,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM,CAEnD;AAED,gEAAgE;AAChE,eAAO,MAAM,iBAAiB,aAAqB,CAAC;AAMpD;;;GAGG;AACH,eAAO,MAAM,+BAA+B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;gCAa5B,CAAC;AAEjB,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,OAAO,GAAG,eAAe,CAQpE;AAED,mFAAmF;AACnF,wBAAgB,uBAAuB,CACrC,YAAY,EAAE;IAAE,IAAI,CAAC,EAAE,MAAM,CAAA;CAAE,EAAE,EACjC,IAAI,CAAC,EAAE;IAAE,UAAU,CAAC,EAAE,OAAO,CAAA;CAAE,GAC9B,eAAe,CAOjB;AAMD,wBAAgB,kBAAkB,CAAC,cAAc,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,eAAe,CAc/G;AAMD,eAAO,MAAM,2BAA2B,QAEiC,CAAC;AAE1E;;;;GAIG;AACH,wBAAgB,mBAAmB,CAAC,cAAc,EAAE,MAAM,EAAE,cAAc,EAAE,MAAM,GAAG,eAAe,CAQnG;AAMD,qEAAqE;AACrE,wBAAgB,cAAc,CAAC,GAAG,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE,eAAe,EAAE,OAAO,GAAG,eAAe,CAU1G;AAED,6EAA6E;AAC7E,eAAO,MAAM,0BAA0B,eAAe,CAAC;AAEvD,wBAAgB,mBAAmB,CAAC,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,SAAS,GAAG,eAAe,CAanG;AAED,8EAA8E;AAC9E,wBAAgB,oBAAoB,CAAC,YAAY,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,eAAe,EAAE,OAAO,GAAG,eAAe,CAUxH;AAED;;;GAGG;AACH,wBAAgB,sBAAsB,CACpC,WAAW,EAAE,MAAM,EACnB,OAAO,EAAE,MAAM,EAAE,EACjB,OAAO,EAAE,MAAM,EACf,eAAe,EAAE,OAAO,GACvB,eAAe,CAcjB;AAMD,qFAAqF;AACrF,wBAAgB,iBAAiB,CAAC,QAAQ,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,UAAU,GAAG,eAAe,CAqB5F;AAED;;;;GAIG;AACH,wBAAgB,qBAAqB,CAAC,KAAK,EAAE;IAAE,IAAI,CAAC,EAAE,MAAM,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,GAAG,MAAM,CAAA;CAAE,GAAG,eAAe,CAazG;AAED,uEAAuE;AACvE,wBAAsB,uBAAuB,CAC3C,MAAM,EAAE,UAAU,EAClB,KAAK,EAAE,MAAM,EACb,SAAS,EAAE,MAAM,GAChB,OAAO,CAAC,eAAe,CAAC,CAM1B"}
1
+ {"version":3,"file":"preflight.d.ts","sourceRoot":"","sources":["../../src/lib/preflight.ts"],"names":[],"mappings":"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"}
@@ -18,6 +18,7 @@
18
18
  import { z } from "zod";
19
19
  import { isAddress, ZeroAddress } from "ethers";
20
20
  import { checkBlacklist, blacklistError } from "./blacklist.js";
21
+ import { quorumPctFromRaw } from "./quorumRisk.js";
21
22
  const pass = (check, detail) => ({ check, ok: true, detail });
22
23
  const fail = (check, remediation, detail) => ({
23
24
  check,
@@ -128,16 +129,29 @@ export function checkTokensUnlocked(depositedPower, availablePower) {
128
129
  // ==========================================================================
129
130
  // Mode 7 — DAO deploy silent reverts
130
131
  // ==========================================================================
131
- /** cap must be 0 (uncapped) or strictly greater than mintedTotal. */
132
+ /**
133
+ * cap rules (verified live on BSC mainnet via eth_call, 2026-07-06):
134
+ * - `cap = 0` reverts — the gov token is ERC20Capped: "ERC20Capped: cap is 0".
135
+ * There is NO uncapped mode (the old "cap=0 = uncapped" belief was wrong).
136
+ * - `cap < mintedTotal` reverts: "ERC20Gov: mintedTotal should not be greater than cap".
137
+ * - `cap == mintedTotal` is VALID (fixed supply) — the old bug #28 ("cap==minted
138
+ * reverts") is outdated; it succeeds live.
139
+ * So the rule is simply: `cap ≥ mintedTotal` and `cap > 0`.
140
+ */
132
141
  export function checkDeployCap(cap, mintedTotal, isTokenCreation) {
133
142
  if (!isTokenCreation)
134
143
  return pass("deploy.cap");
135
144
  const capBn = BigInt(cap);
136
145
  const mintedBn = BigInt(mintedTotal);
137
- if (capBn === 0n || capBn > mintedBn)
138
- return pass("deploy.cap", `cap=${capBn} minted=${mintedBn}`);
139
- return fail("deploy.cap", `tokenParams.cap (${capBn}) must be 0 (uncapped) or strictly greater than mintedTotal (${mintedBn}). ` +
140
- "ERC20Gov init reverts silently otherwise (bug #28).");
146
+ if (capBn <= 0n) {
147
+ return fail("deploy.cap", `tokenParams.cap must be > 0 — the gov token is ERC20Capped and cap=0 reverts ("ERC20Capped: cap is 0"). ` +
148
+ `There is no uncapped mode. Set cap mintedTotal (${mintedBn}); cap == mintedTotal is a valid fixed supply.`);
149
+ }
150
+ if (capBn < mintedBn) {
151
+ return fail("deploy.cap", `tokenParams.cap (${capBn}) must be ≥ mintedTotal (${mintedBn}) — otherwise deployGovPool reverts ` +
152
+ `"ERC20Gov: mintedTotal should not be greater than cap". cap == mintedTotal is allowed (fixed supply).`);
153
+ }
154
+ return pass("deploy.cap", `cap=${capBn} minted=${mintedBn}`);
141
155
  }
142
156
  /** LINEAR vote power needs the `__LinearPower_init()` selector, never 0x. */
143
157
  export const LINEAR_POWER_INIT_SELECTOR = "0x892aea1f";
@@ -167,21 +181,148 @@ export function checkUserKeeperAsset(tokenAddress, nftAddress, isTokenCreation)
167
181
  "userKeeperParams.nftAddress (existing ERC721), or tokenParams.name to create a new token.");
168
182
  }
169
183
  /**
170
- * Mode 7 / bug #32 — on mainnet (chain 56) deployGovPool reverts if
171
- * mintedTotal sum(amounts). Testnet tolerates a remainder; warn only there.
184
+ * Treasury is an IMPLICIT remainder. `sum(amounts)` may be LESS than
185
+ * `mintedTotal`: the contract mints the difference to the DAO (govPool) itself.
186
+ * This is the frontend's proven pattern (`useCreateDAO.ts` — `users`/`amounts`
187
+ * cover only the wallet distribution; the treasury is never an explicit
188
+ * recipient), shipped to BSC mainnet daily. The earlier "mainnet needs
189
+ * mintedTotal == sum(amounts)" belief (old bug #32) was wrong and forced the
190
+ * treasury address into `users[]`. Only OVER-distribution (sum > minted) is
191
+ * invalid. See also `checkNoTreasuryRecipient`.
172
192
  */
173
- export function checkTreasuryRemainder(mintedTotal, amounts, chainId, isTokenCreation) {
193
+ export function checkTreasuryRemainder(mintedTotal, amounts, isTokenCreation) {
174
194
  if (!isTokenCreation)
175
195
  return pass("deploy.treasury-remainder");
176
196
  const minted = BigInt(mintedTotal);
177
197
  const sum = amounts.reduce((a, b) => a + BigInt(b), 0n);
178
- if (minted === sum)
179
- return pass("deploy.treasury-remainder", `minted=${minted}`);
180
- if (chainId === 56) {
181
- return fail("deploy.treasury-remainder", `On BSC mainnet, tokenParams.mintedTotal (${minted}) must equal sum(amounts) (${sum}) — a treasury remainder ` +
182
- "reverts deployGovPool (bug #32). Distribute the full mintedTotal across recipients.", `remainder=${minted - sum}`);
198
+ if (sum > minted) {
199
+ return fail("deploy.treasury-remainder", `sum(amounts) (${sum}) exceeds tokenParams.mintedTotal (${minted}) — cannot distribute more than the total ` +
200
+ "mint. Lower the recipient amounts or raise mintedTotal.", `over=${sum - minted}`);
201
+ }
202
+ return pass("deploy.treasury-remainder", `treasuryRemainder=${minted - sum}`);
203
+ }
204
+ // ==========================================================================
205
+ // DAO governance coherence — frontend parity (never ship a broken/unusable DAO)
206
+ // ==========================================================================
207
+ //
208
+ // The frontend (C:/dev/investing-dashboard, source of truth) BLOCKS DAO configs
209
+ // where governance can never function. dexe-mcp had none of these, so the model
210
+ // could (and did) ship a DAO whose quorum was unreachable or whose treasury was
211
+ // jammed into the voter list. These guards mirror the frontend's create-DAO
212
+ // validation (`DefaultProposalStep`, `TokenCreationStep`, `GovSettings.sol`).
213
+ /** DeXe percentage base: 100% = 1e27 (a quorum setting is pct × 1e25). */
214
+ const PERCENTAGE_100 = 10n ** 27n;
215
+ /**
216
+ * Meritocratic (polynomial) voting power for `votes` at a given `totalSupply`,
217
+ * ported from the frontend `calcMeritocraticVotingPower`
218
+ * (`utils/votePowerMath.ts`) with the default holder coefficient k3 = 0.97.
219
+ * Below the 7%-of-supply threshold, power is linear (== votes); above it the
220
+ * cubic curve applies. Token-amount math stays in bigint (wei); only the
221
+ * dimensionless percentage `t` uses float, at 6-decimal precision.
222
+ */
223
+ export function meritocraticVotingPower(votes, totalSupply) {
224
+ if (totalSupply <= 0n)
225
+ return votes;
226
+ const threshold = (totalSupply * 7n) / 100n - 7n;
227
+ if (votes < threshold)
228
+ return votes;
229
+ // t = (votes/totalSupply)×100 − 7, in percentage points, 6-dec precision.
230
+ const t = Number((votes * 1000000n) / totalSupply) / 1_000_000 * 100 - 7;
231
+ let poly = t * 1.041 + t * t * -0.007211 + t * t * t * 0.00001994;
232
+ poly = poly * 0.97; // k3 (holders)
233
+ // power above threshold = poly% of totalSupply (poly scaled ×1e6 to stay integer).
234
+ const aboveWei = (BigInt(Math.round(poly * 1_000_000)) * totalSupply) / (100n * 1000000n);
235
+ const above = aboveWei > 0n ? aboveWei : 0n;
236
+ return above + threshold;
237
+ }
238
+ /**
239
+ * Quorum must be REACHABLE by the votable (wallet-held) token distribution —
240
+ * treasury/undistributed tokens can't vote. Mirrors the frontend's blocking
241
+ * `isLteThanInitialDistribution` (LINEAR) / `isDistributionCanReachQuorum`
242
+ * (POLYNOMIAL). Token-creation only (an external token's supply/distribution
243
+ * is unknown at deploy time, so the frontend skips it too).
244
+ */
245
+ export function checkQuorumReachable(args) {
246
+ if (!args.isTokenCreation)
247
+ return pass("deploy.quorum-reachable", "external token");
248
+ const quorum = BigInt(args.quorumRaw);
249
+ const supply = BigInt(args.mintedTotal);
250
+ const votable = BigInt(args.votable);
251
+ if (supply <= 0n)
252
+ return pass("deploy.quorum-reachable", "no supply");
253
+ const quorumInTokens = (quorum * supply) / PERCENTAGE_100;
254
+ const power = args.voteType === "POLYNOMIAL_VOTES" ? meritocraticVotingPower(votable, supply) : votable;
255
+ if (power >= quorumInTokens) {
256
+ return pass("deploy.quorum-reachable", `quorumTokens=${quorumInTokens} ≤ votablePower=${power}`);
257
+ }
258
+ const quorumPct = quorumPctFromRaw(args.quorumRaw);
259
+ const reachablePct = Number((power * 10000n) / supply) / 100;
260
+ return fail("deploy.quorum-reachable", `Quorum ${quorumPct}% is UNREACHABLE: it requires ${quorumInTokens} vote-power but the votable token ` +
261
+ `distribution only provides ${power} (~${reachablePct}% of supply). Treasury/undistributed tokens cannot ` +
262
+ `vote. Fix: lower quorum to ≤ ${reachablePct}%, distribute more tokens to voters, or shrink the treasury ` +
263
+ `share. The frontend blocks this exact config (DefaultProposalStep isLteThanInitialDistribution).`, `voteType=${args.voteType}`);
264
+ }
265
+ /**
266
+ * `minVotesForVoting` / `minVotesForCreating` must not exceed the largest single
267
+ * recipient's balance — otherwise no holder can ever create or vote. Mirrors the
268
+ * frontend `value-lower-than-distribution` rule. Token-creation only.
269
+ */
270
+ export function checkMinVotesVsDistribution(minVotesForVoting, minVotesForCreating, amounts, isTokenCreation) {
271
+ if (!isTokenCreation || amounts.length === 0)
272
+ return pass("deploy.min-votes");
273
+ const largest = amounts.reduce((m, a) => (BigInt(a) > m ? BigInt(a) : m), 0n);
274
+ const bad = [];
275
+ if (BigInt(minVotesForVoting) > largest)
276
+ bad.push(`minVotesForVoting (${minVotesForVoting})`);
277
+ if (BigInt(minVotesForCreating) > largest)
278
+ bad.push(`minVotesForCreating (${minVotesForCreating})`);
279
+ if (bad.length === 0)
280
+ return pass("deploy.min-votes", `largestRecipient=${largest}`);
281
+ return fail("deploy.min-votes", `${bad.join(" and ")} exceed the largest single recipient's balance (${largest}). No holder could then create ` +
282
+ "or vote on a proposal. Set these ≤ the biggest voter's token balance (frontend: value-lower-than-distribution).");
283
+ }
284
+ /**
285
+ * Contract-level init bounds (`GovSettings.sol:94-106`, `GovValidators.sol`):
286
+ * `0 < quorum ≤ 1e27`, `0 < quorumValidators ≤ 1e27`, `duration > 0`,
287
+ * `durationValidators > 0`. Violations revert `deployGovPool` with an empty
288
+ * reason — catch them here with a readable message.
289
+ */
290
+ export function checkSettingsBounds(s) {
291
+ const q = BigInt(s.quorum);
292
+ const qv = BigInt(s.quorumValidators);
293
+ const d = BigInt(s.duration);
294
+ const dv = BigInt(s.durationValidators);
295
+ const bad = [];
296
+ if (q <= 0n || q > PERCENTAGE_100)
297
+ bad.push(`quorum must be 0 < q ≤ 1e27 (got ${q})`);
298
+ if (qv <= 0n || qv > PERCENTAGE_100)
299
+ bad.push(`quorumValidators must be 0 < q ≤ 1e27 (got ${qv})`);
300
+ if (d <= 0n)
301
+ bad.push(`duration must be > 0 (got ${d})`);
302
+ if (dv <= 0n)
303
+ bad.push(`durationValidators must be > 0 (got ${dv})`);
304
+ if (bad.length === 0)
305
+ return pass("deploy.settings-bounds");
306
+ return fail("deploy.settings-bounds", `GovSettings/GovValidators init would revert: ${bad.join("; ")}.`);
307
+ }
308
+ /**
309
+ * The DAO treasury (predicted govPool) must NEVER be a token recipient in
310
+ * `tokenParams.users` — treasury tokens can't vote, and the frontend never
311
+ * lists it (the remainder is minted to the DAO implicitly). Listing it inflates
312
+ * `sum(amounts)`, hides an unreachable quorum, and diverges from the frontend
313
+ * calldata shape.
314
+ */
315
+ export function checkNoTreasuryRecipient(users, predictedGovPool) {
316
+ if (!predictedGovPool)
317
+ return pass("deploy.no-treasury-recipient");
318
+ const gp = predictedGovPool.toLowerCase();
319
+ if (users.some((u) => u.toLowerCase() === gp)) {
320
+ return fail("deploy.no-treasury-recipient", `Do not list the DAO treasury (predicted govPool ${predictedGovPool}) in tokenParams.users. Treasury tokens ` +
321
+ "cannot vote. Leave the treasury as an IMPLICIT remainder: set mintedTotal = full supply and users/amounts = " +
322
+ "external holders only (sum(amounts) < mintedTotal); the contract mints the remainder to the DAO. " +
323
+ "(matches frontend useCreateDAO — govPool is never in users[])");
183
324
  }
184
- return { check: "deploy.treasury-remainder", ok: true, detail: `remainder=${minted - sum} tolerated on chain ${chainId} (advisory)` };
325
+ return pass("deploy.no-treasury-recipient");
185
326
  }
186
327
  // ==========================================================================
187
328
  // Mode 10 — edge cases (avatar, offchain, blacklist)
@@ -1 +1 @@
1
- {"version":3,"file":"preflight.js","sourceRoot":"","sources":["../../src/lib/preflight.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"preflight.js","sourceRoot":"","sources":["../../src/lib/preflight.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,43 @@
1
+ /**
2
+ * QR rendering for WalletConnect pairing URIs.
3
+ *
4
+ * `qrcode` is **lazily imported** (mirrors the WalletConnect provider in
5
+ * `walletconnect.ts`) so read-only / EOA installs that never pair pay no cost,
6
+ * and a missing/broken install degrades gracefully to `null` — callers then
7
+ * fall back to the raw `uri` string plus the external QR-image URL.
8
+ */
9
+ export interface RenderedQr {
10
+ /** Scannable ASCII/half-block QR for a monospace terminal, or null. */
11
+ ascii: string | null;
12
+ /** Base64 PNG (no data-URL prefix) for an MCP `image` content block, or null. */
13
+ pngBase64: string | null;
14
+ }
15
+ /**
16
+ * Render `text` (a WalletConnect `wc:` URI) as both a terminal ASCII QR and a
17
+ * base64 PNG. Never throws — any failure yields `{ ascii: null, pngBase64: null }`.
18
+ */
19
+ export declare function renderQr(text: string): Promise<RenderedQr>;
20
+ /** External fallback image URL for clients that can render neither ASCII nor an image block. */
21
+ export declare function qrFallbackUrl(uri: string): string;
22
+ /** One MCP `content[]` item — text or image. Kept loose to match the tool call sites. */
23
+ type PairingContent = {
24
+ type: "text";
25
+ text: string;
26
+ } | {
27
+ type: "image";
28
+ data: string;
29
+ mimeType: string;
30
+ };
31
+ /**
32
+ * Build the MCP `content[]` for a WalletConnect pairing response, shared by
33
+ * `dexe_wc_connect` and `dexe_tx_send`'s auto-pairing branch so the QR + the
34
+ * fallbacks stay identical everywhere.
35
+ *
36
+ * 1. An ASCII QR text block (captioned) — scannable in a bare terminal.
37
+ * 2. An `image/png` block — a crisp QR in GUI MCP clients.
38
+ * 3. A JSON block with `uri`, `chainId`, the external fallback URL, and a
39
+ * `renderHint` telling the assistant to echo the ASCII block verbatim.
40
+ */
41
+ export declare function wcPairingContent(uri: string, chainId: number, extra?: Record<string, unknown>): Promise<PairingContent[]>;
42
+ export {};
43
+ //# sourceMappingURL=qr.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"qr.d.ts","sourceRoot":"","sources":["../../src/lib/qr.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAQH,MAAM,WAAW,UAAU;IACzB,uEAAuE;IACvE,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,iFAAiF;IACjF,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;CAC1B;AAqBD;;;GAGG;AACH,wBAAsB,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,CAAC,CAmBhE;AAED,gGAAgG;AAChG,wBAAgB,aAAa,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAEjD;AAED,yFAAyF;AACzF,KAAK,cAAc,GACf;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,GAC9B;IAAE,IAAI,EAAE,OAAO,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAA;CAAE,CAAC;AAEtD;;;;;;;;;GASG;AACH,wBAAsB,gBAAgB,CACpC,GAAG,EAAE,MAAM,EACX,OAAO,EAAE,MAAM,EACf,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAC9B,OAAO,CAAC,cAAc,EAAE,CAAC,CAkC3B"}
package/dist/lib/qr.js ADDED
@@ -0,0 +1,95 @@
1
+ /**
2
+ * QR rendering for WalletConnect pairing URIs.
3
+ *
4
+ * `qrcode` is **lazily imported** (mirrors the WalletConnect provider in
5
+ * `walletconnect.ts`) so read-only / EOA installs that never pair pay no cost,
6
+ * and a missing/broken install degrades gracefully to `null` — callers then
7
+ * fall back to the raw `uri` string plus the external QR-image URL.
8
+ */
9
+ let cached;
10
+ async function loadQrCode() {
11
+ if (cached !== undefined)
12
+ return cached;
13
+ try {
14
+ const mod = (await import("qrcode"));
15
+ // ESM/CJS interop: the published package is CJS, so the callable API can
16
+ // hang off `default` depending on the loader.
17
+ const def = mod.default;
18
+ const candidate = (typeof mod.toString === "function" ? mod : undefined) ??
19
+ (def && typeof def.toString === "function" ? def : undefined);
20
+ cached = candidate ?? null;
21
+ }
22
+ catch {
23
+ cached = null;
24
+ }
25
+ return cached;
26
+ }
27
+ /**
28
+ * Render `text` (a WalletConnect `wc:` URI) as both a terminal ASCII QR and a
29
+ * base64 PNG. Never throws — any failure yields `{ ascii: null, pngBase64: null }`.
30
+ */
31
+ export async function renderQr(text) {
32
+ const qr = await loadQrCode();
33
+ if (!qr)
34
+ return { ascii: null, pngBase64: null };
35
+ let ascii = null;
36
+ let pngBase64 = null;
37
+ try {
38
+ // `small: true` uses half-block glyphs — ~half the rows, fits an 80-col terminal.
39
+ ascii = await qr.toString(text, { type: "terminal", small: true });
40
+ }
41
+ catch {
42
+ ascii = null;
43
+ }
44
+ try {
45
+ const dataUrl = await qr.toDataURL(text, { margin: 1, errorCorrectionLevel: "M" });
46
+ pngBase64 = dataUrl.replace(/^data:image\/png;base64,/, "");
47
+ }
48
+ catch {
49
+ pngBase64 = null;
50
+ }
51
+ return { ascii, pngBase64 };
52
+ }
53
+ /** External fallback image URL for clients that can render neither ASCII nor an image block. */
54
+ export function qrFallbackUrl(uri) {
55
+ return `https://api.qrserver.com/v1/create-qr-code/?size=400x400&data=${encodeURIComponent(uri)}`;
56
+ }
57
+ /**
58
+ * Build the MCP `content[]` for a WalletConnect pairing response, shared by
59
+ * `dexe_wc_connect` and `dexe_tx_send`'s auto-pairing branch so the QR + the
60
+ * fallbacks stay identical everywhere.
61
+ *
62
+ * 1. An ASCII QR text block (captioned) — scannable in a bare terminal.
63
+ * 2. An `image/png` block — a crisp QR in GUI MCP clients.
64
+ * 3. A JSON block with `uri`, `chainId`, the external fallback URL, and a
65
+ * `renderHint` telling the assistant to echo the ASCII block verbatim.
66
+ */
67
+ export async function wcPairingContent(uri, chainId, extra) {
68
+ const { ascii, pngBase64 } = await renderQr(uri);
69
+ const content = [];
70
+ if (ascii) {
71
+ content.push({
72
+ type: "text",
73
+ text: `📱 Scan with your phone wallet (MetaMask / Trust / Rainbow):\n\n${ascii}`,
74
+ });
75
+ }
76
+ if (pngBase64) {
77
+ content.push({ type: "image", data: pngBase64, mimeType: "image/png" });
78
+ }
79
+ content.push({
80
+ type: "text",
81
+ text: JSON.stringify({
82
+ status: "pairing",
83
+ chainId,
84
+ uri,
85
+ qrFallbackUrl: qrFallbackUrl(uri),
86
+ renderHint: ascii
87
+ ? "Echo the ASCII QR block above VERBATIM in a code block so the user can scan it. Do not summarize or redraw it."
88
+ : "QR rendering unavailable — show the user `qrFallbackUrl` to open a scannable image, or `uri` to paste into their wallet.",
89
+ next: "Approve the session on your phone, then poll dexe_wc_status until `connected` is true.",
90
+ ...extra,
91
+ }, null, 2),
92
+ });
93
+ return content;
94
+ }
95
+ //# sourceMappingURL=qr.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"qr.js","sourceRoot":"","sources":["../../src/lib/qr.ts"],"names":[],"mappings":"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"}
@@ -27,4 +27,11 @@ export declare function requireEnv<K extends EnvKey>(keys: readonly K[]): EnvGua
27
27
  * retrying without picking up the new env.
28
28
  */
29
29
  export declare function hintFor(keys: readonly EnvKey[]): string;
30
+ /**
31
+ * Consistent, actionable message for the one env var that reads can't default
32
+ * around: the Pinata JWT needed to pin metadata to IPFS. Used by every upload
33
+ * site (dao create, proposal create, direct IPFS uploads) so the guidance —
34
+ * and the /dexe-setup pointer — is identical everywhere.
35
+ */
36
+ export declare function pinataUploadHint(context: string): string;
30
37
  //# sourceMappingURL=requireEnv.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"requireEnv.d.ts","sourceRoot":"","sources":["../../src/lib/requireEnv.ts"],"names":[],"mappings":"AAAA,OAAO,EAAgB,KAAK,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAE7D;;;;;;;;GAQG;AACH,MAAM,MAAM,cAAc,CAAC,CAAC,IAAI;IAAE,EAAE,EAAE,CAAC,CAAA;CAAE,GAAG;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,WAAW,EAAE,MAAM,CAAA;CAAE,CAAC;AAEnF;;;;GAIG;AACH,wBAAgB,UAAU,CAAC,CAAC,SAAS,MAAM,EACzC,IAAI,EAAE,SAAS,CAAC,EAAE,GACjB,cAAc,CAAC,MAAM,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,CAkBnC;AAED;;;;;GAKG;AACH,wBAAgB,OAAO,CAAC,IAAI,EAAE,SAAS,MAAM,EAAE,GAAG,MAAM,CAevD"}
1
+ {"version":3,"file":"requireEnv.d.ts","sourceRoot":"","sources":["../../src/lib/requireEnv.ts"],"names":[],"mappings":"AAAA,OAAO,EAAgB,KAAK,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAE7D;;;;;;;;GAQG;AACH,MAAM,MAAM,cAAc,CAAC,CAAC,IAAI;IAAE,EAAE,EAAE,CAAC,CAAA;CAAE,GAAG;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,WAAW,EAAE,MAAM,CAAA;CAAE,CAAC;AAEnF;;;;GAIG;AACH,wBAAgB,UAAU,CAAC,CAAC,SAAS,MAAM,EACzC,IAAI,EAAE,SAAS,CAAC,EAAE,GACjB,cAAc,CAAC,MAAM,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,CAkBnC;AAED;;;;;GAKG;AACH,wBAAgB,OAAO,CAAC,IAAI,EAAE,SAAS,MAAM,EAAE,GAAG,MAAM,CAevD;AAED;;;;;GAKG;AACH,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAQxD"}