code.vegaprotocol.io/vega@v0.79.0/core/governance/netparams.go (about) 1 // Copyright (C) 2023 Gobalsky Labs Limited 2 // 3 // This program is free software: you can redistribute it and/or modify 4 // it under the terms of the GNU Affero General Public License as 5 // published by the Free Software Foundation, either version 3 of the 6 // License, or (at your option) any later version. 7 // 8 // This program is distributed in the hope that it will be useful, 9 // but WITHOUT ANY WARRANTY; without even the implied warranty of 10 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 11 // GNU Affero General Public License for more details. 12 // 13 // You should have received a copy of the GNU Affero General Public License 14 // along with this program. If not, see <http://www.gnu.org/licenses/>. 15 16 package governance 17 18 import ( 19 "errors" 20 21 "code.vegaprotocol.io/vega/core/netparams" 22 "code.vegaprotocol.io/vega/core/types" 23 ) 24 25 var ( 26 ErrEmptyNetParamKey = errors.New("empty network parameter key") 27 ErrEmptyNetParamValue = errors.New("empty network parameter value") 28 ) 29 30 func (e *Engine) getNewSpotMarketProposalParameters() *types.ProposalParameters { 31 return e.getProposalParametersFromNetParams( 32 netparams.GovernanceProposalMarketMinClose, 33 netparams.GovernanceProposalMarketMaxClose, 34 netparams.GovernanceProposalMarketMinEnact, 35 netparams.GovernanceProposalMarketMaxEnact, 36 netparams.GovernanceProposalMarketRequiredParticipation, 37 netparams.GovernanceProposalMarketRequiredMajority, 38 netparams.GovernanceProposalMarketMinProposerBalance, 39 netparams.GovernanceProposalMarketMinVoterBalance, 40 "0", 41 "0", 42 "0", 43 ) 44 } 45 46 func (e *Engine) getNewMarketProposalParameters() *types.ProposalParameters { 47 return e.getProposalParametersFromNetParams( 48 netparams.GovernanceProposalMarketMinClose, 49 netparams.GovernanceProposalMarketMaxClose, 50 netparams.GovernanceProposalMarketMinEnact, 51 netparams.GovernanceProposalMarketMaxEnact, 52 netparams.GovernanceProposalMarketRequiredParticipation, 53 netparams.GovernanceProposalMarketRequiredMajority, 54 netparams.GovernanceProposalMarketMinProposerBalance, 55 netparams.GovernanceProposalMarketMinVoterBalance, 56 "0", 57 "0", 58 "0", 59 ) 60 } 61 62 func (e *Engine) getUpdateMarketProposalParameters() *types.ProposalParameters { 63 return e.getProposalParametersFromNetParams( 64 netparams.GovernanceProposalUpdateMarketMinClose, 65 netparams.GovernanceProposalUpdateMarketMaxClose, 66 netparams.GovernanceProposalUpdateMarketMinEnact, 67 netparams.GovernanceProposalUpdateMarketMaxEnact, 68 netparams.GovernanceProposalUpdateMarketRequiredParticipation, 69 netparams.GovernanceProposalUpdateMarketRequiredMajority, 70 netparams.GovernanceProposalUpdateMarketMinProposerBalance, 71 netparams.GovernanceProposalUpdateMarketMinVoterBalance, 72 netparams.GovernanceProposalUpdateMarketRequiredParticipationLP, 73 netparams.GovernanceProposalUpdateMarketRequiredMajorityLP, 74 netparams.GovernanceProposalUpdateMarketMinProposerEquityLikeShare, 75 ) 76 } 77 78 func (e *Engine) getUpdateSpotMarketProposalParameters() *types.ProposalParameters { 79 return e.getProposalParametersFromNetParams( 80 netparams.GovernanceProposalUpdateMarketMinClose, 81 netparams.GovernanceProposalUpdateMarketMaxClose, 82 netparams.GovernanceProposalUpdateMarketMinEnact, 83 netparams.GovernanceProposalUpdateMarketMaxEnact, 84 netparams.GovernanceProposalUpdateMarketRequiredParticipation, 85 netparams.GovernanceProposalUpdateMarketRequiredMajority, 86 netparams.GovernanceProposalUpdateMarketMinProposerBalance, 87 netparams.GovernanceProposalUpdateMarketMinVoterBalance, 88 netparams.GovernanceProposalUpdateMarketRequiredParticipationLP, 89 netparams.GovernanceProposalUpdateMarketRequiredMajorityLP, 90 netparams.GovernanceProposalUpdateMarketMinProposerEquityLikeShare, 91 ) 92 } 93 94 // getUpdatetMarketStateProposalParameters is reusing the net params defined for market update! 95 func (e *Engine) getUpdateMarketStateProposalParameters() *types.ProposalParameters { 96 return e.getProposalParametersFromNetParams(netparams.GovernanceProposalUpdateMarketMinClose, 97 netparams.GovernanceProposalUpdateMarketMaxClose, 98 netparams.GovernanceProposalUpdateMarketMinEnact, 99 netparams.GovernanceProposalUpdateMarketMaxEnact, 100 netparams.GovernanceProposalUpdateMarketRequiredParticipation, 101 netparams.GovernanceProposalUpdateMarketRequiredMajority, 102 netparams.GovernanceProposalUpdateMarketMinProposerBalance, 103 netparams.GovernanceProposalUpdateMarketMinVoterBalance, 104 netparams.GovernanceProposalUpdateMarketRequiredParticipationLP, 105 netparams.GovernanceProposalUpdateMarketRequiredMajorityLP, 106 netparams.GovernanceProposalUpdateMarketMinProposerEquityLikeShare, 107 ) 108 } 109 110 func (e *Engine) getReferralProgramNetworkParameters() *types.ProposalParameters { 111 return e.getProposalParametersFromNetParams( 112 netparams.GovernanceProposalReferralProgramMinClose, 113 netparams.GovernanceProposalReferralProgramMaxClose, 114 netparams.GovernanceProposalReferralProgramMinEnact, 115 netparams.GovernanceProposalReferralProgramMaxEnact, 116 netparams.GovernanceProposalReferralProgramRequiredParticipation, 117 netparams.GovernanceProposalReferralProgramRequiredMajority, 118 netparams.GovernanceProposalReferralProgramMinProposerBalance, 119 netparams.GovernanceProposalReferralProgramMinVoterBalance, 120 "0", 121 "0", 122 "0", 123 ) 124 } 125 126 func (e *Engine) getVolumeDiscountProgramNetworkParameters() *types.ProposalParameters { 127 return e.getProposalParametersFromNetParams( 128 netparams.GovernanceProposalVolumeDiscountProgramMinClose, 129 netparams.GovernanceProposalVolumeDiscountProgramMaxClose, 130 netparams.GovernanceProposalVolumeDiscountProgramMinEnact, 131 netparams.GovernanceProposalVolumeDiscountProgramMaxEnact, 132 netparams.GovernanceProposalVolumeDiscountProgramRequiredParticipation, 133 netparams.GovernanceProposalVolumeDiscountProgramRequiredMajority, 134 netparams.GovernanceProposalVolumeDiscountProgramMinProposerBalance, 135 netparams.GovernanceProposalVolumeDiscountProgramMinVoterBalance, 136 "0", 137 "0", 138 "0", 139 ) 140 } 141 142 func (e *Engine) getVolumeRebateProgramNetworkParameters() *types.ProposalParameters { 143 return e.getProposalParametersFromNetParams( 144 netparams.GovernanceProposalVolumeRebateProgramMinClose, 145 netparams.GovernanceProposalVolumeRebateProgramMaxClose, 146 netparams.GovernanceProposalVolumeRebateProgramMinEnact, 147 netparams.GovernanceProposalVolumeRebateProgramMaxEnact, 148 netparams.GovernanceProposalVolumeRebateProgramRequiredParticipation, 149 netparams.GovernanceProposalVolumeRebateProgramRequiredMajority, 150 netparams.GovernanceProposalVolumeRebateProgramMinProposerBalance, 151 netparams.GovernanceProposalVolumeRebateProgramMinVoterBalance, 152 "0", 153 "0", 154 "0", 155 ) 156 } 157 158 func (e *Engine) getAutomaticPurchaseConfigNetworkParameters() *types.ProposalParameters { 159 return e.getProposalParametersFromNetParams( 160 netparams.GovernanceProposalAutomatedPurchaseConfigMinClose, 161 netparams.GovernanceProposalAutomatedPurchaseConfigMaxClose, 162 netparams.GovernanceProposalAutomatedPurchaseConfigMinEnact, 163 netparams.GovernanceProposalAutomatedPurchaseConfigMaxEnact, 164 netparams.GovernanceProposalAutomatedPurchaseConfigRequiredParticipation, 165 netparams.GovernanceProposalAutomatedPurchaseConfigRequiredMajority, 166 netparams.GovernanceProposalAutomatedPurchaseConfigMinProposerBalance, 167 netparams.GovernanceProposalAutomatedPurchaseConfigMinVoterBalance, 168 "0", 169 "0", 170 "0", 171 ) 172 } 173 174 func (e *Engine) getNewAssetProposalParameters() *types.ProposalParameters { 175 return e.getProposalParametersFromNetParams( 176 netparams.GovernanceProposalAssetMinClose, 177 netparams.GovernanceProposalAssetMaxClose, 178 netparams.GovernanceProposalAssetMinEnact, 179 netparams.GovernanceProposalAssetMaxEnact, 180 netparams.GovernanceProposalAssetRequiredParticipation, 181 netparams.GovernanceProposalAssetRequiredMajority, 182 netparams.GovernanceProposalAssetMinProposerBalance, 183 netparams.GovernanceProposalAssetMinVoterBalance, 184 "0", 185 "0", 186 "0", 187 ) 188 } 189 190 func (e *Engine) getUpdateAssetProposalParameters() *types.ProposalParameters { 191 return e.getProposalParametersFromNetParams( 192 netparams.GovernanceProposalUpdateAssetMinClose, 193 netparams.GovernanceProposalUpdateAssetMaxClose, 194 netparams.GovernanceProposalUpdateAssetMinEnact, 195 netparams.GovernanceProposalUpdateAssetMaxEnact, 196 netparams.GovernanceProposalUpdateAssetRequiredParticipation, 197 netparams.GovernanceProposalUpdateAssetRequiredMajority, 198 netparams.GovernanceProposalUpdateAssetMinProposerBalance, 199 netparams.GovernanceProposalUpdateAssetMinVoterBalance, 200 "0", 201 "0", 202 "0", 203 ) 204 } 205 206 func (e *Engine) getUpdateNetworkParameterProposalParameters() *types.ProposalParameters { 207 return e.getProposalParametersFromNetParams( 208 netparams.GovernanceProposalUpdateNetParamMinClose, 209 netparams.GovernanceProposalUpdateNetParamMaxClose, 210 netparams.GovernanceProposalUpdateNetParamMinEnact, 211 netparams.GovernanceProposalUpdateNetParamMaxEnact, 212 netparams.GovernanceProposalUpdateNetParamRequiredParticipation, 213 netparams.GovernanceProposalUpdateNetParamRequiredMajority, 214 netparams.GovernanceProposalUpdateNetParamMinProposerBalance, 215 netparams.GovernanceProposalUpdateNetParamMinVoterBalance, 216 "0", 217 "0", 218 "0", 219 ) 220 } 221 222 func (e *Engine) getNewFreeformProposalParameters() *types.ProposalParameters { 223 return e.getProposalParametersFromNetParams( 224 netparams.GovernanceProposalFreeformMinClose, 225 netparams.GovernanceProposalFreeformMaxClose, 226 "0s", 227 "0s", 228 netparams.GovernanceProposalFreeformRequiredParticipation, 229 netparams.GovernanceProposalFreeformRequiredMajority, 230 netparams.GovernanceProposalFreeformMinProposerBalance, 231 netparams.GovernanceProposalFreeformMinVoterBalance, 232 "0", 233 "0", 234 "0", 235 ) 236 } 237 238 func (e *Engine) getNewTransferProposalParameters() *types.ProposalParameters { 239 return e.getProposalParametersFromNetParams( 240 netparams.GovernanceProposalTransferMinClose, 241 netparams.GovernanceProposalTransferMaxClose, 242 netparams.GovernanceProposalAssetMinEnact, 243 netparams.GovernanceProposalAssetMaxEnact, 244 netparams.GovernanceProposalTransferRequiredParticipation, 245 netparams.GovernanceProposalTransferRequiredMajority, 246 netparams.GovernanceProposalTransferMinProposerBalance, 247 netparams.GovernanceProposalTransferMinVoterBalance, 248 "0", 249 "0", 250 "0", 251 ) 252 } 253 254 func (e *Engine) getProposalParametersFromNetParams( 255 minCloseKey, maxCloseKey, minEnactKey, maxEnactKey, requiredParticipationKey, 256 requiredMajorityKey, minProposerBalanceKey, minVoterBalanceKey, 257 requiredParticipationLPKey, requiredMajorityLPKey, minEquityLikeShareKey string, 258 ) *types.ProposalParameters { 259 pp := types.ProposalParameters{} 260 pp.MinClose, _ = e.netp.GetDuration(minCloseKey) 261 pp.MaxClose, _ = e.netp.GetDuration(maxCloseKey) 262 pp.MinEnact, _ = e.netp.GetDuration(minEnactKey) 263 pp.MaxEnact, _ = e.netp.GetDuration(maxEnactKey) 264 pp.RequiredParticipation, _ = e.netp.GetDecimal(requiredParticipationKey) 265 pp.RequiredMajority, _ = e.netp.GetDecimal(requiredMajorityKey) 266 pp.MinProposerBalance, _ = e.netp.GetUint(minProposerBalanceKey) 267 pp.MinVoterBalance, _ = e.netp.GetUint(minVoterBalanceKey) 268 pp.RequiredParticipationLP, _ = e.netp.GetDecimal(requiredParticipationLPKey) 269 pp.RequiredMajorityLP, _ = e.netp.GetDecimal(requiredMajorityLPKey) 270 pp.MinEquityLikeShare, _ = e.netp.GetDecimal(minEquityLikeShareKey) 271 return &pp 272 } 273 274 func validateNetworkParameterUpdate( 275 netp NetParams, np *types.NetworkParameter, 276 ) (types.ProposalError, error) { 277 if len(np.Key) <= 0 { 278 return types.ProposalErrorNetworkParameterInvalidKey, ErrEmptyNetParamKey 279 } 280 281 if len(np.Value) <= 0 { 282 return types.ProposalErrorNetworkParameterInvalidValue, ErrEmptyNetParamValue 283 } 284 285 // so we seems to just need to call on validate in here. 286 // no need to know what's the parameter really or anything else 287 var ( 288 perr = types.ProposalErrorUnspecified 289 err = netp.Validate(np.Key, np.Value) 290 ) 291 if err != nil { 292 perr = types.ProposalErrorNetworkParameterValidationFailed 293 } 294 295 return perr, err 296 }