mirror of
https://github.com/logos-messaging/docs.waku.org.git
synced 2026-01-03 21:33:05 +00:00
Merge 0524b3b48c70dd28cf5269626ea0e17bfafd4b9e into 8007311a070c2ec321c9bc8e145b6378b2c5d0b3
This commit is contained in:
commit
3a82fd8e4c
2
docs/build/javascript/index.md
vendored
2
docs/build/javascript/index.md
vendored
@ -1,5 +1,5 @@
|
|||||||
---
|
---
|
||||||
title: JavaScript Waku SDK
|
title: JavaScript
|
||||||
hide_table_of_contents: true
|
hide_table_of_contents: true
|
||||||
displayed_sidebar: build
|
displayed_sidebar: build
|
||||||
---
|
---
|
||||||
|
|||||||
163
docs/build/nim/index.md
vendored
Normal file
163
docs/build/nim/index.md
vendored
Normal file
@ -0,0 +1,163 @@
|
|||||||
|
---
|
||||||
|
title: Nim
|
||||||
|
hide_table_of_contents: true
|
||||||
|
displayed_sidebar: build
|
||||||
|
---
|
||||||
|
|
||||||
|
Nwaku provides a native Nim implementation of the Waku protocol, allowing developers to build Waku native applications directly in Nim.
|
||||||
|
This guide demonstrates how to use the Waku library API to create and configure Waku nodes.
|
||||||
|
|
||||||
|
## Installation
|
||||||
|
|
||||||
|
To use the Waku Nim SDK, you'll need to:
|
||||||
|
|
||||||
|
1. Install [Nim](https://nim-lang.org/install.html) (version 2.2.4 or higher)
|
||||||
|
2. Add the nwaku library to your project
|
||||||
|
|
||||||
|
:::warning
|
||||||
|
Waku does not currently work with Nimble package manager. You can track progress on Nimble support in [PR #3564](https://github.com/waku-org/nwaku/pull/3564).
|
||||||
|
:::
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# Install nwaku as a dependency
|
||||||
|
nimble install waku
|
||||||
|
```
|
||||||
|
|
||||||
|
## Creating a Waku Node
|
||||||
|
|
||||||
|
Waku uses blockchain smart contract to DoS protect nodes in the network.
|
||||||
|
The protocol is called [RLN relay](/learn/concepts/protocols#rln-relay).
|
||||||
|
|
||||||
|
To connect to the Waku Network, you'll need a Linea Sepolia RPC endpoint.
|
||||||
|
|
||||||
|
Let's create a simple CLI that takes an RPC URL as argument:
|
||||||
|
|
||||||
|
`your_waku_app.nim`
|
||||||
|
```nim
|
||||||
|
import std/options
|
||||||
|
import chronos, results, confutils, confutils/defs
|
||||||
|
import waku
|
||||||
|
|
||||||
|
type CliArgs = object
|
||||||
|
ethRpcEndpoint* {.
|
||||||
|
defaultValue: "",
|
||||||
|
desc: "ETH RPC Endpoint for RLN support"
|
||||||
|
.}: string
|
||||||
|
|
||||||
|
when isMainModule:
|
||||||
|
let args = CliArgs.load()
|
||||||
|
|
||||||
|
if args.ethRpcEndpoint == "":
|
||||||
|
echo "Please provide a Linea Sepolia RPC endpoint to connect to the Waku Network"
|
||||||
|
quit(QuitFailure)
|
||||||
|
|
||||||
|
echo "Starting Waku node with RLN..."
|
||||||
|
|
||||||
|
# Create configuration with RLN enabled
|
||||||
|
let config = NodeConfig.init(
|
||||||
|
ethRpcEndpoints = @[args.ethRpcEndpoint]
|
||||||
|
)
|
||||||
|
|
||||||
|
# Create the node
|
||||||
|
let node = (waitFor createNode(config)).valueOr:
|
||||||
|
echo "Failed to create node: ", error
|
||||||
|
quit(QuitFailure)
|
||||||
|
|
||||||
|
echo "Waku node created successfully!"
|
||||||
|
|
||||||
|
# Start the node
|
||||||
|
(waitFor startWaku(addr node)).isOkOr:
|
||||||
|
echo "Failed to start node: ", error
|
||||||
|
quit(QuitFailure)
|
||||||
|
|
||||||
|
echo "Node started successfully with RLN enabled!"
|
||||||
|
runForever()
|
||||||
|
```
|
||||||
|
|
||||||
|
### Running the CLI
|
||||||
|
|
||||||
|
To run your CLI:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
nim c -r your_waku_app.nim --ethRpcEndpoint="https://linea-sepolia.infura.io/v3/some-api-key"
|
||||||
|
```
|
||||||
|
|
||||||
|
## Blockchain-less Development Mode
|
||||||
|
|
||||||
|
For development and testing purposes, you can create a Waku node without blockchain integration.
|
||||||
|
This mode wil not have DoS protection but allows you to experiment with the Waku protocol without needing an RPC endpoint.
|
||||||
|
|
||||||
|
`your_waku_app.nim`
|
||||||
|
```nim
|
||||||
|
import std/options
|
||||||
|
import chronos, results
|
||||||
|
import waku
|
||||||
|
|
||||||
|
when isMainModule:
|
||||||
|
echo "Starting Waku node in development mode..."
|
||||||
|
|
||||||
|
# Create a basic configuration without RLN
|
||||||
|
let config = NodeConfig.init(
|
||||||
|
wakuConfig = WakuConfig.init(
|
||||||
|
entryNodes = @[], # Add ENRs of bootstrap nodes if needed
|
||||||
|
clusterId = 42 # Use a custom cluster ID for your test network
|
||||||
|
)
|
||||||
|
)
|
||||||
|
|
||||||
|
# Create the node
|
||||||
|
let node = (waitFor createNode(config)).valueOr:
|
||||||
|
echo "Failed to create node: ", error
|
||||||
|
quit(QuitFailure)
|
||||||
|
|
||||||
|
echo "Waku node created successfully!"
|
||||||
|
|
||||||
|
# Start the node
|
||||||
|
(waitFor startWaku(addr node)).isOkOr:
|
||||||
|
echo "Failed to start node: ", error
|
||||||
|
quit(QuitFailure)
|
||||||
|
|
||||||
|
echo "Node started in development mode!"
|
||||||
|
runForever()
|
||||||
|
```
|
||||||
|
|
||||||
|
### Running in Development Mode
|
||||||
|
|
||||||
|
```bash
|
||||||
|
nim c -r your_waku_app.nimyour_waku_app.nim
|
||||||
|
```
|
||||||
|
|
||||||
|
## Configuration Options
|
||||||
|
|
||||||
|
### With Custom Bootstrap Nodes
|
||||||
|
|
||||||
|
You can specify bootstrap nodes to connect to specific networks:
|
||||||
|
|
||||||
|
```nim
|
||||||
|
let config = NodeConfig.init(
|
||||||
|
wakuConfig = WakuConfig.init(
|
||||||
|
entryNodes = @[
|
||||||
|
"enr:-P-4QG_d...", # Replace with actual ENR
|
||||||
|
"/ip5/1.2..." # Replace with actual multiaddr
|
||||||
|
],
|
||||||
|
clusterId = 42
|
||||||
|
)
|
||||||
|
)
|
||||||
|
```
|
||||||
|
|
||||||
|
## API Status
|
||||||
|
|
||||||
|
:::info
|
||||||
|
The Waku Nim library API is under active development. Currently, node creation and configuration are supported. Additional API verbs for message handling, subscriptions, and protocol interactions are work in progress.
|
||||||
|
:::
|
||||||
|
|
||||||
|
## Examples and Resources
|
||||||
|
|
||||||
|
- [nwaku examples](https://github.com/waku-org/nwaku/tree/master/examples) - Official examples repository
|
||||||
|
- [waku_api.nim](https://github.com/waku-org/nwaku/blob/master/examples/waku_api.nim) - Library API example
|
||||||
|
- [nwaku repo](https://github.com/waku-org/nwaku) - nwaku GitHub Repository
|
||||||
|
|
||||||
|
## Get Help
|
||||||
|
|
||||||
|
- Visit the #help-desk channel on [Discord](https://discord.waku.org/)
|
||||||
|
- Check the [nwaku GitHub repository](https://github.com/waku-org/nwaku) for issues and updates
|
||||||
|
- Review the [protocol documentation](/learn/concepts/protocols) to understand Waku's capabilities
|
||||||
@ -10,7 +10,7 @@ const sidebars = {
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
type: "category",
|
type: "category",
|
||||||
label: "JavaScript SDK",
|
label: "JavaScript",
|
||||||
collapsed: false,
|
collapsed: false,
|
||||||
link: {
|
link: {
|
||||||
type: "doc",
|
type: "doc",
|
||||||
@ -40,6 +40,11 @@ const sidebars = {
|
|||||||
},
|
},
|
||||||
],
|
],
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
type: "doc",
|
||||||
|
id: "build/nim/index",
|
||||||
|
label: "Nim",
|
||||||
|
},
|
||||||
],
|
],
|
||||||
runNode: [
|
runNode: [
|
||||||
{
|
{
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user