@claw-network/protocol 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (169) hide show
  1. package/dist/contracts/events.d.ts +238 -0
  2. package/dist/contracts/events.d.ts.map +1 -0
  3. package/dist/contracts/events.js +499 -0
  4. package/dist/contracts/events.js.map +1 -0
  5. package/dist/contracts/index.d.ts +5 -0
  6. package/dist/contracts/index.d.ts.map +1 -0
  7. package/dist/contracts/index.js +5 -0
  8. package/dist/contracts/index.js.map +1 -0
  9. package/dist/contracts/state.d.ts +16 -0
  10. package/dist/contracts/state.d.ts.map +1 -0
  11. package/dist/contracts/state.js +399 -0
  12. package/dist/contracts/state.js.map +1 -0
  13. package/dist/contracts/store.d.ts +19 -0
  14. package/dist/contracts/store.d.ts.map +1 -0
  15. package/dist/contracts/store.js +22 -0
  16. package/dist/contracts/store.js.map +1 -0
  17. package/dist/contracts/types.d.ts +81 -0
  18. package/dist/contracts/types.d.ts.map +1 -0
  19. package/dist/contracts/types.js +2 -0
  20. package/dist/contracts/types.js.map +1 -0
  21. package/dist/dao/events.d.ts +191 -0
  22. package/dist/dao/events.d.ts.map +1 -0
  23. package/dist/dao/events.js +294 -0
  24. package/dist/dao/events.js.map +1 -0
  25. package/dist/dao/index.d.ts +6 -0
  26. package/dist/dao/index.d.ts.map +1 -0
  27. package/dist/dao/index.js +6 -0
  28. package/dist/dao/index.js.map +1 -0
  29. package/dist/dao/state.d.ts +44 -0
  30. package/dist/dao/state.d.ts.map +1 -0
  31. package/dist/dao/state.js +373 -0
  32. package/dist/dao/state.js.map +1 -0
  33. package/dist/dao/store.d.ts +47 -0
  34. package/dist/dao/store.d.ts.map +1 -0
  35. package/dist/dao/store.js +52 -0
  36. package/dist/dao/store.js.map +1 -0
  37. package/dist/dao/types.d.ts +149 -0
  38. package/dist/dao/types.d.ts.map +1 -0
  39. package/dist/dao/types.js +95 -0
  40. package/dist/dao/types.js.map +1 -0
  41. package/dist/dao/voting.d.ts +56 -0
  42. package/dist/dao/voting.d.ts.map +1 -0
  43. package/dist/dao/voting.js +129 -0
  44. package/dist/dao/voting.js.map +1 -0
  45. package/dist/identity/document.d.ts +35 -0
  46. package/dist/identity/document.d.ts.map +1 -0
  47. package/dist/identity/document.js +84 -0
  48. package/dist/identity/document.js.map +1 -0
  49. package/dist/identity/events.d.ts +96 -0
  50. package/dist/identity/events.d.ts.map +1 -0
  51. package/dist/identity/events.js +165 -0
  52. package/dist/identity/events.js.map +1 -0
  53. package/dist/identity/index.d.ts +4 -0
  54. package/dist/identity/index.d.ts.map +1 -0
  55. package/dist/identity/index.js +4 -0
  56. package/dist/identity/index.js.map +1 -0
  57. package/dist/identity/resolver.d.ts +10 -0
  58. package/dist/identity/resolver.d.ts.map +1 -0
  59. package/dist/identity/resolver.js +10 -0
  60. package/dist/identity/resolver.js.map +1 -0
  61. package/dist/index.d.ts +8 -0
  62. package/dist/index.d.ts.map +1 -0
  63. package/dist/index.js +8 -0
  64. package/dist/index.js.map +1 -0
  65. package/dist/markets/broadcast.d.ts +5 -0
  66. package/dist/markets/broadcast.d.ts.map +1 -0
  67. package/dist/markets/broadcast.js +9 -0
  68. package/dist/markets/broadcast.js.map +1 -0
  69. package/dist/markets/capability.d.ts +129 -0
  70. package/dist/markets/capability.d.ts.map +1 -0
  71. package/dist/markets/capability.js +262 -0
  72. package/dist/markets/capability.js.map +1 -0
  73. package/dist/markets/events.d.ts +448 -0
  74. package/dist/markets/events.d.ts.map +1 -0
  75. package/dist/markets/events.js +1074 -0
  76. package/dist/markets/events.js.map +1 -0
  77. package/dist/markets/index.d.ts +12 -0
  78. package/dist/markets/index.d.ts.map +1 -0
  79. package/dist/markets/index.js +12 -0
  80. package/dist/markets/index.js.map +1 -0
  81. package/dist/markets/info-flow.d.ts +144 -0
  82. package/dist/markets/info-flow.d.ts.map +1 -0
  83. package/dist/markets/info-flow.js +257 -0
  84. package/dist/markets/info-flow.js.map +1 -0
  85. package/dist/markets/info-store.d.ts +80 -0
  86. package/dist/markets/info-store.d.ts.map +1 -0
  87. package/dist/markets/info-store.js +384 -0
  88. package/dist/markets/info-store.js.map +1 -0
  89. package/dist/markets/info.d.ts +118 -0
  90. package/dist/markets/info.d.ts.map +1 -0
  91. package/dist/markets/info.js +123 -0
  92. package/dist/markets/info.js.map +1 -0
  93. package/dist/markets/search.d.ts +70 -0
  94. package/dist/markets/search.d.ts.map +1 -0
  95. package/dist/markets/search.js +659 -0
  96. package/dist/markets/search.js.map +1 -0
  97. package/dist/markets/state.d.ts +30 -0
  98. package/dist/markets/state.d.ts.map +1 -0
  99. package/dist/markets/state.js +610 -0
  100. package/dist/markets/state.js.map +1 -0
  101. package/dist/markets/store.d.ts +43 -0
  102. package/dist/markets/store.d.ts.map +1 -0
  103. package/dist/markets/store.js +460 -0
  104. package/dist/markets/store.js.map +1 -0
  105. package/dist/markets/task.d.ts +96 -0
  106. package/dist/markets/task.d.ts.map +1 -0
  107. package/dist/markets/task.js +286 -0
  108. package/dist/markets/task.js.map +1 -0
  109. package/dist/markets/types.d.ts +340 -0
  110. package/dist/markets/types.d.ts.map +1 -0
  111. package/dist/markets/types.js +88 -0
  112. package/dist/markets/types.js.map +1 -0
  113. package/dist/p2p/codec.d.ts +42 -0
  114. package/dist/p2p/codec.d.ts.map +1 -0
  115. package/dist/p2p/codec.js +187 -0
  116. package/dist/p2p/codec.js.map +1 -0
  117. package/dist/p2p/flatbuffers.d.ts +57 -0
  118. package/dist/p2p/flatbuffers.d.ts.map +1 -0
  119. package/dist/p2p/flatbuffers.js +418 -0
  120. package/dist/p2p/flatbuffers.js.map +1 -0
  121. package/dist/p2p/index.d.ts +3 -0
  122. package/dist/p2p/index.d.ts.map +1 -0
  123. package/dist/p2p/index.js +3 -0
  124. package/dist/p2p/index.js.map +1 -0
  125. package/dist/p2p/types.d.ts +79 -0
  126. package/dist/p2p/types.d.ts.map +1 -0
  127. package/dist/p2p/types.js +15 -0
  128. package/dist/p2p/types.js.map +1 -0
  129. package/dist/reputation/anti-cheat.d.ts +24 -0
  130. package/dist/reputation/anti-cheat.d.ts.map +1 -0
  131. package/dist/reputation/anti-cheat.js +109 -0
  132. package/dist/reputation/anti-cheat.js.map +1 -0
  133. package/dist/reputation/events.d.ts +29 -0
  134. package/dist/reputation/events.d.ts.map +1 -0
  135. package/dist/reputation/events.js +122 -0
  136. package/dist/reputation/events.js.map +1 -0
  137. package/dist/reputation/index.d.ts +6 -0
  138. package/dist/reputation/index.d.ts.map +1 -0
  139. package/dist/reputation/index.js +6 -0
  140. package/dist/reputation/index.js.map +1 -0
  141. package/dist/reputation/scoring.d.ts +40 -0
  142. package/dist/reputation/scoring.d.ts.map +1 -0
  143. package/dist/reputation/scoring.js +114 -0
  144. package/dist/reputation/scoring.js.map +1 -0
  145. package/dist/reputation/state.d.ts +48 -0
  146. package/dist/reputation/state.d.ts.map +1 -0
  147. package/dist/reputation/state.js +135 -0
  148. package/dist/reputation/state.js.map +1 -0
  149. package/dist/reputation/store.d.ts +23 -0
  150. package/dist/reputation/store.d.ts.map +1 -0
  151. package/dist/reputation/store.js +33 -0
  152. package/dist/reputation/store.js.map +1 -0
  153. package/dist/wallet/events.d.ts +121 -0
  154. package/dist/wallet/events.d.ts.map +1 -0
  155. package/dist/wallet/events.js +175 -0
  156. package/dist/wallet/events.js.map +1 -0
  157. package/dist/wallet/finality.d.ts +4 -0
  158. package/dist/wallet/finality.d.ts.map +1 -0
  159. package/dist/wallet/finality.js +32 -0
  160. package/dist/wallet/finality.js.map +1 -0
  161. package/dist/wallet/index.d.ts +4 -0
  162. package/dist/wallet/index.d.ts.map +1 -0
  163. package/dist/wallet/index.js +4 -0
  164. package/dist/wallet/index.js.map +1 -0
  165. package/dist/wallet/state.d.ts +32 -0
  166. package/dist/wallet/state.d.ts.map +1 -0
  167. package/dist/wallet/state.js +170 -0
  168. package/dist/wallet/state.js.map +1 -0
  169. package/package.json +42 -0
