@claritydao/midnight-agora-sdk 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 (60) hide show
  1. package/.prettierrc +1 -0
  2. package/LICENSE +0 -0
  3. package/README.md +1134 -0
  4. package/dist/browser-providers.d.ts +21 -0
  5. package/dist/browser-providers.d.ts.map +1 -0
  6. package/dist/browser-providers.js +147 -0
  7. package/dist/browser-providers.js.map +1 -0
  8. package/dist/common-types.d.ts +29 -0
  9. package/dist/common-types.d.ts.map +1 -0
  10. package/dist/common-types.js +2 -0
  11. package/dist/common-types.js.map +1 -0
  12. package/dist/errors.d.ts +67 -0
  13. package/dist/errors.d.ts.map +1 -0
  14. package/dist/errors.js +108 -0
  15. package/dist/errors.js.map +1 -0
  16. package/dist/governor-api.d.ts +348 -0
  17. package/dist/governor-api.d.ts.map +1 -0
  18. package/dist/governor-api.js +716 -0
  19. package/dist/governor-api.js.map +1 -0
  20. package/dist/index.d.ts +11 -0
  21. package/dist/index.d.ts.map +1 -0
  22. package/dist/index.js +14 -0
  23. package/dist/index.js.map +1 -0
  24. package/dist/manager.d.ts +87 -0
  25. package/dist/manager.d.ts.map +1 -0
  26. package/dist/manager.js +93 -0
  27. package/dist/manager.js.map +1 -0
  28. package/dist/types.d.ts +307 -0
  29. package/dist/types.d.ts.map +1 -0
  30. package/dist/types.js +77 -0
  31. package/dist/types.js.map +1 -0
  32. package/dist/utils/index.d.ts +34 -0
  33. package/dist/utils/index.d.ts.map +1 -0
  34. package/dist/utils/index.js +57 -0
  35. package/dist/utils/index.js.map +1 -0
  36. package/dist/validators.d.ts +52 -0
  37. package/dist/validators.d.ts.map +1 -0
  38. package/dist/validators.js +160 -0
  39. package/dist/validators.js.map +1 -0
  40. package/eslint.config.mjs +48 -0
  41. package/package.json +39 -0
  42. package/src/browser-providers.ts +274 -0
  43. package/src/common-types.ts +51 -0
  44. package/src/errors.ts +124 -0
  45. package/src/governor-api.ts +948 -0
  46. package/src/index.ts +51 -0
  47. package/src/manager.ts +203 -0
  48. package/src/types.ts +403 -0
  49. package/src/utils/index.ts +60 -0
  50. package/src/validators.ts +245 -0
  51. package/test/README.md +409 -0
  52. package/test/errors.test.ts +179 -0
  53. package/test/integration/governor-api.test.ts +370 -0
  54. package/test/mocks/providers.ts +130 -0
  55. package/test/types.test.ts +112 -0
  56. package/test/utils.test.ts +111 -0
  57. package/test/validators.test.ts +368 -0
  58. package/test/wasm-init.test.ts +132 -0
  59. package/tsconfig.json +18 -0
  60. package/vitest.config.ts +9 -0
