Releases: waku-org/go-waku
Releases · waku-org/go-waku
v0.9.0
What's New?
- Autosharding support has been added to Filter and Store protocols
- Improved peer management, taking into account sharding, and adding on demand discovery
- New Lightpush protocol REST API
- New Admin REST API
- New REST API for sharding for Relay protocol
- Exit code 166 is returned for non-recoverable errors
- Lower gossipsub dhigh to limit amplification factor
Breaking Changes:
- c-bindings receive an
userdata
parameter which is used to assign the result of the function execution --store-message-db-vacuum
flag was removed.VACUUM
should be executed manually as it is no longer part of the code of go-waku
List of changes
- feat(CommonService): add channel and use commonService in discv5 by @harsh-98 in #735
- fix: change mutex to rwLock and fix relay unsubscribe by @chaitanyaprem in #749
- fix: nix build with RLN by @richard-ramos in #747
- feat: use CommonService in peerConnector by @harsh-98 in #737
- feat : handle dynamic peer topic sub unsub by @chaitanyaprem in #751
- test(store): make queries by @harsh-98 in #752
- feat: topic refactors for filter client by @vitvly in #750
- chore: create workflow for automatic assignment of a PR to its creator by @chair28980 in #754
- feat(autoshard): filter by @chaitanyaprem in #723
- feat: force unreachability by @richard-ramos in #753
- chore(ci): use wakuorg Docker Hub organization by @jakubgs in #757
- chore(ci): drop pushing commit tags for Docker by @jakubgs in #758
- fix: panic when removing pubsub topic by @richard-ramos in #759
- fix:
/health
REST API panic by @chaitanyaprem in #763 - chore: update auto assign pr gh command by @chair28980 in #761
- fix: panic during removePubSubTopic by @chaitanyaprem in #765
- chore(ci): use latest and stable Docker tags based on job name by @jakubgs in #767
- fix: deleting pubsub topics; only allow adding unique topics by @vitvly in #766
- refactor: allow multiple subs for same (peer, contentFilter) pairs by @vitvly in #762
- fix(filter2): add requestID to pings and remove unneeded log by @richard-ramos in #776
- feat: Sharded peer management - Relay by @chaitanyaprem in #764
- chore: update wakuv2 fleet DNS discovery enrtree by @yakimant in #775
- feat: force reachability by @richard-ramos in #778
- chore: test cov improvement by @chaitanyaprem in #784
- feat: update lightpush API for autosharding by @chaitanyaprem in #774
- fix: use https for cloning submodules instead of ssh by @richard-ramos in #780
- test: container image workflow by @romanzac in #792
- fix: return errors in FilterSubscribeOption by @richard-ramos in #794
- fix: SignalHandler not exported in mobile package by @richard-ramos in #793
- fix(store): query time comparison and max rows per page by @richard-ramos in #800
- chore: postgres tests by @harsh-98 in #760
- feat: update peer selection options for light protocols by @chaitanyaprem in #787
- fix: add ws to enr by @richard-ramos in #768
- fix: addr update by @richard-ramos in #806
- fix: auto assign PR by @richard-ramos in #809
- fix: setFallbackIP with reported libp2p addr by @richard-ramos in #808
- fix: handle empty content topics in filter subcribe and unsubscribe by @chaitanyaprem in #812
- chore: return custom exit code for non recoverable errors by @richard-ramos in #817
- feat : autoshard relay api by @chaitanyaprem in #807
- fix: msg digest matches msg hash by @richard-ramos in #820
- chore: auto-assign PR for review of code owners by @chaitanyaprem in #821
- feat: metadata protocol by @richard-ramos in #805
- feat : new relay REST API for autosharding by @chaitanyaprem in #822
- feat: REST light push by @harsh-98 in #818
- feat: implement admin rest api by @chaitanyaprem in #827
- fix: do not disconnect peers in
TestWakuMetadataRequest
by @richard-ramos in #826 - fix: propagate relay subscribe opt properly by @chaitanyaprem in #829
- fix: stream close/reset by @richard-ramos in #823
- fix: modify store test to not depend on order of msgs by @chaitanyaprem in #832
- refactor: validate protobuffer for filter by @richard-ramos in #833
- fix(filter-subscribe): params.selectedPeer not set by @harsh-98 in #836
- fix: deadlock in peer connector / manager interaction by @richard-ramos in #837
- feat: add filter v2 rpc by @harsh-98 in #798
- refactor(c-bindings): userdata by @richard-ramos in #785
- chore: print a message periodically indicating that
VACUUM
is still being executed by @richard-ramos in #838 - feat: remove named topic by @harsh-98 in #844
- refactor: publish API for relay and lightpush by @richard-ramos in #845
- refactor: validate protobuffer for store by @richard-ramos in #841
- feat: add warning about bootnodes not supporting shards by @richard-ramos in #848
- refactor: fix nomenclature for shards by @richard-ramos in #849
- chore: lower dhi to limit amplification factor by @richard-ramos in #850
- chore: filter v2 tests unsubscribe by @romanzac in #855
- feat: dont' filter out bootnodes by @richard-ramos in #860
- feat: bridge relay topics by @richard-ramos in #854
- refactor: only log errors different from
ErrNoPeersAvailable
when selecting random peers. by @richard-ramos in #864 - fix(subscription-map): uniform operations and encapsulation by @harsh-98 in #853
- feat(rest-filterv2): get message by @harsh-98 in #856
- fix: decode url param in relay rest API by @chaitanyaprem in #862
- feat(discv5): filter out nodes that have empty waku capabilities by @chaitanyaprem in #865
- chore: update relay REST and RPC API's and fix unit tests by @chaitanyaprem in #866
- feat: on Demand Peer Discovery based on shard and service by @chaitanyaprem in #834
- chore: use waku-org/waku-proto repository for protobuffer definitions by @richard-ramos in #828
- chore: filter v2 tests unsubscribe all by @romanzac in #875
- fix: content topic validation as per rfc 51 by @chaitanyaprem in #874
- fix : issues with get messages API by @chaitanyaprem in #878
- chore: semantic PR linter by @richard-ramos in #882
- fix: noisy peer exchange log by @richard-ramos in #881
- fix:
WakuMessage
json encoding by @richard-ramos in #880 - fix(ci): keep Image tag param value from last run by @jakubgs in #889
- chore: remove
--store-message-db-vacuum
by @richard-ramos in #883 - fix: panic if it is not possible to obtain the merkle root by @richard-ramos in #873
- chore: add test utils string generators by @romanzac in #879
- fix: execution logic for default topic validators in WakuRelay by @hishboy in #887
- chore: add messages logging subsystem by @vitvly in #886
- chore: conv...
v0.8.0
New features
- RLN is available in service nodes and libraries by default
- Improved peer management and connection prunning with relay
- Added flag
--max-connections
to limit maximum number of peers allowed --pubsub-topic
will automatically subscribe the node to a shard- Added filter functions for DiscoveryV5
- Core autosharding logic
- Added /health endpoint to REST server
- Upgraded to zerokit 0.3.4
- Updated docs and docker image
- Added websockets support to C-Bindings
- Added prometheus metrics to RLN-Relay
- Updated go-libp2p to v0.28.1 and other dependencies
- Common protocol design
- Log node reachability changes
- Use
pgx
instead oflib/pq
as the latter is deprecated - Added an example on the usage of RLN
- Added new flags
--store-message-db-vacuum
and--store-message-db-migrate
to execute VACUUM in the database, and disable database migrations - If only one key is available in the keystore, it will be loaded automatically
- RLN Relay does not require credentials for relaying messages
- Use waku's RLN Registry contract for membership verification
- Persist RLN membership and valid merkle roots into a DB
- Added
--pubsub-topic
and--content-topic
flags for autosharding - Add
tls/ws
to list of multiaddresses when using secure websockets - Append RLN proofs when posting messages in REST/RPC
- Added utils to have a backoff strategy for connecting to rendezvous points
- Exposed go-libp2p metrics
- New subcommand to generate RLN credentials:
waku generate-rln-credentials
- Store pubsubTopics supported by a peer into the peer store
- Peer connector will keep slots to allow connections to service nodes
Fixes
- Possible data races in the code
- Optimized the fetching of membership events from the RLN smart contract
- RLN Validators are executed sequentially
- Compilation issues in examples
- Invalid protocol list order in gossipsub
- Peerstore DNS4 addresses are added back to the peerstore after being removed from go-libp2p identify
- Peer connector will concurrently dial up to 5 nodes at a time
- Increased CodeClimate maintainability score to A
- Allow using both static and named shards at the same time
- KeepAlive will not disconnect all peers but only if there's a failure when pinging them
- Log output and encoding flags are no longer ignored
- Obtain circuit relay multiaddresses from ENR
- Duplication of messages within same epoch was incorrect
requestID
not being populated when unsubscribing from filter- Thread safe peer channel in DiscoveryV5
- Nil err while removing a filter subscription
- Make FilterV2 safe for usage in goroutines
- Sync RLN membership events from block on which the contract was deployed
- Confirm RLN credential is valid via onchain query
- Loop counter used to write multiaddresses into node's ENR
- Clean up RLN nullifier table periodically
- Log ENR only after it has been setup
- Invalid protobuffer definition being used in FilterV2
- RLN database will verify the chainID and contract address
- FilterV2 will unsubscribe from all peers unless an specific peer is set
Breaking changes
- C-Bindings use callbacks to handle both success and error responses
- Rendezvous operations are now initiated by the application layer and not by go-waku itself
- Updated
--topics
flag to --pubsub-topic` - RLN is applied to all pubsub topics and content topics
- Upgrade RLN Keystore data format
- Moved
--generate-key
to agenerate-key
subcommand - Removed
waku_relay_publish_enc_asymmetric
,waku_relay_publish_enc_symmetric
,waku_lightpush_publish_enc_asymmetric
andwaku_lightpush_publish_enc_symmetric
from C-Bindings and replaced these bywaku_encode_symmetric
andwaku_encode_asymmetric
- Renamed
nwaku-rln-relay
towaku-rln-relay
in RLN keystore
v0.7.0
Full Changelog: v0.6.0...v0.7.0
New features
- New flags
--resource-scaling-memory-percentage
and--resource-scaling-file-descriptors-percentage
available to setup the percentage of total accessible memory and total file descriptors for go-waku --ext-ip
and--dns4-domain-name
flags can be used at the same time to define additional multiaddresses- Support for GossipSub scoring parameters added to WakuRelay
- Limit inbound connections to 10 connections per IP
- Store peer's ENR and origin (DiscV5, DNSDiscovery, PeerExchange, Rendezvous) into peer store
- Added FilterV2 functions to c-bindings
waku_discv5_update_bootnodes
is available in the c-bindings to update the DiscoveryV5 bootnodes- Added functions to find peers in a shard, and peers using a predicate in DiscoveryV5
- New utils functions to setup the relay shard fields in a node's ENR
Fixes:
- Dead loop after calling
WakuNode.Stop()
- Updated rendezvous to latest spec to achieve interop with
nwaku
- Handle IPv6 addresses correctly
IsOnline
will take into account when the node only is running light protocols- Use nanoseconds instead of seconds in c-bindings example
Code changes
- Update protobuf and libp2p dependencies
- Remove unneeded
Connect
as dns4 addresses are being resolved automatically by libp2p
Breaking changes:
- FilterV1 functions in c-bindings were renamed from
waku_filter_
towaku_legacy_filter_
v0.6.0
New features
- DoS protected topics are available by using relay.AddSignedTopicValidator and
relay.SignMessage
functions - Added webtransport to the list of available transports
- Update go-libp2p and go-libp2p-pubsub to fix memory leak
- Added
seenMessagesTTLSeconds
to gossipsub parameters in c-bindings - Added
waku_relay_topics
to c-bindings to get the list of subscribed pubsub topics - Go-waku can now act as a libp2p rendezvous client
- Circuit relay and hole punching is available in service node
- Nix can be used to build go-waku
- Added store protocol to REST server
--ext-ip
can be used to setup a custom IP address- Added the
WithConnectionNotification
option to register a channel in which peer connections / disconnections are pushed - New utils for handling shards and building ENRs
- Added new metrics to protocols
- Update RLN logic to match nwaku
Fixes:
- Node private key can be set via
GOWAKU_NODEKEY
environment variable - The number of content topics in filter protocol was limited to 10, and a timeout was added to message push
- Filter protocol will ignore messages received if they were sent by a node we are not subscribed to
- Handle chain forks in RLN
- Handle max number of smart contract logs exceeded when retrieving the full membership history from the RLN contract
- Fixed an issue that occurred when shutting down the node while attempting to connect to a discovered peer
- In c-bindings, removing a duplicated filter will not crash
- Only the last discovered nodes was being set while using DNS discovery.
Code changes
- Broadcaster was completely revamped and it is now initialized when the node is started
- Host is injected in the Waku Node when it is started (previously it was done as soon as a node was created)
- Peer Exchange's peer cache uses an LRU for storing peers
- Discv5 is now lock free
Breaking changes:
- Swap protocol was removed
- Renamed
Filter
protocol toLegacyFilter
, andFilterV2
toFilter
v0.5.2
What's Changed
- fix: set a max length for the multiaddr field by @richard-ramos in #474
- fix: use stdbase64 encoding by @richard-ramos in #473
- refactor(px): use request-response instead of dialing back by @richard-ramos in #476
- chore: use base64 url safe encoding for noise by @richard-ramos in #464
- fix: logLevel by @richard-ramos in #475
- fix: deps by @richard-ramos in #478
- fix: use sync.Pool for msgId hasher by @richard-ramos in #479
- fix: use pool for all sha256 hash operations by @richard-ramos in #480
- feat: add meta field to WakuMessage by @richard-ramos in #477
- nix: add Nix flake to build node and library by @jakubgs in #483
- nix: fix nix run by setting mainProgram to waku by @jakubgs in #484
- feat(message): added waku message deterministic hashing by @richard-ramos in #482
- refactor: namespaced pubsub topics by @richard-ramos in #485
- fix: limit number of subscribers and criteria by @richard-ramos in #481
- feat(filterv2): ping by @richard-ramos in #486
- feat: rendezvous server by @richard-ramos in #487
- feat(c-bindings): custom gossipsub params by @richard-ramos in #489
Full Changelog: v0.5.1...v0.5.2
v0.5.1
What's Changed
- fix(c-bindings): relayTopics should trigger signal handler by @richard-ramos in #461
- fix(c-bindings): check if ENR is nil by @richard-ramos in #462
- fix: noise example by @richard-ramos in #463
- fix: run instructions in NOISE by @richard-ramos in #465
- fix: protocolID must be a string in the mobile API by @richard-ramos in #466
Full Changelog: v0.5.0...v0.5.1
v0.5.0
What's Changed
- Circuit relay information is added to the node's ENR so nodes behind a router with no NAT can still be discovered by hole punching
- More than one custom multiaddress can be advertised with the flag
--ext-multiaddr
- Experimental implementation of the improved filter protocol specifications is available with
--use-filterv2
flag and also throughnode.WithWakuFilterV2FullNode()
andnode.WithWakuFilterV2LightNode()
options when instantiating waku - C-Bindings:
- Nodes can act now as storenodes by specifying this in the node configuration
- Breaking Change: DNSDiscovery will now return the ENR and PeerID along with the Multiaddresses obtained from an enr tree URL. This ENR can be used to obtain the ENRs necessary to setup the bootnodes for DiscV5
- Breaking Change: The node will not automatically subscribe to the default waku topic
- Breaking change: The JSON RPC API now expects byte arrays to be encoded as base64url strings instead of hexadecimal strings or int arrays
- All dependencies were upgraded
Full Changelog: v0.4.0...v0.5.0
v0.4.0
What's Changed
- PostgreSQL support
- Added support to load configuration from toml files or environment variables
- Improved result iterator for simpler retrieval of messages from storenodes
- Refactor: peer discovery management and discv5
- Empty responses from a storenode will not generate an error
- Updating the localnode ENR when the node multiaddresses change no longer requires restarting discv5
Full Changelog: v0.3.1...v0.4.0
v0.3.1
What's Changed
- fix: start rpc/rest with no relay
- fix: enable store only when
WithWakuStore
is used
Full Changelog: v0.3.0...v0.3.1
v0.3.0
What's Changed
New features
- Implementation of the following Waku v2 protocols
- Created indexes to
message
table to speedup queries - zerokit is used for RLN
- Allow multiple acceptable merkletree roots to validate RLN proofs
- Credentials management for wakunode and chat2 example
- Lightpush can be used as a client (no need for the Wakunode to mount the Lightpush protocol)
- Allow setting log level and format via flags
- Added DNS Discovery and DiscoveryV5 to C API
- Allow setting the user agent of the WakuNode with
--agent-string
flag - Added
Find
function to retrieve a message from a storenode that matches a criteria - A list of
peerID
to chose can be specified when doing storenode/filter/lightpush/peerexchange requests - Added NTP
Timesource
to obtain the current timestamp - The
--store-message-db-url
flag can be used to specify a database and configuration parameters - Using the
--pprof
flag adds a/debug/pprof
endpoint to the RPC/REST server to obtain profiling data
Fixes
- Update WakuNode ENR if there's an update in the node's listening addresses
- C API can now be compiled in macos M1 architecture
- Setting correct message version while using RPC methods
- Separate error and success responses as per the specification
- Use
mobile.connectPeerID
inconnect_peerid
in c-bindings - Fix symmetric encoding, signatures and pubkeys in c-bindings
- Upgrade dependencies to more recent versions
- Reduce memory usage of RPC server
- Resubscribe to Ethereum websocket connection on disconnects
- Set the TLS minimum version to 1.2 when using secure websockets
- Handle missing
PagingInfo
in a storenode response - Force disconnect if keepAlive loop hasnt been executed recently
- Allow inserting messages into the DB if the sender timestamp is 0
General
- Use of
context.Context
instead ofquit
channels - Execute DiscoveryV5 loop as a separate goroutine
Breaking changes
- Updated store and RLN flags to match nwaku
- Removed --persist-messages. If
--store
is used, tmessages will be persisted - Removed go-waku-rendezvous
- Limited the number of ContentTopics per storenode request to 10
- Refactor of store protocol logic
- Moved
noise
toprotocol
package - Moved payload encoding/decoding functions to
payload
package - Extracted
noise
logic to [go-noise](https://github.com/waku-org/go-noise
Full Changelog: v0.2.2...v0.3.0