Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

client/{webserver,app}: Update Market Making UI #2491

Merged
merged 6 commits into from
Sep 25, 2023
Merged

Conversation

martonp
Copy link
Contributor

@martonp martonp commented Aug 30, 2023

Updates the market making UI to reflect the updated way in which market making works. A JSON configuration file, the same that would be used by the RPC server, is stored on disk, and the UI gives users an interactive way to read/update the config file, and also to start/stop market making.

The updated UI includes two screens, /mm and /mmsettings. /mm allows users to see each of the market for which a market maker is configured, allows the user to add/remove market makers, and links to the /mmsettings page of each market maker. The /mmsettings page allows users to configure each setting of each of the market makers.

The markets page is also updated to not allow users to place orders manually while market making is running.

client/mm/mm.go Outdated Show resolved Hide resolved
client/mm/notification.go Outdated Show resolved Hide resolved
client/mm/notification.go Outdated Show resolved Hide resolved
client/mm/price_oracle.go Outdated Show resolved Hide resolved
client/mm/price_oracle.go Show resolved Hide resolved
client/mm/price_oracle.go Show resolved Hide resolved
client/mm/price_oracle.go Outdated Show resolved Hide resolved
client/mm/mm.go Outdated Show resolved Hide resolved
client/mm/mm.go Outdated Show resolved Hide resolved
client/mm/notification.go Outdated Show resolved Hide resolved
client/mm/price_oracle.go Outdated Show resolved Hide resolved
client/webserver/site/src/css/mm.scss Outdated Show resolved Hide resolved
client/webserver/site/src/js/mmsettings.ts Outdated Show resolved Hide resolved
client/webserver/site/src/js/markets.ts Outdated Show resolved Hide resolved
client/asset/interface.go Outdated Show resolved Hide resolved
client/mm/mm.go Outdated
Comment on lines 162 to 177
syncedOracleMtx sync.RWMutex
syncedOracle *priceOracle

unsyncedOracle *priceOracle
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Please doc the difference between syncedOracle and unsyncedOracle.

client/mm/mm.go Outdated
Comment on lines 285 to 319
m.syncedOracleMtx.RUnlock()
if err != nil && !errors.Is(err, errUnsyncedMarket) {
m.log.Errorf("failed to get oracle info for market %d-%d: %v", base, quote, err)
}
if err == nil {
return &MarketReport{
Price: price,
Oracles: oracles,
BaseFiatRate: baseFiatRate,
QuoteFiatRate: quoteFiatRate,
}, nil
}
}
m.syncedOracleMtx.RUnlock()
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Won't this double RUnlock if err != nil?

client/mm/mm.go Outdated
Comment on lines 278 to 280
user := m.core.User()
baseFiatRate := user.FiatRates[base]
quoteFiatRate := user.FiatRates[quote]
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Comment on lines 1675 to 1690
func (s *WebServer) getMarketMakingConfig() ([]*mm.BotConfig, error) {
cfg := []*mm.BotConfig{}
if s.mmCfgPath != "" {
data, err := ioutil.ReadFile(s.mmCfgPath)
if err == nil {
err = json.Unmarshal(data, &cfg)
if err != nil {
return nil, fmt.Errorf("error unmarshalling market making config: %v", err)
}
} else if !os.IsNotExist(err) {
return nil, fmt.Errorf("error reading file: %v", err)
}
}

return cfg, nil
}
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Less indentation is better

func (s *WebServer) getMarketMakingConfig() ([]*mm.BotConfig, error) {
	cfg := []*mm.BotConfig{}
	if s.mmCfgPath == "" {
		return cfg, nil
	}
	data, err := os.ReadFile(s.mmCfgPath)
	if err == nil {
		return cfg, json.Unmarshal(data, &cfg)
	}
	if os.IsNotExist(err) {
		return cfg, nil
	}
	return nil, fmt.Errorf("error reading file: %w", err)
}

client/mm/mm.go Outdated
Comment on lines 170 to 171
noteMtx sync.RWMutex
noteChans map[uint64]chan core.Notification
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Unused now.

Comment on lines 1739 to 1816
err = ioutil.WriteFile(s.mmCfgPath, data, 0644)
if err != nil {
s.writeAPIError(w, fmt.Errorf("error writing market making config: %v", err))
return
}
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I think the roles are confused here. Handling config files for the MarketMaker falls squarely under the purview of the MarketMaker. Please consider buck54321/dcrdex@94eec59...buck54321:dcrdex:config-roles

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Looks good. I'm also adding an alternate config file path to MarketMaker.Run so that the RPC server can use whatever file the user specifies.

Copy link
Contributor Author

@martonp martonp Sep 12, 2023

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I did it this way because when using the RPC server, I think it would be more convenient if you could just specify the path to the config file instead of having to first update the config and then run it. Should Run take an alternate config file path and if it is nil, then the configured one is used.

return
}

err = ioutil.WriteFile(s.mmCfgPath, data, 0644)
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

ioutil is deprecated. Use os.WriteFile.

tsconfigRootDir: './'
tsconfigRootDir: __dirname
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Can you comment on this change?

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This allows eslint to be run from the command line.

Comment on lines 335 to 339
QuoteAssetOnly bool `json:"quoteAssetOnly"`
// DependsOn is the key of another config option that if is set to true,
// this config option will be shown.
DependsOn string `json:"dependsOn"`
Range *XYRange `json:"range"`
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Instead of adding QuoteAssetOnly here, did you consider making WalletDefinition.MultiFundingOpts []*ConfigOption into an []*OrderOption instead? OrderOption already has a Range field, and QuoteAssetOnly is an order-specific configuration option that would fit nicely there.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Good idea.

this.updateProgramDiv(tmpl, report)
this.programs[report.programID] = Object.assign({ tmpl, div }, report)
return div
console.log(JSON.stringify(filteredMkts))
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Did you mean to leave this?

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Nope.

@JoeGruffins
Copy link
Member

If I navigate to /mm I get a large stack trace

stack trace
2023/09/18 13:06:46 http: panic serving 127.0.0.1:55030: runtime error: slice bounds out of range [-1:]
goroutine 647 [running]:
net/http.(*conn).serve.func1()
	/usr/lib/go/src/net/http/server.go:1868 +0xb9
panic({0x19d12c0?, 0xc000ab29d8?})
	/usr/lib/go/src/runtime/panic.go:920 +0x270
github.com/go-chi/chi/v5/middleware.prettyStack.decorateFuncCallLine({}, {0xc00109b56b, 0x1f}, 0x46?, 0x8)
	/home/joe/go/pkg/mod/github.com/go-chi/chi/[email protected]/middleware/recoverer.go:130 +0x525
github.com/go-chi/chi/v5/middleware.prettyStack.decorateLine({}, {0xc00109b56b?, 0x11e9?}, 0xb0?, 0x1?)
	/home/joe/go/pkg/mod/github.com/go-chi/chi/[email protected]/middleware/recoverer.go:106 +0x151
github.com/go-chi/chi/v5/middleware.prettyStack.parse({}, {0xc000cf8000, 0x11e9, 0xc000719278?}, {0x18431e0, 0x311c860})
	/home/joe/go/pkg/mod/github.com/go-chi/chi/[email protected]/middleware/recoverer.go:89 +0x3d0
github.com/go-chi/chi/v5/middleware.PrintPrettyStack({0x18431e0, 0x311c860})
	/home/joe/go/pkg/mod/github.com/go-chi/chi/[email protected]/middleware/recoverer.go:46 +0x3b
github.com/go-chi/chi/v5/middleware.(*defaultLogEntry).Panic(0x2?, {0x18431e0?, 0x311c860?}, {0xc0002b9d40?, 0x3?, 0xc000ab29ab?})
	/home/joe/go/pkg/mod/github.com/go-chi/chi/[email protected]/middleware/logger.go:165 +0x25
github.com/go-chi/chi/v5/middleware.Recoverer.func1.1()
	/home/joe/go/pkg/mod/github.com/go-chi/chi/[email protected]/middleware/recoverer.go:28 +0xc8
panic({0x18431e0?, 0x311c860?})
	/usr/lib/go/src/runtime/panic.go:914 +0x21f
decred.org/dcrdex/client/mm.(*MarketMaker).Running(...)
	/home/joe/git/dcrdex/client/mm/mm.go:199
decred.org/dcrdex/client/webserver.(*WebServer).apiMarketMakingStatus(0xc0005b3680, {0x7f3ce03f2138, 0xc000765840}, 0x1000000000001?)
	/home/joe/git/dcrdex/client/webserver/api.go:1854 +0x25
net/http.HandlerFunc.ServeHTTP(0xc0005b3680?, {0x7f3ce03f2138?, 0xc000765840?}, 0x837f17?)
	/usr/lib/go/src/net/http/server.go:2136 +0x29
decred.org/dcrdex/client/webserver.(*WebServer).rejectUnauthed-fm.(*WebServer).rejectUnauthed.func1({0x7f3ce03f2138, 0xc000765840}, 0x1?)
	/home/joe/git/dcrdex/client/webserver/middleware.go:133 +0x68
net/http.HandlerFunc.ServeHTTP(0xc0004f5220?, {0x7f3ce03f2138?, 0xc000765840?}, 0xc0008a3700?)
	/usr/lib/go/src/net/http/server.go:2136 +0x29
github.com/go-chi/chi/v5.(*ChainHandler).ServeHTTP(0x1832740?, {0x7f3ce03f2138?, 0xc000765840?}, 0xc000ab29a8?)
	/home/joe/go/pkg/mod/github.com/go-chi/chi/[email protected]/chain.go:31 +0x26
github.com/go-chi/chi/v5.(*Mux).routeHTTP(0xc0004faa20, {0x7f3ce03f2138, 0xc000765840}, 0xc000cec500)
	/home/joe/go/pkg/mod/github.com/go-chi/chi/[email protected]/mux.go:437 +0x1f4
net/http.HandlerFunc.ServeHTTP(0x0?, {0x7f3ce03f2138?, 0xc000765840?}, 0x45979c?)
	/usr/lib/go/src/net/http/server.go:2136 +0x29
github.com/go-chi/chi/v5/middleware.AllowContentType.func1.1({0x7f3ce03f2138?, 0xc000765840?}, 0xc000ab29a9?)
	/home/joe/go/pkg/mod/github.com/go-chi/chi/[email protected]/middleware/content_type.go:31 +0x110
net/http.HandlerFunc.ServeHTTP(0xc0007197d0?, {0x7f3ce03f2138?, 0xc000765840?}, 0xc0007197b0?)
	/usr/lib/go/src/net/http/server.go:2136 +0x29
github.com/go-chi/chi/v5.(*Mux).ServeHTTP(0xc0004faa20, {0x7f3ce03f2138, 0xc000765840}, 0xc000cec500)
	/home/joe/go/pkg/mod/github.com/go-chi/chi/[email protected]/mux.go:71 +0x356
github.com/go-chi/chi/v5.(*Mux).Mount.func1({0x7f3ce03f2138, 0xc000765840}, 0xc000cec500)
	/home/joe/go/pkg/mod/github.com/go-chi/chi/[email protected]/mux.go:312 +0x1bb
net/http.HandlerFunc.ServeHTTP(0x1832740?, {0x7f3ce03f2138?, 0xc000765840?}, 0xc0003020c4?)
	/usr/lib/go/src/net/http/server.go:2136 +0x29
github.com/go-chi/chi/v5.(*Mux).routeHTTP(0xc0008005a0, {0x7f3ce03f2138, 0xc000765840}, 0xc000cec500)
	/home/joe/go/pkg/mod/github.com/go-chi/chi/[email protected]/mux.go:437 +0x1f4
net/http.HandlerFunc.ServeHTTP(0xc000719928?, {0x7f3ce03f2138?, 0xc000765840?}, 0x17ab0c0?)
	/usr/lib/go/src/net/http/server.go:2136 +0x29
github.com/go-chi/chi/v5/middleware.Recoverer.func1({0x7f3ce03f2138?, 0xc000765840?}, 0xc000930f90?)
	/home/joe/go/pkg/mod/github.com/go-chi/chi/[email protected]/middleware/recoverer.go:37 +0x78
net/http.HandlerFunc.ServeHTTP(0xf8?, {0x7f3ce03f2138?, 0xc000765840?}, 0x1b78693?)
	/usr/lib/go/src/net/http/server.go:2136 +0x29
decred.org/dcrdex/client/webserver.(*WebServer).securityMiddleware-fm.(*WebServer).securityMiddleware.func1({0x7f3ce03f2138, 0xc000765840}, 0xc000931000?)
	/home/joe/git/dcrdex/client/webserver/middleware.go:34 +0x169
net/http.HandlerFunc.ServeHTTP(0xc000cec400?, {0x7f3ce03f2138?, 0xc000765840?}, 0x30?)
	/usr/lib/go/src/net/http/server.go:2136 +0x29
