2025-12-29 23:04:24 +01:00
# Logos Messaging Nim
2020-05-08 22:39:16 +02:00
2020-11-17 17:34:53 +08:00
## Introduction
2020-05-08 22:39:16 +02:00
2025-12-29 23:04:24 +01:00
The logos-messaging-nim, a.k.a. lmn or nwaku, repository implements a set of libp2p protocols aimed to bring
private communications.
2020-05-08 22:39:16 +02:00
2025-12-29 23:04:24 +01:00
- Nim implementation of [these specs ](https://github.com/vacp2p/rfc-index/tree/main/waku ).
- C library that exposes the implemented protocols.
- CLI application that allows you to run an lmn node.
- Examples.
2020-11-17 17:34:53 +08:00
- Various tests of above.
2020-05-08 22:39:16 +02:00
2024-08-20 15:14:35 +10:00
For more details see the [source code ](waku/README.md )
2020-05-08 22:39:16 +02:00
2024-10-23 11:59:37 +05:30
## How to Build & Run ( Linux, MacOS & WSL )
2020-11-17 17:34:53 +08:00
2025-12-29 23:04:24 +01:00
These instructions are generic. For more detailed instructions, see the source code above.
2020-11-17 17:34:53 +08:00
### Prerequisites
2020-05-08 22:39:16 +02:00
2023-07-28 06:46:02 +01:00
The standard developer tools, including a C compiler, GNU Make, Bash, and Git. More information on these installations can be found [here ](https://docs.waku.org/guides/nwaku/build-source#install-dependencies ).
2020-05-08 22:39:16 +02:00
2025-01-30 14:36:04 +01:00
> In some distributions (Fedora linux for example), you may need to install `which` utility separately. Nimbus build system is relying on it.
2025-04-10 14:38:56 +01:00
You'll also need an installation of Rust and its toolchain (specifically `rustc` and `cargo` ).
The easiest way to install these, is using `rustup` :
```bash
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
```
2020-11-17 17:34:53 +08:00
### Wakunode
2020-05-08 22:39:16 +02:00
```bash
# The first `make` invocation will update all Git submodules.
2023-07-28 06:46:02 +01:00
# You'll run `make update` after each `git pull` in the future to keep those submodules updated.
2023-08-07 15:11:46 +01:00
make wakunode2
2020-05-08 22:39:16 +02:00
2024-02-23 16:25:13 +02:00
# Build with custom compilation flags. Do not use NIM_PARAMS unless you know what you are doing.
# Replace with your own flags
make wakunode2 NIMFLAGS="-d:chronicles_colors:none -d:disableMarchNative"
2023-10-05 15:04:57 +02:00
# Run with DNS bootstrapping
./build/wakunode2 --dns-discovery --dns-discovery-url=DNS_BOOTSTRAP_NODE_URL
2020-05-08 22:39:16 +02:00
# See available command line options
2020-11-17 17:34:53 +08:00
./build/wakunode2 --help
2020-05-08 22:39:16 +02:00
```
2023-10-05 15:04:57 +02:00
To join the network, you need to know the address of at least one bootstrap node.
Please refer to the [Waku README ](https://github.com/waku-org/nwaku/blob/master/waku/README.md ) for more information.
2020-05-08 22:39:16 +02:00
2022-12-05 16:25:37 +01:00
For more on how to run `wakunode2` , refer to:
2024-02-20 22:37:26 +05:30
- [Run using binaries ](https://docs.waku.org/guides/nwaku/build-source )
2023-07-28 06:46:02 +01:00
- [Run using docker ](https://docs.waku.org/guides/nwaku/run-docker )
- [Run using docker-compose ](https://docs.waku.org/guides/nwaku/run-docker-compose )
2022-12-05 16:25:37 +01:00
2023-09-11 18:06:19 +02:00
#### Issues
##### WSL
If you encounter difficulties building the project on WSL, consider placing the project within WSL's filesystem, avoiding the `/mnt/` directory.
2024-10-23 11:59:37 +05:30
### How to Build & Run ( Windows )
2025-03-05 21:21:59 +05:30
### Windows Build Instructions
2024-10-23 11:59:37 +05:30
2025-03-05 21:21:59 +05:30
#### 1. Install Required Tools
- **Git Bash Terminal**: Download and install from https://git-scm.com/download/win
- **MSYS2**:
a. Download installer from https://www.msys2.org
b. Install at "C:\" (default location). Remove/rename the msys folder in case of previous installation.
c. Use the mingw64 terminal from msys64 directory for package installation.
2024-10-23 11:59:37 +05:30
2025-03-05 21:21:59 +05:30
#### 2. Install Dependencies
Open MSYS2 mingw64 terminal and run the following one-by-one :
```bash
pacman -Syu --noconfirm
pacman -S --noconfirm --needed mingw-w64-x86_64-toolchain
pacman -S --noconfirm --needed base-devel make cmake upx
pacman -S --noconfirm --needed mingw-w64-x86_64-rust
pacman -S --noconfirm --needed mingw-w64-x86_64-postgresql
pacman -S --noconfirm --needed mingw-w64-x86_64-gcc
pacman -S --noconfirm --needed mingw-w64-x86_64-gcc-libs
pacman -S --noconfirm --needed mingw-w64-x86_64-libwinpthread-git
pacman -S --noconfirm --needed mingw-w64-x86_64-zlib
pacman -S --noconfirm --needed mingw-w64-x86_64-openssl
pacman -S --noconfirm --needed mingw-w64-x86_64-python
```
#### 3. Build Wakunode
- Open Git Bash as administrator
- clone nwaku and cd nwaku
2025-06-26 01:03:40 +05:30
- Execute: `./scripts/build_windows.sh`
2025-03-05 21:21:59 +05:30
#### 4. Troubleshooting
If `wakunode2.exe` isn't generated:
- **Missing Dependencies**: Verify with:
`which make cmake gcc g++ rustc cargo python3 upx`
If missing, revisit Step 2 or ensure MSYS2 is at `C:\`
- **Installation Conflicts**: Remove existing MinGW/MSYS2/Git Bash installations and perform fresh install
2024-10-23 11:59:37 +05:30
2023-09-11 18:06:19 +02:00
### Developing
#### Nim Runtime
This repository is bundled with a Nim runtime that includes the necessary dependencies for the project.
2024-12-09 15:44:46 +02:00
Before you can utilize the runtime you'll need to build the project, as detailed in a previous section.
2024-08-20 15:14:35 +10:00
This will generate a `vendor` directory containing various dependencies, including the `nimbus-build-system` which has the bundled nim runtime.
2023-09-11 18:06:19 +02:00
After successfully building the project, you may bring the bundled runtime into scope by running:
```bash
source env.sh
```
2023-11-30 11:08:08 +01:00
If everything went well, you should see your prompt suffixed with `[Nimbus env]$` . Now you can run `nim` commands as usual.
2023-09-11 18:06:19 +02:00
2025-07-14 14:34:22 +05:30
### Test Suite
2020-05-08 22:39:16 +02:00
```bash
2023-08-07 15:11:46 +01:00
# Run all the Waku tests
2020-11-17 17:34:53 +08:00
make test
2025-07-14 14:34:22 +05:30
# Run a specific test file
make test < test_file_path >
# e.g. : make test tests/wakunode2/test_all.nim
# Run a specific test name from a specific test file
make test < test_file_path > < test_name >
# e.g. : make test tests/wakunode2/test_all.nim "node setup is successful with default configuration"
2020-05-08 22:39:16 +02:00
```
2024-07-17 15:21:37 +02:00
### Building single test files
2024-12-09 15:44:46 +02:00
During development it is helpful to build and run a single test file.
2024-07-17 15:21:37 +02:00
To support this make has a specific target:
targets:
- `build/<relative path to your test file.nim>`
- `test/<relative path to your test file.nim>`
Binary will be created as `<path to your test file.nim>.bin` under the `build` directory .
```bash
# Build and run your test file separately
make test/tests/common/test_enr_builder.nim
```
2025-04-22 19:04:52 +02:00
### Testing against `js-waku`
Refer to [js-waku repo ](https://github.com/waku-org/js-waku/tree/master/packages/tests ) for instructions.
2024-08-20 15:14:35 +10:00
## Formatting
Nim files are expected to be formatted using the [`nph` ](https://github.com/arnetheduck/nph ) version present in `vendor/nph` .
You can easily format file with the `make nph/<relative path to nim> file` command.
For example:
```
make nph/waku/waku_core.nim
```
A convenient git hook is provided to automatically format file at commit time.
Run the following command to install it:
```shell
make install-nph
```
2020-11-17 17:34:53 +08:00
### Examples
2020-05-08 22:39:16 +02:00
2023-08-07 15:11:46 +01:00
Examples can be found in the examples folder.
This includes a fully featured chat example.
2022-03-28 14:17:50 +02:00
2022-10-11 05:58:44 +02:00
### Tools
Different tools and their corresponding how-to guides can be found in the `tools` folder.
2022-03-28 14:17:50 +02:00
### Bugs, Questions & Features
2023-07-28 06:46:02 +01:00
For an inquiry, or if you would like to propose new features, feel free to [open a general issue ](https://github.com/waku-org/nwaku/issues/new ).
2022-03-28 14:17:50 +02:00
2023-07-28 06:46:02 +01:00
For bug reports, please [tag your issue with the `bug` label ](https://github.com/waku-org/nwaku/issues/new ).
2022-03-28 14:17:50 +02:00
2023-07-28 06:46:02 +01:00
If you believe the reported issue requires critical attention, please [use the `critical` label ](https://github.com/waku-org/nwaku/issues/new?labels=critical,bug ) to assist with triaging.
2022-03-28 14:17:50 +02:00
2023-07-28 06:46:02 +01:00
To get help, or participate in the conversation, join the [Waku Discord ](https://discord.waku.org/ ) server.
2023-11-07 10:56:22 +01:00
### Docs
* [REST API Documentation ](https://waku-org.github.io/waku-rest-api/ )