proposal_action_status.gno
6.87 Kb · 208 lines
1package governance
2
3// ProposalActionStatus tracks the execution and cancellation status of a proposal.
4// This structure manages the action-related state including who performed actions and when.
5type ProposalActionStatus struct {
6 canceled bool // Whether the proposal has been canceled
7 canceledAt int64 // Timestamp when proposal was canceled
8 canceledHeight int64 // Block height when proposal was canceled
9 canceledBy address // Who canceled the proposal
10
11 executed bool // Whether the proposal has been executed
12 executedAt int64 // Timestamp when proposal was executed
13 executedHeight int64 // Block height when proposal was executed
14 executedBy address // Who executed the proposal
15
16 executable bool // Whether this proposal type supports execution
17}
18
19/* Getter methods */
20// Canceled reports whether this proposal has been marked canceled.
21//
22// Returns:
23// - bool: true when cancellation has been recorded
24func (p *ProposalActionStatus) Canceled() bool { return p.canceled }
25
26// CanceledAt returns the timestamp recorded when the proposal was canceled.
27//
28// Returns:
29// - int64: cancellation timestamp, or zero when none has been recorded
30func (p *ProposalActionStatus) CanceledAt() int64 { return p.canceledAt }
31
32// CanceledHeight returns the block height recorded when the proposal was canceled.
33//
34// Returns:
35// - int64: cancellation block height, or zero when none has been recorded
36func (p *ProposalActionStatus) CanceledHeight() int64 { return p.canceledHeight }
37
38// Executed reports whether this proposal has been marked executed.
39//
40// Returns:
41// - bool: true when execution has been recorded
42func (p *ProposalActionStatus) Executed() bool { return p.executed }
43
44// ExecutedAt returns the timestamp recorded when the proposal was executed.
45//
46// Returns:
47// - int64: execution timestamp, or zero when none has been recorded
48func (p *ProposalActionStatus) ExecutedAt() int64 { return p.executedAt }
49
50// ExecutedHeight returns the block height recorded when the proposal was executed.
51//
52// Returns:
53// - int64: execution block height, or zero when none has been recorded
54func (p *ProposalActionStatus) ExecutedHeight() int64 { return p.executedHeight }
55
56// Executable reports whether this proposal type supports execution.
57//
58// Returns:
59// - bool: true when the proposal's action can be executed
60func (p *ProposalActionStatus) Executable() bool { return p.executable }
61
62/* Setter methods */
63// SetCanceled records whether the proposal is canceled.
64//
65// Parameters:
66// - canceled: cancellation state to store
67func (p *ProposalActionStatus) SetCanceled(canceled bool) {
68 p.canceled = canceled
69}
70
71// SetCanceledAt records the timestamp associated with proposal cancellation.
72//
73// Parameters:
74// - canceledAt: cancellation timestamp to store
75func (p *ProposalActionStatus) SetCanceledAt(canceledAt int64) {
76 p.canceledAt = canceledAt
77}
78
79// SetCanceledHeight records the block height associated with proposal cancellation.
80//
81// Parameters:
82// - canceledHeight: cancellation block height to store
83func (p *ProposalActionStatus) SetCanceledHeight(canceledHeight int64) {
84 p.canceledHeight = canceledHeight
85}
86
87// SetCanceledBy records the address that canceled the proposal.
88//
89// Parameters:
90// - canceledBy: address of the actor that canceled the proposal
91func (p *ProposalActionStatus) SetCanceledBy(canceledBy address) {
92 p.canceledBy = canceledBy
93}
94
95// SetExecuted records whether the proposal is executed.
96//
97// Parameters:
98// - executed: execution state to store
99func (p *ProposalActionStatus) SetExecuted(executed bool) {
100 p.executed = executed
101}
102
103// SetExecutedAt records the timestamp associated with proposal execution.
104//
105// Parameters:
106// - executedAt: execution timestamp to store
107func (p *ProposalActionStatus) SetExecutedAt(executedAt int64) {
108 p.executedAt = executedAt
109}
110
111// SetExecutedHeight records the block height associated with proposal execution.
112//
113// Parameters:
114// - executedHeight: execution block height to store
115func (p *ProposalActionStatus) SetExecutedHeight(executedHeight int64) {
116 p.executedHeight = executedHeight
117}
118
119// SetExecutedBy records the address that executed the proposal.
120//
121// Parameters:
122// - executedBy: address of the actor that executed the proposal
123func (p *ProposalActionStatus) SetExecutedBy(executedBy address) {
124 p.executedBy = executedBy
125}
126
127// SetExecutable records whether this proposal type supports execution.
128//
129// Parameters:
130// - executable: execution capability to store for the proposal type
131func (p *ProposalActionStatus) SetExecutable(executable bool) {
132 p.executable = executable
133}
134
135// CanceledBy returns the address recorded as having canceled the proposal.
136// The value is meaningful when Canceled() is true; before then it is the
137// zero address unless a caller has explicitly stored another value.
138//
139// Returns:
140// - address: address recorded for the cancellation actor
141func (p *ProposalActionStatus) CanceledBy() address {
142 return p.canceledBy
143}
144
145// IsExecuted reports whether execution has been recorded for the proposal.
146//
147// Returns:
148// - bool: true when the proposal has been marked executed
149func (p *ProposalActionStatus) IsExecuted() bool {
150 return p.executed
151}
152
153// ExecutedBy returns the address recorded as having executed the proposal.
154// The value is meaningful when IsExecuted() is true; before then it is the
155// zero address unless a caller has explicitly stored another value.
156//
157// Returns:
158// - address: address recorded for the execution actor
159func (p *ProposalActionStatus) ExecutedBy() address {
160 return p.executedBy
161}
162
163// IsExecutable reports whether this proposal type can be executed.
164//
165// Returns:
166// - bool: true when execution is supported for the proposal type
167func (p *ProposalActionStatus) IsExecutable() bool {
168 return p.executable
169}
170
171// NewProposalActionStatus creates a new action status for a proposal.
172// Initializes the status with default values and the executable flag.
173//
174// Parameters:
175// - executable: whether this proposal type can be executed
176//
177// Returns:
178// - *ProposalActionStatus: new action status instance
179func NewProposalActionStatus(executable bool) *ProposalActionStatus {
180 return &ProposalActionStatus{
181 canceled: false, // Proposal starts as not canceled
182 executed: false, // Proposal starts as not executed
183 executable: executable, // Set based on proposal type
184 }
185}
186
187// Clone creates a deep copy of the ProposalActionStatus, or nil when the
188// receiver is nil.
189//
190// Returns:
191// - *ProposalActionStatus: independent copy of the status, or nil for a nil receiver
192func (p *ProposalActionStatus) Clone() *ProposalActionStatus {
193 if p == nil {
194 return nil
195 }
196
197 return &ProposalActionStatus{
198 canceled: p.canceled,
199 canceledAt: p.canceledAt,
200 canceledHeight: p.canceledHeight,
201 canceledBy: p.canceledBy,
202 executed: p.executed,
203 executedAt: p.executedAt,
204 executedHeight: p.executedHeight,
205 executedBy: p.executedBy,
206 executable: p.executable,
207 }
208}