decred.org/dcrdex/client/webserver.New.RequestLogger.func3.1({0x256f2a0, 0xc0001e8e00}, 0xc000cec400)
	/home/joe/go/pkg/mod/github.com/go-chi/chi/[email protected]/middleware/logger.go:57 +0x16d
net/http.HandlerFunc.ServeHTTP(0x2572520?, {0x256f2a0?, 0xc0001e8e00?}, 0x311f330?)
	/usr/lib/go/src/net/http/server.go:2136 +0x29
github.com/go-chi/chi/v5.(*Mux).ServeHTTP(0xc0008005a0, {0x256f2a0, 0xc0001e8e00}, 0xc000cec300)
	/home/joe/go/pkg/mod/github.com/go-chi/chi/[email protected]/mux.go:88 +0x315
net/http.serverHandler.ServeHTTP({0xc000c6f020?}, {0x256f2a0?, 0xc0001e8e00?}, 0x6?)
	/usr/lib/go/src/net/http/server.go:2938 +0x8e
net/http.(*conn).serve(0xc000c74990, {0x25724e8, 0xc000e4e0f0})
	/usr/lib/go/src/net/http/server.go:2009 +0x5f4
created by net/http.(*Server).Serve in goroutine 133
	/usr/lib/go/src/net/http/server.go:3086 +0x5cb
2023-09-18 04:06:46.838 [TRC] MUX: "GET http://127.0.0.3:5758/api/marketmakingstatus HTTP/1.1" from 127.0.0.1:55022 - 000 0B in 464.571µs
2023/09/18 13:06:46 http: panic serving 127.0.0.1:55022: runtime error: slice bounds out of range [-1:]
goroutine 660 [running]:
net/http.(*conn).serve.func1()
	/usr/lib/go/src/net/http/server.go:1868 +0xb9
panic({0x19d12c0?, 0xc000ab2a38?})
	/usr/lib/go/src/runtime/panic.go:920 +0x270
github.com/go-chi/chi/v5/middleware.prettyStack.decorateFuncCallLine({}, {0xc00109c86b, 0x1f}, 0x46?, 0x8)
	/home/joe/go/pkg/mod/github.com/go-chi/chi/[email protected]/middleware/recoverer.go:130 +0x525
github.com/go-chi/chi/v5/middleware.prettyStack.decorateLine({}, {0xc00109c86b?, 0x11e9?}, 0xb0?, 0x1?)
	/home/joe/go/pkg/mod/github.com/go-chi/chi/[email protected]/middleware/recoverer.go:106 +0x151
github.com/go-chi/chi/v5/middleware.prettyStack.parse({}, {0xc000e96000, 0x11e9, 0xc000b5d278?}, {0x18431e0, 0x311c860})
	/home/joe/go/pkg/mod/github.com/go-chi/chi/[email protected]/middleware/recoverer.go:89 +0x3d0
github.com/go-chi/chi/v5/middleware.PrintPrettyStack({0x18431e0, 0x311c860})
	/home/joe/go/pkg/mod/github.com/go-chi/chi/[email protected]/middleware/recoverer.go:46 +0x3b
github.com/go-chi/chi/v5/middleware.(*defaultLogEntry).Panic(0x2?, {0x18431e0?, 0x311c860?}, {0xc000b3fe10?, 0x3?, 0xc000ab2a0b?})
	/home/joe/go/pkg/mod/github.com/go-chi/chi/[email protected]/middleware/logger.go:165 +0x25
github.com/go-chi/chi/v5/middleware.Recoverer.func1.1()
	/home/joe/go/pkg/mod/github.com/go-chi/chi/[email protected]/middleware/recoverer.go:28 +0xc8
panic({0x18431e0?, 0x311c860?})
	/usr/lib/go/src/runtime/panic.go:914 +0x21f
decred.org/dcrdex/client/mm.(*MarketMaker).Running(...)
	/home/joe/git/dcrdex/client/mm/mm.go:199
decred.org/dcrdex/client/webserver.(*WebServer).apiMarketMakingStatus(0xc0005b3680, {0x7f3ce03f2138, 0xc000765940}, 0x1000000000001?)
	/home/joe/git/dcrdex/client/webserver/api.go:1854 +0x25
net/http.HandlerFunc.ServeHTTP(0xc0005b3680?, {0x7f3ce03f2138?, 0xc000765940?}, 0x837f17?)
	/usr/lib/go/src/net/http/server.go:2136 +0x29
decred.org/dcrdex/client/webserver.(*WebServer).rejectUnauthed-fm.(*WebServer).rejectUnauthed.func1({0x7f3ce03f2138, 0xc000765940}, 0x1?)
	/home/joe/git/dcrdex/client/webserver/middleware.go:133 +0x68
net/http.HandlerFunc.ServeHTTP(0xc0004f5220?, {0x7f3ce03f2138?, 0xc000765940?}, 0xc00092fde0?)
	/usr/lib/go/src/net/http/server.go:2136 +0x29
github.com/go-chi/chi/v5.(*ChainHandler).ServeHTTP(0x1832740?, {0x7f3ce03f2138?, 0xc000765940?}, 0xc000ab2a08?)
	/home/joe/go/pkg/mod/github.com/go-chi/chi/[email protected]/chain.go:31 +0x26
github.com/go-chi/chi/v5.(*Mux).routeHTTP(0xc0004faa20, {0x7f3ce03f2138, 0xc000765940}, 0xc000cec900)
	/home/joe/go/pkg/mod/github.com/go-chi/chi/[email protected]/mux.go:437 +0x1f4
net/http.HandlerFunc.ServeHTTP(0x0?, {0x7f3ce03f2138?, 0xc000765940?}, 0x45979c?)
	/usr/lib/go/src/net/http/server.go:2136 +0x29
github.com/go-chi/chi/v5/middleware.AllowContentType.func1.1({0x7f3ce03f2138?, 0xc000765940?}, 0xc000ab2a09?)
	/home/joe/go/pkg/mod/github.com/go-chi/chi/[email protected]/middleware/content_type.go:31 +0x110
net/http.HandlerFunc.ServeHTTP(0xc000b5d7d0?, {0x7f3ce03f2138?, 0xc000765940?}, 0xc000b5d7b0?)
	/usr/lib/go/src/net/http/server.go:2136 +0x29
github.com/go-chi/chi/v5.(*Mux).ServeHTTP(0xc0004faa20, {0x7f3ce03f2138, 0xc000765940}, 0xc000cec900)
	/home/joe/go/pkg/mod/github.com/go-chi/chi/[email protected]/mux.go:71 +0x356
github.com/go-chi/chi/v5.(*Mux).Mount.func1({0x7f3ce03f2138, 0xc000765940}, 0xc000cec900)
	/home/joe/go/pkg/mod/github.com/go-chi/chi/[email protected]/mux.go:312 +0x1bb
net/http.HandlerFunc.ServeHTTP(0x1832740?, {0x7f3ce03f2138?, 0xc000765940?}, 0xc0003021b4?)
	/usr/lib/go/src/net/http/server.go:2136 +0x29
github.com/go-chi/chi/v5.(*Mux).routeHTTP(0xc0008005a0, {0x7f3ce03f2138, 0xc000765940}, 0xc000cec900)
	/home/joe/go/pkg/mod/github.com/go-chi/chi/[email protected]/mux.go:437 +0x1f4
net/http.HandlerFunc.ServeHTTP(0xc000b5d928?, {0x7f3ce03f2138?, 0xc000765940?}, 0x17ab0c0?)
	/usr/lib/go/src/net/http/server.go:2136 +0x29
github.com/go-chi/chi/v5/middleware.Recoverer.func1({0x7f3ce03f2138?, 0xc000765940?}, 0xc000931290?)
	/home/joe/go/pkg/mod/github.com/go-chi/chi/[email protected]/middleware/recoverer.go:37 +0x78
net/http.HandlerFunc.ServeHTTP(0xf8?, {0x7f3ce03f2138?, 0xc000765940?}, 0x1b78693?)
	/usr/lib/go/src/net/http/server.go:2136 +0x29
decred.org/dcrdex/client/webserver.(*WebServer).securityMiddleware-fm.(*WebServer).securityMiddleware.func1({0x7f3ce03f2138, 0xc000765940}, 0xc000931300?)
	/home/joe/git/dcrdex/client/webserver/middleware.go:34 +0x169
net/http.HandlerFunc.ServeHTTP(0xc000cec800?, {0x7f3ce03f2138?, 0xc000765940?}, 0x30?)
	/usr/lib/go/src/net/http/server.go:2136 +0x29
decred.org/dcrdex/client/webserver.New.RequestLogger.func3.1({0x256f2a0, 0xc0001e8ee0}, 0xc000cec800)
	/home/joe/go/pkg/mod/github.com/go-chi/chi/[email protected]/middleware/logger.go:57 +0x16d
net/http.HandlerFunc.ServeHTTP(0x2572520?, {0x256f2a0?, 0xc0001e8ee0?}, 0x311f330?)
	/usr/lib/go/src/net/http/server.go:2136 +0x29
github.com/go-chi/chi/v5.(*Mux).ServeHTTP(0xc0008005a0, {0x256f2a0, 0xc0001e8ee0}, 0xc000cec700)
	/home/joe/go/pkg/mod/github.com/go-chi/chi/[email protected]/mux.go:88 +0x315
net/http.serverHandler.ServeHTTP({0xc000ae6cf0?}, {0x256f2a0?, 0xc0001e8ee0?}, 0x6?)
	/usr/lib/go/src/net/http/server.go:2938 +0x8e
net/http.(*conn).serve(0xc000ae4fc0, {0x25724e8, 0xc000e4e0f0})
	/usr/lib/go/src/net/http/server.go:2009 +0x5f4
created by net/http.(*Server).Serve in goroutine 133
	/usr/lib/go/src/net/http/server.go:3086 +0x5cb
2023-09-18 04:06:46.839 [TRC] MUX: "GET http://127.0.0.3:5758/api/marketmakingstatus HTTP/1.1" from 127.0.0.1:55048 - 000 0B in 456.146µs
2023/09/18 13:06:46 http: panic serving 127.0.0.1:55048: runtime error: slice bounds out of range [-1:]
goroutine 625 [running]:
net/http.(*conn).serve.func1()
	/usr/lib/go/src/net/http/server.go:1868 +0xb9
panic({0x19d12c0?, 0xc000ab2a98?})
	/usr/lib/go/src/runtime/panic.go:920 +0x270
github.com/go-chi/chi/v5/middleware.prettyStack.decorateFuncCallLine({}, {0xc00109ee6b, 0x1f}, 0x46?, 0x8)
	/home/joe/go/pkg/mod/github.com/go-chi/chi/[email protected]/middleware/recoverer.go:130 +0x525
github.com/go-chi/chi/v5/middleware.prettyStack.decorateLine({}, {0xc00109ee6b?, 0x11e9?}, 0xb0?, 0x1?)
	/home/joe/go/pkg/mod/github.com/go-chi/chi/[email protected]/middleware/recoverer.go:106 +0x151
github.com/go-chi/chi/v5/middleware.prettyStack.parse({}, {0xc000eba000, 0x11e9, 0xc0007ef278?}, {0x18431e0, 0x311c860})
	/home/joe/go/pkg/mod/github.com/go-chi/chi/[email protected]/middleware/recoverer.go:89 +0x3d0
github.com/go-chi/chi/v5/middleware.PrintPrettyStack({0x18431e0, 0x311c860})
	/home/joe/go/pkg/mod/github.com/go-chi/chi/[email protected]/middleware/recoverer.go:46 +0x3b
github.com/go-chi/chi/v5/middleware.(*defaultLogEntry).Panic(0x2?, {0x18431e0?, 0x311c860?}, {0xc000b3fee0?, 0x3?, 0xc000ab2a6b?})
	/home/joe/go/pkg/mod/github.com/go-chi/chi/[email protected]/middleware/logger.go:165 +0x25
github.com/go-chi/chi/v5/middleware.Recoverer.func1.1()
	/home/joe/go/pkg/mod/github.com/go-chi/chi/[email protected]/middleware/recoverer.go:28 +0xc8
panic({0x18431e0?, 0x311c860?})
	/usr/lib/go/src/runtime/panic.go:914 +0x21f
decred.org/dcrdex/client/mm.(*MarketMaker).Running(...)
	/home/joe/git/dcrdex/client/mm/mm.go:199
decred.org/dcrdex/client/webserver.(*WebServer).apiMarketMakingStatus(0xc0005b3680, {0x7f3ce03f2138, 0xc000765a80}, 0x1000000000001?)
	/home/joe/git/dcrdex/client/webserver/api.go:1854 +0x25
