nwaku/CHANGELOG.md

80 KiB

2023-07-26 v0.19.0

What's Changed

Release highlights:

  • Improved connection management, including management for non-relay peers and limiting the number of connections from a single IP
  • Postgres support has been added as a backend for archive module
  • RLN initialization optimizations
  • Update to the latest nim-libp2p

Features

Bug Fixes

  • libp2p: Updating nim-libp2p to fix the wss connectivity issue (#1848) (1d3410c7)
  • rln-relay: chunk event fetching (#1830) (e4d9ee1f)
  • discv5: Fixing issue that prevented the wakunode2 from starting (#1829) (3aefade6)
  • sanity-check the docker image start (ae05f0a8)
  • ci: fix broken test with wrong import (#1820) (4573e8c5)
  • temporary fix to disable default experimental builds on fleets (#1810) (e9028618)
  • rln-relay: tree race condition upon initialization (#1807) (f8e270fb)
  • fix mac docker build alpine version (#1801) (fce845bb)
  • rln-relay: flaky static group manager test (#1798) (0e9ecbd6)

Changes

This release supports the following libp2p protocols:

Protocol Spec status Protocol id
11/WAKU2-RELAY stable /vac/waku/relay/2.0.0
12/WAKU2-FILTER draft /vac/waku/filter/2.0.0-beta1
/vac/waku/filter-subscribe/2.0.0-beta1
/vac/waku/filter-push/2.0.0-beta1
13/WAKU2-STORE draft /vac/waku/store/2.0.0-beta4
19/WAKU2-LIGHTPUSH draft /vac/waku/lightpush/2.0.0-beta1

The Waku v1 implementation is stable but not under active development.

2023-06-14 v0.18.0

Note that there is a new naming scheme for release artifacts.

What's Changed

Release highlights:

  • Support for Gossipsub scoring
  • Rendezvous discovery protocol enabled by default with relay
  • Initial support for postgresql as Store backend
  • Atomic operations for insertions and deletions included in rln-relay

Features

  • postgres: complete implementation of driver and apply more tests (#1785) (5fc5770d)
  • postgres: adding a postgres async pool to make the db interactions asynchronous (#1779) (cb2e3d86)
  • rln-relay: pass in index to keystore credentials (#1777) (a00aa8cc)
  • networking: integrate gossipsub scoring (#1769) (34a92631)
  • discv5: added find random nodes with predicate (#1762) (#1763) (21737c7c)
  • wakunode2: enable libp2p rendezvous protocol by default (#1770) (835a409d)
  • postgresql: align previous work's PR#1590 changes into master (#1764) (7df6f4c8)
  • networking: prune peers from same ip beyond collocation limit (#1765) (047d1cf0)
  • ci: add nightly builds (#1758) (473af70a)
  • postgresql: 1st commit to async sql (waku_archive/driver...) (#1755) (59ca03a8)
  • ci: add release-notes target (#1734) (ceb54b18)
  • rln-relay: use new atomic_operation ffi api (#1733) (611e9539)

Bug Fixes

Changes

This release supports the following libp2p protocols:

Protocol Spec status Protocol id
11/WAKU2-RELAY stable /vac/waku/relay/2.0.0
12/WAKU2-FILTER draft /vac/waku/filter/2.0.0-beta1
/vac/waku/filter-subscribe/2.0.0-beta1
/vac/waku/filter-push/2.0.0-beta1
13/WAKU2-STORE draft /vac/waku/store/2.0.0-beta4
19/WAKU2-LIGHTPUSH draft /vac/waku/lightpush/2.0.0-beta1

The Waku v1 implementation is stable but not under active development.

Upgrade instructions

There is a new naming scheme for release artifacts - nwaku-${ARCHITECTURE}-${OS}-${VERSION}.tar.gz. If you use any automation to download latest release, you may need to update it.

The --topics config option has been deprecated to unify the configuration style. It is still available in this release but will be removed in the next one. The new option --topic is introduced, which can be used repeatedly to achieve the same behavior.

2023-05-17 v0.17.0

Note that the --topics config item has been deprecated and support will be dropped in future releases. To configure support for multiple pubsub topics, use the new --topic parameter repeatedly.

What's Changed

Release highlights:

  • New REST API for Waku Store protocol.
  • New Filter protocol implentation. See 12/WAKU2-FILTER.
  • Initial C bindings support.
  • Support for Heaptrack to investigate memory utilization (tutorial).

Features

  • cbindings: first commit - waku relay (#1632) (#1714) (2defbd23)
  • example using filter and lightpush (#1720) (8987d4a3)
  • configure protected topics via cli (#1696) (16b44523)
  • mem-analysis: Adding Dockerfile_with_heaptrack (#1681) (9b9172ab)
  • add metrics with msg size histogram (#1697) (67e96ba8)
  • curate peers shared over px protocol (#1671) (14305c61)
  • enr: added support for relay shards field (96162536)
  • add tools maket target and build tools in CI (#1668) (d5979e94)
  • integrate new filter protocol, other improvements (#1637) (418efca2)
  • rest-api-store: new rest api to retrieve store waku messages (#1611) (#1630) (b2acb54d)
  • node: added waku node builder type (e931fa5d)
  • dos protected topic relay msgs based on meta field (#1614) (c26dcb2b)
  • further filter improvements (#1617) (d920b973)
  • common: added extensible implementation of the enr typed record (ac56e1dc)
  • rln-relay: fetch release from zerokit ci, or build (#1603) (179be681)
  • filter-v2: new filter protocol increment - message handling and clients (#1600) (be446b98)

Fixes

Changes

  • ci: cache all of submodules/deps to speed up build time (#1731) (4394c69d)
  • rln-relay: update args to contract (#1724) (b277ce10)
  • rln-relay: use new config for ffi (#1718) (44c54312)
  • adding new tutorial on how to handle heaptrack with nim waku (#1719) (4b59e472)
  • add timestamp and ephemeral for opt-in dos validator (#1713) (3e0a693d)
  • add test vectors dos protection validator (#1711) (eaa162ee)
  • add validator for dos protec metrics and move to app (#1704) (3e146869)
  • use QUICK_AND_DIRTY_COMPILER flag for CI (#1708) (21510425)
  • move networkmonitor and wakucanary to apps directory (209579b0)
  • wakunode2: flatten and simplify app setup (#1705) (ce92fc1a)
  • wakunode2: split setup logic into app module (c8081c88)
  • add payload bytes to trace log (#1703) (c6d291d3)
  • refactor flaky test with while (#1698) (dca0e9b2)
  • core: move peers utils module to waku_core (e041e043)
  • decouple test2 target from testcommon (91baa232)
  • core: move utils time module to waku_core (93b0c071)
  • add deprecation notice to utils module. move heartbeat to common (e8dceb2a)
  • core: rename waku_message module to waku_core (c9b6b230)
  • flatten waku v2 protocols folder (d7b72ac7)
  • fix test failing intermittently (#1679) (8d213e85)
  • networking: get relay number of connections from protocol conns/streams (#1609) (73cbafa6)
  • allow to call store api endpoints without a storenode (#1575) (#1647) (0b4a2e68)
  • bump container image versions to v0.16.0 in quickstart (#1640) (5c33d9d1)
  • node: remove deprecated constructor and extend testlib with builder (9dadc1f5)
  • do not mount relay more than once (#1650) (5d853b86)
  • pointed all waku node imports to the barrel import (e8448dfd)
  • node: added waku_node barrel import and split config module (13942888)
  • remove deprecated enr record init method (0627b4f8)
  • deps: upgrade nim-chronos and nim-presto to latest version (7c229ece)
  • remove waku swap protocol (2b5fd2a2)
  • deps: upgrade nim-confutils to latest version (67fa736d)
  • rln-relay: gracefully handle chain forks (#1623) (00a3812b)
  • bump nim-libp2p 53b060f (#1633) (11ff93c2)
  • added testcommon target to makefile (048ca45d)
  • increase meta size to 64 bytes + tests (#1629) (1f793756)
  • enr: move waku enr multiaddr to typedrecord and builder extensions (2ffd2f80)
  • enr: added waku2 capabilities accessor (157724d9)
  • rln-relay: reduce exports (#1615) (2f3ba3d6)
  • add dash between target and version (#1613) (24d62791)
  • release: added regression checking and clarifications (#1610) (b495dd7b)

This release supports the following libp2p protocols:

Protocol Spec status Protocol id
11/WAKU2-RELAY stable /vac/waku/relay/2.0.0
12/WAKU2-FILTER draft /vac/waku/filter/2.0.0-beta1
/vac/waku/filter-subscribe/2.0.0-beta1
/vac/waku/filter-push/2.0.0-beta1
13/WAKU2-STORE draft /vac/waku/store/2.0.0-beta4
19/WAKU2-LIGHTPUSH draft /vac/waku/lightpush/2.0.0-beta1

The Waku v1 implementation is stable but not under active development.

Upgrade instructions

  • The --topics config option has been deprecated to unify the configuration style. It still available in this and will be in next release, but will be removed after that. The new option --topic is introduced, which can be use repeatedly to achieve the same behaviour.

2023-03-15 v0.16.0

What's Changed

Release highlights:

  • a fix for an issue that prevented the node from generating high-resolution (up to nanosecond) timestamps
  • introduction of an application-defined meta attribute to the Waku Message. This can be quite valuable for network-wide deduplication, deterministic hashing, validity checking and other planned improvements to the protocol
  • many optimizations in RLN implementation and its underlying dependencies

Features

  • Integrated a new group manager for RLN-protected relay 1496
  • Added application-defined meta attribute to Waku Message according to RFC 14/WAKU2-MESSAGE 1581
  • Implemented deterministic hashing scheme for Waku Messages according to RFC 14/WAKU2-MESSAGE 1586

Changes

  • Upgraded nim-sqlite3-abi to the latest version 1565
  • Better validation of protocol buffers 1563
  • Improved underlying Zerokit performance and FFI 1571
  • Node peer ID now logged with relay trace logging 1574
  • Continued refactoring of several protocol implementations to improve maintainability and readability
  • Refactored and cleaned up peer manager 1539
  • Removed unused and legacy websocket submodule 1580 1582
  • Use base64 URL-safe encoding for noise 1569
  • Various general improvements to RLN implementation 1585 1587
  • Started on implementation for new and improved filter protocol 1584
  • Updated pubsub and content topic namespacing to reflect latest changes in RFC 23/WAKU2-TOPICS 1589
  • Unified internal peer data models 1597
  • Improved internal implementation of Waku ENR encoding and decoding 1598 1599
  • Underlying dependency for RLN implementation now loaded as a static library 1578

Fixes

  • Fixed internally generated timestamps to allow higher resolution than seconds 1570
  • Fixed padded base64 usage for encoding and decoding payloads on the JSON RPC API 1572
  • Fixed incorrect relative module imports 1591
  • Fixed RLN relay erroneously storing messages from multiple apps 1594

This release supports the following libp2p protocols:

Protocol Spec status Protocol id
11/WAKU2-RELAY stable /vac/waku/relay/2.0.0
12/WAKU2-FILTER draft /vac/waku/filter/2.0.0-beta1
13/WAKU2-STORE draft /vac/waku/store/2.0.0-beta4
18/WAKU2-SWAP draft /vac/waku/swap/2.0.0-beta1
19/WAKU2-LIGHTPUSH draft /vac/waku/lightpush/2.0.0-beta1

The Waku v1 implementation is stable but not under active development.

2023-02-15 v0.15.0

Release highlights:

  • Relay connectivity is now maintained by a management loop that selects from the peerstore
  • Ability to manually specify multiaddrs for the nwaku node to advertise
  • Two important fixes related to historical message queries:
    • fixed archive bug that resulted in duplicate messages in store query response
    • fixed query page size limit not being respected

Features

  • New connectivity loop to maintain relay connectivity from peerstore 1482 1462
  • Support for manually specifying multiaddrs to advertise 1509 1512
  • Added dynamic keystore for membership credential storage and management 1466

Changes

  • Abstracted RLN relay group management into its own API 1465
  • Prune peers from peerstore when exceeding capacity 1513
  • Removed Kilic submodule 1517
  • Continued refactoring of several protocol implementations to improve maintainability and readability
  • Refactored and improved JSON RPC API
  • Added safe default values for peer-store-capacity 1525
  • Improvements in regular CI test reliability and repeatability
  • Improved archive query performance 1510
  • Added better e2e trace logging for relay messages 1526
  • Relay RPC API now encodes message payloads in base64 572 1555

Fixes

  • Fixed Waku archive queries returning duplicate messages due to incorrect reordering 1511
  • Fixed Admin RPC API crashing on returning peer with no multiaddresses 1507
  • Fixed page size limit not being respected in store query responses 1520
  • Fixed nwaku subscribing to default pubsub topic even if not configured 1548
  • Fixed underlying issue causing node to incorrectly report it's unreachable 1518 1546
  • Fixed Relay RPC API not adhering to RFC 1139
  • Fixed message IDs in nwaku diverging from those in go-waku 1556

This release supports the following libp2p protocols:

Protocol Spec status Protocol id
11/WAKU2-RELAY stable /vac/waku/relay/2.0.0
12/WAKU2-FILTER draft /vac/waku/filter/2.0.0-beta1
13/WAKU2-STORE draft /vac/waku/store/2.0.0-beta4
18/WAKU2-SWAP draft /vac/waku/swap/2.0.0-beta1
19/WAKU2-LIGHTPUSH draft /vac/waku/lightpush/2.0.0-beta1

The Waku v1 implementation is stable but not under active development.

2023-01-16 v0.14.0

Release highlights:

  • An important fix for the Waku message archive returning inconsistent responses to history queries.
  • Support for AutoNAT and libp2p Circuit Relay that allows, among other things, for NAT hole punching.
  • Support for structured logging in JSON format.
  • A fix for an underlying file descriptor leak that affected websocket connections.

Features

  • Support for AutoNAT
  • Support for libp2p Circuit Relay (server only)
  • New Waku Archive implementation. This allows easy addition of drivers for different technologies to store historical messages.
  • Support for structured logging and specifying log format.
  • Node now keeps track of its external reachability.

Changes

  • Zerokit RLN library now statically linked.
  • Use extended key generation in Zerokit API to comply with 32/RLN.
  • Re-enable root validation in 17/WAKU-RLN-RELAY implementation.
  • Network monitoring tool now supports DNS discovery.
  • Added dashboard for network monitoring.
  • Continued refactoring of several protocol implementations to improve maintainability and readability.
  • Removed swap integration from store protocol.
  • Peerstore now consolidated with libp2p peerstore.
  • Peerstore now also tracks peer direction.
  • SIGSEGV signals are now handled and logged properly.
  • Waku v2 no longer imports libraries from Waku v1.
  • Improved build and CI processes:
    • Added support for an EXPERIMENTAL compiler flag.
    • Simplified project Makefile.
    • Split Dockerfile into production and experimental stages.
    • Removed obsolete simulation libraries from build.
  • Improved parallellisation (and therefore processing time) when dialing several peers simultaneously.
  • Waku Archive now responds with error to historical queries containing more than 10 content topics.

Fixes

  • Fixed support for optional fields in several protocol rpc codecs. #1393 #1395 #1396
  • Fixed clients with --store=false not installing Store Client JSON-RPC API handlers. #1382
  • Fixed SQLite driver returning inconsistent responses to store queries. #1415
  • Fixed peer exchange discv5 loop starting before discv5 has started. #1407
  • Fixed wakubridge test timing. #1429
  • Fixed bug in Noise module types equating T_ss incorrectly to "se" and not "ss". #1432
  • Fixed Ctrl-C quitting resulting in unreleased resources and exit failures. #1416
  • Fixed CI workflows not cloning repo on startup. #1454 #1455
  • Fixed Admin API peer connection not returning error response if peer can't be connected. #1476
  • Fixed underlying file descriptor leak. #1483

Docs

This release supports the following libp2p protocols:

Protocol Spec status Protocol id
11/WAKU2-RELAY stable /vac/waku/relay/2.0.0
12/WAKU2-FILTER draft /vac/waku/filter/2.0.0-beta1
13/WAKU2-STORE draft /vac/waku/store/2.0.0-beta4
18/WAKU2-SWAP draft /vac/waku/swap/2.0.0-beta1
19/WAKU2-LIGHTPUSH draft /vac/waku/lightpush/2.0.0-beta1

The Waku v1 implementation is stable but not under active development.

2022-11-15 v0.13.0

Release highlights:

  • A Waku canary tool to check if nodes are reachable and what protocols they support.
  • Simplified configuration for store protocol. This new guide explains how to configure store from this release forward.
  • Support for environment variables to configure a nwaku node. See our configuration guide for more.
  • A Waku network monitoring tool to report network metrics, including network size, discoverable peer capabilities and more.

Features

  • Added Waku canary tool to check if i) a given node is reachable and ii) it supports a set of protocols.
  • Simplified Waku store configuration.
  • Decoupled Waku peer persistence configuration from message store configuration.
  • Added keyfile support for secure storage of RLN credentials.
  • Added configurable libp2p agent string to nwaku switch.
  • Support for configuration with environment variables.
  • Added example module to showcase basic nwaku relay usage.
  • Added a nwaku network monitoring tool to provide metrics on peers, network size and more.

Changes

  • Removed support for Kilic's RLN library (obsolete).
  • Improved logging for 17/WAKU-RLN-RELAY implementation.
  • Connection to eth node for RLN now more stable, maintains state and logs failures.
  • Waku apps and tools now moved to their own subdirectory.
  • Continued refactoring of several protocol implementations to improve maintainability and readability.
  • Periodically log metrics when running RLN spam protection.
  • Added metrics dashboard for RLN spam protection.
  • Github CI test workflows are now run selectively, based on the content of a PR.
  • Improved reliability of CI runs and added email notifications.
  • Discv5 discovery loop now triggered to fill a 34/WAKU2-PEER-EXCHANGE peer list cache asynchronously.
  • Upgraded to Nim v1.6.6.
  • Cleaned up compiler warnings on unused imports.
  • Improved exception handling and annotation.
  • 13/WAKU2-STORE no longer enabled by default on nwaku nodes.
  • Merkle tree roots for RLN membership changes now on a per-block basis to allow poorly connected peers to operate within a window of acceptable roots.

Fixes

  • Fixed encoding of ID commitments for RLN from Big-Endian to Little-Endian. #1256
  • Fixed maxEpochGap to be the maximum allowed epoch gap (RLN). #1257
  • Fixed store cursors being retrieved incorrectly (truncated) from DB. #1263
  • Fixed message indexed by store cursor being excluded from history query results. #1263
  • Fixed log-level configuration being ignored by the nwaku node. #1272
  • Fixed incorrect error message when failing to set 34/WAKU2-PEER-EXCHANGE peer. #1298
  • Fixed and replaced deprecated TaintedString type. #1326
  • Fixed and replaced unreliable regex library and usage. #1327 #1328
  • Fixed and replaced deprecated ganache-cli node package with ganache for RLN onchain tests. Added graceful daemon termination. #1347

Docs

This release supports the following libp2p protocols:

Protocol Spec status Protocol id
11/WAKU2-RELAY stable /vac/waku/relay/2.0.0
12/WAKU2-FILTER draft /vac/waku/filter/2.0.0-beta1
13/WAKU2-STORE draft /vac/waku/store/2.0.0-beta4
18/WAKU2-SWAP draft /vac/waku/swap/2.0.0-beta1
19/WAKU2-LIGHTPUSH draft /vac/waku/lightpush/2.0.0-beta1

The Waku v1 implementation is stable but not under active development.

2022-10-06 v0.12.0

Release highlights:

  • The performance and stability of the message store has improved dramatically. Query durations, even for long-term stores, have improved by more than a factor of 10.
  • Support for Waku Peer Exchange - a discovery method for resource-restricted nodes.
  • Messages can now be marked as "ephemeral" to prevent them from being stored.
  • Zerokit is now the default implementation for spam-protected relay with RLN.

The full list of changes is below.

Features

Changes

  • 17/WAKU-RLN-RELAY implementation now handles on-chain transaction errors.
  • 17/WAKU-RLN-RELAY implementation now validates the Merkle tree root against a window of acceptable roots.
  • Added metrics for 17/WAKU-RLN-RELAY implementation.
  • Continued refactoring of several protocol implementations to improve maintainability and readability.
  • Cleaned up nwaku imports and dependencies.
  • Refactored and organised nwaku unit tests.
  • Nwaku now periodically logs node metrics by default.
  • Further improvements to the store implementation:
    • Better logging and query traceability.
    • More useful metrics to measure query and insertion time.
    • Reworked indexing for faster inserts and queries.
    • Reworked data model to use a simple, single timestamp for indexing, ordering and querying.
    • Improved retention policy management with periodic execution.
    • Run sqlite database vacuum at node start.
    • Improved logging when migrating the database to a newer version.
  • relay no longer auto-mounted on all nwaku nodes.
  • The most complete node ENR now included in response to API requests for node info().
  • Updated Grafana dashboards included with nwaku.
  • Github CI test execution now skipped for doc-only changes.

Fixes

  • Fixed nwaku unnecessary sleep when no dynamic bootstrap nodes retrieved.
  • Fixed 12/WAKU2-FILTER not working from browser-based clients due to nwaku peer manager failing to reuse existing connection.
  • Waku Message payload now correctly encoded as base64 in the Relay REST API.
  • Fixed handling of bindParam(uint32) in sqlite.
  • chat2 application now correctly selects a random store node on startup.
  • Fixed macos builds failing due to an unsupported dependency.
  • Fixed nwaku not reconnecting to previously discovered nodes after losing connection.
  • Fixed nwaku failing to start switch transports with external IP configuration.
  • Fixed SIGSEGV crash when attempting to start nwaku store without db-path configuration.

Docs

This release supports the following libp2p protocols:

Protocol Spec status Protocol id
11/WAKU2-RELAY stable /vac/waku/relay/2.0.0
12/WAKU2-FILTER draft /vac/waku/filter/2.0.0-beta1
13/WAKU2-STORE draft /vac/waku/store/2.0.0-beta4
18/WAKU2-SWAP draft /vac/waku/swap/2.0.0-beta1
19/WAKU2-LIGHTPUSH draft /vac/waku/lightpush/2.0.0-beta1

The Waku v1 implementation is stable but not under active development.

2022-08-15 v0.11

Release highlights:

  • Major improvements in the performance of historical message queries to longer-term, sqlite-only message stores.
  • Introduction of an HTTP REST API with basic functionality
  • On-chain RLN group management. This was also integrated into an example spam-protected chat application.

The full list of changes is below.

Features

  • Support for on-chain group membership management in the 17/WAKU-RLN-RELAY implementation.
  • Integrated HTTP REST API for external access to some wakunode2 functionality:
    • Debug REST API exposes debug information about a wakunode2.
    • Relay REST API allows basic pub/sub functionality according to 11/WAKU2-RELAY.
  • 35/WAKU2-NOISE implementation now adds padding to ChaChaPoly encryptions to increase security and reduce metadata leakage.

Changes

  • Significantly improved the SQLite-only historical message store query performance.
  • Refactored several protocol implementations to improve maintainability and readability.
  • Major code reorganization for the 13/WAKU2-STORE implementation to improve maintainability. This will also make the store extensible to support multiple implementations.
  • Disabled compiler log colors when running in a CI environment.
  • Refactored 35/WAKU2-NOISE implementation into smaller submodules.
  • 11/WAKU2-RELAY implementation can now optionally be compiled with Zerokit RLN. Previously only Kilic's RLN was supported.

Fixes

  • Fixed wire encoding of protocol buffers to use proto3.
  • Fixed Waku v1 <> Waku v2 bridge losing connection to statically configured v1 nodes.
  • Fixed underlying issue causing DNS discovery to fail for records containing multiple strings.

Docs

  • Updated release process documentation.
  • Added tutorial on how to run a spam-protected chat2 application with on-chain group management.

This release supports the following libp2p protocols:

Protocol Spec status Protocol id
11/WAKU2-RELAY stable /vac/waku/relay/2.0.0
12/WAKU2-FILTER draft /vac/waku/filter/2.0.0-beta1
13/WAKU2-STORE draft /vac/waku/store/2.0.0-beta4
18/WAKU2-SWAP draft /vac/waku/swap/2.0.0-beta1
19/WAKU2-LIGHTPUSH draft /vac/waku/lightpush/2.0.0-beta1

The Waku v1 implementation is stable but not under active development.

2022-06-15 v0.10

Release highlights:

  • Support for key exchange using Noise handshakes.
  • Support for a SQLite-only historical message store. This allows for cheaper, longer-term historical message storage on disk rather than in memory.
  • Several fixes for native WebSockets, including slow or hanging connections and connections dropping unexpectedly due to timeouts.
  • A fix for a memory leak in nodes running a local SQLite database.

Features

  • Support for 35/WAKU2-NOISE handshakes as key exchange protocols.
  • Support for TOML config files via --config-file=<path/to/config.toml>.
  • Support for --version command. This prints the current tagged version (or compiled commit hash, if not on a version).
  • Support for running store protocol from a filter client, storing only the filtered messages.
  • Start of an HTTP REST API implementation.
  • Support for a memory-efficient SQLite-only store configuration.

Changes

  • Added index on receiverTimestamp in the SQLite store to improve query performance.
  • GossipSub Peer Exchange is now disabled by default. This is a more secure option.
  • Progress towards dynamic group management for the 17/WAKU-RLN-RELAY implementation.
  • Nodes with --keep-alive enabled now sends more regular pings to keep connections more reliably alive.
  • Disabled swap protocol by default.
  • Reduced unnecessary and confusing logging, especially during startup.
  • Added discv5 UDP port to the node's main discoverable ENR.

Fixes

  • The in-memory store now checks the validity of message timestamps before storing.
  • Fixed underlying bug that caused connection leaks in the HTTP client.
  • Fixed Docker image compilation to use the correct external variable for compile-time flags (NIMFLAGS instead of NIM_PARAMS).
  • Fixed issue where --dns4-domain-name caused an unhandled exception if no external port was available.
  • Avoids unnecessarily calling DB migration if a --db-path is set but nothing is persisted in the DB. This led to a misleading warning log.
  • Fixed underlying issues that caused WebSocket connections to hang.
  • Fixed underlying issue that caused WebSocket connections to time out after 10 mins.
  • Fixed memory leak in nodes that implements a SQLite database.

Docs

  • Added tutorial on how to generate and configure a node key.
  • Added first guide for nwaku operators.

This release supports the following libp2p protocols:

Protocol Spec status Protocol id
11/WAKU2-RELAY stable /vac/waku/relay/2.0.0
12/WAKU2-FILTER draft /vac/waku/filter/2.0.0-beta1
13/WAKU2-STORE draft /vac/waku/store/2.0.0-beta4
18/WAKU2-SWAP draft /vac/waku/swap/2.0.0-beta1
19/WAKU2-LIGHTPUSH draft /vac/waku/lightpush/2.0.0-beta1

The Waku v1 implementation is stable but not under active development.

2022-03-31 v0.9

Release highlights:

  • Support for Peer Exchange (PX) when a peer prunes a 11/WAKU2-RELAY mesh due to oversubscription. This can significantly increase mesh stability.
  • Improved start-up times through managing the size of the underlying persistent message storage.
  • New websocket connections are no longer blocked due to parsing failures in other connections.

The full list of changes is below.

Features

Changes

  • Waku v1 <> v2 bridge now supports DNS multiaddrs
  • Waku v1 <> v2 bridge now validates content topics before attempting to bridge a message from Waku v2 to Waku v1
  • Persistent message storage now auto deletes messages once over specified --store-capacity. This can significantly improve node start-up times.
  • Renamed Waku v1 <> v2 bridge make target and binary to wakubridge
  • Increased store logging to assist with debugging
  • Increased rln-relay logging to assist with debugging
  • Message metrics no longer include the content topic as a dimension to keep Prometheus metric cardinality under control
  • Waku v2 toy-chat application now sets the sender timestamp when creating messages
  • The type of the proof field of the WakuMessage is changed to RateLimitProof
  • Added method to the JSON-RPC API that returns the git tag and commit hash of the binary
  • The node's ENR is now included in the JSON-RPC API response when requesting node info

Fixes

  • Fixed incorrect conversion of seconds to nanosecond timestamps
  • Fixed store queries blocking due to failure in resource clean up
  • Fixed underlying issue where new websocket connections are blocked due to parsing failures in other connections
  • Fixed failure to log the ENR necessary for a discv5 connection to the node

Docs

This release supports the following libp2p protocols:

Protocol Spec status Protocol id
11/WAKU2-RELAY stable /vac/waku/relay/2.0.0
12/WAKU2-FILTER draft /vac/waku/filter/2.0.0-beta1
13/WAKU2-STORE draft /vac/waku/store/2.0.0-beta4
18/WAKU2-SWAP draft /vac/waku/swap/2.0.0-beta1
19/WAKU2-LIGHTPUSH draft /vac/waku/lightpush/2.0.0-beta1

The Waku v1 implementation is stable but not under active development.

2022-03-03 v0.8

Release highlights:

  • Working demonstration and integration of 17/WAKU-RLN-RELAY in the Waku v2 toy-chat application
  • Beta support for ambient peer discovery using a version of Discovery v5
  • A fix for the issue that caused a store node to run out of memory after serving a number of historical queries
  • Ability to configure a dns4 domain name for a node and resolve other dns-based multiaddrs

The full list of changes is below.

Features

  • 17/WAKU-RLN-RELAY implementation now supports spam-protection for a specific combination of pubsubTopic and contentTopic (available under the rln compiler flag).
  • 17/WAKU-RLN-RELAY integrated into chat2 toy-chat (available under the rln compiler flag)
  • Added support for resolving dns-based multiaddrs
  • A Waku v2 node can now be configured with a domain name and dns4 multiaddr
  • Support for ambient peer discovery using 33/WAKU-DISCV5

Changes

  • Metrics: now monitoring content topics and the sources of new connections
  • Metrics: improved default fleet monitoring dashboard
  • Introduced a Timestamp type (currently an alias for int64).
  • All timestamps changed to nanosecond resolution.
  • timestamp field number in WakuMessage object changed from 4 to 10
  • 13/WAKU2-STORE identifier updated to /vac/waku/store/2.0.0-beta4
  • toy-chat application now uses DNS discovery to connect to existing fleets

Fixes

  • Fixed underlying bug that caused occasional failures when reading the certificate for secure websockets
  • Fixed store memory usage issues when responding to history queries

Docs

This release supports the following libp2p protocols:

Protocol Spec status Protocol id
11/WAKU2-RELAY stable /vac/waku/relay/2.0.0
12/WAKU2-FILTER draft /vac/waku/filter/2.0.0-beta1
13/WAKU2-STORE draft /vac/waku/store/2.0.0-beta4
18/WAKU2-SWAP draft /vac/waku/swap/2.0.0-beta1
19/WAKU2-LIGHTPUSH draft /vac/waku/lightpush/2.0.0-beta1

The Waku v1 implementation is stable but not under active development.

2022-01-19 v0.7

Release highlights:

  • Support for secure websockets.
  • Ability to remove unreachable clients in a filter node.
  • Several fixes to improve store performance and decrease query times. Query time for large stores decreased from longer than 8 min to under 100 ms.
  • Fix for a long-standing bug that prevented proper database migration in some deployed Docker containers.

The full list of changes is below.

Features

  • Support for secure websocket transport

Changes

  • Filter nodes can now remove unreachable clients
  • The WakuInfo listenStr is deprecated and replaced with a sequence of listenAddresses to accommodate multiple transports
  • Removed cached peerInfo on local node. Rely on underlying libp2p switch instead
  • Metrics: added counters for protocol messages
  • Waku v2 node discovery now supports 31/WAKU2-ENR
  • resuming the history via resume now takes the answers of all peers in peerList into consideration and consolidates them into one deduplicated list

Fixes

  • Fixed database migration failure in the Docker image
  • All HistoryResponse messages are now auto-paginated to a maximum of 100 messages per response
  • Increased maximum length for reading from a libp2p input stream to allow largest possible protocol messages, including HistoryResponse messages at max size
  • Significantly improved store node query performance
  • Implemented a GossipSub MessageIdProvider for 11/WAKU2-RELAY messages instead of relying on the unstable default
  • Receiver timestamps for message indexing in the store now have consistent millisecond resolution

This release supports the following libp2p protocols:

Protocol Spec status Protocol id
17/WAKU-RLN-RELAY raw /vac/waku/waku-rln-relay/2.0.0-alpha1
11/WAKU2-RELAY stable /vac/waku/relay/2.0.0
12/WAKU2-FILTER draft /vac/waku/filter/2.0.0-beta1
13/WAKU2-STORE draft /vac/waku/store/2.0.0-beta3
18/WAKU2-SWAP draft /vac/waku/swap/2.0.0-beta1
19/WAKU2-LIGHTPUSH draft /vac/waku/lightpush/2.0.0-beta1

The Waku v1 implementation is stable but not under active development.

2021-11-05 v0.6

Some useful features and fixes in this release, include:

  • two methods for Waku v2 node discovery
  • support for unsecure websockets, which paves the way for native browser usage
  • a fix for nim-waku store nodes running out of memory due to store size: the number of stored messages can now easily be configured
  • a fix for densely connected nodes refusing new connections: the maximum number of allowed connections can now easily be configured
  • support for larger message sizes (up from 64kb to 1Mb per message)

The full list of changes is below.

Features

Changes

  • Pagination of historical queries are now simplified
  • GossipSub prune backoff period is now the recommended 1 minute
  • Bridge now uses content topic format according to 23/WAKU2-TOPICS
  • Better internal differentiation between local and remote peer info
  • Maximum number of libp2p connections is now configurable
  • udp-port CLI option has been removed for binaries where it's not used
  • Waku v2 now supports unsecure WebSockets
  • Waku v2 now supports larger message sizes of up to 1 Mb by default
  • Further experimental development of RLN for spam protection. These changes are disabled by default under a compiler flag. Changes include:
    • Per-message rate limit proof defined
    • RLN proof generation and verification integrated into Waku v2
    • RLN tree depth changed from 32 to 20
    • Support added for static membership group formation

Docs

Fixes

  • Bridge between toy-chat and matterbridge now shows correct announced addresses
  • Bridge no longer re-encodes already encoded payloads when publishing to V1
  • Bridge now populates WakuMessage timestamps when publishing to V2
  • Store now has a configurable maximum number of stored messages
  • Network simulations for Waku v1 and Waku v2 are runnable again

This release supports the following libp2p protocols:

Protocol Spec status Protocol id
17/WAKU-RLN raw /vac/waku/waku-rln-relay/2.0.0-alpha1
11/WAKU2-RELAY stable /vac/waku/relay/2.0.0
12/WAKU2-FILTER draft /vac/waku/filter/2.0.0-beta1
13/WAKU2-STORE draft /vac/waku/store/2.0.0-beta3
18/WAKU2-SWAP draft /vac/waku/swap/2.0.0-beta1
19/WAKU2-LIGHTPUSH draft /vac/waku/lightpush/2.0.0-beta1

The Waku v1 implementation is stable but not under active development.

2021-07-26 v0.5.1

This patch release contains the following fix:

  • Support for multiple protocol IDs when reconnecting to previously connected peers: A bug in v0.5 caused clients using persistent peer storage to only support the mounted protocol ID.

This is a patch release that is fully backwards-compatible with release v0.5. It supports the same libp2p protocols:

Protocol Spec status Protocol id
17/WAKU-RLN raw /vac/waku/waku-rln-relay/2.0.0-alpha1
11/WAKU2-RELAY stable /vac/waku/relay/2.0.0
12/WAKU2-FILTER draft /vac/waku/filter/2.0.0-beta1
13/WAKU2-STORE draft /vac/waku/store/2.0.0-beta3
18/WAKU2-SWAP draft /vac/waku/swap/2.0.0-beta1
19/WAKU2-LIGHTPUSH draft /vac/waku/lightpush/2.0.0-beta1

The Waku v1 implementation is stable but not under active development.

2021-07-23 v0.5

This release contains the following:

Features

  • Support for keep-alives using libp2p ping protocol.
  • DB migration for the message and peer stores.
  • Support for multiple protocol IDs. Mounted protocols now match versions of the same protocol that adds a postfix to the stable protocol ID.

Changes

  • Bridge topics are now configurable.
  • The resume Nim API now eliminates duplicates messages before storing them.
  • The resume Nim API now fetches historical messages in page sequence.
  • Added support for stable version of relay protocol, with protocol ID /vac/waku/relay/2.0.0.
  • Added optional timestamp to WakuRelayMessage.
  • Removed PCRE as a prerequisite for building Waku v1 and Waku v2.
  • Improved swap metrics.

General refactoring

  • Refactored modules according to Nim best practices.
  • Simplified the way protocols get notified of new messages.
  • Refactored wakunode2 setup into 6 distinct phases with improved logging and error handling.
  • Moved Whisper types and protocol from the nim-eth module to nim-waku.

Docs

Schema

  • Updated the Message table of the persistent message store:
    • Added senderTimestamp column.
    • Renamed the timestamp column to receiverTimestamp and changes its type to REAL.

API

Fixes

  • Conversion between topics for the Waku v1 <-> v2 bridge now follows the RFC recommendation.
  • Fixed field order of HistoryResponse protobuf message: the field numbers of the HistoryResponse are shifted up by one to match up the 13/WAKU2-STORE specs.

This release supports the following libp2p protocols:

Protocol Spec status Protocol id
17/WAKU-RLN raw /vac/waku/waku-rln-relay/2.0.0-alpha1
11/WAKU2-RELAY stable /vac/waku/relay/2.0.0
12/WAKU2-FILTER draft /vac/waku/filter/2.0.0-beta1
13/WAKU2-STORE draft /vac/waku/store/2.0.0-beta3
18/WAKU2-SWAP draft /vac/waku/swap/2.0.0-beta1
19/WAKU2-LIGHTPUSH draft /vac/waku/lightpush/2.0.0-beta1

The Waku v1 implementation is stable but not under active development.

2021-06-03 v0.4

This release contains the following:

Features

Changes

  • The toy-chat application can now perform lightpush and request content-filtered messages from remote peers.
  • The toy-chat application now uses default content topic /toy-chat/2/huilong/proto
  • Improve toy-chat briding to matterbridge
  • Improve swap logging and enable soft mode by default
  • Content topics are no longer in a redundant nested structure
  • Improve error handling

API

Fixes

  • Connections between nodes no longer become unstable due to keep-alive errors if mesh grows large
  • Re-enable lightpush tests and fix Windows CI failure

The Waku v2 suite of protocols are still in a raw/draft state. This release supports the following libp2p protocols:

Protocol Spec status Protocol id
17/WAKU-RLN raw /vac/waku/waku-rln-relay/2.0.0-alpha1
11/WAKU2-RELAY draft /vac/waku/relay/2.0.0-beta2
12/WAKU2-FILTER draft /vac/waku/filter/2.0.0-beta1
13/WAKU2-STORE draft /vac/waku/store/2.0.0-beta3
18/WAKU2-SWAP draft /vac/waku/swap/2.0.0-beta1
19/WAKU2-LIGHTPUSH draft /vac/waku/lightpush/2.0.0-beta1

The Waku v1 implementation is stable but not under active development.

2021-05-11 v0.3

This release contains the following:

Features

Changes

  • Enable swap protocol by default and improve logging

General refactoring

  • Split out waku_types types into the right place; create utils folder.
  • Change type of contentTopic in ContentFilter to string.
  • Replace sequence of contentTopics in ContentFilter with a single contentTopic.
  • Add timestamp field to WakuMessage.
  • Ensure CLI config parameters use a consistent naming scheme. Summary of changes here.

Docs

Several clarifications and additions aimed at contributors, including

Schema

  • Add Message table to the persistent message store. This table replaces the old messages table. It has two additional columns, namely
    • pubsubTopic, and
    • version.
  • Add Peer table for persistent peer storage.

API

  • JSON-RPC Admin API: Added a post method to connect to peers on an ad-hoc basis.
  • Nim API: PubSub topic subscribe and unsubscribe no longer returns a future (removed async designation).
  • HistoryQuery: Added pubsubTopic field. Message history can now be filtered and queried based on the pubsubTopic.
  • HistoryQuery: Added support for querying a time window by specifying start and end times.

Fixes

  • Running nodes can now be shut down gracefully
  • Content filtering now works on any PubSub topic and not just the waku default.
  • Nodes can now mount protocols without supporting relay as a capability

The Waku v2 suite of protocols are still in a raw/draft state. This release supports the following libp2p protocols:

Protocol Spec status Protocol id
17/WAKU-RLN raw /vac/waku/waku-rln-relay/2.0.0-alpha1
18/WAKU2-SWAP raw /vac/waku/swap/2.0.0-alpha1
19/WAKU2-LIGHTPUSH raw /vac/waku/lightpush/2.0.0-alpha1
11/WAKU2-RELAY draft /vac/waku/relay/2.0.0-beta2
12/WAKU2-FILTER draft /vac/waku/filter/2.0.0-beta1
13/WAKU2-STORE draft /vac/waku/store/2.0.0-beta3

The Waku v1 implementation is stable but not under active development.

2021-01-05 v0.2

This release contains the following changes:

  • Calls to publish a message on wakunode2 now await instead of discard dispatched WakuRelay procedures.
  • StrictNoSign enabled.
  • Add JSON-RPC API for external access to wakunode2 functionality:
    • Admin API retrieves information about peers registered on the wakunode2.
    • Debug API exposes debug information about a wakunode2.
    • Filter API saves bandwidth by allowing light nodes to filter for specific content.
    • Private API enables symmetric or asymmetric cryptography to encrypt/decrypt message payloads.
    • Relay API allows basic pub/sub functionality.
    • Store API retrieves historical messages.
  • Add tutorial on how to use JSON-RPC API.
  • Refactor: Move waku_filter protocol into its own module.

The Waku v2 implementation, and most protocols it consist of, are still in a draft/beta state. The Waku v1 implementation is stable but not under active development.

2020-11-30 v0.1

Initial beta release.

This release contains:

  • A Nim implementation of the Waku v1 protocol.
  • A Nim implementation of the Waku v2 protocol.
  • CLI applications wakunode and wakunode2 that allows you to run a Waku v1 or v2 node.
  • Examples of Waku v1 and v2 usage.
  • Various tests of above.

Currenty the Waku v2 implementation, and most protocols it consist of, are in a draft/beta state. The Waku v1 implementation is stable but not under active development.

Feedback welcome!