-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathcontract.cs
144 lines (115 loc) · 4.34 KB
/
contract.cs
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
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
// SPDX-License-Identifier: MIT
using Neo;
using Neo.SmartContract;
using Neo.SmartContract.Framework;
using Neo.SmartContract.Framework.Attributes;
using Neo.SmartContract.Framework.Native;
using Neo.SmartContract.Framework.Services;
using System;
using System.Numerics;
namespace DiplomaDigital
{
[ManifestExtra("Descricao", "Contrato que formaliza diplomas digitais")]
public class Diploma
{
public string Universidade { get; set; }
public string Aluno { get; set; }
public string Matricula { get; set; }
public string Curso { get; set; }
public string AnoConclusao { get; set; }
public string Estado { get; set; }
public Diploma(string universidade, string aluno,
string matricula, string curso,
string anoConclusao, string estado)
{
Universidade = universidade;
Aluno = aluno;
Matricula = matricula;
Curso = curso;
AnoConclusao = anoConclusao;
Estado = estado;
}
public string toString(){
return $"{Universidade};{Aluno};{Matricula};{Curso};{AnoConclusao};{Estado}";
}
}
public class ContratoDiploma : SmartContract
{
[InitialValue("NforeidHBjJDK6sGdxiAMRfQwW8UnkwMFm", ContractParameterType.Hash160)]
static readonly UInt160 Owner = default;
private static bool IsOwner() => Runtime.CheckWitness(Owner);
public static bool Verify() => IsOwner();
public static string EmiteDiploma(string Universidade,
string Aluno, string Matricula,
string Curso, string AnoConclusao)
{
if (IsOwner()){
Diploma diploma = new Diploma(Universidade, Aluno, Matricula, Curso, AnoConclusao, "Valido");
string diploma_json = diploma.toString();
Storage.Put(Storage.CurrentContext, Matricula, diploma_json);
return "Diploma emitido com sucesso!";
}
else {
return "Permissao negada";
}
}
public static string ConsultaDiploma(string Matricula)
{
string diploma_serializado = Storage.Get(Storage.CurrentContext, Matricula);
if (diploma_serializado == null){
return "Diploma nao encontrado";
}
else {
string[] diploma = StdLib.StringSplit(diploma_serializado, ";");
string estado = diploma[5];
if (estado == "Valido"){
return $"O diploma do aluno de matricula {Matricula} eh valido!";
}
else
{
return $"O diploma do aluno de matricula {Matricula} eh invalido!";
}
return estado;
}
}
public static string RevogaDiploma(string MatriculaEntrada)
{
if (IsOwner()){
string diploma_serializado = Storage.Get(Storage.CurrentContext, MatriculaEntrada);
if (diploma_serializado == null){
return "Diploma nao encontrado";
}
else {
string[] diploma_items = StdLib.StringSplit(diploma_serializado, ";");
string Universidade = diploma_items[0];
string Aluno = diploma_items[1];
string Matricula = diploma_items[2];
string Curso = diploma_items[3];
string AnoConclusao = diploma_items[4];
Diploma diploma = new Diploma(Universidade, Aluno, Matricula, Curso, AnoConclusao, "Revogado");
string diploma_json = diploma.toString();
Storage.Delete(Storage.CurrentContext, Matricula);
Storage.Put(Storage.CurrentContext, Matricula, diploma_json);
return "Diploma revogado com sucesso!";
}
}
else {
return "Permissao negada";
}
}
public static void _deploy(object data, bool update)
{
if (update) return;
}
public static void Update(ByteString nefFile, string manifest)
{
if (!IsOwner()) throw new Exception("No authorization.");
ContractManagement.Update(nefFile, manifest, null);
}
public static void Destroy()
{
if (!IsOwner()) throw new Exception("No authorization.");
ContractManagement.Destroy();
}
}
}