From be303ba1864d760c2d47eb9b27acbe889d1a0e29 Mon Sep 17 00:00:00 2001 From: Gustav Simonsson Date: Wed, 17 Jun 2015 00:56:25 +0200 Subject: [PATCH] Update ethash Godep (again) --- Godeps/Godeps.json | 4 +-- .../src/github.com/ethereum/ethash/ethash.go | 3 +- .../github.com/ethereum/ethash/ethash_test.go | 28 +++++++++++++------ 3 files changed, 23 insertions(+), 12 deletions(-) diff --git a/Godeps/Godeps.json b/Godeps/Godeps.json index 24905d0bb..0607990a8 100644 --- a/Godeps/Godeps.json +++ b/Godeps/Godeps.json @@ -21,8 +21,8 @@ }, { "ImportPath": "github.com/ethereum/ethash", - "Comment": "v23.1-222-g5cfdcba", - "Rev": "5cfdcba92e634db228d1ddb140e3b7a3c4b38177" + "Comment": "v23.1-222-g173b8ff", + "Rev": "173b8ff953610c13710061e83b95b50c73d7ea50" }, { "ImportPath": "github.com/howeyc/fsnotify", diff --git a/Godeps/_workspace/src/github.com/ethereum/ethash/ethash.go b/Godeps/_workspace/src/github.com/ethereum/ethash/ethash.go index ee68ab95f..73c5bf664 100644 --- a/Godeps/_workspace/src/github.com/ethereum/ethash/ethash.go +++ b/Godeps/_workspace/src/github.com/ethereum/ethash/ethash.go @@ -8,7 +8,6 @@ int ethashGoCallback_cgo(unsigned); import "C" import ( - "bytes" "errors" "fmt" "io/ioutil" @@ -122,7 +121,7 @@ func (l *Light) Verify(block pow.Block) bool { } // avoid mixdigest malleability as it's not included in a block's "hashNononce" - if !bytes.Equal(block.MixDigest().Bytes(), C.GoBytes(unsafe.Pointer(&ret.mix_hash), C.int(32))) { + if block.MixDigest() != h256ToHash(ret.mix_hash) { return false } diff --git a/Godeps/_workspace/src/github.com/ethereum/ethash/ethash_test.go b/Godeps/_workspace/src/github.com/ethereum/ethash/ethash_test.go index 42be77b94..e6833e343 100644 --- a/Godeps/_workspace/src/github.com/ethereum/ethash/ethash_test.go +++ b/Godeps/_workspace/src/github.com/ethereum/ethash/ethash_test.go @@ -39,6 +39,7 @@ var validBlocks = []*testBlock{ hashNoNonce: common.HexToHash("372eca2454ead349c3df0ab5d00b0b706b23e49d469387db91811cee0358fc6d"), difficulty: big.NewInt(132416), nonce: 0x495732e0ed7a801c, + mixDigest: common.HexToHash("2f74cdeb198af0b9abe65d22d372e22fb2d474371774a9583c1cc427a07939f5"), }, // from proof of concept nine testnet, epoch 1 { @@ -46,6 +47,7 @@ var validBlocks = []*testBlock{ hashNoNonce: common.HexToHash("7e44356ee3441623bc72a683fd3708fdf75e971bbe294f33e539eedad4b92b34"), difficulty: big.NewInt(1532671), nonce: 0x318df1c8adef7e5e, + mixDigest: common.HexToHash("144b180aad09ae3c81fb07be92c8e6351b5646dda80e6844ae1b697e55ddde84"), }, // from proof of concept nine testnet, epoch 2 { @@ -53,6 +55,7 @@ var validBlocks = []*testBlock{ hashNoNonce: common.HexToHash("5fc898f16035bf5ac9c6d9077ae1e3d5fc1ecc3c9fd5bee8bb00e810fdacbaa0"), difficulty: big.NewInt(2467358), nonce: 0x50377003e5d830ca, + mixDigest: common.HexToHash("ab546a5b73c452ae86dadd36f0ed83a6745226717d3798832d1b20b489e82063"), }, } @@ -73,8 +76,9 @@ func TestEthashConcurrentVerify(t *testing.T) { defer os.RemoveAll(eth.Full.Dir) block := &testBlock{difficulty: big.NewInt(10)} - nonce, _ := eth.Search(block, nil) + nonce, md := eth.Search(block, nil) block.nonce = nonce + block.mixDigest = common.BytesToHash(md) // Verify the block concurrently to check for data races. var wg sync.WaitGroup @@ -98,21 +102,26 @@ func TestEthashConcurrentSearch(t *testing.T) { eth.Turbo(true) defer os.RemoveAll(eth.Full.Dir) - // launch n searches concurrently. + type searchRes struct { + n uint64 + md []byte + } + var ( block = &testBlock{difficulty: big.NewInt(35000)} nsearch = 10 wg = new(sync.WaitGroup) - found = make(chan uint64) + found = make(chan searchRes) stop = make(chan struct{}) ) rand.Read(block.hashNoNonce[:]) wg.Add(nsearch) + // launch n searches concurrently. for i := 0; i < nsearch; i++ { go func() { - nonce, _ := eth.Search(block, stop) + nonce, md := eth.Search(block, stop) select { - case found <- nonce: + case found <- searchRes{n: nonce, md: md}: case <-stop: } wg.Done() @@ -120,12 +129,14 @@ func TestEthashConcurrentSearch(t *testing.T) { } // wait for one of them to find the nonce - nonce := <-found + res := <-found // stop the others close(stop) wg.Wait() - if block.nonce = nonce; !eth.Verify(block) { + block.nonce = res.n + block.mixDigest = common.BytesToHash(res.md) + if !eth.Verify(block) { t.Error("Block could not be verified") } } @@ -140,8 +151,9 @@ func TestEthashSearchAcrossEpoch(t *testing.T) { for i := epochLength - 40; i < epochLength+40; i++ { block := &testBlock{number: i, difficulty: big.NewInt(90)} rand.Read(block.hashNoNonce[:]) - nonce, _ := eth.Search(block, nil) + nonce, md := eth.Search(block, nil) block.nonce = nonce + block.mixDigest = common.BytesToHash(md) if !eth.Verify(block) { t.Fatalf("Block could not be verified") }