diff --git a/CHANGELOG.md b/CHANGELOG.md index ee1ea37ad..3949f99f2 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -13,6 +13,7 @@ - [#1088](https://github.com/crypto-org-chain/chain-main/pull/1088) Upgrade solomachine to `v0.1.4` and ibc-go to `v8.5.1`. * [#1091](https://github.com/crypto-org-chain/chain-main/pull/1091) Update cometbft to `0.38.13`, sdk to `v0.50.10` and memiavl to latest. - [#1091](https://github.com/crypto-org-chain/chain-main/pull/1091) Upgrade cometbft to v0.38.13, cosmos-sdk to `v0.50.10`. +- [#1099](https://github.com/crypto-org-chain/chain-main/pull/1099) Avoid negative coin amount error when query supply liquid of non BaseCoinUnit. *Dec 6, 2023* diff --git a/integration_tests/test_ibc_extended.py b/integration_tests/test_ibc_extended.py index 95a1762e7..fe3ca93f2 100644 --- a/integration_tests/test_ibc_extended.py +++ b/integration_tests/test_ibc_extended.py @@ -1,4 +1,5 @@ import hashlib +import json from pathlib import Path import pytest @@ -19,6 +20,26 @@ def cluster(worker_index, pytestconfig, tmp_path_factory): ) +def fund_community_pool(self, amt, event_query_tx=True, **kwargs): + rsp = json.loads( + self.raw( + "tx", + "distribution", + "fund-community-pool", + amt, + "-y", + home=self.data_dir, + keyring_backend="test", + chain_id=self.chain_id, + node=self.node_rpc, + **kwargs, + ) + ) + if rsp["code"] == 0 and event_query_tx: + rsp = self.event_query_tx_for(rsp["txhash"]) + return rsp + + # 3 accounts ibc test # ibc-0 (A,B) ibc-1 (C) # EscrowAddress: sha256-hash of ibc-version,port-id,channel-id @@ -74,3 +95,17 @@ def check_balance_change(): wait_for_fn("balance change", check_balance_change) assert new_src_balance == amt2 + old_src_balance, new_src_balance + + amt3 = 1 + fund_community_pool( + cluster["ibc-1"].cosmos_cli(), f"{amt3}{ibc_denom}", from_=addr_1 + ) + cluster["ibc-1"].distribution_community() + res = cluster["ibc-1"].supply("liquid") + assert res == { + "supply": [ + {"denom": denom, "amount": "260000000000"}, + {"denom": ibc_denom, "amount": f"{amt - amt2 - amt3}"}, + {"denom": "ibcfee", "amount": "100000000000"}, + ] + } diff --git a/x/supply/keeper/keeper.go b/x/supply/keeper/keeper.go index 1db991f33..6175d798d 100644 --- a/x/supply/keeper/keeper.go +++ b/x/supply/keeper/keeper.go @@ -6,7 +6,6 @@ import ( "github.com/cosmos/cosmos-sdk/codec" sdk "github.com/cosmos/cosmos-sdk/types" sdkerrors "github.com/cosmos/cosmos-sdk/types/errors" - "github.com/crypto-org-chain/chain-main/v4/config" "github.com/crypto-org-chain/chain-main/v4/x/supply/types" authtypes "github.com/cosmos/cosmos-sdk/x/auth/types" @@ -92,7 +91,12 @@ func (k Keeper) GetVestingAccounts(ctx sdk.Context) types.VestingAccounts { // GetTotalSupply returns the current total supply in the system func (k Keeper) GetTotalSupply(ctx sdk.Context) sdk.Coins { - return sdk.NewCoins(k.bankKeeper.GetSupply(ctx, config.BaseCoinUnit)) + var totalSupply sdk.Coins + k.bankKeeper.IterateTotalSupply(ctx, func(coin sdk.Coin) bool { + totalSupply = totalSupply.Add(coin) + return false + }) + return totalSupply } // GetUnvestedSupply returns total unvested supply diff --git a/x/supply/types/expected_keepers.go b/x/supply/types/expected_keepers.go index 9202b4ee1..3ea47c958 100644 --- a/x/supply/types/expected_keepers.go +++ b/x/supply/types/expected_keepers.go @@ -10,7 +10,7 @@ import ( // creating a x/supply keeper. type BankKeeper interface { GetAllBalances(ctx context.Context, addr sdk.AccAddress) sdk.Coins - GetSupply(ctx context.Context, denom string) sdk.Coin + IterateTotalSupply(ctx context.Context, cb func(sdk.Coin) bool) LockedCoins(ctx context.Context, addr sdk.AccAddress) sdk.Coins }