From e1615fb946eebe7b5a14cc22bdac7118bf917bf9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?P=C3=A9ter=20Szil=C3=A1gyi?= Date: Wed, 31 Jul 2019 11:50:13 +0300 Subject: [PATCH] p2p/enode: use unix timestamp as base ENR sequence number --- p2p/enode/nodedb.go | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/p2p/enode/nodedb.go b/p2p/enode/nodedb.go index 44332640c75dd..cc03540d885da 100644 --- a/p2p/enode/nodedb.go +++ b/p2p/enode/nodedb.go @@ -378,9 +378,14 @@ func (db *DB) UpdateFindFails(id ID, ip net.IP, fails int) error { return db.storeInt64(nodeItemKey(id, ip, dbNodeFindFails), int64(fails)) } -// LocalSeq retrieves the local record sequence counter. +// LocalSeq retrieves the local record sequence counter, defaulting to the current +// timestamp if no previous exists. This ensures that wiping all data associated +// with a node (apart from its key) will not generate already used sequence nums. func (db *DB) localSeq(id ID) uint64 { - return db.fetchUint64(localItemKey(id, dbLocalSeq)) + if seq := db.fetchUint64(localItemKey(id, dbLocalSeq)); seq > 0 { + return seq + } + return uint64(time.Now().Unix()) } // storeLocalSeq stores the local record sequence counter.