net/http.HandlerFunc.ServeHTTP(0xc0005b3680?, {0x7f3ce03f2138?, 0xc000765a80?}, 0x837f17?)
	/usr/lib/go/src/net/http/server.go:2136 +0x29
decred.org/dcrdex/client/webserver.(*WebServer).rejectUnauthed-fm.(*WebServer).rejectUnauthed.func1({0x7f3ce03f2138, 0xc000765a80}, 0x1?)
	/home/joe/git/dcrdex/client/webserver/middleware.go:133 +0x68
net/http.HandlerFunc.ServeHTTP(0xc0004f5220?, {0x7f3ce03f2138?, 0xc000765a80?}, 0xc0009685c0?)
	/usr/lib/go/src/net/http/server.go:2136 +0x29
github.com/go-chi/chi/v5.(*ChainHandler).ServeHTTP(0x1832740?, {0x7f3ce03f2138?, 0xc000765a80?}, 0xc000ab2a68?)
	/home/joe/go/pkg/mod/github.com/go-chi/chi/[email protected]/chain.go:31 +0x26
github.com/go-chi/chi/v5.(*Mux).routeHTTP(0xc0004faa20, {0x7f3ce03f2138, 0xc000765a80}, 0xc000cecd00)
	/home/joe/go/pkg/mod/github.com/go-chi/chi/[email protected]/mux.go:437 +0x1f4
net/http.HandlerFunc.ServeHTTP(0x0?, {0x7f3ce03f2138?, 0xc000765a80?}, 0x45979c?)
	/usr/lib/go/src/net/http/server.go:2136 +0x29
github.com/go-chi/chi/v5/middleware.AllowContentType.func1.1({0x7f3ce03f2138?, 0xc000765a80?}, 0xc000ab2a69?)
	/home/joe/go/pkg/mod/github.com/go-chi/chi/[email protected]/middleware/content_type.go:31 +0x110
net/http.HandlerFunc.ServeHTTP(0xc0007ef7d0?, {0x7f3ce03f2138?, 0xc000765a80?}, 0xc0007ef7b0?)
	/usr/lib/go/src/net/http/server.go:2136 +0x29
github.com/go-chi/chi/v5.(*Mux).ServeHTTP(0xc0004faa20, {0x7f3ce03f2138, 0xc000765a80}, 0xc000cecd00)
	/home/joe/go/pkg/mod/github.com/go-chi/chi/[email protected]/mux.go:71 +0x356
github.com/go-chi/chi/v5.(*Mux).Mount.func1({0x7f3ce03f2138, 0xc000765a80}, 0xc000cecd00)
	/home/joe/go/pkg/mod/github.com/go-chi/chi/[email protected]/mux.go:312 +0x1bb
net/http.HandlerFunc.ServeHTTP(0x1832740?, {0x7f3ce03f2138?, 0xc000765a80?}, 0xc0003022d4?)
	/usr/lib/go/src/net/http/server.go:2136 +0x29
github.com/go-chi/chi/v5.(*Mux).routeHTTP(0xc0008005a0, {0x7f3ce03f2138, 0xc000765a80}, 0xc000cecd00)
	/home/joe/go/pkg/mod/github.com/go-chi/chi/[email protected]/mux.go:437 +0x1f4
net/http.HandlerFunc.ServeHTTP(0xc000eaf928?, {0x7f3ce03f2138?, 0xc000765a80?}, 0x17ab0c0?)
	/usr/lib/go/src/net/http/server.go:2136 +0x29
github.com/go-chi/chi/v5/middleware.Recoverer.func1({0x7f3ce03f2138?, 0xc000765a80?}, 0xc0009316e0?)
	/home/joe/go/pkg/mod/github.com/go-chi/chi/[email protected]/middleware/recoverer.go:37 +0x78
net/http.HandlerFunc.ServeHTTP(0xf8?, {0x7f3ce03f2138?, 0xc000765a80?}, 0x1b78693?)
	/usr/lib/go/src/net/http/server.go:2136 +0x29
decred.org/dcrdex/client/webserver.(*WebServer).securityMiddleware-fm.(*WebServer).securityMiddleware.func1({0x7f3ce03f2138, 0xc000765a80}, 0xc000931700?)
	/home/joe/git/dcrdex/client/webserver/middleware.go:34 +0x169
net/http.HandlerFunc.ServeHTTP(0xc000cecc00?, {0x7f3ce03f2138?, 0xc000765a80?}, 0x30?)
	/usr/lib/go/src/net/http/server.go:2136 +0x29
decred.org/dcrdex/client/webserver.New.RequestLogger.func3.1({0x256f2a0, 0xc0001e8fc0}, 0xc000cecc00)
	/home/joe/go/pkg/mod/github.com/go-chi/chi/[email protected]/middleware/logger.go:57 +0x16d
net/http.HandlerFunc.ServeHTTP(0x2572520?, {0x256f2a0?, 0xc0001e8fc0?}, 0x311f330?)
	/usr/lib/go/src/net/http/server.go:2136 +0x29
github.com/go-chi/chi/v5.(*Mux).ServeHTTP(0xc0008005a0, {0x256f2a0, 0xc0001e8fc0}, 0xc000cecb00)
	/home/joe/go/pkg/mod/github.com/go-chi/chi/[email protected]/mux.go:88 +0x315
net/http.serverHandler.ServeHTTP({0xc000931650?}, {0x256f2a0?, 0xc0001e8fc0?}, 0x6?)
	/usr/lib/go/src/net/http/server.go:2938 +0x8e
net/http.(*conn).serve(0xc000b71ef0, {0x25724e8, 0xc000e4e0f0})
	/usr/lib/go/src/net/http/server.go:2009 +0x5f4
created by net/http.(*Server).Serve in goroutine 133
	/usr/lib/go/src/net/http/server.go:3086 +0x5cb
2023-09-18 04:06:46.840 [TRC] MUX: "GET http://127.0.0.3:5758/api/marketmakingstatus HTTP/1.1" from 127.0.0.1:55062 - 000 0B in 458.49µs
2023/09/18 13:06:46 http: panic serving 127.0.0.1:55062: runtime error: slice bounds out of range [-1:]
goroutine 675 [running]:
net/http.(*conn).serve.func1()
	/usr/lib/go/src/net/http/server.go:1868 +0xb9
panic({0x19d12c0?, 0xc000371110?})
	/usr/lib/go/src/runtime/panic.go:920 +0x270
github.com/go-chi/chi/v5/middleware.prettyStack.decorateFuncCallLine({}, {0xc00086826b, 0x1f}, 0x46?, 0x8)
	/home/joe/go/pkg/mod/github.com/go-chi/chi/[email protected]/middleware/recoverer.go:130 +0x525
github.com/go-chi/chi/v5/middleware.prettyStack.decorateLine({}, {0xc00086826b?, 0x11e9?}, 0xb0?, 0x1?)
	/home/joe/go/pkg/mod/github.com/go-chi/chi/[email protected]/middleware/recoverer.go:106 +0x151
github.com/go-chi/chi/v5/middleware.prettyStack.parse({}, {0xc000de0000, 0x11e9, 0xc0007af278?}, {0x18431e0, 0x311c860})
	/home/joe/go/pkg/mod/github.com/go-chi/chi/[email protected]/middleware/recoverer.go:89 +0x3d0
github.com/go-chi/chi/v5/middleware.PrintPrettyStack({0x18431e0, 0x311c860})
	/home/joe/go/pkg/mod/github.com/go-chi/chi/[email protected]/middleware/recoverer.go:46 +0x3b
github.com/go-chi/chi/v5/middleware.(*defaultLogEntry).Panic(0x2?, {0x18431e0?, 0x311c860?}, {0xc0002b8680?, 0x3?, 0xc0003710e3?})
	/home/joe/go/pkg/mod/github.com/go-chi/chi/[email protected]/middleware/logger.go:165 +0x25
github.com/go-chi/chi/v5/middleware.Recoverer.func1.1()
	/home/joe/go/pkg/mod/github.com/go-chi/chi/[email protected]/middleware/recoverer.go:28 +0xc8
panic({0x18431e0?, 0x311c860?})
	/usr/lib/go/src/runtime/panic.go:914 +0x21f
decred.org/dcrdex/client/mm.(*MarketMaker).Running(...)
	/home/joe/git/dcrdex/client/mm/mm.go:199
decred.org/dcrdex/client/webserver.(*WebServer).apiMarketMakingStatus(0xc0005b3680, {0x7f3ce03f2138, 0xc000c7a840}, 0x1000000000001?)
	/home/joe/git/dcrdex/client/webserver/api.go:1854 +0x25
net/http.HandlerFunc.ServeHTTP(0xc0005b3680?, {0x7f3ce03f2138?, 0xc000c7a840?}, 0x837f17?)
	/usr/lib/go/src/net/http/server.go:2136 +0x29
decred.org/dcrdex/client/webserver.(*WebServer).rejectUnauthed-fm.(*WebServer).rejectUnauthed.func1({0x7f3ce03f2138, 0xc000c7a840}, 0x1?)
	/home/joe/git/dcrdex/client/webserver/middleware.go:133 +0x68
net/http.HandlerFunc.ServeHTTP(0xc0004f5220?, {0x7f3ce03f2138?, 0xc000c7a840?}, 0xc0008a3e30?)
	/usr/lib/go/src/net/http/server.go:2136 +0x29
github.com/go-chi/chi/v5.(*ChainHandler).ServeHTTP(0x1832740?, {0x7f3ce03f2138?, 0xc000c7a840?}, 0xc0003710e0?)
	/home/joe/go/pkg/mod/github.com/go-chi/chi/[email protected]/chain.go:31 +0x26
github.com/go-chi/chi/v5.(*Mux).routeHTTP(0xc0004faa20, {0x7f3ce03f2138, 0xc000c7a840}, 0xc000d90300)
	/home/joe/go/pkg/mod/github.com/go-chi/chi/[email protected]/mux.go:437 +0x1f4
net/http.HandlerFunc.ServeHTTP(0x0?, {0x7f3ce03f2138?, 0xc000c7a840?}, 0x45979c?)
	/usr/lib/go/src/net/http/server.go:2136 +0x29
github.com/go-chi/chi/v5/middleware.AllowContentType.func1.1({0x7f3ce03f2138?, 0xc000c7a840?}, 0xc0003710e1?)
	/home/joe/go/pkg/mod/github.com/go-chi/chi/[email protected]/middleware/content_type.go:31 +0x110
net/http.HandlerFunc.ServeHTTP(0xc0007af7d0?, {0x7f3ce03f2138?, 0xc000c7a840?}, 0xc0007af7b0?)
	/usr/lib/go/src/net/http/server.go:2136 +0x29
github.com/go-chi/chi/v5.(*Mux).ServeHTTP(0xc0004faa20, {0x7f3ce03f2138, 0xc000c7a840}, 0xc000d90300)
	/home/joe/go/pkg/mod/github.com/go-chi/chi/[email protected]/mux.go:71 +0x356
github.com/go-chi/chi/v5.(*Mux).Mount.func1({0x7f3ce03f2138, 0xc000c7a840}, 0xc000d90300)
	/home/joe/go/pkg/mod/github.com/go-chi/chi/[email protected]/mux.go:312 +0x1bb
net/http.HandlerFunc.ServeHTTP(0x1832740?, {0x7f3ce03f2138?, 0xc000c7a840?}, 0xc000d2cae4?)
	/usr/lib/go/src/net/http/server.go:2136 +0x29
github.com/go-chi/chi/v5.(*Mux).routeHTTP(0xc0008005a0, {0x7f3ce03f2138, 0xc000c7a840}, 0xc000d90300)
	/home/joe/go/pkg/mod/github.com/go-chi/chi/[email protected]/mux.go:437 +0x1f4
net/http.HandlerFunc.ServeHTTP(0xc000eaf928?, {0x7f3ce03f2138?, 0xc000c7a840?}, 0x17ab0c0?)
	/usr/lib/go/src/net/http/server.go:2136 +0x29
github.com/go-chi/chi/v5/middleware.Recoverer.func1({0x7f3ce03f2138?, 0xc000c7a840?}, 0xc000c6fd10?)
	/home/joe/go/pkg/mod/github.com/go-chi/chi/[email protected]/middleware/recoverer.go:37 +0x78
net/http.HandlerFunc.ServeHTTP(0xf8?, {0x7f3ce03f2138?, 0xc000c7a840?}, 0x1b78693?)
	/usr/lib/go/src/net/http/server.go:2136 +0x29
decred.org/dcrdex/client/webserver.(*WebServer).securityMiddleware-fm.(*WebServer).securityMiddleware.func1({0x7f3ce03f2138, 0xc000c7a840}, 0xc000c6fd00?)
	/home/joe/git/dcrdex/client/webserver/middleware.go:34 +0x169
net/http.HandlerFunc.ServeHTTP(0xc000d90200?, {0x7f3ce03f2138?, 0xc000c7a840?}, 0x30?)
	/usr/lib/go/src/net/http/server.go:2136 +0x29
