From 54ace9455de82e9693484e25943ab742ed21e495 Mon Sep 17 00:00:00 2001 From: BitMaker Date: Tue, 11 Jul 2023 00:25:23 +0200 Subject: [PATCH] Nonce starting point + fix halving blocks - Added different nonce start point for each thread - Fixed halving block calculation - Added firmware version on initial screen --- src/NerdMinerV2.ino.cpp | 8 ++++++-- src/mining.cpp | 26 ++++++++++++++++++-------- src/monitor.cpp | 33 ++++++++++++++++----------------- src/monitor.h | 4 +++- 4 files changed, 43 insertions(+), 28 deletions(-) diff --git a/src/NerdMinerV2.ino.cpp b/src/NerdMinerV2.ino.cpp index 1cad233..82d3425 100644 --- a/src/NerdMinerV2.ino.cpp +++ b/src/NerdMinerV2.ino.cpp @@ -10,11 +10,14 @@ #include "mbedtls/md.h" #include "media/images.h" #include "media/myFonts.h" +#include "media/Free_Fonts.h" #include "OpenFontRender.h" #include "wManager.h" #include "mining.h" #include "monitor.h" +#define CURRENT_VERSION "V1.5.2" + //3 seconds WDT #define WDT_TIMEOUT 3 OneButton button1(PIN_BUTTON_1); @@ -98,7 +101,8 @@ void setup() /******** PRINT INIT SCREEN *****/ tft.fillScreen(TFT_BLACK); tft.pushImage(0, 0, initWidth, initHeight, initScreen); - + tft.setTextColor(TFT_BLACK); + tft.drawString(CURRENT_VERSION, 24, 130, FONT2); delay(2000); /******** INIT WIFI ************/ @@ -134,7 +138,7 @@ void setup() // Start mining tasks //BaseType_t res = xTaskCreate(runWorker, name, 35000, (void*)name, 1, NULL); xTaskCreate(runMiner, "Miner0", 15000, NULL, 1, NULL); - //xTaskCreate(runMiner, "Miner1", 15000, NULL, 1, NULL); + xTaskCreate(runMiner, "Miner1", 15000, NULL, 1, NULL); /******** MONITOR SETUP *****/ setup_monitor(); diff --git a/src/mining.cpp b/src/mining.cpp index b36ac0a..83ad5c3 100644 --- a/src/mining.cpp +++ b/src/mining.cpp @@ -181,9 +181,9 @@ void runStratumWorker(void *name) { case MINING_NOTIFY: if(parse_mining_notify(line, mJob)){ //Increse templates readed templates++; - //Stop miner current job + //Stop miner current jobs mMiner.inRun = false; - //Prepare data for new job + //Prepare data for new jobs mMiner=calculateMiningData(mWorker,mJob); mMiner.poolDifficulty = currentPoolDifficulty; mMiner.newJob = true; @@ -215,7 +215,9 @@ void runStratumWorker(void *name) { #include "shaTests/customSHA256.h" #include "mbedtls/sha256.h" void runMiner(void * name){ - + unsigned long nonce; + unsigned long max_nonce; + while(1){ //Wait new job @@ -223,9 +225,18 @@ void runMiner(void * name){ if(mMiner.newJob==true || mMiner.newJob2==true) break; vTaskDelay(100 / portTICK_PERIOD_MS); //Small delay } + vTaskDelay(10 / portTICK_PERIOD_MS); //Small delay to join both mining threads - if(mMiner.newJob) mMiner.newJob = false; //Clear newJob flag - else if(mMiner.newJob2) mMiner.newJob2 = false; //Clear newJob flag + if(mMiner.newJob) { + mMiner.newJob = false; //Clear newJob flag + nonce = 0; + max_nonce = MAX_NONCE; + } + else if(mMiner.newJob2){ + mMiner.newJob2 = false; //Clear newJob flag + nonce = TARGET_NONCE - MAX_NONCE; + max_nonce = TARGET_NONCE; + } mMiner.inRun = true; //Set inRun flag //Prepare Premining data @@ -248,12 +259,11 @@ void runMiner(void * name){ Serial.println(""); */ // search a valid nonce - unsigned long nonce = TARGET_NONCE - MAX_NONCE; uint32_t startT = micros(); unsigned char *header64 = mMiner.bytearray_blockheader + 64; Serial.println(">>> STARTING TO HASH NONCES"); while(true) { - //memcpy(mMiner.bytearray_blockheader + 76, &nonce, 4); + memcpy(mMiner.bytearray_blockheader + 76, &nonce, 4); //Con midstate // Primer SHA-256 @@ -274,7 +284,7 @@ void runMiner(void * name){ Serial.println(""); */ hashes++; - if (nonce++> TARGET_NONCE) break; //exit + if (nonce++> max_nonce) break; //exit if(!mMiner.inRun) { Serial.println ("MINER WORK ABORTED >> waiting new job"); break;} // check if 16bit share diff --git a/src/monitor.cpp b/src/monitor.cpp index 730cfeb..cdc1da6 100644 --- a/src/monitor.cpp +++ b/src/monitor.cpp @@ -80,13 +80,12 @@ void updateGlobalData(void){ } http.end(); - //Make second API call to get remaining Blocks + + //OLD code gets remaining blocks to next difficulty ajustment + /*//Make second API call to get remaining Blocks http.begin(getDifficulty); httpCode = http.GET(); - //TODO -> current data is giving new difficulty event - // -> add halving table and calculate blocks to next event - // -> calculate percentage to nearest event if (httpCode > 0) { String payload = http.getString(); @@ -101,7 +100,7 @@ void updateGlobalData(void){ mGlobalUpdate = millis(); } - http.end(); + http.end();*/ //Make third API call to get fees http.begin(getFees); @@ -252,20 +251,16 @@ void show_MinerScreen(unsigned long mElapsed){ render.drawString(String(shares).c_str(), 186, 76, 0xDEDB); //Hores char timeMining[15]; + unsigned long secElapsed = millis() / 1000; int days = secElapsed / 86400; int hours = (secElapsed - (days * 86400)) / 3600; //Number of seconds in an hour int mins = (secElapsed - (days * 86400) - (hours * 3600)) / 60; //Remove the number of hours and calculate the minutes. int secs = secElapsed - (days * 86400) - (hours * 3600) - (mins * 60); - sprintf(timeMining, "%01d,%02d:%02d:%02d", days, hours, mins, secs); - render.setFontSize(33); - render.rdrawString(String(timeMining).c_str(), 315, 102, 0xDEDB); - //Minutss - //render.setFontSize(36); - //render.rdrawString(String(mins).c_str(), 253, 99, 0xDEDB); - //Segons - //render.setFontSize(36); - //render.rdrawString(String(sec).c_str(), 298, 99, 0xDEDB); + sprintf(timeMining, "%01d %02d:%02d:%02d", days, hours, mins, secs); + render.setFontSize(27); + render.rdrawString(String(timeMining).c_str(), 315, 104, 0xDEDB); + //Valid Blocks render.setFontSize(48); render.drawString(String(valids).c_str(), 285, 56, 0xDEDB); @@ -283,10 +278,10 @@ void show_MinerScreen(unsigned long mElapsed){ render.rdrawString(getTime().c_str(), 286, 1, TFT_BLACK); // pool url - background.setTextSize(1); + /*background.setTextSize(1); background.setTextDatum(MC_DATUM); background.setTextColor(0xDEDB); - background.drawString(String(poolString), 59, 85, FONT2); + background.drawString(String(poolString), 59, 85, FONT2);*/ //Push prepared background to screen background.pushSprite(0,0); @@ -390,10 +385,14 @@ void show_GlobalHashScreen(unsigned long mElapsed){ //Print BlockHeight render.setFontSize(55); - render.rdrawString(getBlockHeight().c_str(), 140, 104, 0xDEDB); + gData.currentBlock = getBlockHeight(); + render.rdrawString(gData.currentBlock.c_str(), 140, 104, 0xDEDB); //Draw percentage rectangle //width percent bar 140 - 2 + unsigned long cBlock = gData.currentBlock.toInt(); + gData.remainingBlocks = (((cBlock / HALVING_BLOCKS)+1) * HALVING_BLOCKS) - cBlock; + gData.progressPercent = (HALVING_BLOCKS-gData.remainingBlocks)*100/HALVING_BLOCKS; int x2 = 2 + (138*gData.progressPercent/100); background.fillRect(2, 149, x2, 168, 0xDEDB); diff --git a/src/monitor.h b/src/monitor.h index 9c6d54a..d2bc065 100644 --- a/src/monitor.h +++ b/src/monitor.h @@ -25,6 +25,8 @@ #define getFees "https://mempool.space/api/v1/fees/recommended" #define UPDATE_Global_min 2 +#define NEXT_HALVING_EVENT 840000 +#define HALVING_BLOCKS 210000 typedef struct{ uint8_t screen; @@ -33,7 +35,7 @@ typedef struct{ typedef struct{ String globalHash; //hexahashes - String lastBlock; + String currentBlock; String difficulty; String blocksHalving; float progressPercent;