Kevacoin stratum server for solo-mining
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.

64 lines
1.3 KiB

10 years ago
package util
import (
"encoding/hex"
"math/big"
"time"
"unicode/utf8"
"github.com/sammy007/monero-stratum/cnutil"
10 years ago
)
var Diff1 = StringToBig("0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF")
10 years ago
func StringToBig(h string) *big.Int {
n := new(big.Int)
n.SetString(h, 0)
return n
10 years ago
}
func MakeTimestamp() int64 {
return time.Now().UnixNano() / int64(time.Millisecond)
}
func GetTargetHex(diff int64) string {
10 years ago
padded := make([]byte, 32)
diffBuff := new(big.Int).Div(Diff1, big.NewInt(diff)).Bytes()
10 years ago
copy(padded[32-len(diffBuff):], diffBuff)
buff := padded[0:4]
targetHex := hex.EncodeToString(reverse(buff))
return targetHex
10 years ago
}
func GetHashDifficulty(hashBytes []byte) (*big.Int, bool) {
10 years ago
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
10 years ago
}
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
}