-
Notifications
You must be signed in to change notification settings - Fork 6
/
contract.scilla
96 lines (83 loc) · 2.6 KB
/
contract.scilla
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
scilla_version 0
(* This contract implements a Pausable token interface a la ERC20.*)
(***************************************************)
(* Associated library *)
(***************************************************)
library Pausable
let one_msg =
fun (msg : Message) =>
let nil_msg = Nil {Message} in
Cons {Message} msg nil_msg
let no_msg = Nil {Message}
let min_int =
fun (a : Uint128) => fun (b : Uint128) =>
let alt = builtin lt a b in
match alt with
| True =>
a
| False =>
b
end
let le_int =
fun (a : Uint128) => fun (b : Uint128) =>
let x = builtin lt a b in
match x with
| True => True
| False =>
let y = builtin eq a b in
match y with
| True => True
| False => False
end
end
(*constants*)
let _one = Int32 1
let _zero = Int32 0
(***************************************************)
(* The contract definition *)
(***************************************************)
contract Pausable
(owner : ByStr20,
total_tokens : Uint128)
(* Initial balance is not stated explicitly: it's initialized when creating the contract. *)
field bearer : Map String (Map ByStr20 Int32) = Emp String (Map ByStr20 Int32)
(*add the account from role and make account as true(0)*)
transition add (role : String, account :ByStr20)
bearer[role][account]:=_one;
e = { _eventname : "Role Added"; role : role; from : _sender ; account : account };
event e
end
(*renounces the account from role and make account as false(0)*)
transition renounce (role : String, account :ByStr20)
bearer[role][account]:=_zero;
e = { _eventname : "Role Renounced"; role : role; from : _sender ; account : account };
event e
end
(*removes the account from role*)
transition remove (role : String, account :ByStr20)
delete bearer[role][account];
e = { _eventname : "Role Removed"; role : role; from : _sender ; account : account };
event e
end
(*checks the account for role*)
transition has (role : String, account :ByStr20)
b <- bearer;
t="true";
f="false";
_role <- bearer [role][ account] ;
match _role with
| Some v1 =>
istrue = builtin eq v1 _one ;
match istrue with
| True =>
e = { _eventname : "hasAccount"; role : role; account : account ; has : t };
event e
| False =>
e = { _eventname : "hasAccount"; role : role; account : account ; has : f };
event e
end
| None =>
e = { _eventname : "hasAccount"; role : role; account : account ; has : f };
event e
end
end