Andrea Maria Piana 79be6eaf3a Increment retry count when ENS verification fails
We did not increment the counter when verification failed, which meant
that we would not backoff and retry more often that we should have.
2020-04-14 11:16:43 +02:00

64 lines
1.3 KiB
Go

package protocol
import (
"math"
"strings"
)
// maxRetries is the maximum number of attempts we do before giving up
const maxRetries uint64 = 11
// ENSBackoffTimeSec is the step of the exponential backoff
// we retry roughly for 17 hours after receiving the message 2^11 * 30
const ENSBackoffTimeSec uint64 = 30
// We calculate if it's too early to retry, by exponentially backing off
func verifiedENSRecentlyEnough(now, verifiedAt, retries uint64) bool {
return now < verifiedAt+ENSBackoffTimeSec*retries*uint64(math.Exp2(float64(retries)))
}
func shouldENSBeVerified(c *Contact, now uint64) bool {
if c.Name == "" {
return false
}
if c.ENSVerified {
return false
}
if c.ENSVerificationRetries >= maxRetries {
return false
}
if verifiedENSRecentlyEnough(now, c.ENSVerifiedAt, c.ENSVerificationRetries) {
return false
}
if !strings.HasSuffix(c.Name, ".eth") {
return false
}
return true
}
// This should trigger re-verification of the ENS name for this contact
func hasENSNameChanged(c *Contact, newName string, clockValue uint64) bool {
if c.LastENSClockValue > clockValue {
return false
}
if newName == "" {
return false
}
if !strings.HasSuffix(newName, ".eth") {
return false
}
if newName == c.Name {
return false
}
return true
}