Skip to content

Commit 454576a

Browse files
authored
Merge pull request cosmos#609 from CosmWasm/606-bank_query
Optimize BalanceQuery
2 parents 3c0bca7 + 0589f38 commit 454576a

File tree

3 files changed

+49
-4
lines changed

3 files changed

+49
-4
lines changed

x/wasm/keeper/query_plugins.go

+3-4
Original file line numberDiff line numberDiff line change
@@ -168,12 +168,11 @@ func BankQuerier(bankKeeper types.BankViewKeeper) func(ctx sdk.Context, request
168168
if err != nil {
169169
return nil, sdkerrors.Wrap(sdkerrors.ErrInvalidAddress, request.Balance.Address)
170170
}
171-
coins := bankKeeper.GetAllBalances(ctx, addr)
172-
amount := coins.AmountOf(request.Balance.Denom)
171+
coin := bankKeeper.GetBalance(ctx, addr, request.Balance.Denom)
173172
res := wasmvmtypes.BalanceResponse{
174173
Amount: wasmvmtypes.Coin{
175-
Denom: request.Balance.Denom,
176-
Amount: amount.String(),
174+
Denom: coin.Denom,
175+
Amount: coin.Amount.String(),
177176
},
178177
}
179178
return json.Marshal(res)

x/wasm/keeper/query_plugins_test.go

+45
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package keeper
22

33
import (
4+
"encoding/json"
45
"github.com/CosmWasm/wasmd/x/wasm/keeper/wasmtesting"
56
"github.com/CosmWasm/wasmd/x/wasm/types"
67
wasmvmtypes "github.com/CosmWasm/wasmvm/types"
@@ -311,6 +312,31 @@ func TestIBCQuerier(t *testing.T) {
311312

312313
}
313314

315+
func TestBankQuerierBalance(t *testing.T) {
316+
mock := bankKeeperMock{GetBalanceFn: func(ctx sdk.Context, addr sdk.AccAddress, denom string) sdk.Coin {
317+
return sdk.NewCoin(denom, sdk.NewInt(1))
318+
}}
319+
320+
ctx := sdk.Context{}
321+
q := BankQuerier(mock)
322+
gotBz, gotErr := q(ctx, &wasmvmtypes.BankQuery{
323+
Balance: &wasmvmtypes.BalanceQuery{
324+
Address: RandomBech32AccountAddress(t),
325+
Denom: "ALX",
326+
},
327+
})
328+
require.NoError(t, gotErr)
329+
var got wasmvmtypes.BalanceResponse
330+
require.NoError(t, json.Unmarshal(gotBz, &got))
331+
exp := wasmvmtypes.BalanceResponse{
332+
Amount: wasmvmtypes.Coin{
333+
Denom: "ALX",
334+
Amount: "1",
335+
},
336+
}
337+
assert.Equal(t, exp, got)
338+
}
339+
314340
type wasmKeeperMock struct {
315341
GetContractInfoFn func(ctx sdk.Context, contractAddress sdk.AccAddress) *types.ContractInfo
316342
}
@@ -325,3 +351,22 @@ func (m wasmKeeperMock) GetContractInfo(ctx sdk.Context, contractAddress sdk.Acc
325351
}
326352
return m.GetContractInfoFn(ctx, contractAddress)
327353
}
354+
355+
type bankKeeperMock struct {
356+
GetBalanceFn func(ctx sdk.Context, addr sdk.AccAddress, denom string) sdk.Coin
357+
GetAllBalancesFn func(ctx sdk.Context, addr sdk.AccAddress) sdk.Coins
358+
}
359+
360+
func (m bankKeeperMock) GetBalance(ctx sdk.Context, addr sdk.AccAddress, denom string) sdk.Coin {
361+
if m.GetBalanceFn == nil {
362+
panic("not expected to be called")
363+
}
364+
return m.GetBalanceFn(ctx, addr, denom)
365+
}
366+
367+
func (m bankKeeperMock) GetAllBalances(ctx sdk.Context, addr sdk.AccAddress) sdk.Coins {
368+
if m.GetAllBalancesFn == nil {
369+
panic("not expected to be called")
370+
}
371+
return m.GetAllBalancesFn(ctx, addr)
372+
}

x/wasm/types/expected_keepers.go

+1
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@ import (
1515
// BankViewKeeper defines a subset of methods implemented by the cosmos-sdk bank keeper
1616
type BankViewKeeper interface {
1717
GetAllBalances(ctx sdk.Context, addr sdk.AccAddress) sdk.Coins
18+
GetBalance(ctx sdk.Context, addr sdk.AccAddress, denom string) sdk.Coin
1819
}
1920

2021
// Burner is a subset of the sdk bank keeper methods

0 commit comments

Comments
 (0)