Use bits.Mul64 on p2p challenge

This commit is contained in:
DataHoarder 2024-04-07 04:32:39 +02:00
parent d2187564ca
commit b138b39ab5
Signed by: DataHoarder
SSH key fingerprint: SHA256:OLTRf6Fl87G52SiR7sWLGNzlJt4WOX+tfI2yxo0z7xk
2 changed files with 6 additions and 5 deletions

View file

@ -5,6 +5,7 @@ import (
"encoding/binary"
"git.gammaspectra.live/P2Pool/consensus/v3/monero/crypto"
"git.gammaspectra.live/P2Pool/consensus/v3/types"
"math/bits"
"sync/atomic"
"unsafe"
)
@ -41,7 +42,7 @@ func FindChallengeSolution(challenge HandshakeChallenge, consensusId types.Hash,
return salt, sum, false
}
if types.DifficultyFrom64(binary.LittleEndian.Uint64(sum[len(sum)-int(unsafe.Sizeof(uint64(0))):])).Mul64(HandshakeChallengeDifficulty).Hi == 0 {
if hi, _ := bits.Mul64(binary.LittleEndian.Uint64(sum[len(sum)-int(unsafe.Sizeof(uint64(0))):]), HandshakeChallengeDifficulty); hi == 0 {
//found solution
return salt, sum, true
}
@ -52,5 +53,6 @@ func FindChallengeSolution(challenge HandshakeChallenge, consensusId types.Hash,
func CalculateChallengeHash(challenge HandshakeChallenge, consensusId types.Hash, solution uint64) (hash types.Hash, ok bool) {
hash = crypto.PooledKeccak256(challenge[:], consensusId[:], binary.LittleEndian.AppendUint64(nil, solution))
return hash, types.DifficultyFrom64(binary.LittleEndian.Uint64(hash[types.HashSize-int(unsafe.Sizeof(uint64(0))):])).Mul64(HandshakeChallengeDifficulty).Hi == 0
hi, _ := bits.Mul64(binary.LittleEndian.Uint64(hash[types.HashSize-int(unsafe.Sizeof(uint64(0))):]), HandshakeChallengeDifficulty)
return hash, hi == 0
}

View file

@ -10,7 +10,6 @@ import (
"git.gammaspectra.live/P2Pool/consensus/v3/types"
"git.gammaspectra.live/P2Pool/consensus/v3/utils"
"git.gammaspectra.live/P2Pool/sha3"
"lukechampine.com/uint128"
"math"
"math/bits"
"slices"
@ -453,13 +452,13 @@ func NextDifficulty(consensus *Consensus, timestamps []uint64, difficultyData []
}
}()
deltaDifficulty := uint128.Uint128(maxDifficulty).Sub(uint128.Uint128(minDifficulty))
deltaDifficulty := maxDifficulty.Sub(minDifficulty)
curDifficulty := deltaDifficulty.Mul64(consensus.TargetBlockTime).Div64(deltaTimestamp)
if curDifficulty.Cmp64(consensus.MinimumDifficulty) < 0 {
return types.DifficultyFrom64(consensus.MinimumDifficulty), nil
}
return types.Difficulty(curDifficulty), nil
return curDifficulty, nil
}
}