proxy.gno
8.74 Kb · 223 lines
1package protocol_fee
2
3// DistributeProtocolFee distributes accumulated protocol fees to DevOps and
4// GovStaker, subject to the implementation's caller authorization and halt checks.
5//
6// Parameters:
7// - cur: Current realm context; callers use cross(cur) when crossing into this realm.
8//
9// Halt check: returns without distributing while the Withdraw halt scope is active.
10func DistributeProtocolFee(cur realm) {
11 getImplementation().DistributeProtocolFee(0, cur)
12}
13
14// DistributeProtocolFeeByTokenPath distributes accumulated protocol fees reserved
15// for one token path; an unreserved path has nothing to distribute.
16//
17// Parameters:
18// - cur: Current realm context; callers use cross(cur) when crossing into this realm.
19// - tokenPath: token contract path whose reserved fee balance should be distributed
20//
21// Halt check: returns without distributing while the Withdraw halt scope is active.
22func DistributeProtocolFeeByTokenPath(cur realm, tokenPath string) {
23 getImplementation().DistributeProtocolFeeByTokenPath(0, cur, tokenPath)
24}
25
26// SetDevOpsPct sets the share of protocol fees allocated to DevOps.
27//
28// Parameters:
29// - cur: Current realm context; callers use cross(cur) when crossing into this realm.
30// - pct: DevOps allocation in basis-point units, from 0 through 10000 inclusive (10000 = 100%)
31//
32// Halt check: reverts while the ProtocolFee halt scope is active.
33func SetDevOpsPct(cur realm, pct int64) {
34 getImplementation().SetDevOpsPct(0, cur, pct)
35}
36
37// SetGovStakerPct sets the share of protocol fees allocated to GovStaker.
38//
39// Parameters:
40// - cur: Current realm context; callers use cross(cur) when crossing into this realm.
41// - pct: GovStaker allocation in basis-point units, from 0 through 10000 inclusive (10000 = 100%)
42//
43// Halt check: reverts while the ProtocolFee halt scope is active.
44func SetGovStakerPct(cur realm, pct int64) {
45 getImplementation().SetGovStakerPct(0, cur, pct)
46}
47
48// AddToProtocolFee pulls an approved fee amount from an authorized protocol caller
49// into protocol-fee accounting. Authorized callers are pool, position, router,
50// and staker realms; direct transfers to this address do not register a fee.
51//
52// Parameters:
53// - cur: Current realm context; callers use cross(cur) when crossing into this realm.
54// - tokenPath: token contract path whose fee is being collected
55// - amount: non-negative fee amount in the token's base units; zero performs no transfer
56//
57// Returns:
58// - err: nil on success; errSpoofedRealm for a spoofed-realm call; errProtocolFeeHalted when protocol-fee collection is halted
59//
60// Halt check: returns errProtocolFeeHalted without transferring while the ProtocolFee halt scope is active.
61func AddToProtocolFee(cur realm, tokenPath string, amount int64) error {
62 return getImplementation().AddToProtocolFee(0, cur, tokenPath, amount)
63}
64
65// AdvanceAccrualEpoch closes the current accrual epoch and returns the new one. Fees
66// arriving from now on are bucketed under the returned epoch. Only gov/staker may call
67// it, on every stake change.
68//
69// Parameters:
70// - cur: Current realm context; callers use cross(cur) when crossing into this realm.
71//
72// Returns:
73// - epoch: newly active non-negative accrual epoch used for subsequently collected GovStaker fees
74func AdvanceAccrualEpoch(cur realm) int64 {
75 return getImplementation().AdvanceAccrualEpoch(0, cur)
76}
77
78// ConsumeAccrualBuckets returns and clears up to limit of the oldest pending buckets
79// of tokenPath as parallel epoch and amount slices. A limit of zero or less consumes
80// every pending bucket. Only gov/staker may call it.
81//
82// Parameters:
83// - cur: Current realm context; callers use cross(cur) when crossing into this realm.
84// - tokenPath: token contract path whose pending GovStaker accrual buckets are consumed
85// - limit: maximum number of oldest buckets to consume; zero or negative consumes all pending buckets
86//
87// Returns:
88// - epochs: consumed accrual epoch numbers in ascending epoch order
89// - amounts: GovStaker fee amounts corresponding positionally to epochs, in token base units
90func ConsumeAccrualBuckets(cur realm, tokenPath string, limit int) ([]int64, []int64) {
91 return getImplementation().ConsumeAccrualBuckets(0, cur, tokenPath, limit)
92}
93
94// GetDevOpsPct returns the DevOps fee allocation in basis-point units.
95//
96// Returns:
97// - pct: configured DevOps allocation from 0 through 10000 (10000 = 100%)
98func GetDevOpsPct() int64 {
99 return getImplementation().GetDevOpsPct()
100}
101
102// GetGovStakerPct returns the GovStaker fee allocation in basis-point units.
103//
104// Returns:
105// - pct: configured GovStaker allocation from 0 through 10000 (10000 = 100%)
106func GetGovStakerPct() int64 {
107 return getImplementation().GetGovStakerPct()
108}
109
110// GetAccrualEpoch returns the accrual epoch fees are currently bucketed under.
111//
112// Returns:
113// - epoch: current non-negative accrual epoch assigned to newly collected GovStaker fees
114func GetAccrualEpoch() int64 {
115 return getImplementation().GetAccrualEpoch()
116}
117
118// GetAccrualPendingTokens returns the token paths that still own pending accrual buckets.
119//
120// Returns:
121// - tokenPaths: token contract paths with at least one pending GovStaker accrual bucket
122func GetAccrualPendingTokens() []string {
123 return cloneStringSlice(getImplementation().GetAccrualPendingTokens())
124}
125
126// GetAccrualBuckets returns up to limit of the oldest pending buckets of tokenPath
127// without clearing them. A limit of zero or less returns every pending bucket.
128//
129// Parameters:
130// - tokenPath: token contract path whose pending GovStaker accrual buckets are queried
131// - limit: maximum number of oldest buckets to return; zero or negative returns all pending buckets
132//
133// Returns:
134// - epochs: selected accrual epoch numbers in ascending epoch order
135// - amounts: GovStaker fee amounts corresponding positionally to epochs, in token base units
136func GetAccrualBuckets(tokenPath string, limit int) ([]int64, []int64) {
137 epochs, amounts := getImplementation().GetAccrualBuckets(tokenPath, limit)
138 return cloneInt64Slice(epochs), cloneInt64Slice(amounts)
139}
140
141// GetReservedTokens returns token paths reserved for distribution.
142//
143// Returns:
144// - tokenPaths: token paths reserved for distribution
145func GetReservedTokens() []string {
146 return cloneStringSlice(getImplementation().GetReservedTokens())
147}
148
149// GetAccuTransfersToGovStaker returns accumulated transfers to GovStaker.
150//
151// Returns:
152// - transfers: map of token paths to accumulated amounts
153func GetAccuTransfersToGovStaker() map[string]int64 {
154 return cloneStringInt64Map(getImplementation().GetAccuTransfersToGovStaker())
155}
156
157// GetAccuTransfersToDevOps returns accumulated transfers to DevOps.
158//
159// Returns:
160// - transfers: map of token paths to accumulated amounts
161func GetAccuTransfersToDevOps() map[string]int64 {
162 return cloneStringInt64Map(getImplementation().GetAccuTransfersToDevOps())
163}
164
165// GetAccuTransferToGovStakerByTokenPath returns accumulated GovStaker transfer for a token.
166//
167// Parameters:
168// - tokenPath: path of the token
169//
170// Returns:
171// - amount: accumulated transfer amount
172func GetAccuTransferToGovStakerByTokenPath(tokenPath string) int64 {
173 return getImplementation().GetAccuTransferToGovStakerByTokenPath(tokenPath)
174}
175
176// GetAccuTransferToDevOpsByTokenPath returns accumulated DevOps transfer for a token.
177//
178// Parameters:
179// - tokenPath: path of the token
180//
181// Returns:
182// - amount: accumulated transfer amount
183func GetAccuTransferToDevOpsByTokenPath(tokenPath string) int64 {
184 return getImplementation().GetAccuTransferToDevOpsByTokenPath(tokenPath)
185}
186
187// GetActualDistributedToGovStaker returns actual transfers completed to GovStaker.
188//
189// Returns:
190// - transfers: map of token paths to actual distributed amounts
191func GetActualDistributedToGovStaker() map[string]int64 {
192 return cloneStringInt64Map(getImplementation().GetActualDistributedToGovStaker())
193}
194
195// GetActualDistributedToDevOps returns actual transfers completed to DevOps.
196//
197// Returns:
198// - transfers: map of token paths to actual distributed amounts
199func GetActualDistributedToDevOps() map[string]int64 {
200 return cloneStringInt64Map(getImplementation().GetActualDistributedToDevOps())
201}
202
203// GetActualDistributedToGovStakerByTokenPath returns actual GovStaker transfer for a token.
204//
205// Parameters:
206// - tokenPath: path of the token
207//
208// Returns:
209// - amount: actual distributed amount for the token
210func GetActualDistributedToGovStakerByTokenPath(tokenPath string) int64 {
211 return getImplementation().GetActualDistributedToGovStakerByTokenPath(tokenPath)
212}
213
214// GetActualDistributedToDevOpsByTokenPath returns actual DevOps transfer for a token.
215//
216// Parameters:
217// - tokenPath: path of the token
218//
219// Returns:
220// - amount: actual distributed amount for the token
221func GetActualDistributedToDevOpsByTokenPath(tokenPath string) int64 {
222 return getImplementation().GetActualDistributedToDevOpsByTokenPath(tokenPath)
223}