From 5e9a65d710f11fc413d806f005d889726be65481 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 9 Dec 2024 10:43:20 +0000 Subject: [PATCH 1/2] chore(deps): Bump cosmossdk.io/log from 1.4.1 to 1.5.0 (#3409) Bumps [cosmossdk.io/log](https://github.com/cosmos/cosmos-sdk) from 1.4.1 to 1.5.0.
Release notes

Sourced from cosmossdk.io/log's releases.

cosmovisor/v1.5.0

Cosmovisor v1.5.0 Release Notes

See the CHANGELOG for details on the changes in v1.5.0.

Installation instructions

go install cosmossdk.io/tools/cosmovisor/cmd/cosmovisor@latest
Commits

[![Dependabot compatibility score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=cosmossdk.io/log&package-manager=go_modules&previous-version=1.4.1&new-version=1.5.0)](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores) Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting `@dependabot rebase`. [//]: # (dependabot-automerge-start) [//]: # (dependabot-automerge-end) ---
Dependabot commands and options
You can trigger Dependabot actions by commenting on this PR: - `@dependabot rebase` will rebase this PR - `@dependabot recreate` will recreate this PR, overwriting any edits that have been made to it - `@dependabot merge` will merge this PR after your CI passes on it - `@dependabot squash and merge` will squash and merge this PR after your CI passes on it - `@dependabot cancel merge` will cancel a previously requested merge and block automerging - `@dependabot reopen` will reopen this PR if it is closed - `@dependabot close` will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually - `@dependabot show ignore conditions` will show all of the ignore conditions of the specified dependency - `@dependabot ignore this major version` will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself) - `@dependabot ignore this minor version` will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself) - `@dependabot ignore this dependency` will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
--- go.mod | 9 ++++++++- go.sum | 21 +++++++++++++++++++-- 2 files changed, 27 insertions(+), 3 deletions(-) diff --git a/go.mod b/go.mod index 2a0afe76ca..be73b11970 100644 --- a/go.mod +++ b/go.mod @@ -9,7 +9,7 @@ require ( cosmossdk.io/client/v2 v2.0.0-beta.6 cosmossdk.io/core v0.11.1 cosmossdk.io/errors v1.0.1 - cosmossdk.io/log v1.4.1 + cosmossdk.io/log v1.5.0 cosmossdk.io/math v1.4.0 cosmossdk.io/simapp v0.0.0-20240118210941-3897926e722e cosmossdk.io/store v1.1.1 @@ -77,9 +77,13 @@ require ( github.com/bgentry/go-netrc v0.0.0-20140422174119-9fd32a8b3d3d // indirect github.com/bgentry/speakeasy v0.1.1-0.20220910012023-760eaf8b6816 // indirect github.com/bits-and-blooms/bitset v1.8.0 // indirect + github.com/bytedance/sonic v1.12.3 // indirect + github.com/bytedance/sonic/loader v0.2.0 // indirect github.com/cenkalti/backoff/v4 v4.3.0 // indirect github.com/cespare/xxhash/v2 v2.3.0 // indirect github.com/chzyer/readline v1.5.1 // indirect + github.com/cloudwego/base64x v0.1.4 // indirect + github.com/cloudwego/iasm v0.2.0 // indirect github.com/cockroachdb/apd/v2 v2.0.2 // indirect github.com/cockroachdb/errors v1.11.3 // indirect github.com/cockroachdb/fifo v0.0.0-20240606204812-0bbfbd93a7ce // indirect @@ -162,6 +166,7 @@ require ( github.com/jmespath/go-jmespath v0.4.0 // indirect github.com/jmhodges/levigo v1.0.0 // indirect github.com/klauspost/compress v1.17.9 // indirect + github.com/klauspost/cpuid/v2 v2.0.9 // indirect github.com/kr/pretty v0.3.1 // indirect github.com/kr/text v0.2.0 // indirect github.com/lib/pq v1.10.9 // indirect @@ -206,6 +211,7 @@ require ( github.com/syndtr/goleveldb v1.0.1-0.20220721030215-126854af5e6d // indirect github.com/tendermint/go-amino v0.16.0 // indirect github.com/tidwall/btree v1.7.0 // indirect + github.com/twitchyliquid64/golang-asm v0.15.1 // indirect github.com/ulikunitz/xz v0.5.11 // indirect github.com/xeipuuv/gojsonpointer v0.0.0-20190905194746-02993c407bfb // indirect github.com/xeipuuv/gojsonreference v0.0.0-20180127040603-bd5ef7bd5415 // indirect @@ -221,6 +227,7 @@ require ( go.opentelemetry.io/otel/trace v1.24.0 // indirect go.uber.org/mock v0.4.0 // indirect go.uber.org/multierr v1.11.0 // indirect + golang.org/x/arch v0.0.0-20210923205945-b76863e36670 // indirect golang.org/x/crypto v0.28.0 // indirect golang.org/x/exp v0.0.0-20240613232115-7f521ea00fb8 // indirect golang.org/x/net v0.30.0 // indirect diff --git a/go.sum b/go.sum index 67f46d7bc5..12674df4a1 100644 --- a/go.sum +++ b/go.sum @@ -200,8 +200,8 @@ cosmossdk.io/depinject v1.0.0 h1:dQaTu6+O6askNXO06+jyeUAnF2/ssKwrrszP9t5q050= cosmossdk.io/depinject v1.0.0/go.mod h1:zxK/h3HgHoA/eJVtiSsoaRaRA2D5U4cJ5thIG4ssbB8= cosmossdk.io/errors v1.0.1 h1:bzu+Kcr0kS/1DuPBtUFdWjzLqyUuCiyHjyJB6srBV/0= cosmossdk.io/errors v1.0.1/go.mod h1:MeelVSZThMi4bEakzhhhE/CKqVv3nOJDA25bIqRDu/U= -cosmossdk.io/log v1.4.1 h1:wKdjfDRbDyZRuWa8M+9nuvpVYxrEOwbD/CA8hvhU8QM= -cosmossdk.io/log v1.4.1/go.mod h1:k08v0Pyq+gCP6phvdI6RCGhLf/r425UT6Rk/m+o74rU= +cosmossdk.io/log v1.5.0 h1:dVdzPJW9kMrnAYyMf1duqacoidB9uZIl+7c6z0mnq0g= +cosmossdk.io/log v1.5.0/go.mod h1:Tr46PUJjiUthlwQ+hxYtUtPn4D/oCZXAkYevBeh5+FI= cosmossdk.io/math v1.4.0 h1:XbgExXFnXmF/CccPPEto40gOO7FpWu9yWNAZPN3nkNQ= cosmossdk.io/math v1.4.0/go.mod h1:O5PkD4apz2jZs4zqFdTr16e1dcaQCc5z6lkEnrrppuk= cosmossdk.io/simapp v0.0.0-20240118210941-3897926e722e h1:prrEM8wTWf6Rv0XchutuUtWfWlQHG4G3OylkTYgPlNk= @@ -341,6 +341,11 @@ github.com/btcsuite/winsvc v1.0.0/go.mod h1:jsenWakMcC0zFBFurPLEAyrnc/teJEM1O46f github.com/bufbuild/protocompile v0.6.0 h1:Uu7WiSQ6Yj9DbkdnOe7U4mNKp58y9WDMKDn28/ZlunY= github.com/bufbuild/protocompile v0.6.0/go.mod h1:YNP35qEYoYGme7QMtz5SBCoN4kL4g12jTtjuzRNdjpE= github.com/bwesterb/go-ristretto v1.2.0/go.mod h1:fUIoIZaG73pV5biE2Blr2xEzDoMj7NFEuV9ekS419A0= +github.com/bytedance/sonic v1.12.3 h1:W2MGa7RCU1QTeYRTPE3+88mVC0yXmsRQRChiyVocVjU= +github.com/bytedance/sonic v1.12.3/go.mod h1:B8Gt/XvtZ3Fqj+iSKMypzymZxw/FVwgIGKzMzT9r/rk= +github.com/bytedance/sonic/loader v0.1.1/go.mod h1:ncP89zfokxS5LZrJxl5z0UJcsk4M4yY2JpfqGeCtNLU= +github.com/bytedance/sonic/loader v0.2.0 h1:zNprn+lsIP06C/IqCHs3gPQIvnvpKbbxyXQP1iU4kWM= +github.com/bytedance/sonic/loader v0.2.0/go.mod h1:ncP89zfokxS5LZrJxl5z0UJcsk4M4yY2JpfqGeCtNLU= github.com/c-bata/go-prompt v0.2.2/go.mod h1:VzqtzE2ksDBcdln8G7mk2RX9QyGjH+OVqOCSiVIqS34= github.com/casbin/casbin/v2 v2.1.2/go.mod h1:YcPU1XXisHhLzuxH9coDNf2FbKpjGlbCg3n9yuLkIJQ= github.com/cenkalti/backoff v2.2.1+incompatible h1:tNowT99t7UNflLxfYYSlKYsBpXdEet03Pg2g16Swow4= @@ -369,6 +374,10 @@ github.com/circonus-labs/circonusllhist v0.1.3/go.mod h1:kMXHVDlOchFAehlya5ePtbp github.com/clbanning/x2j v0.0.0-20191024224557-825249438eec/go.mod h1:jMjuTZXRI4dUb/I5gc9Hdhagfvm9+RyrPryS/auMzxE= github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw= github.com/cloudflare/cloudflare-go v0.14.0/go.mod h1:EnwdgGMaFOruiPZRFSgn+TsQ3hQ7C/YWzIGLeu5c304= +github.com/cloudwego/base64x v0.1.4 h1:jwCgWpFanWmN8xoIUHa2rtzmkd5J2plF/dnLS6Xd/0Y= +github.com/cloudwego/base64x v0.1.4/go.mod h1:0zlkT4Wn5C6NdauXdJRhSKRlJvmclQ1hhJgA0rcu/8w= +github.com/cloudwego/iasm v0.2.0 h1:1KNIy1I1H9hNNFEEH3DVnI4UujN+1zjpuk6gwHLTssg= +github.com/cloudwego/iasm v0.2.0/go.mod h1:8rXZaNYT2n95jn+zTI1sDr+IgcD2GVs0nlbbQPiEFhY= github.com/cncf/udpa/go v0.0.0-20191209042840-269d4d468f6f/go.mod h1:M8M6+tZqaGXZJjfX53e64911xZQV5JYwmTeXPW+k8Sc= github.com/cncf/udpa/go v0.0.0-20200629203442-efcf912fb354/go.mod h1:WmhPx2Nbnhtbo57+VJT5O0JRkEi1Wbu0z5j0R8u5Hbk= github.com/cncf/udpa/go v0.0.0-20201120205902-5459f2c99403/go.mod h1:WmhPx2Nbnhtbo57+VJT5O0JRkEi1Wbu0z5j0R8u5Hbk= @@ -924,8 +933,11 @@ github.com/klauspost/compress v1.15.11/go.mod h1:QPwzmACJjUTFsnSHH934V6woptycfrD github.com/klauspost/compress v1.17.9 h1:6KIumPrER1LHsvBVuDa0r5xaG0Es51mhhB9BQB2qeMA= github.com/klauspost/compress v1.17.9/go.mod h1:Di0epgTjJY877eYKx5yC51cX2A2Vl2ibi7bDH9ttBbw= github.com/klauspost/cpuid v0.0.0-20170728055534-ae7887de9fa5/go.mod h1:Pj4uuM528wm8OyEC2QMXAi2YiTZ96dNQPGgoMS4s3ek= +github.com/klauspost/cpuid/v2 v2.0.9 h1:lgaqFMSdTdQYdZ04uHyN2d/eKdOMyi2YLSvlQIBFYa4= +github.com/klauspost/cpuid/v2 v2.0.9/go.mod h1:FInQzS24/EEf25PyTYn52gqo7WaD8xa0213Md/qVLRg= github.com/klauspost/crc32 v0.0.0-20161016154125-cb6bfca970f6/go.mod h1:+ZoRqAPRLkC4NPOvfYeR5KNOrY6TD+/sAC3HXPZgDYg= github.com/klauspost/pgzip v1.0.2-0.20170402124221-0bf5dcad4ada/go.mod h1:Ch1tH69qFZu15pkjo5kYi6mth2Zzwzt50oCQKQE9RUs= +github.com/knz/go-libedit v1.10.1/go.mod h1:MZTVkCWyz0oBc7JOWP3wNAzd002ZbM/5hgShxwh4x8M= github.com/konsorten/go-windows-terminal-sequences v1.0.1/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= github.com/konsorten/go-windows-terminal-sequences v1.0.3/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= github.com/kr/logfmt v0.0.0-20140226030751-b84e30acd515/go.mod h1:+0opPa2QZZtGFBFZlji/RkVcI2GknAs/DXo4wKdlNEc= @@ -1271,6 +1283,8 @@ github.com/tklauser/go-sysconf v0.3.5/go.mod h1:MkWzOF4RMCshBAMXuhXJs64Rte09mITn github.com/tklauser/numcpus v0.2.2/go.mod h1:x3qojaO3uyYt0i56EW/VUYs7uBvdl2fkfZFu0T9wgjM= github.com/tmc/grpc-websocket-proxy v0.0.0-20170815181823-89b8d40f7ca8/go.mod h1:ncp9v5uamzpCO7NfCPTXjqaC+bZgJeR0sMTm6dMHP7U= github.com/tv42/httpunix v0.0.0-20150427012821-b75d8614f926/go.mod h1:9ESjWnEqriFuLhtthL60Sar/7RFoluCcXsuvEwTV5KM= +github.com/twitchyliquid64/golang-asm v0.15.1 h1:SU5vSMR7hnwNxj24w34ZyCi/FmDZTkS4MhqMhdFk5YI= +github.com/twitchyliquid64/golang-asm v0.15.1/go.mod h1:a1lVb/DtPvCB8fslRZhAngC2+aY1QWCk3Cedj/Gdt08= github.com/tyler-smith/go-bip39 v1.0.1-0.20181017060643-dbb3b84ba2ef/go.mod h1:sJ5fKU0s6JVwZjjcUEX2zFOnvq0ASQ2K9Zr6cf67kNs= github.com/tyler-smith/go-bip39 v1.0.2/go.mod h1:sJ5fKU0s6JVwZjjcUEX2zFOnvq0ASQ2K9Zr6cf67kNs= github.com/ugorji/go v1.2.7 h1:qYhyWUUd6WbiM+C6JZAUkIJt/1WrjzNHY9+KCIjVqTo= @@ -1359,6 +1373,8 @@ go.uber.org/zap v1.9.1/go.mod h1:vwi/ZaCAaUcBkycHslxD9B2zi4UTXhF60s6SWpuDF0Q= go.uber.org/zap v1.10.0/go.mod h1:vwi/ZaCAaUcBkycHslxD9B2zi4UTXhF60s6SWpuDF0Q= go.uber.org/zap v1.13.0/go.mod h1:zwrFLgMcdUuIBviXEYEH1YKNaOBnKXsx2IPda5bBwHM= go.uber.org/zap v1.18.1/go.mod h1:xg/QME4nWcxGxrpdeYfq7UvYrLh66cuVKdrbD1XF/NI= +golang.org/x/arch v0.0.0-20210923205945-b76863e36670 h1:18EFjUmQOcUvxNYSkA6jO9VAiXCnxFY6NyDX0bHDmkU= +golang.org/x/arch v0.0.0-20210923205945-b76863e36670/go.mod h1:5om86z9Hs0C8fWVUuoMHwpExlXzs5Tkyp9hOrfG7pp8= golang.org/x/crypto v0.0.0-20170930174604-9419663f5a44/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= golang.org/x/crypto v0.0.0-20180904163835-0709b304e793/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= golang.org/x/crypto v0.0.0-20181029021203-45a5f77698d3/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= @@ -2035,6 +2051,7 @@ honnef.co/go/tools v0.0.1-2020.1.4/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9 honnef.co/go/tools v0.1.3/go.mod h1:NgwopIslSNH47DimFoV78dnkksY2EFtX0ajyb3K/las= nhooyr.io/websocket v1.8.6 h1:s+C3xAMLwGmlI31Nyn/eAehUlZPwfYZu2JXM621Q5/k= nhooyr.io/websocket v1.8.6/go.mod h1:B70DZP8IakI65RVQ51MsWP/8jndNma26DVA/nFSCgW0= +nullprogram.com/x/optparse v1.0.0/go.mod h1:KdyPE+Igbe0jQUrVfMqDMeJQIJZEuyV7pjYmp6pbG50= pgregory.net/rapid v1.1.0 h1:CMa0sjHSru3puNx+J0MIAuiiEV4N0qj8/cMWGBBCsjw= pgregory.net/rapid v1.1.0/go.mod h1:PY5XlDGj0+V1FCq0o192FdRhpKHGTRIWBgqjDBTrq04= rsc.io/binaryregexp v0.2.0/go.mod h1:qTv7/COck+e2FymRvadv62gMdZztPaShugOCi3I+8D8= From 83f74f2c01b3671f6f9c4503bb9ea7fdd5a06914 Mon Sep 17 00:00:00 2001 From: Dante Sanchez Date: Mon, 9 Dec 2024 06:41:39 -0500 Subject: [PATCH 2/2] ci: add gov module to interchaintest folder (#3408) * ict gov tests * decouple tests --------- Co-authored-by: MSalopek --- tests/interchain/delegator/gov_test.go | 237 +++++++++++++++++++++++++ 1 file changed, 237 insertions(+) create mode 100644 tests/interchain/delegator/gov_test.go diff --git a/tests/interchain/delegator/gov_test.go b/tests/interchain/delegator/gov_test.go new file mode 100644 index 0000000000..a617f21fed --- /dev/null +++ b/tests/interchain/delegator/gov_test.go @@ -0,0 +1,237 @@ +package delegator_test + +import ( + "encoding/json" + "fmt" + "strconv" + "testing" + + sdkmath "cosmossdk.io/math" + "github.com/stretchr/testify/suite" + "github.com/tidwall/gjson" + "github.com/tidwall/sjson" + + "github.com/cosmos/gaia/v21/tests/interchain/chainsuite" + "github.com/cosmos/gaia/v21/tests/interchain/delegator" + "github.com/strangelove-ventures/interchaintest/v8" + "github.com/strangelove-ventures/interchaintest/v8/ibc" +) + +const ( + stakeAmount = "10000000" // 10 ATOM + submissionDeposit = "100" + proposalDepositInt = chainsuite.GovMinDepositAmount + communityPoolAmount = "200000000" // 200 ATOM + yesWeight = 0.6 + noWeight = 0.3 + abstainWeight = 0.06 + vetoWeight = 0.04 + queryScaleMultiplier = 1000000000000000000 // 18 zeroes +) + +type GovSuite struct { + *delegator.Suite +} + +func (s *GovSuite) SetupSuite() { + s.Suite.SetupSuite() + // Delegate >1 ATOM with delegator account + node := s.Chain.GetNode() + node.StakingDelegate(s.GetContext(), s.DelegatorWallet.KeyName(), s.Chain.ValidatorWallets[0].ValoperAddress, string(stakeAmount)+s.Chain.Config().Denom) + node.StakingDelegate(s.GetContext(), s.DelegatorWallet2.KeyName(), s.Chain.ValidatorWallets[0].ValoperAddress, string(stakeAmount)+s.Chain.Config().Denom) +} + +func (s *GovSuite) TestProposal() { + // Test: + // 1. Proposal submission + // 2. Proposal deposit + // 3. Vote + // 4. Weighted vote + + // Submit proposal + prop, err := s.Chain.BuildProposal(nil, "Test Proposal", "Test Proposal", "ipfs://CID", submissionDeposit+"uatom", s.DelegatorWallet.FormattedAddress(), false) + s.Require().NoError(err) + result, err := s.Chain.SubmitProposal(s.GetContext(), s.DelegatorWallet.KeyName(), prop) + s.Require().NoError(err) + proposalId := result.ProposalID + + // Get status + proposalIDuint, err := strconv.ParseUint(proposalId, 10, 64) + proposal, err := s.Chain.GovQueryProposalV1(s.GetContext(), proposalIDuint) + s.Require().NoError(err) + + // Test submission + currentStatus := proposal.Status.String() + s.Require().Equal("PROPOSAL_STATUS_DEPOSIT_PERIOD", currentStatus) + + // Submit deposit to proposal + proposalDeposit := strconv.Itoa(proposalDepositInt) + node := s.Chain.GetNode() + _, err = node.ExecTx(s.GetContext(), s.DelegatorWallet.KeyName(), "gov", "deposit", proposalId, proposalDeposit+"uatom", "--gas", "auto") + s.Require().NoError(err) + submissionDepositUint, err := strconv.ParseUint(submissionDeposit, 10, 64) + s.Require().NoError(err) + depositTotal := proposalDepositInt + submissionDepositUint + + // Get status + proposalIDuint, err = strconv.ParseUint(proposalId, 10, 64) + proposal, err = s.Chain.GovQueryProposalV1(s.GetContext(), proposalIDuint) + s.Require().NoError(err) + currentStatus = proposal.Status.String() + + // Test deposit + deposit, err := s.Chain.QueryJSON(s.GetContext(), "deposit", "gov", "deposit", proposalId, s.DelegatorWallet.FormattedAddress()) + s.Require().NoError(err) + depositAmount := deposit.Get("amount.#(denom==\"uatom\").amount").String() + depositAmountUint, err := strconv.ParseUint(depositAmount, 10, 64) + s.Require().NoError(err) + s.Require().Equal("PROPOSAL_STATUS_VOTING_PERIOD", currentStatus) + s.Require().Equal(depositTotal, depositAmountUint) + + // Submit yes vote + _, err = node.ExecTx(s.GetContext(), s.DelegatorWallet.KeyName(), "gov", "vote", proposalId, "yes", "--gas", "auto") + s.Require().NoError(err) + + // Test vote + vote, err := s.Chain.QueryJSON(s.GetContext(), "vote", "gov", "vote", proposalId, s.DelegatorWallet.FormattedAddress()) + s.Require().NoError(err) + actual_yes_weight := vote.Get("options.#(option==\"VOTE_OPTION_YES\").weight") + chainsuite.GetLogger(s.GetContext()).Sugar().Infof("%s", actual_yes_weight.String()) + s.Require().Equal(float64(1.0), actual_yes_weight.Float()) + + // Submit weighted vote + _, err = node.ExecTx(s.GetContext(), s.DelegatorWallet2.KeyName(), "gov", "weighted-vote", proposalId, fmt.Sprintf("yes=%0.2f,no=%0.2f,abstain=%0.2f,no_with_veto=%0.2f", yesWeight, noWeight, abstainWeight, vetoWeight), "--gas", "auto") + s.Require().NoError(err) + + // Test weighted vote + vote, err = s.Chain.QueryJSON(s.GetContext(), "vote", "gov", "vote", proposalId, s.DelegatorWallet2.FormattedAddress()) + s.Require().NoError(err) + // chainsuite.GetLogger(s.GetContext()).Sugar().Infof("%s", vote) + actual_yes_weight = vote.Get("options.#(option==\"VOTE_OPTION_YES\").weight") + // chainsuite.GetLogger(s.GetContext()).Sugar().Infof("%s", actual_yes_weight.String()) + s.Require().Equal(float64(yesWeight), actual_yes_weight.Float()) + actual_no_weight := vote.Get("options.#(option==\"VOTE_OPTION_NO\").weight") + // chainsuite.GetLogger(s.GetContext()).Sugar().Infof("%s", actual_no_weight.String()) + s.Require().Equal(float64(noWeight), actual_no_weight.Float()) + actual_abstain_weight := vote.Get("options.#(option==\"VOTE_OPTION_ABSTAIN\").weight") + // chainsuite.GetLogger(s.GetContext()).Sugar().Infof("%s", actual_abstain_weight.String()) + s.Require().Equal(float64(abstainWeight), actual_abstain_weight.Float()) + actual_veto_weight := vote.Get("options.#(option==\"VOTE_OPTION_NO_WITH_VETO\").weight") + // chainsuite.GetLogger(s.GetContext()).Sugar().Infof("%s", actual_veto_weight.String()) + s.Require().Equal(float64(vetoWeight), actual_veto_weight.Float()) +} + +func (s *GovSuite) TestParamChange() { + govParams, err := s.Chain.QueryJSON(s.GetContext(), "params", "gov", "params") + s.Require().NoError(err) + chainsuite.GetLogger(s.GetContext()).Sugar().Infof("Params: %s", govParams) + currentThreshold := govParams.Get("threshold").Float() + chainsuite.GetLogger(s.GetContext()).Sugar().Infof("Current threshold: %f", currentThreshold) + newThreshold := 0.6 + + authority, err := s.Chain.GetGovernanceAddress(s.GetContext()) + s.Require().NoError(err) + + updatedParams, err := sjson.Set(govParams.String(), "threshold", fmt.Sprintf("%f", newThreshold)) + s.Require().NoError(err) + updatedParams, err = sjson.Set(updatedParams, "expedited_voting_period", "10s") + s.Require().NoError(err) + chainsuite.GetLogger(s.GetContext()).Sugar().Infof("Updated params: %s", updatedParams) + + paramChangeMessage := fmt.Sprintf(`{ + "@type": "/cosmos.gov.v1.MsgUpdateParams", + "authority": "%s", + "params": %s + }`, authority, updatedParams) + + chainsuite.GetLogger(s.GetContext()).Sugar().Infof("Message: %s", paramChangeMessage) + + // Submit proposal + prop, err := s.Chain.BuildProposal(nil, "Gov Param Change Proposal", "Test Proposal", "ipfs://CID", chainsuite.GovDepositAmount, s.DelegatorWallet.KeyName(), false) + s.Require().NoError(err) + prop.Messages = []json.RawMessage{json.RawMessage(paramChangeMessage)} + result, err := s.Chain.SubmitProposal(s.GetContext(), s.DelegatorWallet.KeyName(), prop) + s.Require().NoError(err) + proposalId := result.ProposalID + + json, _, err := s.Chain.GetNode().ExecQuery(s.GetContext(), "gov", "proposal", proposalId) + s.Require().NoError(err) + chainsuite.GetLogger(s.GetContext()).Sugar().Infof("%s", string(json)) + + // Pass proposal + s.Require().NoError(s.Chain.PassProposal(s.GetContext(), proposalId)) + + // Test + govParams, err = s.Chain.QueryJSON(s.GetContext(), "params", "gov", "params") + s.Require().NoError(err) + chainsuite.GetLogger(s.GetContext()).Sugar().Infof("Params: %s", govParams) + currentThreshold = govParams.Get("threshold").Float() + s.Require().Equal(newThreshold, currentThreshold) +} + +func (s *GovSuite) TestGovFundCommunityPool() { + // Fund gov account + authority, err := s.Chain.GetGovernanceAddress(s.GetContext()) + s.Require().NoError(err) + err = s.Chain.SendFunds(s.GetContext(), interchaintest.FaucetAccountKeyName, ibc.WalletAmount{ + Denom: chainsuite.Uatom, + Amount: sdkmath.NewInt(250000000), + Address: authority, + }) + s.Require().NoError(err) + balance, err := s.Chain.GetBalance(s.GetContext(), authority, chainsuite.Uatom) + fmt.Println("Gov module balance:", balance) + + jsonMsg, _, err := s.Chain.GetNode().ExecQuery(s.GetContext(), "distribution", "community-pool") + s.Require().NoError(err) + chainsuite.GetLogger(s.GetContext()).Sugar().Infof("%s", string(jsonMsg)) + poolBalanceJson := gjson.Get(string(jsonMsg), "pool.#(%\"*uatom\")") + chainsuite.GetLogger(s.GetContext()).Sugar().Infof("Community pool balance: %s", poolBalanceJson.String()) + startingPoolBalance, err := chainsuite.StrToSDKInt(poolBalanceJson.String()) + s.Require().NoError(err) + + // Build proposal + fundMessage := fmt.Sprintf(`{ + "@type": "/cosmos.distribution.v1beta1.MsgFundCommunityPool", + "amount": [ + { + "denom": "uatom", + "amount": "%s" + } + ], + "depositor": "%s" + }`, communityPoolAmount, authority) + + // Submit proposal + prop, err := s.Chain.BuildProposal(nil, "Community Pool Funding Proposal", "Test Proposal", "ipfs://CID", chainsuite.GovDepositAmount, s.DelegatorWallet.FormattedAddress(), false) + s.Require().NoError(err) + prop.Messages = []json.RawMessage{json.RawMessage(fundMessage)} + result, err := s.Chain.SubmitProposal(s.GetContext(), s.DelegatorWallet.KeyName(), prop) + s.Require().NoError(err) + proposalId := result.ProposalID + + // Pass proposal + err = s.Chain.PassProposal(s.GetContext(), proposalId) + + jsonMsg, _, err = s.Chain.GetNode().ExecQuery(s.GetContext(), "distribution", "community-pool") + s.Require().NoError(err) + chainsuite.GetLogger(s.GetContext()).Sugar().Infof("%s", string(jsonMsg)) + + // Test + poolBalanceJson = gjson.Get(string(jsonMsg), "pool.#(%\"*uatom\")") + chainsuite.GetLogger(s.GetContext()).Sugar().Infof("Community pool balance: %s", poolBalanceJson.String()) + endingPoolBalance, err := chainsuite.StrToSDKInt(poolBalanceJson.String()) + s.Require().NoError(err) + balanceDifference := endingPoolBalance.Uint64() - startingPoolBalance.Uint64() + chainsuite.GetLogger(s.GetContext()).Sugar().Infof("The community pool balance increased by %d", balanceDifference) + fundAmount, err := strconv.ParseUint(communityPoolAmount, 10, 64) + s.Require().NoError(err) + s.Require().GreaterOrEqual(balanceDifference, fundAmount) +} + +func TestGov(t *testing.T) { + s := &GovSuite{Suite: &delegator.Suite{Suite: chainsuite.NewSuite(chainsuite.SuiteConfig{ + UpgradeOnSetup: true, + })}} + suite.Run(t, s) +}