decred.org/dcrdex/client/webserver.New.RequestLogger.func3.1({0x256f2a0, 0xc000d03500}, 0xc000d90200)
	/home/joe/go/pkg/mod/github.com/go-chi/chi/[email protected]/middleware/logger.go:57 +0x16d
net/http.HandlerFunc.ServeHTTP(0x2572520?, {0x256f2a0?, 0xc000d03500?}, 0x311f330?)
	/usr/lib/go/src/net/http/server.go:2136 +0x29
github.com/go-chi/chi/v5.(*Mux).ServeHTTP(0xc0008005a0, {0x256f2a0, 0xc000d03500}, 0xc000d90100)
	/home/joe/go/pkg/mod/github.com/go-chi/chi/[email protected]/mux.go:88 +0x315
net/http.serverHandler.ServeHTTP({0xc000c6fc80?}, {0x256f2a0?, 0xc000d03500?}, 0x6?)
	/usr/lib/go/src/net/http/server.go:2938 +0x8e
net/http.(*conn).serve(0xc000eb2120, {0x25724e8, 0xc000e4e0f0})
	/usr/lib/go/src/net/http/server.go:2009 +0x5f4
created by net/http.(*Server).Serve in goroutine 133
	/usr/lib/go/src/net/http/server.go:3086 +0x5cb
2023-09-18 04:06:46.841 [TRC] MUX: "GET http://127.0.0.3:5758/api/marketmakingstatus HTTP/1.1" from 127.0.0.1:55064 - 000 0B in 613.059µs
2023/09/18 13:06:46 http: panic serving 127.0.0.1:55064: runtime error: slice bounds out of range [-1:]
goroutine 652 [running]:
net/http.(*conn).serve.func1()
	/usr/lib/go/src/net/http/server.go:1868 +0xb9
panic({0x19d12c0?, 0xc000371170?})
	/usr/lib/go/src/runtime/panic.go:920 +0x270
github.com/go-chi/chi/v5/middleware.prettyStack.decorateFuncCallLine({}, {0xc00086956b, 0x1f}, 0x46?, 0x8)
	/home/joe/go/pkg/mod/github.com/go-chi/chi/[email protected]/middleware/recoverer.go:130 +0x525
github.com/go-chi/chi/v5/middleware.prettyStack.decorateLine({}, {0xc00086956b?, 0x11e9?}, 0xb0?, 0x1?)
	/home/joe/go/pkg/mod/github.com/go-chi/chi/[email protected]/middleware/recoverer.go:106 +0x151
github.com/go-chi/chi/v5/middleware.prettyStack.parse({}, {0xc000716000, 0x11e9, 0xc0007af278?}, {0x18431e0, 0x311c860})
	/home/joe/go/pkg/mod/github.com/go-chi/chi/[email protected]/middleware/recoverer.go:89 +0x3d0
github.com/go-chi/chi/v5/middleware.PrintPrettyStack({0x18431e0, 0x311c860})
	/home/joe/go/pkg/mod/github.com/go-chi/chi/[email protected]/middleware/recoverer.go:46 +0x3b
github.com/go-chi/chi/v5/middleware.(*defaultLogEntry).Panic(0x2?, {0x18431e0?, 0x311c860?}, {0xc000872c30?, 0x3?, 0xc000371143?})
	/home/joe/go/pkg/mod/github.com/go-chi/chi/[email protected]/middleware/logger.go:165 +0x25
github.com/go-chi/chi/v5/middleware.Recoverer.func1.1()
	/home/joe/go/pkg/mod/github.com/go-chi/chi/[email protected]/middleware/recoverer.go:28 +0xc8
panic({0x18431e0?, 0x311c860?})
	/usr/lib/go/src/runtime/panic.go:914 +0x21f
decred.org/dcrdex/client/mm.(*MarketMaker).Running(...)
	/home/joe/git/dcrdex/client/mm/mm.go:199
decred.org/dcrdex/client/webserver.(*WebServer).apiMarketMakingStatus(0xc0005b3680, {0x7f3ce03f2138, 0xc000c7a980}, 0x1000000000001?)
	/home/joe/git/dcrdex/client/webserver/api.go:1854 +0x25
net/http.HandlerFunc.ServeHTTP(0xc0005b3680?, {0x7f3ce03f2138?, 0xc000c7a980?}, 0x837f17?)
	/usr/lib/go/src/net/http/server.go:2136 +0x29
decred.org/dcrdex/client/webserver.(*WebServer).rejectUnauthed-fm.(*WebServer).rejectUnauthed.func1({0x7f3ce03f2138, 0xc000c7a980}, 0x1?)
	/home/joe/git/dcrdex/client/webserver/middleware.go:133 +0x68
net/http.HandlerFunc.ServeHTTP(0xc0004f5220?, {0x7f3ce03f2138?, 0xc000c7a980?}, 0xc00096e860?)
	/usr/lib/go/src/net/http/server.go:2136 +0x29
github.com/go-chi/chi/v5.(*ChainHandler).ServeHTTP(0x1832740?, {0x7f3ce03f2138?, 0xc000c7a980?}, 0xc000371140?)
	/home/joe/go/pkg/mod/github.com/go-chi/chi/[email protected]/chain.go:31 +0x26
github.com/go-chi/chi/v5.(*Mux).routeHTTP(0xc0004faa20, {0x7f3ce03f2138, 0xc000c7a980}, 0xc000d90700)
	/home/joe/go/pkg/mod/github.com/go-chi/chi/[email protected]/mux.go:437 +0x1f4
net/http.HandlerFunc.ServeHTTP(0x0?, {0x7f3ce03f2138?, 0xc000c7a980?}, 0x45979c?)
	/usr/lib/go/src/net/http/server.go:2136 +0x29
github.com/go-chi/chi/v5/middleware.AllowContentType.func1.1({0x7f3ce03f2138?, 0xc000c7a980?}, 0xc000371141?)
	/home/joe/go/pkg/mod/github.com/go-chi/chi/[email protected]/middleware/content_type.go:31 +0x110
net/http.HandlerFunc.ServeHTTP(0xc0007af7d0?, {0x7f3ce03f2138?, 0xc000c7a980?}, 0xc0007af7b0?)
	/usr/lib/go/src/net/http/server.go:2136 +0x29
github.com/go-chi/chi/v5.(*Mux).ServeHTTP(0xc0004faa20, {0x7f3ce03f2138, 0xc000c7a980}, 0xc000d90700)
	/home/joe/go/pkg/mod/github.com/go-chi/chi/[email protected]/mux.go:71 +0x356
github.com/go-chi/chi/v5.(*Mux).Mount.func1({0x7f3ce03f2138, 0xc000c7a980}, 0xc000d90700)
	/home/joe/go/pkg/mod/github.com/go-chi/chi/[email protected]/mux.go:312 +0x1bb
net/http.HandlerFunc.ServeHTTP(0x1832740?, {0x7f3ce03f2138?, 0xc000c7a980?}, 0xc000d2cbd4?)
	/usr/lib/go/src/net/http/server.go:2136 +0x29
github.com/go-chi/chi/v5.(*Mux).routeHTTP(0xc0008005a0, {0x7f3ce03f2138, 0xc000c7a980}, 0xc000d90700)
	/home/joe/go/pkg/mod/github.com/go-chi/chi/[email protected]/mux.go:437 +0x1f4
net/http.HandlerFunc.ServeHTTP(0xc000eaf928?, {0x7f3ce03f2138?, 0xc000c7a980?}, 0x17ab0c0?)
	/usr/lib/go/src/net/http/server.go:2136 +0x29
github.com/go-chi/chi/v5/middleware.Recoverer.func1({0x7f3ce03f2138?, 0xc000c7a980?}, 0xc000df8120?)
	/home/joe/go/pkg/mod/github.com/go-chi/chi/[email protected]/middleware/recoverer.go:37 +0x78
net/http.HandlerFunc.ServeHTTP(0xf8?, {0x7f3ce03f2138?, 0xc000c7a980?}, 0x1b78693?)
	/usr/lib/go/src/net/http/server.go:2136 +0x29
decred.org/dcrdex/client/webserver.(*WebServer).securityMiddleware-fm.(*WebServer).securityMiddleware.func1({0x7f3ce03f2138, 0xc000c7a980}, 0xc000df8100?)
	/home/joe/git/dcrdex/client/webserver/middleware.go:34 +0x169
net/http.HandlerFunc.ServeHTTP(0xc000d90600?, {0x7f3ce03f2138?, 0xc000c7a980?}, 0x30?)
	/usr/lib/go/src/net/http/server.go:2136 +0x29
decred.org/dcrdex/client/webserver.New.RequestLogger.func3.1({0x256f2a0, 0xc000d035e0}, 0xc000d90600)
	/home/joe/go/pkg/mod/github.com/go-chi/chi/[email protected]/middleware/logger.go:57 +0x16d
net/http.HandlerFunc.ServeHTTP(0x2572520?, {0x256f2a0?, 0xc000d035e0?}, 0x311f330?)
	/usr/lib/go/src/net/http/server.go:2136 +0x29
github.com/go-chi/chi/v5.(*Mux).ServeHTTP(0xc0008005a0, {0x256f2a0, 0xc000d035e0}, 0xc000d90500)
	/home/joe/go/pkg/mod/github.com/go-chi/chi/[email protected]/mux.go:88 +0x315
net/http.serverHandler.ServeHTTP({0xc000df8090?}, {0x256f2a0?, 0xc000d035e0?}, 0x6?)
	/usr/lib/go/src/net/http/server.go:2938 +0x8e
net/http.(*conn).serve(0xc000c75560, {0x25724e8, 0xc000e4e0f0})
	/usr/lib/go/src/net/http/server.go:2009 +0x5f4
created by net/http.(*Server).Serve in goroutine 133
	/usr/lib/go/src/net/http/server.go:3086 +0x5cb
2023-09-18 04:06:46.842 [TRC] MUX: "GET http://127.0.0.3:5758/api/marketmakingstatus HTTP/1.1" from 127.0.0.1:55066 - 000 0B in 442.69µs
2023/09/18 13:06:46 http: panic serving 127.0.0.1:55066: runtime error: slice bounds out of range [-1:]
goroutine 654 [running]:
net/http.(*conn).serve.func1()
	/usr/lib/go/src/net/http/server.go:1868 +0xb9
panic({0x19d12c0?, 0xc000ab2af8?})
	/usr/lib/go/src/runtime/panic.go:920 +0x270
github.com/go-chi/chi/v5/middleware.prettyStack.decorateFuncCallLine({}, {0xc0007e626b, 0x1f}, 0x46?, 0x8)
	/home/joe/go/pkg/mod/github.com/go-chi/chi/[email protected]/middleware/recoverer.go:130 +0x525
github.com/go-chi/chi/v5/middleware.prettyStack.decorateLine({}, {0xc0007e626b?, 0x11e9?}, 0xb0?, 0x1?)
	/home/joe/go/pkg/mod/github.com/go-chi/chi/[email protected]/middleware/recoverer.go:106 +0x151
github.com/go-chi/chi/v5/middleware.prettyStack.parse({}, {0xc000ec2000, 0x11e9, 0xc0007ef278?}, {0x18431e0, 0x311c860})
	/home/joe/go/pkg/mod/github.com/go-chi/chi/[email protected]/middleware/recoverer.go:89 +0x3d0
github.com/go-chi/chi/v5/middleware.PrintPrettyStack({0x18431e0, 0x311c860})
	/home/joe/go/pkg/mod/github.com/go-chi/chi/[email protected]/middleware/recoverer.go:46 +0x3b
github.com/go-chi/chi/v5/middleware.(*defaultLogEntry).Panic(0x2?, {0x18431e0?, 0x311c860?}, {0xc000ebc000?, 0x3?, 0xc000ab2acb?})
	/home/joe/go/pkg/mod/github.com/go-chi/chi/[email protected]/middleware/logger.go:165 +0x25
github.com/go-chi/chi/v5/middleware.Recoverer.func1.1()
	/home/joe/go/pkg/mod/github.com/go-chi/chi/[email protected]/middleware/recoverer.go:28 +0xc8
panic({0x18431e0?, 0x311c860?})
	/usr/lib/go/src/runtime/panic.go:914 +0x21f
decred.org/dcrdex/client/mm.(*MarketMaker).Running(...)
	/home/joe/git/dcrdex/client/mm/mm.go:199
decred.org/dcrdex/client/webserver.(*WebServer).apiMarketMakingStatus(0xc0005b3680, {0x7f3ce03f2138, 0xc000765b80}, 0x1000000000001?)
	/home/joe/git/dcrdex/client/webserver/api.go:1854 +0x25
