Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

feat(e2e): manage ica from gov module #1843

Merged
merged 35 commits into from
Dec 14, 2022
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
35 commits
Select commit Hold shift + click to select a range
983f060
ica gov proposal
Pantani Oct 24, 2022
0f90dfd
Merge branch 'main' into feat/e2e-test-gov-ica
Pantani Oct 24, 2022
4cba59e
Merge branch 'main' into feat/e2e-test-gov-ica
Pantani Oct 25, 2022
4e8526b
test clean up
Pantani Oct 25, 2022
fb95f50
Merge branch 'main' into feat/e2e-test-gov-ica
Pantani Oct 25, 2022
511e745
gov ica tests
Pantani Oct 26, 2022
11e4477
create proposal method to avoid global var
Pantani Oct 26, 2022
3290dc3
Merge branch 'main' into feat/e2e-test-gov-ica
Pantani Oct 26, 2022
cda0a4f
improve subtests scope
Pantani Oct 27, 2022
ba48f91
Merge branch 'main' into feat/e2e-test-gov-ica
Pantani Oct 27, 2022
30a2dd6
improve code readbility
Pantani Oct 31, 2022
34eb6ba
Merge remote-tracking branch 'origin/main' into feat/e2e-test-gov-ica
Pantani Oct 31, 2022
00743b9
fix test and remove hardcoded JSON file name
Pantani Oct 31, 2022
5e5f501
fix tests issues
Pantani Nov 1, 2022
4204ef4
Merge branch 'main' into feat/e2e-test-gov-ica
Pantani Nov 1, 2022
af9d60a
fix typo
Pantani Nov 1, 2022
79062c8
Update tests/e2e/e2e_gov_test.go
okwme Nov 2, 2022
befe071
Merge branch 'main' into feat/e2e-test-gov-ica
okwme Nov 2, 2022
e5c4d9e
Merge branch 'main' into feat/e2e-test-gov-ica
okwme Nov 2, 2022
ddd1ea2
update sdk in tests go.mod
okwme Nov 2, 2022
321c7c6
Merge branch 'main' into feat/e2e-test-gov-ica
Pantani Nov 4, 2022
ea8baee
Merge branch 'main' into feat/e2e-test-gov-ica
Pantani Nov 4, 2022
706b38d
Merge branch 'main' into feat/e2e-test-gov-ica
Pantani Nov 7, 2022
4120882
bump the ics23
Pantani Nov 7, 2022
32cf482
Merge branch 'main' into feat/e2e-test-gov-ica
Pantani Nov 9, 2022
0e989eb
Merge branch 'main' into feat/e2e-test-gov-ica
Pantani Nov 9, 2022
c8b8cec
Merge branch 'main' into feat/e2e-test-gov-ica
Pantani Nov 15, 2022
62c9661
Merge remote-tracking branch 'origin/main' into feat/e2e-test-gov-ica
Pantani Nov 16, 2022
3ce9d18
Merge branch 'main' into feat/e2e-test-gov-ica
Pantani Nov 17, 2022
0c59002
Merge remote-tracking branch 'origin/main' into feat/e2e-test-gov-ica
Pantani Nov 21, 2022
bf0de5e
update the cosmos sdk and remove some typos
Pantani Nov 22, 2022
ea6c5d6
rename icaChannelID to ibcTransferChannelID
Pantani Nov 23, 2022
f0d08e4
merge branch target-v0-46
Dec 14, 2022
1bda47d
fix: deadlink
Dec 14, 2022
1dd3f1f
fix: dead links
Dec 14, 2022
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion docs/modules/group.md
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ A group is a set of accounts and associated weights. Group accounts may then be
See the following resources for additional information on using the `group` module.

