@sherwoodagent/cli 0.15.3 → 0.17.2
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/dist/{chat-A2ORZVU3.js → chat-XTOTPTGV.js} +4 -4
- package/dist/chunk-4GTOZMVG.js +458 -0
- package/dist/chunk-4GTOZMVG.js.map +1 -0
- package/dist/{chunk-GC5J54OC.js → chunk-E3UCNLU3.js} +120 -72
- package/dist/chunk-E3UCNLU3.js.map +1 -0
- package/dist/{chunk-LACUMLU4.js → chunk-E7KKGN3V.js} +2 -2
- package/dist/{chunk-AK7BD7KH.js → chunk-RAFAIAIE.js} +2 -2
- package/dist/{eas-V6B6XGBK.js → eas-MOPXU3QW.js} +3 -3
- package/dist/governor-J7WTADUX.js +79 -0
- package/dist/governor-J7WTADUX.js.map +1 -0
- package/dist/index.js +984 -834
- package/dist/index.js.map +1 -1
- package/dist/{research-63D7YID3.js → research-BYQZ2MLK.js} +3 -3
- package/dist/{session-3YRZI426.js → session-RDBY24HJ.js} +4 -4
- package/dist/{xmtp-BSTLCZWG.js → xmtp-2AHDKL2Q.js} +3 -3
- package/package.json +1 -1
- package/dist/chunk-GC5J54OC.js.map +0 -1
- /package/dist/{chat-A2ORZVU3.js.map → chat-XTOTPTGV.js.map} +0 -0
- /package/dist/{chunk-LACUMLU4.js.map → chunk-E7KKGN3V.js.map} +0 -0
- /package/dist/{chunk-AK7BD7KH.js.map → chunk-RAFAIAIE.js.map} +0 -0
- /package/dist/{eas-V6B6XGBK.js.map → eas-MOPXU3QW.js.map} +0 -0
- /package/dist/{research-63D7YID3.js.map → research-BYQZ2MLK.js.map} +0 -0
- /package/dist/{session-3YRZI426.js.map → session-RDBY24HJ.js.map} +0 -0
- /package/dist/{xmtp-BSTLCZWG.js.map → xmtp-2AHDKL2Q.js.map} +0 -0
|
@@ -2,8 +2,8 @@ import {
|
|
|
2
2
|
getTextRecord,
|
|
3
3
|
resolveSyndicate,
|
|
4
4
|
setTextRecord
|
|
5
|
-
} from "./chunk-
|
|
6
|
-
import "./chunk-
|
|
5
|
+
} from "./chunk-E7KKGN3V.js";
|
|
6
|
+
import "./chunk-E3UCNLU3.js";
|
|
7
7
|
import {
|
|
8
8
|
getAccount
|
|
9
9
|
} from "./chunk-N65F7HRF.js";
|
|
@@ -17,7 +17,7 @@ import {
|
|
|
17
17
|
import chalk from "chalk";
|
|
18
18
|
import ora from "ora";
|
|
19
19
|
async function loadXmtp() {
|
|
20
|
-
return import("./xmtp-
|
|
20
|
+
return import("./xmtp-2AHDKL2Q.js");
|
|
21
21
|
}
|
|
22
22
|
function formatTimestamp(date) {
|
|
23
23
|
return `${date.getHours().toString().padStart(2, "0")}:${date.getMinutes().toString().padStart(2, "0")}`;
|
|
@@ -352,4 +352,4 @@ function registerChatCommands(program) {
|
|
|
352
352
|
export {
|
|
353
353
|
registerChatCommands
|
|
354
354
|
};
|
|
355
|
-
//# sourceMappingURL=chat-
|
|
355
|
+
//# sourceMappingURL=chat-XTOTPTGV.js.map
|
|
@@ -0,0 +1,458 @@
|
|
|
1
|
+
import {
|
|
2
|
+
SHERWOOD,
|
|
3
|
+
SYNDICATE_GOVERNOR_ABI
|
|
4
|
+
} from "./chunk-E3UCNLU3.js";
|
|
5
|
+
import {
|
|
6
|
+
getAccount,
|
|
7
|
+
getPublicClient,
|
|
8
|
+
getWalletClient
|
|
9
|
+
} from "./chunk-N65F7HRF.js";
|
|
10
|
+
import {
|
|
11
|
+
getChain
|
|
12
|
+
} from "./chunk-MJMWA4LY.js";
|
|
13
|
+
|
|
14
|
+
// src/lib/governor.ts
|
|
15
|
+
import { parseEventLogs } from "viem";
|
|
16
|
+
var PROPOSAL_STATES = [
|
|
17
|
+
"Draft",
|
|
18
|
+
"Pending",
|
|
19
|
+
"Approved",
|
|
20
|
+
"Rejected",
|
|
21
|
+
"Expired",
|
|
22
|
+
"Executed",
|
|
23
|
+
"Settled",
|
|
24
|
+
"Cancelled"
|
|
25
|
+
];
|
|
26
|
+
var PROPOSAL_STATE = {
|
|
27
|
+
Draft: 0,
|
|
28
|
+
Pending: 1,
|
|
29
|
+
Approved: 2,
|
|
30
|
+
Rejected: 3,
|
|
31
|
+
Expired: 4,
|
|
32
|
+
Executed: 5,
|
|
33
|
+
Settled: 6,
|
|
34
|
+
Cancelled: 7
|
|
35
|
+
};
|
|
36
|
+
var VOTE_TYPE = {
|
|
37
|
+
For: 0,
|
|
38
|
+
Against: 1,
|
|
39
|
+
Abstain: 2
|
|
40
|
+
};
|
|
41
|
+
function parseDuration(input) {
|
|
42
|
+
const match = input.match(/^(\d+)(d|h|m|s)?$/);
|
|
43
|
+
if (!match) throw new Error(`Invalid duration: ${input}`);
|
|
44
|
+
const value = BigInt(match[1]);
|
|
45
|
+
switch (match[2]) {
|
|
46
|
+
case "d":
|
|
47
|
+
return value * 86400n;
|
|
48
|
+
case "h":
|
|
49
|
+
return value * 3600n;
|
|
50
|
+
case "m":
|
|
51
|
+
return value * 60n;
|
|
52
|
+
case "s":
|
|
53
|
+
case void 0:
|
|
54
|
+
return value;
|
|
55
|
+
default:
|
|
56
|
+
throw new Error(`Unknown duration unit: ${match[2]}`);
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
function getGovernorAddress() {
|
|
60
|
+
return SHERWOOD().GOVERNOR;
|
|
61
|
+
}
|
|
62
|
+
async function getGovernorParams() {
|
|
63
|
+
const client = getPublicClient();
|
|
64
|
+
const result = await client.readContract({
|
|
65
|
+
address: getGovernorAddress(),
|
|
66
|
+
abi: SYNDICATE_GOVERNOR_ABI,
|
|
67
|
+
functionName: "getGovernorParams"
|
|
68
|
+
});
|
|
69
|
+
return result;
|
|
70
|
+
}
|
|
71
|
+
async function getProposal(id) {
|
|
72
|
+
const client = getPublicClient();
|
|
73
|
+
const result = await client.readContract({
|
|
74
|
+
address: getGovernorAddress(),
|
|
75
|
+
abi: SYNDICATE_GOVERNOR_ABI,
|
|
76
|
+
functionName: "getProposal",
|
|
77
|
+
args: [id]
|
|
78
|
+
});
|
|
79
|
+
return result;
|
|
80
|
+
}
|
|
81
|
+
async function getProposalState(id) {
|
|
82
|
+
const client = getPublicClient();
|
|
83
|
+
return client.readContract({
|
|
84
|
+
address: getGovernorAddress(),
|
|
85
|
+
abi: SYNDICATE_GOVERNOR_ABI,
|
|
86
|
+
functionName: "getProposalState",
|
|
87
|
+
args: [id]
|
|
88
|
+
});
|
|
89
|
+
}
|
|
90
|
+
async function proposalCount() {
|
|
91
|
+
const client = getPublicClient();
|
|
92
|
+
return client.readContract({
|
|
93
|
+
address: getGovernorAddress(),
|
|
94
|
+
abi: SYNDICATE_GOVERNOR_ABI,
|
|
95
|
+
functionName: "proposalCount"
|
|
96
|
+
});
|
|
97
|
+
}
|
|
98
|
+
async function getVoteWeight(proposalId, voter) {
|
|
99
|
+
const client = getPublicClient();
|
|
100
|
+
return client.readContract({
|
|
101
|
+
address: getGovernorAddress(),
|
|
102
|
+
abi: SYNDICATE_GOVERNOR_ABI,
|
|
103
|
+
functionName: "getVoteWeight",
|
|
104
|
+
args: [proposalId, voter]
|
|
105
|
+
});
|
|
106
|
+
}
|
|
107
|
+
async function hasVoted(proposalId, voter) {
|
|
108
|
+
const client = getPublicClient();
|
|
109
|
+
return client.readContract({
|
|
110
|
+
address: getGovernorAddress(),
|
|
111
|
+
abi: SYNDICATE_GOVERNOR_ABI,
|
|
112
|
+
functionName: "hasVoted",
|
|
113
|
+
args: [proposalId, voter]
|
|
114
|
+
});
|
|
115
|
+
}
|
|
116
|
+
async function getProposalCalls(proposalId) {
|
|
117
|
+
const client = getPublicClient();
|
|
118
|
+
const result = await client.readContract({
|
|
119
|
+
address: getGovernorAddress(),
|
|
120
|
+
abi: SYNDICATE_GOVERNOR_ABI,
|
|
121
|
+
functionName: "getProposalCalls",
|
|
122
|
+
args: [proposalId]
|
|
123
|
+
});
|
|
124
|
+
return result.map((c) => ({ target: c.target, data: c.data, value: c.value }));
|
|
125
|
+
}
|
|
126
|
+
async function getExecuteCalls(proposalId) {
|
|
127
|
+
const client = getPublicClient();
|
|
128
|
+
const result = await client.readContract({
|
|
129
|
+
address: getGovernorAddress(),
|
|
130
|
+
abi: SYNDICATE_GOVERNOR_ABI,
|
|
131
|
+
functionName: "getExecuteCalls",
|
|
132
|
+
args: [proposalId]
|
|
133
|
+
});
|
|
134
|
+
return result.map((c) => ({ target: c.target, data: c.data, value: c.value }));
|
|
135
|
+
}
|
|
136
|
+
async function getSettlementCalls(proposalId) {
|
|
137
|
+
const client = getPublicClient();
|
|
138
|
+
const result = await client.readContract({
|
|
139
|
+
address: getGovernorAddress(),
|
|
140
|
+
abi: SYNDICATE_GOVERNOR_ABI,
|
|
141
|
+
functionName: "getSettlementCalls",
|
|
142
|
+
args: [proposalId]
|
|
143
|
+
});
|
|
144
|
+
return result.map((c) => ({ target: c.target, data: c.data, value: c.value }));
|
|
145
|
+
}
|
|
146
|
+
async function getRegisteredVaults() {
|
|
147
|
+
const client = getPublicClient();
|
|
148
|
+
return client.readContract({
|
|
149
|
+
address: getGovernorAddress(),
|
|
150
|
+
abi: SYNDICATE_GOVERNOR_ABI,
|
|
151
|
+
functionName: "getRegisteredVaults"
|
|
152
|
+
});
|
|
153
|
+
}
|
|
154
|
+
async function getActiveProposal(vault) {
|
|
155
|
+
const client = getPublicClient();
|
|
156
|
+
return client.readContract({
|
|
157
|
+
address: getGovernorAddress(),
|
|
158
|
+
abi: SYNDICATE_GOVERNOR_ABI,
|
|
159
|
+
functionName: "getActiveProposal",
|
|
160
|
+
args: [vault]
|
|
161
|
+
});
|
|
162
|
+
}
|
|
163
|
+
async function getCooldownEnd(vault) {
|
|
164
|
+
const client = getPublicClient();
|
|
165
|
+
return client.readContract({
|
|
166
|
+
address: getGovernorAddress(),
|
|
167
|
+
abi: SYNDICATE_GOVERNOR_ABI,
|
|
168
|
+
functionName: "getCooldownEnd",
|
|
169
|
+
args: [vault]
|
|
170
|
+
});
|
|
171
|
+
}
|
|
172
|
+
async function getCapitalSnapshot(proposalId) {
|
|
173
|
+
const client = getPublicClient();
|
|
174
|
+
return client.readContract({
|
|
175
|
+
address: getGovernorAddress(),
|
|
176
|
+
abi: SYNDICATE_GOVERNOR_ABI,
|
|
177
|
+
functionName: "getCapitalSnapshot",
|
|
178
|
+
args: [proposalId]
|
|
179
|
+
});
|
|
180
|
+
}
|
|
181
|
+
async function isRegisteredVault(vault) {
|
|
182
|
+
const client = getPublicClient();
|
|
183
|
+
return client.readContract({
|
|
184
|
+
address: getGovernorAddress(),
|
|
185
|
+
abi: SYNDICATE_GOVERNOR_ABI,
|
|
186
|
+
functionName: "isRegisteredVault",
|
|
187
|
+
args: [vault]
|
|
188
|
+
});
|
|
189
|
+
}
|
|
190
|
+
function parseProposalIdFromLogs(logs) {
|
|
191
|
+
try {
|
|
192
|
+
const parsed = parseEventLogs({
|
|
193
|
+
abi: SYNDICATE_GOVERNOR_ABI,
|
|
194
|
+
logs,
|
|
195
|
+
eventName: "ProposalCreated"
|
|
196
|
+
});
|
|
197
|
+
return parsed[0]?.args.proposalId;
|
|
198
|
+
} catch {
|
|
199
|
+
return void 0;
|
|
200
|
+
}
|
|
201
|
+
}
|
|
202
|
+
async function propose(vault, metadataURI, performanceFeeBps, strategyDuration, executeCalls, settlementCalls, coProposers = []) {
|
|
203
|
+
const wallet = getWalletClient();
|
|
204
|
+
const client = getPublicClient();
|
|
205
|
+
const hash = await wallet.writeContract({
|
|
206
|
+
account: getAccount(),
|
|
207
|
+
chain: getChain(),
|
|
208
|
+
address: getGovernorAddress(),
|
|
209
|
+
abi: SYNDICATE_GOVERNOR_ABI,
|
|
210
|
+
functionName: "propose",
|
|
211
|
+
args: [vault, metadataURI, performanceFeeBps, strategyDuration, executeCalls, settlementCalls, coProposers]
|
|
212
|
+
});
|
|
213
|
+
const receipt = await client.waitForTransactionReceipt({ hash });
|
|
214
|
+
let proposalId = parseProposalIdFromLogs(receipt.logs);
|
|
215
|
+
if (proposalId === void 0) {
|
|
216
|
+
try {
|
|
217
|
+
proposalId = await proposalCount();
|
|
218
|
+
} catch {
|
|
219
|
+
proposalId = 0n;
|
|
220
|
+
}
|
|
221
|
+
}
|
|
222
|
+
return { hash: receipt.transactionHash, proposalId };
|
|
223
|
+
}
|
|
224
|
+
async function vote(proposalId, support) {
|
|
225
|
+
const wallet = getWalletClient();
|
|
226
|
+
const client = getPublicClient();
|
|
227
|
+
const hash = await wallet.writeContract({
|
|
228
|
+
account: getAccount(),
|
|
229
|
+
chain: getChain(),
|
|
230
|
+
address: getGovernorAddress(),
|
|
231
|
+
abi: SYNDICATE_GOVERNOR_ABI,
|
|
232
|
+
functionName: "vote",
|
|
233
|
+
args: [proposalId, support]
|
|
234
|
+
});
|
|
235
|
+
const receipt = await client.waitForTransactionReceipt({ hash });
|
|
236
|
+
return receipt.transactionHash;
|
|
237
|
+
}
|
|
238
|
+
async function executeProposal(proposalId) {
|
|
239
|
+
const wallet = getWalletClient();
|
|
240
|
+
const client = getPublicClient();
|
|
241
|
+
const hash = await wallet.writeContract({
|
|
242
|
+
account: getAccount(),
|
|
243
|
+
chain: getChain(),
|
|
244
|
+
address: getGovernorAddress(),
|
|
245
|
+
abi: SYNDICATE_GOVERNOR_ABI,
|
|
246
|
+
functionName: "executeProposal",
|
|
247
|
+
args: [proposalId]
|
|
248
|
+
});
|
|
249
|
+
const receipt = await client.waitForTransactionReceipt({ hash });
|
|
250
|
+
return receipt.transactionHash;
|
|
251
|
+
}
|
|
252
|
+
async function settleProposal(proposalId) {
|
|
253
|
+
const wallet = getWalletClient();
|
|
254
|
+
const client = getPublicClient();
|
|
255
|
+
const hash = await wallet.writeContract({
|
|
256
|
+
account: getAccount(),
|
|
257
|
+
chain: getChain(),
|
|
258
|
+
address: getGovernorAddress(),
|
|
259
|
+
abi: SYNDICATE_GOVERNOR_ABI,
|
|
260
|
+
functionName: "settleProposal",
|
|
261
|
+
args: [proposalId]
|
|
262
|
+
});
|
|
263
|
+
const receipt = await client.waitForTransactionReceipt({ hash });
|
|
264
|
+
return receipt.transactionHash;
|
|
265
|
+
}
|
|
266
|
+
async function emergencySettle(proposalId, calls) {
|
|
267
|
+
const wallet = getWalletClient();
|
|
268
|
+
const client = getPublicClient();
|
|
269
|
+
const hash = await wallet.writeContract({
|
|
270
|
+
account: getAccount(),
|
|
271
|
+
chain: getChain(),
|
|
272
|
+
address: getGovernorAddress(),
|
|
273
|
+
abi: SYNDICATE_GOVERNOR_ABI,
|
|
274
|
+
functionName: "emergencySettle",
|
|
275
|
+
args: [proposalId, calls]
|
|
276
|
+
});
|
|
277
|
+
const receipt = await client.waitForTransactionReceipt({ hash });
|
|
278
|
+
return receipt.transactionHash;
|
|
279
|
+
}
|
|
280
|
+
async function cancelProposal(proposalId) {
|
|
281
|
+
const wallet = getWalletClient();
|
|
282
|
+
const client = getPublicClient();
|
|
283
|
+
const hash = await wallet.writeContract({
|
|
284
|
+
account: getAccount(),
|
|
285
|
+
chain: getChain(),
|
|
286
|
+
address: getGovernorAddress(),
|
|
287
|
+
abi: SYNDICATE_GOVERNOR_ABI,
|
|
288
|
+
functionName: "cancelProposal",
|
|
289
|
+
args: [proposalId]
|
|
290
|
+
});
|
|
291
|
+
const receipt = await client.waitForTransactionReceipt({ hash });
|
|
292
|
+
return receipt.transactionHash;
|
|
293
|
+
}
|
|
294
|
+
async function emergencyCancel(proposalId) {
|
|
295
|
+
const wallet = getWalletClient();
|
|
296
|
+
const client = getPublicClient();
|
|
297
|
+
const hash = await wallet.writeContract({
|
|
298
|
+
account: getAccount(),
|
|
299
|
+
chain: getChain(),
|
|
300
|
+
address: getGovernorAddress(),
|
|
301
|
+
abi: SYNDICATE_GOVERNOR_ABI,
|
|
302
|
+
functionName: "emergencyCancel",
|
|
303
|
+
args: [proposalId]
|
|
304
|
+
});
|
|
305
|
+
const receipt = await client.waitForTransactionReceipt({ hash });
|
|
306
|
+
return receipt.transactionHash;
|
|
307
|
+
}
|
|
308
|
+
async function setVotingPeriod(seconds) {
|
|
309
|
+
const wallet = getWalletClient();
|
|
310
|
+
const client = getPublicClient();
|
|
311
|
+
const hash = await wallet.writeContract({
|
|
312
|
+
account: getAccount(),
|
|
313
|
+
chain: getChain(),
|
|
314
|
+
address: getGovernorAddress(),
|
|
315
|
+
abi: SYNDICATE_GOVERNOR_ABI,
|
|
316
|
+
functionName: "setVotingPeriod",
|
|
317
|
+
args: [seconds]
|
|
318
|
+
});
|
|
319
|
+
const receipt = await client.waitForTransactionReceipt({ hash });
|
|
320
|
+
return receipt.transactionHash;
|
|
321
|
+
}
|
|
322
|
+
async function setExecutionWindow(seconds) {
|
|
323
|
+
const wallet = getWalletClient();
|
|
324
|
+
const client = getPublicClient();
|
|
325
|
+
const hash = await wallet.writeContract({
|
|
326
|
+
account: getAccount(),
|
|
327
|
+
chain: getChain(),
|
|
328
|
+
address: getGovernorAddress(),
|
|
329
|
+
abi: SYNDICATE_GOVERNOR_ABI,
|
|
330
|
+
functionName: "setExecutionWindow",
|
|
331
|
+
args: [seconds]
|
|
332
|
+
});
|
|
333
|
+
const receipt = await client.waitForTransactionReceipt({ hash });
|
|
334
|
+
return receipt.transactionHash;
|
|
335
|
+
}
|
|
336
|
+
async function setVetoThresholdBps(bps) {
|
|
337
|
+
const wallet = getWalletClient();
|
|
338
|
+
const client = getPublicClient();
|
|
339
|
+
const hash = await wallet.writeContract({
|
|
340
|
+
account: getAccount(),
|
|
341
|
+
chain: getChain(),
|
|
342
|
+
address: getGovernorAddress(),
|
|
343
|
+
abi: SYNDICATE_GOVERNOR_ABI,
|
|
344
|
+
functionName: "setVetoThresholdBps",
|
|
345
|
+
args: [bps]
|
|
346
|
+
});
|
|
347
|
+
const receipt = await client.waitForTransactionReceipt({ hash });
|
|
348
|
+
return receipt.transactionHash;
|
|
349
|
+
}
|
|
350
|
+
async function setMaxPerformanceFeeBps(bps) {
|
|
351
|
+
const wallet = getWalletClient();
|
|
352
|
+
const client = getPublicClient();
|
|
353
|
+
const hash = await wallet.writeContract({
|
|
354
|
+
account: getAccount(),
|
|
355
|
+
chain: getChain(),
|
|
356
|
+
address: getGovernorAddress(),
|
|
357
|
+
abi: SYNDICATE_GOVERNOR_ABI,
|
|
358
|
+
functionName: "setMaxPerformanceFeeBps",
|
|
359
|
+
args: [bps]
|
|
360
|
+
});
|
|
361
|
+
const receipt = await client.waitForTransactionReceipt({ hash });
|
|
362
|
+
return receipt.transactionHash;
|
|
363
|
+
}
|
|
364
|
+
async function setMaxStrategyDuration(seconds) {
|
|
365
|
+
const wallet = getWalletClient();
|
|
366
|
+
const client = getPublicClient();
|
|
367
|
+
const hash = await wallet.writeContract({
|
|
368
|
+
account: getAccount(),
|
|
369
|
+
chain: getChain(),
|
|
370
|
+
address: getGovernorAddress(),
|
|
371
|
+
abi: SYNDICATE_GOVERNOR_ABI,
|
|
372
|
+
functionName: "setMaxStrategyDuration",
|
|
373
|
+
args: [seconds]
|
|
374
|
+
});
|
|
375
|
+
const receipt = await client.waitForTransactionReceipt({ hash });
|
|
376
|
+
return receipt.transactionHash;
|
|
377
|
+
}
|
|
378
|
+
async function setCooldownPeriod(seconds) {
|
|
379
|
+
const wallet = getWalletClient();
|
|
380
|
+
const client = getPublicClient();
|
|
381
|
+
const hash = await wallet.writeContract({
|
|
382
|
+
account: getAccount(),
|
|
383
|
+
chain: getChain(),
|
|
384
|
+
address: getGovernorAddress(),
|
|
385
|
+
abi: SYNDICATE_GOVERNOR_ABI,
|
|
386
|
+
functionName: "setCooldownPeriod",
|
|
387
|
+
args: [seconds]
|
|
388
|
+
});
|
|
389
|
+
const receipt = await client.waitForTransactionReceipt({ hash });
|
|
390
|
+
return receipt.transactionHash;
|
|
391
|
+
}
|
|
392
|
+
async function vetoProposal(proposalId) {
|
|
393
|
+
const wallet = getWalletClient();
|
|
394
|
+
const client = getPublicClient();
|
|
395
|
+
const hash = await wallet.writeContract({
|
|
396
|
+
account: getAccount(),
|
|
397
|
+
chain: getChain(),
|
|
398
|
+
address: getGovernorAddress(),
|
|
399
|
+
abi: SYNDICATE_GOVERNOR_ABI,
|
|
400
|
+
functionName: "vetoProposal",
|
|
401
|
+
args: [proposalId]
|
|
402
|
+
});
|
|
403
|
+
const receipt = await client.waitForTransactionReceipt({ hash });
|
|
404
|
+
return receipt.transactionHash;
|
|
405
|
+
}
|
|
406
|
+
async function setProtocolFeeBps(bps) {
|
|
407
|
+
const wallet = getWalletClient();
|
|
408
|
+
const client = getPublicClient();
|
|
409
|
+
const hash = await wallet.writeContract({
|
|
410
|
+
account: getAccount(),
|
|
411
|
+
chain: getChain(),
|
|
412
|
+
address: getGovernorAddress(),
|
|
413
|
+
abi: SYNDICATE_GOVERNOR_ABI,
|
|
414
|
+
functionName: "setProtocolFeeBps",
|
|
415
|
+
args: [bps]
|
|
416
|
+
});
|
|
417
|
+
const receipt = await client.waitForTransactionReceipt({ hash });
|
|
418
|
+
return receipt.transactionHash;
|
|
419
|
+
}
|
|
420
|
+
|
|
421
|
+
export {
|
|
422
|
+
PROPOSAL_STATES,
|
|
423
|
+
PROPOSAL_STATE,
|
|
424
|
+
VOTE_TYPE,
|
|
425
|
+
parseDuration,
|
|
426
|
+
getGovernorAddress,
|
|
427
|
+
getGovernorParams,
|
|
428
|
+
getProposal,
|
|
429
|
+
getProposalState,
|
|
430
|
+
proposalCount,
|
|
431
|
+
getVoteWeight,
|
|
432
|
+
hasVoted,
|
|
433
|
+
getProposalCalls,
|
|
434
|
+
getExecuteCalls,
|
|
435
|
+
getSettlementCalls,
|
|
436
|
+
getRegisteredVaults,
|
|
437
|
+
getActiveProposal,
|
|
438
|
+
getCooldownEnd,
|
|
439
|
+
getCapitalSnapshot,
|
|
440
|
+
isRegisteredVault,
|
|
441
|
+
parseProposalIdFromLogs,
|
|
442
|
+
propose,
|
|
443
|
+
vote,
|
|
444
|
+
executeProposal,
|
|
445
|
+
settleProposal,
|
|
446
|
+
emergencySettle,
|
|
447
|
+
cancelProposal,
|
|
448
|
+
emergencyCancel,
|
|
449
|
+
setVotingPeriod,
|
|
450
|
+
setExecutionWindow,
|
|
451
|
+
setVetoThresholdBps,
|
|
452
|
+
setMaxPerformanceFeeBps,
|
|
453
|
+
setMaxStrategyDuration,
|
|
454
|
+
setCooldownPeriod,
|
|
455
|
+
vetoProposal,
|
|
456
|
+
setProtocolFeeBps
|
|
457
|
+
};
|
|
458
|
+
//# sourceMappingURL=chunk-4GTOZMVG.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/lib/governor.ts"],"sourcesContent":["/**\n * Governor contract wrapper — reads/writes to SyndicateGovernor.\n *\n * Provides typed helpers for the proposal lifecycle, voting,\n * settlement, and parameter management.\n */\n\nimport type { Address, Hex, Log } from \"viem\";\nimport { parseEventLogs } from \"viem\";\nimport { getPublicClient, getWalletClient, getAccount } from \"./client.js\";\nimport { getChain } from \"./network.js\";\nimport { SHERWOOD } from \"./addresses.js\";\nimport { SYNDICATE_GOVERNOR_ABI } from \"./abis.js\";\n\n// ── Types ──\n\nexport interface GovernorParams {\n votingPeriod: bigint;\n executionWindow: bigint;\n vetoThresholdBps: bigint;\n maxPerformanceFeeBps: bigint;\n cooldownPeriod: bigint;\n collaborationWindow: bigint;\n maxCoProposers: bigint;\n minStrategyDuration: bigint;\n maxStrategyDuration: bigint;\n}\n\nexport interface StrategyProposal {\n id: bigint;\n proposer: Address;\n vault: Address;\n metadataURI: string;\n performanceFeeBps: bigint;\n strategyDuration: bigint;\n votesFor: bigint;\n votesAgainst: bigint;\n votesAbstain: bigint;\n snapshotTimestamp: bigint;\n voteEnd: bigint;\n executeBy: bigint;\n executedAt: bigint;\n state: number;\n}\n\nexport interface CoProposer {\n agent: Address;\n splitBps: bigint;\n}\n\nexport interface BatchCall {\n target: Address;\n data: Hex;\n value: bigint;\n}\n\nexport const PROPOSAL_STATES = [\n \"Draft\",\n \"Pending\",\n \"Approved\",\n \"Rejected\",\n \"Expired\",\n \"Executed\",\n \"Settled\",\n \"Cancelled\",\n] as const;\n\nexport const PROPOSAL_STATE = {\n Draft: 0,\n Pending: 1,\n Approved: 2,\n Rejected: 3,\n Expired: 4,\n Executed: 5,\n Settled: 6,\n Cancelled: 7,\n} as const;\n\nexport const VOTE_TYPE = {\n For: 0,\n Against: 1,\n Abstain: 2,\n} as const;\n\n// ── Duration parser ──\n\nexport function parseDuration(input: string): bigint {\n const match = input.match(/^(\\d+)(d|h|m|s)?$/);\n if (!match) throw new Error(`Invalid duration: ${input}`);\n const value = BigInt(match[1]);\n switch (match[2]) {\n case \"d\":\n return value * 86400n;\n case \"h\":\n return value * 3600n;\n case \"m\":\n return value * 60n;\n case \"s\":\n case undefined:\n return value;\n default:\n throw new Error(`Unknown duration unit: ${match[2]}`);\n }\n}\n\n// ── Address helper ──\n\nexport function getGovernorAddress(): Address {\n return SHERWOOD().GOVERNOR;\n}\n\n// ── Read helpers ──\n\nexport async function getGovernorParams(): Promise<GovernorParams> {\n const client = getPublicClient();\n const result = await client.readContract({\n address: getGovernorAddress(),\n abi: SYNDICATE_GOVERNOR_ABI,\n functionName: \"getGovernorParams\",\n }) as {\n votingPeriod: bigint;\n executionWindow: bigint;\n vetoThresholdBps: bigint;\n maxPerformanceFeeBps: bigint;\n cooldownPeriod: bigint;\n collaborationWindow: bigint;\n maxCoProposers: bigint;\n minStrategyDuration: bigint;\n maxStrategyDuration: bigint;\n };\n return result;\n}\n\nexport async function getProposal(id: bigint): Promise<StrategyProposal> {\n const client = getPublicClient();\n const result = await client.readContract({\n address: getGovernorAddress(),\n abi: SYNDICATE_GOVERNOR_ABI,\n functionName: \"getProposal\",\n args: [id],\n }) as {\n id: bigint;\n proposer: Address;\n vault: Address;\n metadataURI: string;\n performanceFeeBps: bigint;\n strategyDuration: bigint;\n votesFor: bigint;\n votesAgainst: bigint;\n votesAbstain: bigint;\n snapshotTimestamp: bigint;\n voteEnd: bigint;\n executeBy: bigint;\n executedAt: bigint;\n state: number;\n };\n return result;\n}\n\nexport async function getProposalState(id: bigint): Promise<number> {\n const client = getPublicClient();\n return client.readContract({\n address: getGovernorAddress(),\n abi: SYNDICATE_GOVERNOR_ABI,\n functionName: \"getProposalState\",\n args: [id],\n }) as Promise<number>;\n}\n\nexport async function proposalCount(): Promise<bigint> {\n const client = getPublicClient();\n return client.readContract({\n address: getGovernorAddress(),\n abi: SYNDICATE_GOVERNOR_ABI,\n functionName: \"proposalCount\",\n }) as Promise<bigint>;\n}\n\nexport async function getVoteWeight(proposalId: bigint, voter: Address): Promise<bigint> {\n const client = getPublicClient();\n return client.readContract({\n address: getGovernorAddress(),\n abi: SYNDICATE_GOVERNOR_ABI,\n functionName: \"getVoteWeight\",\n args: [proposalId, voter],\n }) as Promise<bigint>;\n}\n\nexport async function hasVoted(proposalId: bigint, voter: Address): Promise<boolean> {\n const client = getPublicClient();\n return client.readContract({\n address: getGovernorAddress(),\n abi: SYNDICATE_GOVERNOR_ABI,\n functionName: \"hasVoted\",\n args: [proposalId, voter],\n }) as Promise<boolean>;\n}\n\nexport async function getProposalCalls(proposalId: bigint): Promise<BatchCall[]> {\n const client = getPublicClient();\n const result = await client.readContract({\n address: getGovernorAddress(),\n abi: SYNDICATE_GOVERNOR_ABI,\n functionName: \"getProposalCalls\",\n args: [proposalId],\n }) as { target: Address; data: Hex; value: bigint }[];\n return result.map((c) => ({ target: c.target, data: c.data, value: c.value }));\n}\n\nexport async function getExecuteCalls(proposalId: bigint): Promise<BatchCall[]> {\n const client = getPublicClient();\n const result = await client.readContract({\n address: getGovernorAddress(),\n abi: SYNDICATE_GOVERNOR_ABI,\n functionName: \"getExecuteCalls\",\n args: [proposalId],\n }) as { target: Address; data: Hex; value: bigint }[];\n return result.map((c) => ({ target: c.target, data: c.data, value: c.value }));\n}\n\nexport async function getSettlementCalls(proposalId: bigint): Promise<BatchCall[]> {\n const client = getPublicClient();\n const result = await client.readContract({\n address: getGovernorAddress(),\n abi: SYNDICATE_GOVERNOR_ABI,\n functionName: \"getSettlementCalls\",\n args: [proposalId],\n }) as { target: Address; data: Hex; value: bigint }[];\n return result.map((c) => ({ target: c.target, data: c.data, value: c.value }));\n}\n\nexport async function getRegisteredVaults(): Promise<Address[]> {\n const client = getPublicClient();\n return client.readContract({\n address: getGovernorAddress(),\n abi: SYNDICATE_GOVERNOR_ABI,\n functionName: \"getRegisteredVaults\",\n }) as Promise<Address[]>;\n}\n\nexport async function getActiveProposal(vault: Address): Promise<bigint> {\n const client = getPublicClient();\n return client.readContract({\n address: getGovernorAddress(),\n abi: SYNDICATE_GOVERNOR_ABI,\n functionName: \"getActiveProposal\",\n args: [vault],\n }) as Promise<bigint>;\n}\n\nexport async function getCooldownEnd(vault: Address): Promise<bigint> {\n const client = getPublicClient();\n return client.readContract({\n address: getGovernorAddress(),\n abi: SYNDICATE_GOVERNOR_ABI,\n functionName: \"getCooldownEnd\",\n args: [vault],\n }) as Promise<bigint>;\n}\n\nexport async function getCapitalSnapshot(proposalId: bigint): Promise<bigint> {\n const client = getPublicClient();\n return client.readContract({\n address: getGovernorAddress(),\n abi: SYNDICATE_GOVERNOR_ABI,\n functionName: \"getCapitalSnapshot\",\n args: [proposalId],\n }) as Promise<bigint>;\n}\n\nexport async function isRegisteredVault(vault: Address): Promise<boolean> {\n const client = getPublicClient();\n return client.readContract({\n address: getGovernorAddress(),\n abi: SYNDICATE_GOVERNOR_ABI,\n functionName: \"isRegisteredVault\",\n args: [vault],\n }) as Promise<boolean>;\n}\n\n/**\n * Extract proposalId from ProposalCreated event logs.\n * Returns undefined if the event is not found or parsing fails.\n */\nexport function parseProposalIdFromLogs(logs: Log[]): bigint | undefined {\n try {\n const parsed = parseEventLogs({\n abi: SYNDICATE_GOVERNOR_ABI,\n logs,\n eventName: \"ProposalCreated\",\n });\n return parsed[0]?.args.proposalId;\n } catch {\n return undefined;\n }\n}\n\n// ── Write helpers ──\n\nexport async function propose(\n vault: Address,\n metadataURI: string,\n performanceFeeBps: bigint,\n strategyDuration: bigint,\n executeCalls: BatchCall[],\n settlementCalls: BatchCall[],\n coProposers: CoProposer[] = [],\n): Promise<{ hash: Hex; proposalId: bigint }> {\n const wallet = getWalletClient();\n const client = getPublicClient();\n\n const hash = await wallet.writeContract({\n account: getAccount(),\n chain: getChain(),\n address: getGovernorAddress(),\n abi: SYNDICATE_GOVERNOR_ABI,\n functionName: \"propose\",\n args: [vault, metadataURI, performanceFeeBps, strategyDuration, executeCalls, settlementCalls, coProposers],\n });\n\n const receipt = await client.waitForTransactionReceipt({ hash });\n\n // Parse proposalId from the ProposalCreated event in the receipt logs.\n // Falls back to proposalCount() if event parsing fails.\n let proposalId = parseProposalIdFromLogs(receipt.logs);\n if (proposalId === undefined) {\n try {\n proposalId = await proposalCount();\n } catch {\n proposalId = 0n;\n }\n }\n\n return { hash: receipt.transactionHash, proposalId };\n}\n\nexport async function vote(proposalId: bigint, support: number): Promise<Hex> {\n const wallet = getWalletClient();\n const client = getPublicClient();\n\n const hash = await wallet.writeContract({\n account: getAccount(),\n chain: getChain(),\n address: getGovernorAddress(),\n abi: SYNDICATE_GOVERNOR_ABI,\n functionName: \"vote\",\n args: [proposalId, support],\n });\n\n const receipt = await client.waitForTransactionReceipt({ hash });\n return receipt.transactionHash;\n}\n\nexport async function executeProposal(proposalId: bigint): Promise<Hex> {\n const wallet = getWalletClient();\n const client = getPublicClient();\n\n const hash = await wallet.writeContract({\n account: getAccount(),\n chain: getChain(),\n address: getGovernorAddress(),\n abi: SYNDICATE_GOVERNOR_ABI,\n functionName: \"executeProposal\",\n args: [proposalId],\n });\n\n const receipt = await client.waitForTransactionReceipt({ hash });\n return receipt.transactionHash;\n}\n\nexport async function settleProposal(proposalId: bigint): Promise<Hex> {\n const wallet = getWalletClient();\n const client = getPublicClient();\n\n const hash = await wallet.writeContract({\n account: getAccount(),\n chain: getChain(),\n address: getGovernorAddress(),\n abi: SYNDICATE_GOVERNOR_ABI,\n functionName: \"settleProposal\",\n args: [proposalId],\n });\n\n const receipt = await client.waitForTransactionReceipt({ hash });\n return receipt.transactionHash;\n}\n\nexport async function emergencySettle(proposalId: bigint, calls: BatchCall[]): Promise<Hex> {\n const wallet = getWalletClient();\n const client = getPublicClient();\n\n const hash = await wallet.writeContract({\n account: getAccount(),\n chain: getChain(),\n address: getGovernorAddress(),\n abi: SYNDICATE_GOVERNOR_ABI,\n functionName: \"emergencySettle\",\n args: [proposalId, calls],\n });\n\n const receipt = await client.waitForTransactionReceipt({ hash });\n return receipt.transactionHash;\n}\n\nexport async function cancelProposal(proposalId: bigint): Promise<Hex> {\n const wallet = getWalletClient();\n const client = getPublicClient();\n\n const hash = await wallet.writeContract({\n account: getAccount(),\n chain: getChain(),\n address: getGovernorAddress(),\n abi: SYNDICATE_GOVERNOR_ABI,\n functionName: \"cancelProposal\",\n args: [proposalId],\n });\n\n const receipt = await client.waitForTransactionReceipt({ hash });\n return receipt.transactionHash;\n}\n\nexport async function emergencyCancel(proposalId: bigint): Promise<Hex> {\n const wallet = getWalletClient();\n const client = getPublicClient();\n\n const hash = await wallet.writeContract({\n account: getAccount(),\n chain: getChain(),\n address: getGovernorAddress(),\n abi: SYNDICATE_GOVERNOR_ABI,\n functionName: \"emergencyCancel\",\n args: [proposalId],\n });\n\n const receipt = await client.waitForTransactionReceipt({ hash });\n return receipt.transactionHash;\n}\n\n// ── Parameter setters (owner-only) ──\n\nexport async function setVotingPeriod(seconds: bigint): Promise<Hex> {\n const wallet = getWalletClient();\n const client = getPublicClient();\n const hash = await wallet.writeContract({\n account: getAccount(),\n chain: getChain(),\n address: getGovernorAddress(),\n abi: SYNDICATE_GOVERNOR_ABI,\n functionName: \"setVotingPeriod\",\n args: [seconds],\n });\n const receipt = await client.waitForTransactionReceipt({ hash });\n return receipt.transactionHash;\n}\n\nexport async function setExecutionWindow(seconds: bigint): Promise<Hex> {\n const wallet = getWalletClient();\n const client = getPublicClient();\n const hash = await wallet.writeContract({\n account: getAccount(),\n chain: getChain(),\n address: getGovernorAddress(),\n abi: SYNDICATE_GOVERNOR_ABI,\n functionName: \"setExecutionWindow\",\n args: [seconds],\n });\n const receipt = await client.waitForTransactionReceipt({ hash });\n return receipt.transactionHash;\n}\n\nexport async function setVetoThresholdBps(bps: bigint): Promise<Hex> {\n const wallet = getWalletClient();\n const client = getPublicClient();\n const hash = await wallet.writeContract({\n account: getAccount(),\n chain: getChain(),\n address: getGovernorAddress(),\n abi: SYNDICATE_GOVERNOR_ABI,\n functionName: \"setVetoThresholdBps\",\n args: [bps],\n });\n const receipt = await client.waitForTransactionReceipt({ hash });\n return receipt.transactionHash;\n}\n\nexport async function setMaxPerformanceFeeBps(bps: bigint): Promise<Hex> {\n const wallet = getWalletClient();\n const client = getPublicClient();\n const hash = await wallet.writeContract({\n account: getAccount(),\n chain: getChain(),\n address: getGovernorAddress(),\n abi: SYNDICATE_GOVERNOR_ABI,\n functionName: \"setMaxPerformanceFeeBps\",\n args: [bps],\n });\n const receipt = await client.waitForTransactionReceipt({ hash });\n return receipt.transactionHash;\n}\n\nexport async function setMaxStrategyDuration(seconds: bigint): Promise<Hex> {\n const wallet = getWalletClient();\n const client = getPublicClient();\n const hash = await wallet.writeContract({\n account: getAccount(),\n chain: getChain(),\n address: getGovernorAddress(),\n abi: SYNDICATE_GOVERNOR_ABI,\n functionName: \"setMaxStrategyDuration\",\n args: [seconds],\n });\n const receipt = await client.waitForTransactionReceipt({ hash });\n return receipt.transactionHash;\n}\n\nexport async function setCooldownPeriod(seconds: bigint): Promise<Hex> {\n const wallet = getWalletClient();\n const client = getPublicClient();\n const hash = await wallet.writeContract({\n account: getAccount(),\n chain: getChain(),\n address: getGovernorAddress(),\n abi: SYNDICATE_GOVERNOR_ABI,\n functionName: \"setCooldownPeriod\",\n args: [seconds],\n });\n const receipt = await client.waitForTransactionReceipt({ hash });\n return receipt.transactionHash;\n}\n\nexport async function vetoProposal(proposalId: bigint): Promise<Hex> {\n const wallet = getWalletClient();\n const client = getPublicClient();\n const hash = await wallet.writeContract({\n account: getAccount(),\n chain: getChain(),\n address: getGovernorAddress(),\n abi: SYNDICATE_GOVERNOR_ABI,\n functionName: \"vetoProposal\",\n args: [proposalId],\n });\n const receipt = await client.waitForTransactionReceipt({ hash });\n return receipt.transactionHash;\n}\n\nexport async function setProtocolFeeBps(bps: bigint): Promise<Hex> {\n const wallet = getWalletClient();\n const client = getPublicClient();\n const hash = await wallet.writeContract({\n account: getAccount(),\n chain: getChain(),\n address: getGovernorAddress(),\n abi: SYNDICATE_GOVERNOR_ABI,\n functionName: \"setProtocolFeeBps\",\n args: [bps],\n });\n const receipt = await client.waitForTransactionReceipt({ hash });\n return receipt.transactionHash;\n}\n"],"mappings":"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","names":[]}
|