Only hashing immutable part of network configuration for dataDir ID (#2955)

* Only hashing immutable part of network configuration for dataDir ID

* Add debug- prefix to rewrite-datadir-id
This commit is contained in:
andri lim 2025-01-17 17:03:15 +07:00 committed by GitHub
parent ac053bf4c8
commit aa85d6a61c
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
3 changed files with 17 additions and 5 deletions

View File

@ -79,7 +79,7 @@ func calcHash*(networkId: NetworkId, conf: ChainConfig, genesis: Genesis): Hash3
var ctx: sha256
ctx.init()
ctx.update(networkId)
ctx.update(conf)
ctx.update(conf.chainId)
if genesis.isNil.not:
ctx.update(genesis)
ctx.finish(result.data)

View File

@ -417,6 +417,11 @@ type
desc: "Print RDB statistics at exit"
name: "debug-rdb-print-stats".}: bool
rewriteDatadirId* {.
hidden
desc: "Rewrite selected network config hash to database"
name: "debug-rewrite-datadir-id".}: bool
case cmd* {.
command
defaultValue: NimbusCmd.noCommand }: NimbusCmd

View File

@ -156,17 +156,24 @@ proc setupMetrics(nimbus: NimbusNode, conf: NimbusConf) =
waitFor nimbus.metricsServer.start()
proc preventLoadingDataDirForTheWrongNetwork(db: CoreDbRef; conf: NimbusConf) =
proc writeDataDirId(kvt: CoreDbKvtRef, calculatedId: Hash32) =
info "Writing data dir ID", ID=calculatedId
kvt.put(dataDirIdKey().toOpenArray, calculatedId.data).isOkOr:
fatal "Cannot write data dir ID", ID=calculatedId
quit(QuitFailure)
let
kvt = db.ctx.getKvt()
calculatedId = calcHash(conf.networkId, conf.networkParams)
dataDirIdBytes = kvt.get(dataDirIdKey().toOpenArray).valueOr:
# an empty database
info "Writing data dir ID", ID=calculatedId
kvt.put(dataDirIdKey().toOpenArray, calculatedId.data).isOkOr:
fatal "Cannot write data dir ID", ID=calculatedId
quit(QuitFailure)
writeDataDirId(kvt, calculatedId)
return
if conf.rewriteDatadirId:
writeDataDirId(kvt, calculatedId)
return
if calculatedId.data != dataDirIdBytes:
fatal "Data dir already initialized with other network configuration",
get=dataDirIdBytes.toHex,