- [Cosmos SDK Group Module Docs](https://docs.cosmos.network/v0.46/modules/group/)
- [Cosmos Developer Portal Group Tutorial](https://tutorials.cosmos.network/tutorials/7-understand-sdk-modules/3-group.html)
- [Cosmos Developer Portal Group Tutorial](https://tutorials.cosmos.network/tutorials/8-understand-sdk-modules/3-group.html)

##### Group Administration
Groups can be initialized with or without a decision policy. Groups must have an administrator account, but that account does not necessarily have to be a group member. The group may self-administer by setting the administrator to a group policy account. Upon creating a group, each member is assigned a weight corresponding to proposal voting power.
Expand Down
5 changes: 2 additions & 3 deletions docs/modules/icamauth.md
Original file line number Diff line number Diff line change
Expand Up @@ -25,8 +25,7 @@ Through these 3 accounts, we can test if:

### Prepare to run two chains
We've simplified the setup process via several shell scripts. If you'd like to learn more about what's happening under the hood we suggest you inspect the files more closely.

Set up the two chains by [`init_chain_controller.sh`](https://github.com/cosmos/gaia/blob/main/docs/modules/icamauth_scripts/init_chain_controller.sh) and [`init_chain_host.sh`](https://github.com/cosmos/gaia/blob/main/docs/modules/icamauth_scripts/init_chain_host.sh), create the keys for `alice` and `bob`, and start running both chains in different terminals:
Set up the two chains by [`init_chain_controller.sh`](https://github.com/cosmos/gaia/tree/target-v0-46/docs/modules/icamauth_scripts/init_chain_controller.sh) and [`init_chain_host.sh`](https://github.com/cosmos/gaia/tree/target-v0-46/docs/modules/icamauth_scripts/init_chain_host.sh), create the keys for `alice` and `bob`, and start running both chains in different terminals:
```shell
cd gaia

Expand Down Expand Up @@ -70,7 +69,7 @@ export PATH="$HOME/.hermes/bin:$PATH"
```

#### Create the IBC connection
Run the following script [`gaia/docs/modules/icamauth_scripts/hermes_setup.sh`](https://github.com/cosmos/gaia/blob/main/docs/modules/icamauth_scripts/hermes_setup.sh) to create an IBC connection:
Run the following script [`gaia/docs/modules/icamauth_scripts/hermes_setup.sh`](https://github.com/cosmos/gaia/tree/target-v0-46/docs/modules/icamauth_scripts/hermes_setup.sh) to create an IBC connection:
```shell
cd ./docs/modules/icamauth_scripts
source hermes_setup.sh
Expand Down
99 changes: 71 additions & 28 deletions tests/e2e/e2e_gov_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -24,29 +24,29 @@ func (s *IntegrationTestSuite) SendTokensFromNewGovAccount() {
senderAddress, err := s.chainA.validators[0].keyInfo.GetAddress()
s.Require().NoError(err)
sender := senderAddress.String()
// Gov tests may be run in arbitrary order, each test must increment govProposalCounter to have the correct proposal id to submit and query
s.govProposalCounter++
s.T().Logf("Proposal number: %d", s.govProposalCounter)
// Gov tests may be run in arbitrary order, each test must increment proposalCounter to have the correct proposal id to submit and query
s.proposalCounter++
s.T().Logf("Proposal number: %d", s.proposalCounter)

s.fundCommunityPool(chainAAPIEndpoint, sender)

s.T().Logf("Submitting Legacy Gov Proposal: Community Spend Funding Gov Module")
s.submitLegacyGovProposal(chainAAPIEndpoint, sender, standardFees.String(), "community-pool-spend", s.govProposalCounter, configFile(proposal1))
s.submitLegacyGovProposal(chainAAPIEndpoint, sender, standardFees.String(), "community-pool-spend", s.proposalCounter, configFile(proposal1))
s.T().Logf("Depositing Legacy Gov Proposal: Community Spend Funding Gov Module")
s.depositGovProposal(chainAAPIEndpoint, sender, standardFees.String(), s.govProposalCounter)
s.depositGovProposal(chainAAPIEndpoint, sender, standardFees.String(), s.proposalCounter)
s.T().Logf("Voting Legacy Gov Proposal: Community Spend Funding Gov Module")
s.voteGovProposal(chainAAPIEndpoint, sender, standardFees.String(), s.govProposalCounter, "yes", false)
s.voteGovProposal(chainAAPIEndpoint, sender, standardFees.String(), s.proposalCounter, "yes", false)

initialGovBalance, err := getSpecificBalance(chainAAPIEndpoint, govModuleAddress, uatomDenom)
s.Require().NoError(err)
s.govProposalCounter++
s.proposalCounter++

s.T().Logf("Submitting Gov Proposal: Sending Tokens from Gov Module to Recipient")
s.submitNewGovProposal(chainAAPIEndpoint, sender, s.govProposalCounter, configFile(proposal2))
s.submitNewGovProposal(chainAAPIEndpoint, sender, s.proposalCounter, configFile(proposal2))
s.T().Logf("Depositing Gov Proposal: Sending Tokens from Gov Module to Recipient")
s.depositGovProposal(chainAAPIEndpoint, sender, standardFees.String(), s.govProposalCounter)
s.depositGovProposal(chainAAPIEndpoint, sender, standardFees.String(), s.proposalCounter)
s.T().Logf("Voting Gov Proposal: Sending Tokens from Gov Module to Recipient")
s.voteGovProposal(chainAAPIEndpoint, sender, standardFees.String(), s.govProposalCounter, "yes", false)
s.voteGovProposal(chainAAPIEndpoint, sender, standardFees.String(), s.proposalCounter, "yes", false)
s.Require().Eventually(
func() bool {
newGovBalance, err := getSpecificBalance(chainAAPIEndpoint, govModuleAddress, uatomDenom)
Expand Down Expand Up @@ -78,18 +78,18 @@ func (s *IntegrationTestSuite) GovSoftwareUpgrade() {
sender := senderAddress.String()
height := s.getLatestBlockHeight(s.chainA, 0)
proposalHeight := height + govProposalBlockBuffer
// Gov tests may be run in arbitrary order, each test must increment govProposalCounter to have the correct proposal id to submit and query
// Gov tests may be run in arbitrary order, each test must increment proposalCounter to have the correct proposal id to submit and query

s.govProposalCounter++
s.T().Logf("Writing proposal %d on chain %s", s.govProposalCounter, s.chainA.id)
s.proposalCounter++
s.T().Logf("Writing proposal %d on chain %s", s.proposalCounter, s.chainA.id)
s.writeGovUpgradeSoftwareProposal(s.chainA, proposalHeight)

s.T().Logf("Submitting Gov Proposal: Software Upgrade")
s.submitNewGovProposal(chainAAPIEndpoint, sender, s.govProposalCounter, configFile(proposal3))
s.submitNewGovProposal(chainAAPIEndpoint, sender, s.proposalCounter, configFile(proposal3))
s.T().Logf("Depositing Gov Proposal: Software Upgrade")
s.depositGovProposal(chainAAPIEndpoint, sender, standardFees.String(), s.govProposalCounter)
s.depositGovProposal(chainAAPIEndpoint, sender, standardFees.String(), s.proposalCounter)
s.T().Logf("Weighted Voting Gov Proposal: Software Upgrade")
s.voteGovProposal(chainAAPIEndpoint, sender, standardFees.String(), s.govProposalCounter, "yes=0.8,no=0.1,abstain=0.05,no_with_veto=0.05", true)
s.voteGovProposal(chainAAPIEndpoint, sender, standardFees.String(), s.proposalCounter, "yes=0.8,no=0.1,abstain=0.05,no_with_veto=0.05", true)

s.verifyChainHaltedAtUpgradeHeight(s.chainA, 0, proposalHeight)
s.T().Logf("Successfully halted chain at height %d", proposalHeight)
Expand All @@ -102,12 +102,14 @@ func (s *IntegrationTestSuite) GovSoftwareUpgrade() {
s.Require().Eventually(
func() bool {
h := s.getLatestBlockHeight(s.chainA, 0)
s.Require().NoError(err)

return h > 0
},
30*time.Second,
5*time.Second,
)
s.govProposalCounter = 0
s.proposalCounter = 0
})
}

Expand All @@ -126,32 +128,73 @@ func (s *IntegrationTestSuite) GovCancelSoftwareUpgrade() {
sender := senderAddress.String()
height := s.getLatestBlockHeight(s.chainA, 0)
proposalHeight := height + 50
// Gov tests may be run in arbitrary order, each test must increment govProposalCounter to have the correct proposal id to submit and query
s.govProposalCounter++
// Gov tests may be run in arbitrary order, each test must increment proposalCounter to have the correct proposal id to submit and query
s.proposalCounter++

s.T().Logf("Writing proposal %d on chain %s", s.govProposalCounter, s.chainA.id)
s.T().Logf("Writing proposal %d on chain %s", s.proposalCounter, s.chainA.id)
s.writeGovUpgradeSoftwareProposal(s.chainA, proposalHeight)

s.T().Logf("Submitting Gov Proposal: Software Upgrade")
s.submitNewGovProposal(chainAAPIEndpoint, sender, s.govProposalCounter, configFile(proposal3))
s.depositGovProposal(chainAAPIEndpoint, sender, standardFees.String(), s.govProposalCounter)
s.voteGovProposal(chainAAPIEndpoint, sender, standardFees.String(), s.govProposalCounter, "yes", false)
s.submitNewGovProposal(chainAAPIEndpoint, sender, s.proposalCounter, configFile(proposal3))
s.depositGovProposal(chainAAPIEndpoint, sender, standardFees.String(), s.proposalCounter)
s.voteGovProposal(chainAAPIEndpoint, sender, standardFees.String(), s.proposalCounter, "yes", false)

s.govProposalCounter++
s.proposalCounter++

s.T().Logf("Writing proposal %d on chain %s", s.govProposalCounter, s.chainA.id)
s.T().Logf("Writing proposal %d on chain %s", s.proposalCounter, s.chainA.id)
s.writeGovCancelUpgradeSoftwareProposal(s.chainA)

s.T().Logf("Submitting Gov Proposal: Cancel Software Upgrade")
s.submitNewGovProposal(chainAAPIEndpoint, sender, s.govProposalCounter, configFile(proposal4))
s.depositGovProposal(chainAAPIEndpoint, sender, standardFees.String(), s.govProposalCounter)
s.voteGovProposal(chainAAPIEndpoint, sender, standardFees.String(), s.govProposalCounter, "yes", false)
s.submitNewGovProposal(chainAAPIEndpoint, sender, s.proposalCounter, configFile(proposal4))
s.depositGovProposal(chainAAPIEndpoint, sender, standardFees.String(), s.proposalCounter)
s.voteGovProposal(chainAAPIEndpoint, sender, standardFees.String(), s.proposalCounter, "yes", false)

s.verifyChainPassesUpgradeHeight(s.chainA, 0, proposalHeight)
s.T().Logf("Successfully canceled upgrade at height %d", proposalHeight)
})
}

/*
GovCreateICA tests the create a ICA account from a government proposal.
Test Benchmarks:
1. Create the ICA proposal
2. Approve proposal
3. Check if ICA account exist
*/
func (s *IntegrationTestSuite) GovCreateICA() {
s.Run("test create ica from gov module", func() {
var (
portID = "1317/tcp"
validatorChainA = s.chainA.validators[0]
resourceChainA = s.valResources[s.chainA.id][0]
chainAAPI = fmt.Sprintf("http://%s", resourceChainA.GetHostPort(portID))
)
// write and submit ICA gov proposal
s.writeGovICAProposal(s.chainA)

senderAddress, err := validatorChainA.keyInfo.GetAddress()
s.Require().NoError(err)
sender := senderAddress.String()

s.proposalCounter++
s.submitNewGovProposal(chainAAPI, sender, s.proposalCounter, configFile(proposalICACreate))
s.depositGovProposal(chainAAPI, sender, standardFees.String(), s.proposalCounter)
s.voteGovProposal(chainAAPI, sender, standardFees.String(), s.proposalCounter, "yes", false)

// check if the ICA address exist
s.Require().Eventually(
func() bool {
icaAddr, err := queryICAAddress(chainAAPI, govModuleAddress, icaConnectionID)
s.T().Logf("%s's interchain account on chain %s: %s", sender, s.chainA.id, icaAddr)
s.Require().NoError(err)
return icaAddr != ""
},
2*time.Minute,
10*time.Second,
)
})
}

/*
fundCommunityPool tests the funding of the community pool on behalf of the distribution module.
Test Benchmarks:
Expand Down
16 changes: 16 additions & 0 deletions tests/e2e/e2e_groups_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,23 @@ var (
)

var (
proposalId = 1
sendAmount = sdk.NewInt64Coin(uatomDenom, 5000000)

windows = &group.DecisionPolicyWindows{
MinExecutionPeriod: 0 * time.Second,
VotingPeriod: 30 * time.Second,
}

thresholdPolicy = &group.ThresholdDecisionPolicy{
Threshold: "1",
Windows: windows,
}

percentagePolicy = &group.PercentageDecisionPolicy{
Percentage: "0.5",
Windows: windows,
}
)

const (
Expand Down
49 changes: 47 additions & 2 deletions tests/e2e/e2e_setup_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -34,6 +34,7 @@ import (
"github.com/cosmos/cosmos-sdk/x/group"
stakingtypes "github.com/cosmos/cosmos-sdk/x/staking/types"
upgradetypes "github.com/cosmos/cosmos-sdk/x/upgrade/types"
icamauthtypes "github.com/cosmos/gaia/v8/x/icamauth/types"
ibcclienttypes "github.com/cosmos/ibc-go/v5/modules/core/02-client/types"
ibcchanneltypes "github.com/cosmos/ibc-go/v5/modules/core/04-channel/types"
"github.com/ory/dockertest/v3"
Expand Down Expand Up @@ -63,6 +64,8 @@ const (
proposal3 = "proposal_3.json"
proposal4 = "proposal_4.json"
proposalGlobalFee = "proposal_globalfee.json"
proposalICACreate = "proposal_ica_create.json"
proposalICASend = "proposal_ica_send.json"
ICAGroupProposal = "ica_proposal_group.json"
icaIBCSend = "ica_ibc_send.json"
icaConnectionID = "connection-0"
Expand All @@ -79,7 +82,12 @@ const (
relayerAccountIndex = 0
numberOfEvidences = 10
slashingShares int64 = 10000
icaOwnerAccountIndex = 1
)

const (
// genesis accounts enum
icaOwnerAccountIndex = iota + 1
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

ooo i didn't know about this : )

icaGovOwnerAccountIndex
)

var (
Expand All @@ -106,7 +114,7 @@ type IntegrationTestSuite struct {
dkrNet *dockertest.Network
hermesResource *dockertest.Resource
valResources map[string][]*dockertest.Resource
govProposalCounter int
proposalCounter int
groupProposalCounter int
}

Expand Down Expand Up @@ -682,6 +690,43 @@ func (s *IntegrationTestSuite) writeGovCancelUpgradeSoftwareProposal(c *chain) {
s.Require().NoError(err)
}

func (s *IntegrationTestSuite) writeGovICAProposal(c *chain) {
/*
"@type": "/ibc.applications.interchain_accounts.controller.v1.MsgRegisterInterchainAccount",
"connection_id": "connection-0",
"owner": "cosmos1afk9zr2hn2jsac63h4hm60vl9z3e5u69gndzf7c99cqge3vzwjzsfwkgpd",
"version":
*/
proposalICACreateJSON, err := createGovProposalJSON(&icamauthtypes.MsgRegisterAccount{
Owner: govModuleAddress,
ConnectionId: icaConnectionID,
Version: icaVersion,
})
s.Require().NoError(err)

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

protoMsg, err := codectypes.NewAnyWithValue(
&banktypes.MsgSend{
FromAddress: govModuleAddress,
ToAddress: govSendMsgRecipientAddress,
Amount: []sdk.Coin{sendGovAmount},
},
)
s.Require().NoError(err)

proposalICASendJSON, err := createGovProposalJSON(&icamauthtypes.MsgSubmitTx{
Owner: govModuleAddress,
ConnectionId: icaConnectionID,
Msg: protoMsg,
})
s.Require().NoError(err)

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

func (s *IntegrationTestSuite) writeGroupMembers(c *chain, groupMembers []group.MemberRequest, filename string) {
members := &group.MsgCreateGroup{
Members: groupMembers,
Expand Down
21 changes: 11 additions & 10 deletions tests/e2e/e2e_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@ func (s *IntegrationTestSuite) TestGov() {
s.SendTokensFromNewGovAccount()
s.GovSoftwareUpgrade()
s.GovCancelSoftwareUpgrade()
s.GovCreateICA()
}

// globalfee in genesis is set to be "0.00001uatom"
Expand Down Expand Up @@ -98,8 +99,8 @@ func (s *IntegrationTestSuite) TestGlobalFees() {

// prepare gov globalfee proposal
emptyGlobalFee := sdk.DecCoins{}
s.govProposalCounter++
s.govProposeNewGlobalfee(emptyGlobalFee, s.govProposalCounter, submitter, standardFees.String())
s.proposalCounter++
s.govProposeNewGlobalfee(emptyGlobalFee, s.proposalCounter, submitter, standardFees.String())
paidFeeAmt := math.LegacyMustNewDecFromStr(minGasPrice).Mul(math.LegacyNewDec(gas)).String()

s.T().Logf("test case: empty global fee, globalfee=%s, min_gas_price=%s", emptyGlobalFee.String(), minGasPrice+uatomDenom)
Expand Down Expand Up @@ -152,8 +153,8 @@ func (s *IntegrationTestSuite) TestGlobalFees() {

// prepare gov globalfee proposal
lowGlobalFee := sdk.DecCoins{sdk.NewDecCoinFromDec(uatomDenom, sdk.MustNewDecFromStr(lowGlobalFeesAmt))}
s.govProposalCounter++
s.govProposeNewGlobalfee(lowGlobalFee, s.govProposalCounter, submitter, standardFees.String())
s.proposalCounter++
s.govProposeNewGlobalfee(lowGlobalFee, s.proposalCounter, submitter, standardFees.String())

paidFeeAmt = math.LegacyMustNewDecFromStr(minGasPrice).Mul(math.LegacyNewDec(gas)).String()
paidFeeAmtLowMinGasHighGlobalFee := math.LegacyMustNewDecFromStr(lowGlobalFeesAmt).
Expand Down Expand Up @@ -204,8 +205,8 @@ func (s *IntegrationTestSuite) TestGlobalFees() {

// prepare gov globalfee proposal
highGlobalFee := sdk.DecCoins{sdk.NewDecCoinFromDec(uatomDenom, sdk.MustNewDecFromStr(highGlobalFeeAmt))}
s.govProposalCounter++
s.govProposeNewGlobalfee(highGlobalFee, s.govProposalCounter, submitter, paidFeeAmt+uatomDenom)
s.proposalCounter++
s.govProposeNewGlobalfee(highGlobalFee, s.proposalCounter, submitter, paidFeeAmt+uatomDenom)

paidFeeAmt = math.LegacyMustNewDecFromStr(highGlobalFeeAmt).Mul(math.LegacyNewDec(gas)).String()
paidFeeAmtHigherMinGasLowerGalobalFee := math.LegacyMustNewDecFromStr(minGasPrice).
Expand Down Expand Up @@ -240,8 +241,8 @@ func (s *IntegrationTestSuite) TestGlobalFees() {
sdk.NewDecCoinFromDec(photonDenom, sdk.NewDec(0)),
sdk.NewDecCoinFromDec(uatomDenom, sdk.MustNewDecFromStr(lowGlobalFeesAmt)),
}.Sort()
s.govProposalCounter++
s.govProposeNewGlobalfee(mixGlobalFee, s.govProposalCounter, submitter, paidFeeAmt+uatomDenom)
s.proposalCounter++
s.govProposeNewGlobalfee(mixGlobalFee, s.proposalCounter, submitter, paidFeeAmt+uatomDenom)

// equal to min_gas_price
paidFeeAmt = math.LegacyMustNewDecFromStr(minGasPrice).Mul(math.LegacyNewDec(gas)).String()
Expand Down Expand Up @@ -346,8 +347,8 @@ func (s *IntegrationTestSuite) TestGlobalFees() {
s.T().Logf("Propose to change back to original global fees: %s", initialGlobalFeeAmt+uatomDenom)
oldfees, err := sdk.ParseDecCoins(initialGlobalFeeAmt + uatomDenom)
s.Require().NoError(err)
s.govProposalCounter++
s.govProposeNewGlobalfee(oldfees, s.govProposalCounter, submitter, paidFeeAmt+photonDenom)
s.proposalCounter++
s.govProposeNewGlobalfee(oldfees, s.proposalCounter, submitter, paidFeeAmt+photonDenom)
})
}

Expand Down
Loading