package util import ( "encoding/hex" "math/big" "time" "unicode/utf8" "github.com/sammy007/monero-stratum/cnutil" ) var Diff1 = StringToBig("0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF") func StringToBig(h string) *big.Int { n := new(big.Int) n.SetString(h, 0) return n } func MakeTimestamp() int64 { return time.Now().UnixNano() / int64(time.Millisecond) } func GetTargetHex(diff int64) string { padded := make([]byte, 32) diffBuff := new(big.Int).Div(Diff1, big.NewInt(diff)).Bytes() copy(padded[32-len(diffBuff):], diffBuff) buff := padded[0:4] targetHex := hex.EncodeToString(reverse(buff)) return targetHex } func GetHashDifficulty(hashBytes []byte) (*big.Int, bool) { diff := new(big.Int) diff.SetBytes(reverse(hashBytes)) // Check for broken result, empty string or zero hex value if diff.Cmp(new(big.Int)) == 0 { return nil, false } return diff.Div(Diff1, diff), true } func ValidateAddress(addy string, poolAddy string) bool { if len(addy) != len(poolAddy) { return false } prefix, _ := utf8.DecodeRuneInString(addy) poolPrefix, _ := utf8.DecodeRuneInString(poolAddy) if prefix != poolPrefix { return false } return cnutil.ValidateAddress(addy) } func reverse(src []byte) []byte { dst := make([]byte, len(src)) for i := len(src); i > 0; i-- { dst[len(src)-i] = src[i-1] } return dst }