net/http.HandlerFunc.ServeHTTP(0xc0005b3680?, {0x7f3ce03f2138?, 0xc000765b80?}, 0x837f17?)
	/usr/lib/go/src/net/http/server.go:2136 +0x29
decred.org/dcrdex/client/webserver.(*WebServer).rejectUnauthed-fm.(*WebServer).rejectUnauthed.func1({0x7f3ce03f2138, 0xc000765b80}, 0x1?)
	/home/joe/git/dcrdex/client/webserver/middleware.go:133 +0x68
net/http.HandlerFunc.ServeHTTP(0xc0004f5220?, {0x7f3ce03f2138?, 0xc000765b80?}, 0xc000968e40?)
	/usr/lib/go/src/net/http/server.go:2136 +0x29
github.com/go-chi/chi/v5.(*ChainHandler).ServeHTTP(0x1832740?, {0x7f3ce03f2138?, 0xc000765b80?}, 0xc000ab2ac8?)
	/home/joe/go/pkg/mod/github.com/go-chi/chi/[email protected]/chain.go:31 +0x26
github.com/go-chi/chi/v5.(*Mux).routeHTTP(0xc0004faa20, {0x7f3ce03f2138, 0xc000765b80}, 0xc000ced000)
	/home/joe/go/pkg/mod/github.com/go-chi/chi/[email protected]/mux.go:437 +0x1f4
net/http.HandlerFunc.ServeHTTP(0x0?, {0x7f3ce03f2138?, 0xc000765b80?}, 0x45979c?)
	/usr/lib/go/src/net/http/server.go:2136 +0x29
github.com/go-chi/chi/v5/middleware.AllowContentType.func1.1({0x7f3ce03f2138?, 0xc000765b80?}, 0xc000ab2ac9?)
	/home/joe/go/pkg/mod/github.com/go-chi/chi/[email protected]/middleware/content_type.go:31 +0x110
net/http.HandlerFunc.ServeHTTP(0xc0007ef7d0?, {0x7f3ce03f2138?, 0xc000765b80?}, 0xc0007ef7b0?)
	/usr/lib/go/src/net/http/server.go:2136 +0x29
github.com/go-chi/chi/v5.(*Mux).ServeHTTP(0xc0004faa20, {0x7f3ce03f2138, 0xc000765b80}, 0xc000ced000)
	/home/joe/go/pkg/mod/github.com/go-chi/chi/[email protected]/mux.go:71 +0x356
github.com/go-chi/chi/v5.(*Mux).Mount.func1({0x7f3ce03f2138, 0xc000765b80}, 0xc000ced000)
	/home/joe/go/pkg/mod/github.com/go-chi/chi/[email protected]/mux.go:312 +0x1bb
net/http.HandlerFunc.ServeHTTP(0x1832740?, {0x7f3ce03f2138?, 0xc000765b80?}, 0xc0003023c4?)
	/usr/lib/go/src/net/http/server.go:2136 +0x29
github.com/go-chi/chi/v5.(*Mux).routeHTTP(0xc0008005a0, {0x7f3ce03f2138, 0xc000765b80}, 0xc000ced000)
	/home/joe/go/pkg/mod/github.com/go-chi/chi/[email protected]/mux.go:437 +0x1f4
net/http.HandlerFunc.ServeHTTP(0xc000eaf928?, {0x7f3ce03f2138?, 0xc000765b80?}, 0x17ab0c0?)
	/usr/lib/go/src/net/http/server.go:2136 +0x29
github.com/go-chi/chi/v5/middleware.Recoverer.func1({0x7f3ce03f2138?, 0xc000765b80?}, 0xc000931aa0?)
	/home/joe/go/pkg/mod/github.com/go-chi/chi/[email protected]/middleware/recoverer.go:37 +0x78
net/http.HandlerFunc.ServeHTTP(0xf8?, {0x7f3ce03f2138?, 0xc000765b80?}, 0x1b78693?)
	/usr/lib/go/src/net/http/server.go:2136 +0x29
decred.org/dcrdex/client/webserver.(*WebServer).securityMiddleware-fm.(*WebServer).securityMiddleware.func1({0x7f3ce03f2138, 0xc000765b80}, 0xc000931b00?)
	/home/joe/git/dcrdex/client/webserver/middleware.go:34 +0x169
net/http.HandlerFunc.ServeHTTP(0xc000cecf00?, {0x7f3ce03f2138?, 0xc000765b80?}, 0x30?)
	/usr/lib/go/src/net/http/server.go:2136 +0x29
decred.org/dcrdex/client/webserver.New.RequestLogger.func3.1({0x256f2a0, 0xc0001e90a0}, 0xc000cecf00)
	/home/joe/go/pkg/mod/github.com/go-chi/chi/[email protected]/middleware/logger.go:57 +0x16d
net/http.HandlerFunc.ServeHTTP(0x2572520?, {0x256f2a0?, 0xc0001e90a0?}, 0x311f330?)
	/usr/lib/go/src/net/http/server.go:2136 +0x29
github.com/go-chi/chi/v5.(*Mux).ServeHTTP(0xc0008005a0, {0x256f2a0, 0xc0001e90a0}, 0xc000d90900)
	/home/joe/go/pkg/mod/github.com/go-chi/chi/[email protected]/mux.go:88 +0x315
net/http.serverHandler.ServeHTTP({0xc000df8480?}, {0x256f2a0?, 0xc0001e90a0?}, 0x6?)
	/usr/lib/go/src/net/http/server.go:2938 +0x8e
net/http.(*conn).serve(0xc000c75710, {0x25724e8, 0xc000e4e0f0})
	/usr/lib/go/src/net/http/server.go:2009 +0x5f4
created by net/http.(*Server).Serve in goroutine 133
	/usr/lib/go/src/net/http/server.go:3086 +0x5cb
2023-09-18 04:06:46.843 [TRC] MUX: "GET http://127.0.0.3:5758/api/marketmakingstatus HTTP/1.1" from 127.0.0.1:55078 - 000 0B in 439.263µs
2023/09/18 13:06:46 http: panic serving 127.0.0.1:55078: runtime error: slice bounds out of range [-1:]
goroutine 677 [running]:
net/http.(*conn).serve.func1()
	/usr/lib/go/src/net/http/server.go:1868 +0xb9
panic({0x19d12c0?, 0xc000ab2b58?})
	/usr/lib/go/src/runtime/panic.go:920 +0x270
github.com/go-chi/chi/v5/middleware.prettyStack.decorateFuncCallLine({}, {0xc0007e756b, 0x1f}, 0x46?, 0x8)
	/home/joe/go/pkg/mod/github.com/go-chi/chi/[email protected]/middleware/recoverer.go:130 +0x525
github.com/go-chi/chi/v5/middleware.prettyStack.decorateLine({}, {0xc0007e756b?, 0x11e9?}, 0xb0?, 0x1?)
	/home/joe/go/pkg/mod/github.com/go-chi/chi/[email protected]/middleware/recoverer.go:106 +0x151
github.com/go-chi/chi/v5/middleware.prettyStack.parse({}, {0xc000ece000, 0x11e9, 0xc0007ef278?}, {0x18431e0, 0x311c860})
	/home/joe/go/pkg/mod/github.com/go-chi/chi/[email protected]/middleware/recoverer.go:89 +0x3d0
github.com/go-chi/chi/v5/middleware.PrintPrettyStack({0x18431e0, 0x311c860})
	/home/joe/go/pkg/mod/github.com/go-chi/chi/[email protected]/middleware/recoverer.go:46 +0x3b
github.com/go-chi/chi/v5/middleware.(*defaultLogEntry).Panic(0x2?, {0x18431e0?, 0x311c860?}, {0xc000ebc0d0?, 0x3?, 0xc000ab2b2b?})
	/home/joe/go/pkg/mod/github.com/go-chi/chi/[email protected]/middleware/logger.go:165 +0x25
github.com/go-chi/chi/v5/middleware.Recoverer.func1.1()
	/home/joe/go/pkg/mod/github.com/go-chi/chi/[email protected]/middleware/recoverer.go:28 +0xc8
panic({0x18431e0?, 0x311c860?})
	/usr/lib/go/src/runtime/panic.go:914 +0x21f
decred.org/dcrdex/client/mm.(*MarketMaker).Running(...)
	/home/joe/git/dcrdex/client/mm/mm.go:199
decred.org/dcrdex/client/webserver.(*WebServer).apiMarketMakingStatus(0xc0005b3680, {0x7f3ce03f2138, 0xc000765cc0}, 0x1000000000001?)
	/home/joe/git/dcrdex/client/webserver/api.go:1854 +0x25
net/http.HandlerFunc.ServeHTTP(0xc0005b3680?, {0x7f3ce03f2138?, 0xc000765cc0?}, 0x837f17?)
	/usr/lib/go/src/net/http/server.go:2136 +0x29
decred.org/dcrdex/client/webserver.(*WebServer).rejectUnauthed-fm.(*WebServer).rejectUnauthed.func1({0x7f3ce03f2138, 0xc000765cc0}, 0x1?)
	/home/joe/git/dcrdex/client/webserver/middleware.go:133 +0x68
net/http.HandlerFunc.ServeHTTP(0xc0004f5220?, {0x7f3ce03f2138?, 0xc000765cc0?}, 0xc000969660?)
	/usr/lib/go/src/net/http/server.go:2136 +0x29
github.com/go-chi/chi/v5.(*ChainHandler).ServeHTTP(0x1832740?, {0x7f3ce03f2138?, 0xc000765cc0?}, 0xc000ab2b28?)
	/home/joe/go/pkg/mod/github.com/go-chi/chi/[email protected]/chain.go:31 +0x26
github.com/go-chi/chi/v5.(*Mux).routeHTTP(0xc0004faa20, {0x7f3ce03f2138, 0xc000765cc0}, 0xc000ced400)
	/home/joe/go/pkg/mod/github.com/go-chi/chi/[email protected]/mux.go:437 +0x1f4
net/http.HandlerFunc.ServeHTTP(0x0?, {0x7f3ce03f2138?, 0xc000765cc0?}, 0x45979c?)
	/usr/lib/go/src/net/http/server.go:2136 +0x29
github.com/go-chi/chi/v5/middleware.AllowContentType.func1.1({0x7f3ce03f2138?, 0xc000765cc0?}, 0xc000ab2b29?)
	/home/joe/go/pkg/mod/github.com/go-chi/chi/[email protected]/middleware/content_type.go:31 +0x110
net/http.HandlerFunc.ServeHTTP(0xc0007ef7d0?, {0x7f3ce03f2138?, 0xc000765cc0?}, 0xc0007ef7b0?)
	/usr/lib/go/src/net/http/server.go:2136 +0x29
github.com/go-chi/chi/v5.(*Mux).ServeHTTP(0xc0004faa20, {0x7f3ce03f2138, 0xc000765cc0}, 0xc000ced400)
	/home/joe/go/pkg/mod/github.com/go-chi/chi/[email protected]/mux.go:71 +0x356
github.com/go-chi/chi/v5.(*Mux).Mount.func1({0x7f3ce03f2138, 0xc000765cc0}, 0xc000ced400)
	/home/joe/go/pkg/mod/github.com/go-chi/chi/[email protected]/mux.go:312 +0x1bb
net/http.HandlerFunc.ServeHTTP(0x1832740?, {0x7f3ce03f2138?, 0xc000765cc0?}, 0xc0003024b4?)
	/usr/lib/go/src/net/http/server.go:2136 +0x29
github.com/go-chi/chi/v5.(*Mux).routeHTTP(0xc0008005a0, {0x7f3ce03f2138, 0xc000765cc0}, 0xc000ced400)
	/home/joe/go/pkg/mod/github.com/go-chi/chi/[email protected]/mux.go:437 +0x1f4
net/http.HandlerFunc.ServeHTTP(0xc000eaf928?, {0x7f3ce03f2138?, 0xc000765cc0?}, 0x17ab0c0?)
	/usr/lib/go/src/net/http/server.go:2136 +0x29
github.com/go-chi/chi/v5/middleware.Recoverer.func1({0x7f3ce03f2138?, 0xc000765cc0?}, 0xc000931e90?)
	/home/joe/go/pkg/mod/github.com/go-chi/chi/[email protected]/middleware/recoverer.go:37 +0x78
net/http.HandlerFunc.ServeHTTP(0xf8?, {0x7f3ce03f2138?, 0xc000765cc0?}, 0x1b78693?)
	/usr/lib/go/src/net/http/server.go:2136 +0x29
decred.org/dcrdex/client/webserver.(*WebServer).securityMiddleware-fm.(*WebServer).securityMiddleware.func1({0x7f3ce03f2138, 0xc000765cc0}, 0xc000931f00?)
	/home/joe/git/dcrdex/client/webserver/middleware.go:34 +0x169
