diff --git a/Dockerfile b/Dockerfile index b8a6ab57..91e4a19d 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,5 +1,5 @@ # BUILD IMAGE -------------------------------------------------------- -FROM golang:1.19 as builder +FROM golang:1.20 as builder WORKDIR /app COPY . . diff --git a/README.md b/README.md index 6a1a567c..927a1aac 100644 --- a/README.md +++ b/README.md @@ -5,7 +5,7 @@ A Go implementation of the [Waku v2 protocol](https://rfc.vac.dev/spec/10).

- +

@@ -106,7 +106,7 @@ Thank you for considering to help out with the source code! We welcome contribut If you'd like to contribute to go-waku, please fork, fix, commit and send a pull request. If you wish to submit more complex changes though, please check up with the core devs first to ensure those changes are in line with the general philosophy of the project and/or get some early feedback which can make both your efforts much lighter as well as our review and merge procedures quick and simple. To build and test this repository, you need: - - [Go](https://golang.org/) (version 1.19 or 1.20) + - [Go](https://golang.org/) (version 1.20) - [protoc](https://grpc.io/docs/protoc-installation/) - [protoc-gen-go](https://protobuf.dev/getting-started/gotutorial/#compiling-protocol-buffers) diff --git a/examples/basic2/go.mod b/examples/basic2/go.mod index faee07a7..9e244c56 100644 --- a/examples/basic2/go.mod +++ b/examples/basic2/go.mod @@ -1,6 +1,6 @@ module basic2 -go 1.19 +go 1.20 replace github.com/waku-org/go-waku => ../.. diff --git a/examples/chat2/go.mod b/examples/chat2/go.mod index 4eeba10f..c853300f 100644 --- a/examples/chat2/go.mod +++ b/examples/chat2/go.mod @@ -1,6 +1,6 @@ module chat2 -go 1.19 +go 1.20 replace github.com/waku-org/go-waku => ../.. diff --git a/examples/filter2/go.mod b/examples/filter2/go.mod index e1cb4fa7..1205e2ad 100644 --- a/examples/filter2/go.mod +++ b/examples/filter2/go.mod @@ -1,6 +1,6 @@ module filter2 -go 1.19 +go 1.20 replace github.com/waku-org/go-waku => ../.. diff --git a/examples/noise/go.mod b/examples/noise/go.mod index c6d8c9b1..cb4f1e42 100644 --- a/examples/noise/go.mod +++ b/examples/noise/go.mod @@ -1,6 +1,6 @@ module noise -go 1.19 +go 1.20 replace github.com/waku-org/go-waku => ../.. diff --git a/examples/rln/go.mod b/examples/rln/go.mod index 2fe80f48..3582c132 100644 --- a/examples/rln/go.mod +++ b/examples/rln/go.mod @@ -1,6 +1,6 @@ module rln -go 1.19 +go 1.20 replace github.com/waku-org/go-waku => ../.. diff --git a/flake.nix b/flake.nix index 46f1d588..d900d0ab 100644 --- a/flake.nix +++ b/flake.nix @@ -18,7 +18,7 @@ pkgs = nixpkgsFor.${system}; commit = builtins.substring 0 7 (self.rev or "dirty"); version = builtins.readFile ./VERSION; - in pkgs.buildGo119Module { + in pkgs.buildGo120Module { name = "go-waku"; src = self; inherit subPackages; diff --git a/go.mod b/go.mod index 42a3a2dd..06f99203 100644 --- a/go.mod +++ b/go.mod @@ -1,6 +1,6 @@ module github.com/waku-org/go-waku -go 1.19 +go 1.20 replace github.com/ethereum/go-ethereum v1.10.26 => github.com/status-im/go-ethereum v1.10.25-status.4 @@ -160,7 +160,7 @@ require ( go.uber.org/atomic v1.11.0 // indirect go.uber.org/multierr v1.11.0 // indirect golang.org/x/crypto v0.12.0 // indirect - golang.org/x/exp v0.0.0-20230713183714-613f0c0eb8a1 // indirect + golang.org/x/exp v0.0.0-20230713183714-613f0c0eb8a1 golang.org/x/mod v0.12.0 // indirect golang.org/x/net v0.14.0 // indirect golang.org/x/sys v0.11.0 diff --git a/waku/v2/node/wakunode2.go b/waku/v2/node/wakunode2.go index 6e2fb1b4..8d4540af 100644 --- a/waku/v2/node/wakunode2.go +++ b/waku/v2/node/wakunode2.go @@ -11,6 +11,7 @@ import ( golog "github.com/ipfs/go-log/v2" "github.com/libp2p/go-libp2p" "go.uber.org/zap" + "golang.org/x/exp/maps" "github.com/ethereum/go-ethereum/crypto" "github.com/ethereum/go-ethereum/p2p/enode" @@ -306,7 +307,8 @@ func New(opts ...WakuNodeOption) (*WakuNode, error) { func (w *WakuNode) watchMultiaddressChanges(ctx context.Context) { defer w.wg.Done() - addrs := w.ListenAddresses() + addrsSet := utils.MultiAddrSet(w.ListenAddresses()...) + first := make(chan struct{}, 1) first <- struct{}{} for { @@ -314,22 +316,13 @@ func (w *WakuNode) watchMultiaddressChanges(ctx context.Context) { case <-ctx.Done(): return case <-first: - w.log.Info("listening", logging.MultiAddrs("multiaddr", addrs...)) + addr := maps.Keys(addrsSet) + w.log.Info("listening", logging.MultiAddrs("multiaddr", addr...)) case <-w.addressChangesSub.Out(): - newAddrs := w.ListenAddresses() - diff := false - if len(addrs) != len(newAddrs) { - diff = true - } else { - for i := range newAddrs { - if addrs[i].String() != newAddrs[i].String() { - diff = true - break - } - } - } - if diff { - addrs = newAddrs + newAddrs := utils.MultiAddrSet(w.ListenAddresses()...) + if !maps.Equal(addrsSet, newAddrs) { + addrsSet = newAddrs + addrs := maps.Keys(addrsSet) w.log.Info("listening addresses update received", logging.MultiAddrs("multiaddr", addrs...)) err := w.setupENR(ctx, addrs) if err != nil { @@ -889,7 +882,6 @@ func (w *WakuNode) findRelayNodes(ctx context.Context) { } // Shuffle peers - rand.Seed(time.Now().UnixNano()) rand.Shuffle(len(peers), func(i, j int) { peers[i], peers[j] = peers[j], peers[i] }) for _, p := range peers { diff --git a/waku/v2/payload/waku_payload.go b/waku/v2/payload/waku_payload.go index f8a00fa3..8792cb79 100644 --- a/waku/v2/payload/waku_payload.go +++ b/waku/v2/payload/waku_payload.go @@ -7,7 +7,6 @@ import ( crand "crypto/rand" "encoding/binary" "fmt" - mrand "math/rand" "errors" "strconv" @@ -282,7 +281,7 @@ func generateSecureRandomData(length int) ([]byte, error) { } else if !validateDataIntegrity(x, length) { return nil, errors.New("crypto/rand failed to generate secure random data") } - _, err = mrand.Read(y) + _, err = crand.Read(y) if err != nil { return nil, err } else if !validateDataIntegrity(y, length) { diff --git a/waku/v2/payload/waku_payload_crypto_test.go b/waku/v2/payload/waku_payload_crypto_test.go index b27310d3..bac22932 100644 --- a/waku/v2/payload/waku_payload_crypto_test.go +++ b/waku/v2/payload/waku_payload_crypto_test.go @@ -3,6 +3,7 @@ package payload import ( "crypto/aes" "crypto/cipher" + crand "crypto/rand" mrand "math/rand" "testing" @@ -84,7 +85,7 @@ func singlePaddingTest(t *testing.T, padSize int) { Key: keyInfo, } - _, err = mrand.Read(p.Padding) // nolint: gosec + _, err = crand.Read(p.Padding) // nolint: gosec require.NoError(t, err) encodedPayload, err := p.Encode(1) diff --git a/waku/v2/protocol/enr/localnode.go b/waku/v2/protocol/enr/localnode.go index ded9bedc..08f98c3d 100644 --- a/waku/v2/protocol/enr/localnode.go +++ b/waku/v2/protocol/enr/localnode.go @@ -7,7 +7,6 @@ import ( "math" "math/rand" "net" - "time" "github.com/ethereum/go-ethereum/p2p/enode" "github.com/ethereum/go-ethereum/p2p/enr" @@ -28,7 +27,6 @@ func WithMultiaddress(multiaddrs ...multiaddr.Multiaddr) ENROption { return func(localnode *enode.LocalNode) (err error) { // Randomly shuffle multiaddresses - rand.Seed(time.Now().UnixNano()) rand.Shuffle(len(multiaddrs), func(i, j int) { multiaddrs[i], multiaddrs[j] = multiaddrs[j], multiaddrs[i] }) // Adding extra multiaddresses. Should probably not exceed the enr max size of 300bytes diff --git a/waku/v2/utils/multiaddr.go b/waku/v2/utils/multiaddr.go index e6e0d7d6..ef09e64e 100644 --- a/waku/v2/utils/multiaddr.go +++ b/waku/v2/utils/multiaddr.go @@ -16,3 +16,11 @@ func EncapsulatePeerID(peerID peer.ID, addrs ...multiaddr.Multiaddr) []multiaddr } return result } + +func MultiAddrSet(addr ...multiaddr.Multiaddr) map[multiaddr.Multiaddr]struct{} { + r := make(map[multiaddr.Multiaddr]struct{}) + for _, a := range addr { + r[a] = struct{}{} + } + return r +}