From 3e7d1a41dd2b1da7a063e449adb95fb8df893203 Mon Sep 17 00:00:00 2001 From: Igor Sirotin Date: Mon, 6 Jul 2026 14:49:45 +0100 Subject: [PATCH] fix(kernel): drop removed config keys + add a runnable example Running against the single liblogosdelivery library surfaced a config drift: the consolidated WakuNodeConf strictly rejects unknown keys, and common.WakuConfig still emitted `legacyStore` (removed upstream, and sent unconditionally) and `host` (renamed to `listenAddress`). That failed node creation, so every kernel test that starts a node failed. Reconcile the config: - drop the LegacyStore field (and its two obsolete test references; the already-skipped TestCheckLegacyStore keeps compiling); - map Host to the `listenAddress` JSON key. Add examples/kernel: a small runnable check that drives the unified lifecycle (logosdelivery_create_node/start/stop/destroy) and a few kernel ops (version, listen addresses, is-online, relay subscribe/unsubscribe) over the single library. `go run ./examples/kernel` prints OK. Co-Authored-By: Claude Opus 4.8 (1M context) --- examples/kernel/main.go | 80 +++++++++++++++++++++++++++++++++++++ pkg/kernel/common/config.go | 5 ++- pkg/kernel/nwaku_test.go | 2 - pkg/kernel/store_test.go | 1 - 4 files changed, 83 insertions(+), 5 deletions(-) create mode 100644 examples/kernel/main.go diff --git a/examples/kernel/main.go b/examples/kernel/main.go new file mode 100644 index 0000000..d3947c0 --- /dev/null +++ b/examples/kernel/main.go @@ -0,0 +1,80 @@ +// Command kernel is a small runnable check that the bindings work against the +// single liblogosdelivery library: it drives the unified node lifecycle +// (logosdelivery_create_node/start/stop/destroy) and a few low-level Kernel +// (waku_*) operations through pkg/kernel. +// +// Build/run requires liblogosdelivery at link time, e.g.: +// +// export LOGOS_DELIVERY_DIR=/abs/path/to/logos-delivery # built with `make liblogosdelivery` +// export CGO_CFLAGS="-I$LOGOS_DELIVERY_DIR/library" +// export CGO_LDFLAGS="-L$LOGOS_DELIVERY_DIR/build -Wl,-rpath,$LOGOS_DELIVERY_DIR/build" +// go run ./examples/kernel +package main + +import ( + "log" + + "github.com/logos-messaging/logos-delivery-go-bindings/pkg/kernel" + "github.com/logos-messaging/logos-delivery-go-bindings/pkg/kernel/common" +) + +func main() { + const clusterID = 16 + + // A single, isolated relay node — no bootstrap/discovery needed. + cfg := &common.WakuConfig{ + Relay: true, + ClusterID: clusterID, + Shards: []uint16{0}, + NumShardsInNetwork: 8, + LogLevel: "ERROR", + } + + // StartWakuNode creates (logosdelivery_create_node) + starts + // (logosdelivery_start_node) the node, allocating a free TCP port. + node, err := kernel.StartWakuNode("kernel-example", cfg) + if err != nil { + log.Fatalf("start node: %v", err) + } + defer func() { + // logosdelivery_stop_node + logosdelivery_destroy + if err := node.StopAndDestroy(); err != nil { + log.Printf("stop/destroy: %v", err) + } + }() + + // A few low-level kernel calls to prove the kernel surface links and runs + // over the single library. + version, err := node.Version() // waku_version + if err != nil { + log.Fatalf("version: %v", err) + } + log.Printf("node version: %s", version) + + addrs, err := node.ListenAddresses() // waku_listen_addresses + if err != nil { + log.Fatalf("listen addresses: %v", err) + } + log.Printf("listening on: %v", addrs) + + online, err := node.IsOnline() // waku_is_online + if err != nil { + log.Fatalf("is online: %v", err) + } + log.Printf("online: %v", online) + + // Subscribe to / unsubscribe from a relay (pubsub) topic + // (waku_relay_subscribe / waku_relay_unsubscribe). + topic := kernel.FormatWakuRelayTopic(clusterID, 0) + if err := node.RelaySubscribe(topic); err != nil { + log.Fatalf("relay subscribe: %v", err) + } + log.Printf("subscribed to %s", topic) + + if err := node.RelayUnsubscribe(topic); err != nil { + log.Fatalf("relay unsubscribe: %v", err) + } + log.Printf("unsubscribed from %s", topic) + + log.Print("OK — single liblogosdelivery library: node lifecycle + kernel ops work") +} diff --git a/pkg/kernel/common/config.go b/pkg/kernel/common/config.go index a40fb74..2a2b8cc 100644 --- a/pkg/kernel/common/config.go +++ b/pkg/kernel/common/config.go @@ -1,11 +1,12 @@ package common type WakuConfig struct { - Host string `json:"host,omitempty"` + // Host is the LibP2P listening address; the consolidated WakuNodeConf calls + // it listenAddress (the legacy `host` key was removed). + Host string `json:"listenAddress,omitempty"` Nodekey string `json:"nodekey,omitempty"` Relay bool `json:"relay"` Store bool `json:"store,omitempty"` - LegacyStore bool `json:"legacyStore"` Storenode string `json:"storenode,omitempty"` StoreMessageRetentionPolicy string `json:"storeMessageRetentionPolicy,omitempty"` StoreMessageDbUrl string `json:"storeMessageDbUrl,omitempty"` diff --git a/pkg/kernel/nwaku_test.go b/pkg/kernel/nwaku_test.go index 4a73ed3..f3f74cc 100644 --- a/pkg/kernel/nwaku_test.go +++ b/pkg/kernel/nwaku_test.go @@ -672,7 +672,6 @@ func TestStore(t *testing.T) { Shards: []uint16{64}, Discv5UdpPort: udpPort, TcpPort: tcpPort, - LegacyStore: false, } senderNode, err := NewWakuNode(&senderNodeWakuConfig, "senderNode") @@ -692,7 +691,6 @@ func TestStore(t *testing.T) { Shards: []uint16{64}, Discv5UdpPort: udpPort, TcpPort: tcpPort, - LegacyStore: false, } receiverNode, err := NewWakuNode(&receiverNodeWakuConfig, "receiverNode") require.NoError(t, err) diff --git a/pkg/kernel/store_test.go b/pkg/kernel/store_test.go index 5b01f72..27c07a8 100644 --- a/pkg/kernel/store_test.go +++ b/pkg/kernel/store_test.go @@ -837,7 +837,6 @@ func TestCheckLegacyStore(t *testing.T) { node2Config := DefaultWakuConfig node2Config.Relay = true node2Config.Store = true - node2Config.LegacyStore = true Debug("Creating Node2") node2, err := StartWakuNode("Node2", &node2Config)