@@ -0,0 +1,373 @@
1
+ /**
2
+ * DAO Governance — State & Reducer
3
+ *
4
+ * Pure, deterministic state transitions for DAO events.
5
+ */
6
+ import { eventHashHex } from '@claw-network/core/protocol';
7
+ import { isProposalStatus, PROPOSAL_THRESHOLDS } from './types.js';
8
+ export function createDaoState() {
9
+ return {
10
+ proposals: {},
11
+ proposalEvents: {},
12
+ votes: {},
13
+ voterIndex: {},
14
+ delegations: [],
15
+ delegationsByDelegator: {},
16
+ delegationsByDelegate: {},
17
+ timelock: {},
18
+ treasury: {
19
+ balance: '0',
20
+ allocationPolicy: {
21
+ development: 0.4,
22
+ nodeRewards: 0.3,
23
+ ecosystem: 0.2,
24
+ reserve: 0.1,
25
+ },
26
+ spendingLimits: {
27
+ perProposal: '1000000',
28
+ perQuarter: '5000000',
29
+ requireMultisig: '10000000',
30
+ },
31
+ totalSpent: '0',
32
+ spentThisQuarter: '0',
33
+ quarterStart: 0,
34
+ },
35
+ history: [],
36
+ };
37
+ }
38
+ // ---------------------------------------------------------------------------
39
+ // Clone helpers
40
+ // ---------------------------------------------------------------------------
41
+ function cloneState(state) {
42
+ return {
43
+ proposals: { ...state.proposals },
44
+ proposalEvents: { ...state.proposalEvents },
45
+ votes: { ...state.votes },
46
+ voterIndex: { ...state.voterIndex },
47
+ delegations: [...state.delegations],
48
+ delegationsByDelegator: { ...state.delegationsByDelegator },
49
+ delegationsByDelegate: { ...state.delegationsByDelegate },
50
+ timelock: { ...state.timelock },
51
+ treasury: { ...state.treasury },
52
+ history: [...state.history],
53
+ };
54
+ }
55
+ function parseAmount(value, field) {
56
+ try {
57
+ const parsed = BigInt(value);
58
+ if (parsed < 0n) {
59
+ throw new Error(`${field} must be >= 0`);
60
+ }
61
+ return parsed;
62
+ }
63
+ catch {
64
+ throw new Error(`${field} must be a valid integer string`);
65
+ }
66
+ }
67
+ function addAmount(current, delta, field) {
68
+ const base = parseAmount(current, field);
69
+ const next = base + delta;
70
+ if (next < 0n) {
71
+ throw new Error(`${field} would be negative`);
72
+ }
73
+ return next.toString();
74
+ }
75
+ // ---------------------------------------------------------------------------
76
+ // Reducer
77
+ // ---------------------------------------------------------------------------
78
+ export function applyDaoEvent(state, envelope) {
79
+ const type = String(envelope.type ?? '');
80
+ if (!type.startsWith('dao.')) {
81
+ return state;
82
+ }
83
+ const next = cloneState(state);
84
+ const payload = (envelope.payload ?? {});
85
+ const ts = typeof envelope.ts === 'number' ? envelope.ts : Date.now();
86
+ const issuer = typeof envelope.issuer === 'string' ? envelope.issuer : '';
87
+ const hash = typeof envelope.hash === 'string' && envelope.hash.length
88
+ ? envelope.hash
89
+ : eventHashHex(envelope);
90
+ switch (type) {
91
+ case 'dao.proposal.create':
92
+ applyProposalCreate(next, payload, issuer, ts, hash);
93
+ break;
94
+ case 'dao.proposal.advance':
95
+ applyProposalAdvance(next, payload, hash);
96
+ break;
97
+ case 'dao.vote.cast':
98
+ applyVoteCast(next, payload, issuer, ts, hash);
99
+ break;
100
+ case 'dao.delegate.set':
101
+ applyDelegateSet(next, payload, issuer, ts);
102
+ break;
103
+ case 'dao.delegate.revoke':
104
+ applyDelegateRevoke(next, payload, issuer, ts);
105
+ break;
106
+ case 'dao.timelock.queue':
107
+ applyTimelockQueue(next, payload, ts);
108
+ break;
109
+ case 'dao.timelock.execute':
110
+ applyTimelockExecute(next, payload);
111
+ break;
112
+ case 'dao.timelock.cancel':
113
+ applyTimelockCancel(next, payload);
114
+ break;
115
+ case 'dao.treasury.deposit':
116
+ applyTreasuryDeposit(next, payload);
117
+ break;
118
+ case 'dao.treasury.spend':
119
+ applyTreasurySpend(next, payload);
120
+ break;
121
+ default:
122
+ return next;
123
+ }
124
+ next.history.push({ hash, type, ts, payload });
125
+ return next;
126
+ }
127
+ // ---------------------------------------------------------------------------
128
+ // Apply functions
129
+ // ---------------------------------------------------------------------------
130
+ function applyProposalCreate(state, payload, issuer, ts, hash) {
131
+ if (state.proposals[payload.proposalId]) {
132
+ throw new Error('proposal already exists');
133
+ }
134
+ const thresholds = PROPOSAL_THRESHOLDS[payload.type];
135
+ const discussionPeriod = payload.discussionPeriod || thresholds.discussionPeriod;
136
+ const votingPeriod = payload.votingPeriod || thresholds.votingPeriod;
137
+ const timelockDelay = payload.timelockDelay || thresholds.timelockDelay;
138
+ const discussionEndsAt = ts + discussionPeriod;
139
+ const votingStartsAt = discussionEndsAt;
140
+ const votingEndsAt = votingStartsAt + votingPeriod;
141
+ const expiresAt = votingEndsAt + timelockDelay + 30 * 24 * 60 * 60 * 1000; // 30 day grace
142
+ const proposal = {
143
+ id: payload.proposalId,
144
+ proposer: issuer,
145
+ type: payload.type,
146
+ title: payload.title,
147
+ description: payload.description,
148
+ discussionUrl: payload.discussionUrl,
149
+ actions: payload.actions,
150
+ timeline: {
151
+ createdAt: ts,
152
+ discussionEndsAt,
153
+ votingStartsAt,
154
+ votingEndsAt,
155
+ executionDelay: timelockDelay,
156
+ expiresAt,
157
+ },
158
+ votes: { for: '0', against: '0', abstain: '0' },
159
+ status: discussionPeriod > 0 ? 'discussion' : 'voting',
160
+ };
161
+ state.proposals[payload.proposalId] = proposal;
162
+ state.proposalEvents[payload.proposalId] = hash;
163
+ state.votes[payload.proposalId] = [];
164
+ state.voterIndex[payload.proposalId] = new Set();
165
+ }
166
+ function applyProposalAdvance(state, payload, hash) {
167
+ const proposal = state.proposals[payload.proposalId];
168
+ if (!proposal) {
169
+ throw new Error('proposal not found');
170
+ }
171
+ const newStatus = payload.newStatus;
172
+ if (!isProposalStatus(newStatus)) {
173
+ throw new Error('invalid proposal status');
174
+ }
175
+ // Validate status transitions
176
+ const validTransitions = {
177
+ draft: ['discussion', 'voting'],
178
+ discussion: ['voting'],
179
+ voting: ['passed', 'rejected'],
180
+ passed: ['queued', 'executed'],
181
+ queued: ['executed', 'vetoed'],
182
+ rejected: [],
183
+ executed: [],
184
+ expired: [],
185
+ vetoed: [],
186
+ };
187
+ const allowed = validTransitions[proposal.status] ?? [];
188
+ if (!allowed.includes(newStatus)) {
189
+ throw new Error(`cannot transition from ${proposal.status} to ${newStatus}`);
190
+ }
191
+ state.proposals[payload.proposalId] = { ...proposal, status: newStatus };
192
+ state.proposalEvents[payload.proposalId] = hash;
193
+ }
194
+ function applyVoteCast(state, payload, issuer, ts, hash) {
195
+ const proposal = state.proposals[payload.proposalId];
196
+ if (!proposal) {
197
+ throw new Error('proposal not found');
198
+ }
199
+ if (proposal.status !== 'voting') {
200
+ throw new Error('proposal is not in voting phase');
201
+ }
202
+ // Check duplicate vote
203
+ const voterSet = state.voterIndex[payload.proposalId];
204
+ if (voterSet && voterSet.has(issuer)) {
205
+ throw new Error('already voted');
206
+ }
207
+ const vote = {
208
+ voter: issuer,
209
+ proposalId: payload.proposalId,
210
+ option: payload.option,
211
+ power: payload.power,
212
+ reason: payload.reason,
213
+ ts,
214
+ hash,
215
+ };
216
+ // Record vote
217
+ const currentVotes = state.votes[payload.proposalId] ?? [];
218
+ state.votes[payload.proposalId] = [...currentVotes, vote];
219
+ const voterIndex = state.voterIndex[payload.proposalId] ?? new Set();
220
+ const newVoterIndex = new Set(voterIndex);
221
+ newVoterIndex.add(issuer);
222
+ state.voterIndex[payload.proposalId] = newVoterIndex;
223
+ // Update tally
224
+ const power = parseAmount(payload.power, 'power');
225
+ const updatedVotes = { ...proposal.votes };
226
+ updatedVotes[payload.option] = addAmount(updatedVotes[payload.option], power, payload.option);
227
+ state.proposals[payload.proposalId] = { ...proposal, votes: updatedVotes };
228
+ }
229
+ function applyDelegateSet(state, payload, issuer, ts) {
230
+ // Remove any existing delegation from this delegator to this delegate
231
+ state.delegations = state.delegations.filter((d) => !(d.delegator === issuer && d.delegate === payload.delegate && !d.revokedAt));
232
+ const delegation = {
233
+ delegator: issuer,
234
+ delegate: payload.delegate,
235
+ scope: payload.scope,
236
+ percentage: payload.percentage,
237
+ expiresAt: payload.expiresAt,
238
+ revokedAt: undefined,
239
+ createdAt: ts,
240
+ };
241
+ state.delegations.push(delegation);
242
+ // Update indices
243
+ const byDelegator = (state.delegationsByDelegator[issuer] ?? []).filter((d) => !(d.delegate === payload.delegate && !d.revokedAt));
244
+ byDelegator.push(delegation);
245
+ state.delegationsByDelegator[issuer] = byDelegator;
246
+ const byDelegate = (state.delegationsByDelegate[payload.delegate] ?? []).filter((d) => !(d.delegator === issuer && !d.revokedAt));
247
+ byDelegate.push(delegation);
248
+ state.delegationsByDelegate[payload.delegate] = byDelegate;
249
+ }
250
+ function applyDelegateRevoke(state, payload, issuer, ts) {
251
+ for (const d of state.delegations) {
252
+ if (d.delegator === issuer && d.delegate === payload.delegate && !d.revokedAt) {
253
+ d.revokedAt = ts;
254
+ }
255
+ }
256
+ // Update indices to mark revoked
257
+ const byDelegator = state.delegationsByDelegator[issuer] ?? [];
258
+ for (const d of byDelegator) {
259
+ if (d.delegate === payload.delegate && !d.revokedAt) {
260
+ d.revokedAt = ts;
261
+ }
262
+ }
263
+ const byDelegate = state.delegationsByDelegate[payload.delegate] ?? [];
264
+ for (const d of byDelegate) {
265
+ if (d.delegator === issuer && !d.revokedAt) {
266
+ d.revokedAt = ts;
267
+ }
268
+ }
269
+ }
270
+ function applyTimelockQueue(state, payload, ts) {
271
+ if (state.timelock[payload.actionId]) {
272
+ throw new Error('action already queued');
273
+ }
274
+ state.timelock[payload.actionId] = {
275
+ actionId: payload.actionId,
276
+ proposalId: payload.proposalId,
277
+ action: payload.action,
278
+ queuedAt: ts,
279
+ executeAfter: payload.executeAfter,
280
+ status: 'queued',
281
+ };
282
+ }
283
+ function applyTimelockExecute(state, payload) {
284
+ const entry = state.timelock[payload.actionId];
285
+ if (!entry) {
286
+ throw new Error('action not found');
287
+ }
288
+ if (entry.status !== 'queued') {
289
+ throw new Error('action is not queued');
290
+ }
291
+ state.timelock[payload.actionId] = { ...entry, status: 'executed' };
292
+ }
293
+ function applyTimelockCancel(state, payload) {
294
+ const entry = state.timelock[payload.actionId];
295
+ if (!entry) {
296
+ throw new Error('action not found');
297
+ }
298
+ if (entry.status !== 'queued') {
299
+ throw new Error('action is not queued');
300
+ }
301
+ state.timelock[payload.actionId] = { ...entry, status: 'cancelled' };
302
+ }
303
+ function applyTreasuryDeposit(state, payload) {
304
+ const amount = parseAmount(payload.amount, 'amount');
305
+ state.treasury = {
306
+ ...state.treasury,
307
+ balance: addAmount(state.treasury.balance, amount, 'balance'),
308
+ };
309
+ }
310
+ function applyTreasurySpend(state, payload) {
311
+ const amount = parseAmount(payload.amount, 'amount');
312
+ state.treasury = {
313
+ ...state.treasury,
314
+ balance: addAmount(state.treasury.balance, -amount, 'balance'),
315
+ totalSpent: addAmount(state.treasury.totalSpent, amount, 'totalSpent'),
316
+ spentThisQuarter: addAmount(state.treasury.spentThisQuarter, amount, 'spentThisQuarter'),
317
+ };
318
+ }
319
+ // ---------------------------------------------------------------------------
320
+ // Query helpers
321
+ // ---------------------------------------------------------------------------
322
+ export function getProposal(state, proposalId) {
323
+ return state.proposals[proposalId];
324
+ }
325
+ export function listProposals(state, status) {
326
+ const all = Object.values(state.proposals);
327
+ if (!status)
328
+ return all;
329
+ return all.filter((p) => p.status === status);
330
+ }
331
+ export function getProposalVotes(state, proposalId) {
332
+ return state.votes[proposalId] ?? [];
333
+ }
334
+ export function getDelegationsFrom(state, delegator) {
335
+ return (state.delegationsByDelegator[delegator] ?? []).filter((d) => !d.revokedAt);
336
+ }
337
+ export function getDelegationsTo(state, delegate) {
338
+ return (state.delegationsByDelegate[delegate] ?? []).filter((d) => !d.revokedAt);
339
+ }
340
+ export function getTimelockEntry(state, actionId) {
341
+ return state.timelock[actionId];
342
+ }
343
+ export function listTimelockEntries(state) {
344
+ return Object.values(state.timelock);
345
+ }
346
+ export function getTreasury(state) {
347
+ return state.treasury;
348
+ }
349
+ /**
350
+ * Check if a proposal has passed (based on votes vs thresholds).
351
+ */
352
+ export function checkProposalResult(state, proposalId, totalSupply) {
353
+ const proposal = state.proposals[proposalId];
354
+ if (!proposal) {
355
+ return { passed: false, forPct: 0, quorumMet: false };
356
+ }
357
+ const thresholds = PROPOSAL_THRESHOLDS[proposal.type];
358
+ const forVotes = BigInt(proposal.votes.for);
359
+ const againstVotes = BigInt(proposal.votes.against);
360
+ const abstainVotes = BigInt(proposal.votes.abstain);
361
+ const totalVoted = forVotes + againstVotes + abstainVotes;
362
+ const supply = BigInt(totalSupply);
363
+ const quorumMet = supply > 0n
364
+ ? Number(totalVoted * 10000n / supply) / 10000 >= thresholds.quorum
365
+ : false;
366
+ const forPlusAgainst = forVotes + againstVotes;
367
+ const forPct = forPlusAgainst > 0n
368
+ ? Number(forVotes * 10000n / forPlusAgainst) / 10000
369
+ : 0;
370
+ const passed = quorumMet && forPct >= thresholds.passThreshold;
371
+ return { passed, forPct, quorumMet };
372
+ }
373
+ //# sourceMappingURL=state.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"state.js","sourceRoot":"","sources":["../../src/dao/state.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAiB,YAAY,EAAE,MAAM,6BAA6B,CAAC;AAY1E,OAAO,EAAE,gBAAgB,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAC;AAsCnE,MAAM,UAAU,cAAc;IAC5B,OAAO;QACL,SAAS,EAAE,EAAE;QACb,cAAc,EAAE,EAAE;QAClB,KAAK,EAAE,EAAE;QACT,UAAU,EAAE,EAAE;QACd,WAAW,EAAE,EAAE;QACf,sBAAsB,EAAE,EAAE;QAC1B,qBAAqB,EAAE,EAAE;QACzB,QAAQ,EAAE,EAAE;QACZ,QAAQ,EAAE;YACR,OAAO,EAAE,GAAG;YACZ,gBAAgB,EAAE;gBAChB,WAAW,EAAE,GAAG;gBAChB,WAAW,EAAE,GAAG;gBAChB,SAAS,EAAE,GAAG;gBACd,OAAO,EAAE,GAAG;aACb;YACD,cAAc,EAAE;gBACd,WAAW,EAAE,SAAS;gBACtB,UAAU,EAAE,SAAS;gBACrB,eAAe,EAAE,UAAU;aAC5B;YACD,UAAU,EAAE,GAAG;YACf,gBAAgB,EAAE,GAAG;YACrB,YAAY,EAAE,CAAC;SAChB;QACD,OAAO,EAAE,EAAE;KACZ,CAAC;AACJ,CAAC;AAED,8EAA8E;AAC9E,gBAAgB;AAChB,8EAA8E;AAE9E,SAAS,UAAU,CAAC,KAAe;IACjC,OAAO;QACL,SAAS,EAAE,EAAE,GAAG,KAAK,CAAC,SAAS,EAAE;QACjC,cAAc,EAAE,EAAE,GAAG,KAAK,CAAC,cAAc,EAAE;QAC3C,KAAK,EAAE,EAAE,GAAG,KAAK,CAAC,KAAK,EAAE;QACzB,UAAU,EAAE,EAAE,GAAG,KAAK,CAAC,UAAU,EAAE;QACnC,WAAW,EAAE,CAAC,GAAG,KAAK,CAAC,WAAW,CAAC;QACnC,sBAAsB,EAAE,EAAE,GAAG,KAAK,CAAC,sBAAsB,EAAE;QAC3D,qBAAqB,EAAE,EAAE,GAAG,KAAK,CAAC,qBAAqB,EAAE;QACzD,QAAQ,EAAE,EAAE,GAAG,KAAK,CAAC,QAAQ,EAAE;QAC/B,QAAQ,EAAE,EAAE,GAAG,KAAK,CAAC,QAAQ,EAAE;QAC/B,OAAO,EAAE,CAAC,GAAG,KAAK,CAAC,OAAO,CAAC;KAC5B,CAAC;AACJ,CAAC;AAED,SAAS,WAAW,CAAC,KAAa,EAAE,KAAa;IAC/C,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC;QAC7B,IAAI,MAAM,GAAG,EAAE,EAAE,CAAC;YAChB,MAAM,IAAI,KAAK,CAAC,GAAG,KAAK,eAAe,CAAC,CAAC;QAC3C,CAAC;QACD,OAAO,MAAM,CAAC;IAChB,CAAC;IAAC,MAAM,CAAC;QACP,MAAM,IAAI,KAAK,CAAC,GAAG,KAAK,iCAAiC,CAAC,CAAC;IAC7D,CAAC;AACH,CAAC;AAED,SAAS,SAAS,CAAC,OAAe,EAAE,KAAa,EAAE,KAAa;IAC9D,MAAM,IAAI,GAAG,WAAW,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;IACzC,MAAM,IAAI,GAAG,IAAI,GAAG,KAAK,CAAC;IAC1B,IAAI,IAAI,GAAG,EAAE,EAAE,CAAC;QACd,MAAM,IAAI,KAAK,CAAC,GAAG,KAAK,oBAAoB,CAAC,CAAC;IAChD,CAAC;IACD,OAAO,IAAI,CAAC,QAAQ,EAAE,CAAC;AACzB,CAAC;AAED,8EAA8E;AAC9E,UAAU;AACV,8EAA8E;AAE9E,MAAM,UAAU,aAAa,CAC3B,KAAe,EACf,QAAuB;IAEvB,MAAM,IAAI,GAAG,MAAM,CAAC,QAAQ,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC;IACzC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,EAAE,CAAC;QAC7B,OAAO,KAAK,CAAC;IACf,CAAC;IAED,MAAM,IAAI,GAAG,UAAU,CAAC,KAAK,CAAC,CAAC;IAC/B,MAAM,OAAO,GAAG,CAAC,QAAQ,CAAC,OAAO,IAAI,EAAE,CAA4B,CAAC;IACpE,MAAM,EAAE,GAAG,OAAO,QAAQ,CAAC,EAAE,KAAK,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC;IACtE,MAAM,MAAM,GAAG,OAAO,QAAQ,CAAC,MAAM,KAAK,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC;IAC1E,MAAM,IAAI,GACR,OAAO,QAAQ,CAAC,IAAI,KAAK,QAAQ,IAAI,QAAQ,CAAC,IAAI,CAAC,MAAM;QACvD,CAAC,CAAC,QAAQ,CAAC,IAAI;QACf,CAAC,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAC;IAE7B,QAAQ,IAAI,EAAE,CAAC;QACb,KAAK,qBAAqB;YACxB,mBAAmB,CAAC,IAAI,EAAE,OAA8C,EAAE,MAAM,EAAE,EAAE,EAAE,IAAI,CAAC,CAAC;YAC5F,MAAM;QACR,KAAK,sBAAsB;YACzB,oBAAoB,CAAC,IAAI,EAAE,OAA+C,EAAE,IAAI,CAAC,CAAC;YAClF,MAAM;QACR,KAAK,eAAe;YAClB,aAAa,CAAC,IAAI,EAAE,OAAwC,EAAE,MAAM,EAAE,EAAE,EAAE,IAAI,CAAC,CAAC;YAChF,MAAM;QACR,KAAK,kBAAkB;YACrB,gBAAgB,CAAC,IAAI,EAAE,OAA2C,EAAE,MAAM,EAAE,EAAE,CAAC,CAAC;YAChF,MAAM;QACR,KAAK,qBAAqB;YACxB,mBAAmB,CAAC,IAAI,EAAE,OAA8C,EAAE,MAAM,EAAE,EAAE,CAAC,CAAC;YACtF,MAAM;QACR,KAAK,oBAAoB;YACvB,kBAAkB,CAAC,IAAI,EAAE,OAA6C,EAAE,EAAE,CAAC,CAAC;YAC5E,MAAM;QACR,KAAK,sBAAsB;YACzB,oBAAoB,CAAC,IAAI,EAAE,OAA+C,CAAC,CAAC;YAC5E,MAAM;QACR,KAAK,qBAAqB;YACxB,mBAAmB,CAAC,IAAI,EAAE,OAA8C,CAAC,CAAC;YAC1E,MAAM;QACR,KAAK,sBAAsB;YACzB,oBAAoB,CAAC,IAAI,EAAE,OAA+C,CAAC,CAAC;YAC5E,MAAM;QACR,KAAK,oBAAoB;YACvB,kBAAkB,CAAC,IAAI,EAAE,OAA6C,CAAC,CAAC;YACxE,MAAM;QACR;YACE,OAAO,IAAI,CAAC;IAChB,CAAC;IAED,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,EAAE,EAAE,OAAO,EAAE,CAAC,CAAC;IAC/C,OAAO,IAAI,CAAC;AACd,CAAC;AAED,8EAA8E;AAC9E,kBAAkB;AAClB,8EAA8E;AAE9E,SAAS,mBAAmB,CAC1B,KAAe,EACf,OAAiC,EACjC,MAAc,EACd,EAAU,EACV,IAAY;IAEZ,IAAI,KAAK,CAAC,SAAS,CAAC,OAAO,CAAC,UAAU,CAAC,EAAE,CAAC;QACxC,MAAM,IAAI,KAAK,CAAC,yBAAyB,CAAC,CAAC;IAC7C,CAAC;IAED,MAAM,UAAU,GAAG,mBAAmB,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;IACrD,MAAM,gBAAgB,GAAG,OAAO,CAAC,gBAAgB,IAAI,UAAU,CAAC,gBAAgB,CAAC;IACjF,MAAM,YAAY,GAAG,OAAO,CAAC,YAAY,IAAI,UAAU,CAAC,YAAY,CAAC;IACrE,MAAM,aAAa,GAAG,OAAO,CAAC,aAAa,IAAI,UAAU,CAAC,aAAa,CAAC;IAExE,MAAM,gBAAgB,GAAG,EAAE,GAAG,gBAAgB,CAAC;IAC/C,MAAM,cAAc,GAAG,gBAAgB,CAAC;IACxC,MAAM,YAAY,GAAG,cAAc,GAAG,YAAY,CAAC;IACnD,MAAM,SAAS,GAAG,YAAY,GAAG,aAAa,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC,CAAC,eAAe;IAE1F,MAAM,QAAQ,GAAa;QACzB,EAAE,EAAE,OAAO,CAAC,UAAU;QACtB,QAAQ,EAAE,MAAM;QAChB,IAAI,EAAE,OAAO,CAAC,IAAI;QAClB,KAAK,EAAE,OAAO,CAAC,KAAK;QACpB,WAAW,EAAE,OAAO,CAAC,WAAW;QAChC,aAAa,EAAE,OAAO,CAAC,aAAa;QACpC,OAAO,EAAE,OAAO,CAAC,OAAO;QACxB,QAAQ,EAAE;YACR,SAAS,EAAE,EAAE;YACb,gBAAgB;YAChB,cAAc;YACd,YAAY;YACZ,cAAc,EAAE,aAAa;YAC7B,SAAS;SACV;QACD,KAAK,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE;QAC/C,MAAM,EAAE,gBAAgB,GAAG,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,QAAQ;KACvD,CAAC;IAEF,KAAK,CAAC,SAAS,CAAC,OAAO,CAAC,UAAU,CAAC,GAAG,QAAQ,CAAC;IAC/C,KAAK,CAAC,cAAc,CAAC,OAAO,CAAC,UAAU,CAAC,GAAG,IAAI,CAAC;IAChD,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC,UAAU,CAAC,GAAG,EAAE,CAAC;IACrC,KAAK,CAAC,UAAU,CAAC,OAAO,CAAC,UAAU,CAAC,GAAG,IAAI,GAAG,EAAE,CAAC;AACnD,CAAC;AAED,SAAS,oBAAoB,CAC3B,KAAe,EACf,OAAkC,EAClC,IAAY;IAEZ,MAAM,QAAQ,GAAG,KAAK,CAAC,SAAS,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;IACrD,IAAI,CAAC,QAAQ,EAAE,CAAC;QACd,MAAM,IAAI,KAAK,CAAC,oBAAoB,CAAC,CAAC;IACxC,CAAC;IAED,MAAM,SAAS,GAAG,OAAO,CAAC,SAAS,CAAC;IACpC,IAAI,CAAC,gBAAgB,CAAC,SAAS,CAAC,EAAE,CAAC;QACjC,MAAM,IAAI,KAAK,CAAC,yBAAyB,CAAC,CAAC;IAC7C,CAAC;IAED,8BAA8B;IAC9B,MAAM,gBAAgB,GAAqC;QACzD,KAAK,EAAE,CAAC,YAAY,EAAE,QAAQ,CAAC;QAC/B,UAAU,EAAE,CAAC,QAAQ,CAAC;QACtB,MAAM,EAAE,CAAC,QAAQ,EAAE,UAAU,CAAC;QAC9B,MAAM,EAAE,CAAC,QAAQ,EAAE,UAAU,CAAC;QAC9B,MAAM,EAAE,CAAC,UAAU,EAAE,QAAQ,CAAC;QAC9B,QAAQ,EAAE,EAAE;QACZ,QAAQ,EAAE,EAAE;QACZ,OAAO,EAAE,EAAE;QACX,MAAM,EAAE,EAAE;KACX,CAAC;IAEF,MAAM,OAAO,GAAG,gBAAgB,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC;IACxD,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAC,EAAE,CAAC;QACjC,MAAM,IAAI,KAAK,CACb,0BAA0B,QAAQ,CAAC,MAAM,OAAO,SAAS,EAAE,CAC5D,CAAC;IACJ,CAAC;IAED,KAAK,CAAC,SAAS,CAAC,OAAO,CAAC,UAAU,CAAC,GAAG,EAAE,GAAG,QAAQ,EAAE,MAAM,EAAE,SAAS,EAAE,CAAC;IACzE,KAAK,CAAC,cAAc,CAAC,OAAO,CAAC,UAAU,CAAC,GAAG,IAAI,CAAC;AAClD,CAAC;AAED,SAAS,aAAa,CACpB,KAAe,EACf,OAA2B,EAC3B,MAAc,EACd,EAAU,EACV,IAAY;IAEZ,MAAM,QAAQ,GAAG,KAAK,CAAC,SAAS,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;IACrD,IAAI,CAAC,QAAQ,EAAE,CAAC;QACd,MAAM,IAAI,KAAK,CAAC,oBAAoB,CAAC,CAAC;IACxC,CAAC;IACD,IAAI,QAAQ,CAAC,MAAM,KAAK,QAAQ,EAAE,CAAC;QACjC,MAAM,IAAI,KAAK,CAAC,iCAAiC,CAAC,CAAC;IACrD,CAAC;IAED,uBAAuB;IACvB,MAAM,QAAQ,GAAG,KAAK,CAAC,UAAU,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;IACtD,IAAI,QAAQ,IAAI,QAAQ,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC;QACrC,MAAM,IAAI,KAAK,CAAC,eAAe,CAAC,CAAC;IACnC,CAAC;IAED,MAAM,IAAI,GAAS;QACjB,KAAK,EAAE,MAAM;QACb,UAAU,EAAE,OAAO,CAAC,UAAU;QAC9B,MAAM,EAAE,OAAO,CAAC,MAAM;QACtB,KAAK,EAAE,OAAO,CAAC,KAAK;QACpB,MAAM,EAAE,OAAO,CAAC,MAAM;QACtB,EAAE;QACF,IAAI;KACL,CAAC;IAEF,cAAc;IACd,MAAM,YAAY,GAAG,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC,UAAU,CAAC,IAAI,EAAE,CAAC;IAC3D,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC,UAAU,CAAC,GAAG,CAAC,GAAG,YAAY,EAAE,IAAI,CAAC,CAAC;IAE1D,MAAM,UAAU,GAAG,KAAK,CAAC,UAAU,CAAC,OAAO,CAAC,UAAU,CAAC,IAAI,IAAI,GAAG,EAAE,CAAC;IACrE,MAAM,aAAa,GAAG,IAAI,GAAG,CAAC,UAAU,CAAC,CAAC;IAC1C,aAAa,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;IAC1B,KAAK,CAAC,UAAU,CAAC,OAAO,CAAC,UAAU,CAAC,GAAG,aAAa,CAAC;IAErD,eAAe;IACf,MAAM,KAAK,GAAG,WAAW,CAAC,OAAO,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;IAClD,MAAM,YAAY,GAAkB,EAAE,GAAG,QAAQ,CAAC,KAAK,EAAE,CAAC;IAC1D,YAAY,CAAC,OAAO,CAAC,MAAM,CAAC,GAAG,SAAS,CACtC,YAAY,CAAC,OAAO,CAAC,MAAM,CAAC,EAC5B,KAAK,EACL,OAAO,CAAC,MAAM,CACf,CAAC;IAEF,KAAK,CAAC,SAAS,CAAC,OAAO,CAAC,UAAU,CAAC,GAAG,EAAE,GAAG,QAAQ,EAAE,KAAK,EAAE,YAAY,EAAE,CAAC;AAC7E,CAAC;AAED,SAAS,gBAAgB,CACvB,KAAe,EACf,OAA8B,EAC9B,MAAc,EACd,EAAU;IAEV,sEAAsE;IACtE,KAAK,CAAC,WAAW,GAAG,KAAK,CAAC,WAAW,CAAC,MAAM,CAC1C,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,KAAK,MAAM,IAAI,CAAC,CAAC,QAAQ,KAAK,OAAO,CAAC,QAAQ,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC,CACpF,CAAC;IAEF,MAAM,UAAU,GAAe;QAC7B,SAAS,EAAE,MAAM;QACjB,QAAQ,EAAE,OAAO,CAAC,QAAQ;QAC1B,KAAK,EAAE,OAAO,CAAC,KAAK;QACpB,UAAU,EAAE,OAAO,CAAC,UAAU;QAC9B,SAAS,EAAE,OAAO,CAAC,SAAS;QAC5B,SAAS,EAAE,SAAS;QACpB,SAAS,EAAE,EAAE;KACd,CAAC;IAEF,KAAK,CAAC,WAAW,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;IAEnC,iBAAiB;IACjB,MAAM,WAAW,GAAG,CAAC,KAAK,CAAC,sBAAsB,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC,MAAM,CACrE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,KAAK,OAAO,CAAC,QAAQ,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC,CAC1D,CAAC;IACF,WAAW,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;IAC7B,KAAK,CAAC,sBAAsB,CAAC,MAAM,CAAC,GAAG,WAAW,CAAC;IAEnD,MAAM,UAAU,GAAG,CAAC,KAAK,CAAC,qBAAqB,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC,CAAC,MAAM,CAC7E,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,KAAK,MAAM,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC,CACjD,CAAC;IACF,UAAU,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;IAC5B,KAAK,CAAC,qBAAqB,CAAC,OAAO,CAAC,QAAQ,CAAC,GAAG,UAAU,CAAC;AAC7D,CAAC;AAED,SAAS,mBAAmB,CAC1B,KAAe,EACf,OAAiC,EACjC,MAAc,EACd,EAAU;IAEV,KAAK,MAAM,CAAC,IAAI,KAAK,CAAC,WAAW,EAAE,CAAC;QAClC,IAAI,CAAC,CAAC,SAAS,KAAK,MAAM,IAAI,CAAC,CAAC,QAAQ,KAAK,OAAO,CAAC,QAAQ,IAAI,CAAC,CAAC,CAAC,SAAS,EAAE,CAAC;YAC9E,CAAC,CAAC,SAAS,GAAG,EAAE,CAAC;QACnB,CAAC;IACH,CAAC;IACD,iCAAiC;IACjC,MAAM,WAAW,GAAG,KAAK,CAAC,sBAAsB,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC;IAC/D,KAAK,MAAM,CAAC,IAAI,WAAW,EAAE,CAAC;QAC5B,IAAI,CAAC,CAAC,QAAQ,KAAK,OAAO,CAAC,QAAQ,IAAI,CAAC,CAAC,CAAC,SAAS,EAAE,CAAC;YACpD,CAAC,CAAC,SAAS,GAAG,EAAE,CAAC;QACnB,CAAC;IACH,CAAC;IACD,MAAM,UAAU,GAAG,KAAK,CAAC,qBAAqB,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC;IACvE,KAAK,MAAM,CAAC,IAAI,UAAU,EAAE,CAAC;QAC3B,IAAI,CAAC,CAAC,SAAS,KAAK,MAAM,IAAI,CAAC,CAAC,CAAC,SAAS,EAAE,CAAC;YAC3C,CAAC,CAAC,SAAS,GAAG,EAAE,CAAC;QACnB,CAAC;IACH,CAAC;AACH,CAAC;AAED,SAAS,kBAAkB,CACzB,KAAe,EACf,OAAgC,EAChC,EAAU;IAEV,IAAI,KAAK,CAAC,QAAQ,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAC;QACrC,MAAM,IAAI,KAAK,CAAC,uBAAuB,CAAC,CAAC;IAC3C,CAAC;IACD,KAAK,CAAC,QAAQ,CAAC,OAAO,CAAC,QAAQ,CAAC,GAAG;QACjC,QAAQ,EAAE,OAAO,CAAC,QAAQ;QAC1B,UAAU,EAAE,OAAO,CAAC,UAAU;QAC9B,MAAM,EAAE,OAAO,CAAC,MAAwB;QACxC,QAAQ,EAAE,EAAE;QACZ,YAAY,EAAE,OAAO,CAAC,YAAY;QAClC,MAAM,EAAE,QAAQ;KACjB,CAAC;AACJ,CAAC;AAED,SAAS,oBAAoB,CAC3B,KAAe,EACf,OAAkC;IAElC,MAAM,KAAK,GAAG,KAAK,CAAC,QAAQ,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;IAC/C,IAAI,CAAC,KAAK,EAAE,CAAC;QACX,MAAM,IAAI,KAAK,CAAC,kBAAkB,CAAC,CAAC;IACtC,CAAC;IACD,IAAI,KAAK,CAAC,MAAM,KAAK,QAAQ,EAAE,CAAC;QAC9B,MAAM,IAAI,KAAK,CAAC,sBAAsB,CAAC,CAAC;IAC1C,CAAC;IACD,KAAK,CAAC,QAAQ,CAAC,OAAO,CAAC,QAAQ,CAAC,GAAG,EAAE,GAAG,KAAK,EAAE,MAAM,EAAE,UAAU,EAAE,CAAC;AACtE,CAAC;AAED,SAAS,mBAAmB,CAC1B,KAAe,EACf,OAAiC;IAEjC,MAAM,KAAK,GAAG,KAAK,CAAC,QAAQ,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;IAC/C,IAAI,CAAC,KAAK,EAAE,CAAC;QACX,MAAM,IAAI,KAAK,CAAC,kBAAkB,CAAC,CAAC;IACtC,CAAC;IACD,IAAI,KAAK,CAAC,MAAM,KAAK,QAAQ,EAAE,CAAC;QAC9B,MAAM,IAAI,KAAK,CAAC,sBAAsB,CAAC,CAAC;IAC1C,CAAC;IACD,KAAK,CAAC,QAAQ,CAAC,OAAO,CAAC,QAAQ,CAAC,GAAG,EAAE,GAAG,KAAK,EAAE,MAAM,EAAE,WAAW,EAAE,CAAC;AACvE,CAAC;AAED,SAAS,oBAAoB,CAC3B,KAAe,EACf,OAAkC;IAElC,MAAM,MAAM,GAAG,WAAW,CAAC,OAAO,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;IACrD,KAAK,CAAC,QAAQ,GAAG;QACf,GAAG,KAAK,CAAC,QAAQ;QACjB,OAAO,EAAE,SAAS,CAAC,KAAK,CAAC,QAAQ,CAAC,OAAO,EAAE,MAAM,EAAE,SAAS,CAAC;KAC9D,CAAC;AACJ,CAAC;AAED,SAAS,kBAAkB,CACzB,KAAe,EACf,OAAgC;IAEhC,MAAM,MAAM,GAAG,WAAW,CAAC,OAAO,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;IACrD,KAAK,CAAC,QAAQ,GAAG;QACf,GAAG,KAAK,CAAC,QAAQ;QACjB,OAAO,EAAE,SAAS,CAAC,KAAK,CAAC,QAAQ,CAAC,OAAO,EAAE,CAAC,MAAM,EAAE,SAAS,CAAC;QAC9D,UAAU,EAAE,SAAS,CAAC,KAAK,CAAC,QAAQ,CAAC,UAAU,EAAE,MAAM,EAAE,YAAY,CAAC;QACtE,gBAAgB,EAAE,SAAS,CAAC,KAAK,CAAC,QAAQ,CAAC,gBAAgB,EAAE,MAAM,EAAE,kBAAkB,CAAC;KACzF,CAAC;AACJ,CAAC;AAED,8EAA8E;AAC9E,gBAAgB;AAChB,8EAA8E;AAE9E,MAAM,UAAU,WAAW,CAAC,KAAe,EAAE,UAAkB;IAC7D,OAAO,KAAK,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC;AACrC,CAAC;AAED,MAAM,UAAU,aAAa,CAAC,KAAe,EAAE,MAAuB;IACpE,MAAM,GAAG,GAAG,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;IAC3C,IAAI,CAAC,MAAM;QAAE,OAAO,GAAG,CAAC;IACxB,OAAO,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,MAAM,CAAC,CAAC;AAChD,CAAC;AAED,MAAM,UAAU,gBAAgB,CAAC,KAAe,EAAE,UAAkB;IAClE,OAAO,KAAK,CAAC,KAAK,CAAC,UAAU,CAAC,IAAI,EAAE,CAAC;AACvC,CAAC;AAED,MAAM,UAAU,kBAAkB,CAAC,KAAe,EAAE,SAAiB;IACnE,OAAO,CAAC,KAAK,CAAC,sBAAsB,CAAC,SAAS,CAAC,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;AACrF,CAAC;AAED,MAAM,UAAU,gBAAgB,CAAC,KAAe,EAAE,QAAgB;IAChE,OAAO,CAAC,KAAK,CAAC,qBAAqB,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;AACnF,CAAC;AAED,MAAM,UAAU,gBAAgB,CAAC,KAAe,EAAE,QAAgB;IAChE,OAAO,KAAK,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;AAClC,CAAC;AAED,MAAM,UAAU,mBAAmB,CAAC,KAAe;IACjD,OAAO,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;AACvC,CAAC;AAED,MAAM,UAAU,WAAW,CAAC,KAAe;IACzC,OAAO,KAAK,CAAC,QAAQ,CAAC;AACxB,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,mBAAmB,CACjC,KAAe,EACf,UAAkB,EAClB,WAAmB;IAEnB,MAAM,QAAQ,GAAG,KAAK,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC;IAC7C,IAAI,CAAC,QAAQ,EAAE,CAAC;QACd,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC;IACxD,CAAC;IACD,MAAM,UAAU,GAAG,mBAAmB,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;IACtD,MAAM,QAAQ,GAAG,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IAC5C,MAAM,YAAY,GAAG,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;IACpD,MAAM,YAAY,GAAG,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;IACpD,MAAM,UAAU,GAAG,QAAQ,GAAG,YAAY,GAAG,YAAY,CAAC;IAC1D,MAAM,MAAM,GAAG,MAAM,CAAC,WAAW,CAAC,CAAC;IAEnC,MAAM,SAAS,GAAG,MAAM,GAAG,EAAE;QAC3B,CAAC,CAAC,MAAM,CAAC,UAAU,GAAG,MAAM,GAAG,MAAM,CAAC,GAAG,KAAK,IAAI,UAAU,CAAC,MAAM;QACnE,CAAC,CAAC,KAAK,CAAC;IAEV,MAAM,cAAc,GAAG,QAAQ,GAAG,YAAY,CAAC;IAC/C,MAAM,MAAM,GAAG,cAAc,GAAG,EAAE;QAChC,CAAC,CAAC,MAAM,CAAC,QAAQ,GAAG,MAAM,GAAG,cAAc,CAAC,GAAG,KAAK;QACpD,CAAC,CAAC,CAAC,CAAC;IAEN,MAAM,MAAM,GAAG,SAAS,IAAI,MAAM,IAAI,UAAU,CAAC,aAAa,CAAC;IAC/D,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,CAAC;AACvC,CAAC"}
@@ -0,0 +1,47 @@
1
+ /**
2
+ * DAO Governance — Store
3
+ *
4
+ * Wraps the pure DAO state reducer behind an async interface
5
+ * for future persistence compatibility.
6
+ */
7
+ import { EventEnvelope } from '@claw-network/core/protocol';
8
+ import type { Proposal, ProposalStatus, Vote, Delegation, TimelockEntry, Treasury } from './types.js';
9
+ import { DaoState } from './state.js';
10
+ export interface DaoStore {
11
+ applyEvent(envelope: EventEnvelope): Promise<void>;
12
+ applyEvents(envelopes: EventEnvelope[]): Promise<void>;
13
+ getProposal(proposalId: string): Promise<Proposal | undefined>;
14
+ listProposals(status?: ProposalStatus): Promise<Proposal[]>;
15
+ getVotes(proposalId: string): Promise<Vote[]>;
16
+ getDelegationsFrom(delegator: string): Promise<Delegation[]>;
17
+ getDelegationsTo(delegate: string): Promise<Delegation[]>;
18
+ getTimelockEntry(actionId: string): Promise<TimelockEntry | undefined>;
19
+ listTimelockEntries(): Promise<TimelockEntry[]>;
20
+ getTreasury(): Promise<Treasury>;
21
+ checkProposalResult(proposalId: string, totalSupply: string): Promise<{
22
+ passed: boolean;
23
+ forPct: number;
24
+ quorumMet: boolean;
25
+ }>;
26
+ getState(): Promise<DaoState>;
27
+ }
28
+ export declare class MemoryDaoStore implements DaoStore {
29
+ private state;
30
+ applyEvent(envelope: EventEnvelope): Promise<void>;
31
+ applyEvents(envelopes: EventEnvelope[]): Promise<void>;
32
+ getProposal(proposalId: string): Promise<Proposal | undefined>;
33
+ listProposals(status?: ProposalStatus): Promise<Proposal[]>;
34
+ getVotes(proposalId: string): Promise<Vote[]>;
35
+ getDelegationsFrom(delegator: string): Promise<Delegation[]>;
36
+ getDelegationsTo(delegate: string): Promise<Delegation[]>;
37
+ getTimelockEntry(actionId: string): Promise<TimelockEntry | undefined>;
38
+ listTimelockEntries(): Promise<TimelockEntry[]>;
39
+ getTreasury(): Promise<Treasury>;
40
+ checkProposalResult(proposalId: string, totalSupply: string): Promise<{
41
+ passed: boolean;
42
+ forPct: number;
43
+ quorumMet: boolean;
44
+ }>;
45
+ getState(): Promise<DaoState>;
46
+ }
47
+ //# sourceMappingURL=store.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"store.d.ts","sourceRoot":"","sources":["../../src/dao/store.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,aAAa,EAAE,MAAM,6BAA6B,CAAC;AAC5D,OAAO,KAAK,EACV,QAAQ,EACR,cAAc,EACd,IAAI,EACJ,UAAU,EACV,aAAa,EACb,QAAQ,EACT,MAAM,YAAY,CAAC;AACpB,OAAO,EAIL,QAAQ,EAST,MAAM,YAAY,CAAC;AAMpB,MAAM,WAAW,QAAQ;IACvB,UAAU,CAAC,QAAQ,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACnD,WAAW,CAAC,SAAS,EAAE,aAAa,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACvD,WAAW,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,QAAQ,GAAG,SAAS,CAAC,CAAC;IAC/D,aAAa,CAAC,MAAM,CAAC,EAAE,cAAc,GAAG,OAAO,CAAC,QAAQ,EAAE,CAAC,CAAC;IAC5D,QAAQ,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC;IAC9C,kBAAkB,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,EAAE,CAAC,CAAC;IAC7D,gBAAgB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,EAAE,CAAC,CAAC;IAC1D,gBAAgB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,GAAG,SAAS,CAAC,CAAC;IACvE,mBAAmB,IAAI,OAAO,CAAC,aAAa,EAAE,CAAC,CAAC;IAChD,WAAW,IAAI,OAAO,CAAC,QAAQ,CAAC,CAAC;IACjC,mBAAmB,CACjB,UAAU,EAAE,MAAM,EAClB,WAAW,EAAE,MAAM,GAClB,OAAO,CAAC;QAAE,MAAM,EAAE,OAAO,CAAC;QAAC,MAAM,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,OAAO,CAAA;KAAE,CAAC,CAAC;IACpE,QAAQ,IAAI,OAAO,CAAC,QAAQ,CAAC,CAAC;CAC/B;AAMD,qBAAa,cAAe,YAAW,QAAQ;IAC7C,OAAO,CAAC,KAAK,CAA8B;IAErC,UAAU,CAAC,QAAQ,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC;IAIlD,WAAW,CAAC,SAAS,EAAE,aAAa,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IAMtD,WAAW,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,QAAQ,GAAG,SAAS,CAAC;IAI9D,aAAa,CAAC,MAAM,CAAC,EAAE,cAAc,GAAG,OAAO,CAAC,QAAQ,EAAE,CAAC;IAI3D,QAAQ,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,EAAE,CAAC;IAI7C,kBAAkB,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,EAAE,CAAC;IAI5D,gBAAgB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,EAAE,CAAC;IAIzD,gBAAgB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,GAAG,SAAS,CAAC;IAItE,mBAAmB,IAAI,OAAO,CAAC,aAAa,EAAE,CAAC;IAI/C,WAAW,IAAI,OAAO,CAAC,QAAQ,CAAC;IAIhC,mBAAmB,CACvB,UAAU,EAAE,MAAM,EAClB,WAAW,EAAE,MAAM,GAClB,OAAO,CAAC;QAAE,MAAM,EAAE,OAAO,CAAC;QAAC,MAAM,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,OAAO,CAAA;KAAE,CAAC;IAI7D,QAAQ,IAAI,OAAO,CAAC,QAAQ,CAAC;CAGpC"}
@@ -0,0 +1,52 @@
1
+ /**
2
+ * DAO Governance — Store
3
+ *
4
+ * Wraps the pure DAO state reducer behind an async interface
5
+ * for future persistence compatibility.
6
+ */
7
+ import { applyDaoEvent, checkProposalResult, createDaoState, getDelegationsFrom, getDelegationsTo, getProposal, getProposalVotes, getTimelockEntry, getTreasury, listProposals, listTimelockEntries, } from './state.js';
8
+ // ---------------------------------------------------------------------------
9
+ // Memory Implementation
10
+ // ---------------------------------------------------------------------------
11
+ export class MemoryDaoStore {
12
+ state = createDaoState();
13
+ async applyEvent(envelope) {
14
+ this.state = applyDaoEvent(this.state, envelope);
15
+ }
16
+ async applyEvents(envelopes) {
17
+ for (const envelope of envelopes) {
18
+ this.state = applyDaoEvent(this.state, envelope);
19
+ }
20
+ }
21
+ async getProposal(proposalId) {
22
+ return getProposal(this.state, proposalId);
23
+ }
24
+ async listProposals(status) {
25
+ return listProposals(this.state, status);
26
+ }
27
+ async getVotes(proposalId) {
28
+ return getProposalVotes(this.state, proposalId);
29
+ }
30
+ async getDelegationsFrom(delegator) {
31
+ return getDelegationsFrom(this.state, delegator);
32
+ }
33
+ async getDelegationsTo(delegate) {
34
+ return getDelegationsTo(this.state, delegate);
35
+ }
36
+ async getTimelockEntry(actionId) {
37
+ return getTimelockEntry(this.state, actionId);
38
+ }
39
+ async listTimelockEntries() {
40
+ return listTimelockEntries(this.state);
41
+ }
42
+ async getTreasury() {
43
+ return getTreasury(this.state);
44
+ }
45
+ async checkProposalResult(proposalId, totalSupply) {
46
+ return checkProposalResult(this.state, proposalId, totalSupply);
47
+ }
48
+ async getState() {
49
+ return this.state;
50
+ }
51
+ }
52
+ //# sourceMappingURL=store.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"store.js","sourceRoot":"","sources":["../../src/dao/store.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAWH,OAAO,EACL,aAAa,EACb,mBAAmB,EACnB,cAAc,EAEd,kBAAkB,EAClB,gBAAgB,EAChB,WAAW,EACX,gBAAgB,EAChB,gBAAgB,EAChB,WAAW,EACX,aAAa,EACb,mBAAmB,GACpB,MAAM,YAAY,CAAC;AAwBpB,8EAA8E;AAC9E,wBAAwB;AACxB,8EAA8E;AAE9E,MAAM,OAAO,cAAc;IACjB,KAAK,GAAa,cAAc,EAAE,CAAC;IAE3C,KAAK,CAAC,UAAU,CAAC,QAAuB;QACtC,IAAI,CAAC,KAAK,GAAG,aAAa,CAAC,IAAI,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC;IACnD,CAAC;IAED,KAAK,CAAC,WAAW,CAAC,SAA0B;QAC1C,KAAK,MAAM,QAAQ,IAAI,SAAS,EAAE,CAAC;YACjC,IAAI,CAAC,KAAK,GAAG,aAAa,CAAC,IAAI,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC;QACnD,CAAC;IACH,CAAC;IAED,KAAK,CAAC,WAAW,CAAC,UAAkB;QAClC,OAAO,WAAW,CAAC,IAAI,CAAC,KAAK,EAAE,UAAU,CAAC,CAAC;IAC7C,CAAC;IAED,KAAK,CAAC,aAAa,CAAC,MAAuB;QACzC,OAAO,aAAa,CAAC,IAAI,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;IAC3C,CAAC;IAED,KAAK,CAAC,QAAQ,CAAC,UAAkB;QAC/B,OAAO,gBAAgB,CAAC,IAAI,CAAC,KAAK,EAAE,UAAU,CAAC,CAAC;IAClD,CAAC;IAED,KAAK,CAAC,kBAAkB,CAAC,SAAiB;QACxC,OAAO,kBAAkB,CAAC,IAAI,CAAC,KAAK,EAAE,SAAS,CAAC,CAAC;IACnD,CAAC;IAED,KAAK,CAAC,gBAAgB,CAAC,QAAgB;QACrC,OAAO,gBAAgB,CAAC,IAAI,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC;IAChD,CAAC;IAED,KAAK,CAAC,gBAAgB,CAAC,QAAgB;QACrC,OAAO,gBAAgB,CAAC,IAAI,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC;IAChD,CAAC;IAED,KAAK,CAAC,mBAAmB;QACvB,OAAO,mBAAmB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IACzC,CAAC;IAED,KAAK,CAAC,WAAW;QACf,OAAO,WAAW,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IACjC,CAAC;IAED,KAAK,CAAC,mBAAmB,CACvB,UAAkB,EAClB,WAAmB;QAEnB,OAAO,mBAAmB,CAAC,IAAI,CAAC,KAAK,EAAE,UAAU,EAAE,WAAW,CAAC,CAAC;IAClE,CAAC;IAED,KAAK,CAAC,QAAQ;QACZ,OAAO,IAAI,CAAC,KAAK,CAAC;IACpB,CAAC;CACF"}
@@ -0,0 +1,149 @@
1
+ /**
2
+ * DAO Governance Module — Domain Types
3
+ *
4
+ * Implements token-weighted voting with sqrt, reputation multiplier,
5
+ * lockup multiplier, and delegation as specified in docs/DAO.md.
6
+ */
7
+ export declare const PROPOSAL_TYPES: readonly ["parameter_change", "treasury_spend", "protocol_upgrade", "emergency", "signal"];
8
+ export type ProposalType = (typeof PROPOSAL_TYPES)[number];
9
+ export declare function isProposalType(value: string): value is ProposalType;
10
+ export declare const PROPOSAL_STATUSES: readonly ["draft", "discussion", "voting", "passed", "rejected", "queued", "executed", "expired", "vetoed"];
11
+ export type ProposalStatus = (typeof PROPOSAL_STATUSES)[number];
12
+ export declare function isProposalStatus(value: string): value is ProposalStatus;
13
+ export interface ParameterChangeAction {
14
+ type: 'parameter_change';
15
+ target: string;
16
+ currentValue: unknown;
17
+ newValue: unknown;
18
+ }
19
+ export interface TreasurySpendAction {
20
+ type: 'treasury_spend';
21
+ recipient: string;
22
+ amount: string;
23
+ token: string;
24
+ purpose: string;
25
+ vestingSchedule?: {
26
+ cliff: number;
27
+ duration: number;
28
+ interval: number;
29
+ };
30
+ }
31
+ export interface ContractUpgradeAction {
32
+ type: 'contract_upgrade';
33
+ contract: string;
34
+ newImplementation: string;
35
+ migrationData?: string;
36
+ }
37
+ export interface EmergencyAction {
38
+ type: 'emergency';
39
+ action: 'pause' | 'unpause' | 'upgrade';
40
+ target: string;
41
+ reason: string;
42
+ }
43
+ export type ProposalAction = ParameterChangeAction | TreasurySpendAction | ContractUpgradeAction | EmergencyAction;
44
+ export declare const VOTE_OPTIONS: readonly ["for", "against", "abstain"];
45
+ export type VoteOption = (typeof VOTE_OPTIONS)[number];
46
+ export declare function isVoteOption(value: string): value is VoteOption;
47
+ export interface Vote {
48
+ voter: string;
49
+ proposalId: string;
50
+ option: VoteOption;
51
+ power: string;
52
+ reason?: string;
53
+ ts: number;
54
+ hash: string;
55
+ }
56
+ export interface ProposalTimeline {
57
+ createdAt: number;
58
+ discussionEndsAt: number;
59
+ votingStartsAt: number;
60
+ votingEndsAt: number;
61
+ executionDelay: number;
62
+ expiresAt: number;
63
+ }
64
+ export interface ProposalVotes {
65
+ for: string;
66
+ against: string;
67
+ abstain: string;
68
+ }
69
+ export interface Proposal {
70
+ id: string;
71
+ proposer: string;
72
+ type: ProposalType;
73
+ title: string;
74
+ description: string;
75
+ discussionUrl?: string;
76
+ actions: ProposalAction[];
77
+ timeline: ProposalTimeline;
78
+ votes: ProposalVotes;
79
+ status: ProposalStatus;
80
+ resourcePrev?: string | null;
81
+ }
82
+ export interface DelegationScope {
83
+ proposalTypes?: ProposalType[];
84
+ topics?: string[];
85
+ all?: boolean;
86
+ }
87
+ export interface Delegation {
88
+ delegator: string;
89
+ delegate: string;
90
+ scope: DelegationScope;
91
+ percentage: number;
92
+ expiresAt?: number;
93
+ revokedAt?: number;
94
+ createdAt: number;
95
+ }
96
+ export interface TreasuryAllocationPolicy {
97
+ development: number;
98
+ nodeRewards: number;
99
+ ecosystem: number;
100
+ reserve: number;
101
+ }
102
+ export interface TreasurySpendingLimits {
103
+ perProposal: string;
104
+ perQuarter: string;
105
+ requireMultisig: string;
106
+ }
107
+ export interface Treasury {
108
+ balance: string;
109
+ allocationPolicy: TreasuryAllocationPolicy;
110
+ spendingLimits: TreasurySpendingLimits;
111
+ totalSpent: string;
112
+ spentThisQuarter: string;
113
+ quarterStart: number;
114
+ }
115
+ export type TimelockStatus = 'queued' | 'executed' | 'cancelled';
116
+ export interface TimelockEntry {
117
+ actionId: string;
118
+ proposalId: string;
119
+ action: ProposalAction;
120
+ queuedAt: number;
121
+ executeAfter: number;
122
+ status: TimelockStatus;
123
+ }
124
+ export interface VotingPower {
125
+ tokenPower: number;
126
+ lockupMultiplier: number;
127
+ reputationMultiplier: number;
128
+ delegatedPower: number;
129
+ totalPower: number;
130
+ }
131
+ export interface ProposalThreshold {
132
+ createThreshold: number;
133
+ passThreshold: number;
134
+ quorum: number;
135
+ discussionPeriod: number;
136
+ votingPeriod: number;
137
+ timelockDelay: number;
138
+ }
139
+ export declare const PROPOSAL_THRESHOLDS: Record<ProposalType, ProposalThreshold>;
140
+ export interface GovernanceParams {
141
+ proposalThreshold: number;
142
+ quorum: number;
143
+ votingDelay: number;
144
+ votingPeriod: number;
145
+ timelockDelay: number;
146
+ passThreshold: number;
147
+ }
148
+ export declare const DEFAULT_GOVERNANCE_PARAMS: GovernanceParams;
149
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/dao/types.ts"],"names":[],"mappings":"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"}