@@ -0,0 +1,348 @@
1
+ import { type ContractAddress } from "@midnight-ntwrk/compact-runtime";
2
+ import { type Logger } from "pino";
3
+ import { type GovernorProviders, type DeployedGovernorContract } from "./common-types";
4
+ import { type FinalizedTxData } from "@midnight-ntwrk/midnight-js-types";
5
+ import type { DeploymentConfig, ProposalAction } from "./types";
6
+ import { VoteChoice } from "./types";
7
+ /**
8
+ * An API for a deployed governor contract.
9
+ */
10
+ export interface DeployedGovernorAPI {
11
+ readonly deployedContractAddress: ContractAddress;
12
+ createProposal: (title: string, description: string, creator: Uint8Array, actions: ProposalAction[]) => Promise<{
13
+ txData: FinalizedTxData;
14
+ proposalId: bigint;
15
+ }>;
16
+ castVote: (proposalId: bigint, voter: Uint8Array, choice: VoteChoice) => Promise<FinalizedTxData>;
17
+ finalizeProposal: (proposalId: bigint) => Promise<FinalizedTxData>;
18
+ queueProposal: (proposalId: bigint) => Promise<FinalizedTxData>;
19
+ executeProposal: (proposalId: bigint, effectId: bigint) => Promise<FinalizedTxData>;
20
+ registerStake: (userId: Uint8Array, amount: bigint) => Promise<FinalizedTxData>;
21
+ getStakeInfo: (userId: Uint8Array) => Promise<any>;
22
+ getTotalDelegatedPower: (userId: Uint8Array) => Promise<any>;
23
+ getStakeRecord: (userId: Uint8Array) => Promise<any>;
24
+ hasProposalThreshold: (userId: Uint8Array) => Promise<any>;
25
+ hasVotingPower: (userId: Uint8Array) => Promise<any>;
26
+ getProposalDetails: (proposalId: bigint) => Promise<any>;
27
+ getEffectDetails: (effectId: bigint) => Promise<any>;
28
+ getActiveProposalCount: () => Promise<bigint>;
29
+ getQueuedProposalCount: () => Promise<bigint>;
30
+ getProposalVoteCount: (proposalId: bigint) => Promise<any>;
31
+ getGovernorStatus: () => Promise<any>;
32
+ getCurrentTime: () => Promise<any>;
33
+ getCurrentContractTime: () => Promise<bigint>;
34
+ getTreasuryBalance: () => Promise<bigint>;
35
+ updateTime: (newTime: bigint) => Promise<FinalizedTxData>;
36
+ displayGovernorValue: () => Promise<{
37
+ contractAddress: string;
38
+ activeProposals: bigint;
39
+ queuedProposals: bigint;
40
+ treasuryBalance: bigint;
41
+ isActive: boolean;
42
+ }>;
43
+ }
44
+ /**
45
+ * Provides an implementation of {@link DeployedGovernorAPI} by adapting a deployed governor
46
+ * contract.
47
+ */
48
+ export declare class GovernorAPI implements DeployedGovernorAPI {
49
+ readonly deployedContract: DeployedGovernorContract;
50
+ private readonly providers;
51
+ private readonly logger?;
52
+ /** @internal */
53
+ private constructor();
54
+ /**
55
+ * Gets the address of the current deployed contract.
56
+ */
57
+ readonly deployedContractAddress: ContractAddress;
58
+ /**
59
+ * Creates a governance proposal.
60
+ *
61
+ * @param title The proposal title (max 256 characters).
62
+ * @param description The proposal description (max 10,000 characters).
63
+ * @param creator The creator's address (32 bytes).
64
+ * @param actions Array of proposal actions to execute if passed.
65
+ * @returns Transaction data and proposal ID.
66
+ *
67
+ * @throws {InvalidParameterError} If title, description, or creator are invalid.
68
+ * @throws {InsufficientStakeError} If creator doesn't have sufficient stake.
69
+ *
70
+ * @remarks
71
+ * The creator must have sufficient stake as defined by the governance config's proposalThreshold.
72
+ * This method will automatically retrieve the creator's current stake from the contract.
73
+ *
74
+ * @example
75
+ * ```typescript
76
+ * const actions: ProposalAction[] = [{
77
+ * typ: 0,
78
+ * token: tokenAddress,
79
+ * amount: BigInt(10000),
80
+ * to: recipientAddress,
81
+ * configKey: new Uint8Array(32),
82
+ * configValue: new Uint8Array(32),
83
+ * }];
84
+ *
85
+ * const { proposalId, txData } = await governorAPI.createProposal(
86
+ * 'Fund Community Initiative',
87
+ * 'Transfer 10,000 tokens to community wallet',
88
+ * creatorAddress,
89
+ * actions
90
+ * );
91
+ * ```
92
+ */
93
+ createProposal(title: string, description: string, creator: Uint8Array, actions: ProposalAction[]): Promise<{
94
+ txData: FinalizedTxData;
95
+ proposalId: bigint;
96
+ }>;
97
+ /**
98
+ * Casts a vote on a proposal.
99
+ *
100
+ * @param proposalId The proposal ID to vote on (must be > 0).
101
+ * @param voter The voter's address (32 bytes).
102
+ * @param choice The vote choice: 0 (For), 1 (Against), or 2 (Abstain). Use VoteChoice enum for type safety.
103
+ * @returns Transaction data.
104
+ *
105
+ * @throws {InvalidParameterError} If proposalId, voter, or choice are invalid.
106
+ * @throws {InsufficientStakeError} If voter doesn't have sufficient stake.
107
+ *
108
+ * @remarks
109
+ * The voter must have voting power (non-zero stake). This method will automatically retrieve
110
+ * the voter's current stake from the contract.
111
+ *
112
+ * @example
113
+ * ```typescript
114
+ * import { VoteChoice } from '@agora-dao-midnight/sdk';
115
+ *
116
+ * await governorAPI.castVote(
117
+ * proposalId,
118
+ * voterAddress,
119
+ * VoteChoice.For // Type-safe vote choice
120
+ * );
121
+ * ```
122
+ */
123
+ castVote(proposalId: bigint, voter: Uint8Array, choice: VoteChoice): Promise<FinalizedTxData>;
124
+ /**
125
+ * Finalizes a proposal after voting period ends.
126
+ *
127
+ * @param proposalId The proposal ID to finalize.
128
+ * @returns Transaction data.
129
+ *
130
+ * @remarks
131
+ * This should be called after the voting period has ended.
132
+ */
133
+ finalizeProposal(proposalId: bigint): Promise<FinalizedTxData>;
134
+ /**
135
+ * Queues a finalized proposal for execution.
136
+ *
137
+ * @param proposalId The proposal ID to queue.
138
+ * @returns Transaction data.
139
+ *
140
+ * @remarks
141
+ * This should be called after the proposal has been finalized.
142
+ */
143
+ queueProposal(proposalId: bigint): Promise<FinalizedTxData>;
144
+ /**
145
+ * Executes a queued proposal.
146
+ *
147
+ * @param proposalId The proposal ID to execute.
148
+ * @param effectId The effect ID to execute.
149
+ * @returns Transaction data.
150
+ *
151
+ * @remarks
152
+ * This should be called after the execution delay has passed.
153
+ */
154
+ executeProposal(proposalId: bigint, effectId: bigint): Promise<FinalizedTxData>;
155
+ /**
156
+ * Registers a stake for a user.
157
+ *
158
+ * @param userId The user's address (32 bytes).
159
+ * @param amount The amount to stake.
160
+ * @returns Transaction data.
161
+ */
162
+ registerStake(userId: Uint8Array, amount: bigint): Promise<FinalizedTxData>;
163
+ /**
164
+ * Gets stake information for a user.
165
+ *
166
+ * @param userId The user's address (32 bytes).
167
+ * @returns Stake information.
168
+ */
169
+ getStakeInfo(userId: Uint8Array): Promise<any>;
170
+ /**
171
+ * Gets total delegated power for a user.
172
+ *
173
+ * @param userId The user's address (32 bytes).
174
+ * @returns Total delegated power.
175
+ */
176
+ getTotalDelegatedPower(userId: Uint8Array): Promise<any>;
177
+ /**
178
+ * Gets stake record for a user.
179
+ *
180
+ * @param userId The user's address (32 bytes).
181
+ * @returns Stake record.
182
+ */
183
+ getStakeRecord(userId: Uint8Array): Promise<any>;
184
+ /**
185
+ * Checks if user has sufficient stake to create proposals.
186
+ *
187
+ * @param userId The user's address (32 bytes).
188
+ * @returns Result indicating if user meets threshold.
189
+ */
190
+ hasProposalThreshold(userId: Uint8Array): Promise<any>;
191
+ /**
192
+ * Checks if user has voting power.
193
+ *
194
+ * @param userId The user's address (32 bytes).
195
+ * @returns Result indicating if user has voting power.
196
+ */
197
+ hasVotingPower(userId: Uint8Array): Promise<any>;
198
+ /**
199
+ * Gets proposal details by ID.
200
+ *
201
+ * @param proposalId The proposal ID.
202
+ * @returns Proposal details.
203
+ */
204
+ getProposalDetails(proposalId: bigint): Promise<any>;
205
+ /**
206
+ * Gets effect details by ID.
207
+ *
208
+ * @param effectId The effect ID.
209
+ * @returns Effect details.
210
+ */
211
+ getEffectDetails(effectId: bigint): Promise<any>;
212
+ /**
213
+ * Gets the count of active proposals.
214
+ *
215
+ * @returns Number of active proposals.
216
+ */
217
+ getActiveProposalCount(): Promise<bigint>;
218
+ /**
219
+ * Gets the count of queued proposals.
220
+ *
221
+ * @returns Number of queued proposals.
222
+ */
223
+ getQueuedProposalCount(): Promise<bigint>;
224
+ /**
225
+ * Gets vote count for a proposal.
226
+ *
227
+ * @param proposalId The proposal ID.
228
+ * @returns Vote count information.
229
+ */
230
+ getProposalVoteCount(proposalId: bigint): Promise<any>;
231
+ /**
232
+ * Gets the governor contract status.
233
+ *
234
+ * @returns Governor status information.
235
+ */
236
+ getGovernorStatus(): Promise<any>;
237
+ /**
238
+ * Gets the current time from the contract.
239
+ *
240
+ * @returns Current time.
241
+ */
242
+ getCurrentTime(): Promise<any>;
243
+ /**
244
+ * Gets the current contract time as a bigint.
245
+ *
246
+ * @returns Current contract time.
247
+ */
248
+ getCurrentContractTime(): Promise<bigint>;
249
+ /**
250
+ * Gets the treasury balance.
251
+ *
252
+ * @returns Treasury balance.
253
+ *
254
+ * @remarks
255
+ * This method queries the contract state to check if the contract exists.
256
+ * The actual treasury balance would need to be retrieved from the contract's
257
+ * public state if the contract implements treasury functionality.
258
+ */
259
+ getTreasuryBalance(): Promise<bigint>;
260
+ /**
261
+ * Updates the contract time.
262
+ *
263
+ * @param newTime The new time to set.
264
+ * @returns Transaction data.
265
+ *
266
+ * @internal
267
+ * @deprecated This method is for testing purposes only. Do not use in production.
268
+ *
269
+ * @remarks
270
+ * WARNING: This method manipulates contract time and should only be used in testing environments
271
+ * to simulate time passing. Using this in production can have serious consequences for governance
272
+ * operations and proposal lifecycles.
273
+ */
274
+ updateTime(newTime: bigint): Promise<FinalizedTxData>;
275
+ /**
276
+ * Displays comprehensive governor status.
277
+ *
278
+ * @returns Governor value information.
279
+ */
280
+ displayGovernorValue(): Promise<{
281
+ contractAddress: string;
282
+ activeProposals: bigint;
283
+ queuedProposals: bigint;
284
+ treasuryBalance: bigint;
285
+ isActive: boolean;
286
+ }>;
287
+ /**
288
+ * Deploys a new governor contract to the network.
289
+ *
290
+ * @param providers The governor providers.
291
+ * @param config The deployment configuration including governor, token, and admin settings.
292
+ * @param logger An optional logger to use for logging.
293
+ * @returns A `Promise` that resolves with a {@link GovernorAPI} instance that manages the newly deployed
294
+ * {@link DeployedGovernorContract}; or rejects with a deployment error.
295
+ *
296
+ * @example
297
+ * ```typescript
298
+ * import { GovernorAPI, ConfigPresets } from '@agora-dao-midnight/sdk';
299
+ * import { randomBytes } from '@midnight-ntwrk/midnight-js-utils';
300
+ *
301
+ * const config = {
302
+ * governor: {
303
+ * governance: ConfigPresets.production(),
304
+ * executionDelay: BigInt(172800),
305
+ * gracePeriod: BigInt(604800),
306
+ * maxActiveProposals: BigInt(100),
307
+ * proposalLifetime: BigInt(2592000),
308
+ * emergencyVetoEnabled: true,
309
+ * emergencyVetoThreshold: BigInt(75000),
310
+ * },
311
+ * token: {
312
+ * name: 'My DAO Token',
313
+ * symbol: 'MDAO',
314
+ * decimals: BigInt(18),
315
+ * },
316
+ * adminKey: randomBytes(32),
317
+ * };
318
+ *
319
+ * const governorAPI = await GovernorAPI.deploy(providers, config, logger);
320
+ * ```
321
+ */
322
+ static deploy(providers: GovernorProviders, config: DeploymentConfig, logger?: Logger): Promise<GovernorAPI>;
323
+ /**
324
+ * Finds an already deployed governor contract on the network, and joins it.
325
+ *
326
+ * @param providers The governor providers.
327
+ * @param contractAddress The contract address of the deployed governor contract to search for and join.
328
+ * @param logger An optional logger to use for logging.
329
+ * @returns A `Promise` that resolves with a {@link GovernorAPI} instance that manages the joined
330
+ * {@link DeployedGovernorContract}; or rejects with an error.
331
+ */
332
+ static join(providers: GovernorProviders, contractAddress: ContractAddress, logger?: Logger): Promise<GovernorAPI>;
333
+ /**
334
+ * Gets or initializes the private state for the governor contract.
335
+ *
336
+ * @param providers The governor providers.
337
+ * @returns The private state.
338
+ *
339
+ * @remarks
340
+ * This method retrieves existing private state from the provider, or creates new private state
341
+ * if none exists. The governance config in the private state is initialized with testing defaults
342
+ * and should be updated from the actual contract configuration after joining.
343
+ */
344
+ private static getPrivateState;
345
+ }
346
+ export * as utils from "./utils/index";
347
+ export * from "./common-types";
348
+ //# sourceMappingURL=governor-api.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"governor-api.d.ts","sourceRoot":"","sources":["../src/governor-api.ts"],"names":[],"mappings":"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"}