mirror of
https://github.com/logos-messaging/docs.waku.org.git
synced 2026-01-02 12:53:12 +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
|
||||
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",
|
||||
label: "JavaScript SDK",
|
||||
label: "JavaScript",
|
||||
collapsed: false,
|
||||
link: {
|
||||
type: "doc",
|
||||
@ -40,6 +40,11 @@ const sidebars = {
|
||||
},
|
||||
],
|
||||
},
|
||||
{
|
||||
type: "doc",
|
||||
id: "build/nim/index",
|
||||
label: "Nim",
|
||||
},
|
||||
],
|
||||
runNode: [
|
||||
{
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user