-
Notifications
You must be signed in to change notification settings - Fork 0
/
Proyecto Avanzado-SNS
47 lines (42 loc) · 1.64 KB
/
Proyecto Avanzado-SNS
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
import { Canister, query, update, Principal, Record, StableBTreeMap, Void, Vec, nat64, text, ic } from 'azle';
// Estructura para manejar la gobernanza y las propuestas en el SNS
const SnsGovernanceProposal = Record({
proposalId: Principal,
details: text,
status: Variant({ Open: {}, Accepted: {}, Rejected: {} }),
votes: nat64
});
// Almacenamiento de propuestas de gobernanza
let governanceProposals = StableBTreeMap(Principal, SnsGovernanceProposal, 0);
export default Canister({
// Crear una nueva propuesta de gobernanza
createGovernanceProposal: update([text], Principal, (details) => {
const proposalId = ic.principal();
const proposal = {
proposalId,
details,
status: { Open: {} },
votes: 0
};
governanceProposals.insert(proposalId, proposal);
return proposalId;
}),
// Votar por una propuesta de gobernanza
voteOnProposal: update([Principal, boolean], Void, (proposalId, vote) => {
const proposalOpt = governanceProposals.get(proposalId);
if ('None' in proposalOpt) {
throw new Error('Proposal not found');
}
const proposal = proposalOpt.Some;
proposal.votes += vote ? 1 : 0;
governanceProposals.insert(proposalId, proposal);
}),
// Consultar el estado de una propuesta de gobernanza
getProposalStatus: query([Principal], SnsGovernanceProposal, (proposalId) => {
const proposalOpt = governanceProposals.get(proposalId);
if ('None' in proposalOpt) {
throw new Error('Proposal not found');
}
return proposalOpt.Some;
})
});