From 881d59355d103eb2579fc4927e1f34e49c453ab5 Mon Sep 17 00:00:00 2001 From: Keshav Gupta Date: Wed, 20 Jul 2022 04:00:29 +0200 Subject: [PATCH 01/29] Persisting Credentials implemented by writing json of keypair and rlnindex to files --- .gitignore | 6 ++- .../waku_rln_relay/waku_rln_relay_utils.nim | 41 +++++++++++++++++-- 2 files changed, 43 insertions(+), 4 deletions(-) diff --git a/.gitignore b/.gitignore index 7d160e9634..2219324f0b 100644 --- a/.gitignore +++ b/.gitignore @@ -36,4 +36,8 @@ node_modules/ /.update.timestamp # Ignore Jetbrains IDE files -.idea/ \ No newline at end of file +.idea/ +cats.txt +keyPair +keyPair.txt +rlnIndex.txt diff --git a/waku/v2/protocol/waku_rln_relay/waku_rln_relay_utils.nim b/waku/v2/protocol/waku_rln_relay/waku_rln_relay_utils.nim index b1f08b05de..9691e83893 100644 --- a/waku/v2/protocol/waku_rln_relay/waku_rln_relay_utils.nim +++ b/waku/v2/protocol/waku_rln_relay/waku_rln_relay_utils.nim @@ -11,10 +11,13 @@ import libp2p/protocols/pubsub/pubsub, stew/results, stew/[byteutils, arrayops, endians2], - rln, + rln, + std/streams, waku_rln_relay_types, ../../node/[wakunode2_types,config], - ../waku_message + ../waku_message, + json, + std/os @@ -784,9 +787,18 @@ proc mountRlnRelayDynamic*(node: WakuNode, rlnIndex = regIndexRes.value debug "peer is successfully registered into the membership contract" else: + info "Peer is already registered to the membership contract" keyPair = memKeyPair.get() rlnIndex = memIndex.get() + #Write KeyPair + let kp = %keyPair + writeFile("keyPair.txt", pretty(kp)) + + #Write rlnIndex + let ri = %rlnIndex + writeFile("rlnIndex.txt", pretty(ri)) + # create the WakuRLNRelay var rlnPeer = WakuRLNRelay(membershipKeyPair: keyPair, membershipIndex: rlnIndex, @@ -818,7 +830,7 @@ proc mountRlnRelayDynamic*(node: WakuNode, node.wakuRlnRelay = rlnPeer -proc mountRlnRelay*(node: WakuNode, conf: WakuNodeConf) {.raises: [Defect, ValueError, IOError, CatchableError].} = +proc mountRlnRelay*(node: WakuNode, conf: WakuNodeConf) {.raises: [Defect, ValueError, IOError, CatchableError, Exception].} = if not conf.rlnRelayDynamic: info " setting up waku-rln-relay in on-chain mode... " # set up rln relay inputs @@ -861,8 +873,31 @@ proc mountRlnRelay*(node: WakuNode, conf: WakuNodeConf) {.raises: [Defect, Value let memKeyPair = keyPair.toMembershipKeyPairs()[0] # mount the rln relay protocol in the on-chain/dynamic mode waitFor node.mountRlnRelayDynamic(memContractAddr = ethMemContractAddress, ethClientAddr = ethClientAddr, memKeyPair = some(memKeyPair), memIndex = some(rlnRelayIndex), ethAccAddr = ethAccountAddr, ethAccountPrivKey = ethAccountPrivKey, pubsubTopic = conf.rlnRelayPubsubTopic, contentTopic = conf.rlnRelayContentTopic) + elif fileExists("keyPair.txt") and fileExists("rlnIndex.txt"): + info "keyPair and rlnIndex files exist" + # This will read the entire file into the string entireFile + let entireKeyPairFile = readFile("keyPair.txt") + # echo entireKeyPairFile # prints the entire file + + let jsonObjectKeyPair = parseJson(entireKeyPairFile) + let deserializedKeyPair = to(jsonObjectKeyPair, MembershipKeyPair) + + info "Deserialized key pair" + echo deserializedKeyPair # prints the deserialized key pair + + # This will read the entire file into the string entireFile + let entireRlnIndexFile = readFile("rlnIndex.txt") + # echo entireRlnIndexFile # prints the entire file + + let jsonObjectRlnIndex = parseJson(entireRlnIndexFile) + let deserializedRlnIndex = to(jsonObjectRlnIndex, MembershipIndex) + + info "Deserialized rln index" + echo deserializedRlnIndex # prints the deserialized key pairs + waitFor node.mountRlnRelayDynamic(memContractAddr = ethMemContractAddress, ethClientAddr = ethClientAddr, memKeyPair = some(deserializedKeyPair), memIndex = some(deserializedRlnIndex), ethAccAddr = ethAccountAddr, ethAccountPrivKey = ethAccountPrivKey, pubsubTopic = conf.rlnRelayPubsubTopic, contentTopic = conf.rlnRelayContentTopic) else: # no rln credential is provided # mount the rln relay protocol in the on-chain/dynamic mode + info("no rln credential is provided") waitFor node.mountRlnRelayDynamic(memContractAddr = ethMemContractAddress, ethClientAddr = ethClientAddr, ethAccAddr = ethAccountAddr, ethAccountPrivKey = ethAccountPrivKey, pubsubTopic = conf.rlnRelayPubsubTopic, contentTopic = conf.rlnRelayContentTopic) From b5533d234404dfa2e1879f9c9cd95d9daaca0dcd Mon Sep 17 00:00:00 2001 From: Keshav Gupta Date: Wed, 20 Jul 2022 14:05:22 +0200 Subject: [PATCH 02/29] Removing testing files and ignores --- .gitignore | 2 -- 1 file changed, 2 deletions(-) diff --git a/.gitignore b/.gitignore index 2219324f0b..2e92c01171 100644 --- a/.gitignore +++ b/.gitignore @@ -37,7 +37,5 @@ node_modules/ # Ignore Jetbrains IDE files .idea/ -cats.txt -keyPair keyPair.txt rlnIndex.txt From 942da4e44fc6d98bbd40ce95568292d1d209981a Mon Sep 17 00:00:00 2001 From: Keshav Gupta Date: Wed, 20 Jul 2022 18:34:24 +0200 Subject: [PATCH 03/29] Update waku/v2/protocol/waku_rln_relay/waku_rln_relay_utils.nim Co-authored-by: Daniel Kaiser --- waku/v2/protocol/waku_rln_relay/waku_rln_relay_utils.nim | 1 - 1 file changed, 1 deletion(-) diff --git a/waku/v2/protocol/waku_rln_relay/waku_rln_relay_utils.nim b/waku/v2/protocol/waku_rln_relay/waku_rln_relay_utils.nim index 9691e83893..3724731e86 100644 --- a/waku/v2/protocol/waku_rln_relay/waku_rln_relay_utils.nim +++ b/waku/v2/protocol/waku_rln_relay/waku_rln_relay_utils.nim @@ -877,7 +877,6 @@ proc mountRlnRelay*(node: WakuNode, conf: WakuNodeConf) {.raises: [Defect, Value info "keyPair and rlnIndex files exist" # This will read the entire file into the string entireFile let entireKeyPairFile = readFile("keyPair.txt") - # echo entireKeyPairFile # prints the entire file let jsonObjectKeyPair = parseJson(entireKeyPairFile) let deserializedKeyPair = to(jsonObjectKeyPair, MembershipKeyPair) From f85da557d2651108ba4b663c8e557af770ed091a Mon Sep 17 00:00:00 2001 From: Keshav Gupta Date: Wed, 20 Jul 2022 18:34:32 +0200 Subject: [PATCH 04/29] Update waku/v2/protocol/waku_rln_relay/waku_rln_relay_utils.nim Co-authored-by: Daniel Kaiser --- waku/v2/protocol/waku_rln_relay/waku_rln_relay_utils.nim | 1 - 1 file changed, 1 deletion(-) diff --git a/waku/v2/protocol/waku_rln_relay/waku_rln_relay_utils.nim b/waku/v2/protocol/waku_rln_relay/waku_rln_relay_utils.nim index 3724731e86..b53df9de4a 100644 --- a/waku/v2/protocol/waku_rln_relay/waku_rln_relay_utils.nim +++ b/waku/v2/protocol/waku_rln_relay/waku_rln_relay_utils.nim @@ -886,7 +886,6 @@ proc mountRlnRelay*(node: WakuNode, conf: WakuNodeConf) {.raises: [Defect, Value # This will read the entire file into the string entireFile let entireRlnIndexFile = readFile("rlnIndex.txt") - # echo entireRlnIndexFile # prints the entire file let jsonObjectRlnIndex = parseJson(entireRlnIndexFile) let deserializedRlnIndex = to(jsonObjectRlnIndex, MembershipIndex) From 68ee74d636b35302417575c62ed5fc81d7f58307 Mon Sep 17 00:00:00 2001 From: Keshav Gupta Date: Thu, 21 Jul 2022 09:47:24 +0200 Subject: [PATCH 05/29] Comments --- .../protocol/waku_rln_relay/waku_rln_relay_utils.nim | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/waku/v2/protocol/waku_rln_relay/waku_rln_relay_utils.nim b/waku/v2/protocol/waku_rln_relay/waku_rln_relay_utils.nim index b53df9de4a..189ae7edb5 100644 --- a/waku/v2/protocol/waku_rln_relay/waku_rln_relay_utils.nim +++ b/waku/v2/protocol/waku_rln_relay/waku_rln_relay_utils.nim @@ -875,14 +875,14 @@ proc mountRlnRelay*(node: WakuNode, conf: WakuNodeConf) {.raises: [Defect, Value waitFor node.mountRlnRelayDynamic(memContractAddr = ethMemContractAddress, ethClientAddr = ethClientAddr, memKeyPair = some(memKeyPair), memIndex = some(rlnRelayIndex), ethAccAddr = ethAccountAddr, ethAccountPrivKey = ethAccountPrivKey, pubsubTopic = conf.rlnRelayPubsubTopic, contentTopic = conf.rlnRelayContentTopic) elif fileExists("keyPair.txt") and fileExists("rlnIndex.txt"): info "keyPair and rlnIndex files exist" - # This will read the entire file into the string entireFile + let entireKeyPairFile = readFile("keyPair.txt") let jsonObjectKeyPair = parseJson(entireKeyPairFile) let deserializedKeyPair = to(jsonObjectKeyPair, MembershipKeyPair) - info "Deserialized key pair" - echo deserializedKeyPair # prints the deserialized key pair + info "Deserialized key pair", keyPair=deserializedKeyPair + echo deserializedKeyPair # This will read the entire file into the string entireFile let entireRlnIndexFile = readFile("rlnIndex.txt") @@ -890,8 +890,8 @@ proc mountRlnRelay*(node: WakuNode, conf: WakuNodeConf) {.raises: [Defect, Value let jsonObjectRlnIndex = parseJson(entireRlnIndexFile) let deserializedRlnIndex = to(jsonObjectRlnIndex, MembershipIndex) - info "Deserialized rln index" - echo deserializedRlnIndex # prints the deserialized key pairs + info "Deserialized rln index", rlnIndex=deserializedRlnIndex + echo deserializedRlnIndex waitFor node.mountRlnRelayDynamic(memContractAddr = ethMemContractAddress, ethClientAddr = ethClientAddr, memKeyPair = some(deserializedKeyPair), memIndex = some(deserializedRlnIndex), ethAccAddr = ethAccountAddr, ethAccountPrivKey = ethAccountPrivKey, pubsubTopic = conf.rlnRelayPubsubTopic, contentTopic = conf.rlnRelayContentTopic) else: # no rln credential is provided From 15f4ee7c5ef1e6ba548458d637ca349009c1ae0c Mon Sep 17 00:00:00 2001 From: Keshav Gupta Date: Thu, 21 Jul 2022 09:48:55 +0200 Subject: [PATCH 06/29] Comments --- waku/v2/protocol/waku_rln_relay/waku_rln_relay_utils.nim | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/waku/v2/protocol/waku_rln_relay/waku_rln_relay_utils.nim b/waku/v2/protocol/waku_rln_relay/waku_rln_relay_utils.nim index 189ae7edb5..4338f6c3c2 100644 --- a/waku/v2/protocol/waku_rln_relay/waku_rln_relay_utils.nim +++ b/waku/v2/protocol/waku_rln_relay/waku_rln_relay_utils.nim @@ -884,7 +884,7 @@ proc mountRlnRelay*(node: WakuNode, conf: WakuNodeConf) {.raises: [Defect, Value info "Deserialized key pair", keyPair=deserializedKeyPair echo deserializedKeyPair - # This will read the entire file into the string entireFile + let entireRlnIndexFile = readFile("rlnIndex.txt") let jsonObjectRlnIndex = parseJson(entireRlnIndexFile) From 966eb5b3c79d21b1e8a4384b7b824e9cce427529 Mon Sep 17 00:00:00 2001 From: Keshav Gupta Date: Thu, 21 Jul 2022 12:11:37 +0200 Subject: [PATCH 07/29] Security warning in comments --- waku/v2/protocol/waku_rln_relay/waku_rln_relay_utils.nim | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/waku/v2/protocol/waku_rln_relay/waku_rln_relay_utils.nim b/waku/v2/protocol/waku_rln_relay/waku_rln_relay_utils.nim index 4338f6c3c2..828f8bce74 100644 --- a/waku/v2/protocol/waku_rln_relay/waku_rln_relay_utils.nim +++ b/waku/v2/protocol/waku_rln_relay/waku_rln_relay_utils.nim @@ -799,6 +799,9 @@ proc mountRlnRelayDynamic*(node: WakuNode, let ri = %rlnIndex writeFile("rlnIndex.txt", pretty(ri)) + #Since the files are stored as a raw text file, it is highly susceptible to theft. + #The files needs some encryption to resolve this. + # create the WakuRLNRelay var rlnPeer = WakuRLNRelay(membershipKeyPair: keyPair, membershipIndex: rlnIndex, @@ -875,6 +878,9 @@ proc mountRlnRelay*(node: WakuNode, conf: WakuNodeConf) {.raises: [Defect, Value waitFor node.mountRlnRelayDynamic(memContractAddr = ethMemContractAddress, ethClientAddr = ethClientAddr, memKeyPair = some(memKeyPair), memIndex = some(rlnRelayIndex), ethAccAddr = ethAccountAddr, ethAccountPrivKey = ethAccountPrivKey, pubsubTopic = conf.rlnRelayPubsubTopic, contentTopic = conf.rlnRelayContentTopic) elif fileExists("keyPair.txt") and fileExists("rlnIndex.txt"): info "keyPair and rlnIndex files exist" + #With regards to printing the keys, it is purely for debugging purposes so that the user becomes explicitly aware of the current keys in use when nwaku is started. + #Note that this is only until the RLN contract being used is the one deployed on Goerli testnet. + #These prints need to omitted once RLN contract is deployed on Ethereum mainnet and using valuable funds for staking. let entireKeyPairFile = readFile("keyPair.txt") From 0e5c725bb804d773b182ea68fc1adb8572c92fff Mon Sep 17 00:00:00 2001 From: Keshav Gupta Date: Thu, 21 Jul 2022 22:12:48 +0200 Subject: [PATCH 08/29] Redundant echos. Omitting unused variables. --- waku/v2/protocol/waku_rln_relay/waku_rln_relay_utils.nim | 8 ++------ 1 file changed, 2 insertions(+), 6 deletions(-) diff --git a/waku/v2/protocol/waku_rln_relay/waku_rln_relay_utils.nim b/waku/v2/protocol/waku_rln_relay/waku_rln_relay_utils.nim index 828f8bce74..0700578b65 100644 --- a/waku/v2/protocol/waku_rln_relay/waku_rln_relay_utils.nim +++ b/waku/v2/protocol/waku_rln_relay/waku_rln_relay_utils.nim @@ -792,12 +792,10 @@ proc mountRlnRelayDynamic*(node: WakuNode, rlnIndex = memIndex.get() #Write KeyPair - let kp = %keyPair - writeFile("keyPair.txt", pretty(kp)) + writeFile("keyPair.txt", pretty(%keyPair)) #Write rlnIndex - let ri = %rlnIndex - writeFile("rlnIndex.txt", pretty(ri)) + writeFile("rlnIndex.txt", pretty(%rlnIndex)) #Since the files are stored as a raw text file, it is highly susceptible to theft. #The files needs some encryption to resolve this. @@ -888,7 +886,6 @@ proc mountRlnRelay*(node: WakuNode, conf: WakuNodeConf) {.raises: [Defect, Value let deserializedKeyPair = to(jsonObjectKeyPair, MembershipKeyPair) info "Deserialized key pair", keyPair=deserializedKeyPair - echo deserializedKeyPair let entireRlnIndexFile = readFile("rlnIndex.txt") @@ -897,7 +894,6 @@ proc mountRlnRelay*(node: WakuNode, conf: WakuNodeConf) {.raises: [Defect, Value let deserializedRlnIndex = to(jsonObjectRlnIndex, MembershipIndex) info "Deserialized rln index", rlnIndex=deserializedRlnIndex - echo deserializedRlnIndex waitFor node.mountRlnRelayDynamic(memContractAddr = ethMemContractAddress, ethClientAddr = ethClientAddr, memKeyPair = some(deserializedKeyPair), memIndex = some(deserializedRlnIndex), ethAccAddr = ethAccountAddr, ethAccountPrivKey = ethAccountPrivKey, pubsubTopic = conf.rlnRelayPubsubTopic, contentTopic = conf.rlnRelayContentTopic) else: # no rln credential is provided From 81bb5c1cf8d5c503685113f0cfdc8c657460d45d Mon Sep 17 00:00:00 2001 From: Keshav Gupta Date: Thu, 21 Jul 2022 22:11:30 +0200 Subject: [PATCH 09/29] Update waku/v2/protocol/waku_rln_relay/waku_rln_relay_utils.nim Co-authored-by: Hanno Cornelius <68783915+jm-clius@users.noreply.github.com> --- waku/v2/protocol/waku_rln_relay/waku_rln_relay_utils.nim | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/waku/v2/protocol/waku_rln_relay/waku_rln_relay_utils.nim b/waku/v2/protocol/waku_rln_relay/waku_rln_relay_utils.nim index 0700578b65..65814e3192 100644 --- a/waku/v2/protocol/waku_rln_relay/waku_rln_relay_utils.nim +++ b/waku/v2/protocol/waku_rln_relay/waku_rln_relay_utils.nim @@ -898,6 +898,6 @@ proc mountRlnRelay*(node: WakuNode, conf: WakuNodeConf) {.raises: [Defect, Value else: # no rln credential is provided # mount the rln relay protocol in the on-chain/dynamic mode - info("no rln credential is provided") + info "no rln credential is provided" waitFor node.mountRlnRelayDynamic(memContractAddr = ethMemContractAddress, ethClientAddr = ethClientAddr, ethAccAddr = ethAccountAddr, ethAccountPrivKey = ethAccountPrivKey, pubsubTopic = conf.rlnRelayPubsubTopic, contentTopic = conf.rlnRelayContentTopic) From a004b52b287bc47681b35d9d613f278f84b45087 Mon Sep 17 00:00:00 2001 From: Keshav Gupta Date: Thu, 21 Jul 2022 22:29:01 +0200 Subject: [PATCH 10/29] Limit line lengths using line breaks and indents --- waku/v2/protocol/waku_rln_relay/waku_rln_relay_utils.nim | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/waku/v2/protocol/waku_rln_relay/waku_rln_relay_utils.nim b/waku/v2/protocol/waku_rln_relay/waku_rln_relay_utils.nim index 65814e3192..fe04926dec 100644 --- a/waku/v2/protocol/waku_rln_relay/waku_rln_relay_utils.nim +++ b/waku/v2/protocol/waku_rln_relay/waku_rln_relay_utils.nim @@ -894,10 +894,14 @@ proc mountRlnRelay*(node: WakuNode, conf: WakuNodeConf) {.raises: [Defect, Value let deserializedRlnIndex = to(jsonObjectRlnIndex, MembershipIndex) info "Deserialized rln index", rlnIndex=deserializedRlnIndex - waitFor node.mountRlnRelayDynamic(memContractAddr = ethMemContractAddress, ethClientAddr = ethClientAddr, memKeyPair = some(deserializedKeyPair), memIndex = some(deserializedRlnIndex), ethAccAddr = ethAccountAddr, ethAccountPrivKey = ethAccountPrivKey, pubsubTopic = conf.rlnRelayPubsubTopic, contentTopic = conf.rlnRelayContentTopic) + waitFor node.mountRlnRelayDynamic(memContractAddr = ethMemContractAddress, ethClientAddr = ethClientAddr, + memKeyPair = some(deserializedKeyPair), memIndex = some(deserializedRlnIndex), ethAccAddr = ethAccountAddr, + ethAccountPrivKey = ethAccountPrivKey, pubsubTopic = conf.rlnRelayPubsubTopic, contentTopic = conf.rlnRelayContentTopic) else: # no rln credential is provided # mount the rln relay protocol in the on-chain/dynamic mode info "no rln credential is provided" - waitFor node.mountRlnRelayDynamic(memContractAddr = ethMemContractAddress, ethClientAddr = ethClientAddr, ethAccAddr = ethAccountAddr, ethAccountPrivKey = ethAccountPrivKey, pubsubTopic = conf.rlnRelayPubsubTopic, contentTopic = conf.rlnRelayContentTopic) + waitFor node.mountRlnRelayDynamic(memContractAddr = ethMemContractAddress, ethClientAddr = ethClientAddr, + ethAccAddr = ethAccountAddr, ethAccountPrivKey = ethAccountPrivKey, pubsubTopic = conf.rlnRelayPubsubTopic, + contentTopic = conf.rlnRelayContentTopic) From a90e16a37bad6ee0c8802a9c55724e4e52c8f3cf Mon Sep 17 00:00:00 2001 From: Keshav Gupta Date: Fri, 22 Jul 2022 00:05:50 +0200 Subject: [PATCH 11/29] Membership file paths declared as const --- waku/v2/protocol/waku_rln_relay/waku_rln_relay_types.nim | 5 +++++ waku/v2/protocol/waku_rln_relay/waku_rln_relay_utils.nim | 9 ++++----- 2 files changed, 9 insertions(+), 5 deletions(-) diff --git a/waku/v2/protocol/waku_rln_relay/waku_rln_relay_types.nim b/waku/v2/protocol/waku_rln_relay/waku_rln_relay_types.nim index b41f420435..394606f659 100644 --- a/waku/v2/protocol/waku_rln_relay/waku_rln_relay_types.nim +++ b/waku/v2/protocol/waku_rln_relay/waku_rln_relay_types.nim @@ -87,6 +87,11 @@ type WakuRLNRelay* = ref object type MessageValidationResult* {.pure.} = enum Valid, Invalid, Spam +#RLN membership key and index files path +const + KEYPAIR_FILEPATH = "keyPair.txt" + RLN_INDEX_FILEPATH = "rlnIndex.txt" + # inputs of the membership contract constructor # TODO may be able to make these constants private and put them inside the waku_rln_relay_utils const diff --git a/waku/v2/protocol/waku_rln_relay/waku_rln_relay_utils.nim b/waku/v2/protocol/waku_rln_relay/waku_rln_relay_utils.nim index fe04926dec..26384cc974 100644 --- a/waku/v2/protocol/waku_rln_relay/waku_rln_relay_utils.nim +++ b/waku/v2/protocol/waku_rln_relay/waku_rln_relay_utils.nim @@ -792,10 +792,10 @@ proc mountRlnRelayDynamic*(node: WakuNode, rlnIndex = memIndex.get() #Write KeyPair - writeFile("keyPair.txt", pretty(%keyPair)) + writeFile(KEYPAIR_FILEPATH, pretty(%keyPair)) #Write rlnIndex - writeFile("rlnIndex.txt", pretty(%rlnIndex)) + writeFile(RLN_INDEX_FILEPATH, pretty(%rlnIndex)) #Since the files are stored as a raw text file, it is highly susceptible to theft. #The files needs some encryption to resolve this. @@ -830,7 +830,6 @@ proc mountRlnRelayDynamic*(node: WakuNode, node.wakuRlnRelay = rlnPeer - proc mountRlnRelay*(node: WakuNode, conf: WakuNodeConf) {.raises: [Defect, ValueError, IOError, CatchableError, Exception].} = if not conf.rlnRelayDynamic: info " setting up waku-rln-relay in on-chain mode... " @@ -880,7 +879,7 @@ proc mountRlnRelay*(node: WakuNode, conf: WakuNodeConf) {.raises: [Defect, Value #Note that this is only until the RLN contract being used is the one deployed on Goerli testnet. #These prints need to omitted once RLN contract is deployed on Ethereum mainnet and using valuable funds for staking. - let entireKeyPairFile = readFile("keyPair.txt") + let entireKeyPairFile = readFile(KEYPAIR_FILEPATH) let jsonObjectKeyPair = parseJson(entireKeyPairFile) let deserializedKeyPair = to(jsonObjectKeyPair, MembershipKeyPair) @@ -888,7 +887,7 @@ proc mountRlnRelay*(node: WakuNode, conf: WakuNodeConf) {.raises: [Defect, Value info "Deserialized key pair", keyPair=deserializedKeyPair - let entireRlnIndexFile = readFile("rlnIndex.txt") + let entireRlnIndexFile = readFile(RLN_INDEX_FILEPATH) let jsonObjectRlnIndex = parseJson(entireRlnIndexFile) let deserializedRlnIndex = to(jsonObjectRlnIndex, MembershipIndex) From b37541862be5c787e83dd97b09a0531e76be96f3 Mon Sep 17 00:00:00 2001 From: Keshav Gupta Date: Fri, 22 Jul 2022 00:08:41 +0200 Subject: [PATCH 12/29] Const fix --- waku/v2/protocol/waku_rln_relay/waku_rln_relay_types.nim | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/waku/v2/protocol/waku_rln_relay/waku_rln_relay_types.nim b/waku/v2/protocol/waku_rln_relay/waku_rln_relay_types.nim index 394606f659..978769d069 100644 --- a/waku/v2/protocol/waku_rln_relay/waku_rln_relay_types.nim +++ b/waku/v2/protocol/waku_rln_relay/waku_rln_relay_types.nim @@ -89,8 +89,8 @@ type MessageValidationResult* {.pure.} = enum #RLN membership key and index files path const - KEYPAIR_FILEPATH = "keyPair.txt" - RLN_INDEX_FILEPATH = "rlnIndex.txt" + KEYPAIR_FILEPATH* = "keyPair.txt" + RLN_INDEX_FILEPATH* = "rlnIndex.txt" # inputs of the membership contract constructor # TODO may be able to make these constants private and put them inside the waku_rln_relay_utils From 6236dd6fa5501e5ae1e7b115138bcd1176534d73 Mon Sep 17 00:00:00 2001 From: Keshav Gupta Date: Sun, 24 Jul 2022 13:12:33 +0200 Subject: [PATCH 13/29] Rln Credentials Merged. Reading credentials from file abstracted away. --- .gitignore | 3 +- .../waku_rln_relay/waku_rln_relay_types.nim | 9 +++- .../waku_rln_relay/waku_rln_relay_utils.nim | 48 +++++++++---------- 3 files changed, 30 insertions(+), 30 deletions(-) diff --git a/.gitignore b/.gitignore index 2e92c01171..9e70001f14 100644 --- a/.gitignore +++ b/.gitignore @@ -37,5 +37,4 @@ node_modules/ # Ignore Jetbrains IDE files .idea/ -keyPair.txt -rlnIndex.txt +rlnCredentials.txt diff --git a/waku/v2/protocol/waku_rln_relay/waku_rln_relay_types.nim b/waku/v2/protocol/waku_rln_relay/waku_rln_relay_types.nim index 978769d069..89b8a343f5 100644 --- a/waku/v2/protocol/waku_rln_relay/waku_rln_relay_types.nim +++ b/waku/v2/protocol/waku_rln_relay/waku_rln_relay_types.nim @@ -38,6 +38,12 @@ type MembershipKeyPair* = object # more details in https://hackmd.io/tMTLMYmTR5eynw2lwK9n1w?view#Membership idCommitment*: IDCommitment +type MembershipIndex* = uint + +type RlnMembershipCredentials* = object + membershipKeyPair*: MembershipKeyPair + rlnIndex*: MembershipIndex + type RateLimitProof* = object ## RateLimitProof holds the public inputs to rln circuit as ## defined in https://hackmd.io/tMTLMYmTR5eynw2lwK9n1w?view#Public-Inputs @@ -56,8 +62,6 @@ type RateLimitProof* = object ## see details in https://hackmd.io/tMTLMYmTR5eynw2lwK9n1w?view#Nullifiers nullifier*: Nullifier -type MembershipIndex* = uint - type ProofMetadata* = object nullifier*: Nullifier shareX*: MerkleNode @@ -91,6 +95,7 @@ type MessageValidationResult* {.pure.} = enum const KEYPAIR_FILEPATH* = "keyPair.txt" RLN_INDEX_FILEPATH* = "rlnIndex.txt" + RLN_CREDENTIALS_FILEPATH* = "rlnCredentials.txt" # inputs of the membership contract constructor # TODO may be able to make these constants private and put them inside the waku_rln_relay_utils diff --git a/waku/v2/protocol/waku_rln_relay/waku_rln_relay_utils.nim b/waku/v2/protocol/waku_rln_relay/waku_rln_relay_utils.nim index 26384cc974..0678710b31 100644 --- a/waku/v2/protocol/waku_rln_relay/waku_rln_relay_utils.nim +++ b/waku/v2/protocol/waku_rln_relay/waku_rln_relay_utils.nim @@ -791,11 +791,11 @@ proc mountRlnRelayDynamic*(node: WakuNode, keyPair = memKeyPair.get() rlnIndex = memIndex.get() - #Write KeyPair - writeFile(KEYPAIR_FILEPATH, pretty(%keyPair)) + var + rlnMembershipCredentials = RlnMembershipCredentials(membershipKeyPair: keyPair, rlnIndex: rlnIndex) - #Write rlnIndex - writeFile(RLN_INDEX_FILEPATH, pretty(%rlnIndex)) + #Write RLN credentials + writeFile(RLN_CREDENTIALS_FILEPATH, pretty(%rlnMembershipCredentials)) #Since the files are stored as a raw text file, it is highly susceptible to theft. #The files needs some encryption to resolve this. @@ -830,6 +830,20 @@ proc mountRlnRelayDynamic*(node: WakuNode, node.wakuRlnRelay = rlnPeer +proc readPersistentRlnCredentials*() : RlnMembershipCredentials {.raises: [Defect, OSError, IOError, Exception].} = + info "keyPair and rlnIndex exist" + #With regards to printing the keys, it is purely for debugging purposes so that the user becomes explicitly aware of the current keys in use when nwaku is started. + #Note that this is only until the RLN contract being used is the one deployed on Goerli testnet. + #These prints need to omitted once RLN contract is deployed on Ethereum mainnet and using valuable funds for staking. + + let entireRlnCredentialsFile = readFile(RLN_CREDENTIALS_FILEPATH) + + let jsonObject = parseJson(entireRlnCredentialsFile) + let deserializedRlnCredentials = to(jsonObject, RlnMembershipCredentials) + + info "Deserialized Rln credentials", rlnCredentials=deserializedRlnCredentials + result = deserializedRlnCredentials + proc mountRlnRelay*(node: WakuNode, conf: WakuNodeConf) {.raises: [Defect, ValueError, IOError, CatchableError, Exception].} = if not conf.rlnRelayDynamic: info " setting up waku-rln-relay in on-chain mode... " @@ -873,29 +887,11 @@ proc mountRlnRelay*(node: WakuNode, conf: WakuNodeConf) {.raises: [Defect, Value let memKeyPair = keyPair.toMembershipKeyPairs()[0] # mount the rln relay protocol in the on-chain/dynamic mode waitFor node.mountRlnRelayDynamic(memContractAddr = ethMemContractAddress, ethClientAddr = ethClientAddr, memKeyPair = some(memKeyPair), memIndex = some(rlnRelayIndex), ethAccAddr = ethAccountAddr, ethAccountPrivKey = ethAccountPrivKey, pubsubTopic = conf.rlnRelayPubsubTopic, contentTopic = conf.rlnRelayContentTopic) - elif fileExists("keyPair.txt") and fileExists("rlnIndex.txt"): - info "keyPair and rlnIndex files exist" - #With regards to printing the keys, it is purely for debugging purposes so that the user becomes explicitly aware of the current keys in use when nwaku is started. - #Note that this is only until the RLN contract being used is the one deployed on Goerli testnet. - #These prints need to omitted once RLN contract is deployed on Ethereum mainnet and using valuable funds for staking. - - let entireKeyPairFile = readFile(KEYPAIR_FILEPATH) - - let jsonObjectKeyPair = parseJson(entireKeyPairFile) - let deserializedKeyPair = to(jsonObjectKeyPair, MembershipKeyPair) - - info "Deserialized key pair", keyPair=deserializedKeyPair - - - let entireRlnIndexFile = readFile(RLN_INDEX_FILEPATH) - - let jsonObjectRlnIndex = parseJson(entireRlnIndexFile) - let deserializedRlnIndex = to(jsonObjectRlnIndex, MembershipIndex) - - info "Deserialized rln index", rlnIndex=deserializedRlnIndex + elif fileExists(RLN_CREDENTIALS_FILEPATH): + var credentials = readPersistentRlnCredentials() waitFor node.mountRlnRelayDynamic(memContractAddr = ethMemContractAddress, ethClientAddr = ethClientAddr, - memKeyPair = some(deserializedKeyPair), memIndex = some(deserializedRlnIndex), ethAccAddr = ethAccountAddr, - ethAccountPrivKey = ethAccountPrivKey, pubsubTopic = conf.rlnRelayPubsubTopic, contentTopic = conf.rlnRelayContentTopic) + memKeyPair = some(credentials.membershipKeyPair), memIndex = some(credentials.rlnIndex), ethAccAddr = ethAccountAddr, + ethAccountPrivKey = ethAccountPrivKey, pubsubTopic = conf.rlnRelayPubsubTopic, contentTopic = conf.rlnRelayContentTopic) else: # no rln credential is provided # mount the rln relay protocol in the on-chain/dynamic mode From 0a2c5cadae33d3bfdd19354a1d74e7287d1f1a91 Mon Sep 17 00:00:00 2001 From: Keshav Gupta Date: Sun, 24 Jul 2022 13:29:10 +0200 Subject: [PATCH 14/29] Spaces --- waku/v2/protocol/waku_rln_relay/waku_rln_relay_utils.nim | 1 - 1 file changed, 1 deletion(-) diff --git a/waku/v2/protocol/waku_rln_relay/waku_rln_relay_utils.nim b/waku/v2/protocol/waku_rln_relay/waku_rln_relay_utils.nim index 0678710b31..e3cead5818 100644 --- a/waku/v2/protocol/waku_rln_relay/waku_rln_relay_utils.nim +++ b/waku/v2/protocol/waku_rln_relay/waku_rln_relay_utils.nim @@ -840,7 +840,6 @@ proc readPersistentRlnCredentials*() : RlnMembershipCredentials {.raises: [Defec let jsonObject = parseJson(entireRlnCredentialsFile) let deserializedRlnCredentials = to(jsonObject, RlnMembershipCredentials) - info "Deserialized Rln credentials", rlnCredentials=deserializedRlnCredentials result = deserializedRlnCredentials From 7162bfa98d3b7f64f4f97b3581bacac946aca002 Mon Sep 17 00:00:00 2001 From: Keshav Gupta Date: Sun, 24 Jul 2022 13:32:02 +0200 Subject: [PATCH 15/29] Spaces --- waku/v2/protocol/waku_rln_relay/waku_rln_relay_utils.nim | 1 + 1 file changed, 1 insertion(+) diff --git a/waku/v2/protocol/waku_rln_relay/waku_rln_relay_utils.nim b/waku/v2/protocol/waku_rln_relay/waku_rln_relay_utils.nim index e3cead5818..564dc2628c 100644 --- a/waku/v2/protocol/waku_rln_relay/waku_rln_relay_utils.nim +++ b/waku/v2/protocol/waku_rln_relay/waku_rln_relay_utils.nim @@ -840,6 +840,7 @@ proc readPersistentRlnCredentials*() : RlnMembershipCredentials {.raises: [Defec let jsonObject = parseJson(entireRlnCredentialsFile) let deserializedRlnCredentials = to(jsonObject, RlnMembershipCredentials) + info "Deserialized Rln credentials", rlnCredentials=deserializedRlnCredentials result = deserializedRlnCredentials From 8ecd11a0c63d0bb1f5674e7aeba1297c795836ce Mon Sep 17 00:00:00 2001 From: Keshav Gupta Date: Tue, 26 Jul 2022 07:04:54 +0200 Subject: [PATCH 16/29] Dangling constants removed. Comments position. --- .../waku_rln_relay/waku_rln_relay_types.nim | 2 -- .../waku_rln_relay/waku_rln_relay_utils.nim | 14 +++++++------- 2 files changed, 7 insertions(+), 9 deletions(-) diff --git a/waku/v2/protocol/waku_rln_relay/waku_rln_relay_types.nim b/waku/v2/protocol/waku_rln_relay/waku_rln_relay_types.nim index 89b8a343f5..231ea007f8 100644 --- a/waku/v2/protocol/waku_rln_relay/waku_rln_relay_types.nim +++ b/waku/v2/protocol/waku_rln_relay/waku_rln_relay_types.nim @@ -93,8 +93,6 @@ type MessageValidationResult* {.pure.} = enum #RLN membership key and index files path const - KEYPAIR_FILEPATH* = "keyPair.txt" - RLN_INDEX_FILEPATH* = "rlnIndex.txt" RLN_CREDENTIALS_FILEPATH* = "rlnCredentials.txt" # inputs of the membership contract constructor diff --git a/waku/v2/protocol/waku_rln_relay/waku_rln_relay_utils.nim b/waku/v2/protocol/waku_rln_relay/waku_rln_relay_utils.nim index 564dc2628c..a1c2fb4a4a 100644 --- a/waku/v2/protocol/waku_rln_relay/waku_rln_relay_utils.nim +++ b/waku/v2/protocol/waku_rln_relay/waku_rln_relay_utils.nim @@ -794,11 +794,11 @@ proc mountRlnRelayDynamic*(node: WakuNode, var rlnMembershipCredentials = RlnMembershipCredentials(membershipKeyPair: keyPair, rlnIndex: rlnIndex) - #Write RLN credentials - writeFile(RLN_CREDENTIALS_FILEPATH, pretty(%rlnMembershipCredentials)) + # Since the files are stored as a raw text file, it is highly susceptible to theft. + # The files needs some encryption to resolve this. - #Since the files are stored as a raw text file, it is highly susceptible to theft. - #The files needs some encryption to resolve this. + # Write RLN credentials + writeFile(RLN_CREDENTIALS_FILEPATH, pretty(%rlnMembershipCredentials)) # create the WakuRLNRelay var rlnPeer = WakuRLNRelay(membershipKeyPair: keyPair, @@ -832,9 +832,9 @@ proc mountRlnRelayDynamic*(node: WakuNode, proc readPersistentRlnCredentials*() : RlnMembershipCredentials {.raises: [Defect, OSError, IOError, Exception].} = info "keyPair and rlnIndex exist" - #With regards to printing the keys, it is purely for debugging purposes so that the user becomes explicitly aware of the current keys in use when nwaku is started. - #Note that this is only until the RLN contract being used is the one deployed on Goerli testnet. - #These prints need to omitted once RLN contract is deployed on Ethereum mainnet and using valuable funds for staking. + # With regards to printing the keys, it is purely for debugging purposes so that the user becomes explicitly aware of the current keys in use when nwaku is started. + # Note that this is only until the RLN contract being used is the one deployed on Goerli testnet. + # These prints need to omitted once RLN contract is deployed on Ethereum mainnet and using valuable funds for staking. let entireRlnCredentialsFile = readFile(RLN_CREDENTIALS_FILEPATH) From c600b6c3f97fbe917fba8eff377d36dba337279e Mon Sep 17 00:00:00 2001 From: Keshav Gupta Date: Tue, 26 Jul 2022 07:13:49 +0200 Subject: [PATCH 17/29] Import sequence. --- waku/v2/protocol/waku_rln_relay/waku_rln_relay_utils.nim | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/waku/v2/protocol/waku_rln_relay/waku_rln_relay_utils.nim b/waku/v2/protocol/waku_rln_relay/waku_rln_relay_utils.nim index a1c2fb4a4a..5fb4e34ea9 100644 --- a/waku/v2/protocol/waku_rln_relay/waku_rln_relay_utils.nim +++ b/waku/v2/protocol/waku_rln_relay/waku_rln_relay_utils.nim @@ -2,6 +2,8 @@ import std/sequtils, tables, times, + std/streams, + std/os, chronicles, options, chronos, stint, confutils, web3, json, @@ -11,13 +13,10 @@ import libp2p/protocols/pubsub/pubsub, stew/results, stew/[byteutils, arrayops, endians2], - rln, - std/streams, + rln, waku_rln_relay_types, ../../node/[wakunode2_types,config], - ../waku_message, - json, - std/os + ../waku_message From 3bbd64b6650e53a580919af51b5b48478f5ad2e9 Mon Sep 17 00:00:00 2001 From: Keshav Gupta Date: Tue, 26 Jul 2022 07:18:25 +0200 Subject: [PATCH 18/29] Path as argument to readPersistentKeys. Spaces in comments --- waku/v2/protocol/waku_rln_relay/waku_rln_relay_types.nim | 2 +- waku/v2/protocol/waku_rln_relay/waku_rln_relay_utils.nim | 6 +++--- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/waku/v2/protocol/waku_rln_relay/waku_rln_relay_types.nim b/waku/v2/protocol/waku_rln_relay/waku_rln_relay_types.nim index 231ea007f8..7a236b69bd 100644 --- a/waku/v2/protocol/waku_rln_relay/waku_rln_relay_types.nim +++ b/waku/v2/protocol/waku_rln_relay/waku_rln_relay_types.nim @@ -91,7 +91,7 @@ type WakuRLNRelay* = ref object type MessageValidationResult* {.pure.} = enum Valid, Invalid, Spam -#RLN membership key and index files path +# RLN membership key and index files path const RLN_CREDENTIALS_FILEPATH* = "rlnCredentials.txt" diff --git a/waku/v2/protocol/waku_rln_relay/waku_rln_relay_utils.nim b/waku/v2/protocol/waku_rln_relay/waku_rln_relay_utils.nim index 5fb4e34ea9..65b0805f08 100644 --- a/waku/v2/protocol/waku_rln_relay/waku_rln_relay_utils.nim +++ b/waku/v2/protocol/waku_rln_relay/waku_rln_relay_utils.nim @@ -829,13 +829,13 @@ proc mountRlnRelayDynamic*(node: WakuNode, node.wakuRlnRelay = rlnPeer -proc readPersistentRlnCredentials*() : RlnMembershipCredentials {.raises: [Defect, OSError, IOError, Exception].} = +proc readPersistentRlnCredentials*(path: string) : RlnMembershipCredentials {.raises: [Defect, OSError, IOError, Exception].} = info "keyPair and rlnIndex exist" # With regards to printing the keys, it is purely for debugging purposes so that the user becomes explicitly aware of the current keys in use when nwaku is started. # Note that this is only until the RLN contract being used is the one deployed on Goerli testnet. # These prints need to omitted once RLN contract is deployed on Ethereum mainnet and using valuable funds for staking. - let entireRlnCredentialsFile = readFile(RLN_CREDENTIALS_FILEPATH) + let entireRlnCredentialsFile = readFile(path) let jsonObject = parseJson(entireRlnCredentialsFile) let deserializedRlnCredentials = to(jsonObject, RlnMembershipCredentials) @@ -887,7 +887,7 @@ proc mountRlnRelay*(node: WakuNode, conf: WakuNodeConf) {.raises: [Defect, Value # mount the rln relay protocol in the on-chain/dynamic mode waitFor node.mountRlnRelayDynamic(memContractAddr = ethMemContractAddress, ethClientAddr = ethClientAddr, memKeyPair = some(memKeyPair), memIndex = some(rlnRelayIndex), ethAccAddr = ethAccountAddr, ethAccountPrivKey = ethAccountPrivKey, pubsubTopic = conf.rlnRelayPubsubTopic, contentTopic = conf.rlnRelayContentTopic) elif fileExists(RLN_CREDENTIALS_FILEPATH): - var credentials = readPersistentRlnCredentials() + var credentials = readPersistentRlnCredentials(RLN_CREDENTIALS_FILEPATH) waitFor node.mountRlnRelayDynamic(memContractAddr = ethMemContractAddress, ethClientAddr = ethClientAddr, memKeyPair = some(credentials.membershipKeyPair), memIndex = some(credentials.rlnIndex), ethAccAddr = ethAccountAddr, ethAccountPrivKey = ethAccountPrivKey, pubsubTopic = conf.rlnRelayPubsubTopic, contentTopic = conf.rlnRelayContentTopic) From 16c1aa4b8fbf29bd0087c86f5e1ccfbb8d9fc763 Mon Sep 17 00:00:00 2001 From: Keshav Gupta Date: Tue, 26 Jul 2022 08:15:55 +0200 Subject: [PATCH 19/29] readPersistentKeys test --- .gitignore | 1 + tests/v2/test_waku_rln_relay.nim | 39 ++++++++++++++++++++++++++++++++ 2 files changed, 40 insertions(+) diff --git a/.gitignore b/.gitignore index 9e70001f14..5413ff0eca 100644 --- a/.gitignore +++ b/.gitignore @@ -38,3 +38,4 @@ node_modules/ # Ignore Jetbrains IDE files .idea/ rlnCredentials.txt +testPath.txt diff --git a/tests/v2/test_waku_rln_relay.nim b/tests/v2/test_waku_rln_relay.nim index 0bd4727689..9cdfb236e6 100644 --- a/tests/v2/test_waku_rln_relay.nim +++ b/tests/v2/test_waku_rln_relay.nim @@ -6,6 +6,7 @@ import testutils/unittests, chronos, chronicles, stint, stew/byteutils, stew/shims/net as stewNet, libp2p/crypto/crypto, + json, ../../waku/v2/protocol/waku_rln_relay/[rln, waku_rln_relay_utils, waku_rln_relay_types], ../../waku/v2/node/wakunode2, @@ -720,3 +721,41 @@ suite "Waku rln relay": # check that the conversion has not distorted the original value check: keypair.get().idCommitment == idCommitment + + test "Read Persistent RLN credentials": + # create an RLN instance + var rlnInstance = createRLNInstance() + check: + rlnInstance.isOk == true + + var key = membershipKeyGen(rlnInstance.value) + var empty: array[32, byte] + check: + key.isSome + key.get().idKey.len == 32 + key.get().idCommitment.len == 32 + key.get().idKey != empty + key.get().idCommitment != empty + + debug "the generated membership key pair: ", key + + var + k: MembershipKeyPair + index: MembershipIndex + + index = MembershipIndex(1) + k = key.get() + + var rlnMembershipCredentials = RlnMembershipCredentials(membershipKeyPair: k, rlnIndex: index) + + let path = "testPath.txt" + + # Write RLN credentials + writeFile(path, pretty(%rlnMembershipCredentials)) + + var credentials = readPersistentRlnCredentials(path) + + check: + credentials.membershipKeyPair == k + + From 48cfbf5032545e12c1181d6ada650897ce5f231d Mon Sep 17 00:00:00 2001 From: Keshav Gupta Date: Tue, 26 Jul 2022 08:25:14 +0200 Subject: [PATCH 20/29] Debug and info --- waku/v2/protocol/waku_rln_relay/waku_rln_relay_utils.nim | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/waku/v2/protocol/waku_rln_relay/waku_rln_relay_utils.nim b/waku/v2/protocol/waku_rln_relay/waku_rln_relay_utils.nim index 65b0805f08..c33c8c52bc 100644 --- a/waku/v2/protocol/waku_rln_relay/waku_rln_relay_utils.nim +++ b/waku/v2/protocol/waku_rln_relay/waku_rln_relay_utils.nim @@ -786,7 +786,7 @@ proc mountRlnRelayDynamic*(node: WakuNode, rlnIndex = regIndexRes.value debug "peer is successfully registered into the membership contract" else: - info "Peer is already registered to the membership contract" + debug "Peer is already registered to the membership contract" keyPair = memKeyPair.get() rlnIndex = memIndex.get() @@ -830,7 +830,7 @@ proc mountRlnRelayDynamic*(node: WakuNode, node.wakuRlnRelay = rlnPeer proc readPersistentRlnCredentials*(path: string) : RlnMembershipCredentials {.raises: [Defect, OSError, IOError, Exception].} = - info "keyPair and rlnIndex exist" + info "Rln credentials exist in file" # With regards to printing the keys, it is purely for debugging purposes so that the user becomes explicitly aware of the current keys in use when nwaku is started. # Note that this is only until the RLN contract being used is the one deployed on Goerli testnet. # These prints need to omitted once RLN contract is deployed on Ethereum mainnet and using valuable funds for staking. @@ -840,7 +840,7 @@ proc readPersistentRlnCredentials*(path: string) : RlnMembershipCredentials {.ra let jsonObject = parseJson(entireRlnCredentialsFile) let deserializedRlnCredentials = to(jsonObject, RlnMembershipCredentials) - info "Deserialized Rln credentials", rlnCredentials=deserializedRlnCredentials + debug "Deserialized Rln credentials", rlnCredentials=deserializedRlnCredentials result = deserializedRlnCredentials proc mountRlnRelay*(node: WakuNode, conf: WakuNodeConf) {.raises: [Defect, ValueError, IOError, CatchableError, Exception].} = From 51166dbcb9f46b185381ee0130ec075a69f525e5 Mon Sep 17 00:00:00 2001 From: Keshav Gupta Date: Thu, 28 Jul 2022 19:21:06 +0200 Subject: [PATCH 21/29] Index check in test --- tests/v2/test_waku_rln_relay.nim | 1 + 1 file changed, 1 insertion(+) diff --git a/tests/v2/test_waku_rln_relay.nim b/tests/v2/test_waku_rln_relay.nim index 9cdfb236e6..cb781a54ac 100644 --- a/tests/v2/test_waku_rln_relay.nim +++ b/tests/v2/test_waku_rln_relay.nim @@ -757,5 +757,6 @@ suite "Waku rln relay": check: credentials.membershipKeyPair == k + credentials.membershipIndex == index From 062632ac3b86760f355ca51770577242f4e5f006 Mon Sep 17 00:00:00 2001 From: Keshav Gupta Date: Thu, 28 Jul 2022 19:22:45 +0200 Subject: [PATCH 22/29] Update tests/v2/test_waku_rln_relay.nim Co-authored-by: G. <28568419+s1fr0@users.noreply.github.com> --- tests/v2/test_waku_rln_relay.nim | 9 +++------ 1 file changed, 3 insertions(+), 6 deletions(-) diff --git a/tests/v2/test_waku_rln_relay.nim b/tests/v2/test_waku_rln_relay.nim index cb781a54ac..5de1b49389 100644 --- a/tests/v2/test_waku_rln_relay.nim +++ b/tests/v2/test_waku_rln_relay.nim @@ -739,12 +739,9 @@ suite "Waku rln relay": debug "the generated membership key pair: ", key - var - k: MembershipKeyPair - index: MembershipIndex - - index = MembershipIndex(1) - k = key.get() + let + k = key.get() + index = MembershipIndex(1) var rlnMembershipCredentials = RlnMembershipCredentials(membershipKeyPair: k, rlnIndex: index) From ed05b6acbb44525d4ff619fd6e9d4407a8018daa Mon Sep 17 00:00:00 2001 From: Keshav Gupta Date: Thu, 28 Jul 2022 19:39:25 +0200 Subject: [PATCH 23/29] Abstracted writeRlnCredentials. Fix var name in test. --- tests/v2/test_waku_rln_relay.nim | 2 +- waku/v2/protocol/waku_rln_relay/waku_rln_relay_utils.nim | 7 ++++--- 2 files changed, 5 insertions(+), 4 deletions(-) diff --git a/tests/v2/test_waku_rln_relay.nim b/tests/v2/test_waku_rln_relay.nim index 5de1b49389..5dee0d3874 100644 --- a/tests/v2/test_waku_rln_relay.nim +++ b/tests/v2/test_waku_rln_relay.nim @@ -754,6 +754,6 @@ suite "Waku rln relay": check: credentials.membershipKeyPair == k - credentials.membershipIndex == index + credentials.rlnIndex == index diff --git a/waku/v2/protocol/waku_rln_relay/waku_rln_relay_utils.nim b/waku/v2/protocol/waku_rln_relay/waku_rln_relay_utils.nim index c33c8c52bc..4442322874 100644 --- a/waku/v2/protocol/waku_rln_relay/waku_rln_relay_utils.nim +++ b/waku/v2/protocol/waku_rln_relay/waku_rln_relay_utils.nim @@ -741,7 +741,9 @@ proc mountRlnRelayStatic*(node: WakuNode, node.wakuRlnRelay = rlnPeer - +proc writePersistentRlnCredentials*(path: string, credentials: RlnMembershipCredentials) {.raises: [Defect, OSError, IOError, Exception].} = + # Write RLN credentials + writeFile(RLN_CREDENTIALS_FILEPATH, pretty(%credentials)) proc mountRlnRelayDynamic*(node: WakuNode, ethClientAddr: string = "", @@ -796,8 +798,7 @@ proc mountRlnRelayDynamic*(node: WakuNode, # Since the files are stored as a raw text file, it is highly susceptible to theft. # The files needs some encryption to resolve this. - # Write RLN credentials - writeFile(RLN_CREDENTIALS_FILEPATH, pretty(%rlnMembershipCredentials)) + writePersistentRlnCredentials(RLN_CREDENTIALS_FILEPATH, rlnMembershipCredentials) # create the WakuRLNRelay var rlnPeer = WakuRLNRelay(membershipKeyPair: keyPair, From 5081300b3273370367fc30c3276547bede2c61fc Mon Sep 17 00:00:00 2001 From: Keshav Gupta Date: Thu, 28 Jul 2022 19:46:45 +0200 Subject: [PATCH 24/29] Usage of writeRlnCredentials in test --- tests/v2/test_waku_rln_relay.nim | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/v2/test_waku_rln_relay.nim b/tests/v2/test_waku_rln_relay.nim index 5dee0d3874..80c50df3c0 100644 --- a/tests/v2/test_waku_rln_relay.nim +++ b/tests/v2/test_waku_rln_relay.nim @@ -748,7 +748,7 @@ suite "Waku rln relay": let path = "testPath.txt" # Write RLN credentials - writeFile(path, pretty(%rlnMembershipCredentials)) + writePersistentRlnCredentials(path, rlnMembershipCredentials) var credentials = readPersistentRlnCredentials(path) From 3f4dba1a0b07591fe97c5d14ce2ebe692483f15b Mon Sep 17 00:00:00 2001 From: Keshav Gupta Date: Fri, 29 Jul 2022 17:14:23 +0200 Subject: [PATCH 25/29] Dnsclient? --- vendor/dnsclient.nim | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/vendor/dnsclient.nim b/vendor/dnsclient.nim index 4960de2b34..fbb76f8af8 160000 --- a/vendor/dnsclient.nim +++ b/vendor/dnsclient.nim @@ -1 +1 @@ -Subproject commit 4960de2b345f567b12f09a08e9967af104ab39a3 +Subproject commit fbb76f8af8a33ab818184a7d4406d9fee20993be From f10d87368865479a373c8eea42ef9603be188234 Mon Sep 17 00:00:00 2001 From: Keshav Gupta Date: Fri, 29 Jul 2022 17:44:54 +0200 Subject: [PATCH 26/29] Test reverted to direct call to writeFile. Abstrated writePersistentRlnCredentials usage causing error, with readPersistentRlnCredentials --- tests/v2/test_waku_rln_relay.nim | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/v2/test_waku_rln_relay.nim b/tests/v2/test_waku_rln_relay.nim index 80c50df3c0..5dee0d3874 100644 --- a/tests/v2/test_waku_rln_relay.nim +++ b/tests/v2/test_waku_rln_relay.nim @@ -748,7 +748,7 @@ suite "Waku rln relay": let path = "testPath.txt" # Write RLN credentials - writePersistentRlnCredentials(path, rlnMembershipCredentials) + writeFile(path, pretty(%rlnMembershipCredentials)) var credentials = readPersistentRlnCredentials(path) From db5fddc53fbe4332eca37052b281138bf3892ecf Mon Sep 17 00:00:00 2001 From: Keshav Gupta Date: Fri, 29 Jul 2022 18:09:44 +0200 Subject: [PATCH 27/29] Indentation --- waku/v2/protocol/waku_rln_relay/waku_rln_relay_utils.nim | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/waku/v2/protocol/waku_rln_relay/waku_rln_relay_utils.nim b/waku/v2/protocol/waku_rln_relay/waku_rln_relay_utils.nim index e8c17966fa..7f8cca6533 100644 --- a/waku/v2/protocol/waku_rln_relay/waku_rln_relay_utils.nim +++ b/waku/v2/protocol/waku_rln_relay/waku_rln_relay_utils.nim @@ -892,7 +892,9 @@ proc mountRlnRelay*(node: WakuNode, conf: WakuNodeConf|Chat2Conf, spamHandler: O let keyPair = @[(rlnRelayId, rlnRelayIdCommitmentKey)] let memKeyPair = keyPair.toMembershipKeyPairs()[0] # mount the rln relay protocol in the on-chain/dynamic mode - waitFor node.mountRlnRelayDynamic(memContractAddr = ethMemContractAddress, ethClientAddr = ethClientAddr, memKeyPair = some(memKeyPair), memIndex = some(rlnRelayIndex), ethAccAddr = ethAccountAddr, ethAccountPrivKeyOpt = ethAccountPrivKeyOpt, pubsubTopic = conf.rlnRelayPubsubTopic, contentTopic = conf.rlnRelayContentTopic, spamHandler = spamHandler) + waitFor node.mountRlnRelayDynamic(memContractAddr = ethMemContractAddress, ethClientAddr = ethClientAddr, + memKeyPair = some(memKeyPair), memIndex = some(rlnRelayIndex), ethAccAddr = ethAccountAddr, + ethAccountPrivKeyOpt = ethAccountPrivKeyOpt, pubsubTopic = conf.rlnRelayPubsubTopic, contentTopic = conf.rlnRelayContentTopic, spamHandler = spamHandler) elif fileExists(RLN_CREDENTIALS_FILEPATH): var credentials = readPersistentRlnCredentials(RLN_CREDENTIALS_FILEPATH) waitFor node.mountRlnRelayDynamic(memContractAddr = ethMemContractAddress, ethClientAddr = ethClientAddr, @@ -902,4 +904,6 @@ proc mountRlnRelay*(node: WakuNode, conf: WakuNodeConf|Chat2Conf, spamHandler: O # no rln credential is provided # mount the rln relay protocol in the on-chain/dynamic mode info "no rln credential is provided" - waitFor node.mountRlnRelayDynamic(memContractAddr = ethMemContractAddress, ethClientAddr = ethClientAddr, ethAccAddr = ethAccountAddr, ethAccountPrivKeyOpt = ethAccountPrivKeyOpt, pubsubTopic = conf.rlnRelayPubsubTopic, contentTopic = conf.rlnRelayContentTopic, spamHandler = spamHandler) + waitFor node.mountRlnRelayDynamic(memContractAddr = ethMemContractAddress, ethClientAddr = ethClientAddr, + ethAccAddr = ethAccountAddr, ethAccountPrivKeyOpt = ethAccountPrivKeyOpt, pubsubTopic = conf.rlnRelayPubsubTopic, + contentTopic = conf.rlnRelayContentTopic, spamHandler = spamHandler) From 135b72abb199172ebe70d798c464156725dbc596 Mon Sep 17 00:00:00 2001 From: Keshav Gupta Date: Fri, 29 Jul 2022 18:28:51 +0200 Subject: [PATCH 28/29] Revert "Dnsclient?" This reverts commit 3f4dba1a0b07591fe97c5d14ce2ebe692483f15b. --- vendor/dnsclient.nim | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/vendor/dnsclient.nim b/vendor/dnsclient.nim index fbb76f8af8..4960de2b34 160000 --- a/vendor/dnsclient.nim +++ b/vendor/dnsclient.nim @@ -1 +1 @@ -Subproject commit fbb76f8af8a33ab818184a7d4406d9fee20993be +Subproject commit 4960de2b345f567b12f09a08e9967af104ab39a3 From 08ab7a1358706a72f786e20c3f4a14a7673a0970 Mon Sep 17 00:00:00 2001 From: Keshav Gupta Date: Mon, 1 Aug 2022 02:34:30 +0200 Subject: [PATCH 29/29] Reverting abstraction of writing.. ..persiting credential --- waku/v2/protocol/waku_rln_relay/waku_rln_relay_utils.nim | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/waku/v2/protocol/waku_rln_relay/waku_rln_relay_utils.nim b/waku/v2/protocol/waku_rln_relay/waku_rln_relay_utils.nim index 7f8cca6533..bebe761694 100644 --- a/waku/v2/protocol/waku_rln_relay/waku_rln_relay_utils.nim +++ b/waku/v2/protocol/waku_rln_relay/waku_rln_relay_utils.nim @@ -742,9 +742,6 @@ proc mountRlnRelayStatic*(node: WakuNode, node.wakuRlnRelay = rlnPeer -proc writePersistentRlnCredentials*(path: string, credentials: RlnMembershipCredentials) {.raises: [Defect, OSError, IOError, Exception].} = - # Write RLN credentials - writeFile(RLN_CREDENTIALS_FILEPATH, pretty(%credentials)) proc mountRlnRelayDynamic*(node: WakuNode, ethClientAddr: string = "", @@ -802,7 +799,8 @@ proc mountRlnRelayDynamic*(node: WakuNode, # Since the files are stored as a raw text file, it is highly susceptible to theft. # The files needs some encryption to resolve this. - writePersistentRlnCredentials(RLN_CREDENTIALS_FILEPATH, rlnMembershipCredentials) + # Write RLN credentials + writeFile(RLN_CREDENTIALS_FILEPATH, pretty(%rlnMembershipCredentials)) # create the WakuRLNRelay var rlnPeer = WakuRLNRelay(membershipKeyPair: keyPair,