mirror of
				https://github.com/0glabs/0g-chain.git
				synced 2025-11-04 11:47:28 +00:00 
			
		
		
		
	Pricefeed query fix (#1149)
* filter prices in querier * filter prices in grpc querier * test grpc querier
This commit is contained in:
		
							parent
							
								
									31b8ed2276
								
							
						
					
					
						commit
						03ab76bb2d
					
				@ -56,8 +56,10 @@ func (s queryServer) Prices(c context.Context, req *types.QueryPricesRequest) (*
 | 
			
		||||
 | 
			
		||||
	var currentPrices types.CurrentPriceResponses
 | 
			
		||||
	for _, cp := range s.keeper.GetCurrentPrices(ctx) {
 | 
			
		||||
		if cp.MarketID != "" {
 | 
			
		||||
			currentPrices = append(currentPrices, types.CurrentPriceResponse(cp))
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	return &types.QueryPricesResponse{
 | 
			
		||||
		Prices: currentPrices,
 | 
			
		||||
 | 
			
		||||
@ -117,6 +117,33 @@ func (suite *grpcQueryTestSuite) TestGrpcPrices() {
 | 
			
		||||
	suite.Contains(prices.Prices, expectedPrice, "all prices should include the tstusd price")
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (suite *grpcQueryTestSuite) TestGrpcPrices_NoPriceSet() {
 | 
			
		||||
	params := types.NewParams([]types.Market{
 | 
			
		||||
		{MarketID: "tst:usd", BaseAsset: "tst", QuoteAsset: "usd", Oracles: []sdk.AccAddress{}, Active: true},
 | 
			
		||||
		{MarketID: "other:usd", BaseAsset: "other", QuoteAsset: "usd", Oracles: []sdk.AccAddress{}, Active: true},
 | 
			
		||||
	})
 | 
			
		||||
	suite.keeper.SetParams(suite.ctx, params)
 | 
			
		||||
 | 
			
		||||
	_, err := suite.keeper.SetPrice(
 | 
			
		||||
		suite.ctx, suite.addrs[2], "tst:usd",
 | 
			
		||||
		sdk.MustNewDecFromStr("0.34"),
 | 
			
		||||
		suite.now.Add(time.Hour*1))
 | 
			
		||||
	suite.NoError(err)
 | 
			
		||||
 | 
			
		||||
	err = suite.keeper.SetCurrentPrices(suite.ctx, "tst:usd")
 | 
			
		||||
	suite.NoError(err)
 | 
			
		||||
 | 
			
		||||
	// Set current price of "other:usd" with no individual prices in store
 | 
			
		||||
	_ = suite.keeper.SetCurrentPrices(suite.ctx, "other:usd")
 | 
			
		||||
 | 
			
		||||
	expectedPrice := types.NewCurrentPriceResponse("tst:usd", sdk.MustNewDecFromStr("0.34"))
 | 
			
		||||
	prices, err := suite.queryServer.Prices(sdk.WrapSDKContext(suite.ctx), &types.QueryPricesRequest{})
 | 
			
		||||
	suite.NoError(err)
 | 
			
		||||
 | 
			
		||||
	suite.Equal(len(prices.Prices), 1)
 | 
			
		||||
	suite.Equal(prices.Prices, types.CurrentPriceResponses{expectedPrice}, "should only contain tst:usd price")
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (suite *grpcQueryTestSuite) TestGrpcRawPrices() {
 | 
			
		||||
	suite.setTestParams()
 | 
			
		||||
	suite.setTstPrice()
 | 
			
		||||
 | 
			
		||||
@ -57,7 +57,16 @@ func queryPrice(ctx sdk.Context, req abci.RequestQuery, keeper Keeper, legacyQue
 | 
			
		||||
 | 
			
		||||
func queryPrices(ctx sdk.Context, req abci.RequestQuery, keeper Keeper, legacyQuerierCdc *codec.LegacyAmino) (res []byte, sdkErr error) {
 | 
			
		||||
	currentPrices := keeper.GetCurrentPrices(ctx)
 | 
			
		||||
	bz, err := codec.MarshalJSONIndent(legacyQuerierCdc, currentPrices)
 | 
			
		||||
 | 
			
		||||
	// Filter out invalid markets without a price
 | 
			
		||||
	var validCurrentPrices types.CurrentPrices
 | 
			
		||||
	for _, cp := range currentPrices {
 | 
			
		||||
		if cp.MarketID != "" {
 | 
			
		||||
			validCurrentPrices = append(validCurrentPrices, types.CurrentPrice(cp))
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	bz, err := codec.MarshalJSONIndent(legacyQuerierCdc, validCurrentPrices)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		return nil, sdkerrors.Wrap(sdkerrors.ErrJSONMarshal, err.Error())
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
		Loading…
	
		Reference in New Issue
	
	Block a user