Kind Realm (renderable)
Name gns
Namespace gnoswap
Exported functions 43
Module gno.land/r/gnoswap/gns
gno 0.9 halving.gno gno
⧉
1 package gns 2 3 import ( 4 gnsmath "gno.land/p/gnoswap/gnsmath/v1" 5 ) 6 7 // HalvingData stores emission data for each halving period. 8 Allowance (owner string, spender string) int64
Approve (cur interface {.seal func(); Address func() .uverse.address; IsCode func() bool; IsCurrent func() bool; IsEphemeral func() bool; IsUser func() bool; IsUserCall func() bool; IsUserRun func() bool; PkgPath func() string; Previous func() .uverse.realm; String func() string; Sub func(string) .uverse.realm; Subpath func() string}, spender string, amount int64)
BalanceOf (owner string) int64
CalculateMintGnsAmount (fromTimestamp int64, toTimestamp int64) int64
Decimals () int
GetAmountPerSecondPerHalvingYear (year int64) int64
GetCurrentYear () int64
GetEmissionAccumulatedAmountByTimestamp (timestamp int64) int64
GetEmissionAmountPerSecondByTimestamp (timestamp int64) int64
GetEmissionAmountPerSecondInRange (fromTime int64, toTime int64) ([]int64, []int64)
GetEmissionCreatedHeight () int64
GetEmissionEndTimestamp () int64
GetEmissionLeftAmountByTimestamp (timestamp int64) int64
GetEmissionStartTimestamp () int64
GetHalvingAmountsPerYear (year int64) int64
GetHalvingInfo () *gno.land/r/gnoswap/gns.HalvingData
GetHalvingYear (timestamp int64) int64
GetHalvingYearEndTimestamp (year int64) int64
GetHalvingYearInfo (timestamp int64) (int64, int64, int64)
GetHalvingYearLeftAmount (year int64) int64
GetHalvingYearMaxAmount (year int64) int64
GetHalvingYearMintedAmount (year int64) int64
GetHalvingYearStartTimestamp (year int64) int64
GetInitialMintAmount () int64
GetMaxEmissionAmount () int64
GetMaximumSupply () int64
InitEmissionState (cur interface {.seal func(); Address func() .uverse.address; IsCode func() bool; IsCurrent func() bool; IsEphemeral func() bool; IsUser func() bool; IsUserCall func() bool; IsUserRun func() bool; PkgPath func() string; Previous func() .uverse.realm; String func() string; Sub func(string) .uverse.realm; Subpath func() string}, createdHeight int64, startTimestamp int64)
IsEmissionActive () bool
IsEmissionEnded () bool
IsEmissionInitialized () bool
KnownAccounts () int
LastMintedTimestamp () int64
LeftEmissionAmount () int64
MintedEmissionAmount () int64
MintGns (cur interface {.seal func(); Address func() .uverse.address; IsCode func() bool; IsCurrent func() bool; IsEphemeral func() bool; IsUser func() bool; IsUserCall func() bool; IsUserRun func() bool; PkgPath func() string; Previous func() .uverse.realm; String func() string; Sub func(string) .uverse.realm; Subpath func() string}, address string) int64
Name () string
NewEmissionState (createdHeight int64, startTimestamp int64) *gno.land/r/gnoswap/gns.EmissionState
NewHalvingData (startTimestamp int64) *gno.land/r/gnoswap/gns.HalvingData
Render (path string) string
Symbol () string
TotalSupply () int64
Transfer (cur interface {.seal func(); Address func() .uverse.address; IsCode func() bool; IsCurrent func() bool; IsEphemeral func() bool; IsUser func() bool; IsUserCall func() bool; IsUserRun func() bool; PkgPath func() string; Previous func() .uverse.realm; String func() string; Sub func(string) .uverse.realm; Subpath func() string}, to string, amount int64)
TransferFrom (cur interface {.seal func(); Address func() .uverse.address; IsCode func() bool; IsCurrent func() bool; IsEphemeral func() bool; IsUser func() bool; IsUserCall func() bool; IsUserRun func() bool; PkgPath func() string; Previous func() .uverse.realm; String func() string; Sub func(string) .uverse.realm; Subpath func() string}, from string, to string, amount int64)
Signatures reconstructed verbatim from vm/qfuncs — interface params keep their inline definitions.
vm/qrender output, sanitized (docs/render-security.md) and displayed in an empty-sandbox iframe — scripts, forms and popups cannot run. Links stay inert in-preview; right-click to open.
// Contains timestamps, amounts, and rates for the 12-year emission schedule.
9 type HalvingData struct {
10 startTimestamps [] int64
11 endTimestamps [] int64
12 maxAmount [] int64
13 leftAmount [] int64
14 mintedAmount [] int64
15 amountPerSecond [] int64
16 }
17
18 // getStartTimestamp returns the start timestamp for the specified halving year.
19 // Returns 0 if year is invalid.
20 func (h *HalvingData) getStartTimestamp(year int64 ) int64 {
21 if validYear(year) != nil {
22 return 0
23 }
24
25 return h.startTimestamps[year- 1 ]
26 }
27
28 // getEndTimestamp returns the end timestamp for the specified halving year.
29 // Returns 0 if year is invalid.
30 func (h *HalvingData) getEndTimestamp(year int64 ) int64 {
31 if validYear(year) != nil {
32 return 0
33 }
34
35 return h.endTimestamps[year- 1 ]
36 }
37
38 // getMaxAmount returns the maximum emission amount for the specified halving year.
39 // Returns 0 if year is invalid.
40 func (h *HalvingData) getMaxAmount(year int64 ) int64 {
41 if validYear(year) != nil {
42 return 0
43 }
44
45 return h.maxAmount[year- 1 ]
46 }
47
48 // getMintedAmount returns the minted emission amount for the specified halving year.
49 func (h *HalvingData) getMintedAmount(year int64 ) int64 {
50 if validYear(year) != nil {
51 return 0
52 }
53 return h.mintedAmount[year- 1 ]
54 }
55
56 // getLeftAmount returns the remaining emission amount for the specified halving year.
57 func (h *HalvingData) getLeftAmount(year int64 ) int64 {
58 if validYear(year) != nil {
59 return 0
60 }
61 return h.leftAmount[year- 1 ]
62 }
63
64 // getAmountPerSecond returns the emission rate per second for the specified halving year.
65 // Returns 0 if year is invalid.
66 func (h *HalvingData) getAmountPerSecond(year int64 ) int64 {
67 if validYear(year) != nil {
68 return 0
69 }
70 return h.amountPerSecond[year- 1 ]
71 }
72
73 // setStartTimestamp sets the start timestamp for the specified halving year.
74 // Returns error if year is invalid.
75 func (h *HalvingData) setStartTimestamp(year int64 , timestamp int64 ) error {
76 err := validYear(year)
77 if err != nil {
78 return err
79 }
80
81 h.startTimestamps[year- 1 ] = timestamp
82
83 return nil
84 }
85
86 // setEndTimestamp sets the end timestamp for the specified halving year.
87 // Returns error if year is invalid.
88 func (h *HalvingData) setEndTimestamp(year int64 , timestamp int64 ) error {
89 err := validYear(year)
90 if err != nil {
91 return err
92 }
93
94 h.endTimestamps[year- 1 ] = timestamp
95
96 return nil
97 }
98
99 // setMaxAmount sets the maximum emission amount for the specified halving year.
100 // Returns error if year is invalid.
101 func (h *HalvingData) setMaxAmount(year, amount int64 ) error {
102 err := validYear(year)
103 if err != nil {
104 return err
105 }
106
107 h.maxAmount[year- 1 ] = amount
108
109 return nil
110 }
111
112 // setMintedAmount sets the minted amount for the specified halving year.
113 // Returns error if year is invalid.
114 func (h *HalvingData) setMintedAmount(year, amount int64 ) error {
115 err := validYear(year)
116 if err != nil {
117 return err
118 }
119
120 h.mintedAmount[year- 1 ] = amount
121
122 return nil
123 }
124
125 // setLeftAmount sets the remaining amount for the specified halving year.
126 // Returns error if year is invalid.
127 func (h *HalvingData) setLeftAmount(year, amount int64 ) error {
128 err := validYear(year)
129 if err != nil {
130 return err
131 }
132
133 h.leftAmount[year- 1 ] = amount
134
135 return nil
136 }
137
138 // addMintedAmount adds to the minted amount for the specified halving year.
139 // Returns error if year is invalid.
140 func (h *HalvingData) addMintedAmount(year, amount int64 ) error {
141 err := validYear(year)
142 if err != nil {
143 return err
144 }
145
146 h.mintedAmount[year- 1 ] = gnsmath.SafeAddInt64(h.mintedAmount[year- 1 ], amount)
147
148 return nil
149 }
150
151 // setAmountPerSecond sets the emission rate per second for the specified halving year.
152 // Returns error if year is invalid.
153 func (h *HalvingData) setAmountPerSecond(year, amount int64 ) error {
154 err := validYear(year)
155 if err != nil {
156 return err
157 }
158
159 h.amountPerSecond[year- 1 ] = amount
160
161 return nil
162 }
163
164 // Clone creates a deep copy of all halving schedule slices.
165 //
166 // Returns:
167 // - halvingData: independent copy of timestamps, allocations, minted amounts, remaining amounts, and rates
168 func (h *HalvingData) Clone() *HalvingData {
169 startTimestamps := make([] int64 , len(h.startTimestamps))
170 endTimestamps := make([] int64 , len(h.endTimestamps))
171 maxAmount := make([] int64 , len(h.maxAmount))
172 leftAmount := make([] int64 , len(h.leftAmount))
173 mintedAmount := make([] int64 , len(h.mintedAmount))
174 amountPerSecond := make([] int64 , len(h.amountPerSecond))
175
176 copy(startTimestamps, h.startTimestamps)
177 copy(endTimestamps, h.endTimestamps)
178 copy(maxAmount, h.maxAmount)
179 copy(leftAmount, h.leftAmount)
180 copy(mintedAmount, h.mintedAmount)
181 copy(amountPerSecond, h.amountPerSecond)
182
183 return &HalvingData{
184 startTimestamps: startTimestamps,
185 endTimestamps: endTimestamps,
186 maxAmount: maxAmount,
187 leftAmount: leftAmount,
188 mintedAmount: mintedAmount,
189 amountPerSecond: amountPerSecond,
190 }
191 }
192
193 // NewHalvingData creates a 12-year HalvingData emission schedule starting at
194 // startTimestamp. Each year receives configured timestamps, allocation, zero
195 // minted amount, remaining allocation, and an integer-truncated per-second rate.
196 //
197 // Parameters:
198 // - startTimestamp: Unix timestamp at which halving year 1 begins
199 //
200 // Returns:
201 // - halvingData: initialized schedule with years [1, 12] and their derived values
202 func NewHalvingData(startTimestamp int64 ) *HalvingData {
203 halvingData := &HalvingData{
204 startTimestamps: make([] int64 , HALVING_END_YEAR),
205 endTimestamps: make([] int64 , HALVING_END_YEAR),
206 maxAmount: make([] int64 , HALVING_END_YEAR),
207 leftAmount: make([] int64 , HALVING_END_YEAR),
208 mintedAmount: make([] int64 , HALVING_END_YEAR),
209 amountPerSecond: make([] int64 , HALVING_END_YEAR),
210 }
211
212 for year := HALVING_START_YEAR; year <= HALVING_END_YEAR; year++ {
213 yearStartTimestamp := startTimestamp + (SECONDS_IN_YEAR * (year - 1 ))
214 yearEndTimestamp := yearStartTimestamp + SECONDS_IN_YEAR - 1
215 yearDistributionAmount := GetHalvingAmountsPerYear(year)
216 yearAmountPerSecond := yearDistributionAmount / SECONDS_IN_YEAR
217
218 halvingData.setStartTimestamp(year, yearStartTimestamp)
219 halvingData.setEndTimestamp(year, yearEndTimestamp)
220 halvingData.setMaxAmount(year, yearDistributionAmount)
221 halvingData.setMintedAmount(year, 0 )
222 halvingData.setAmountPerSecond(year, yearAmountPerSecond)
223 halvingData.setLeftAmount(year, yearDistributionAmount)
224 }
225
226 return halvingData
227 }
228