Smart Contract
FlowtyActiveCheckers
A.befbaccb5032a457.FlowtyActiveCheckers
1import FlowtyDrops from 0xbefbaccb5032a457
2
3/*
4This contract contains implementations for the FlowtyDrops.ActiveChecker struct interface.
5You can use these implementations, or your own, to configure when a phase in a drop is active
6*/
7access(all) contract FlowtyActiveCheckers {
8 /*
9 The AlwaysOn ActiveChecker is always on and never ends.
10 */
11 access(all) struct AlwaysOn: FlowtyDrops.ActiveChecker {
12 access(all) view fun hasStarted(): Bool {
13 return true
14 }
15
16 access(all) view fun hasEnded(): Bool {
17 return false
18 }
19
20 access(all) view fun getStart(): UInt64? {
21 return nil
22 }
23
24 access(all) view fun getEnd(): UInt64? {
25 return nil
26 }
27 }
28
29 /*
30 The manual checker is used to explicitly toggle a drop.
31 This version of checker allows a creator to turn on or off a drop at will
32 */
33 access(all) struct ManualChecker: FlowtyDrops.ActiveChecker {
34 access(self) var started: Bool
35 access(self) var ended: Bool
36
37 access(all) view fun hasStarted(): Bool {
38 return self.started
39 }
40
41 access(all) view fun hasEnded(): Bool {
42 return self.ended
43 }
44
45 access(all) view fun getStart(): UInt64? {
46 return nil
47 }
48
49 access(all) view fun getEnd(): UInt64? {
50 return nil
51 }
52
53 access(Mutate) fun setStarted(_ b: Bool) {
54 self.started = b
55 }
56
57 access(Mutate) fun setEnded(_ b: Bool) {
58 self.ended = b
59 }
60
61 init() {
62 self.started = false
63 self.ended = false
64 }
65 }
66
67 /*
68 TimestampChecker uses block timestamps to determine if a phase or drop is live or not.
69 A timestamp checker has a start and an end time.
70 */
71 access(all) struct TimestampChecker: FlowtyDrops.ActiveChecker {
72 access(all) var start: UInt64?
73 access(all) var end: UInt64?
74
75
76 access(all) view fun hasStarted(): Bool {
77 return self.start == nil || UInt64(getCurrentBlock().timestamp) >= self.start!
78 }
79
80 access(all) view fun hasEnded(): Bool {
81 if self.end == nil {
82 return false
83 }
84
85 return UInt64(getCurrentBlock().timestamp) > self.end!
86 }
87
88 access(all) view fun getStart(): UInt64? {
89 return self.start
90 }
91
92 access(all) view fun getEnd(): UInt64? {
93 return self.end
94 }
95
96 access(Mutate) fun setStart(start: UInt64?) {
97 self.start = start
98 }
99
100 access(Mutate) fun setEnd(end: UInt64?) {
101 self.end = end
102 }
103
104 init(start: UInt64?, end: UInt64?) {
105 pre {
106 start == nil || end == nil || start! < end!: "start must be less than end"
107 }
108
109 self.start = start
110 self.end = end
111 }
112 }
113}