status-go/protocol/ens.go

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
// ENSBackoffTimeMs is the step of the exponential backoff
// we retry roughly for 17 hours after receiving the message 2^11 * 30000
const ENSBackoffTimeMs uint64 = 30000
// We calculate if it's too early to retry, by exponentially backing off
func verifiedENSRecentlyEnough(now, verifiedAt, retries uint64) bool {
return now < verifiedAt+ENSBackoffTimeMs*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
}