mirror of
https://github.com/logos-messaging/logos-chat.git
synced 2026-02-27 20:33:07 +00:00
feat: use logos.dev fleet (#87)
* feat: use logos.dev fleet * fix: cluster id defaults * docs: comment with host names and peer ids
This commit is contained in:
parent
6fc4c2200a
commit
07da6e2dec
@ -45,8 +45,8 @@ make run_bob
|
||||
```text
|
||||
--name=<name> Identity name (default: user)
|
||||
--port=<port> Waku port (default: random 50000-50200)
|
||||
--cluster=<id> Waku cluster ID (default: 42)
|
||||
--shard=<id> Waku shard ID (default: 2)
|
||||
--cluster=<id> Waku cluster ID (default: 2)
|
||||
--shard=<id> Waku shard ID (default: 1)
|
||||
--peer=<addr> Static peer multiaddr to connect to
|
||||
--help Show help
|
||||
```
|
||||
|
||||
@ -631,7 +631,7 @@ static void cleanup(void) {
|
||||
|
||||
int main(int argc, char *argv[]) {
|
||||
const char *name = "user";
|
||||
int port = 0, cluster_id = 42, shard_id = 2;
|
||||
int port = 0, cluster_id = 2, shard_id = 1;
|
||||
const char *peer = NULL;
|
||||
|
||||
for (int i = 1; i < argc; i++) {
|
||||
@ -644,8 +644,8 @@ int main(int argc, char *argv[]) {
|
||||
printf("Usage: %s [options]\n", argv[0]);
|
||||
printf(" --name=<name> Your display name\n");
|
||||
printf(" --port=<port> Listen port (0 for random)\n");
|
||||
printf(" --cluster=<id> Cluster ID (default: 42)\n");
|
||||
printf(" --shard=<id> Shard ID (default: 2)\n");
|
||||
printf(" --cluster=<id> Cluster ID (default: 2)\n");
|
||||
printf(" --shard=<id> Shard ID (default: 1)\n");
|
||||
printf(" --peer=<addr> Static peer multiaddr\n");
|
||||
return 0;
|
||||
}
|
||||
|
||||
@ -2,7 +2,7 @@ import
|
||||
chronicles,
|
||||
chronos,
|
||||
confutils,
|
||||
eth/p2p/discoveryv5/enr,
|
||||
eth/p2p/discoveryv5/enr as eth_enr,
|
||||
libp2p/crypto/crypto,
|
||||
libp2p/peerid,
|
||||
std/random,
|
||||
@ -10,6 +10,7 @@ import
|
||||
strformat,
|
||||
waku/[
|
||||
common/logging,
|
||||
common/enr as common_enr,
|
||||
node/peer_manager,
|
||||
waku_core,
|
||||
waku_node,
|
||||
@ -40,6 +41,36 @@ const
|
||||
# Placeholder
|
||||
FilterContentTopic = ContentTopic("/chatsdk/test/proto")
|
||||
|
||||
## Logos.dev Fleet ENRs
|
||||
|
||||
# delivery-01.do-ams3.logos.dev.status.im - 16Uiu2HAmTUbnxLGT9JvV6mu9oPyDjqHK4Phs1VDJNUgESgNSkuby
|
||||
LogosDevDelivery01DoAms3 = "enr:-MG4QNjpXNETi50MXYSQNZyzd7YVi5UDmy53GjC7i9y1rmuRWd_rGhizRXV4YKLrb8G_ezIrE1gVkiuY_GzFGk6lfikBgmlkgnY0gmlwhIpEeomKbXVsdGlhZGRyc4wACgSKRHqJBh9A3gOCcnOTAAIIAAAAAQACAAMABAAFAAYAB4lzZWNwMjU2azGhA9w1_W3QN9zZw8FcFQT5XWJ7I_qBGXFCxeO5iOBgeWXkg3RjcIJ2X4N1ZHCCIyiFd2FrdTIv"
|
||||
|
||||
# delivery-02.do-ams3.logos.dev.status.im - 16Uiu2HAmMK7PYygBtKUQ8EHp7EfaD3bCEsJrkFooK8RQ2PVpJprH
|
||||
LogosDevDelivery02DoAms3 = "enr:-MG4QO7X4HJ8BfAkbSbtG4uDvX1t4HIjEMTbdh4aYR4EV00cMrpa1NYejjVIGD0SXJGqbrRs2YYf59Me9K92iyyi_X4BgmlkgnY0gmlwhK6KavSKbXVsdGlhZGRyc4wACgSuimr0Bh9A3gOCcnOTAAIIAAAAAQACAAMABAAFAAYAB4lzZWNwMjU2azGhA4ChhnJvGLCZgYfCAn6zGi0_lump80dOnTXuwEdMqnveg3RjcIJ2X4N1ZHCCIyiFd2FrdTIv"
|
||||
|
||||
# delivery-01.gc-us-central1-a.logos.dev.status.im - 16Uiu2HAm4S1JYkuzDKLKQvwgAhZKs9otxXqt8SCGtB4hoJP1S397
|
||||
LogosDevDelivery01GcUsCentral1a = "enr:-MG4QIiRL2QYsAMJuofnJ2ketbMf_vq448kZxa0DGzu_Wj8PW7YdeIFEJbEJapA2K-b_UMC-TdEaQ2LukC9ynyegRQ4BgmlkgnY0gmlwhIh3nFeKbXVsdGlhZGRyc4wACgSId5xXBh9A3gOCcnOTAAIIAAAAAQACAAMABAAFAAYAB4lzZWNwMjU2azGhAoXPCAUveBrCoOScJxl_jdLrPu4xyzbCmwP_ovGsqNkGg3RjcIJ2X4N1ZHCCIyiFd2FrdTIv"
|
||||
|
||||
# delivery-02.gc-us-central1-a.logos.dev.status.im - 16Uiu2HAm8Y9kgBNtjxvCnf1X6gnZJW5EGE4UwwCL3CCm55TwqBiH
|
||||
LogosDevDelivery02GcUsCentral1a = "enr:-MG4QJ2n_Hkl0_ZaGxK4ye_lmXPCHi8qXISESIucQyrPd0oCOFXZf9ws5gjN3hovMw08GTJSAptX2q0GrrjQS9wOpb8BgmlkgnY0gmlwhCJ7yRmKbXVsdGlhZGRyc4wACgQie8kZBh9A3gOCcnOTAAIIAAAAAQACAAMABAAFAAYAB4lzZWNwMjU2azGhAsLQ0aIXN3XPEkZiqfPGU8aQp-Q8Vx8GoEipJx-uf4Dig3RjcIJ2X4N1ZHCCIyiFd2FrdTIv"
|
||||
|
||||
# delivery-01.ac-cn-hongkong-c.logos.dev.status.im - 16Uiu2HAm8YokiNun9BkeA1ZRmhLbtNUvcwRr64F69tYj9fkGyuEP
|
||||
LogosDevDelivery01AcCnHongkongC = "enr:-MG4QFQc9ULfGsloUceZk2i1XiFDuZ4zDoMWIkfOrQQ2rlW_ZLIN7CAzw67W7oGSQ4-sJ3Ehat6-tKxJ3Vj428TlWyABgmlkgnY0gmlwhC_ygr2KbXVsdGlhZGRyc4wACgQv8oK9Bh9A3gOCcnOTAAIIAAAAAQACAAMABAAFAAYAB4lzZWNwMjU2azGhAsL7yU6Z4_I47DAMN8zTlJxl1DF0GVeBtFXj8uQM5vpog3RjcIJ2X4N1ZHCCIyiFd2FrdTIv"
|
||||
|
||||
# delivery-02.ac-cn-hongkong-c.logos.dev.status.im - 16Uiu2HAkvwhGHKNry6LACrB8TmEFoCJKEX29XR5dDUzk3UT3UNSE
|
||||
LogosDevDelivery02AcCnHongkongC = "enr:-MG4QDnRm93660fPMd0MAwhYIYS1I6YzNI8lYGZP-IoDy6NYSsmgE-m4aIThWuiveMquo8uZz7f4-jpxjYM48kuZONgBgmlkgnY0gmlwhCtjZwqKbXVsdGlhZGRyc4wACgQrY2cKBh9A3gOCcnOTAAIIAAAAAQACAAMABAAFAAYAB4lzZWNwMjU2azGhAhaMkDdziqKJqwaxdMWwq9A21gF7Wp5eCfDA6VmJkccDg3RjcIJ2X4N1ZHCCIyiFd2FrdTIv"
|
||||
|
||||
# Logos.dev fleet static peers
|
||||
LogosDevStaticPeers* = @[
|
||||
LogosDevDelivery01DoAms3,
|
||||
LogosDevDelivery02DoAms3,
|
||||
LogosDevDelivery01GcUsCentral1a,
|
||||
LogosDevDelivery02GcUsCentral1a,
|
||||
LogosDevDelivery01AcCnHongkongC,
|
||||
LogosDevDelivery02AcCnHongkongC,
|
||||
]
|
||||
|
||||
|
||||
type QueueRef* = ref object
|
||||
queue*: AsyncQueue[ChatPayload]
|
||||
@ -58,18 +89,18 @@ type
|
||||
cfg*: WakuConfig
|
||||
node*: WakuNode
|
||||
dispatchQueues: seq[QueueRef]
|
||||
staticPeerList: seq[string]
|
||||
staticPeerList: seq[RemotePeerInfo]
|
||||
|
||||
|
||||
proc DefaultConfig*(): WakuConfig =
|
||||
let nodeKey = crypto.PrivateKey.random(Secp256k1, crypto.newRng()[])[]
|
||||
let clusterId = 42'u16
|
||||
let shardId = 2'u16
|
||||
let clusterId = 2'u16
|
||||
let shardId = 1'u16
|
||||
var port: uint16 = 50000'u16 + uint16(rand(200))
|
||||
|
||||
result = WakuConfig(nodeKey: nodeKey, port: port, clusterId: clusterId,
|
||||
shardId: @[shardId], pubsubTopic: &"/waku/2/rs/{clusterId}/{shardId}",
|
||||
staticPeers: @[])
|
||||
staticPeers: LogosDevStaticPeers)
|
||||
|
||||
|
||||
proc sendBytes*(client: WakuClient, contentTopic: string,
|
||||
@ -116,19 +147,17 @@ proc buildWakuNode(cfg: WakuConfig): WakuNode =
|
||||
|
||||
proc taskKeepAlive(client: WakuClient) {.async.} =
|
||||
while true:
|
||||
for peerStr in client.staticPeerList:
|
||||
let peer = parsePeerInfo(peerStr).get()
|
||||
|
||||
debug "maintaining subscription", peer = peerStr
|
||||
for peerInfo in client.staticPeerList:
|
||||
debug "maintaining subscription", peerId = $peerInfo.peerId
|
||||
# First use filter-ping to check if we have an active subscription
|
||||
let pingRes = await client.node.wakuFilterClient.ping(peer)
|
||||
let pingRes = await client.node.wakuFilterClient.ping(peerInfo)
|
||||
if pingRes.isErr():
|
||||
# No subscription found. Let's subscribe.
|
||||
warn "no subscription found. Sending subscribe request"
|
||||
|
||||
# TODO: Use filter. Removing this stops relay from working so keeping for now
|
||||
let subscribeRes = await client.node.wakuFilterClient.subscribe(
|
||||
peer, client.cfg.pubsubTopic, @[FilterContentTopic]
|
||||
peerInfo, client.cfg.pubsubTopic, @[FilterContentTopic]
|
||||
)
|
||||
|
||||
if subscribeRes.isErr():
|
||||
@ -153,16 +182,12 @@ proc start*(client: WakuClient) {.async.} =
|
||||
|
||||
client.node.peerManager.start()
|
||||
|
||||
let dnsDiscoveryUrl = "enrtree://AKHMR2NCDFW5GI7TQIET3Y4SOKAZPDOMIHQACRKNILMGUBER4XW6K@logos-chat.nodes.status.im"
|
||||
let nameServer = parseIpAddress("1.1.1.1")
|
||||
let discoveredPeers = await retrieveDynamicBootstrapNodes(dnsDiscoveryUrl, @[nameServer])
|
||||
if discoveredPeers.isOk:
|
||||
info "Connecting to discovered peers"
|
||||
let remotePeers = discoveredPeers.get()
|
||||
info "Discovered and connecting to peers", peerCount = remotePeers.len
|
||||
asyncSpawn client.node.connectToNodes(remotePeers)
|
||||
# Connect to all configured static peers
|
||||
if client.staticPeerList.len > 0:
|
||||
info "Connecting to static peers", peerCount = client.staticPeerList.len
|
||||
asyncSpawn client.node.connectToNodes(client.staticPeerList)
|
||||
else:
|
||||
warn "Failed to find peers via DNS discovery", error = discoveredPeers.error
|
||||
warn "No valid static peers configured"
|
||||
|
||||
let subscription: SubscriptionEvent = (kind: PubsubSub, topic:
|
||||
client.cfg.pubsubTopic)
|
||||
@ -185,8 +210,21 @@ proc start*(client: WakuClient) {.async.} =
|
||||
await allFutures(taskKeepAlive(client))
|
||||
|
||||
proc initWakuClient*(cfg: WakuConfig): WakuClient =
|
||||
# Parse ENRs from static peers configuration
|
||||
var peerInfos: seq[RemotePeerInfo] = @[]
|
||||
for enrStr in cfg.staticPeers:
|
||||
let enrRecord = eth_enr.Record.fromURI(enrStr).valueOr:
|
||||
error "Failed to parse ENR in initWakuClient", enr = enrStr, err = error
|
||||
continue
|
||||
|
||||
let peerInfo = enrRecord.toRemotePeerInfo().valueOr:
|
||||
error "Failed to convert ENR to PeerInfo in initWakuClient", enr = enrStr, err = error
|
||||
continue
|
||||
|
||||
peerInfos.add(peerInfo)
|
||||
|
||||
result = WakuClient(cfg: cfg, node: buildWakuNode(cfg), dispatchQueues: @[],
|
||||
staticPeerList: cfg.staticPeers)
|
||||
staticPeerList: peerInfos)
|
||||
|
||||
proc addDispatchQueue*(client: var WakuClient, queue: QueueRef) =
|
||||
client.dispatchQueues.add(queue)
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user