Browse Source

Share pool coinbase check reaction code

Luke Dashjr 11 years ago
parent
commit
e1c0e59c17
3 changed files with 12 additions and 11 deletions
  1. 10 5
      miner.c
  2. 1 0
      miner.h
  3. 1 6
      util.c

+ 10 - 5
miner.c

@@ -2938,6 +2938,15 @@ bool pool_may_redirect_to(struct pool * const pool, const char * const uri)
 	return match_domains(pool->rpc_url, strlen(pool->rpc_url), uri, strlen(uri));
 }
 
+void pool_check_coinbase(struct pool * const pool, const uint8_t * const cbtxn, const size_t cbtxnsz)
+{
+	if (!check_coinbase(cbtxn, cbtxnsz, &pool->cb_param))
+	{
+		applog(LOG_ERR, "Pool %d misbehaving (%s), disabling!", pool->pool_no, "coinbase check");
+		disable_pool(pool, POOL_MISBEHAVING);
+	}
+}
+
 void set_simple_ntime_roll_limit(struct ntime_roll_limits * const nrl, const uint32_t ntime_base, const int ntime_roll)
 {
 	*nrl = (struct ntime_roll_limits){
@@ -3213,11 +3222,7 @@ static bool work_decode(struct pool *pool, struct work *work, json_t *val)
 			struct stratum_work * const swork = &pool->swork;
 			const size_t branchdatasz = branchcount * 0x20;
 			
-			if (!check_coinbase(cbtxn, cbtxnsz, &pool->cb_param))
-			{
-				applog(LOG_ERR, "Mark pool %d as misbehaving for failing to pass coinbase check", pool->pool_no);
-				disable_pool(pool, POOL_MISBEHAVING);
-			}
+			pool_check_coinbase(pool, cbtxn, cbtxnsz);
 			
 			cg_wlock(&pool->data_lock);
 			swork->tr = work->tr;

+ 1 - 0
miner.h

@@ -1525,6 +1525,7 @@ extern void clear_logwin(void);
 extern void logwin_update(void);
 extern bool pool_tclear(struct pool *pool, bool *var);
 extern bool pool_may_redirect_to(struct pool *, const char *uri);
+extern void pool_check_coinbase(struct pool *, const uint8_t *cbtxn, size_t cbtxnsz);
 extern struct thread_q *tq_new(void);
 extern void tq_free(struct thread_q *tq);
 extern bool tq_push(struct thread_q *tq, void *data);

+ 1 - 6
util.c

@@ -2583,12 +2583,7 @@ static bool parse_notify(struct pool *pool, json_t *val)
 	
 	memcpy(pool->swork.target, pool->next_target, 0x20);
 	
-	if (!check_coinbase(coinbase, bytes_len(&pool->swork.coinbase), &pool->cb_param))
-	{
-		applog(LOG_ERR, "Mark pool %d as misbehaving for failing to pass coinbase check", pool->pool_no);
-		/* Just go through the rest process to avoid an "unknown stratum message" log */
-		disable_pool(pool, POOL_MISBEHAVING);
-	}
+	pool_check_coinbase(pool, coinbase, bytes_len(&pool->swork.coinbase));
 	
 	cg_wunlock(&pool->data_lock);