Skip to content

Commit

Permalink
feat: check if normalize markets are enabled in marketmap (#754)
Browse files Browse the repository at this point in the history
  • Loading branch information
aljo242 committed Sep 18, 2024
1 parent 04c8ba5 commit 66aac54
Show file tree
Hide file tree
Showing 2 changed files with 52 additions and 4 deletions.
11 changes: 7 additions & 4 deletions x/marketmap/keeper/keeper.go
Original file line number Diff line number Diff line change
Expand Up @@ -196,13 +196,16 @@ func (k *Keeper) IsMarketValid(ctx sdk.Context, market types.Market) error {
// check that all markets already exist in the keeper store:
for _, providerConfig := range market.ProviderConfigs {
if providerConfig.NormalizeByPair != nil {
has, err := k.markets.Has(ctx, types.TickerString(providerConfig.NormalizeByPair.String()))
norm, err := k.markets.Get(ctx, types.TickerString(providerConfig.NormalizeByPair.String()))
if err != nil {
return err
return fmt.Errorf("unable to get normalize market %s for market %s: %w",
providerConfig.NormalizeByPair.String(), market.Ticker.String(), err)
}

if !has {
return fmt.Errorf("currency pair %s in provider config does not exist", providerConfig.NormalizeByPair.String())
// if the new market is enabled, its normalize by market must also be enabled
if market.Ticker.Enabled && !norm.Ticker.Enabled {
return fmt.Errorf("needed normalize market %s for market %s is not enabled",
providerConfig.NormalizeByPair.String(), market.Ticker.String())
}
}
}
Expand Down
45 changes: 45 additions & 0 deletions x/marketmap/keeper/keeper_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -276,6 +276,51 @@ func (s *KeeperTestSuite) TestValidUpdate() {
s.Require().NoError(s.keeper.ValidateState(s.ctx, []types.Market{validMarket}))
}

func (s *KeeperTestSuite) TestInvalidUpdateDisabledNormalizeBy() {
marketBTCUSDT := btcusdt
marketETHUSDT := ethusdt

// create a valid markets
marketBTCUSDT.Ticker.Enabled = true
marketETHUSDT.Ticker.Enabled = false

s.Require().NoError(s.keeper.CreateMarket(s.ctx, marketBTCUSDT))
s.Require().NoError(s.keeper.CreateMarket(s.ctx, marketETHUSDT))

// invalid market with a normalize pair that is in state but disabled
invalidMarket := marketBTCUSDT
invalidMarket.ProviderConfigs = append(invalidMarket.ProviderConfigs, types.ProviderConfig{
Name: "huobi",
OffChainTicker: "btc-usdt",
NormalizeByPair: &marketETHUSDT.Ticker.CurrencyPair,
})

s.Require().NoError(s.keeper.UpdateMarket(s.ctx, invalidMarket))
s.Require().Error(s.keeper.ValidateState(s.ctx, []types.Market{invalidMarket}))
}

func (s *KeeperTestSuite) TestInvalidCreateDisabledNormalizeBy() {
marketBTCUSDT := btcusdt
marketETHUSDT := ethusdt

// create a valid markets
marketBTCUSDT.Ticker.Enabled = true
marketETHUSDT.Ticker.Enabled = false

s.Require().NoError(s.keeper.CreateMarket(s.ctx, marketETHUSDT))

// invalid market with a normalize pair that is in state but disabled
invalidMarket := marketBTCUSDT
invalidMarket.ProviderConfigs = append(invalidMarket.ProviderConfigs, types.ProviderConfig{
Name: "huobi",
OffChainTicker: "btc-usdt",
NormalizeByPair: &marketETHUSDT.Ticker.CurrencyPair,
})

s.Require().NoError(s.keeper.CreateMarket(s.ctx, invalidMarket))
s.Require().Error(s.keeper.ValidateState(s.ctx, []types.Market{invalidMarket}))
}

func (s *KeeperTestSuite) TestDeleteMarket() {
// create a valid markets
s.Require().NoError(s.keeper.CreateMarket(s.ctx, btcusdt))
Expand Down

0 comments on commit 66aac54

Please sign in to comment.