Nonce starting point + fix halving blocks
- Added different nonce start point for each thread - Fixed halving block calculation - Added firmware version on initial screen
This commit is contained in:
parent
2adfede605
commit
54ace9455d
@ -10,11 +10,14 @@
|
|||||||
#include "mbedtls/md.h"
|
#include "mbedtls/md.h"
|
||||||
#include "media/images.h"
|
#include "media/images.h"
|
||||||
#include "media/myFonts.h"
|
#include "media/myFonts.h"
|
||||||
|
#include "media/Free_Fonts.h"
|
||||||
#include "OpenFontRender.h"
|
#include "OpenFontRender.h"
|
||||||
#include "wManager.h"
|
#include "wManager.h"
|
||||||
#include "mining.h"
|
#include "mining.h"
|
||||||
#include "monitor.h"
|
#include "monitor.h"
|
||||||
|
|
||||||
|
#define CURRENT_VERSION "V1.5.2"
|
||||||
|
|
||||||
//3 seconds WDT
|
//3 seconds WDT
|
||||||
#define WDT_TIMEOUT 3
|
#define WDT_TIMEOUT 3
|
||||||
OneButton button1(PIN_BUTTON_1);
|
OneButton button1(PIN_BUTTON_1);
|
||||||
@ -98,7 +101,8 @@ void setup()
|
|||||||
/******** PRINT INIT SCREEN *****/
|
/******** PRINT INIT SCREEN *****/
|
||||||
tft.fillScreen(TFT_BLACK);
|
tft.fillScreen(TFT_BLACK);
|
||||||
tft.pushImage(0, 0, initWidth, initHeight, initScreen);
|
tft.pushImage(0, 0, initWidth, initHeight, initScreen);
|
||||||
|
tft.setTextColor(TFT_BLACK);
|
||||||
|
tft.drawString(CURRENT_VERSION, 24, 130, FONT2);
|
||||||
delay(2000);
|
delay(2000);
|
||||||
|
|
||||||
/******** INIT WIFI ************/
|
/******** INIT WIFI ************/
|
||||||
@ -134,7 +138,7 @@ void setup()
|
|||||||
// Start mining tasks
|
// Start mining tasks
|
||||||
//BaseType_t res = xTaskCreate(runWorker, name, 35000, (void*)name, 1, NULL);
|
//BaseType_t res = xTaskCreate(runWorker, name, 35000, (void*)name, 1, NULL);
|
||||||
xTaskCreate(runMiner, "Miner0", 15000, NULL, 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 *****/
|
/******** MONITOR SETUP *****/
|
||||||
setup_monitor();
|
setup_monitor();
|
||||||
|
@ -181,9 +181,9 @@ void runStratumWorker(void *name) {
|
|||||||
case MINING_NOTIFY: if(parse_mining_notify(line, mJob)){
|
case MINING_NOTIFY: if(parse_mining_notify(line, mJob)){
|
||||||
//Increse templates readed
|
//Increse templates readed
|
||||||
templates++;
|
templates++;
|
||||||
//Stop miner current job
|
//Stop miner current jobs
|
||||||
mMiner.inRun = false;
|
mMiner.inRun = false;
|
||||||
//Prepare data for new job
|
//Prepare data for new jobs
|
||||||
mMiner=calculateMiningData(mWorker,mJob);
|
mMiner=calculateMiningData(mWorker,mJob);
|
||||||
mMiner.poolDifficulty = currentPoolDifficulty;
|
mMiner.poolDifficulty = currentPoolDifficulty;
|
||||||
mMiner.newJob = true;
|
mMiner.newJob = true;
|
||||||
@ -215,7 +215,9 @@ void runStratumWorker(void *name) {
|
|||||||
#include "shaTests/customSHA256.h"
|
#include "shaTests/customSHA256.h"
|
||||||
#include "mbedtls/sha256.h"
|
#include "mbedtls/sha256.h"
|
||||||
void runMiner(void * name){
|
void runMiner(void * name){
|
||||||
|
unsigned long nonce;
|
||||||
|
unsigned long max_nonce;
|
||||||
|
|
||||||
while(1){
|
while(1){
|
||||||
|
|
||||||
//Wait new job
|
//Wait new job
|
||||||
@ -223,9 +225,18 @@ void runMiner(void * name){
|
|||||||
if(mMiner.newJob==true || mMiner.newJob2==true) break;
|
if(mMiner.newJob==true || mMiner.newJob2==true) break;
|
||||||
vTaskDelay(100 / portTICK_PERIOD_MS); //Small delay
|
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
|
if(mMiner.newJob) {
|
||||||
else if(mMiner.newJob2) mMiner.newJob2 = false; //Clear newJob flag
|
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
|
mMiner.inRun = true; //Set inRun flag
|
||||||
|
|
||||||
//Prepare Premining data
|
//Prepare Premining data
|
||||||
@ -248,12 +259,11 @@ void runMiner(void * name){
|
|||||||
Serial.println("");
|
Serial.println("");
|
||||||
*/
|
*/
|
||||||
// search a valid nonce
|
// search a valid nonce
|
||||||
unsigned long nonce = TARGET_NONCE - MAX_NONCE;
|
|
||||||
uint32_t startT = micros();
|
uint32_t startT = micros();
|
||||||
unsigned char *header64 = mMiner.bytearray_blockheader + 64;
|
unsigned char *header64 = mMiner.bytearray_blockheader + 64;
|
||||||
Serial.println(">>> STARTING TO HASH NONCES");
|
Serial.println(">>> STARTING TO HASH NONCES");
|
||||||
while(true) {
|
while(true) {
|
||||||
//memcpy(mMiner.bytearray_blockheader + 76, &nonce, 4);
|
memcpy(mMiner.bytearray_blockheader + 76, &nonce, 4);
|
||||||
|
|
||||||
//Con midstate
|
//Con midstate
|
||||||
// Primer SHA-256
|
// Primer SHA-256
|
||||||
@ -274,7 +284,7 @@ void runMiner(void * name){
|
|||||||
Serial.println(""); */
|
Serial.println(""); */
|
||||||
|
|
||||||
hashes++;
|
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;}
|
if(!mMiner.inRun) { Serial.println ("MINER WORK ABORTED >> waiting new job"); break;}
|
||||||
|
|
||||||
// check if 16bit share
|
// check if 16bit share
|
||||||
|
@ -80,13 +80,12 @@ void updateGlobalData(void){
|
|||||||
}
|
}
|
||||||
http.end();
|
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);
|
http.begin(getDifficulty);
|
||||||
httpCode = http.GET();
|
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) {
|
if (httpCode > 0) {
|
||||||
String payload = http.getString();
|
String payload = http.getString();
|
||||||
|
|
||||||
@ -101,7 +100,7 @@ void updateGlobalData(void){
|
|||||||
mGlobalUpdate = millis();
|
mGlobalUpdate = millis();
|
||||||
}
|
}
|
||||||
|
|
||||||
http.end();
|
http.end();*/
|
||||||
|
|
||||||
//Make third API call to get fees
|
//Make third API call to get fees
|
||||||
http.begin(getFees);
|
http.begin(getFees);
|
||||||
@ -252,20 +251,16 @@ void show_MinerScreen(unsigned long mElapsed){
|
|||||||
render.drawString(String(shares).c_str(), 186, 76, 0xDEDB);
|
render.drawString(String(shares).c_str(), 186, 76, 0xDEDB);
|
||||||
//Hores
|
//Hores
|
||||||
char timeMining[15];
|
char timeMining[15];
|
||||||
|
|
||||||
unsigned long secElapsed = millis() / 1000;
|
unsigned long secElapsed = millis() / 1000;
|
||||||
int days = secElapsed / 86400;
|
int days = secElapsed / 86400;
|
||||||
int hours = (secElapsed - (days * 86400)) / 3600; //Number of seconds in an hour
|
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 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);
|
int secs = secElapsed - (days * 86400) - (hours * 3600) - (mins * 60);
|
||||||
sprintf(timeMining, "%01d,%02d:%02d:%02d", days, hours, mins, secs);
|
sprintf(timeMining, "%01d %02d:%02d:%02d", days, hours, mins, secs);
|
||||||
render.setFontSize(33);
|
render.setFontSize(27);
|
||||||
render.rdrawString(String(timeMining).c_str(), 315, 102, 0xDEDB);
|
render.rdrawString(String(timeMining).c_str(), 315, 104, 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);
|
|
||||||
//Valid Blocks
|
//Valid Blocks
|
||||||
render.setFontSize(48);
|
render.setFontSize(48);
|
||||||
render.drawString(String(valids).c_str(), 285, 56, 0xDEDB);
|
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);
|
render.rdrawString(getTime().c_str(), 286, 1, TFT_BLACK);
|
||||||
|
|
||||||
// pool url
|
// pool url
|
||||||
background.setTextSize(1);
|
/*background.setTextSize(1);
|
||||||
background.setTextDatum(MC_DATUM);
|
background.setTextDatum(MC_DATUM);
|
||||||
background.setTextColor(0xDEDB);
|
background.setTextColor(0xDEDB);
|
||||||
background.drawString(String(poolString), 59, 85, FONT2);
|
background.drawString(String(poolString), 59, 85, FONT2);*/
|
||||||
|
|
||||||
//Push prepared background to screen
|
//Push prepared background to screen
|
||||||
background.pushSprite(0,0);
|
background.pushSprite(0,0);
|
||||||
@ -390,10 +385,14 @@ void show_GlobalHashScreen(unsigned long mElapsed){
|
|||||||
|
|
||||||
//Print BlockHeight
|
//Print BlockHeight
|
||||||
render.setFontSize(55);
|
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
|
//Draw percentage rectangle
|
||||||
//width percent bar 140 - 2
|
//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);
|
int x2 = 2 + (138*gData.progressPercent/100);
|
||||||
background.fillRect(2, 149, x2, 168, 0xDEDB);
|
background.fillRect(2, 149, x2, 168, 0xDEDB);
|
||||||
|
|
||||||
|
@ -25,6 +25,8 @@
|
|||||||
#define getFees "https://mempool.space/api/v1/fees/recommended"
|
#define getFees "https://mempool.space/api/v1/fees/recommended"
|
||||||
#define UPDATE_Global_min 2
|
#define UPDATE_Global_min 2
|
||||||
|
|
||||||
|
#define NEXT_HALVING_EVENT 840000
|
||||||
|
#define HALVING_BLOCKS 210000
|
||||||
|
|
||||||
typedef struct{
|
typedef struct{
|
||||||
uint8_t screen;
|
uint8_t screen;
|
||||||
@ -33,7 +35,7 @@ typedef struct{
|
|||||||
|
|
||||||
typedef struct{
|
typedef struct{
|
||||||
String globalHash; //hexahashes
|
String globalHash; //hexahashes
|
||||||
String lastBlock;
|
String currentBlock;
|
||||||
String difficulty;
|
String difficulty;
|
||||||
String blocksHalving;
|
String blocksHalving;
|
||||||
float progressPercent;
|
float progressPercent;
|
||||||
|
Loading…
Reference in New Issue
Block a user