You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
63 lines
1.3 KiB
63 lines
1.3 KiB
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 |
|
}
|
|
|