aboutsummaryrefslogtreecommitdiffstats
path: root/pow
diff options
context:
space:
mode:
Diffstat (limited to 'pow')
-rw-r--r--pow/block.go5
-rw-r--r--pow/ezp/pow.go16
-rw-r--r--pow/pow.go2
3 files changed, 14 insertions, 9 deletions
diff --git a/pow/block.go b/pow/block.go
index eb07bc86e..3bc63978b 100644
--- a/pow/block.go
+++ b/pow/block.go
@@ -1,14 +1,15 @@
package pow
import (
- "github.com/ethereum/go-ethereum/core/types"
"math/big"
+
+ "github.com/ethereum/go-ethereum/core/types"
)
type Block interface {
Difficulty() *big.Int
HashNoNonce() []byte
- Nonce() []byte
+ Nonce() uint64
MixDigest() []byte
SeedHash() []byte
NumberU64() uint64
diff --git a/pow/ezp/pow.go b/pow/ezp/pow.go
index 49854c3d0..3ca502d06 100644
--- a/pow/ezp/pow.go
+++ b/pow/ezp/pow.go
@@ -1,11 +1,11 @@
package ezp
import (
+ "encoding/binary"
"math/big"
"math/rand"
"time"
- "github.com/ethereum/go-ethereum/crypto"
"github.com/ethereum/go-ethereum/crypto/sha3"
"github.com/ethereum/go-ethereum/ethutil"
"github.com/ethereum/go-ethereum/logger"
@@ -32,7 +32,7 @@ func (pow *EasyPow) Turbo(on bool) {
pow.turbo = on
}
-func (pow *EasyPow) Search(block pow.Block, stop <-chan struct{}) ([]byte, []byte, []byte) {
+func (pow *EasyPow) Search(block pow.Block, stop <-chan struct{}) (uint64, []byte, []byte) {
r := rand.New(rand.NewSource(time.Now().UnixNano()))
hash := block.HashNoNonce()
diff := block.Difficulty()
@@ -57,7 +57,7 @@ empty:
for {
select {
case <-stop:
- return nil, nil, nil
+ return 0, nil, nil
default:
i++
@@ -65,7 +65,7 @@ empty:
hashes := ((float64(1e9) / float64(elapsed)) * float64(i-starti)) / 1000
pow.HashRate = int64(hashes)
- sha := crypto.Sha3(big.NewInt(r.Int63()).Bytes())
+ sha := uint64(r.Int63())
if verify(hash, diff, sha) {
return sha, nil, nil
}
@@ -75,16 +75,20 @@ empty:
time.Sleep(20 * time.Microsecond)
}
}
+
+ return 0, nil, nil
}
func (pow *EasyPow) Verify(block pow.Block) bool {
return Verify(block)
}
-func verify(hash []byte, diff *big.Int, nonce []byte) bool {
+func verify(hash []byte, diff *big.Int, nonce uint64) bool {
sha := sha3.NewKeccak256()
- d := append(hash, nonce...)
+ n := make([]byte, 8)
+ binary.PutUvarint(n, nonce)
+ d := append(hash, n...)
sha.Write(d)
verification := new(big.Int).Div(ethutil.BigPow(2, 256), diff)
diff --git a/pow/pow.go b/pow/pow.go
index 11aecbd6b..3908e5f76 100644
--- a/pow/pow.go
+++ b/pow/pow.go
@@ -1,7 +1,7 @@
package pow
type PoW interface {
- Search(block Block, stop <-chan struct{}) ([]byte, []byte, []byte)
+ Search(block Block, stop <-chan struct{}) (uint64, []byte, []byte)
Verify(block Block) bool
GetHashrate() int64
Turbo(bool)