Smart Contract

FlowtyActiveCheckers

A.befbaccb5032a457.FlowtyActiveCheckers

Deployed

1h ago
Feb 28, 2026, 09:42:23 PM UTC

Dependents

0 imports
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}