Skip to content

Commit f7b4244

Browse files
chore: Timestamp now in publish (#3373)
* Ensure timestamp is always set in WakuMessage when publishing
1 parent 5ab69ed commit f7b4244

File tree

7 files changed

+69
-8
lines changed

7 files changed

+69
-8
lines changed

tests/waku_lightpush/lightpush_utils.nim

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{.used.}
22

3-
import std/options, chronos, libp2p/crypto/crypto
3+
import std/options, chronos, chronicles, libp2p/crypto/crypto
44

55
import
66
waku/node/peer_manager,

tests/waku_lightpush/test_client.nim

Lines changed: 39 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,11 @@
11
{.used.}
22

3-
import std/[options, strscans], testutils/unittests, chronos, libp2p/crypto/crypto
3+
import
4+
std/[options, strscans],
5+
testutils/unittests,
6+
chronos,
7+
chronicles,
8+
libp2p/crypto/crypto
49

510
import
611
waku/[
@@ -307,6 +312,39 @@ suite "Waku Lightpush Client":
307312
# Cleanup
308313
await serverSwitch2.stop()
309314

315+
asyncTest "Check timestamp is not zero":
316+
## This test validates that, even the generated message has a timestamp of 0,
317+
## the node will eventually set a timestamp when publishing the message.
318+
let
319+
zeroTimestamp = 0
320+
meta = "TEST-META"
321+
message = fakeWakuMessage(
322+
payloads.ALPHABETIC, content_topics.CURRENT, meta, zeroTimestamp
323+
)
324+
325+
# When publishing a valid payload
326+
let publishResponse =
327+
await client.publish(some(pubsubTopic), message, serverRemotePeerInfo)
328+
329+
# Then the message is received by the server
330+
discard await handlerFuture.withTimeout(FUTURE_TIMEOUT)
331+
assertResultOk publishResponse
332+
check handlerFuture.finished()
333+
334+
# And the message is received with the correct topic and payload
335+
let (readPubsubTopic, readMessage) = handlerFuture.read()
336+
337+
check:
338+
pubsubTopic == readPubsubTopic
339+
message.payload == readMessage.payload
340+
message.contentTopic == readMessage.contentTopic
341+
message.meta == readMessage.meta
342+
message.timestamp != readMessage.timestamp
343+
message.ephemeral == readMessage.ephemeral
344+
message.proof == readMessage.proof
345+
message.version == readMessage.version
346+
readMessage.timestamp > 0
347+
310348
suite "Verification of PushResponse Payload":
311349
asyncTest "Positive Responses":
312350
# When sending a valid PushRequest

tests/waku_relay/test_wakunode_relay.nim

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -90,6 +90,7 @@ suite "WakuNode - Relay":
9090
topic == $shard
9191
msg.contentTopic == contentTopic
9292
msg.payload == payload
93+
msg.timestamp > 0
9394
completionFut.complete(true)
9495

9596
node3.subscribe((kind: PubsubSub, topic: $shard), some(relayHandler))
@@ -279,6 +280,7 @@ suite "WakuNode - Relay":
279280
topic == $shard
280281
msg.contentTopic == contentTopic
281282
msg.payload == payload
283+
msg.timestamp > 0
282284
completionFut.complete(true)
283285

284286
node1.subscribe((kind: PubsubSub, topic: $shard), some(relayHandler))
@@ -327,6 +329,7 @@ suite "WakuNode - Relay":
327329
topic == $shard
328330
msg.contentTopic == contentTopic
329331
msg.payload == payload
332+
msg.timestamp > 0
330333
completionFut.complete(true)
331334

332335
node1.subscribe((kind: PubsubSub, topic: $shard), some(relayHandler))
@@ -379,6 +382,7 @@ suite "WakuNode - Relay":
379382
topic == $shard
380383
msg.contentTopic == contentTopic
381384
msg.payload == payload
385+
msg.timestamp > 0
382386
completionFut.complete(true)
383387

384388
node1.subscribe((kind: PubsubSub, topic: $shard), some(relayHandler))
@@ -429,6 +433,7 @@ suite "WakuNode - Relay":
429433
topic == $shard
430434
msg.contentTopic == contentTopic
431435
msg.payload == payload
436+
msg.timestamp > 0
432437
completionFut.complete(true)
433438

434439
node1.subscribe((kind: PubsubSub, topic: $shard), some(relayHandler))
@@ -487,6 +492,7 @@ suite "WakuNode - Relay":
487492
topic == $shard
488493
msg.contentTopic == contentTopic
489494
msg.payload == payload
495+
msg.timestamp > 0
490496
completionFut.complete(true)
491497

492498
node1.subscribe((kind: PubsubSub, topic: $shard), some(relayHandler))

tests/waku_rln_relay/test_wakunode_rln_relay.nim

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -451,9 +451,9 @@ procSuite "WakuNode - RLN relay":
451451
completionFut1.complete(true)
452452
if msg == wm2:
453453
completionFut2.complete(true)
454-
if msg == wm3:
454+
if msg.payload == wm3.payload:
455455
completionFut3.complete(true)
456-
if msg == wm4:
456+
if msg.payload == wm4.payload:
457457
completionFut4.complete(true)
458458

459459
# mount the relay handler for node3

waku/waku_lightpush/client.nim

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -65,9 +65,13 @@ proc sendPushRequest(
6565
proc publish*(
6666
wl: WakuLightPushClient,
6767
pubSubTopic: Option[PubsubTopic] = none(PubsubTopic),
68-
message: WakuMessage,
68+
wakuMessage: WakuMessage,
6969
peer: PeerId | RemotePeerInfo,
7070
): Future[WakuLightPushResult] {.async, gcsafe.} =
71+
var message = wakuMessage
72+
if message.timestamp == 0:
73+
message.timestamp = getNowInNanosecondTime()
74+
7175
when peer is PeerId:
7276
info "publish",
7377
peerId = shortLog(peer),
@@ -88,11 +92,15 @@ proc publish*(
8892
return lightpushSuccessResult(publishedCount)
8993

9094
proc publishToAny*(
91-
wl: WakuLightPushClient, pubSubTopic: PubsubTopic, message: WakuMessage
95+
wl: WakuLightPushClient, pubSubTopic: PubsubTopic, wakuMessage: WakuMessage
9296
): Future[WakuLightPushResult] {.async, gcsafe.} =
9397
## This proc is similar to the publish one but in this case
9498
## we don't specify a particular peer and instead we get it from peer manager
9599

100+
var message = wakuMessage
101+
if message.timestamp == 0:
102+
message.timestamp = getNowInNanosecondTime()
103+
96104
info "publishToAny", msg_hash = computeMessageHash(pubsubTopic, message).to0xHex
97105

98106
let peer = wl.peerManager.selectPeer(WakuLightPushCodec).valueOr:

waku/waku_lightpush_legacy/client.nim

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -72,10 +72,15 @@ proc sendPushRequest(
7272
proc publish*(
7373
wl: WakuLegacyLightPushClient,
7474
pubSubTopic: PubsubTopic,
75-
message: WakuMessage,
75+
wakuMessage: WakuMessage,
7676
peer: RemotePeerInfo,
7777
): Future[WakuLightPushResult[string]] {.async, gcsafe.} =
7878
## On success, returns the msg_hash of the published message
79+
80+
var message = wakuMessage
81+
if message.timestamp == 0:
82+
message.timestamp = getNowInNanosecondTime()
83+
7984
let msg_hash_hex_str = computeMessageHash(pubsubTopic, message).to0xHex()
8085
let pushRequest = PushRequest(pubSubTopic: pubSubTopic, message: message)
8186
?await wl.sendPushRequest(pushRequest, peer)

waku/waku_relay/protocol.nim

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -533,11 +533,15 @@ proc unsubscribe*(w: WakuRelay, pubsubTopic: PubsubTopic, handler: TopicHandler)
533533
procCall GossipSub(w).unsubscribe(pubsubTopic, handler)
534534

535535
proc publish*(
536-
w: WakuRelay, pubsubTopic: PubsubTopic, message: WakuMessage
536+
w: WakuRelay, pubsubTopic: PubsubTopic, wakuMessage: WakuMessage
537537
): Future[Result[int, PublishOutcome]] {.async.} =
538538
if pubsubTopic.isEmptyOrWhitespace():
539539
return err(NoTopicSpecified)
540540

541+
var message = wakuMessage
542+
if message.timestamp == 0:
543+
message.timestamp = getNowInNanosecondTime()
544+
541545
let data = message.encode().buffer
542546

543547
let msgHash = computeMessageHash(pubsubTopic, message).to0xHex()

0 commit comments

Comments
 (0)