github.com/fibonacci-chain/fbc@v0.0.0-20231124064014-c7636198c1e9/x/farm/keeper/querier.go (about) 1 package keeper 2 3 import ( 4 "github.com/fibonacci-chain/fbc/libs/cosmos-sdk/client" 5 "github.com/fibonacci-chain/fbc/libs/cosmos-sdk/codec" 6 abci "github.com/fibonacci-chain/fbc/libs/tendermint/abci/types" 7 "github.com/fibonacci-chain/fbc/x/common" 8 9 sdk "github.com/fibonacci-chain/fbc/libs/cosmos-sdk/types" 10 "github.com/fibonacci-chain/fbc/x/farm/types" 11 ) 12 13 const ( 14 defaultPoolsDisplayedNum = 20 15 ) 16 17 // NewQuerier creates a new querier for farm clients. 18 func NewQuerier(k Keeper) sdk.Querier { 19 return func(ctx sdk.Context, path []string, req abci.RequestQuery) ([]byte, sdk.Error) { 20 switch path[0] { 21 case types.QueryPool: 22 return queryPool(ctx, req, k) 23 case types.QueryPools: 24 return queryPools(ctx, req, k) 25 case types.QueryEarnings: 26 return queryEarnings(ctx, req, k) 27 case types.QueryLockInfo: 28 return queryLockInfo(ctx, req, k) 29 case types.QueryParameters: 30 return queryParams(ctx, k) 31 case types.QueryWhitelist: 32 return queryWhitelist(ctx, k) 33 case types.QueryAccount: 34 return queryAccount(ctx, req, k) 35 case types.QueryAccountsLockedTo: 36 return queryAccountsLockedTo(ctx, req, k) 37 case types.QueryPoolNum: 38 return queryPoolNum(ctx, k) 39 default: 40 return nil, types.ErrUnknownFarmQueryType("failed. unknown farm query endpoint") 41 } 42 } 43 } 44 45 func queryPool(ctx sdk.Context, req abci.RequestQuery, k Keeper) ([]byte, sdk.Error) { 46 var params types.QueryPoolParams 47 48 if err := types.ModuleCdc.UnmarshalJSON(req.Data, ¶ms); err != nil { 49 return nil, defaultQueryErrParseParams(err) 50 } 51 52 pool, found := k.GetFarmPool(ctx, params.PoolName) 53 if !found { 54 return nil, types.ErrNoFarmPoolFound(params.PoolName) 55 } 56 57 updatedPool, _ := k.CalculateAmountYieldedBetween(ctx, pool) 58 59 res, err := codec.MarshalJSONIndent(types.ModuleCdc, updatedPool) 60 if err != nil { 61 return nil, defaultQueryErrJSONMarshal(err) 62 } 63 64 return res, nil 65 } 66 67 // support query by page && limit 68 func queryPools(ctx sdk.Context, req abci.RequestQuery, k Keeper) ([]byte, sdk.Error) { 69 var params types.QueryPoolsParams 70 if err := types.ModuleCdc.UnmarshalJSON(req.Data, ¶ms); err != nil { 71 return nil, defaultQueryErrParseParams(err) 72 } 73 74 pools := k.GetFarmPools(ctx) 75 var updatedPools types.FarmPools 76 for _, pool := range pools { 77 updatedPool, _ := k.CalculateAmountYieldedBetween(ctx, pool) 78 updatedPools = append(updatedPools, updatedPool) 79 } 80 81 if !(params.Page == 1 && params.Limit == 0) { 82 start, end := client.Paginate(len(updatedPools), params.Page, params.Limit, defaultPoolsDisplayedNum) 83 if start < 0 || end < 0 { 84 start, end = 0, 0 85 } 86 updatedPools = updatedPools[start:end] 87 } 88 89 res, err := codec.MarshalJSONIndent(types.ModuleCdc, updatedPools) 90 if err != nil { 91 return nil, defaultQueryErrJSONMarshal(err) 92 } 93 94 return res, nil 95 } 96 97 func queryEarnings(ctx sdk.Context, req abci.RequestQuery, k Keeper) ([]byte, sdk.Error) { 98 var params types.QueryPoolAccountParams 99 if err := types.ModuleCdc.UnmarshalJSON(req.Data, ¶ms); err != nil { 100 return nil, defaultQueryErrParseParams(err) 101 } 102 103 earnings, sdkErr := k.GetEarnings(ctx, params.PoolName, params.AccAddress) 104 if sdkErr != nil { 105 return nil, sdkErr 106 } 107 108 res, err := codec.MarshalJSONIndent(types.ModuleCdc, earnings) 109 if err != nil { 110 return nil, defaultQueryErrJSONMarshal(err) 111 } 112 113 return res, nil 114 } 115 116 func queryLockInfo(ctx sdk.Context, req abci.RequestQuery, k Keeper) ([]byte, sdk.Error) { 117 var params types.QueryPoolAccountParams 118 if err := types.ModuleCdc.UnmarshalJSON(req.Data, ¶ms); err != nil { 119 return nil, defaultQueryErrParseParams(err) 120 } 121 122 lockInfo, found := k.GetLockInfo(ctx, params.AccAddress, params.PoolName) 123 if !found { 124 return nil, types.ErrNoLockInfoFound(params.AccAddress.String(), params.PoolName) 125 } 126 127 res, err := codec.MarshalJSONIndent(types.ModuleCdc, lockInfo) 128 if err != nil { 129 return nil, defaultQueryErrJSONMarshal(err) 130 } 131 132 return res, nil 133 } 134 135 func queryParams(ctx sdk.Context, k Keeper) ([]byte, sdk.Error) { 136 params := k.GetParams(ctx) 137 res, err := codec.MarshalJSONIndent(types.ModuleCdc, params) 138 if err != nil { 139 return nil, defaultQueryErrJSONMarshal(err) 140 } 141 142 return res, nil 143 } 144 145 func queryWhitelist(ctx sdk.Context, k Keeper) ([]byte, sdk.Error) { 146 whitelist := k.GetWhitelist(ctx) 147 res, err := codec.MarshalJSONIndent(types.ModuleCdc, whitelist) 148 if err != nil { 149 return nil, defaultQueryErrJSONMarshal(err) 150 } 151 152 return res, nil 153 } 154 155 func queryAccount(ctx sdk.Context, req abci.RequestQuery, k Keeper) ([]byte, sdk.Error) { 156 var params types.QueryAccountParams 157 if err := types.ModuleCdc.UnmarshalJSON(req.Data, ¶ms); err != nil { 158 return nil, defaultQueryErrParseParams(err) 159 } 160 161 poolNames := k.GetFarmPoolNamesForAccount(ctx, params.AccAddress) 162 res, err := codec.MarshalJSONIndent(types.ModuleCdc, poolNames) 163 if err != nil { 164 return nil, defaultQueryErrJSONMarshal(err) 165 } 166 167 return res, nil 168 } 169 170 func queryAccountsLockedTo(ctx sdk.Context, req abci.RequestQuery, k Keeper) ([]byte, sdk.Error) { 171 var params types.QueryPoolParams 172 if err := types.ModuleCdc.UnmarshalJSON(req.Data, ¶ms); err != nil { 173 return nil, defaultQueryErrParseParams(err) 174 } 175 176 accAddrList := k.getAccountsLockedTo(ctx, params.PoolName) 177 res, err := codec.MarshalJSONIndent(types.ModuleCdc, accAddrList) 178 if err != nil { 179 return nil, defaultQueryErrJSONMarshal(err) 180 } 181 182 return res, nil 183 } 184 185 func queryPoolNum(ctx sdk.Context, k Keeper) ([]byte, sdk.Error) { 186 poolNum := k.getPoolNum(ctx) 187 res, err := codec.MarshalJSONIndent(types.ModuleCdc, poolNum) 188 if err != nil { 189 return nil, defaultQueryErrJSONMarshal(err) 190 } 191 192 return res, nil 193 } 194 195 func defaultQueryErrJSONMarshal(err error) sdk.Error { 196 return common.ErrMarshalJSONFailed(err.Error()) 197 } 198 199 func defaultQueryErrParseParams(err error) sdk.Error { 200 return common.ErrUnMarshalJSONFailed(err.Error()) 201 }