Skip to content

Commit c545b0e

Browse files
authored
Fix hang on shutdown (#320)
* update skycoin & other vendor deps * Improve signal handling for graceful shutdown on Ctrl+C Address issues where DMSG client utilities would not respond to Ctrl+C: - Use signal-aware context for dmsgC.Serve() instead of context.Background() in internal/cli, pkg/direct, and dmsgpty-host - Add context cancellation check in dmsg-socks5 accept loop to properly exit on signal - Implement graceful HTTP server shutdown with 5-second timeout in dmsghttp - Ensure dmsgC.Close() is called via defer in dmsgpty-host for proper cleanup - Add WaitGroup wait in direct client stop function for clean goroutine shutdown - Document temporary kill.go workaround for verification testing These changes ensure client utilities properly respond to interrupt signals without requiring multiple Ctrl+C presses. * Fix data race in SessionCommon Close() and Ping() methods Protect concurrent access to sm.yamux and sm.smux fields with sm.mutx lock to prevent data races when Close() or Ping() are called while session is being initialized. The race occurred when: - handleSession() writes to dSes.sm.yamux (server.go:242) while holding the lock - Close() reads sc.sm.yamux (session_common.go:187-188) without holding the lock - A goroutine can call Close() concurrently during session setup Changes: - Add sm.mutx.Lock() protection in Close() method - Add sm.mutx.RLock() protection in Ping() method for consistency * update skywire & skycoin vendor deps
1 parent cd8f0a6 commit c545b0e

File tree

625 files changed

+91305
-1077
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

625 files changed

+91305
-1077
lines changed

cmd/dmsg-socks5/commands/dmsg-socks5.go

Lines changed: 16 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -157,11 +157,25 @@ var serveCmd = &cobra.Command{
157157
dlog.Printf("Error closing listener: %v", err)
158158
}
159159
}()
160+
161+
go func() {
162+
<-ctx.Done()
163+
if err := dmsgL.Close(); err != nil {
164+
dlog.WithError(err).Debug("Error closing listener on context cancellation")
165+
}
166+
}()
167+
160168
for {
161169
respConn, err := dmsgL.Accept()
162170
if err != nil {
163-
dlog.Errorf("Error accepting initiator: %v", err)
164-
continue
171+
select {
172+
case <-ctx.Done():
173+
dlog.Info("Shutting down SOCKS5 server...")
174+
return
175+
default:
176+
dlog.Errorf("Error accepting initiator: %v", err)
177+
continue
178+
}
165179
}
166180
dlog.Infof("Accepted connection from: %s", respConn.RemoteAddr())
167181

cmd/dmsg/commands/kill.go

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
// Package commands cmd/.../commands/kill.go
1+
// Package commands cmd/dmsg/commands/kill.go
22
package commands
33

44
import (
@@ -8,7 +8,11 @@ import (
88
)
99

1010
func init() {
11-
//the application must stop on ctrl+c
11+
// TEMPORARY WORKAROUND: Force exit on Ctrl+C after 3 attempts
12+
// This can be removed once the proper signal handling fixes are verified:
13+
// - dmsgC.Serve() now uses signal-aware context (not context.Background())
14+
// - Accept loops now check for context cancellation
15+
// - HTTP servers now shutdown gracefully
1216
c := make(chan os.Signal, 1)
1317
signal.Notify(c, os.Interrupt, syscall.SIGTERM)
1418
go func() {

cmd/dmsghttp/commands/dmsghttp.go

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -165,6 +165,16 @@ func server() {
165165
WriteTimeout: 10 * time.Second,
166166
}
167167

168+
// Gracefully shutdown HTTP server on context cancellation
169+
go func() {
170+
<-ctx.Done()
171+
shutdownCtx, cancel := context.WithTimeout(context.Background(), 5*time.Second)
172+
defer cancel()
173+
if err := serve.Shutdown(shutdownCtx); err != nil {
174+
dlog.WithError(err).Warn("Server shutdown error")
175+
}
176+
}()
177+
168178
// Start serving
169179
go func() {
170180
dlog.WithField("dmsg_addr", lis.Addr().String()).Debug("Serving...\n")

cmd/dmsgpty-host/commands/root.go

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -104,7 +104,13 @@ var RootCmd = &cobra.Command{
104104
dmsgC := dmsg.NewClient(pk, sk, disc.NewHTTP(conf.DmsgDisc, &http.Client{}, log), &dmsg.Config{
105105
MinSessions: conf.DmsgSessions,
106106
})
107-
go dmsgC.Serve(context.Background())
107+
defer func() {
108+
if err := dmsgC.Close(); err != nil {
109+
log.WithError(err).Warn("Failed to close dmsg client")
110+
}
111+
}()
112+
113+
go dmsgC.Serve(ctx)
108114
select {
109115
case <-ctx.Done():
110116
return fmt.Errorf("failed to wait dmsg client to be ready: %w", ctx.Err())

go.mod

Lines changed: 40 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,16 @@
11
module github.com/skycoin/dmsg
22

3-
go 1.25
3+
go 1.25.1
44

55
require (
66
github.com/ActiveState/termtest/conpty v0.5.0
7-
github.com/VictoriaMetrics/metrics v1.40.1
7+
github.com/VictoriaMetrics/metrics v1.40.2
88
github.com/bitfield/script v0.24.1
99
github.com/chen3feng/safecast v0.0.0-20220908170618-81b2ecd47937
1010
github.com/coder/websocket v1.8.14
1111
github.com/confiant-inc/go-socks5 v0.0.0-20210816151940-c1124825b1d6
1212
github.com/creack/pty v1.1.24
13-
github.com/gin-gonic/gin v1.10.1
13+
github.com/gin-gonic/gin v1.11.0
1414
github.com/go-chi/chi/v5 v5.2.3
1515
github.com/go-redis/redis/v8 v8.11.5
1616
github.com/hashicorp/yamux v0.1.2
@@ -19,13 +19,13 @@ require (
1919
github.com/pires/go-proxyproto v0.8.1
2020
github.com/sirupsen/logrus v1.9.3
2121
github.com/skycoin/noise v0.0.0-20180327030543-2492fe189ae6
22-
github.com/skycoin/skycoin v0.28.1-0.20250914161012-28a0dc172f9e //DO NOT MODIFY v0.28.1-0.20250914161012-28a0dc172f9e
23-
github.com/skycoin/skywire v1.3.31-rc3.0.20250914170142-e55540041279
22+
github.com/skycoin/skycoin v0.28.1-0.20251022232932-b3a844043898 //DO NOT MODIFY v0.28.1-0.20251022232932-b3a844043898
23+
github.com/skycoin/skywire v1.3.32-0.20251022235455-ccd6bb67020c
2424
github.com/spf13/cobra v1.10.1
25-
github.com/stretchr/testify v1.10.0
26-
golang.org/x/net v0.44.0
27-
golang.org/x/sys v0.36.0
28-
golang.org/x/term v0.35.0
25+
github.com/stretchr/testify v1.11.1
26+
golang.org/x/net v0.46.0
27+
golang.org/x/sys v0.37.0
28+
golang.org/x/term v0.36.0
2929
)
3030

3131
require github.com/xtaci/smux v1.5.35
@@ -44,11 +44,12 @@ require (
4444
github.com/gin-contrib/sse v1.1.0 // indirect
4545
github.com/go-playground/locales v0.14.1 // indirect
4646
github.com/go-playground/universal-translator v0.18.1 // indirect
47-
github.com/go-playground/validator/v10 v10.27.0 // indirect
47+
github.com/go-playground/validator/v10 v10.28.0 // indirect
4848
github.com/goccy/go-json v0.10.5 // indirect
49+
github.com/goccy/go-yaml v1.18.0 // indirect
4950
github.com/inconshreveable/mousetrap v1.1.0 // indirect
5051
github.com/itchyny/gojq v0.12.17 // indirect
51-
github.com/itchyny/timefmt-go v0.1.6 // indirect
52+
github.com/itchyny/timefmt-go v0.1.7 // indirect
5253
github.com/klauspost/cpuid/v2 v2.3.0 // indirect
5354
github.com/leodido/go-urn v1.4.0 // indirect
5455
github.com/mattn/go-colorable v0.1.14 // indirect
@@ -58,21 +59,41 @@ require (
5859
github.com/modern-go/reflect2 v1.0.2 // indirect
5960
github.com/pelletier/go-toml/v2 v2.2.4 // indirect
6061
github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 // indirect
62+
github.com/quic-go/qpack v0.5.1 // indirect
63+
github.com/quic-go/quic-go v0.55.0 // indirect
6164
github.com/spf13/pflag v1.0.10 // indirect
6265
github.com/twitchyliquid64/golang-asm v0.15.1 // indirect
6366
github.com/ugorji/go/codec v1.3.0 // indirect
6467
github.com/valyala/fastrand v1.1.0 // indirect
6568
github.com/valyala/histogram v1.2.0 // indirect
66-
golang.org/x/arch v0.21.0 // indirect
67-
golang.org/x/crypto v0.42.0 // indirect
68-
golang.org/x/text v0.29.0 // indirect
69-
google.golang.org/protobuf v1.36.9 // indirect
69+
golang.org/x/arch v0.22.0 // indirect
70+
golang.org/x/crypto v0.43.0 // indirect
71+
golang.org/x/mod v0.29.0 // indirect
72+
golang.org/x/sync v0.17.0 // indirect
73+
golang.org/x/text v0.30.0 // indirect
74+
golang.org/x/tools v0.38.0 // indirect
75+
google.golang.org/protobuf v1.36.10 // indirect
7076
gopkg.in/yaml.v3 v3.0.1 // indirect
7177
mvdan.cc/sh/v3 v3.12.0 // indirect
7278
)
7379

74-
// Uncomment for tests with alternate branches of 'skywire'
80+
// IT IS FORBIDDEN TO USE REPLACE DIRECTIVES
81+
82+
// [error] The go.mod file for the module providing named packages contains one or
83+
// more replace directives. It must not contain directives that would cause
84+
// it to be interpreted differently than if it were the main module.
85+
86+
// Uncomment for tests with local sources
7587
//replace github.com/skycoin/skywire => ../skywire
76-
//replace github.com/skycoin/skywire => github.com/skycoin/skywire <commit-hash>
77-
//replace github.com/skycoin/skywire => github.com/skycoin/skywire v1.3.31-rc3.0.20250914170142-e55540041279
78-
//replace github.com/skycoin/skycoin => github.com/skycoin/skycoin v0.28.1-0.20250823221707-c533551dfabd
88+
//replace github.com/skycoin/skycoin => ../skycoin
89+
90+
// Below should reflect current versions of the following deps
91+
// To update deps to specific commit hash:
92+
// 1) Uncomment one of the following lines and substituite version with desired commit hash:
93+
//replace github.com/skycoin/skycoin => github.com/skycoin/skycoin v0.28.1-0.20251022232932-b3a844043898
94+
//replace github.com/skycoin/skywire => github.com/skycoin/skywire v1.3.32-0.20251022235455-ccd6bb67020c
95+
// 2) Run `go mod tidy && go mod vendor`
96+
// 3) Copy the populated version string to the correct place in require(...) above - replacing the specified version string
97+
// 4) Re-comment the uncommented replace directive above
98+
// 5) Save this file.
99+
// 6) Run `go mod tidy && go mod vendor`

go.sum

Lines changed: 42 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -3,8 +3,8 @@ github.com/ActiveState/termtest/conpty v0.5.0/go.mod h1:LO4208FLsxw6DcNZ1UtuGUMW
33
github.com/Azure/go-ansiterm v0.0.0-20170929234023-d6e3b3328b78/go.mod h1:LmzpDX56iTiv29bbRTIsUNlaFfuhWRQBWjQdVyAevI8=
44
github.com/Azure/go-ansiterm v0.0.0-20250102033503-faa5f7b0171c h1:udKWzYgxTojEKWjV8V+WSxDXJ4NFATAsZjh8iIbsQIg=
55
github.com/Azure/go-ansiterm v0.0.0-20250102033503-faa5f7b0171c/go.mod h1:xomTg63KZ2rFqZQzSB4Vz2SUXa1BpHTVz9L5PTmPC4E=
6-
github.com/VictoriaMetrics/metrics v1.40.1 h1:FrF5uJRpIVj9fayWcn8xgiI+FYsKGMslzPuOXjdeyR4=
7-
github.com/VictoriaMetrics/metrics v1.40.1/go.mod h1:XE4uudAAIRaJE614Tl5HMrtoEU6+GDZO4QTnNSsZRuA=
6+
github.com/VictoriaMetrics/metrics v1.40.2 h1:OVSjKcQEx6JAwGeu8/KQm9Su5qJ72TMEW4xYn5vw3Ac=
7+
github.com/VictoriaMetrics/metrics v1.40.2/go.mod h1:XE4uudAAIRaJE614Tl5HMrtoEU6+GDZO4QTnNSsZRuA=
88
github.com/bitfield/script v0.24.1 h1:D4ZWu72qWL/at0rXFF+9xgs17VwyrpT6PkkBTdEz9xU=
99
github.com/bitfield/script v0.24.1/go.mod h1:fv+6x4OzVsRs6qAlc7wiGq8fq1b5orhtQdtW0dwjUHI=
1010
github.com/bytedance/gopkg v0.1.3 h1:TPBSwH8RsouGCBcMBktLt1AymVo2TVsBVCY4b6TnZ/M=
@@ -42,8 +42,8 @@ github.com/gabriel-vasile/mimetype v1.4.10 h1:zyueNbySn/z8mJZHLt6IPw0KoZsiQNszIp
4242
github.com/gabriel-vasile/mimetype v1.4.10/go.mod h1:d+9Oxyo1wTzWdyVUPMmXFvp4F9tea18J8ufA774AB3s=
4343
github.com/gin-contrib/sse v1.1.0 h1:n0w2GMuUpWDVp7qSpvze6fAu9iRxJY4Hmj6AmBOU05w=
4444
github.com/gin-contrib/sse v1.1.0/go.mod h1:hxRZ5gVpWMT7Z0B0gSNYqqsSCNIJMjzvm6fqCz9vjwM=
45-
github.com/gin-gonic/gin v1.10.1 h1:T0ujvqyCSqRopADpgPgiTT63DUQVSfojyME59Ei63pQ=
46-
github.com/gin-gonic/gin v1.10.1/go.mod h1:4PMNQiOhvDRa013RKVbsiNwoyezlm2rm0uX/T7kzp5Y=
45+
github.com/gin-gonic/gin v1.11.0 h1:OW/6PLjyusp2PPXtyxKHU0RbX6I/l28FTdDlae5ueWk=
46+
github.com/gin-gonic/gin v1.11.0/go.mod h1:+iq/FyxlGzII0KHiBGjuNn4UNENUlKbGlNmc+W50Dls=
4747
github.com/go-chi/chi/v5 v5.2.3 h1:WQIt9uxdsAbgIYgid+BpYc+liqQZGMHRaUwp0JUcvdE=
4848
github.com/go-chi/chi/v5 v5.2.3/go.mod h1:L2yAIGWB3H+phAw1NxKwWM+7eUH/lU8pOMm5hHcoops=
4949
github.com/go-playground/assert/v2 v2.2.0 h1:JvknZsQTYeFEAhQwI4qEt9cyV5ONwRHC+lYKSsYSR8s=
@@ -52,14 +52,16 @@ github.com/go-playground/locales v0.14.1 h1:EWaQ/wswjilfKLTECiXz7Rh+3BjFhfDFKv/o
5252
github.com/go-playground/locales v0.14.1/go.mod h1:hxrqLVvrK65+Rwrd5Fc6F2O76J/NuW9t0sjnWqG1slY=
5353
github.com/go-playground/universal-translator v0.18.1 h1:Bcnm0ZwsGyWbCzImXv+pAJnYK9S473LQFuzCbDbfSFY=
5454
github.com/go-playground/universal-translator v0.18.1/go.mod h1:xekY+UJKNuX9WP91TpwSH2VMlDf28Uj24BCp08ZFTUY=
55-
github.com/go-playground/validator/v10 v10.27.0 h1:w8+XrWVMhGkxOaaowyKH35gFydVHOvC0/uWoy2Fzwn4=
56-
github.com/go-playground/validator/v10 v10.27.0/go.mod h1:I5QpIEbmr8On7W0TktmJAumgzX4CA1XNl4ZmDuVHKKo=
55+
github.com/go-playground/validator/v10 v10.28.0 h1:Q7ibns33JjyW48gHkuFT91qX48KG0ktULL6FgHdG688=
56+
github.com/go-playground/validator/v10 v10.28.0/go.mod h1:GoI6I1SjPBh9p7ykNE/yj3fFYbyDOpwMn5KXd+m2hUU=
5757
github.com/go-quicktest/qt v1.101.0 h1:O1K29Txy5P2OK0dGo59b7b0LR6wKfIhttaAhHUyn7eI=
5858
github.com/go-quicktest/qt v1.101.0/go.mod h1:14Bz/f7NwaXPtdYEgzsx46kqSxVwTbzVZsDC26tQJow=
5959
github.com/go-redis/redis/v8 v8.11.5 h1:AcZZR7igkdvfVmQTPnu9WE37LRrO/YrBH5zWyjDC0oI=
6060
github.com/go-redis/redis/v8 v8.11.5/go.mod h1:gREzHqY1hg6oD9ngVRbLStwAWKhA0FEgq8Jd4h5lpwo=
6161
github.com/goccy/go-json v0.10.5 h1:Fq85nIqj+gXn/S5ahsiTlK3TmC85qgirsdTP/+DeaC4=
6262
github.com/goccy/go-json v0.10.5/go.mod h1:oq7eo15ShAhp70Anwd5lgX2pLfOS3QCiwU/PULtXL6M=
63+
github.com/goccy/go-yaml v1.18.0 h1:8W7wMFS12Pcas7KU+VVkaiCng+kG8QiFeFwzFb+rwuw=
64+
github.com/goccy/go-yaml v1.18.0/go.mod h1:XBurs7gK8ATbW4ZPGKgcbrY1Br56PdM69F7LkFRi1kA=
6365
github.com/google/go-cmp v0.7.0 h1:wk8382ETsv4JYUZwIsn6YpYiWiBsYLSJiTsyBybVuN8=
6466
github.com/google/go-cmp v0.7.0/go.mod h1:pXiqmnSA92OHEEa9HXL2W4E7lf9JzCmGVUdgjX3N/iU=
6567
github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg=
@@ -70,8 +72,8 @@ github.com/inconshreveable/mousetrap v1.1.0 h1:wN+x4NVGpMsO7ErUn/mUI3vEoE6Jt13X2
7072
github.com/inconshreveable/mousetrap v1.1.0/go.mod h1:vpF70FUmC8bwa3OWnCshd2FqLfsEA9PFc4w1p2J65bw=
7173
github.com/itchyny/gojq v0.12.17 h1:8av8eGduDb5+rvEdaOO+zQUjA04MS0m3Ps8HiD+fceg=
7274
github.com/itchyny/gojq v0.12.17/go.mod h1:WBrEMkgAfAGO1LUcGOckBl5O726KPp+OlkKug0I/FEY=
73-
github.com/itchyny/timefmt-go v0.1.6 h1:ia3s54iciXDdzWzwaVKXZPbiXzxxnv1SPGFfM/myJ5Q=
74-
github.com/itchyny/timefmt-go v0.1.6/go.mod h1:RRDZYC5s9ErkjQvTvvU7keJjxUYzIISJGxm9/mAERQg=
75+
github.com/itchyny/timefmt-go v0.1.7 h1:xyftit9Tbw+Dc/huSSPJaEmX1TVL8lw5vxjJLK4GMMA=
76+
github.com/itchyny/timefmt-go v0.1.7/go.mod h1:5E46Q+zj7vbTgWY8o5YkMeYb4I6GeWLFnetPy5oBrAI=
7577
github.com/ivanpirog/coloredcobra v1.0.1 h1:aURSdEmlR90/tSiWS0dMjdwOvCVUeYLfltLfbgNxrN4=
7678
github.com/ivanpirog/coloredcobra v1.0.1/go.mod h1:iho4nEKcnwZFiniGSdcgdvRgZNjxm+h20acv8vqmN6Q=
7779
github.com/json-iterator/go v1.1.12 h1:PV8peI4a0ysnczrg+LtxykD8LfKY9ML6u2jnxaEnrnM=
@@ -111,17 +113,21 @@ github.com/pires/go-proxyproto v0.8.1/go.mod h1:ZKAAyp3cgy5Y5Mo4n9AlScrkCZwUy0g3
111113
github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
112114
github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 h1:Jamvg5psRIccs7FGNTlIRMkT8wgtp5eCXdBlqhYGL6U=
113115
github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
116+
github.com/quic-go/qpack v0.5.1 h1:giqksBPnT/HDtZ6VhtFKgoLOWmlyo9Ei6u9PqzIMbhI=
117+
github.com/quic-go/qpack v0.5.1/go.mod h1:+PC4XFrEskIVkcLzpEkbLqq1uCoxPhQuvK5rH1ZgaEg=
118+
github.com/quic-go/quic-go v0.55.0 h1:zccPQIqYCXDt5NmcEabyYvOnomjs8Tlwl7tISjJh9Mk=
119+
github.com/quic-go/quic-go v0.55.0/go.mod h1:DR51ilwU1uE164KuWXhinFcKWGlEjzys2l8zUl5Ss1U=
114120
github.com/rogpeppe/go-internal v1.14.1 h1:UQB4HGPB6osV0SQTLymcB4TgvyWu6ZyliaW0tI/otEQ=
115121
github.com/rogpeppe/go-internal v1.14.1/go.mod h1:MaRKkUm5W0goXpeCfT7UZI6fk/L7L7so1lCWt35ZSgc=
116122
github.com/russross/blackfriday/v2 v2.1.0/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM=
117123
github.com/sirupsen/logrus v1.9.3 h1:dueUQJ1C2q9oE3F7wvmSGAaVtTmUizReu6fjN8uqzbQ=
118124
github.com/sirupsen/logrus v1.9.3/go.mod h1:naHLuLoDiP4jHNo9R0sCBMtWGeIprob74mVsIT4qYEQ=
119125
github.com/skycoin/noise v0.0.0-20180327030543-2492fe189ae6 h1:1Nc5EBY6pjfw1kwW0duwyG+7WliWz5u9kgk1h5MnLuA=
120126
github.com/skycoin/noise v0.0.0-20180327030543-2492fe189ae6/go.mod h1:UXghlricA7J3aRD/k7p/zBObQfmBawwCxIVPVjz2Q3o=
121-
github.com/skycoin/skycoin v0.28.1-0.20250914161012-28a0dc172f9e h1:y+rISjhfE4Wzo20Fry7bTMoTbSvdUflY1Ix0NUngzsw=
122-
github.com/skycoin/skycoin v0.28.1-0.20250914161012-28a0dc172f9e/go.mod h1:i1jDI33Y6nglm4APlS614H7lW01g/CyGX7ilKmye9a8=
123-
github.com/skycoin/skywire v1.3.31-rc3.0.20250914170142-e55540041279 h1:1k9qKFuqVLkP5V4YnnvIBErEIB15RS+4a1gnH7fh4iQ=
124-
github.com/skycoin/skywire v1.3.31-rc3.0.20250914170142-e55540041279/go.mod h1:PQz2fv+3L0nq0qP/mOi3Zf4D2I2NMptXvSVBywVUKz8=
127+
github.com/skycoin/skycoin v0.28.1-0.20251022232932-b3a844043898 h1:1HhCH9VNAz2spQkgmZrKVwlhwrNMPCWYIbzuPxGdLlM=
128+
github.com/skycoin/skycoin v0.28.1-0.20251022232932-b3a844043898/go.mod h1:UV52f79oGvWNYIC9JU+PjFu1cQwAN6Vb+SgZenBly/8=
129+
github.com/skycoin/skywire v1.3.32-0.20251022235455-ccd6bb67020c h1:iYfTBC5czYjnmED/z91hAU8mObyK95IAnjtTcOr80IQ=
130+
github.com/skycoin/skywire v1.3.32-0.20251022235455-ccd6bb67020c/go.mod h1:UmCtH8wQJpUAdh1+SOPc7kkRw2Tr/SMChDmhaOo40fA=
125131
github.com/spf13/cobra v1.4.0/go.mod h1:Wo4iy3BUC+X2Fybo0PDqwJIv3dNRiZLHQymsfxlB84g=
126132
github.com/spf13/cobra v1.10.1 h1:lJeBwCfmrnXthfAupyUTzJ/J4Nc1RsHC/mSRU2dll/s=
127133
github.com/spf13/cobra v1.10.1/go.mod h1:7SmJGaTHFVBY0jW4NXGluQoLvhqFQM+6XSKD+P4XaB0=
@@ -137,8 +143,8 @@ github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/
137143
github.com/stretchr/testify v1.7.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
138144
github.com/stretchr/testify v1.8.0/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO+kdMU+MU=
139145
github.com/stretchr/testify v1.8.1/go.mod h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o6fzry7u4=
140-
github.com/stretchr/testify v1.10.0 h1:Xv5erBjTwe/5IxqUQTdXv5kgmIvbHo3QQyRwhJsOfJA=
141-
github.com/stretchr/testify v1.10.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY=
146+
github.com/stretchr/testify v1.11.1 h1:7s2iGBzp5EwR7/aIZr8ao5+dra3wiQyKjjFuvgVKu7U=
147+
github.com/stretchr/testify v1.11.1/go.mod h1:wZwfW3scLgRK+23gO65QZefKpKQRnfz6sD981Nm4B6U=
142148
github.com/twitchyliquid64/golang-asm v0.15.1 h1:SU5vSMR7hnwNxj24w34ZyCi/FmDZTkS4MhqMhdFk5YI=
143149
github.com/twitchyliquid64/golang-asm v0.15.1/go.mod h1:a1lVb/DtPvCB8fslRZhAngC2+aY1QWCk3Cedj/Gdt08=
144150
github.com/ugorji/go/codec v1.3.0 h1:Qd2W2sQawAfG8XSvzwhBeoGq71zXOC/Q1E9y/wUcsUA=
@@ -149,29 +155,35 @@ github.com/valyala/histogram v1.2.0 h1:wyYGAZZt3CpwUiIb9AU/Zbllg1llXyrtApRS815OL
149155
github.com/valyala/histogram v1.2.0/go.mod h1:Hb4kBwb4UxsaNbbbh+RRz8ZR6pdodR57tzWUS3BUzXY=
150156
github.com/xtaci/smux v1.5.35 h1:RosihGJBeaS8gxOZ17HNxbhONwnqQwNwusHx4+SEGhk=
151157
github.com/xtaci/smux v1.5.35/go.mod h1:OMlQbT5vcgl2gb49mFkYo6SMf+zP3rcjcwQz7ZU7IGY=
152-
golang.org/x/arch v0.21.0 h1:iTC9o7+wP6cPWpDWkivCvQFGAHDQ59SrSxsLPcnkArw=
153-
golang.org/x/arch v0.21.0/go.mod h1:dNHoOeKiyja7GTvF9NJS1l3Z2yntpQNzgrjh1cU103A=
154-
golang.org/x/crypto v0.42.0 h1:chiH31gIWm57EkTXpwnqf8qeuMUi0yekh6mT2AvFlqI=
155-
golang.org/x/crypto v0.42.0/go.mod h1:4+rDnOTJhQCx2q7/j6rAN5XDw8kPjeaXEUR2eL94ix8=
156-
golang.org/x/net v0.44.0 h1:evd8IRDyfNBMBTTY5XRF1vaZlD+EmWx6x8PkhR04H/I=
157-
golang.org/x/net v0.44.0/go.mod h1:ECOoLqd5U3Lhyeyo/QDCEVQ4sNgYsqvCZ722XogGieY=
158+
go.uber.org/mock v0.6.0 h1:hyF9dfmbgIX5EfOdasqLsWD6xqpNZlXblLB/Dbnwv3Y=
159+
go.uber.org/mock v0.6.0/go.mod h1:KiVJ4BqZJaMj4svdfmHM0AUx4NJYO8ZNpPnZn1Z+BBU=
160+
golang.org/x/arch v0.22.0 h1:c/Zle32i5ttqRXjdLyyHZESLD/bB90DCU1g9l/0YBDI=
161+
golang.org/x/arch v0.22.0/go.mod h1:dNHoOeKiyja7GTvF9NJS1l3Z2yntpQNzgrjh1cU103A=
162+
golang.org/x/crypto v0.43.0 h1:dduJYIi3A3KOfdGOHX8AVZ/jGiyPa3IbBozJ5kNuE04=
163+
golang.org/x/crypto v0.43.0/go.mod h1:BFbav4mRNlXJL4wNeejLpWxB7wMbc79PdRGhWKncxR0=
164+
golang.org/x/mod v0.29.0 h1:HV8lRxZC4l2cr3Zq1LvtOsi/ThTgWnUk/y64QSs8GwA=
165+
golang.org/x/mod v0.29.0/go.mod h1:NyhrlYXJ2H4eJiRy/WDBO6HMqZQ6q9nk4JzS3NuCK+w=
166+
golang.org/x/net v0.46.0 h1:giFlY12I07fugqwPuWJi68oOnpfqFnJIJzaIIm2JVV4=
167+
golang.org/x/net v0.46.0/go.mod h1:Q9BGdFy1y4nkUwiLvT5qtyhAnEHgnQ/zd8PfU6nc210=
168+
golang.org/x/sync v0.17.0 h1:l60nONMj9l5drqw6jlhIELNv9I0A4OFgRsG9k2oT9Ug=
169+
golang.org/x/sync v0.17.0/go.mod h1:9KTHXmSnoGruLpwFjVSX0lNNA75CykiMECbovNTZqGI=
158170
golang.org/x/sys v0.0.0-20200116001909-b77594299b42/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
159171
golang.org/x/sys v0.0.0-20200223170610-d5e6a3e2c0ae/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
160172
golang.org/x/sys v0.0.0-20200428200454-593003d681fa/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
161173
golang.org/x/sys v0.0.0-20210616094352-59db8d763f22/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
162174
golang.org/x/sys v0.0.0-20210630005230-0f9fa26af87c/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
163175
golang.org/x/sys v0.0.0-20220715151400-c0bba94af5f8/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
164176
golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
165-
golang.org/x/sys v0.36.0 h1:KVRy2GtZBrk1cBYA7MKu5bEZFxQk4NIDV6RLVcC8o0k=
166-
golang.org/x/sys v0.36.0/go.mod h1:OgkHotnGiDImocRcuBABYBEXf8A9a87e/uXjp9XT3ks=
167-
golang.org/x/term v0.35.0 h1:bZBVKBudEyhRcajGcNc3jIfWPqV4y/Kt2XcoigOWtDQ=
168-
golang.org/x/term v0.35.0/go.mod h1:TPGtkTLesOwf2DE8CgVYiZinHAOuy5AYUYT1lENIZnA=
169-
golang.org/x/text v0.29.0 h1:1neNs90w9YzJ9BocxfsQNHKuAT4pkghyXc4nhZ6sJvk=
170-
golang.org/x/text v0.29.0/go.mod h1:7MhJOA9CD2qZyOKYazxdYMF85OwPdEr9jTtBpO7ydH4=
171-
golang.org/x/tools v0.36.0 h1:kWS0uv/zsvHEle1LbV5LE8QujrxB3wfQyxHfhOk0Qkg=
172-
golang.org/x/tools v0.36.0/go.mod h1:WBDiHKJK8YgLHlcQPYQzNCkUxUypCaa5ZegCVutKm+s=
173-
google.golang.org/protobuf v1.36.9 h1:w2gp2mA27hUeUzj9Ex9FBjsBm40zfaDtEWow293U7Iw=
174-
google.golang.org/protobuf v1.36.9/go.mod h1:fuxRtAxBytpl4zzqUh6/eyUujkJdNiuEkXntxiD/uRU=
177+
golang.org/x/sys v0.37.0 h1:fdNQudmxPjkdUTPnLn5mdQv7Zwvbvpaxqs831goi9kQ=
178+
golang.org/x/sys v0.37.0/go.mod h1:OgkHotnGiDImocRcuBABYBEXf8A9a87e/uXjp9XT3ks=
179+
golang.org/x/term v0.36.0 h1:zMPR+aF8gfksFprF/Nc/rd1wRS1EI6nDBGyWAvDzx2Q=
180+
golang.org/x/term v0.36.0/go.mod h1:Qu394IJq6V6dCBRgwqshf3mPF85AqzYEzofzRdZkWss=
181+
golang.org/x/text v0.30.0 h1:yznKA/E9zq54KzlzBEAWn1NXSQ8DIp/NYMy88xJjl4k=
182+
golang.org/x/text v0.30.0/go.mod h1:yDdHFIX9t+tORqspjENWgzaCVXgk0yYnYuSZ8UzzBVM=
183+
golang.org/x/tools v0.38.0 h1:Hx2Xv8hISq8Lm16jvBZ2VQf+RLmbd7wVUsALibYI/IQ=
184+
golang.org/x/tools v0.38.0/go.mod h1:yEsQ/d/YK8cjh0L6rZlY8tgtlKiBNTL14pGDJPJpYQs=
185+
google.golang.org/protobuf v1.36.10 h1:AYd7cD/uASjIL6Q9LiTjz8JLcrh/88q5UObnmY3aOOE=
186+
google.golang.org/protobuf v1.36.10/go.mod h1:HTf+CrKn2C3g5S8VImy6tdcUvCska2kB7j23XfzDpco=
175187
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
176188
gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c h1:Hei/4ADfdWqJk1ZMxUNpqntNwaWcugrBjAiHlqqRiVk=
177189
gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c/go.mod h1:JHkPIbrfpd72SG/EVd6muEfDQjcINNoR0C8j2r3qZ4Q=

0 commit comments

Comments
 (0)