diff --git a/client/mm/config.go b/client/mm/config.go index 840f5563d1..ea11a2c2dd 100644 --- a/client/mm/config.go +++ b/client/mm/config.go @@ -120,10 +120,7 @@ type BotConfig struct { } func (c *BotConfig) requiresPriceOracle() bool { - if c.BasicMMConfig != nil { - return c.BasicMMConfig.OracleWeighting != nil && *c.BasicMMConfig.OracleWeighting > 0 - } - return false + return c.BasicMMConfig != nil } func (c *BotConfig) requiresCEX() bool { diff --git a/client/mm/mm_basic.go b/client/mm/mm_basic.go index 6e73e94768..ddf3a04ada 100644 --- a/client/mm/mm_basic.go +++ b/client/mm/mm_basic.go @@ -12,21 +12,10 @@ import ( "sync/atomic" "decred.org/dcrdex/client/core" - "decred.org/dcrdex/client/orderbook" "decred.org/dcrdex/dex" "decred.org/dcrdex/dex/calc" ) -const ( - // Our mid-gap rate derived from the local DEX order book is converted to an - // effective mid-gap that can only vary by up to 3% from the oracle rate. - // This is to prevent someone from taking advantage of a sparse market to - // force a bot into giving a favorable price. In reality a market maker on - // an empty market should use a high oracle bias anyway, but this should - // prevent catastrophe. - maxOracleMismatch = 0.03 -) - // GapStrategy is a specifier for an algorithm to choose the maker bot's target // spread. type GapStrategy string @@ -81,22 +70,6 @@ type BasicMarketMakingConfig struct { // before they are replaced (units: ratio of price). Default: 0.1%. // 0 <= x <= 0.01. DriftTolerance float64 `json:"driftTolerance"` - - // OracleWeighting affects how the target price is derived based on external - // market data. OracleWeighting, r, determines the target price with the - // formula: - // target_price = dex_mid_gap_price * (1 - r) + oracle_price * r - // OracleWeighting is limited to 0 <= x <= 1.0. - // Fetching of price data is disabled if OracleWeighting = 0. - OracleWeighting *float64 `json:"oracleWeighting"` - - // OracleBias applies a bias in the positive (higher price) or negative - // (lower price) direction. -0.05 <= x <= 0.05. - OracleBias float64 `json:"oracleBias"` - - // EmptyMarketRate can be set if there is no market data available, and is - // ignored if there is market data available. - EmptyMarketRate float64 `json:"emptyMarketRate"` } func needBreakEvenHalfSpread(strat GapStrategy) bool { @@ -104,16 +77,6 @@ func needBreakEvenHalfSpread(strat GapStrategy) bool { } func (c *BasicMarketMakingConfig) Validate() error { - if c.OracleBias < -0.05 || c.OracleBias > 0.05 { - return fmt.Errorf("bias %f out of bounds", c.OracleBias) - } - if c.OracleWeighting != nil { - w := *c.OracleWeighting - if w < 0 || w > 1 { - return fmt.Errorf("oracle weighting %f out of bounds", w) - } - } - if c.DriftTolerance == 0 { c.DriftTolerance = 0.001 } @@ -182,7 +145,6 @@ type basicMMCalculator interface { type basicMMCalculatorImpl struct { *market - book dexOrderBook oracle oracle core botCoreAdaptor cfg *BasicMarketMakingConfig @@ -200,67 +162,19 @@ type basicMMCalculatorImpl struct { // If there is no fiat rate available, the empty market rate in the // configuration is used. func (b *basicMMCalculatorImpl) basisPrice() uint64 { - midGap, err := b.book.MidGap() - if err != nil && !errors.Is(err, orderbook.ErrEmptyOrderbook) { - b.log.Errorf("MidGap error: %v", err) - return 0 - } - - basisPrice := float64(midGap) // float64 message-rate units - - var oracleWeighting, oraclePrice float64 - if b.cfg.OracleWeighting != nil && *b.cfg.OracleWeighting > 0 { - oracleWeighting = *b.cfg.OracleWeighting - oraclePrice = b.oracle.getMarketPrice(b.baseID, b.quoteID) - if oraclePrice == 0 { - b.log.Warnf("no oracle price available for %s bot", b.name) - } - } - - if oraclePrice > 0 { - msgOracleRate := float64(b.msgRate(oraclePrice)) - - // Apply the oracle mismatch filter. - if basisPrice > 0 { - low, high := msgOracleRate*(1-maxOracleMismatch), msgOracleRate*(1+maxOracleMismatch) - if basisPrice < low { - b.log.Debugf("local mid-gap is below safe range. Using effective mid-gap of %.2f below the oracle rate.", maxOracleMismatch*100) - basisPrice = low - } else if basisPrice > high { - b.log.Debugf("local mid-gap is above safe range. Using effective mid-gap of %.2f above the oracle rate.", maxOracleMismatch*100) - basisPrice = high - } - } + oracleRate := b.msgRate(b.oracle.getMarketPrice(b.baseID, b.quoteID)) + b.log.Tracef("oracle rate = %s", b.fmtRate(oracleRate)) - if b.cfg.OracleBias != 0 { - msgOracleRate *= 1 + b.cfg.OracleBias + if oracleRate == 0 { + oracleRate = b.core.ExchangeRateFromFiatSources() + if oracleRate == 0 { + return 0 } - if basisPrice == 0 { // no mid-gap available. Use the oracle price. - basisPrice = msgOracleRate - b.log.Tracef("basisPrice: using basis price %s from oracle because no mid-gap was found in order book", b.fmtRate(uint64(msgOracleRate))) - } else { - basisPrice = msgOracleRate*oracleWeighting + basisPrice*(1-oracleWeighting) - b.log.Tracef("basisPrice: oracle-weighted basis price = %s", b.fmtRate(uint64(msgOracleRate))) - } - } - - if basisPrice > 0 { - return steppedRate(uint64(basisPrice), b.rateStep) + b.log.Tracef("using fiat rate = %s", b.fmtRate(oracleRate)) } - // TODO: add a configuration to turn off use of fiat rate? - fiatRate := b.core.ExchangeRateFromFiatSources() - if fiatRate > 0 { - return steppedRate(fiatRate, b.rateStep) - } - - if b.cfg.EmptyMarketRate > 0 { - emptyMsgRate := b.msgRate(b.cfg.EmptyMarketRate) - return steppedRate(emptyMsgRate, b.rateStep) - } - - return 0 + return steppedRate(oracleRate, b.rateStep) } // halfSpread calculates the distance from the mid-gap where if you sell a lot @@ -419,10 +333,11 @@ func (m *basicMarketMaker) rebalance(newEpoch uint64) { return } defer m.rebalanceRunning.Store(false) + m.log.Tracef("rebalance: epoch %d", newEpoch) basisPrice := m.calculator.basisPrice() if basisPrice == 0 { - m.log.Errorf("No basis price available and no empty-market rate set") + m.log.Errorf("No basis price available") return } @@ -431,6 +346,7 @@ func (m *basicMarketMaker) rebalance(newEpoch uint64) { m.log.Errorf("Could not calculate fee-gap stats: %v", err) return } + m.registerFeeGap(feeGap) var feeAdj uint64 if needBreakEvenHalfSpread(m.cfg().GapStrategy) { @@ -448,14 +364,13 @@ func (m *basicMarketMaker) rebalance(newEpoch uint64) { } func (m *basicMarketMaker) botLoop(ctx context.Context) (*sync.WaitGroup, error) { - book, bookFeed, err := m.core.SyncBook(m.host, m.baseID, m.quoteID) + _, bookFeed, err := m.core.SyncBook(m.host, m.baseID, m.quoteID) if err != nil { return nil, fmt.Errorf("failed to sync book: %v", err) } m.calculator = &basicMMCalculatorImpl{ market: m.market, - book: book, oracle: m.oracle, core: m.core, cfg: m.cfg(), diff --git a/client/mm/mm_basic_test.go b/client/mm/mm_basic_test.go index ab64ad6341..1e7f9ceba1 100644 --- a/client/mm/mm_basic_test.go +++ b/client/mm/mm_basic_test.go @@ -37,63 +37,28 @@ func TestBasisPrice(t *testing.T) { } tests := []*struct { - name string - midGap uint64 - oraclePrice uint64 - oracleBias float64 - oracleWeight float64 - conversions map[uint32]float64 - fiatRate uint64 - exp uint64 + name string + oraclePrice uint64 + fiatRate uint64 + exp uint64 }{ { - name: "just mid-gap is enough", - midGap: 123e5, - exp: 123e5, + name: "oracle price", + oraclePrice: 2000, + fiatRate: 1000, + exp: 2000, }, { - name: "mid-gap + oracle weight", - midGap: 1950, - oraclePrice: 2000, - oracleWeight: 0.5, - exp: 1975, + name: "no oracle price", + oraclePrice: 0, + fiatRate: 1000, + exp: 1000, }, { - name: "adjusted mid-gap + oracle weight", - midGap: 1000, // adjusted to 1940 - oraclePrice: 2000, - oracleWeight: 0.5, - exp: 1970, - }, - { - name: "no mid-gap effectively sets oracle weight to 100%", - midGap: 0, - oraclePrice: 2000, - oracleWeight: 0.5, - exp: 2000, - }, - { - name: "mid-gap + oracle weight + oracle bias", - midGap: 1950, - oraclePrice: 2000, - oracleBias: -0.01, // minus 20 - oracleWeight: 0.75, - exp: 1972, // 0.25 * 1950 + 0.75 * (2000 - 20) = 1972 - }, - { - name: "no mid-gap and no oracle weight fails to produce result", - midGap: 0, - oraclePrice: 0, - oracleWeight: 0.75, - exp: 0, - }, - { - name: "no mid-gap and no oracle weight, but fiat rate is set", - midGap: 0, - oraclePrice: 0, - oracleWeight: 0.75, - fiatRate: 1200, - exp: 1200, + name: "no oracle price or fiat rate", + oraclePrice: 0, + fiatRate: 0, + exp: 0, }, } @@ -101,13 +66,6 @@ func TestBasisPrice(t *testing.T) { oracle := &tOracle{ marketPrice: mkt.MsgRateToConventional(tt.oraclePrice), } - ob := &tOrderBook{ - midGap: tt.midGap, - } - cfg := &BasicMarketMakingConfig{ - OracleWeighting: &tt.oracleWeight, - OracleBias: tt.oracleBias, - } tCore := newTCore() adaptor := newTBotCoreAdaptor(tCore) @@ -115,9 +73,8 @@ func TestBasisPrice(t *testing.T) { calculator := &basicMMCalculatorImpl{ market: mustParseMarket(mkt), - book: ob, oracle: oracle, - cfg: cfg, + cfg: &BasicMarketMakingConfig{}, log: tLogger, core: adaptor, } diff --git a/client/webserver/live_test.go b/client/webserver/live_test.go index 447c8acf94..a20852143e 100644 --- a/client/webserver/live_test.go +++ b/client/webserver/live_test.go @@ -2386,13 +2386,9 @@ func randomBotConfig(mkt *mm.MarketWithHost) *mm.BotConfig { switch { case typeRoll < 0.33: // basic MM gapStrategy := gapStrategies[rand.Intn(len(gapStrategies))] - oracleWeight := rand.Float64() - oracleBias := rand.Float64() basicCfg := &mm.BasicMarketMakingConfig{ - GapStrategy: gapStrategies[rand.Intn(len(gapStrategies))], - DriftTolerance: rand.Float64() * 0.01, - OracleWeighting: &oracleWeight, - OracleBias: oracleBias, + GapStrategy: gapStrategies[rand.Intn(len(gapStrategies))], + DriftTolerance: rand.Float64() * 0.01, } cfg.BasicMMConfig = basicCfg lots, gapFactors := newPlacements(gapStrategy) diff --git a/client/webserver/site/src/html/mmsettings.tmpl b/client/webserver/site/src/html/mmsettings.tmpl index 8609149770..1c83fdeaa1 100644 --- a/client/webserver/site/src/html/mmsettings.tmpl +++ b/client/webserver/site/src/html/mmsettings.tmpl @@ -685,64 +685,6 @@ epochs - - {{- /* EMPTY MARKET RATE */ -}} -
- -
- - - - / - - -
-
-
- - {{- /* ORACLE SETTINGS */ -}} -
- {{- /* USE ORACLE CHECKBOX */ -}} - - - {{- /* ORACLE WEIGHTING */ -}} -
-
- [[[Oracle weight]]] - -
-
-
- - % -
-
- - {{- /* ORACLE BIAS */ -}} -
-
- [[[Oracle bias]]] - -
-
-
- - % -
-
-
diff --git a/client/webserver/site/src/js/mmsettings.ts b/client/webserver/site/src/js/mmsettings.ts index 8632e9baf9..a358542c5c 100644 --- a/client/webserver/site/src/js/mmsettings.ts +++ b/client/webserver/site/src/js/mmsettings.ts @@ -104,20 +104,6 @@ const defaultOrderPersistence = { range: 40, prec: 0 } -const defaultOracleBias = { - value: 0, - minV: -0.01, - maxV: 0.01, - range: 0.02, - prec: 4 -} -const defaultOracleWeighting = { - value: 1, - minV: 0, - maxV: 1, - range: 1, - prec: 4 -} const defaultProfit = { prec: 3, value: 0.01, @@ -160,9 +146,6 @@ const defaultMarketMakingConfig: ConfigState = { sellPlacements: [], buyPlacements: [], driftTolerance: defaultDriftTolerance.value, - oracleWeighting: 0.1, - oracleBias: 0, - emptyMarketRate: 0, profit: 0.02, orderPersistence: defaultOrderPersistence.value, cexRebalance: true, @@ -192,14 +175,9 @@ interface cexButton { */ interface ConfigState { gapStrategy: string - useOracles: boolean profit: number - useEmptyMarketRate: boolean - emptyMarketRate: number driftTolerance: number orderPersistence: number // epochs - oracleWeighting: number - oracleBias: number cexRebalance: boolean disabled: boolean buyPlacements: OrderPlacement[] @@ -273,10 +251,6 @@ export default class MarketMakerSettingsPage extends BasePage { driftToleranceSlider: MiniSlider orderPersistence: NumberInput orderPersistenceSlider: MiniSlider - oracleBias: NumberInput - oracleBiasSlider: MiniSlider - oracleWeighting: NumberInput - oracleWeightingSlider: MiniSlider constructor (main: HTMLElement, specs: BotSpecs) { super() @@ -390,42 +364,6 @@ export default class MarketMakerSettingsPage extends BasePage { this.orderPersistence.setValue(v) }) - this.oracleBias = new NumberInput(page.oracleBias, { - prec: defaultOracleBias.prec - 2, - min: defaultOracleBias.minV * 100, - changed: (rawV: number) => { - const { minV, range, prec } = defaultOracleBias - const [v] = toFourSigFigs(rawV / 100, prec) - this.oracleBiasSlider.setValue((v - minV) / range) - this.updatedConfig.oracleBias = v - } - }) - - this.oracleBiasSlider = new MiniSlider(page.oracleBiasSlider, (r: number) => { - const { minV, range, prec } = defaultOracleBias - const [v] = toFourSigFigs(minV + r * range, prec) - this.oracleBias.setValue(v * 100) - this.updatedConfig.oracleBias = v - }) - - this.oracleWeighting = new NumberInput(page.oracleWeighting, { - prec: defaultOracleWeighting.prec - 2, - min: defaultOracleWeighting.minV * 100, - changed: (rawV: number) => { - const { minV, range, prec } = defaultOracleWeighting - const [v] = toFourSigFigs(rawV / 100, prec) - this.oracleWeightingSlider.setValue((v - minV) / range) - this.updatedConfig.oracleWeighting = v / 100 - } - }) - - this.oracleWeightingSlider = new MiniSlider(page.oracleWeightingSlider, (r: number) => { - const { minV, range, prec } = defaultOracleWeighting - const [v] = toFourSigFigs(minV + r * range, prec) - this.oracleWeighting.setValue(v * 100) - this.updatedConfig.oracleWeighting = v - }) - this.qcProfit = new NumberInput(page.qcProfit, { prec: defaultProfit.prec - 2, // converting to percent sigFigs: true, @@ -561,26 +499,6 @@ export default class MarketMakerSettingsPage extends BasePage { this.updateModifiedMarkers() }) - Doc.bind(page.useOracleCheckbox, 'change', () => { - this.useOraclesChanged() - this.updateModifiedMarkers() - }) - - Doc.bind(page.emptyMarketRateCheckbox, 'change', () => { - this.useEmptyMarketRateChanged() - this.updateModifiedMarkers() - }) - - Doc.bind(page.emptyMarketRateInput, 'change', () => { - Doc.hide(page.emptyMarketRateErr) - this.updatedConfig.emptyMarketRate = parseFloatDefault(page.emptyMarketRateInput.value, 0) - this.updateModifiedMarkers() - if (this.updatedConfig.emptyMarketRate === 0) { - Doc.show(page.emptyMarketRateErr) - page.emptyMarketRateErr.textContent = intl.prep(intl.ID_NO_ZERO) - } - }) - this.botTypeSelectors = Doc.applySelector(page.botTypeForm, '[data-bot-type]') for (const div of this.botTypeSelectors) { Doc.bind(div, 'click', () => { @@ -659,12 +577,9 @@ export default class MarketMakerSettingsPage extends BasePage { const oldBotType = botCfg.arbMarketMakingConfig ? botTypeArbMM : botCfg.basicMarketMakingConfig ? botTypeBasicMM : botTypeBasicArb if (oldBotType !== botType) botCfg = undefined } - const dmm = defaultMarketMakingConfig Doc.setVis(botCfg, page.deleteBttnBox) const oldCfg = this.originalConfig = Object.assign({}, defaultMarketMakingConfig, { - useOracles: dmm.oracleWeighting > 0, - useEmptyMarketRate: dmm.emptyMarketRate > 0, disabled: viewOnly, baseOptions: this.defaultWalletOptions(baseID), quoteOptions: this.defaultWalletOptions(quoteID), @@ -693,9 +608,6 @@ export default class MarketMakerSettingsPage extends BasePage { oldCfg.sellPlacements = mmCfg.sellPlacements oldCfg.driftTolerance = mmCfg.driftTolerance oldCfg.gapStrategy = mmCfg.gapStrategy - oldCfg.oracleWeighting = mmCfg.oracleWeighting - oldCfg.oracleBias = mmCfg.oracleBias - oldCfg.emptyMarketRate = mmCfg.emptyMarketRate } else if (arbMMCfg) { const { buyPlacements, sellPlacements } = arbMMCfg oldCfg.buyPlacements = Array.from(buyPlacements, (p: ArbMarketMakingPlacement) => { return { lots: p.lots, gapFactor: p.multiplier } }) @@ -730,7 +642,6 @@ export default class MarketMakerSettingsPage extends BasePage { } setMarketElements(document.body, baseID, quoteID, host) - Doc.setVis(botType === botTypeBasicMM, page.emptyMarketRateBox) Doc.setVis(botType !== botTypeBasicArb, page.driftToleranceBox, page.switchToAdvanced) Doc.setVis(Boolean(cexName), ...Doc.applySelector(document.body, '[data-cex-show]')) @@ -1408,9 +1319,6 @@ export default class MarketMakerSettingsPage extends BasePage { } } page.sellPlacementsTableWrapper.classList.toggle('modified', sellPlacementsModified) - page.useOracleCheckbox.classList.toggle('modified', oldCfg.useOracles !== newCfg.useOracles) - page.emptyMarketRateInput.classList.toggle('modified', oldCfg.emptyMarketRate !== newCfg.emptyMarketRate) - page.emptyMarketRateCheckbox.classList.toggle('modified', oldCfg.useEmptyMarketRate !== newCfg.useEmptyMarketRate) } /* @@ -1674,34 +1582,6 @@ export default class MarketMakerSettingsPage extends BasePage { for (const p of cfg.sellPlacements) this.addPlacement(false, p, gapStrategy) } - useOraclesChanged () { - const { page, updatedConfig: cfg } = this - if (page.useOracleCheckbox.checked) { - Doc.show(page.oracleBiasBox, page.oracleWeightingBox) - cfg.useOracles = true - this.oracleWeighting.setValue((cfg.oracleWeighting || defaultMarketMakingConfig.oracleWeighting) * 100) - this.oracleBias.setValue((cfg.oracleBias || defaultMarketMakingConfig.oracleBias) * 100) - } else { - Doc.hide(page.oracleBiasBox, page.oracleWeightingBox) - cfg.useOracles = false - } - } - - useEmptyMarketRateChanged () { - const { page, updatedConfig: cfg } = this - if (page.emptyMarketRateCheckbox.checked) { - cfg.useEmptyMarketRate = true - const r = cfg.emptyMarketRate ?? this.originalConfig.emptyMarketRate ?? 0 - page.emptyMarketRateInput.value = String(r) - cfg.emptyMarketRate = r - Doc.show(page.emptyMarketRateInputBox) - this.updateModifiedMarkers() - } else { - cfg.useEmptyMarketRate = false - Doc.hide(page.emptyMarketRateInputBox) - } - } - /* * setOriginalValues sets the updatedConfig field to be equal to the * and sets the values displayed buy each field input to be equal @@ -1733,24 +1613,11 @@ export default class MarketMakerSettingsPage extends BasePage { this.orderPersistence.setValue(persist) this.orderPersistenceSlider.setValue(persist / defaultOrderPersistence.maxV) - const oracleBias = cfg.oracleBias ?? defaultOracleBias.value - this.oracleBias.setValue(oracleBias * 100) - this.oracleBiasSlider.setValue((oracleBias - defaultOracleBias.minV) / defaultOracleBias.range) - - const oracleWeight = cfg.oracleWeighting ?? defaultOracleWeighting.value - this.oracleWeighting.setValue(oracleWeight * 100) - this.oracleWeightingSlider.setValue((oracleWeight - defaultOracleWeighting.minV) / defaultOracleWeighting.range) - const profit = cfg.profit ?? defaultProfit.value page.profitInput.value = String(profit * 100) this.qcProfit.setValue(profit * 100) this.qcProfitSlider.setValue((profit - defaultProfit.minV) / defaultProfit.range) - page.useOracleCheckbox.checked = cfg.useOracles && oldCfg.oracleWeighting > 0 - this.useOraclesChanged() - page.emptyMarketRateCheckbox.checked = cfg.useEmptyMarketRate && cfg.emptyMarketRate > 0 - this.useEmptyMarketRateChanged() - if (cexName) { page.cexRebalanceCheckbox.checked = cfg.cexRebalance this.autoRebalanceChanged() @@ -1762,11 +1629,11 @@ export default class MarketMakerSettingsPage extends BasePage { this.setGapFactorLabels(cfg.gapStrategy) if (botType === botTypeBasicMM) { - Doc.show(page.gapStrategyBox, page.oraclesSettingBox) + Doc.show(page.gapStrategyBox) Doc.hide(page.profitSelectorBox, page.orderPersistenceBox) this.setGapFactorLabels(page.gapStrategySelect.value || '') } else if (cexName && app().mmStatus.cexes[cexName]) { - Doc.hide(page.gapStrategyBox, page.oraclesSettingBox) + Doc.hide(page.gapStrategyBox) Doc.show(page.profitSelectorBox, page.orderPersistenceBox) this.setArbMMLabels() } @@ -1790,7 +1657,7 @@ export default class MarketMakerSettingsPage extends BasePage { let ok = true const { page, specs: { botType }, - updatedConfig: { sellPlacements, buyPlacements, profit, useEmptyMarketRate, emptyMarketRate } + updatedConfig: { sellPlacements, buyPlacements, profit } } = this const setError = (errEl: PageElement, errID: string) => { ok = false @@ -1800,7 +1667,7 @@ export default class MarketMakerSettingsPage extends BasePage { } if (showErrors) { Doc.hide( - page.buyPlacementsErr, page.sellPlacementsErr, page.profitInputErr, page.emptyMarketRateErr + page.buyPlacementsErr, page.sellPlacementsErr, page.profitInputErr ) } if (botType !== botTypeBasicArb && buyPlacements.length + sellPlacements.length === 0) { @@ -1810,10 +1677,6 @@ export default class MarketMakerSettingsPage extends BasePage { if (botType !== botTypeBasicMM) { if (isNaN(profit)) setError(page.profitInputErr, intl.ID_INVALID_VALUE) else if (profit === 0) setError(page.profitInputErr, intl.ID_NO_ZERO) - } else { // basic mm - // TODO: Should we enforce an empty market rate if there are no - // oracles? - if (useEmptyMarketRate && emptyMarketRate === 0) setError(page.emptyMarketRateErr, intl.ID_NO_ZERO) } return ok } @@ -1921,10 +1784,7 @@ export default class MarketMakerSettingsPage extends BasePage { gapStrategy: cfg.gapStrategy, sellPlacements: cfg.sellPlacements, buyPlacements: cfg.buyPlacements, - driftTolerance: cfg.driftTolerance, - oracleWeighting: cfg.useOracles ? cfg.oracleWeighting : 0, - oracleBias: cfg.useOracles ? cfg.oracleBias : 0, - emptyMarketRate: cfg.useEmptyMarketRate ? cfg.emptyMarketRate : 0 + driftTolerance: cfg.driftTolerance } return mmCfg } diff --git a/client/webserver/site/src/js/registry.ts b/client/webserver/site/src/js/registry.ts index 2992a7ef41..b88f93d15e 100644 --- a/client/webserver/site/src/js/registry.ts +++ b/client/webserver/site/src/js/registry.ts @@ -749,9 +749,6 @@ export interface BasicMarketMakingConfig { sellPlacements: OrderPlacement[] buyPlacements: OrderPlacement[] driftTolerance: number - oracleWeighting: number - oracleBias: number - emptyMarketRate: number } export interface ArbMarketMakingPlacement {