2024-07-19 17:24:23 +00:00
|
|
|
package keeper
|
|
|
|
|
|
|
|
import (
|
|
|
|
"context"
|
|
|
|
|
|
|
|
sdk "github.com/cosmos/cosmos-sdk/types"
|
|
|
|
|
|
|
|
"github.com/kava-labs/kava/x/precisebank/types"
|
|
|
|
)
|
|
|
|
|
|
|
|
type queryServer struct {
|
|
|
|
keeper Keeper
|
|
|
|
}
|
|
|
|
|
|
|
|
// NewQueryServerImpl creates a new server for handling gRPC queries.
|
|
|
|
func NewQueryServerImpl(k Keeper) types.QueryServer {
|
|
|
|
return &queryServer{keeper: k}
|
|
|
|
}
|
|
|
|
|
|
|
|
var _ types.QueryServer = queryServer{}
|
|
|
|
|
|
|
|
// TotalFractionalBalances returns the total sum of all fractional balances.
|
|
|
|
// This is mostly for external verification of the total fractional balances,
|
|
|
|
// being a multiple of the conversion factor and backed by the reserve.
|
|
|
|
func (s queryServer) TotalFractionalBalances(
|
|
|
|
goCtx context.Context,
|
|
|
|
req *types.QueryTotalFractionalBalancesRequest,
|
|
|
|
) (*types.QueryTotalFractionalBalancesResponse, error) {
|
|
|
|
ctx := sdk.UnwrapSDKContext(goCtx)
|
|
|
|
|
|
|
|
totalAmount := s.keeper.GetTotalSumFractionalBalances(ctx)
|
|
|
|
|
|
|
|
totalCoin := sdk.NewCoin(types.ExtendedCoinDenom, totalAmount)
|
|
|
|
|
|
|
|
return &types.QueryTotalFractionalBalancesResponse{
|
|
|
|
Total: totalCoin,
|
|
|
|
}, nil
|
|
|
|
}
|
2024-07-25 20:36:36 +00:00
|
|
|
|
|
|
|
// Remainder returns the remainder amount in x/precisebank.
|
|
|
|
func (s queryServer) Remainder(
|
|
|
|
goCtx context.Context,
|
|
|
|
req *types.QueryRemainderRequest,
|
|
|
|
) (*types.QueryRemainderResponse, error) {
|
|
|
|
ctx := sdk.UnwrapSDKContext(goCtx)
|
|
|
|
|
|
|
|
remainder := s.keeper.GetRemainderAmount(ctx)
|
|
|
|
remainderCoin := sdk.NewCoin(types.ExtendedCoinDenom, remainder)
|
|
|
|
|
|
|
|
return &types.QueryRemainderResponse{
|
|
|
|
Remainder: remainderCoin,
|
|
|
|
}, nil
|
|
|
|
}
|
|
|
|
|
|
|
|
// FractionalBalance returns the fractional balance of an account.
|
|
|
|
func (s queryServer) FractionalBalance(
|
|
|
|
goCtx context.Context,
|
|
|
|
req *types.QueryFractionalBalanceRequest,
|
|
|
|
) (*types.QueryFractionalBalanceResponse, error) {
|
|
|
|
ctx := sdk.UnwrapSDKContext(goCtx)
|
|
|
|
|
|
|
|
address, err := sdk.AccAddressFromBech32(req.Address)
|
|
|
|
if err != nil {
|
|
|
|
return nil, err
|
|
|
|
}
|
|
|
|
|
|
|
|
amt := s.keeper.GetFractionalBalance(ctx, address)
|
|
|
|
fractionalBalance := sdk.NewCoin(types.ExtendedCoinDenom, amt)
|
|
|
|
|
|
|
|
return &types.QueryFractionalBalanceResponse{
|
|
|
|
FractionalBalance: fractionalBalance,
|
|
|
|
}, nil
|
|
|
|
}
|