mirror of
https://github.com/onsonr/sonr.git
synced 2025-03-10 21:09:11 +00:00
136 lines
5.1 KiB
Go
136 lines
5.1 KiB
Go
|
package e2e
|
||
|
|
||
|
import (
|
||
|
"context"
|
||
|
"fmt"
|
||
|
"testing"
|
||
|
|
||
|
sdk "github.com/cosmos/cosmos-sdk/types"
|
||
|
stakingtypes "github.com/cosmos/cosmos-sdk/x/staking/types"
|
||
|
"github.com/strangelove-ventures/interchaintest/v8/chain/cosmos"
|
||
|
"github.com/strangelove-ventures/interchaintest/v8/ibc"
|
||
|
"github.com/strangelove-ventures/poa"
|
||
|
"github.com/stretchr/testify/require"
|
||
|
)
|
||
|
|
||
|
func POASetPower(t *testing.T, ctx context.Context, chain *cosmos.CosmosChain, user ibc.Wallet, valoper string, power int64, flags ...string) (sdk.TxResponse, error) {
|
||
|
cmd := TxCommandBuilder(ctx, chain, []string{"tx", "poa", "set-power", valoper, fmt.Sprintf("%d", power)}, user.KeyName(), flags...)
|
||
|
return ExecuteTransaction(ctx, chain, cmd)
|
||
|
}
|
||
|
|
||
|
func POARemove(t *testing.T, ctx context.Context, chain *cosmos.CosmosChain, user ibc.Wallet, valoper string) (sdk.TxResponse, error) {
|
||
|
cmd := TxCommandBuilder(ctx, chain, []string{"tx", "poa", "remove", valoper}, user.KeyName())
|
||
|
return ExecuteTransaction(ctx, chain, cmd)
|
||
|
}
|
||
|
|
||
|
func POARemovePending(t *testing.T, ctx context.Context, chain *cosmos.CosmosChain, user ibc.Wallet, valoper string) (sdk.TxResponse, error) {
|
||
|
cmd := TxCommandBuilder(ctx, chain, []string{"tx", "poa", "remove-pending", valoper}, user.KeyName())
|
||
|
return ExecuteTransaction(ctx, chain, cmd)
|
||
|
}
|
||
|
|
||
|
func POACreatePendingValidator(
|
||
|
t *testing.T, ctx context.Context, chain *cosmos.CosmosChain, user ibc.Wallet,
|
||
|
ed25519PubKey string, moniker string, commissionRate string, commissionMaxRate string, commissionMaxChangeRate string,
|
||
|
) (sdk.TxResponse, error) {
|
||
|
file := "validator_file.json"
|
||
|
|
||
|
content := fmt.Sprintf(`{
|
||
|
"pubkey": {"@type":"/cosmos.crypto.ed25519.PubKey","key":"%s"},
|
||
|
"amount": "0%s",
|
||
|
"moniker": "%s",
|
||
|
"identity": "",
|
||
|
"website": "https://website.com",
|
||
|
"security": "security@cosmos.xyz",
|
||
|
"details": "description",
|
||
|
"commission-rate": "%s",
|
||
|
"commission-max-rate": "%s",
|
||
|
"commission-max-change-rate": "%s",
|
||
|
"min-self-delegation": "1"
|
||
|
|
||
|
}`, ed25519PubKey, chain.Config().Denom, moniker, commissionRate, commissionMaxRate, commissionMaxChangeRate)
|
||
|
|
||
|
err := chain.GetNode().WriteFile(ctx, []byte(content), file)
|
||
|
require.NoError(t, err)
|
||
|
|
||
|
filePath := fmt.Sprintf("%s/%s", chain.GetNode().HomeDir(), file)
|
||
|
cmd := TxCommandBuilder(ctx, chain, []string{"tx", "poa", "create-validator", filePath}, user.KeyName())
|
||
|
return ExecuteTransaction(ctx, chain, cmd)
|
||
|
}
|
||
|
|
||
|
func SubmitGovernanceProposalForValidatorChanges(t *testing.T, ctx context.Context, chain *cosmos.CosmosChain, user ibc.Wallet, validator string, power uint64, unsafe bool) string {
|
||
|
govAddr := "cosmos10d07y265gmmuvt4z0w9aw880jnsr700j6zn9kn"
|
||
|
|
||
|
powerMsg := []cosmos.ProtoMessage{
|
||
|
&poa.MsgSetPower{
|
||
|
Sender: govAddr,
|
||
|
ValidatorAddress: validator,
|
||
|
Power: power,
|
||
|
Unsafe: unsafe,
|
||
|
},
|
||
|
}
|
||
|
|
||
|
title := fmt.Sprintf("Update" + validator + "Power")
|
||
|
desc := fmt.Sprintf("Updating power for validator %s to %d", validator, power)
|
||
|
|
||
|
proposal, err := chain.BuildProposal(powerMsg, title, desc, desc, fmt.Sprintf(`50%s`, chain.Config().Denom), user.FormattedAddress(), false)
|
||
|
require.NoError(t, err, "error building proposal")
|
||
|
|
||
|
fmt.Printf("proposal: %+v\n", proposal)
|
||
|
|
||
|
txProp, err := chain.SubmitProposal(ctx, user.KeyName(), proposal)
|
||
|
t.Log("txProp", txProp)
|
||
|
require.NoError(t, err, "error submitting proposal")
|
||
|
|
||
|
return txProp.ProposalID
|
||
|
}
|
||
|
|
||
|
func GetPOAParams(t *testing.T, ctx context.Context, chain *cosmos.CosmosChain) poa.Params {
|
||
|
var res poa.ParamsResponse
|
||
|
ExecuteQuery(ctx, chain, []string{"query", "poa", "params"}, &res)
|
||
|
return res.Params
|
||
|
}
|
||
|
|
||
|
func GetPOAConsensusPower(t *testing.T, ctx context.Context, chain *cosmos.CosmosChain, valoperAddr string) int64 {
|
||
|
res, err := poa.NewQueryClient(chain.GetNode().GrpcConn).ConsensusPower(ctx, &poa.QueryConsensusPowerRequest{ValidatorAddress: valoperAddr})
|
||
|
require.NoError(t, err)
|
||
|
return res.ConsensusPower
|
||
|
}
|
||
|
|
||
|
func GetPOAPending(t *testing.T, ctx context.Context, chain *cosmos.CosmosChain) []poa.Validator {
|
||
|
res, err := poa.NewQueryClient(chain.GetNode().GrpcConn).PendingValidators(ctx, &poa.QueryPendingValidatorsRequest{})
|
||
|
require.NoError(t, err)
|
||
|
|
||
|
return res.Pending
|
||
|
}
|
||
|
|
||
|
func POAUpdateParams(t *testing.T, ctx context.Context, chain *cosmos.CosmosChain, user ibc.Wallet, admins []string, gracefulExit bool) (sdk.TxResponse, error) {
|
||
|
// admin1,admin2,admin3
|
||
|
adminList := ""
|
||
|
for _, admin := range admins {
|
||
|
adminList += admin + ","
|
||
|
}
|
||
|
adminList = adminList[:len(adminList)-1]
|
||
|
|
||
|
gracefulParam := "true"
|
||
|
if !gracefulExit {
|
||
|
gracefulParam = "false"
|
||
|
}
|
||
|
|
||
|
cmd := TxCommandBuilder(ctx, chain, []string{"tx", "poa", "update-params", adminList, gracefulParam}, user.KeyName())
|
||
|
return ExecuteTransaction(ctx, chain, cmd)
|
||
|
}
|
||
|
|
||
|
func POAUpdateStakingParams(t *testing.T, ctx context.Context, chain *cosmos.CosmosChain, user ibc.Wallet, sp stakingtypes.Params) (sdk.TxResponse, error) {
|
||
|
command := []string{"tx", "poa", "update-staking-params",
|
||
|
sp.UnbondingTime.String(),
|
||
|
fmt.Sprintf("%d", sp.MaxValidators),
|
||
|
fmt.Sprintf("%d", sp.MaxEntries),
|
||
|
fmt.Sprintf("%d", sp.HistoricalEntries),
|
||
|
sp.BondDenom,
|
||
|
fmt.Sprintf("%d", sp.MinCommissionRate),
|
||
|
}
|
||
|
|
||
|
cmd := TxCommandBuilder(ctx, chain, command, user.KeyName())
|
||
|
return ExecuteTransaction(ctx, chain, cmd)
|
||
|
}
|