diff --git a/Makefile.am b/Makefile.am index f9965c1ba6..8bccb2afb7 100644 --- a/Makefile.am +++ b/Makefile.am @@ -23,7 +23,8 @@ sugarmaker_SOURCES = elist.h miner.h compat.h \ YespowerNull.c \ YespowerUrx.c \ YespowerLitb.c \ - YespowerIots.c + YespowerIots.c \ + YespowerItc.c sugarmaker_LDFLAGS = $(PTHREAD_FLAGS) sugarmaker_LDADD = @LIBCURL@ @JANSSON_LIBS@ @PTHREAD_LIBS@ @WS2_LIBS@ diff --git a/YespowerItc.c b/YespowerItc.c new file mode 100644 index 0000000000..b79dab5a3d --- /dev/null +++ b/YespowerItc.c @@ -0,0 +1,84 @@ +/* + * Copyright 2011 ArtForz, 2011-2014 pooler, 2018 The Resistance developers, 2020 The Sugarchain Yumekawa developers + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * + * This file is loosly based on a tiny portion of pooler's cpuminer scrypt.c. + */ + +#include "cpuminer-config.h" +#include "miner.h" + +#include "yespower-1.0.1/yespower.h" + +#include +#include +#include + +int scanhash_itc_yespower(int thr_id, uint32_t *pdata, + const uint32_t *ptarget, + uint32_t max_nonce, unsigned long *hashes_done) +{ + static const yespower_params_t params = { + .version = YESPOWER_1_0, + .N = 2048, + .r = 32, + .pers = (const uint8_t *)"InterITC", + .perslen = 8 + }; + union { + uint8_t u8[8]; + uint32_t u32[20]; + } data; + union { + yespower_binary_t yb; + uint32_t u32[7]; + } hash; + uint32_t n = pdata[19] - 1; + const uint32_t Htarg = ptarget[7]; + int i; + + for (i = 0; i < 19; i++) + be32enc(&data.u32[i], pdata[i]); + + do { + be32enc(&data.u32[19], ++n); + + if (yespower_tls(data.u8, 80, ¶ms, &hash.yb)) + abort(); + + if (le32dec(&hash.u32[7]) <= Htarg) { + for (i = 0; i < 7; i++) + hash.u32[i] = le32dec(&hash.u32[i]); + if (fulltest(hash.u32, ptarget)) { + *hashes_done = n - pdata[19] + 1; + pdata[19] = n; + return 1; + } + } + } while (n < max_nonce && !work_restart[thr_id].restart); + + *hashes_done = n - pdata[19] + 1; + pdata[19] = n; + return 0; +} diff --git a/cpu-miner.c b/cpu-miner.c index 813795cd0d..3b0abf2a37 100644 --- a/cpu-miner.c +++ b/cpu-miner.c @@ -107,6 +107,7 @@ enum algos { ALGO_URX_YESPOWER_1_0_1, ALGO_LITB_YESPOWER_1_0_1, ALGO_IOTS_YESPOWER_1_0_1, + ALGO_ITC_YESPOWER_1_0_1, }; static const char *algo_names[] = { @@ -116,6 +117,7 @@ static const char *algo_names[] = { [ALGO_URX_YESPOWER_1_0_1] = "YespowerUrx", [ALGO_LITB_YESPOWER_1_0_1] = "YespowerLitb", [ALGO_IOTS_YESPOWER_1_0_1] = "YespowerIots", + [ALGO_ITC_YESPOWER_1_0_1] = "YespowerItc", }; bool opt_debug = false; @@ -182,6 +184,7 @@ Options:\n\ YespowerUrx: UraniumX\n\ YespowerLitb: LightBit\n\ YespowerIots: IOTS\n\ + YespowerItc: Intercoin\n\ -o, --url=URL URL of mining server\n\ -O, --userpass=U:P username:password pair for mining server\n\ -u, --user=USERNAME username for mining server\n\ @@ -1207,6 +1210,9 @@ static void *miner_thread(void *userdata) case ALGO_IOTS_YESPOWER_1_0_1: max64 = 499; break; + case ALGO_ITC_YESPOWER_1_0_1: + max64 = 499; + break; } } if (work.data[19] + max64 > end_nonce) @@ -1256,6 +1262,12 @@ static void *miner_thread(void *userdata) ); break; + case ALGO_ITC_YESPOWER_1_0_1: + rc = scanhash_itc_yespower( + thr_id, work.data, work.target, max_nonce, &hashes_done + ); + break; + default: /* should never happen */ goto out; diff --git a/miner.h b/miner.h index 2181dcb758..2682f676dd 100644 --- a/miner.h +++ b/miner.h @@ -160,6 +160,10 @@ extern int scanhash_iots_yespower(int thr_id, uint32_t *pdata, const uint32_t *ptarget, uint32_t max_nonce, unsigned long *hashes_done); +extern int scanhash_itc_yespower(int thr_id, uint32_t *pdata, + const uint32_t *ptarget, + uint32_t max_nonce, unsigned long *hashes_done); + struct thr_info { int id; pthread_t pth;