dexe-mcp 0.1.5 → 0.3.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 +84 -0
- package/FUTURE.md +26 -5
- package/README.md +105 -197
- package/dist/config.d.ts +12 -0
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +34 -1
- package/dist/config.js.map +1 -1
- package/dist/index.js +16 -0
- package/dist/index.js.map +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 +168 -0
- package/dist/lib/ipfs.js.map +1 -0
- package/dist/lib/markdownToSlate.d.ts +39 -0
- package/dist/lib/markdownToSlate.d.ts.map +1 -0
- package/dist/lib/markdownToSlate.js +203 -0
- package/dist/lib/markdownToSlate.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/signer.d.ts +12 -0
- package/dist/lib/signer.d.ts.map +1 -0
- package/dist/lib/signer.js +31 -0
- package/dist/lib/signer.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 +42 -0
- package/dist/lib/subgraph.js.map +1 -0
- 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 +573 -0
- package/dist/tools/daoDeploy.js.map +1 -0
- package/dist/tools/flow.d.ts +5 -0
- package/dist/tools/flow.d.ts.map +1 -0
- package/dist/tools/flow.js +451 -0
- package/dist/tools/flow.js.map +1 -0
- package/dist/tools/index.d.ts.map +1 -1
- package/dist/tools/index.js +32 -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 +376 -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 +217 -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 +372 -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 +766 -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 +224 -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 +457 -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 +389 -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 +580 -0
- package/dist/tools/read.js.map +1 -0
- package/dist/tools/subgraph.d.ts +4 -0
- package/dist/tools/subgraph.d.ts.map +1 -0
- package/dist/tools/subgraph.js +404 -0
- package/dist/tools/subgraph.js.map +1 -0
- package/dist/tools/txSend.d.ts +5 -0
- package/dist/tools/txSend.d.ts.map +1 -0
- package/dist/tools/txSend.js +87 -0
- package/dist/tools/txSend.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 +983 -0
- package/dist/tools/voteBuild.js.map +1 -0
- package/package.json +18 -5
- package/PLAN.md +0 -132
|
@@ -0,0 +1,580 @@
|
|
|
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
|
+
const TOKEN_SALE_READ_ABI = [
|
|
30
|
+
"function latestTierId() view returns (uint256)",
|
|
31
|
+
"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)",
|
|
32
|
+
"function getUserViews(address user, uint256[] tierIds) view returns (tuple(bool canParticipate, bool isWhitelisted, uint256 purchasedAmount, uint256 owedAmount, uint256 lockedAmount, uint256 claimableAmount, uint256 vestingWithdrawAmount)[] userViews)",
|
|
33
|
+
];
|
|
34
|
+
const DISTRIBUTION_READ_ABI = [
|
|
35
|
+
"function isClaimed(uint256 proposalId, address voter) view returns (bool)",
|
|
36
|
+
"function getPotentialReward(uint256 proposalId, address voter) view returns (uint256)",
|
|
37
|
+
];
|
|
38
|
+
const STAKING_READ_ABI = [
|
|
39
|
+
"function stakingsCount() view returns (uint256)",
|
|
40
|
+
"function getActiveStakings() view returns (tuple(address rewardToken, uint256 rewardAmount, uint256 startedAt, uint256 deadline, string metadata)[] stakings)",
|
|
41
|
+
"function getUserInfo(address user) view returns (tuple(uint256 staked, uint256 reward)[] tiersUserInfo)",
|
|
42
|
+
];
|
|
43
|
+
const USER_REGISTRY_READ_ABI = [
|
|
44
|
+
"function documentHash() view returns (bytes32)",
|
|
45
|
+
"function agreed(address user) view returns (bool)",
|
|
46
|
+
];
|
|
47
|
+
export function registerReadTools(server, ctx) {
|
|
48
|
+
const rpc = new RpcProvider(ctx.config);
|
|
49
|
+
registerMulticall(server, rpc);
|
|
50
|
+
registerTreasury(server, rpc);
|
|
51
|
+
registerValidators(server, rpc);
|
|
52
|
+
registerSettings(server, rpc);
|
|
53
|
+
registerExpertStatus(server, rpc);
|
|
54
|
+
// Phase C — participation reads
|
|
55
|
+
registerTokenSaleTiers(server, rpc);
|
|
56
|
+
registerTokenSaleUser(server, rpc);
|
|
57
|
+
registerDistributionStatus(server, rpc);
|
|
58
|
+
registerStakingInfo(server, rpc);
|
|
59
|
+
// Privacy policy
|
|
60
|
+
registerPrivacyPolicyStatus(server, rpc);
|
|
61
|
+
}
|
|
62
|
+
function errorResult(message) {
|
|
63
|
+
return { content: [{ type: "text", text: message }], isError: true };
|
|
64
|
+
}
|
|
65
|
+
function registerMulticall(server, rpc) {
|
|
66
|
+
server.registerTool("dexe_read_multicall", {
|
|
67
|
+
title: "Arbitrary batched eth_call via Multicall3",
|
|
68
|
+
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.",
|
|
69
|
+
inputSchema: {
|
|
70
|
+
calls: z
|
|
71
|
+
.array(z.object({
|
|
72
|
+
target: z.string(),
|
|
73
|
+
signature: z
|
|
74
|
+
.string()
|
|
75
|
+
.describe("Full function signature, e.g. 'function balanceOf(address) view returns (uint256)'"),
|
|
76
|
+
method: z.string().describe("Method name matching the signature"),
|
|
77
|
+
args: z.array(z.unknown()).default([]),
|
|
78
|
+
allowFailure: z.boolean().default(true),
|
|
79
|
+
}))
|
|
80
|
+
.min(1),
|
|
81
|
+
},
|
|
82
|
+
outputSchema: {
|
|
83
|
+
results: z.array(z.object({
|
|
84
|
+
success: z.boolean(),
|
|
85
|
+
value: z.unknown().nullable(),
|
|
86
|
+
raw: z.string(),
|
|
87
|
+
error: z.string().optional(),
|
|
88
|
+
})),
|
|
89
|
+
},
|
|
90
|
+
}, async ({ calls }) => {
|
|
91
|
+
try {
|
|
92
|
+
const provider = rpc.requireProvider();
|
|
93
|
+
const batch = calls.map((c) => {
|
|
94
|
+
if (!isAddress(c.target))
|
|
95
|
+
throw new Error(`Invalid target: ${c.target}`);
|
|
96
|
+
return {
|
|
97
|
+
target: c.target,
|
|
98
|
+
iface: new Interface([c.signature]),
|
|
99
|
+
method: c.method,
|
|
100
|
+
args: c.args.map(coerceArg),
|
|
101
|
+
allowFailure: c.allowFailure,
|
|
102
|
+
};
|
|
103
|
+
});
|
|
104
|
+
const results = await multicall(provider, batch);
|
|
105
|
+
const structured = {
|
|
106
|
+
results: results.map((r) => ({
|
|
107
|
+
success: r.success,
|
|
108
|
+
value: jsonSafe(r.value),
|
|
109
|
+
raw: r.raw,
|
|
110
|
+
error: r.error,
|
|
111
|
+
})),
|
|
112
|
+
};
|
|
113
|
+
return {
|
|
114
|
+
content: [
|
|
115
|
+
{
|
|
116
|
+
type: "text",
|
|
117
|
+
text: `${results.length} calls: ${results.filter((r) => r.success).length} ok, ${results.filter((r) => !r.success).length} failed`,
|
|
118
|
+
},
|
|
119
|
+
],
|
|
120
|
+
structuredContent: structured,
|
|
121
|
+
};
|
|
122
|
+
}
|
|
123
|
+
catch (err) {
|
|
124
|
+
return errorResult(`read_multicall failed: ${err instanceof Error ? err.message : String(err)}`);
|
|
125
|
+
}
|
|
126
|
+
});
|
|
127
|
+
}
|
|
128
|
+
function registerTreasury(server, rpc) {
|
|
129
|
+
server.registerTool("dexe_read_treasury", {
|
|
130
|
+
title: "Native + ERC20 balances for a DAO or arbitrary address",
|
|
131
|
+
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.",
|
|
132
|
+
inputSchema: {
|
|
133
|
+
holder: z.string().describe("Address whose balances we read"),
|
|
134
|
+
tokens: z.array(z.string()).default([]).describe("ERC20 contract addresses"),
|
|
135
|
+
},
|
|
136
|
+
outputSchema: {
|
|
137
|
+
holder: z.string(),
|
|
138
|
+
native: z.string(),
|
|
139
|
+
tokens: z.array(z.object({
|
|
140
|
+
token: z.string(),
|
|
141
|
+
symbol: z.string().nullable(),
|
|
142
|
+
decimals: z.number().nullable(),
|
|
143
|
+
balance: z.string().nullable(),
|
|
144
|
+
})),
|
|
145
|
+
},
|
|
146
|
+
}, async ({ holder, tokens = [] }) => {
|
|
147
|
+
if (!isAddress(holder))
|
|
148
|
+
return errorResult(`Invalid holder: ${holder}`);
|
|
149
|
+
try {
|
|
150
|
+
const provider = rpc.requireProvider();
|
|
151
|
+
const native = (await provider.getBalance(holder)).toString();
|
|
152
|
+
const iface = new Interface(ERC20_ABI);
|
|
153
|
+
const calls = [];
|
|
154
|
+
for (const t of tokens) {
|
|
155
|
+
if (!isAddress(t))
|
|
156
|
+
throw new Error(`Invalid token: ${t}`);
|
|
157
|
+
calls.push({ target: t, iface, method: "balanceOf", args: [holder], allowFailure: true });
|
|
158
|
+
calls.push({ target: t, iface, method: "symbol", args: [], allowFailure: true });
|
|
159
|
+
calls.push({ target: t, iface, method: "decimals", args: [], allowFailure: true });
|
|
160
|
+
}
|
|
161
|
+
const res = await multicall(provider, calls);
|
|
162
|
+
const tokensOut = tokens.map((t, i) => ({
|
|
163
|
+
token: t,
|
|
164
|
+
balance: res[i * 3]?.success ? res[i * 3].value.toString() : null,
|
|
165
|
+
symbol: res[i * 3 + 1]?.success ? res[i * 3 + 1].value : null,
|
|
166
|
+
decimals: res[i * 3 + 2]?.success ? Number(res[i * 3 + 2].value) : null,
|
|
167
|
+
}));
|
|
168
|
+
const structured = { holder, native, tokens: tokensOut };
|
|
169
|
+
const text = `Treasury for ${holder}\n native: ${native}\n` +
|
|
170
|
+
tokensOut
|
|
171
|
+
.map((t) => ` ${t.symbol ?? "?"} (${t.token}): ${t.balance ?? "?"}${t.decimals != null ? ` (decimals=${t.decimals})` : ""}`)
|
|
172
|
+
.join("\n");
|
|
173
|
+
return { content: [{ type: "text", text }], structuredContent: structured };
|
|
174
|
+
}
|
|
175
|
+
catch (err) {
|
|
176
|
+
return errorResult(`read_treasury failed: ${err instanceof Error ? err.message : String(err)}`);
|
|
177
|
+
}
|
|
178
|
+
});
|
|
179
|
+
}
|
|
180
|
+
function registerValidators(server, rpc) {
|
|
181
|
+
server.registerTool("dexe_read_validators", {
|
|
182
|
+
title: "Validator count + isValidator lookup",
|
|
183
|
+
description: "Reads `validatorsCount()` and optionally checks `isValidator(candidate)` on the DAO's GovValidators contract.",
|
|
184
|
+
inputSchema: {
|
|
185
|
+
govPool: z.string().describe("GovPool address"),
|
|
186
|
+
candidate: z.string().optional().describe("Optional address to check validator status for"),
|
|
187
|
+
},
|
|
188
|
+
outputSchema: {
|
|
189
|
+
govPool: z.string(),
|
|
190
|
+
validators: z.string(),
|
|
191
|
+
count: z.string(),
|
|
192
|
+
candidate: z.string().nullable(),
|
|
193
|
+
isValidator: z.boolean().nullable(),
|
|
194
|
+
},
|
|
195
|
+
}, async ({ govPool, candidate }) => {
|
|
196
|
+
if (!isAddress(govPool))
|
|
197
|
+
return errorResult(`Invalid govPool: ${govPool}`);
|
|
198
|
+
if (candidate && !isAddress(candidate))
|
|
199
|
+
return errorResult(`Invalid candidate: ${candidate}`);
|
|
200
|
+
try {
|
|
201
|
+
const provider = rpc.requireProvider();
|
|
202
|
+
const gp = new Interface(GOV_POOL_ABI);
|
|
203
|
+
const v = new Interface(GOV_VALIDATORS_ABI);
|
|
204
|
+
const [helpersR] = await multicall(provider, [
|
|
205
|
+
{ target: govPool, iface: gp, method: "getHelperContracts", args: [] },
|
|
206
|
+
]);
|
|
207
|
+
if (!helpersR?.success)
|
|
208
|
+
return errorResult("getHelperContracts reverted");
|
|
209
|
+
const validators = helpersR.value.validators;
|
|
210
|
+
const calls = [
|
|
211
|
+
{ target: validators, iface: v, method: "validatorsCount", args: [] },
|
|
212
|
+
];
|
|
213
|
+
if (candidate) {
|
|
214
|
+
calls.push({
|
|
215
|
+
target: validators,
|
|
216
|
+
iface: v,
|
|
217
|
+
method: "isValidator",
|
|
218
|
+
args: [candidate],
|
|
219
|
+
allowFailure: true,
|
|
220
|
+
});
|
|
221
|
+
}
|
|
222
|
+
const res = await multicall(provider, calls);
|
|
223
|
+
const count = res[0].value.toString();
|
|
224
|
+
const isVal = candidate ? Boolean(res[1]?.value) : null;
|
|
225
|
+
const structured = {
|
|
226
|
+
govPool,
|
|
227
|
+
validators,
|
|
228
|
+
count,
|
|
229
|
+
candidate: candidate ?? null,
|
|
230
|
+
isValidator: isVal,
|
|
231
|
+
};
|
|
232
|
+
const text = `Validators contract ${validators}\n count: ${count}` +
|
|
233
|
+
(candidate ? `\n ${candidate} isValidator: ${isVal}` : "");
|
|
234
|
+
return { content: [{ type: "text", text }], structuredContent: structured };
|
|
235
|
+
}
|
|
236
|
+
catch (err) {
|
|
237
|
+
return errorResult(`read_validators failed: ${err instanceof Error ? err.message : String(err)}`);
|
|
238
|
+
}
|
|
239
|
+
});
|
|
240
|
+
}
|
|
241
|
+
function registerSettings(server, rpc) {
|
|
242
|
+
server.registerTool("dexe_read_settings", {
|
|
243
|
+
title: "Default + internal proposal settings for a DAO",
|
|
244
|
+
description: "Reads `GovSettings.getDefaultSettings()` and `getInternalSettings()` on the DAO's settings contract.",
|
|
245
|
+
inputSchema: {
|
|
246
|
+
govPool: z.string(),
|
|
247
|
+
},
|
|
248
|
+
outputSchema: {
|
|
249
|
+
govPool: z.string(),
|
|
250
|
+
settings: z.string(),
|
|
251
|
+
defaultSettings: z.unknown(),
|
|
252
|
+
internalSettings: z.unknown(),
|
|
253
|
+
},
|
|
254
|
+
}, async ({ govPool }) => {
|
|
255
|
+
if (!isAddress(govPool))
|
|
256
|
+
return errorResult(`Invalid govPool: ${govPool}`);
|
|
257
|
+
try {
|
|
258
|
+
const provider = rpc.requireProvider();
|
|
259
|
+
const gp = new Interface(GOV_POOL_ABI);
|
|
260
|
+
const s = new Interface(GOV_SETTINGS_ABI);
|
|
261
|
+
const [helpersR] = await multicall(provider, [
|
|
262
|
+
{ target: govPool, iface: gp, method: "getHelperContracts", args: [] },
|
|
263
|
+
]);
|
|
264
|
+
if (!helpersR?.success)
|
|
265
|
+
return errorResult("getHelperContracts reverted");
|
|
266
|
+
const settings = helpersR.value.settings;
|
|
267
|
+
const [defR, intR] = await multicall(provider, [
|
|
268
|
+
{ target: settings, iface: s, method: "getDefaultSettings", args: [], allowFailure: true },
|
|
269
|
+
{ target: settings, iface: s, method: "getInternalSettings", args: [], allowFailure: true },
|
|
270
|
+
]);
|
|
271
|
+
const structured = {
|
|
272
|
+
govPool,
|
|
273
|
+
settings,
|
|
274
|
+
defaultSettings: jsonSafe(defR?.value ?? null),
|
|
275
|
+
internalSettings: jsonSafe(intR?.value ?? null),
|
|
276
|
+
};
|
|
277
|
+
return {
|
|
278
|
+
content: [
|
|
279
|
+
{
|
|
280
|
+
type: "text",
|
|
281
|
+
text: `Settings for ${govPool}\n contract: ${settings}\n\n` +
|
|
282
|
+
`default: ${JSON.stringify(structured.defaultSettings, null, 2)}\n\n` +
|
|
283
|
+
`internal: ${JSON.stringify(structured.internalSettings, null, 2)}`,
|
|
284
|
+
},
|
|
285
|
+
],
|
|
286
|
+
structuredContent: structured,
|
|
287
|
+
};
|
|
288
|
+
}
|
|
289
|
+
catch (err) {
|
|
290
|
+
return errorResult(`read_settings failed: ${err instanceof Error ? err.message : String(err)}`);
|
|
291
|
+
}
|
|
292
|
+
});
|
|
293
|
+
}
|
|
294
|
+
function registerExpertStatus(server, rpc) {
|
|
295
|
+
server.registerTool("dexe_read_expert_status", {
|
|
296
|
+
title: "Expert + BABT status for a user in a DAO",
|
|
297
|
+
description: "Reads `GovPool.getExpertStatus(user)` and, if a BABT contract is configured on the DAO, `BABT.balanceOf(user) > 0`.",
|
|
298
|
+
inputSchema: {
|
|
299
|
+
govPool: z.string(),
|
|
300
|
+
user: z.string(),
|
|
301
|
+
},
|
|
302
|
+
outputSchema: {
|
|
303
|
+
govPool: z.string(),
|
|
304
|
+
user: z.string(),
|
|
305
|
+
isExpert: z.boolean(),
|
|
306
|
+
babt: z.string(),
|
|
307
|
+
hasBabt: z.boolean().nullable(),
|
|
308
|
+
},
|
|
309
|
+
}, async ({ govPool, user }) => {
|
|
310
|
+
if (!isAddress(govPool))
|
|
311
|
+
return errorResult(`Invalid govPool: ${govPool}`);
|
|
312
|
+
if (!isAddress(user))
|
|
313
|
+
return errorResult(`Invalid user: ${user}`);
|
|
314
|
+
try {
|
|
315
|
+
const provider = rpc.requireProvider();
|
|
316
|
+
const gp = new Interface(GOV_POOL_ABI);
|
|
317
|
+
const babt = new Interface(BABT_ABI);
|
|
318
|
+
const [expertR, nftR] = await multicall(provider, [
|
|
319
|
+
{ target: govPool, iface: gp, method: "getExpertStatus", args: [user], allowFailure: true },
|
|
320
|
+
{ target: govPool, iface: gp, method: "getNftContracts", args: [], allowFailure: true },
|
|
321
|
+
]);
|
|
322
|
+
const isExpert = expertR?.success ? Boolean(expertR.value) : false;
|
|
323
|
+
const babtAddr = nftR?.success
|
|
324
|
+
? nftR.value.babt
|
|
325
|
+
: ZeroAddress;
|
|
326
|
+
let hasBabt = null;
|
|
327
|
+
if (babtAddr && babtAddr !== ZeroAddress && isAddress(babtAddr)) {
|
|
328
|
+
const [bR] = await multicall(provider, [
|
|
329
|
+
{ target: babtAddr, iface: babt, method: "balanceOf", args: [user], allowFailure: true },
|
|
330
|
+
]);
|
|
331
|
+
if (bR?.success)
|
|
332
|
+
hasBabt = bR.value > 0n;
|
|
333
|
+
}
|
|
334
|
+
const structured = { govPool, user, isExpert, babt: babtAddr, hasBabt };
|
|
335
|
+
return {
|
|
336
|
+
content: [
|
|
337
|
+
{
|
|
338
|
+
type: "text",
|
|
339
|
+
text: `Expert status for ${user} on ${govPool}: expert=${isExpert}, babt=${babtAddr}, hasBabt=${hasBabt}`,
|
|
340
|
+
},
|
|
341
|
+
],
|
|
342
|
+
structuredContent: structured,
|
|
343
|
+
};
|
|
344
|
+
}
|
|
345
|
+
catch (err) {
|
|
346
|
+
return errorResult(`read_expert_status failed: ${err instanceof Error ? err.message : String(err)}`);
|
|
347
|
+
}
|
|
348
|
+
});
|
|
349
|
+
}
|
|
350
|
+
// ---------- token sale reads ----------
|
|
351
|
+
function registerTokenSaleTiers(server, rpc) {
|
|
352
|
+
server.registerTool("dexe_read_token_sale_tiers", {
|
|
353
|
+
title: "Read token sale tier details",
|
|
354
|
+
description: "Reads tier count via `latestTierId()` and tier details via `getTierViews(offset, limit)` from a TokenSaleProposal contract.",
|
|
355
|
+
inputSchema: {
|
|
356
|
+
tokenSaleProposal: z.string().describe("TokenSaleProposal contract address"),
|
|
357
|
+
offset: z.number().default(0).describe("Pagination offset"),
|
|
358
|
+
limit: z.number().default(10).describe("Max tiers to return"),
|
|
359
|
+
},
|
|
360
|
+
}, async ({ tokenSaleProposal, offset = 0, limit = 10 }) => {
|
|
361
|
+
if (!isAddress(tokenSaleProposal))
|
|
362
|
+
return errorResult(`Invalid tokenSaleProposal: ${tokenSaleProposal}`);
|
|
363
|
+
try {
|
|
364
|
+
const provider = rpc.requireProvider();
|
|
365
|
+
const iface = new Interface(TOKEN_SALE_READ_ABI);
|
|
366
|
+
const [countR] = await multicall(provider, [
|
|
367
|
+
{ target: tokenSaleProposal, iface, method: "latestTierId", args: [], allowFailure: true },
|
|
368
|
+
]);
|
|
369
|
+
const totalTiers = countR?.success ? Number(countR.value) : 0;
|
|
370
|
+
if (totalTiers === 0) {
|
|
371
|
+
return {
|
|
372
|
+
content: [{ type: "text", text: `No tiers found on ${tokenSaleProposal}` }],
|
|
373
|
+
structuredContent: { tokenSaleProposal, totalTiers: 0, tiers: [] },
|
|
374
|
+
};
|
|
375
|
+
}
|
|
376
|
+
const [tiersR] = await multicall(provider, [
|
|
377
|
+
{ target: tokenSaleProposal, iface, method: "getTierViews", args: [offset, limit], allowFailure: true },
|
|
378
|
+
]);
|
|
379
|
+
const tiers = tiersR?.success ? jsonSafe(tiersR.value) : [];
|
|
380
|
+
const structured = { tokenSaleProposal, totalTiers, offset, limit, tiers };
|
|
381
|
+
return {
|
|
382
|
+
content: [{ type: "text", text: `TokenSale ${tokenSaleProposal}: ${totalTiers} tier(s), showing offset=${offset} limit=${limit}` }],
|
|
383
|
+
structuredContent: structured,
|
|
384
|
+
};
|
|
385
|
+
}
|
|
386
|
+
catch (err) {
|
|
387
|
+
return errorResult(`read_token_sale_tiers failed: ${err instanceof Error ? err.message : String(err)}`);
|
|
388
|
+
}
|
|
389
|
+
});
|
|
390
|
+
}
|
|
391
|
+
function registerTokenSaleUser(server, rpc) {
|
|
392
|
+
server.registerTool("dexe_read_token_sale_user", {
|
|
393
|
+
title: "Read user participation status in token sale tiers",
|
|
394
|
+
description: "Reads `getUserViews(user, tierIds)` from a TokenSaleProposal — returns per-tier purchase status, claimable amounts, and vesting info.",
|
|
395
|
+
inputSchema: {
|
|
396
|
+
tokenSaleProposal: z.string().describe("TokenSaleProposal contract address"),
|
|
397
|
+
user: z.string().describe("User address to query"),
|
|
398
|
+
tierIds: z.array(z.string()).min(1).describe("Tier IDs to check"),
|
|
399
|
+
},
|
|
400
|
+
}, async ({ tokenSaleProposal, user, tierIds }) => {
|
|
401
|
+
if (!isAddress(tokenSaleProposal))
|
|
402
|
+
return errorResult(`Invalid tokenSaleProposal: ${tokenSaleProposal}`);
|
|
403
|
+
if (!isAddress(user))
|
|
404
|
+
return errorResult(`Invalid user: ${user}`);
|
|
405
|
+
try {
|
|
406
|
+
const provider = rpc.requireProvider();
|
|
407
|
+
const iface = new Interface(TOKEN_SALE_READ_ABI);
|
|
408
|
+
const [viewsR] = await multicall(provider, [
|
|
409
|
+
{
|
|
410
|
+
target: tokenSaleProposal,
|
|
411
|
+
iface,
|
|
412
|
+
method: "getUserViews",
|
|
413
|
+
args: [user, tierIds.map((id) => BigInt(id))],
|
|
414
|
+
allowFailure: true,
|
|
415
|
+
},
|
|
416
|
+
]);
|
|
417
|
+
const userViews = viewsR?.success ? jsonSafe(viewsR.value) : [];
|
|
418
|
+
const structured = { tokenSaleProposal, user, tierIds, userViews };
|
|
419
|
+
return {
|
|
420
|
+
content: [{ type: "text", text: `TokenSale user views for ${user}: ${tierIds.length} tier(s) queried` }],
|
|
421
|
+
structuredContent: structured,
|
|
422
|
+
};
|
|
423
|
+
}
|
|
424
|
+
catch (err) {
|
|
425
|
+
return errorResult(`read_token_sale_user failed: ${err instanceof Error ? err.message : String(err)}`);
|
|
426
|
+
}
|
|
427
|
+
});
|
|
428
|
+
}
|
|
429
|
+
// ---------- distribution reads ----------
|
|
430
|
+
function registerDistributionStatus(server, rpc) {
|
|
431
|
+
server.registerTool("dexe_read_distribution_status", {
|
|
432
|
+
title: "Check claimable amounts for distribution proposals",
|
|
433
|
+
description: "For each proposal ID, reads `isClaimed(proposalId, voter)` and `getPotentialReward(proposalId, voter)` from a DistributionProposal contract.",
|
|
434
|
+
inputSchema: {
|
|
435
|
+
distributionProposal: z.string().describe("DistributionProposal contract address"),
|
|
436
|
+
voter: z.string().describe("Voter address to check"),
|
|
437
|
+
proposalIds: z.array(z.string()).min(1).describe("Proposal IDs to check"),
|
|
438
|
+
},
|
|
439
|
+
}, async ({ distributionProposal, voter, proposalIds }) => {
|
|
440
|
+
if (!isAddress(distributionProposal))
|
|
441
|
+
return errorResult(`Invalid distributionProposal: ${distributionProposal}`);
|
|
442
|
+
if (!isAddress(voter))
|
|
443
|
+
return errorResult(`Invalid voter: ${voter}`);
|
|
444
|
+
try {
|
|
445
|
+
const provider = rpc.requireProvider();
|
|
446
|
+
const iface = new Interface(DISTRIBUTION_READ_ABI);
|
|
447
|
+
const calls = [];
|
|
448
|
+
for (const pid of proposalIds) {
|
|
449
|
+
const id = BigInt(pid);
|
|
450
|
+
calls.push({ target: distributionProposal, iface, method: "isClaimed", args: [id, voter], allowFailure: true });
|
|
451
|
+
calls.push({ target: distributionProposal, iface, method: "getPotentialReward", args: [id, voter], allowFailure: true });
|
|
452
|
+
}
|
|
453
|
+
const res = await multicall(provider, calls);
|
|
454
|
+
const distributions = proposalIds.map((pid, i) => ({
|
|
455
|
+
proposalId: pid,
|
|
456
|
+
isClaimed: res[i * 2]?.success ? Boolean(res[i * 2].value) : null,
|
|
457
|
+
potentialReward: res[i * 2 + 1]?.success ? res[i * 2 + 1].value.toString() : null,
|
|
458
|
+
}));
|
|
459
|
+
const structured = { distributionProposal, voter, distributions };
|
|
460
|
+
const text = distributions
|
|
461
|
+
.map((d) => ` proposal ${d.proposalId}: claimed=${d.isClaimed}, reward=${d.potentialReward ?? "?"}`)
|
|
462
|
+
.join("\n");
|
|
463
|
+
return {
|
|
464
|
+
content: [{ type: "text", text: `Distribution status for ${voter}:\n${text}` }],
|
|
465
|
+
structuredContent: structured,
|
|
466
|
+
};
|
|
467
|
+
}
|
|
468
|
+
catch (err) {
|
|
469
|
+
return errorResult(`read_distribution_status failed: ${err instanceof Error ? err.message : String(err)}`);
|
|
470
|
+
}
|
|
471
|
+
});
|
|
472
|
+
}
|
|
473
|
+
// ---------- staking reads ----------
|
|
474
|
+
function registerStakingInfo(server, rpc) {
|
|
475
|
+
server.registerTool("dexe_read_staking_info", {
|
|
476
|
+
title: "Read staking tier details and user info",
|
|
477
|
+
description: "Reads `stakingsCount()` and `getActiveStakings()` from a StakingProposal. Optionally reads `getUserInfo(user)` for a specific user's staked amounts and pending rewards.",
|
|
478
|
+
inputSchema: {
|
|
479
|
+
stakingProposal: z.string().describe("StakingProposal contract address"),
|
|
480
|
+
user: z.string().optional().describe("Optional user address to get their staking details"),
|
|
481
|
+
},
|
|
482
|
+
}, async ({ stakingProposal, user }) => {
|
|
483
|
+
if (!isAddress(stakingProposal))
|
|
484
|
+
return errorResult(`Invalid stakingProposal: ${stakingProposal}`);
|
|
485
|
+
if (user && !isAddress(user))
|
|
486
|
+
return errorResult(`Invalid user: ${user}`);
|
|
487
|
+
try {
|
|
488
|
+
const provider = rpc.requireProvider();
|
|
489
|
+
const iface = new Interface(STAKING_READ_ABI);
|
|
490
|
+
const baseCalls = [
|
|
491
|
+
{ target: stakingProposal, iface, method: "stakingsCount", args: [], allowFailure: true },
|
|
492
|
+
{ target: stakingProposal, iface, method: "getActiveStakings", args: [], allowFailure: true },
|
|
493
|
+
];
|
|
494
|
+
if (user) {
|
|
495
|
+
baseCalls.push({ target: stakingProposal, iface, method: "getUserInfo", args: [user], allowFailure: true });
|
|
496
|
+
}
|
|
497
|
+
const res = await multicall(provider, baseCalls);
|
|
498
|
+
const count = res[0]?.success ? Number(res[0].value) : 0;
|
|
499
|
+
const activeStakings = res[1]?.success ? jsonSafe(res[1].value) : [];
|
|
500
|
+
const userInfo = user && res[2]?.success ? jsonSafe(res[2].value) : null;
|
|
501
|
+
const structured = { stakingProposal, stakingsCount: count, activeStakings, user: user ?? null, userInfo };
|
|
502
|
+
const text = `Staking ${stakingProposal}: ${count} tier(s)` + (user ? `, user ${user} info included` : "");
|
|
503
|
+
return {
|
|
504
|
+
content: [{ type: "text", text }],
|
|
505
|
+
structuredContent: structured,
|
|
506
|
+
};
|
|
507
|
+
}
|
|
508
|
+
catch (err) {
|
|
509
|
+
return errorResult(`read_staking_info failed: ${err instanceof Error ? err.message : String(err)}`);
|
|
510
|
+
}
|
|
511
|
+
});
|
|
512
|
+
}
|
|
513
|
+
// ---------- privacy policy reads ----------
|
|
514
|
+
function registerPrivacyPolicyStatus(server, rpc) {
|
|
515
|
+
server.registerTool("dexe_read_privacy_policy_status", {
|
|
516
|
+
title: "Check privacy policy agreement status",
|
|
517
|
+
description: "Reads `UserRegistry.documentHash()` and `UserRegistry.agreed(user)`. Returns the current policy hash and whether the user has agreed.",
|
|
518
|
+
inputSchema: {
|
|
519
|
+
userRegistry: z.string().describe("UserRegistry contract address"),
|
|
520
|
+
user: z.string().describe("User address to check"),
|
|
521
|
+
},
|
|
522
|
+
}, async ({ userRegistry, user }) => {
|
|
523
|
+
if (!isAddress(userRegistry))
|
|
524
|
+
return errorResult(`Invalid userRegistry: ${userRegistry}`);
|
|
525
|
+
if (!isAddress(user))
|
|
526
|
+
return errorResult(`Invalid user: ${user}`);
|
|
527
|
+
try {
|
|
528
|
+
const provider = rpc.requireProvider();
|
|
529
|
+
const iface = new Interface(USER_REGISTRY_READ_ABI);
|
|
530
|
+
const [hashR, agreedR] = await multicall(provider, [
|
|
531
|
+
{ target: userRegistry, iface, method: "documentHash", args: [], allowFailure: true },
|
|
532
|
+
{ target: userRegistry, iface, method: "agreed", args: [user], allowFailure: true },
|
|
533
|
+
]);
|
|
534
|
+
const documentHash = hashR?.success ? String(hashR.value) : null;
|
|
535
|
+
const hasAgreed = agreedR?.success ? Boolean(agreedR.value) : null;
|
|
536
|
+
const structured = { userRegistry, user, documentHash, hasAgreed };
|
|
537
|
+
return {
|
|
538
|
+
content: [
|
|
539
|
+
{
|
|
540
|
+
type: "text",
|
|
541
|
+
text: `Privacy policy for ${user}: agreed=${hasAgreed}, documentHash=${documentHash ?? "?"}`,
|
|
542
|
+
},
|
|
543
|
+
],
|
|
544
|
+
structuredContent: structured,
|
|
545
|
+
};
|
|
546
|
+
}
|
|
547
|
+
catch (err) {
|
|
548
|
+
return errorResult(`read_privacy_policy_status failed: ${err instanceof Error ? err.message : String(err)}`);
|
|
549
|
+
}
|
|
550
|
+
});
|
|
551
|
+
}
|
|
552
|
+
// ---------- helpers ----------
|
|
553
|
+
function coerceArg(a) {
|
|
554
|
+
// Allow stringified bigints for numeric args.
|
|
555
|
+
if (typeof a === "string" && /^-?\d+$/.test(a) && a.length > 9) {
|
|
556
|
+
try {
|
|
557
|
+
return BigInt(a);
|
|
558
|
+
}
|
|
559
|
+
catch {
|
|
560
|
+
return a;
|
|
561
|
+
}
|
|
562
|
+
}
|
|
563
|
+
return a;
|
|
564
|
+
}
|
|
565
|
+
function jsonSafe(v) {
|
|
566
|
+
if (v === null || v === undefined)
|
|
567
|
+
return v;
|
|
568
|
+
if (typeof v === "bigint")
|
|
569
|
+
return v.toString();
|
|
570
|
+
if (Array.isArray(v))
|
|
571
|
+
return v.map(jsonSafe);
|
|
572
|
+
if (typeof v === "object") {
|
|
573
|
+
const out = {};
|
|
574
|
+
for (const [k, val] of Object.entries(v))
|
|
575
|
+
out[k] = jsonSafe(val);
|
|
576
|
+
return out;
|
|
577
|
+
}
|
|
578
|
+
return v;
|
|
579
|
+
}
|
|
580
|
+
//# 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":"subgraph.d.ts","sourceRoot":"","sources":["../../src/tools/subgraph.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACzE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAkNhD,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,SAAS,EAAE,GAAG,EAAE,WAAW,GAAG,IAAI,CAO/E"}
|