|
|
@ -1,15 +1,16 @@ |
|
|
|
package ethchain |
|
|
|
package ethchain |
|
|
|
|
|
|
|
|
|
|
|
import ( |
|
|
|
import ( |
|
|
|
|
|
|
|
"hash" |
|
|
|
|
|
|
|
"math/big" |
|
|
|
|
|
|
|
"math/rand" |
|
|
|
|
|
|
|
"time" |
|
|
|
|
|
|
|
|
|
|
|
"github.com/ethereum/eth-go/ethcrypto" |
|
|
|
"github.com/ethereum/eth-go/ethcrypto" |
|
|
|
"github.com/ethereum/eth-go/ethlog" |
|
|
|
"github.com/ethereum/eth-go/ethlog" |
|
|
|
"github.com/ethereum/eth-go/ethreact" |
|
|
|
"github.com/ethereum/eth-go/ethreact" |
|
|
|
"github.com/ethereum/eth-go/ethutil" |
|
|
|
"github.com/ethereum/eth-go/ethutil" |
|
|
|
"github.com/obscuren/sha3" |
|
|
|
"github.com/obscuren/sha3" |
|
|
|
"hash" |
|
|
|
|
|
|
|
"math/big" |
|
|
|
|
|
|
|
"math/rand" |
|
|
|
|
|
|
|
"time" |
|
|
|
|
|
|
|
) |
|
|
|
) |
|
|
|
|
|
|
|
|
|
|
|
var powlogger = ethlog.NewLogger("POW") |
|
|
|
var powlogger = ethlog.NewLogger("POW") |
|
|
@ -18,17 +19,23 @@ type PoW interface { |
|
|
|
Search(block *Block, reactChan chan ethreact.Event) []byte |
|
|
|
Search(block *Block, reactChan chan ethreact.Event) []byte |
|
|
|
Verify(hash []byte, diff *big.Int, nonce []byte) bool |
|
|
|
Verify(hash []byte, diff *big.Int, nonce []byte) bool |
|
|
|
GetHashrate() int64 |
|
|
|
GetHashrate() int64 |
|
|
|
|
|
|
|
Turbo(bool) |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
type EasyPow struct { |
|
|
|
type EasyPow struct { |
|
|
|
hash *big.Int |
|
|
|
hash *big.Int |
|
|
|
HashRate int64 |
|
|
|
HashRate int64 |
|
|
|
|
|
|
|
turbo bool |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
func (pow *EasyPow) GetHashrate() int64 { |
|
|
|
func (pow *EasyPow) GetHashrate() int64 { |
|
|
|
return pow.HashRate |
|
|
|
return pow.HashRate |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
func (pow *EasyPow) Turbo(on bool) { |
|
|
|
|
|
|
|
pow.turbo = on |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
func (pow *EasyPow) Search(block *Block, reactChan chan ethreact.Event) []byte { |
|
|
|
func (pow *EasyPow) Search(block *Block, reactChan chan ethreact.Event) []byte { |
|
|
|
r := rand.New(rand.NewSource(time.Now().UnixNano())) |
|
|
|
r := rand.New(rand.NewSource(time.Now().UnixNano())) |
|
|
|
hash := block.HashNoNonce() |
|
|
|
hash := block.HashNoNonce() |
|
|
@ -55,6 +62,10 @@ func (pow *EasyPow) Search(block *Block, reactChan chan ethreact.Event) []byte { |
|
|
|
return sha |
|
|
|
return sha |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if !pow.turbo { |
|
|
|
|
|
|
|
time.Sleep(500 * time.Millisecond) |
|
|
|
|
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
return nil |
|
|
|
return nil |
|
|
|