diff --git a/waku/factory/internal_config.nim b/waku/factory/internal_config.nim index 87be67711..c07020ca6 100644 --- a/waku/factory/internal_config.nim +++ b/waku/factory/internal_config.nim @@ -11,6 +11,7 @@ import ../common/utils/nat, ../node/config, ../waku_enr/capabilities, + ../waku_enr/mix, ../waku_enr, ../waku_core @@ -33,6 +34,9 @@ proc enrConfiguration*( ).isOkOr: return err("could not initialize ENR with shards") + if conf.mix and conf.mixKey.isSome(): + enrBuilder.withMixKey(conf.mixKey.get()) + let recordRes = enrBuilder.build() let record = if recordRes.isErr(): diff --git a/waku/waku_enr/mix.nim b/waku/waku_enr/mix.nim new file mode 100644 index 000000000..4399d02af --- /dev/null +++ b/waku/waku_enr/mix.nim @@ -0,0 +1,22 @@ +{.push raises: [].} + +import + std/[options], + results, + libp2p/crypto/curve25519, + nimcrypto/utils as ncrutils + +import ../common/enr + +const MixKeyEnrField* = "mix-key" + +func withMixKey*(builder: var EnrBuilder, mixPrivKey:string) = + let mixKey = intoCurve25519Key(ncrutils.fromHex(mixPrivKey)) + let mixPubKey = public(mixKey) + builder.addFieldPair(MixKeyEnrField, getBytes(mixPubKey)) + +func mixKey*(record: TypedRecord): Option[seq[byte]] = + let field = record.tryGet(MixKeyEnrField, seq[byte]) + if field.isNone(): + return none(seq[byte]) + return field diff --git a/waku/waku_lightpush/client.nim b/waku/waku_lightpush/client.nim index 9e7167dd7..c50f08641 100644 --- a/waku/waku_lightpush/client.nim +++ b/waku/waku_lightpush/client.nim @@ -114,15 +114,19 @@ proc publishToAny*( proc publishWithConn*( wl: WakuLightPushClient, pubSubTopic: PubsubTopic, message: WakuMessage, conn: Connection -): Future[WakuLightPushResult[void]] {.async, gcsafe.} = +): Future[WakuLightPushResult] {.async, gcsafe.} = ## This proc is similar to the publish one but in this case ## we use existing connection to publish. info "publishWithConn", msg_hash = computeMessageHash(pubsubTopic, message).to0xHex - let pushRequest = PushRequest(pubSubTopic: pubSubTopic, message: message) - let rpc = PushRPC(requestId: generateRequestId(wl.rng), request: some(pushRequest)) - await conn.writeLP(rpc.encode().buffer) + let pushRequest = LightpushRequest( + requestId: generateRequestId(wl.rng), + pubSubTopic: some(pubSubTopic), + message: message, + ) + + await conn.writeLP(pushRequest.encode().buffer) for obs in wl.publishObservers: obs.onMessagePublished(pubSubTopic, message)