diff --git a/Godeps/Godeps.json b/Godeps/Godeps.json
index 2480ff9a2455fe6cbdbe12d323b471e06f4ecf78..8b4b299f8101283b2085f98744700715c230b4c4 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 25863828fbaad937d1052a32f6d90eef48a4b07e..8a441525d8981759ee0ce7760f3ebe1d08861120 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 607e44138f1a962570320a277ff2e181afcbbbb5..e881e0c7bc013e3debe220535ae9d80852136bfb 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 221ff290af7aa303c3ef5ed2126a401d88ca4907..4e2b695ac6f05fd53e6276612a369a35aaa57f81 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 4fe46d75663df12160aa4d8b8dc65ef1d9a27258..05aa5ed371e51ac174c7e573f2e2e23bc89eb0ee 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 d9c54d141b69c7da10d943d6c744f5a5de82f66d..2e6c8deb8de9008671a526901674f0a5c3c45b3c 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 <stdio.h>
 #include <sys/stat.h>
 #include <sys/types.h>
-#include <Shlobj.h>
+#include <shlobj.h>
 
 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 0d2307f3d27a1258131ff44044e7972508e97539..c5fc6e55b5fc171e9e600a99d7f9d833a8ca95c0 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 55fe02316b51c49c254083bbe384ad594429ad1b..1933e03e37e57aefe147140e3fb9bf263e9f6196 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);