Aaryamann Challani 40752b1e89
chore(rln-db-inspector): add more logging to find zero leaf indices (#2617)
* chore(rln-db-inspector): add more logging to find zero leaf indices

* fix: assumeEmptyAfter var
2024-04-24 17:11:32 +02:00

67 lines
1.8 KiB
Nim

when (NimMajor, NimMinor) < (1, 4):
{.push raises: [Defect].}
else:
{.push raises: [].}
import chronicles, sequtils, stew/[results]
import
../../waku/waku_rln_relay/rln,
../../waku/waku_rln_relay/conversion_utils,
../../waku/factory/external_config
logScope:
topics = "rln_db_inspector"
proc doInspectRlnDb*(conf: WakuNodeConf) =
# 1. load configuration
trace "configuration", conf = $conf
# 2. initialize rlnInstance
let rlnInstance = createRLNInstance(d = 20, tree_path = conf.treePath).valueOr:
error "failure while creating RLN instance", error
quit(1)
# 3. get metadata
let metadataOpt = rlnInstance.getMetadata().valueOr:
error "failure while getting RLN metadata", error
quit(1)
if metadataOpt.isNone():
error "RLN metadata does not exist"
quit(1)
let metadata = metadataOpt.get()
info "RLN metadata",
lastProcessedBlock = metadata.lastProcessedBlock,
chainId = metadata.chainId,
contractAddress = metadata.contractAddress,
validRoots = metadata.validRoots.mapIt(it.inHex())
var index: uint = 0
var hits: uint = 0
var zeroLeafIndices: seq[uint] = @[]
var assumeEmptyAfter: uint = 10
while true:
let leaf = rlnInstance.getMember(index).valueOr:
error "failure while getting RLN leaf", error
quit(1)
if leaf.inHex() == "0000000000000000000000000000000000000000000000000000000000000000":
zeroLeafIndices.add(index)
hits = hits + 1
else:
hits = 0
if hits > assumeEmptyAfter:
info "reached end of RLN tree", index = index - assumeEmptyAfter
# remove zeroLeafIndices that are not at the end of the tree
zeroLeafIndices = zeroLeafIndices.filterIt(it < index - assumeEmptyAfter)
break
index = index + 1
info "zero leaf indices", zeroLeafIndices
quit(0)