-
Notifications
You must be signed in to change notification settings - Fork 18
/
externaltraits-counter.mvir
47 lines (42 loc) · 1.05 KB
/
externaltraits-counter.mvir
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 Transaction.Counter;
import Transaction.BaseCounter;
main () {
let this: address;
this = get_txn_sender();
BaseCounter.publish(0);
Counter.publish();
assert(Counter.getCount(copy(this)) == 0, 1);
Counter.increment(copy(this));
assert(Counter.getCount(copy(this)) == 1, 2);
Counter.increment$Int(copy(this), 4);
assert(Counter.getCount(copy(this)) == 5, 3);
return;
}
//! provide module
module BaseCounter {
resource T {
value: u64
}
public publish(start: u64) {
let t: Self.T;
t = T {
value: move(start)
};
move_to_sender<T>(move(t));
return;
}
public add(this_address: address, n: u64) acquires T {
let this: &mut Self.T;
let newValue: u64;
this = borrow_global_mut<T>(move(this_address));
newValue = *©(this).value + move(n);
*&mut copy(this).value = move(newValue);
_ = move(this);
return;
}
public count(this_address: address): u64 acquires T {
let this: &mut Self.T;
this = borrow_global_mut<T>(move(this_address));
return *&move(this).value;
}
}