net/http.HandlerFunc.ServeHTTP(0xc000ced300?, {0x7f3ce03f2138?, 0xc000765cc0?}, 0x30?)
	/usr/lib/go/src/net/http/server.go:2136 +0x29
decred.org/dcrdex/client/webserver.New.RequestLogger.func3.1({0x256f2a0, 0xc0001e9180}, 0xc000ced300)
	/home/joe/go/pkg/mod/github.com/go-chi/chi/[email protected]/middleware/logger.go:57 +0x16d
net/http.HandlerFunc.ServeHTTP(0x2572520?, {0x256f2a0?, 0xc0001e9180?}, 0x311f330?)
	/usr/lib/go/src/net/http/server.go:2136 +0x29
github.com/go-chi/chi/v5.(*Mux).ServeHTTP(0xc0008005a0, {0x256f2a0, 0xc0001e9180}, 0xc000ced200)
	/home/joe/go/pkg/mod/github.com/go-chi/chi/[email protected]/mux.go:88 +0x315
net/http.serverHandler.ServeHTTP({0xc000931e00?}, {0x256f2a0?, 0xc0001e9180?}, 0x6?)
	/usr/lib/go/src/net/http/server.go:2938 +0x8e
net/http.(*conn).serve(0xc000eb22d0, {0x25724e8, 0xc000e4e0f0})
	/usr/lib/go/src/net/http/server.go:2009 +0x5f4
created by net/http.(*Server).Serve in goroutine 133
	/usr/lib/go/src/net/http/server.go:3086 +0x5cb
2023-09-18 04:06:46.844 [TRC] MUX: "GET http://127.0.0.3:5758/api/marketmakingstatus HTTP/1.1" from 127.0.0.1:55082 - 000 0B in 668.764µs
2023/09/18 13:06:46 http: panic serving 127.0.0.1:55082: runtime error: slice bounds out of range [-1:]
goroutine 679 [running]:
net/http.(*conn).serve.func1()
	/usr/lib/go/src/net/http/server.go:1868 +0xb9
panic({0x19d12c0?, 0xc000ab2bb8?})
	/usr/lib/go/src/runtime/panic.go:920 +0x270
github.com/go-chi/chi/v5/middleware.prettyStack.decorateFuncCallLine({}, {0xc000b6a26b, 0x1f}, 0x46?, 0x8)
	/home/joe/go/pkg/mod/github.com/go-chi/chi/[email protected]/middleware/recoverer.go:130 +0x525
github.com/go-chi/chi/v5/middleware.prettyStack.decorateLine({}, {0xc000b6a26b?, 0x11e9?}, 0xb0?, 0x1?)
	/home/joe/go/pkg/mod/github.com/go-chi/chi/[email protected]/middleware/recoverer.go:106 +0x151
github.com/go-chi/chi/v5/middleware.prettyStack.parse({}, {0xc000efc000, 0x11e9, 0xc0007ef278?}, {0x18431e0, 0x311c860})
	/home/joe/go/pkg/mod/github.com/go-chi/chi/[email protected]/middleware/recoverer.go:89 +0x3d0
github.com/go-chi/chi/v5/middleware.PrintPrettyStack({0x18431e0, 0x311c860})
	/home/joe/go/pkg/mod/github.com/go-chi/chi/[email protected]/middleware/recoverer.go:46 +0x3b
github.com/go-chi/chi/v5/middleware.(*defaultLogEntry).Panic(0x2?, {0x18431e0?, 0x311c860?}, {0xc000ebc1a0?, 0x3?, 0xc000ab2b8b?})
	/home/joe/go/pkg/mod/github.com/go-chi/chi/[email protected]/middleware/logger.go:165 +0x25
github.com/go-chi/chi/v5/middleware.Recoverer.func1.1()
	/home/joe/go/pkg/mod/github.com/go-chi/chi/[email protected]/middleware/recoverer.go:28 +0xc8
panic({0x18431e0?, 0x311c860?})
	/usr/lib/go/src/runtime/panic.go:914 +0x21f
decred.org/dcrdex/client/mm.(*MarketMaker).Running(...)
	/home/joe/git/dcrdex/client/mm/mm.go:199
decred.org/dcrdex/client/webserver.(*WebServer).apiMarketMakingStatus(0xc0005b3680, {0x7f3ce03f2138, 0xc000765e00}, 0x1000000000001?)
	/home/joe/git/dcrdex/client/webserver/api.go:1854 +0x25
net/http.HandlerFunc.ServeHTTP(0xc0005b3680?, {0x7f3ce03f2138?, 0xc000765e00?}, 0x837f17?)
	/usr/lib/go/src/net/http/server.go:2136 +0x29
decred.org/dcrdex/client/webserver.(*WebServer).rejectUnauthed-fm.(*WebServer).rejectUnauthed.func1({0x7f3ce03f2138, 0xc000765e00}, 0x1?)
	/home/joe/git/dcrdex/client/webserver/middleware.go:133 +0x68
net/http.HandlerFunc.ServeHTTP(0xc0004f5220?, {0x7f3ce03f2138?, 0xc000765e00?}, 0xc000969df0?)
	/usr/lib/go/src/net/http/server.go:2136 +0x29
github.com/go-chi/chi/v5.(*ChainHandler).ServeHTTP(0x1832740?, {0x7f3ce03f2138?, 0xc000765e00?}, 0xc000ab2b88?)
	/home/joe/go/pkg/mod/github.com/go-chi/chi/[email protected]/chain.go:31 +0x26
github.com/go-chi/chi/v5.(*Mux).routeHTTP(0xc0004faa20, {0x7f3ce03f2138, 0xc000765e00}, 0xc000ced800)
	/home/joe/go/pkg/mod/github.com/go-chi/chi/[email protected]/mux.go:437 +0x1f4
net/http.HandlerFunc.ServeHTTP(0x0?, {0x7f3ce03f2138?, 0xc000765e00?}, 0x45979c?)
	/usr/lib/go/src/net/http/server.go:2136 +0x29
github.com/go-chi/chi/v5/middleware.AllowContentType.func1.1({0x7f3ce03f2138?, 0xc000765e00?}, 0xc000ab2b89?)
	/home/joe/go/pkg/mod/github.com/go-chi/chi/[email protected]/middleware/content_type.go:31 +0x110
net/http.HandlerFunc.ServeHTTP(0xc0007ef7d0?, {0x7f3ce03f2138?, 0xc000765e00?}, 0xc0007ef7b0?)
	/usr/lib/go/src/net/http/server.go:2136 +0x29
github.com/go-chi/chi/v5.(*Mux).ServeHTTP(0xc0004faa20, {0x7f3ce03f2138, 0xc000765e00}, 0xc000ced800)
	/home/joe/go/pkg/mod/github.com/go-chi/chi/[email protected]/mux.go:71 +0x356
github.com/go-chi/chi/v5.(*Mux).Mount.func1({0x7f3ce03f2138, 0xc000765e00}, 0xc000ced800)
	/home/joe/go/pkg/mod/github.com/go-chi/chi/[email protected]/mux.go:312 +0x1bb
net/http.HandlerFunc.ServeHTTP(0x1832740?, {0x7f3ce03f2138?, 0xc000765e00?}, 0xc0003025a4?)
	/usr/lib/go/src/net/http/server.go:2136 +0x29
github.com/go-chi/chi/v5.(*Mux).routeHTTP(0xc0008005a0, {0x7f3ce03f2138, 0xc000765e00}, 0xc000ced800)
	/home/joe/go/pkg/mod/github.com/go-chi/chi/[email protected]/mux.go:437 +0x1f4
net/http.HandlerFunc.ServeHTTP(0xc000eaf928?, {0x7f3ce03f2138?, 0xc000765e00?}, 0x17ab0c0?)
	/usr/lib/go/src/net/http/server.go:2136 +0x29
github.com/go-chi/chi/v5/middleware.Recoverer.func1({0x7f3ce03f2138?, 0xc000765e00?}, 0xc000ed02a0?)
	/home/joe/go/pkg/mod/github.com/go-chi/chi/[email protected]/middleware/recoverer.go:37 +0x78
net/http.HandlerFunc.ServeHTTP(0xf8?, {0x7f3ce03f2138?, 0xc000765e00?}, 0x1b78693?)
	/usr/lib/go/src/net/http/server.go:2136 +0x29
decred.org/dcrdex/client/webserver.(*WebServer).securityMiddleware-fm.(*WebServer).securityMiddleware.func1({0x7f3ce03f2138, 0xc000765e00}, 0xc000ed0300?)
	/home/joe/git/dcrdex/client/webserver/middleware.go:34 +0x169
net/http.HandlerFunc.ServeHTTP(0xc000ced700?, {0x7f3ce03f2138?, 0xc000765e00?}, 0x30?)
	/usr/lib/go/src/net/http/server.go:2136 +0x29
decred.org/dcrdex/client/webserver.New.RequestLogger.func3.1({0x256f2a0, 0xc0001e9260}, 0xc000ced700)
	/home/joe/go/pkg/mod/github.com/go-chi/chi/[email protected]/middleware/logger.go:57 +0x16d
net/http.HandlerFunc.ServeHTTP(0x2572520?, {0x256f2a0?, 0xc0001e9260?}, 0x311f330?)
	/usr/lib/go/src/net/http/server.go:2136 +0x29
github.com/go-chi/chi/v5.(*Mux).ServeHTTP(0xc0008005a0, {0x256f2a0, 0xc0001e9260}, 0xc000ced600)
	/home/joe/go/pkg/mod/github.com/go-chi/chi/[email protected]/mux.go:88 +0x315
net/http.serverHandler.ServeHTTP({0xc000ed0210?}, {0x256f2a0?, 0xc0001e9260?}, 0x6?)
	/usr/lib/go/src/net/http/server.go:2938 +0x8e
net/http.(*conn).serve(0xc000eb2480, {0x25724e8, 0xc000e4e0f0})
	/usr/lib/go/src/net/http/server.go:2009 +0x5f4
created by net/http.(*Server).Serve in goroutine 133
	/usr/lib/go/src/net/http/server.go:3086 +0x5cb
2023-09-18 04:06:46.846 [TRC] MUX: "GET http://127.0.0.3:5758/api/marketmakingstatus HTTP/1.1" from 127.0.0.1:55084 - 000 0B in 453.871µs
2023/09/18 13:06:46 http: panic serving 127.0.0.1:55084: runtime error: slice bounds out of range [-1:]
goroutine 681 [running]:
net/http.(*conn).serve.func1()
	/usr/lib/go/src/net/http/server.go:1868 +0xb9
panic({0x19d12c0?, 0xc0004ff8c0?})
	/usr/lib/go/src/runtime/panic.go:920 +0x270
github.com/go-chi/chi/v5/middleware.prettyStack.decorateFuncCallLine({}, {0xc00071156b, 0x1f}, 0x46?, 0x8)
	/home/joe/go/pkg/mod/github.com/go-chi/chi/[email protected]/middleware/recoverer.go:130 +0x525
github.com/go-chi/chi/v5/middleware.prettyStack.decorateLine({}, {0xc00071156b?, 0x11e9?}, 0xb0?, 0x1?)
	/home/joe/go/pkg/mod/github.com/go-chi/chi/[email protected]/middleware/recoverer.go:106 +0x151
github.com/go-chi/chi/v5/middleware.prettyStack.parse({}, {0xc000d6c000, 0x11e9, 0xc0008f1278?}, {0x18431e0, 0x311c860})
	/home/joe/go/pkg/mod/github.com/go-chi/chi/[email protected]/middleware/recoverer.go:89 +0x3d0
github.com/go-chi/chi/v5/middleware.PrintPrettyStack({0x18431e0, 0x311c860})
	/home/joe/go/pkg/mod/github.com/go-chi/chi/[email protected]/middleware/recoverer.go:46 +0x3b
github.com/go-chi/chi/v5/middleware.(*defaultLogEntry).Panic(0x2?, {0x18431e0?, 0x311c860?}, {0xc0004ea9c0?, 0x3?, 0xc0004ff893?})
	/home/joe/go/pkg/mod/github.com/go-chi/chi/[email protected]/middleware/logger.go:165 +0x25
github.com/go-chi/chi/v5/middleware.Recoverer.func1.1()
	/home/joe/go/pkg/mod/github.com/go-chi/chi/[email protected]/middleware/recoverer.go:28 +0xc8
panic({0x18431e0?, 0x311c860?})
	/usr/lib/go/src/runtime/panic.go:914 +0x21f
decred.org/dcrdex/client/mm.(*MarketMaker).Running(...)
	/home/joe/git/dcrdex/client/mm/mm.go:199
decred.org/dcrdex/client/webserver.(*WebServer).apiMarketMakingStatus(0xc0005b3680, {0x7f3ce03f2138, 0xc000a15f80}, 0x1000000000001?)
	/home/joe/git/dcrdex/client/webserver/api.go:1854 +0x25
