package ens import ( "encoding/hex" "fmt" "strings" "github.com/ethereum/go-ethereum/common" "github.com/ethereum/go-ethereum/crypto" ) func NameHash(name string) common.Hash { node := common.Hash{} if len(name) > 0 { labels := strings.Split(name, ".") for i := len(labels) - 1; i >= 0; i-- { labelSha := crypto.Keccak256Hash([]byte(labels[i])) node = crypto.Keccak256Hash(node.Bytes(), labelSha.Bytes()) } } return node } func ValidateENSUsername(username string) error { if !strings.HasSuffix(username, ".eth") { return fmt.Errorf("username must end with .eth") } return nil } func UsernameToLabel(username string) [32]byte { usernameHashed := crypto.Keccak256([]byte(username)) var label [32]byte copy(label[:], usernameHashed) return label } func ExtractCoordinates(pubkey string) ([32]byte, [32]byte) { x, _ := hex.DecodeString(pubkey[4:68]) y, _ := hex.DecodeString(pubkey[68:132]) var xByte [32]byte copy(xByte[:], x) var yByte [32]byte copy(yByte[:], y) return xByte, yByte }