From 3593662b0c3d5fec8bdd5c335e8e2d41b93b0fb7 Mon Sep 17 00:00:00 2001 From: Gustav Simonsson Date: Thu, 7 May 2015 19:39:55 +0200 Subject: [PATCH] Update ethash deps (more build fixes, tests) --- Godeps/Godeps.json | 4 +- .../src/github.com/ethereum/ethash/ethashc.go | 12 ++++- .../ethereum/ethash/src/libethash/internal.c | 2 +- .../ethereum/ethash/src/libethash/internal.h | 6 +-- .../ethereum/ethash/src/libethash/io.h | 7 +-- .../ethereum/ethash/src/libethash/io_win32.c | 2 +- .../ethereum/ethash/src/libethash/util.h | 8 ++-- .../ethereum/ethash/test/c/test.cpp | 45 ++++++++++++++++--- 8 files changed, 65 insertions(+), 21 deletions(-) diff --git a/Godeps/Godeps.json b/Godeps/Godeps.json index 2480ff9a24..8b4b299f81 100644 --- a/Godeps/Godeps.json +++ b/Godeps/Godeps.json @@ -17,8 +17,8 @@ }, { "ImportPath": "github.com/ethereum/ethash", - "Comment": "v23.1-195-g4d50db9", - "Rev": "4d50db90d8bb5f2fae357570366cb8c657a4ddfc" + "Comment": "v23.1-204-g0401fdf", + "Rev": "0401fdf56a3bc8679f9560e542c3d1cf83020efe" }, { "ImportPath": "github.com/howeyc/fsnotify", diff --git a/Godeps/_workspace/src/github.com/ethereum/ethash/ethashc.go b/Godeps/_workspace/src/github.com/ethereum/ethash/ethashc.go index 25863828fb..8a441525d8 100644 --- a/Godeps/_workspace/src/github.com/ethereum/ethash/ethashc.go +++ b/Godeps/_workspace/src/github.com/ethereum/ethash/ethashc.go @@ -1,5 +1,16 @@ package ethash +/* + -mno-stack-arg-probe disables stack probing which avoids the function + __chkstk_ms being linked. this avoids a clash of this symbol as we also + separately link the secp256k1 lib which ends up defining this symbol + + 1. https://gcc.gnu.org/onlinedocs/gccint/Stack-Checking.html + 2. https://groups.google.com/forum/#!msg/golang-dev/v1bziURSQ4k/88fXuJ24e-gJ + 3. https://groups.google.com/forum/#!topic/golang-nuts/VNP6Mwz_B6o + +*/ + /* #cgo CFLAGS: -std=gnu99 -Wall #cgo windows CFLAGS: -mno-stack-arg-probe @@ -10,7 +21,6 @@ package ethash #include "src/libethash/io.c" #ifdef _WIN32 -# include "src/libethash/util_win32.c" # include "src/libethash/io_win32.c" # include "src/libethash/mmap_win32.c" #else diff --git a/Godeps/_workspace/src/github.com/ethereum/ethash/src/libethash/internal.c b/Godeps/_workspace/src/github.com/ethereum/ethash/src/libethash/internal.c index 607e44138f..e881e0c7bc 100644 --- a/Godeps/_workspace/src/github.com/ethereum/ethash/src/libethash/internal.c +++ b/Godeps/_workspace/src/github.com/ethereum/ethash/src/libethash/internal.c @@ -280,7 +280,7 @@ ethash_h256_t ethash_get_seedhash(uint64_t block_number) return ret; } -int ethash_quick_check_difficulty( +bool ethash_quick_check_difficulty( ethash_h256_t const* header_hash, uint64_t const nonce, ethash_h256_t const* mix_hash, diff --git a/Godeps/_workspace/src/github.com/ethereum/ethash/src/libethash/internal.h b/Godeps/_workspace/src/github.com/ethereum/ethash/src/libethash/internal.h index 221ff290af..4e2b695ac6 100644 --- a/Godeps/_workspace/src/github.com/ethereum/ethash/src/libethash/internal.h +++ b/Godeps/_workspace/src/github.com/ethereum/ethash/src/libethash/internal.h @@ -47,7 +47,7 @@ static inline void ethash_h256_reset(ethash_h256_t* hash) } // Returns if hash is less than or equal to difficulty -static inline int ethash_check_difficulty( +static inline bool ethash_check_difficulty( ethash_h256_t const* hash, ethash_h256_t const* difficulty ) @@ -59,10 +59,10 @@ static inline int ethash_check_difficulty( } return ethash_h256_get(hash, i) < ethash_h256_get(difficulty, i); } - return 1; + return true; } -int ethash_quick_check_difficulty( +bool ethash_quick_check_difficulty( ethash_h256_t const* header_hash, uint64_t const nonce, ethash_h256_t const* mix_hash, diff --git a/Godeps/_workspace/src/github.com/ethereum/ethash/src/libethash/io.h b/Godeps/_workspace/src/github.com/ethereum/ethash/src/libethash/io.h index 4fe46d7566..05aa5ed371 100644 --- a/Godeps/_workspace/src/github.com/ethereum/ethash/src/libethash/io.h +++ b/Godeps/_workspace/src/github.com/ethereum/ethash/src/libethash/io.h @@ -34,11 +34,12 @@ extern "C" { #endif // Maximum size for mutable part of DAG file name +// 6 is for "full-R", the suffix of the filename // 10 is for maximum number of digits of a uint32_t (for REVISION) -// 1 is for _ and 16 is for the first 16 hex digits for first 8 bytes of +// 1 is for - and 16 is for the first 16 hex digits for first 8 bytes of // the seedhash and last 1 is for the null terminating character // Reference: https://github.com/ethereum/wiki/wiki/Ethash-DAG -#define DAG_MUTABLE_NAME_MAX_SIZE (10 + 1 + 16 + 1) +#define DAG_MUTABLE_NAME_MAX_SIZE (6 + 10 + 1 + 16 + 1) /// Possible return values of @see ethash_io_prepare enum ethash_io_rc { ETHASH_IO_FAIL = 0, ///< There has been an IO failure @@ -176,7 +177,7 @@ static inline bool ethash_io_mutable_name( #if LITTLE_ENDIAN == BYTE_ORDER hash = ethash_swap_u64(hash); #endif - return snprintf(output, DAG_MUTABLE_NAME_MAX_SIZE, "%u_%016" PRIx64, revision, hash) >= 0; + return snprintf(output, DAG_MUTABLE_NAME_MAX_SIZE, "full-R%u-%016" PRIx64, revision, hash) >= 0; } #ifdef __cplusplus diff --git a/Godeps/_workspace/src/github.com/ethereum/ethash/src/libethash/io_win32.c b/Godeps/_workspace/src/github.com/ethereum/ethash/src/libethash/io_win32.c index d9c54d141b..2e6c8deb8d 100644 --- a/Godeps/_workspace/src/github.com/ethereum/ethash/src/libethash/io_win32.c +++ b/Godeps/_workspace/src/github.com/ethereum/ethash/src/libethash/io_win32.c @@ -25,7 +25,7 @@ #include #include #include -#include +#include FILE* ethash_fopen(char const* file_name, char const* mode) { diff --git a/Godeps/_workspace/src/github.com/ethereum/ethash/src/libethash/util.h b/Godeps/_workspace/src/github.com/ethereum/ethash/src/libethash/util.h index 0d2307f3d2..c5fc6e55b5 100644 --- a/Godeps/_workspace/src/github.com/ethereum/ethash/src/libethash/util.h +++ b/Godeps/_workspace/src/github.com/ethereum/ethash/src/libethash/util.h @@ -26,11 +26,11 @@ extern "C" { #endif -//#ifdef _MSC_VER +#ifdef _MSC_VER void debugf(char const* str, ...); -//#else -//#define debugf printf -//#endif +#else +#define debugf printf +#endif static inline uint32_t min_u32(uint32_t a, uint32_t b) { diff --git a/Godeps/_workspace/src/github.com/ethereum/ethash/test/c/test.cpp b/Godeps/_workspace/src/github.com/ethereum/ethash/test/c/test.cpp index 55fe02316b..1933e03e37 100644 --- a/Godeps/_workspace/src/github.com/ethereum/ethash/test/c/test.cpp +++ b/Godeps/_workspace/src/github.com/ethereum/ethash/test/c/test.cpp @@ -205,10 +205,10 @@ BOOST_AUTO_TEST_CASE(test_ethash_io_mutable_name) { // should have at least 8 bytes provided since this is what we test :) ethash_h256_t seed1 = ethash_h256_static_init(0, 10, 65, 255, 34, 55, 22, 8); ethash_io_mutable_name(1, &seed1, mutable_name); - BOOST_REQUIRE_EQUAL(0, strcmp(mutable_name, "1_000a41ff22371608")); + BOOST_REQUIRE_EQUAL(0, strcmp(mutable_name, "full-R1-000a41ff22371608")); ethash_h256_t seed2 = ethash_h256_static_init(0, 0, 0, 0, 0, 0, 0, 0); ethash_io_mutable_name(44, &seed2, mutable_name); - BOOST_REQUIRE_EQUAL(0, strcmp(mutable_name, "44_0000000000000000")); + BOOST_REQUIRE_EQUAL(0, strcmp(mutable_name, "full-R44-0000000000000000")); } BOOST_AUTO_TEST_CASE(test_ethash_dir_creation) { @@ -599,16 +599,49 @@ BOOST_AUTO_TEST_CASE(test_incomplete_dag_file) { fs::remove_all("./test_ethash_directory/"); } -BOOST_AUTO_TEST_CASE(test_block_verification) { +BOOST_AUTO_TEST_CASE(test_block22_verification) { + // from POC-9 testnet, epoch 0 ethash_light_t light = ethash_light_new(22); ethash_h256_t seedhash = stringToBlockhash("372eca2454ead349c3df0ab5d00b0b706b23e49d469387db91811cee0358fc6d"); BOOST_ASSERT(light); ethash_return_value_t ret = ethash_light_compute( light, seedhash, - 0x495732e0ed7a801c + 0x495732e0ed7a801cU ); BOOST_REQUIRE_EQUAL(blockhashToHexString(&ret.result), "00000b184f1fdd88bfd94c86c39e65db0c36144d5e43f745f722196e730cb614"); + ethash_h256_t difficulty = ethash_h256_static_init(0x2, 0x5, 0x40); + BOOST_REQUIRE(ethash_check_difficulty(&ret.result, &difficulty)); + ethash_light_delete(light); +} + +BOOST_AUTO_TEST_CASE(test_block30001_verification) { + // from POC-9 testnet, epoch 1 + ethash_light_t light = ethash_light_new(30001); + ethash_h256_t seedhash = stringToBlockhash("7e44356ee3441623bc72a683fd3708fdf75e971bbe294f33e539eedad4b92b34"); + BOOST_ASSERT(light); + ethash_return_value_t ret = ethash_light_compute( + light, + seedhash, + 0x318df1c8adef7e5eU + ); + ethash_h256_t difficulty = ethash_h256_static_init(0x17, 0x62, 0xff); + BOOST_REQUIRE(ethash_check_difficulty(&ret.result, &difficulty)); + ethash_light_delete(light); +} + +BOOST_AUTO_TEST_CASE(test_block60000_verification) { + // from POC-9 testnet, epoch 2 + ethash_light_t light = ethash_light_new(60000); + ethash_h256_t seedhash = stringToBlockhash("5fc898f16035bf5ac9c6d9077ae1e3d5fc1ecc3c9fd5bee8bb00e810fdacbaa0"); + BOOST_ASSERT(light); + ethash_return_value_t ret = ethash_light_compute( + light, + seedhash, + 0x50377003e5d830caU + ); + ethash_h256_t difficulty = ethash_h256_static_init(0x25, 0xa6, 0x1e); + BOOST_REQUIRE(ethash_check_difficulty(&ret.result, &difficulty)); ethash_light_delete(light); } @@ -617,7 +650,7 @@ BOOST_AUTO_TEST_CASE(test_block_verification) { // Uncomment and run on your own machine if you want to confirm // it works fine. #if 0 -static int lef_cb(unsigned _progress) +static int progress_cb(unsigned _progress) { printf("CREATING DAG. PROGRESS: %u\n", _progress); fflush(stdout); @@ -627,7 +660,7 @@ static int lef_cb(unsigned _progress) BOOST_AUTO_TEST_CASE(full_dag_test) { ethash_light_t light = ethash_light_new(55); BOOST_ASSERT(light); - ethash_full_t full = ethash_full_new(light, lef_cb); + ethash_full_t full = ethash_full_new(light, progress_cb); BOOST_ASSERT(full); ethash_light_delete(light); ethash_full_delete(full);