net/http.HandlerFunc.ServeHTTP(0xc0005b3680?, {0x7f3ce03f2138?, 0xc000a15f80?}, 0x837f17?)
	/usr/lib/go/src/net/http/server.go:2136 +0x29
decred.org/dcrdex/client/webserver.(*WebServer).rejectUnauthed-fm.(*WebServer).rejectUnauthed.func1({0x7f3ce03f2138, 0xc000a15f80}, 0x1?)
	/home/joe/git/dcrdex/client/webserver/middleware.go:133 +0x68
net/http.HandlerFunc.ServeHTTP(0xc0004f5220?, {0x7f3ce03f2138?, 0xc000a15f80?}, 0xc000833fb0?)
	/usr/lib/go/src/net/http/server.go:2136 +0x29
github.com/go-chi/chi/v5.(*ChainHandler).ServeHTTP(0x1832740?, {0x7f3ce03f2138?, 0xc000a15f80?}, 0xc0004ff890?)
	/home/joe/go/pkg/mod/github.com/go-chi/chi/[email protected]/chain.go:31 +0x26
github.com/go-chi/chi/v5.(*Mux).routeHTTP(0xc0004faa20, {0x7f3ce03f2138, 0xc000a15f80}, 0xc000d16b00)
	/home/joe/go/pkg/mod/github.com/go-chi/chi/[email protected]/mux.go:437 +0x1f4
net/http.HandlerFunc.ServeHTTP(0x0?, {0x7f3ce03f2138?, 0xc000a15f80?}, 0x45979c?)
	/usr/lib/go/src/net/http/server.go:2136 +0x29
github.com/go-chi/chi/v5/middleware.AllowContentType.func1.1({0x7f3ce03f2138?, 0xc000a15f80?}, 0xc0004ff891?)
	/home/joe/go/pkg/mod/github.com/go-chi/chi/[email protected]/middleware/content_type.go:31 +0x110
net/http.HandlerFunc.ServeHTTP(0xc0008f17d0?, {0x7f3ce03f2138?, 0xc000a15f80?}, 0xc0008f17b0?)
	/usr/lib/go/src/net/http/server.go:2136 +0x29
github.com/go-chi/chi/v5.(*Mux).ServeHTTP(0xc0004faa20, {0x7f3ce03f2138, 0xc000a15f80}, 0xc000d16b00)
	/home/joe/go/pkg/mod/github.com/go-chi/chi/[email protected]/mux.go:71 +0x356
github.com/go-chi/chi/v5.(*Mux).Mount.func1({0x7f3ce03f2138, 0xc000a15f80}, 0xc000d16b00)
	/home/joe/go/pkg/mod/github.com/go-chi/chi/[email protected]/mux.go:312 +0x1bb
net/http.HandlerFunc.ServeHTTP(0x1832740?, {0x7f3ce03f2138?, 0xc000a15f80?}, 0xc000047654?)
	/usr/lib/go/src/net/http/server.go:2136 +0x29
github.com/go-chi/chi/v5.(*Mux).routeHTTP(0xc0008005a0, {0x7f3ce03f2138, 0xc000a15f80}, 0xc000d16b00)
	/home/joe/go/pkg/mod/github.com/go-chi/chi/[email protected]/mux.go:437 +0x1f4
net/http.HandlerFunc.ServeHTTP(0xc000eaf928?, {0x7f3ce03f2138?, 0xc000a15f80?}, 0x17ab0c0?)
	/usr/lib/go/src/net/http/server.go:2136 +0x29
github.com/go-chi/chi/v5/middleware.Recoverer.func1({0x7f3ce03f2138?, 0xc000a15f80?}, 0xc000bff320?)
	/home/joe/go/pkg/mod/github.com/go-chi/chi/[email protected]/middleware/recoverer.go:37 +0x78
net/http.HandlerFunc.ServeHTTP(0xf8?, {0x7f3ce03f2138?, 0xc000a15f80?}, 0x1b78693?)
	/usr/lib/go/src/net/http/server.go:2136 +0x29
decred.org/dcrdex/client/webserver.(*WebServer).securityMiddleware-fm.(*WebServer).securityMiddleware.func1({0x7f3ce03f2138, 0xc000a15f80}, 0xc000bff300?)
	/home/joe/git/dcrdex/client/webserver/middleware.go:34 +0x169
net/http.HandlerFunc.ServeHTTP(0xc000d16a00?, {0x7f3ce03f2138?, 0xc000a15f80?}, 0x30?)
	/usr/lib/go/src/net/http/server.go:2136 +0x29
decred.org/dcrdex/client/webserver.New.RequestLogger.func3.1({0x256f2a0, 0xc000595180}, 0xc000d16a00)
	/home/joe/go/pkg/mod/github.com/go-chi/chi/[email protected]/middleware/logger.go:57 +0x16d
net/http.HandlerFunc.ServeHTTP(0x2572520?, {0x256f2a0?, 0xc000595180?}, 0x311f330?)
	/usr/lib/go/src/net/http/server.go:2136 +0x29
github.com/go-chi/chi/v5.(*Mux).ServeHTTP(0xc0008005a0, {0x256f2a0, 0xc000595180}, 0xc000ceda00)
	/home/joe/go/pkg/mod/github.com/go-chi/chi/[email protected]/mux.go:88 +0x315
net/http.serverHandler.ServeHTTP({0xc000ed0600?}, {0x256f2a0?, 0xc000595180?}, 0x6?)
	/usr/lib/go/src/net/http/server.go:2938 +0x8e
net/http.(*conn).serve(0xc000eb2630, {0x25724e8, 0xc000e4e0f0})
	/usr/lib/go/src/net/http/server.go:2009 +0x5f4
created by net/http.(*Server).Serve in goroutine 133
	/usr/lib/go/src/net/http/server.go:3086 +0x5cb
2023-09-18 04:06:46.847 [TRC] MUX: "GET http://127.0.0.3:5758/api/marketmakingstatus HTTP/1.1" from 127.0.0.1:55090 - 000 0B in 452.639µs
2023/09/18 13:06:46 http: panic serving 127.0.0.1:55090: runtime error: slice bounds out of range [-1:]
goroutine 598 [running]:
net/http.(*conn).serve.func1()
	/usr/lib/go/src/net/http/server.go:1868 +0xb9
panic({0x19d12c0?, 0xc0004ff920?})
	/usr/lib/go/src/runtime/panic.go:920 +0x270
github.com/go-chi/chi/v5/middleware.prettyStack.decorateFuncCallLine({}, {0xc000713b6b, 0x1f}, 0x46?, 0x8)
	/home/joe/go/pkg/mod/github.com/go-chi/chi/[email protected]/middleware/recoverer.go:130 +0x525
github.com/go-chi/chi/v5/middleware.prettyStack.decorateLine({}, {0xc000713b6b?, 0x11e9?}, 0xb0?, 0x1?)
	/home/joe/go/pkg/mod/github.com/go-chi/chi/[email protected]/middleware/recoverer.go:106 +0x151
github.com/go-chi/chi/v5/middleware.prettyStack.parse({}, {0xc000d7e000, 0x11e9, 0xc0008f1278?}, {0x18431e0, 0x311c860})
	/home/joe/go/pkg/mod/github.com/go-chi/chi/[email protected]/middleware/recoverer.go:89 +0x3d0
github.com/go-chi/chi/v5/middleware.PrintPrettyStack({0x18431e0, 0x311c860})
	/home/joe/go/pkg/mod/github.com/go-chi/chi/[email protected]/middleware/recoverer.go:46 +0x3b
github.com/go-chi/chi/v5/middleware.(*defaultLogEntry).Panic(0x2?, {0x18431e0?, 0x311c860?}, {0xc0004eb860?, 0x3?, 0xc0004ff8f3?})
	/home/joe/go/pkg/mod/github.com/go-chi/chi/[email protected]/middleware/logger.go:165 +0x25
github.com/go-chi/chi/v5/middleware.Recoverer.func1.1()
	/home/joe/go/pkg/mod/github.com/go-chi/chi/[email protected]/middleware/recoverer.go:28 +0xc8
panic({0x18431e0?, 0x311c860?})
	/usr/lib/go/src/runtime/panic.go:914 +0x21f
decred.org/dcrdex/client/mm.(*MarketMaker).Running(...)
	/home/joe/git/dcrdex/client/mm/mm.go:199
decred.org/dcrdex/client/webserver.(*WebServer).apiMarketMakingStatus(0xc0005b3680, {0x7f3ce03f2138, 0xc000d760c0}, 0x1000000000001?)
	/home/joe/git/dcrdex/client/webserver/api.go:1854 +0x25
net/http.HandlerFunc.ServeHTTP(0xc0005b3680?, {0x7f3ce03f2138?, 0xc000d760c0?}, 0x837f17?)
	/usr/lib/go/src/net/http/server.go:2136 +0x29
decred.org/dcrdex/client/webserver.(*WebServer).rejectUnauthed-fm.(*WebServer).rejectUnauthed.func1({0x7f3ce03f2138, 0xc000d760c0}, 0x1?)
	/home/joe/git/dcrdex/client/webserver/middleware.go:133 +0x68
net/http.HandlerFunc.ServeHTTP(0xc0004f5220?, {0x7f3ce03f2138?, 0xc000d760c0?}, 0xc00094d460?)
	/usr/lib/go/src/net/http/server.go:2136 +0x29
github.com/go-chi/chi/v5.(*ChainHandler).ServeHTTP(0x1832740?, {0x7f3ce03f2138?, 0xc000d760c0?}, 0xc0004ff8f0?)
	/home/joe/go/pkg/mod/github.com/go-chi/chi/[email protected]/chain.go:31 +0x26
github.com/go-chi/chi/v5.(*Mux).routeHTTP(0xc0004faa20, {0x7f3ce03f2138, 0xc000d760c0}, 0xc000d16f00)
	/home/joe/go/pkg/mod/github.com/go-chi/chi/[email protected]/mux.go:437 +0x1f4
net/http.HandlerFunc.ServeHTTP(0x0?, {0x7f3ce03f2138?, 0xc000d760c0?}, 0x45979c?)
	/usr/lib/go/src/net/http/server.go:2136 +0x29
github.com/go-chi/chi/v5/middleware.AllowContentType.func1.1({0x7f3ce03f2138?, 0xc000d760c0?}, 0xc0004ff8f1?)
	/home/joe/go/pkg/mod/github.com/go-chi/chi/[email protected]/middleware/content_type.go:31 +0x110
net/http.HandlerFunc.ServeHTTP(0xc0008f17d0?, {0x7f3ce03f2138?, 0xc000d760c0?}, 0xc0008f17b0?)
	/usr/lib/go/src/net/http/server.go:2136 +0x29
github.com/go-chi/chi/v5.(*Mux).ServeHTTP(0xc0004faa20, {0x7f3ce03f2138, 0xc000d760c0}, 0xc000d16f00)
	/home/joe/go/pkg/mod/github.com/go-chi/chi/[email protected]/mux.go:71 +0x356
github.com/go-chi/chi/v5.(*Mux).Mount.func1({0x7f3ce03f2138, 0xc000d760c0}, 0xc000d16f00)
	/home/joe/go/pkg/mod/github.com/go-chi/chi/[email protected]/mux.go:312 +0x1bb
net/http.HandlerFunc.ServeHTTP(0x1832740?, {0x7f3ce03f2138?, 0xc000d760c0?}, 0xc000047834?)
	/usr/lib/go/src/net/http/server.go:2136 +0x29
github.com/go-chi/chi/v5.(*Mux).routeHTTP(0xc0008005a0, {0x7f3ce03f2138, 0xc000d760c0}, 0xc000d16f00)
	/home/joe/go/pkg/mod/github.com/go-chi/chi/[email protected]/mux.go:437 +0x1f4
net/http.HandlerFunc.ServeHTTP(0xc000eaf928?, {0x7f3ce03f2138?, 0xc000d760c0?}, 0x17ab0c0?)
	/usr/lib/go/src/net/http/server.go:2136 +0x29
github.com/go-chi/chi/v5/middleware.Recoverer.func1({0x7f3ce03f2138?, 0xc000d760c0?}, 0xc000bff770?)
	/home/joe/go/pkg/mod/github.com/go-chi/chi/[email protected]/middleware/recoverer.go:37 +0x78
net/http.HandlerFunc.ServeHTTP(0xf8?, {0x7f3ce03f2138?, 0xc000d760c0?}, 0x1b78693?)
	/usr/lib/go/src/net/http/server.go:2136 +0x29
decred.org/dcrdex/client/webserver.(*WebServer).securityMiddleware-fm.(*WebServer).securityMiddleware.func1({0x7f3ce03f2138, 0xc000d760c0}, 0xc000bff800?)
	/home/joe/git/dcrdex/client/webserver/middleware.go:34 +0x169
