dexe-mcp 0.1.3 → 0.2.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.
- package/.mcp.example.json +12 -2
- package/CHANGELOG.md +48 -0
- package/FUTURE.md +26 -5
- package/README.md +80 -195
- package/dist/bootstrap.d.ts.map +1 -1
- package/dist/bootstrap.js +10 -1
- package/dist/bootstrap.js.map +1 -1
- package/dist/config.d.ts +10 -0
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +24 -1
- package/dist/config.js.map +1 -1
- package/dist/hardhat.d.ts.map +1 -1
- package/dist/hardhat.js +10 -5
- package/dist/hardhat.js.map +1 -1
- package/dist/index.js +1 -1
- package/dist/lib/addresses.d.ts +57 -0
- package/dist/lib/addresses.d.ts.map +1 -0
- package/dist/lib/addresses.js +83 -0
- package/dist/lib/addresses.js.map +1 -0
- package/dist/lib/calldata.d.ts +32 -0
- package/dist/lib/calldata.d.ts.map +1 -0
- package/dist/lib/calldata.js +28 -0
- package/dist/lib/calldata.js.map +1 -0
- package/dist/lib/govEnums.d.ts +12 -0
- package/dist/lib/govEnums.d.ts.map +1 -0
- package/dist/lib/govEnums.js +35 -0
- package/dist/lib/govEnums.js.map +1 -0
- package/dist/lib/ipfs.d.ts +60 -0
- package/dist/lib/ipfs.d.ts.map +1 -0
- package/dist/lib/ipfs.js +167 -0
- package/dist/lib/ipfs.js.map +1 -0
- package/dist/lib/multicall.d.ts +33 -0
- package/dist/lib/multicall.d.ts.map +1 -0
- package/dist/lib/multicall.js +46 -0
- package/dist/lib/multicall.js.map +1 -0
- package/dist/lib/proposalCatalog.d.ts +45 -0
- package/dist/lib/proposalCatalog.d.ts.map +1 -0
- package/dist/lib/proposalCatalog.js +416 -0
- package/dist/lib/proposalCatalog.js.map +1 -0
- package/dist/lib/subgraph.d.ts +15 -0
- package/dist/lib/subgraph.d.ts.map +1 -0
- package/dist/lib/subgraph.js +37 -0
- package/dist/lib/subgraph.js.map +1 -0
- package/dist/runtime.d.ts +51 -13
- package/dist/runtime.d.ts.map +1 -1
- package/dist/runtime.js +149 -26
- package/dist/runtime.js.map +1 -1
- package/dist/tools/dao.d.ts +4 -0
- package/dist/tools/dao.d.ts.map +1 -0
- package/dist/tools/dao.js +242 -0
- package/dist/tools/dao.js.map +1 -0
- package/dist/tools/daoDeploy.d.ts +4 -0
- package/dist/tools/daoDeploy.d.ts.map +1 -0
- package/dist/tools/daoDeploy.js +323 -0
- package/dist/tools/daoDeploy.js.map +1 -0
- package/dist/tools/index.d.ts.map +1 -1
- package/dist/tools/index.js +24 -0
- package/dist/tools/index.js.map +1 -1
- package/dist/tools/ipfs.d.ts +6 -0
- package/dist/tools/ipfs.d.ts.map +1 -0
- package/dist/tools/ipfs.js +310 -0
- package/dist/tools/ipfs.js.map +1 -0
- package/dist/tools/proposal.d.ts +4 -0
- package/dist/tools/proposal.d.ts.map +1 -0
- package/dist/tools/proposal.js +199 -0
- package/dist/tools/proposal.js.map +1 -0
- package/dist/tools/proposalBuild.d.ts +4 -0
- package/dist/tools/proposalBuild.d.ts.map +1 -0
- package/dist/tools/proposalBuild.js +357 -0
- package/dist/tools/proposalBuild.js.map +1 -0
- package/dist/tools/proposalBuildComplex.d.ts +4 -0
- package/dist/tools/proposalBuildComplex.d.ts.map +1 -0
- package/dist/tools/proposalBuildComplex.js +700 -0
- package/dist/tools/proposalBuildComplex.js.map +1 -0
- package/dist/tools/proposalBuildInternal.d.ts +4 -0
- package/dist/tools/proposalBuildInternal.d.ts.map +1 -0
- package/dist/tools/proposalBuildInternal.js +211 -0
- package/dist/tools/proposalBuildInternal.js.map +1 -0
- package/dist/tools/proposalBuildMore.d.ts +4 -0
- package/dist/tools/proposalBuildMore.d.ts.map +1 -0
- package/dist/tools/proposalBuildMore.js +436 -0
- package/dist/tools/proposalBuildMore.js.map +1 -0
- package/dist/tools/proposalBuildOffchain.d.ts +4 -0
- package/dist/tools/proposalBuildOffchain.d.ts.map +1 -0
- package/dist/tools/proposalBuildOffchain.js +386 -0
- package/dist/tools/proposalBuildOffchain.js.map +1 -0
- package/dist/tools/read.d.ts +4 -0
- package/dist/tools/read.d.ts.map +1 -0
- package/dist/tools/read.js +353 -0
- package/dist/tools/read.js.map +1 -0
- package/dist/tools/vote.d.ts +4 -0
- package/dist/tools/vote.d.ts.map +1 -0
- package/dist/tools/vote.js +196 -0
- package/dist/tools/vote.js.map +1 -0
- package/dist/tools/voteBuild.d.ts +4 -0
- package/dist/tools/voteBuild.d.ts.map +1 -0
- package/dist/tools/voteBuild.js +563 -0
- package/dist/tools/voteBuild.js.map +1 -0
- package/package.json +9 -4
- package/PLAN.md +0 -132
|
@@ -0,0 +1,353 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
import { Interface, isAddress, ZeroAddress } from "ethers";
|
|
3
|
+
import { RpcProvider } from "../rpc.js";
|
|
4
|
+
import { multicall } from "../lib/multicall.js";
|
|
5
|
+
const GOV_POOL_ABI = [
|
|
6
|
+
"function getHelperContracts() view returns (address settings, address userKeeper, address validators, address poolRegistry, address votePower)",
|
|
7
|
+
"function getExpertStatus(address user) view returns (bool)",
|
|
8
|
+
"function getNftContracts() view returns (address nftMultiplier, address expertNft, address dexeExpertNft, address babt)",
|
|
9
|
+
];
|
|
10
|
+
const GOV_VALIDATORS_ABI = [
|
|
11
|
+
"function validatorsCount() view returns (uint256)",
|
|
12
|
+
"function isValidator(address user) view returns (bool)",
|
|
13
|
+
];
|
|
14
|
+
const GOV_SETTINGS_ABI = [
|
|
15
|
+
"function getDefaultSettings() view returns (tuple(bool earlyCompletion, bool delegatedVotingAllowed, bool validatorsVote, uint64 duration, uint64 durationValidators, uint64 executionDelay, uint128 quorum, uint128 quorumValidators, uint256 minVotesForVoting, uint256 minVotesForCreating, tuple(address rewardToken, uint256 creationReward, uint256 executionReward, uint256 voteRewardsCoefficient) rewardsInfo, string executorDescription))",
|
|
16
|
+
"function getInternalSettings() view returns (tuple(bool earlyCompletion, bool delegatedVotingAllowed, bool validatorsVote, uint64 duration, uint64 durationValidators, uint64 executionDelay, uint128 quorum, uint128 quorumValidators, uint256 minVotesForVoting, uint256 minVotesForCreating, tuple(address rewardToken, uint256 creationReward, uint256 executionReward, uint256 voteRewardsCoefficient) rewardsInfo, string executorDescription))",
|
|
17
|
+
];
|
|
18
|
+
const ERC20_ABI = [
|
|
19
|
+
"function balanceOf(address) view returns (uint256)",
|
|
20
|
+
"function symbol() view returns (string)",
|
|
21
|
+
"function decimals() view returns (uint8)",
|
|
22
|
+
];
|
|
23
|
+
const ERC721_HOLDER_ABI = [
|
|
24
|
+
"function balanceOf(address) view returns (uint256)",
|
|
25
|
+
];
|
|
26
|
+
const BABT_ABI = [
|
|
27
|
+
"function balanceOf(address) view returns (uint256)",
|
|
28
|
+
];
|
|
29
|
+
export function registerReadTools(server, ctx) {
|
|
30
|
+
const rpc = new RpcProvider(ctx.config);
|
|
31
|
+
registerMulticall(server, rpc);
|
|
32
|
+
registerTreasury(server, rpc);
|
|
33
|
+
registerValidators(server, rpc);
|
|
34
|
+
registerSettings(server, rpc);
|
|
35
|
+
registerExpertStatus(server, rpc);
|
|
36
|
+
}
|
|
37
|
+
function errorResult(message) {
|
|
38
|
+
return { content: [{ type: "text", text: message }], isError: true };
|
|
39
|
+
}
|
|
40
|
+
function registerMulticall(server, rpc) {
|
|
41
|
+
server.registerTool("dexe_read_multicall", {
|
|
42
|
+
title: "Arbitrary batched eth_call via Multicall3",
|
|
43
|
+
description: "Execute N independent view calls in a single RPC round-trip. Each call supplies its own ABI signature fragment, target, method, and args. Results are decoded per-call.",
|
|
44
|
+
inputSchema: {
|
|
45
|
+
calls: z
|
|
46
|
+
.array(z.object({
|
|
47
|
+
target: z.string(),
|
|
48
|
+
signature: z
|
|
49
|
+
.string()
|
|
50
|
+
.describe("Full function signature, e.g. 'function balanceOf(address) view returns (uint256)'"),
|
|
51
|
+
method: z.string().describe("Method name matching the signature"),
|
|
52
|
+
args: z.array(z.unknown()).default([]),
|
|
53
|
+
allowFailure: z.boolean().default(true),
|
|
54
|
+
}))
|
|
55
|
+
.min(1),
|
|
56
|
+
},
|
|
57
|
+
outputSchema: {
|
|
58
|
+
results: z.array(z.object({
|
|
59
|
+
success: z.boolean(),
|
|
60
|
+
value: z.unknown().nullable(),
|
|
61
|
+
raw: z.string(),
|
|
62
|
+
error: z.string().optional(),
|
|
63
|
+
})),
|
|
64
|
+
},
|
|
65
|
+
}, async ({ calls }) => {
|
|
66
|
+
try {
|
|
67
|
+
const provider = rpc.requireProvider();
|
|
68
|
+
const batch = calls.map((c) => {
|
|
69
|
+
if (!isAddress(c.target))
|
|
70
|
+
throw new Error(`Invalid target: ${c.target}`);
|
|
71
|
+
return {
|
|
72
|
+
target: c.target,
|
|
73
|
+
iface: new Interface([c.signature]),
|
|
74
|
+
method: c.method,
|
|
75
|
+
args: c.args.map(coerceArg),
|
|
76
|
+
allowFailure: c.allowFailure,
|
|
77
|
+
};
|
|
78
|
+
});
|
|
79
|
+
const results = await multicall(provider, batch);
|
|
80
|
+
const structured = {
|
|
81
|
+
results: results.map((r) => ({
|
|
82
|
+
success: r.success,
|
|
83
|
+
value: jsonSafe(r.value),
|
|
84
|
+
raw: r.raw,
|
|
85
|
+
error: r.error,
|
|
86
|
+
})),
|
|
87
|
+
};
|
|
88
|
+
return {
|
|
89
|
+
content: [
|
|
90
|
+
{
|
|
91
|
+
type: "text",
|
|
92
|
+
text: `${results.length} calls: ${results.filter((r) => r.success).length} ok, ${results.filter((r) => !r.success).length} failed`,
|
|
93
|
+
},
|
|
94
|
+
],
|
|
95
|
+
structuredContent: structured,
|
|
96
|
+
};
|
|
97
|
+
}
|
|
98
|
+
catch (err) {
|
|
99
|
+
return errorResult(`read_multicall failed: ${err instanceof Error ? err.message : String(err)}`);
|
|
100
|
+
}
|
|
101
|
+
});
|
|
102
|
+
}
|
|
103
|
+
function registerTreasury(server, rpc) {
|
|
104
|
+
server.registerTool("dexe_read_treasury", {
|
|
105
|
+
title: "Native + ERC20 balances for a DAO or arbitrary address",
|
|
106
|
+
description: "Reads native coin balance + one-or-more ERC20 balances (symbol, decimals, balance) in a single multicall. Pass the GovPool address to query DAO treasury.",
|
|
107
|
+
inputSchema: {
|
|
108
|
+
holder: z.string().describe("Address whose balances we read"),
|
|
109
|
+
tokens: z.array(z.string()).default([]).describe("ERC20 contract addresses"),
|
|
110
|
+
},
|
|
111
|
+
outputSchema: {
|
|
112
|
+
holder: z.string(),
|
|
113
|
+
native: z.string(),
|
|
114
|
+
tokens: z.array(z.object({
|
|
115
|
+
token: z.string(),
|
|
116
|
+
symbol: z.string().nullable(),
|
|
117
|
+
decimals: z.number().nullable(),
|
|
118
|
+
balance: z.string().nullable(),
|
|
119
|
+
})),
|
|
120
|
+
},
|
|
121
|
+
}, async ({ holder, tokens = [] }) => {
|
|
122
|
+
if (!isAddress(holder))
|
|
123
|
+
return errorResult(`Invalid holder: ${holder}`);
|
|
124
|
+
try {
|
|
125
|
+
const provider = rpc.requireProvider();
|
|
126
|
+
const native = (await provider.getBalance(holder)).toString();
|
|
127
|
+
const iface = new Interface(ERC20_ABI);
|
|
128
|
+
const calls = [];
|
|
129
|
+
for (const t of tokens) {
|
|
130
|
+
if (!isAddress(t))
|
|
131
|
+
throw new Error(`Invalid token: ${t}`);
|
|
132
|
+
calls.push({ target: t, iface, method: "balanceOf", args: [holder], allowFailure: true });
|
|
133
|
+
calls.push({ target: t, iface, method: "symbol", args: [], allowFailure: true });
|
|
134
|
+
calls.push({ target: t, iface, method: "decimals", args: [], allowFailure: true });
|
|
135
|
+
}
|
|
136
|
+
const res = await multicall(provider, calls);
|
|
137
|
+
const tokensOut = tokens.map((t, i) => ({
|
|
138
|
+
token: t,
|
|
139
|
+
balance: res[i * 3]?.success ? res[i * 3].value.toString() : null,
|
|
140
|
+
symbol: res[i * 3 + 1]?.success ? res[i * 3 + 1].value : null,
|
|
141
|
+
decimals: res[i * 3 + 2]?.success ? Number(res[i * 3 + 2].value) : null,
|
|
142
|
+
}));
|
|
143
|
+
const structured = { holder, native, tokens: tokensOut };
|
|
144
|
+
const text = `Treasury for ${holder}\n native: ${native}\n` +
|
|
145
|
+
tokensOut
|
|
146
|
+
.map((t) => ` ${t.symbol ?? "?"} (${t.token}): ${t.balance ?? "?"}${t.decimals != null ? ` (decimals=${t.decimals})` : ""}`)
|
|
147
|
+
.join("\n");
|
|
148
|
+
return { content: [{ type: "text", text }], structuredContent: structured };
|
|
149
|
+
}
|
|
150
|
+
catch (err) {
|
|
151
|
+
return errorResult(`read_treasury failed: ${err instanceof Error ? err.message : String(err)}`);
|
|
152
|
+
}
|
|
153
|
+
});
|
|
154
|
+
}
|
|
155
|
+
function registerValidators(server, rpc) {
|
|
156
|
+
server.registerTool("dexe_read_validators", {
|
|
157
|
+
title: "Validator count + isValidator lookup",
|
|
158
|
+
description: "Reads `validatorsCount()` and optionally checks `isValidator(candidate)` on the DAO's GovValidators contract.",
|
|
159
|
+
inputSchema: {
|
|
160
|
+
govPool: z.string().describe("GovPool address"),
|
|
161
|
+
candidate: z.string().optional().describe("Optional address to check validator status for"),
|
|
162
|
+
},
|
|
163
|
+
outputSchema: {
|
|
164
|
+
govPool: z.string(),
|
|
165
|
+
validators: z.string(),
|
|
166
|
+
count: z.string(),
|
|
167
|
+
candidate: z.string().nullable(),
|
|
168
|
+
isValidator: z.boolean().nullable(),
|
|
169
|
+
},
|
|
170
|
+
}, async ({ govPool, candidate }) => {
|
|
171
|
+
if (!isAddress(govPool))
|
|
172
|
+
return errorResult(`Invalid govPool: ${govPool}`);
|
|
173
|
+
if (candidate && !isAddress(candidate))
|
|
174
|
+
return errorResult(`Invalid candidate: ${candidate}`);
|
|
175
|
+
try {
|
|
176
|
+
const provider = rpc.requireProvider();
|
|
177
|
+
const gp = new Interface(GOV_POOL_ABI);
|
|
178
|
+
const v = new Interface(GOV_VALIDATORS_ABI);
|
|
179
|
+
const [helpersR] = await multicall(provider, [
|
|
180
|
+
{ target: govPool, iface: gp, method: "getHelperContracts", args: [] },
|
|
181
|
+
]);
|
|
182
|
+
if (!helpersR?.success)
|
|
183
|
+
return errorResult("getHelperContracts reverted");
|
|
184
|
+
const validators = helpersR.value.validators;
|
|
185
|
+
const calls = [
|
|
186
|
+
{ target: validators, iface: v, method: "validatorsCount", args: [] },
|
|
187
|
+
];
|
|
188
|
+
if (candidate) {
|
|
189
|
+
calls.push({
|
|
190
|
+
target: validators,
|
|
191
|
+
iface: v,
|
|
192
|
+
method: "isValidator",
|
|
193
|
+
args: [candidate],
|
|
194
|
+
allowFailure: true,
|
|
195
|
+
});
|
|
196
|
+
}
|
|
197
|
+
const res = await multicall(provider, calls);
|
|
198
|
+
const count = res[0].value.toString();
|
|
199
|
+
const isVal = candidate ? Boolean(res[1]?.value) : null;
|
|
200
|
+
const structured = {
|
|
201
|
+
govPool,
|
|
202
|
+
validators,
|
|
203
|
+
count,
|
|
204
|
+
candidate: candidate ?? null,
|
|
205
|
+
isValidator: isVal,
|
|
206
|
+
};
|
|
207
|
+
const text = `Validators contract ${validators}\n count: ${count}` +
|
|
208
|
+
(candidate ? `\n ${candidate} isValidator: ${isVal}` : "");
|
|
209
|
+
return { content: [{ type: "text", text }], structuredContent: structured };
|
|
210
|
+
}
|
|
211
|
+
catch (err) {
|
|
212
|
+
return errorResult(`read_validators failed: ${err instanceof Error ? err.message : String(err)}`);
|
|
213
|
+
}
|
|
214
|
+
});
|
|
215
|
+
}
|
|
216
|
+
function registerSettings(server, rpc) {
|
|
217
|
+
server.registerTool("dexe_read_settings", {
|
|
218
|
+
title: "Default + internal proposal settings for a DAO",
|
|
219
|
+
description: "Reads `GovSettings.getDefaultSettings()` and `getInternalSettings()` on the DAO's settings contract.",
|
|
220
|
+
inputSchema: {
|
|
221
|
+
govPool: z.string(),
|
|
222
|
+
},
|
|
223
|
+
outputSchema: {
|
|
224
|
+
govPool: z.string(),
|
|
225
|
+
settings: z.string(),
|
|
226
|
+
defaultSettings: z.unknown(),
|
|
227
|
+
internalSettings: z.unknown(),
|
|
228
|
+
},
|
|
229
|
+
}, async ({ govPool }) => {
|
|
230
|
+
if (!isAddress(govPool))
|
|
231
|
+
return errorResult(`Invalid govPool: ${govPool}`);
|
|
232
|
+
try {
|
|
233
|
+
const provider = rpc.requireProvider();
|
|
234
|
+
const gp = new Interface(GOV_POOL_ABI);
|
|
235
|
+
const s = new Interface(GOV_SETTINGS_ABI);
|
|
236
|
+
const [helpersR] = await multicall(provider, [
|
|
237
|
+
{ target: govPool, iface: gp, method: "getHelperContracts", args: [] },
|
|
238
|
+
]);
|
|
239
|
+
if (!helpersR?.success)
|
|
240
|
+
return errorResult("getHelperContracts reverted");
|
|
241
|
+
const settings = helpersR.value.settings;
|
|
242
|
+
const [defR, intR] = await multicall(provider, [
|
|
243
|
+
{ target: settings, iface: s, method: "getDefaultSettings", args: [], allowFailure: true },
|
|
244
|
+
{ target: settings, iface: s, method: "getInternalSettings", args: [], allowFailure: true },
|
|
245
|
+
]);
|
|
246
|
+
const structured = {
|
|
247
|
+
govPool,
|
|
248
|
+
settings,
|
|
249
|
+
defaultSettings: jsonSafe(defR?.value ?? null),
|
|
250
|
+
internalSettings: jsonSafe(intR?.value ?? null),
|
|
251
|
+
};
|
|
252
|
+
return {
|
|
253
|
+
content: [
|
|
254
|
+
{
|
|
255
|
+
type: "text",
|
|
256
|
+
text: `Settings for ${govPool}\n contract: ${settings}\n\n` +
|
|
257
|
+
`default: ${JSON.stringify(structured.defaultSettings, null, 2)}\n\n` +
|
|
258
|
+
`internal: ${JSON.stringify(structured.internalSettings, null, 2)}`,
|
|
259
|
+
},
|
|
260
|
+
],
|
|
261
|
+
structuredContent: structured,
|
|
262
|
+
};
|
|
263
|
+
}
|
|
264
|
+
catch (err) {
|
|
265
|
+
return errorResult(`read_settings failed: ${err instanceof Error ? err.message : String(err)}`);
|
|
266
|
+
}
|
|
267
|
+
});
|
|
268
|
+
}
|
|
269
|
+
function registerExpertStatus(server, rpc) {
|
|
270
|
+
server.registerTool("dexe_read_expert_status", {
|
|
271
|
+
title: "Expert + BABT status for a user in a DAO",
|
|
272
|
+
description: "Reads `GovPool.getExpertStatus(user)` and, if a BABT contract is configured on the DAO, `BABT.balanceOf(user) > 0`.",
|
|
273
|
+
inputSchema: {
|
|
274
|
+
govPool: z.string(),
|
|
275
|
+
user: z.string(),
|
|
276
|
+
},
|
|
277
|
+
outputSchema: {
|
|
278
|
+
govPool: z.string(),
|
|
279
|
+
user: z.string(),
|
|
280
|
+
isExpert: z.boolean(),
|
|
281
|
+
babt: z.string(),
|
|
282
|
+
hasBabt: z.boolean().nullable(),
|
|
283
|
+
},
|
|
284
|
+
}, async ({ govPool, user }) => {
|
|
285
|
+
if (!isAddress(govPool))
|
|
286
|
+
return errorResult(`Invalid govPool: ${govPool}`);
|
|
287
|
+
if (!isAddress(user))
|
|
288
|
+
return errorResult(`Invalid user: ${user}`);
|
|
289
|
+
try {
|
|
290
|
+
const provider = rpc.requireProvider();
|
|
291
|
+
const gp = new Interface(GOV_POOL_ABI);
|
|
292
|
+
const babt = new Interface(BABT_ABI);
|
|
293
|
+
const [expertR, nftR] = await multicall(provider, [
|
|
294
|
+
{ target: govPool, iface: gp, method: "getExpertStatus", args: [user], allowFailure: true },
|
|
295
|
+
{ target: govPool, iface: gp, method: "getNftContracts", args: [], allowFailure: true },
|
|
296
|
+
]);
|
|
297
|
+
const isExpert = expertR?.success ? Boolean(expertR.value) : false;
|
|
298
|
+
const babtAddr = nftR?.success
|
|
299
|
+
? nftR.value.babt
|
|
300
|
+
: ZeroAddress;
|
|
301
|
+
let hasBabt = null;
|
|
302
|
+
if (babtAddr && babtAddr !== ZeroAddress && isAddress(babtAddr)) {
|
|
303
|
+
const [bR] = await multicall(provider, [
|
|
304
|
+
{ target: babtAddr, iface: babt, method: "balanceOf", args: [user], allowFailure: true },
|
|
305
|
+
]);
|
|
306
|
+
if (bR?.success)
|
|
307
|
+
hasBabt = bR.value > 0n;
|
|
308
|
+
}
|
|
309
|
+
const structured = { govPool, user, isExpert, babt: babtAddr, hasBabt };
|
|
310
|
+
return {
|
|
311
|
+
content: [
|
|
312
|
+
{
|
|
313
|
+
type: "text",
|
|
314
|
+
text: `Expert status for ${user} on ${govPool}: expert=${isExpert}, babt=${babtAddr}, hasBabt=${hasBabt}`,
|
|
315
|
+
},
|
|
316
|
+
],
|
|
317
|
+
structuredContent: structured,
|
|
318
|
+
};
|
|
319
|
+
}
|
|
320
|
+
catch (err) {
|
|
321
|
+
return errorResult(`read_expert_status failed: ${err instanceof Error ? err.message : String(err)}`);
|
|
322
|
+
}
|
|
323
|
+
});
|
|
324
|
+
}
|
|
325
|
+
// ---------- helpers ----------
|
|
326
|
+
function coerceArg(a) {
|
|
327
|
+
// Allow stringified bigints for numeric args.
|
|
328
|
+
if (typeof a === "string" && /^-?\d+$/.test(a) && a.length > 9) {
|
|
329
|
+
try {
|
|
330
|
+
return BigInt(a);
|
|
331
|
+
}
|
|
332
|
+
catch {
|
|
333
|
+
return a;
|
|
334
|
+
}
|
|
335
|
+
}
|
|
336
|
+
return a;
|
|
337
|
+
}
|
|
338
|
+
function jsonSafe(v) {
|
|
339
|
+
if (v === null || v === undefined)
|
|
340
|
+
return v;
|
|
341
|
+
if (typeof v === "bigint")
|
|
342
|
+
return v.toString();
|
|
343
|
+
if (Array.isArray(v))
|
|
344
|
+
return v.map(jsonSafe);
|
|
345
|
+
if (typeof v === "object") {
|
|
346
|
+
const out = {};
|
|
347
|
+
for (const [k, val] of Object.entries(v))
|
|
348
|
+
out[k] = jsonSafe(val);
|
|
349
|
+
return out;
|
|
350
|
+
}
|
|
351
|
+
return v;
|
|
352
|
+
}
|
|
353
|
+
//# sourceMappingURL=read.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"read.js","sourceRoot":"","sources":["../../src/tools/read.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"vote.d.ts","sourceRoot":"","sources":["../../src/tools/vote.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACzE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAgBhD,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,SAAS,EAAE,GAAG,EAAE,WAAW,GAAG,IAAI,CAI3E"}
|
|
@@ -0,0 +1,196 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
import { Interface, isAddress } from "ethers";
|
|
3
|
+
import { RpcProvider } from "../rpc.js";
|
|
4
|
+
import { multicall } from "../lib/multicall.js";
|
|
5
|
+
import { voteTypeFromString, VOTE_TYPE_NAMES } from "../lib/govEnums.js";
|
|
6
|
+
const GOV_POOL_HELPERS_ABI = [
|
|
7
|
+
"function getHelperContracts() view returns (address settings, address userKeeper, address validators, address poolRegistry, address votePower)",
|
|
8
|
+
"function getUserVotes(uint256 proposalId, address voter, uint8 voteType) view returns (tuple(bool isVoteFor, uint256 totalVoted, uint256 tokensVoted, uint256 totalRawVoted, uint256[] nftsVoted))",
|
|
9
|
+
"function getTotalVotes(uint256 proposalId, address voter, uint8 voteType) view returns (uint256 totalVoted, uint256 totalRawVoted, uint256 votesForNow, bool isVoteFor)",
|
|
10
|
+
];
|
|
11
|
+
const USER_KEEPER_ABI = [
|
|
12
|
+
"function tokenBalance(address voter, uint8 voteType) view returns (uint256 balance, uint256 ownedBalance)",
|
|
13
|
+
"function nftBalance(address voter, uint8 voteType) view returns (uint256 balance, uint256 ownedBalance)",
|
|
14
|
+
];
|
|
15
|
+
export function registerVoteTools(server, ctx) {
|
|
16
|
+
const rpc = new RpcProvider(ctx.config);
|
|
17
|
+
registerUserPower(server, rpc);
|
|
18
|
+
registerGetVotes(server, rpc);
|
|
19
|
+
}
|
|
20
|
+
function errorResult(message) {
|
|
21
|
+
return { content: [{ type: "text", text: message }], isError: true };
|
|
22
|
+
}
|
|
23
|
+
function registerUserPower(server, rpc) {
|
|
24
|
+
server.registerTool("dexe_vote_user_power", {
|
|
25
|
+
title: "User staking + delegation power across VoteTypes",
|
|
26
|
+
description: "Reads `tokenBalance` and `nftBalance` on GovUserKeeper for every VoteType (Personal/Micropool/Delegated/Treasury). One multicall round-trip.",
|
|
27
|
+
inputSchema: {
|
|
28
|
+
govPool: z.string().describe("GovPool contract address"),
|
|
29
|
+
user: z.string().describe("User wallet address"),
|
|
30
|
+
},
|
|
31
|
+
outputSchema: {
|
|
32
|
+
govPool: z.string(),
|
|
33
|
+
user: z.string(),
|
|
34
|
+
userKeeper: z.string(),
|
|
35
|
+
power: z.record(z.object({
|
|
36
|
+
tokenBalance: z.string(),
|
|
37
|
+
tokenOwned: z.string(),
|
|
38
|
+
nftBalance: z.string(),
|
|
39
|
+
nftOwned: z.string(),
|
|
40
|
+
})),
|
|
41
|
+
},
|
|
42
|
+
}, async ({ govPool, user }) => {
|
|
43
|
+
if (!isAddress(govPool))
|
|
44
|
+
return errorResult(`Invalid GovPool: ${govPool}`);
|
|
45
|
+
if (!isAddress(user))
|
|
46
|
+
return errorResult(`Invalid user: ${user}`);
|
|
47
|
+
try {
|
|
48
|
+
const provider = rpc.requireProvider();
|
|
49
|
+
const gp = new Interface(GOV_POOL_HELPERS_ABI);
|
|
50
|
+
const uk = new Interface(USER_KEEPER_ABI);
|
|
51
|
+
const [helpersR] = await multicall(provider, [
|
|
52
|
+
{ target: govPool, iface: gp, method: "getHelperContracts", args: [] },
|
|
53
|
+
]);
|
|
54
|
+
if (!helpersR?.success)
|
|
55
|
+
return errorResult("getHelperContracts reverted");
|
|
56
|
+
const userKeeper = helpersR.value.userKeeper;
|
|
57
|
+
const calls = [];
|
|
58
|
+
for (let vt = 0; vt < VOTE_TYPE_NAMES.length; vt++) {
|
|
59
|
+
calls.push({
|
|
60
|
+
target: userKeeper,
|
|
61
|
+
iface: uk,
|
|
62
|
+
method: "tokenBalance",
|
|
63
|
+
args: [user, vt],
|
|
64
|
+
allowFailure: true,
|
|
65
|
+
});
|
|
66
|
+
calls.push({
|
|
67
|
+
target: userKeeper,
|
|
68
|
+
iface: uk,
|
|
69
|
+
method: "nftBalance",
|
|
70
|
+
args: [user, vt],
|
|
71
|
+
allowFailure: true,
|
|
72
|
+
});
|
|
73
|
+
}
|
|
74
|
+
const results = await multicall(provider, calls);
|
|
75
|
+
const power = {};
|
|
76
|
+
for (let vt = 0; vt < VOTE_TYPE_NAMES.length; vt++) {
|
|
77
|
+
const tb = results[vt * 2];
|
|
78
|
+
const nb = results[vt * 2 + 1];
|
|
79
|
+
const tbv = tb?.success
|
|
80
|
+
? tb.value
|
|
81
|
+
: null;
|
|
82
|
+
const nbv = nb?.success
|
|
83
|
+
? nb.value
|
|
84
|
+
: null;
|
|
85
|
+
const pick = (v) => {
|
|
86
|
+
if (!v)
|
|
87
|
+
return ["0", "0"];
|
|
88
|
+
if (Array.isArray(v))
|
|
89
|
+
return [v[0].toString(), v[1].toString()];
|
|
90
|
+
return [v.balance.toString(), v.ownedBalance.toString()];
|
|
91
|
+
};
|
|
92
|
+
const [tBal, tOwn] = pick(tbv);
|
|
93
|
+
const [nBal, nOwn] = pick(nbv);
|
|
94
|
+
power[VOTE_TYPE_NAMES[vt]] = {
|
|
95
|
+
tokenBalance: tBal,
|
|
96
|
+
tokenOwned: tOwn,
|
|
97
|
+
nftBalance: nBal,
|
|
98
|
+
nftOwned: nOwn,
|
|
99
|
+
};
|
|
100
|
+
}
|
|
101
|
+
const structured = { govPool, user, userKeeper, power };
|
|
102
|
+
const lines = VOTE_TYPE_NAMES.map((name) => {
|
|
103
|
+
const p = power[name];
|
|
104
|
+
return ` ${name.padEnd(14)} token=${p.tokenBalance} (owned=${p.tokenOwned}) nft=${p.nftBalance} (owned=${p.nftOwned})`;
|
|
105
|
+
});
|
|
106
|
+
return {
|
|
107
|
+
content: [
|
|
108
|
+
{
|
|
109
|
+
type: "text",
|
|
110
|
+
text: `Voting power for ${user} on ${govPool}\nUserKeeper: ${userKeeper}\n${lines.join("\n")}`,
|
|
111
|
+
},
|
|
112
|
+
],
|
|
113
|
+
structuredContent: structured,
|
|
114
|
+
};
|
|
115
|
+
}
|
|
116
|
+
catch (err) {
|
|
117
|
+
return errorResult(`vote_user_power failed: ${err instanceof Error ? err.message : String(err)}`);
|
|
118
|
+
}
|
|
119
|
+
});
|
|
120
|
+
}
|
|
121
|
+
function registerGetVotes(server, rpc) {
|
|
122
|
+
server.registerTool("dexe_vote_get_votes", {
|
|
123
|
+
title: "User's votes on a specific proposal",
|
|
124
|
+
description: "Reads `GovPool.getUserVotes(proposalId, voter, voteType)` and returns the VoteInfoView. Defaults to PersonalVote.",
|
|
125
|
+
inputSchema: {
|
|
126
|
+
govPool: z.string(),
|
|
127
|
+
proposalId: z.union([z.string(), z.number()]),
|
|
128
|
+
voter: z.string(),
|
|
129
|
+
voteType: z
|
|
130
|
+
.enum(["PersonalVote", "MicropoolVote", "DelegatedVote", "TreasuryVote"])
|
|
131
|
+
.default("PersonalVote"),
|
|
132
|
+
},
|
|
133
|
+
outputSchema: {
|
|
134
|
+
govPool: z.string(),
|
|
135
|
+
proposalId: z.string(),
|
|
136
|
+
voter: z.string(),
|
|
137
|
+
voteType: z.string(),
|
|
138
|
+
isVoteFor: z.boolean(),
|
|
139
|
+
totalVoted: z.string(),
|
|
140
|
+
tokensVoted: z.string(),
|
|
141
|
+
totalRawVoted: z.string(),
|
|
142
|
+
nftsVoted: z.array(z.string()),
|
|
143
|
+
},
|
|
144
|
+
}, async ({ govPool, proposalId, voter, voteType = "PersonalVote" }) => {
|
|
145
|
+
if (!isAddress(govPool))
|
|
146
|
+
return errorResult(`Invalid govPool: ${govPool}`);
|
|
147
|
+
if (!isAddress(voter))
|
|
148
|
+
return errorResult(`Invalid voter: ${voter}`);
|
|
149
|
+
try {
|
|
150
|
+
const provider = rpc.requireProvider();
|
|
151
|
+
const iface = new Interface(GOV_POOL_HELPERS_ABI);
|
|
152
|
+
const id = BigInt(proposalId);
|
|
153
|
+
const vtNum = voteTypeFromString(voteType);
|
|
154
|
+
const [res] = await multicall(provider, [
|
|
155
|
+
{
|
|
156
|
+
target: govPool,
|
|
157
|
+
iface,
|
|
158
|
+
method: "getUserVotes",
|
|
159
|
+
args: [id, voter, vtNum],
|
|
160
|
+
},
|
|
161
|
+
]);
|
|
162
|
+
if (!res?.success)
|
|
163
|
+
return errorResult("getUserVotes reverted");
|
|
164
|
+
const v = res.value;
|
|
165
|
+
const structured = {
|
|
166
|
+
govPool,
|
|
167
|
+
proposalId: id.toString(),
|
|
168
|
+
voter,
|
|
169
|
+
voteType,
|
|
170
|
+
isVoteFor: v.isVoteFor,
|
|
171
|
+
totalVoted: v.totalVoted.toString(),
|
|
172
|
+
tokensVoted: v.tokensVoted.toString(),
|
|
173
|
+
totalRawVoted: v.totalRawVoted.toString(),
|
|
174
|
+
nftsVoted: v.nftsVoted.map((n) => n.toString()),
|
|
175
|
+
};
|
|
176
|
+
return {
|
|
177
|
+
content: [
|
|
178
|
+
{
|
|
179
|
+
type: "text",
|
|
180
|
+
text: `Vote by ${voter} on proposal ${id} (${voteType}):\n` +
|
|
181
|
+
` isVoteFor : ${v.isVoteFor}\n` +
|
|
182
|
+
` totalVoted : ${v.totalVoted}\n` +
|
|
183
|
+
` tokensVoted : ${v.tokensVoted}\n` +
|
|
184
|
+
` totalRawVoted : ${v.totalRawVoted}\n` +
|
|
185
|
+
` nftsVoted : [${structured.nftsVoted.join(", ")}]`,
|
|
186
|
+
},
|
|
187
|
+
],
|
|
188
|
+
structuredContent: structured,
|
|
189
|
+
};
|
|
190
|
+
}
|
|
191
|
+
catch (err) {
|
|
192
|
+
return errorResult(`vote_get_votes failed: ${err instanceof Error ? err.message : String(err)}`);
|
|
193
|
+
}
|
|
194
|
+
});
|
|
195
|
+
}
|
|
196
|
+
//# sourceMappingURL=vote.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"vote.js","sourceRoot":"","sources":["../../src/tools/vote.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"voteBuild.d.ts","sourceRoot":"","sources":["../../src/tools/voteBuild.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACzE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AA2EhD,wBAAgB,sBAAsB,CAAC,MAAM,EAAE,SAAS,EAAE,GAAG,EAAE,WAAW,GAAG,IAAI,CAehF"}
|