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  }