@@ -12,11 +12,9 @@ module SpringTokenRoles {
12
12
public publish() {
13
13
let sender: address;
14
14
sender = get_txn_sender();
15
-
16
15
if (true) {
17
16
Self.grant_owner_role();
18
17
}
19
-
20
18
// Publish a new role with no permissions.
21
19
move_to_sender<T>(T{ minter: false, blacklisted: false });
22
20
@@ -32,24 +30,18 @@ module SpringTokenRoles {
32
30
// Grants minter role to receiver, if sender is owner.
33
31
public grant_minter_role(receiver: address, owner_role: &R#Self.Owner) {
34
32
let role_ref: &mut R#Self.T;
35
-
36
33
release(move(owner_role));
37
-
38
34
role_ref = borrow_global<T>(move(receiver));
39
35
*(&mut move(role_ref).minter) = true;
40
-
41
36
return;
42
37
}
43
38
44
39
// Grants blacklist role to receiver, but can only succeed if sender owns the owner role.
45
40
public grant_blacklisted_role(receiver: address, owner_role: &R#Self.Owner) {
46
41
let role_ref: &mut R#Self.T;
47
-
48
42
release(move(owner_role));
49
-
50
43
role_ref = borrow_global<T>(move(receiver));
51
44
*(&mut move(role_ref).blacklisted) = true;
52
-
53
45
return;
54
46
}
55
47
@@ -60,11 +52,9 @@ module SpringTokenRoles {
60
52
let sender: address;
61
53
let owner_role_ref: &mut R#Self.Owner;
62
54
let owner_role_immut_ref: &R#Self.Owner;
63
-
64
55
sender = get_txn_sender();
65
56
owner_role_ref = borrow_global<Owner>(move(sender));
66
57
owner_role_immut_ref = freeze(move(owner_role_ref));
67
-
68
58
return move(owner_role_immut_ref);
69
59
}
70
60
@@ -75,11 +65,9 @@ module SpringTokenRoles {
75
65
let sender: address;
76
66
let role_ref: &mut R#Self.T;
77
67
let role_immut_ref: &R#Self.T;
78
-
79
68
sender = get_txn_sender();
80
69
role_ref = borrow_global<T>(move(sender));
81
70
role_immut_ref = freeze(move(role_ref));
82
-
83
71
return move(role_immut_ref);
84
72
}
85
73
@@ -114,16 +102,12 @@ module SpringTokenRoles {
114
102
}
115
103
}
116
104
117
-
118
105
module SpringToken {
119
- // module for SpringToken.
120
- // will import SprinTokenRoles.
121
106
122
107
import 0x0.LibraAccount;
123
108
import 0x0.LibraCoin;
124
109
import Transaction.SpringTokenRoles;
125
110
126
- // stores an account's total balance
127
111
resource T {
128
112
value: u64,
129
113
}
@@ -140,24 +124,19 @@ module SpringToken {
140
124
return;
141
125
}
142
126
143
- // Mint new SpringTokens.
144
- // Reverts if not a minter role.
127
+ // Mint new SpringTokens. Reverts if not a minter role.
145
128
public mint(value: u64, role: &R#SpringTokenRoles.T): R#Self.T {
146
129
SpringTokenRoles.require_minter(move(role));
147
130
return T{value: move(value)};
148
131
}
149
132
150
- // Returns an account's SpringToken balance.
151
- // Reverts if an initial SpringToken hasn't been published.
152
133
public balance(): u64 {
153
134
let sender: address;
154
135
let token_ref: &mut R#Self.T;
155
136
let token_value: u64;
156
-
157
137
sender = get_txn_sender();
158
138
token_ref = borrow_global<T>(move(sender));
159
139
token_value = *(&move(token_ref).value);
160
-
161
140
return move(token_value);
162
141
}
163
142
@@ -166,18 +145,13 @@ module SpringToken {
166
145
let payee_token_ref: &mut R#Self.T;
167
146
let payee_token_value: u64;
168
147
let to_deposit_value: u64;
169
-
170
148
SpringTokenRoles.require_not_blacklisted(move(role));
171
-
172
149
payee_token_ref = borrow_global<T>(move(payee));
173
150
payee_token_value = *(©(payee_token_ref).value);
174
-
175
151
// Unpack and destroy to_deposit tokens
176
152
T{ value: to_deposit_value } = move(to_deposit);
177
-
178
153
// Increase the payees balance with the destroyed token amount
179
154
*(&mut move(payee_token_ref).value) = move(payee_token_value) + move(to_deposit_value);
180
-
181
155
return;
182
156
}
183
157
@@ -186,54 +160,21 @@ module SpringToken {
186
160
let sender: address;
187
161
let sender_token_ref: &mut R#Self.T;
188
162
let value: u64;
189
-
190
163
SpringTokenRoles.require_not_blacklisted(move(role));
191
-
192
164
sender = get_txn_sender();
193
165
sender_token_ref = borrow_global<T>(move(sender));
194
166
value = *(©(sender_token_ref).value);
195
-
196
167
assert(copy(value) >= copy(amount), 1);
197
-
198
168
*(&mut move(sender_token_ref).value) = move(value) - copy(amount);
199
169
return T{ value: move(amount) };
200
170
}
201
171
202
172
public pay_from_sender(payee: address, amount: u64) {
203
- let to_pay: R#Self.T;
204
- let role: &R#SpringTokenRoles.T;
205
-
206
- role = SpringTokenRoles.borrow_role();
207
- to_pay = Self.withdraw(move(amount), copy(role));
208
- Self.deposit(move(payee), move(to_pay), move(role));
209
- return;
210
- }
211
-
212
- public sell_token(token_amount: u64, price: u64) {
213
- let token: R#Self.T;
173
+ let to_pay: R#Self.T;
214
174
let role: &R#SpringTokenRoles.T;
215
175
role = SpringTokenRoles.borrow_role();
216
- token = Self.withdraw(move(token_amount), move(role));
217
- move_to_sender<Order>(Order { token: move(token), price: move(price)});
218
- return;
219
- }
220
-
221
- public buy_token(order_address: address) {
222
- let sender: address;
223
- let order: R#Self.Order;
224
- let token: R#Self.T;
225
- let price: u64;
226
- let role: &R#SpringTokenRoles.T;
227
-
228
- sender = get_txn_sender();
229
- role = SpringTokenRoles.borrow_role();
230
-
231
- order = move_from<Order>(copy(order_address));
232
- Order { token:token, price:price } = move(order);
233
-
234
- LibraAccount.pay_from_sender(move(order_address), move(price));
235
-
236
- Self.deposit(move(sender), move(token), move(role));
176
+ to_pay = Self.withdraw(move(amount), copy(role));
177
+ Self.deposit(move(payee), move(to_pay), move(role));
237
178
return;
238
179
}
239
180
}
@@ -247,15 +188,10 @@ main() {
247
188
let sender: address;
248
189
let owner_role: &R#SpringTokenRoles.Owner;
249
190
let role: &R#SpringTokenRoles.T;
250
-
251
191
sender = get_txn_sender();
252
-
253
192
SpringTokenRoles.publish();
254
-
255
193
owner_role = SpringTokenRoles.borrow_owner_role();
256
-
257
194
SpringTokenRoles.grant_minter_role(copy(sender), move(owner_role));
258
-
259
195
SpringToken.publish();
260
196
return;
261
197
}
0 commit comments