Skip to content

Commit

Permalink
Add staking param query utility & LSM params update process on LSM e2…
Browse files Browse the repository at this point in the history
…e test
  • Loading branch information
jstr1121 committed Jul 18, 2023
1 parent ef4ed7d commit 87fade8
Show file tree
Hide file tree
Showing 3 changed files with 96 additions and 4 deletions.
43 changes: 39 additions & 4 deletions tests/e2e/e2e_lsm_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -7,20 +7,55 @@ import (
"time"

sdk "github.com/cosmos/cosmos-sdk/types"
gov "github.com/cosmos/cosmos-sdk/x/gov/types"
paramtypes "github.com/cosmos/cosmos-sdk/x/params/types/proposal"
)

func (s *IntegrationTestSuite) testLSM() {
// TODO: Set parameters (global liquid staking cap, validator liquid staking cap, validator bond factor)
chainEndpoint := fmt.Sprintf("http://%s", s.valResources[s.chainA.id][0].GetHostPort("1317/tcp"))

validatorA := s.chainA.validators[0]
// validatorB := s.chainA.validators[1]
validatorAAddr := validatorA.keyInfo.GetAddress()
// validatorBAddr := validatorB.keyInfo.GetAddress()

validatorAddressA := sdk.ValAddress(validatorAAddr).String()
// validatorAddressB := sdk.ValAddress(validatorBAddr).String()

// Set parameters (global liquid staking cap, validator liquid staking cap, validator bond factor)
s.writeLiquidStakingParamsUpdateProposal(s.chainA)
submitGovFlags := []string{"param-change", configFile(proposalLSMParamUpdateFilename)}
depositGovFlags := []string{strconv.Itoa(proposalCounter), depositAmount.String()}
voteGovFlags := []string{strconv.Itoa(proposalCounter), "yes"}

// gov proposing LSM parameters (global liquid staking cap, validator liquid staking cap, validator bond factor)
s.T().Logf("Proposal number: %d", proposalCounter)
s.T().Logf("Submitting, deposit and vote legacy Gov Proposal: Set parameters (global liquid staking cap, validator liquid staking cap, validator bond factor)")
s.runGovProcess(chainEndpoint, validatorAAddr.String(), proposalCounter, paramtypes.ProposalTypeChange, submitGovFlags, depositGovFlags, voteGovFlags, "vote", false)

// query the proposal status and new fee
s.Require().Eventually(
func() bool {
proposal, err := queryGovProposal(chainEndpoint, proposalCounter)
s.Require().NoError(err)
return proposal.GetProposal().Status == gov.StatusPassed
},
15*time.Second,
5*time.Second,
)

s.Require().Eventually(
func() bool {
stakingParams, err := queryStakingParams(chainEndpoint)
s.T().Logf("After LSM parameters update proposal")
s.Require().NoError(err)

s.Require().Equal(stakingParams.Params.GlobalLiquidStakingCap, sdk.NewDecWithPrec(30, 2))
s.Require().Equal(stakingParams.Params.ValidatorLiquidStakingCap, sdk.NewDecWithPrec(100, 2))
s.Require().Equal(stakingParams.Params.ValidatorBondFactor, sdk.NewDec(-1))

return true
},
15*time.Second,
5*time.Second,
)
delegatorAddress := s.chainA.genesisAccounts[2].keyInfo.GetAddress().String()

fees := sdk.NewCoin(uatomDenom, sdk.NewInt(1))
Expand Down
43 changes: 43 additions & 0 deletions tests/e2e/e2e_setup_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -72,6 +72,7 @@ const (
proposalCommunitySpendFilename = "proposal_community_spend.json"
proposalAddConsumerChainFilename = "proposal_add_consumer.json"
proposalRemoveConsumerChainFilename = "proposal_remove_consumer.json"
proposalLSMParamUpdateFilename = "proposal_lsm_param_update.json"

hermesBinary = "hermes"
hermesConfigWithGasPrices = "/root/.hermes/config.toml"
Expand Down Expand Up @@ -929,6 +930,48 @@ func (s *IntegrationTestSuite) writeAddRemoveConsumerProposals(c *chain, consume
s.Require().NoError(err)
}

func (s *IntegrationTestSuite) writeLiquidStakingParamsUpdateProposal(c *chain) {
type ParamInfo struct {
Subspace string `json:"subspace"`
Key string `json:"key"`
Value sdk.Dec `json:"value"`
}

type ParamChangeMessage struct {
Title string `json:"title"`
Description string `json:"description"`
Changes []ParamInfo `json:"changes"`
Deposit string `json:"deposit"`
}

paramChangeProposalBody, err := json.MarshalIndent(ParamChangeMessage{
Title: "liquid staking params update",
Description: "liquid staking params update",
Changes: []ParamInfo{
{
Subspace: "staking",
Key: "GlobalLiquidStakingCap",
Value: sdk.NewDecWithPrec(30, 2), // 30%
},
{
Subspace: "staking",
Key: "ValidatorLiquidStakingCap",
Value: sdk.NewDecWithPrec(100, 2), // 100%
},
{
Subspace: "staking",
Key: "ValidatorBondFactor",
Value: sdk.NewDec(-1), // -1
},
},
Deposit: "1000uatom",
}, "", " ")
s.Require().NoError(err)

err = writeFile(filepath.Join(c.validators[0].configDir(), "config", proposalLSMParamUpdateFilename), paramChangeProposalBody)
s.Require().NoError(err)
}

func configFile(filename string) string {
filepath := filepath.Join(gaiaConfigPath, filename)
return filepath
Expand Down
14 changes: 14 additions & 0 deletions tests/e2e/query.go
Original file line number Diff line number Diff line change
Expand Up @@ -74,6 +74,20 @@ func queryGaiaAllBalances(endpoint, addr string) (sdk.Coins, error) {
return balancesResp.Balances, nil
}

func queryStakingParams(endpoint string) (stakingtypes.QueryParamsResponse, error) {
body, err := httpGet(fmt.Sprintf("%s/cosmos/staking/v1beta1/params", endpoint))
if err != nil {
return stakingtypes.QueryParamsResponse{}, fmt.Errorf("failed to execute HTTP request: %w", err)
}

var params stakingtypes.QueryParamsResponse
if err := cdc.UnmarshalJSON(body, &params); err != nil {
return stakingtypes.QueryParamsResponse{}, err
}

return params, nil
}

func queryGlobalFeeParams(endpoint string) (types.QueryParamsResponse, error) {
body, err := httpGet(fmt.Sprintf("%s/gaia/globalfee/v1beta1/params", endpoint))
if err != nil {
Expand Down

0 comments on commit 87fade8

Please sign in to comment.