net/http.HandlerFunc.ServeHTTP(0xc000d16e00?, {0x7f3ce03f2138?, 0xc000d760c0?}, 0x30?)
	/usr/lib/go/src/net/http/server.go:2136 +0x29
decred.org/dcrdex/client/webserver.New.RequestLogger.func3.1({0x256f2a0, 0xc000595260}, 0xc000d16e00)
	/home/joe/go/pkg/mod/github.com/go-chi/chi/[email protected]/middleware/logger.go:57 +0x16d
net/http.HandlerFunc.ServeHTTP(0x2572520?, {0x256f2a0?, 0xc000595260?}, 0x311f330?)
	/usr/lib/go/src/net/http/server.go:2136 +0x29
github.com/go-chi/chi/v5.(*Mux).ServeHTTP(0xc0008005a0, {0x256f2a0, 0xc000595260}, 0xc000d16d00)
	/home/joe/go/pkg/mod/github.com/go-chi/chi/[email protected]/mux.go:88 +0x315
net/http.serverHandler.ServeHTTP({0xc000bff6e0?}, {0x256f2a0?, 0xc000595260?}, 0x6?)
	/usr/lib/go/src/net/http/server.go:2938 +0x8e
net/http.(*conn).serve(0xc000beb4d0, {0x25724e8, 0xc000e4e0f0})
	/usr/lib/go/src/net/http/server.go:2009 +0x5f4
created by net/http.(*Server).Serve in goroutine 133
	/usr/lib/go/src/net/http/server.go:3086 +0x5cb

If I navigate to /mmsettings it doesn't seem to contain anything.

image
image

Maybe I am doing something wrong? I forgot how to navigate to these pages in the UI...

@martonp
Copy link
Contributor Author

martonp commented Sep 18, 2023

@JoeGruffins I'm unable to reproduce this.. works fine for me with the same build ID. The market making tab is in the hamburger menu, and you get to the /mmsettings by adding a bot on the /mm page. What you see on the /mmsettings page is expected because there are no query parameters in the URL, but I can't reproduce the panic.

Comment on lines 540 to 546
apiAuth.Post("/startmarketmaking", s.apiStartMarketMaking)
apiAuth.Post("/stopmarketmaking", s.apiStopMarketMaking)
apiAuth.Get("/marketmakingconfig", s.apiMarketMakingConfig)
apiAuth.Post("/updatemarketmakingconfig", s.apiUpdateMarketMakingConfig)
apiAuth.Post("/removemarketmakingconfig", s.apiRemoveMarketMakingConfig)
apiAuth.Get("/marketmakingstatus", s.apiMarketMakingStatus)
apiAuth.Post("/marketreport", s.apiMarketReport)
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Here's the cause of @JoeGruffins panic. No --experimental flag, no market maker, but he manually navigated to /mm. Not something that a normal user would think to do. be we shouldn't be adding these endpoints if --experimental is not on anyway.

Copy link
Member

@JoeGruffins JoeGruffins Sep 19, 2023

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Oh sorry, that is it. Will build run with the experimental flag.

Copy link
Member

@JoeGruffins JoeGruffins left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Running with the --experimental flag now.

If I navigate to /mmsettings without a token it will still look like the odd page posted above.

Also maybe the cancel on the /mmsettings screen would be better as back? After you change the settings you want to go back and not cancel.

It doesn't seem to save when I unclick "Empty Market Rate"

The delete x for entire bots could use a confirmation dialog imo.

Updates the market making UI to reflect the updated way in which market
making works. A JSON configuration file, the same that would be used by
the RPC server, is stored on disk, and the UI gives users an interactive
way to read/update the config file, and also to start/stop market making.

The updated UI includes two screens, `/mm` and `/mmsettings`. `/mm` allows
users to see each of the market for which a market maker is configured,
allows the user to add/remove market makers, and links to the `/mmsettings`
page of each market maker. The `/mmsettings` page allows users to configure
each setting of each of the market makers.

The markets page is also updated to not allow users to place orders manually
while market making is running.
Copy link
Member

@JoeGruffins JoeGruffins left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Getting a panic when not running with experimental. This time just navigating to a market, not messing with the new endpoints:

panic
2023/09/21 14:35:24 http: panic serving 127.0.0.1:39028: runtime error: slice bounds out of range [-1:]
goroutine 2788 [running]:
net/http.(*conn).serve.func1()
        /usr/lib/go/src/net/http/server.go:1868 +0xb9
panic({0x19e5720?, 0xc0013a1170?})
        /usr/lib/go/src/runtime/panic.go:920 +0x270
github.com/go-chi/chi/v5/middleware.prettyStack.decorateFuncCallLine({}, {0xc001ad486c, 0x1f}, 0xd6?, 0x8)
        /home/joe/go/pkg/mod/github.com/go-chi/chi/[email protected]/middleware/recoverer.go:130 +0x525
github.com/go-chi/chi/v5/middleware.prettyStack.decorateLine({}, {0xc001ad486c?, 0x11e9?}, 0xd0?, 0x1?)
        /home/joe/go/pkg/mod/github.com/go-chi/chi/[email protected]/middleware/recoverer.go:106 +0x151
github.com/go-chi/chi/v5/middleware.prettyStack.parse({}, {0xc001afc000, 0x11e9, 0xc00094d278?}, {0x1855260, 0x313d860})
        /home/joe/go/pkg/mod/github.com/go-chi/chi/[email protected]/middleware/recoverer.go:89 +0x3d0
github.com/go-chi/chi/v5/middleware.PrintPrettyStack({0x1855260, 0x313d860})
        /home/joe/go/pkg/mod/github.com/go-chi/chi/[email protected]/middleware/recoverer.go:46 +0x3b
github.com/go-chi/chi/v5/middleware.(*defaultLogEntry).Panic(0x2?, {0x1855260?, 0x313d860?}, {0xc0016b1860?, 0x3?, 0xc0013a1143?})
        /home/joe/go/pkg/mod/github.com/go-chi/chi/[email protected]/middleware/logger.go:165 +0x25
github.com/go-chi/chi/v5/middleware.Recoverer.func1.1()
        /home/joe/go/pkg/mod/github.com/go-chi/chi/[email protected]/middleware/recoverer.go:28 +0xc8
panic({0x1855260?, 0x313d860?})
        /usr/lib/go/src/runtime/panic.go:914 +0x21f
decred.org/dcrdex/client/mm.(*MarketMaker).Running(...)
        /home/joe/git/dcrdex/client/mm/mm.go:213
decred.org/dcrdex/client/webserver.(*WebServer).apiMarketMakingStatus(0xc0008ca0c0, {0x7fd158505078, 0xc0017d3480}, 0x1000000000001?)
        /home/joe/git/dcrdex/client/webserver/api.go:1854 +0x25
net/http.HandlerFunc.ServeHTTP(0xc0008ca0c0?, {0x7fd158505078?, 0xc0017d3480?}, 0x838457?)
        /usr/lib/go/src/net/http/server.go:2136 +0x29
decred.org/dcrdex/client/webserver.(*WebServer).rejectUnauthed-fm.(*WebServer).rejectUnauthed.func1({0x7fd158505078, 0xc0017d3480}, 0x1?)
        /home/joe/git/dcrdex/client/webserver/middleware.go:133 +0x68
net/http.HandlerFunc.ServeHTTP(0xc0007a7d60?, {0x7fd158505078?, 0xc0017d3480?}, 0xc001a95370?)
        /usr/lib/go/src/net/http/server.go:2136 +0x29
github.com/go-chi/chi/v5.(*ChainHandler).ServeHTTP(0x1844760?, {0x7fd158505078?, 0xc0017d3480?}, 0xc0013a1140?)
        /home/joe/go/pkg/mod/github.com/go-chi/chi/[email protected]/chain.go:31 +0x26
github.com/go-chi/chi/v5.(*Mux).routeHTTP(0xc0005d8f00, {0x7fd158505078, 0xc0017d3480}, 0xc001a9d900)
        /home/joe/go/pkg/mod/github.com/go-chi/chi/[email protected]/mux.go:437 +0x1f4
net/http.HandlerFunc.ServeHTTP(0x0?, {0x7fd158505078?, 0xc0017d3480?}, 0x45979c?)
        /usr/lib/go/src/net/http/server.go:2136 +0x29
github.com/go-chi/chi/v5/middleware.AllowContentType.func1.1({0x7fd158505078?, 0xc0017d3480?}, 0xc0013a1141?)
        /home/joe/go/pkg/mod/github.com/go-chi/chi/[email protected]/middleware/content_type.go:31 +0x110
net/http.HandlerFunc.ServeHTTP(0xc00094d7d0?, {0x7fd158505078?, 0xc0017d3480?}, 0xc00094d7b0?)
        /usr/lib/go/src/net/http/server.go:2136 +0x29
github.com/go-chi/chi/v5.(*Mux).ServeHTTP(0xc0005d8f00, {0x7fd158505078, 0xc0017d3480}, 0xc001a9d900)
        /home/joe/go/pkg/mod/github.com/go-chi/chi/[email protected]/mux.go:71 +0x356
github.com/go-chi/chi/v5.(*Mux).Mount.func1({0x7fd158505078, 0xc0017d3480}, 0xc001a9d900)
        /home/joe/go/pkg/mod/github.com/go-chi/chi/[email protected]/mux.go:312 +0x1bb
net/http.HandlerFunc.ServeHTTP(0x1844760?, {0x7fd158505078?, 0xc0017d3480?}, 0xc0013ad5f4?)
        /usr/lib/go/src/net/http/server.go:2136 +0x29
github.com/go-chi/chi/v5.(*Mux).routeHTTP(0xc0008a0360, {0x7fd158505078, 0xc0017d3480}, 0xc001a9d900)
        /home/joe/go/pkg/mod/github.com/go-chi/chi/[email protected]/mux.go:437 +0x1f4
net/http.HandlerFunc.ServeHTTP(0xc0015a4928?, {0x7fd158505078?, 0xc0017d3480?}, 0x17bc1a0?)
        /usr/lib/go/src/net/http/server.go:2136 +0x29
github.com/go-chi/chi/v5/middleware.Recoverer.func1({0x7fd158505078?, 0xc0017d3480?}, 0xc001aad0e0?)
        /home/joe/go/pkg/mod/github.com/go-chi/chi/[email protected]/middleware/recoverer.go:37 +0x78
net/http.HandlerFunc.ServeHTTP(0xf8?, {0x7fd158505078?, 0xc0017d3480?}, 0x1b8ecd1?)
        /usr/lib/go/src/net/http/server.go:2136 +0x29
decred.org/dcrdex/client/webserver.(*WebServer).securityMiddleware-fm.(*WebServer).securityMiddleware.func1({0x7fd158505078, 0xc0017d3480}, 0xc001aad100?)
        /home/joe/git/dcrdex/client/webserver/middleware.go:34 +0x169
net/http.HandlerFunc.ServeHTTP(0xc001a9d800?, {0x7fd158505078?, 0xc0017d3480?}, 0x30?)
        /usr/lib/go/src/net/http/server.go:2136 +0x29
decred.org/dcrdex/client/webserver.New.RequestLogger.func3.1({0x25875a8, 0xc0013bf500}, 0xc001a9d800)
        /home/joe/go/pkg/mod/github.com/go-chi/chi/[email protected]/middleware/logger.go:57 +0x16d
net/http.HandlerFunc.ServeHTTP(0x258a840?, {0x25875a8?, 0xc0013bf500?}, 0x3140330?)
        /usr/lib/go/src/net/http/server.go:2136 +0x29
github.com/go-chi/chi/v5.(*Mux).ServeHTTP(0xc0008a0360, {0x25875a8, 0xc0013bf500}, 0xc001a9d700)
        /home/joe/go/pkg/mod/github.com/go-chi/chi/[email protected]/mux.go:88 +0x315
net/http.serverHandler.ServeHTTP({0xc001aad050?}, {0x25875a8?, 0xc0013bf500?}, 0x6?)
        /usr/lib/go/src/net/http/server.go:2938 +0x8e
net/http.(*conn).serve(0xc001aa2d80, {0x258a808, 0xc0008760c0})
        /usr/lib/go/src/net/http/server.go:2009 +0x5f4
created by net/http.(*Server).Serve in goroutine 80
        /usr/lib/go/src/net/http/server.go:3086 +0x5cb

@martonp
Copy link
Contributor Author

martonp commented Sep 21, 2023

@JoeGruffins Sorry I forgot to comment, the configuration of the config file changed since the Arbitrage strategy was added. Try deleting the config file.

The delete x for entire bots could use a confirmation dialog imo.

I fixed the other issues, but not this one yet. I definitely agree with it though, and I'll come back to it once @buck54321 gives his more detailed UI review.

@buck54321 buck54321 merged commit 3ead8c1 into decred:master Sep 25, 2023
5 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

3 participants