Path: blob/master/Unofficial miners/Teensy_code/Teensy_code.ino
920 views
////////////////////////////////////////////////////////// // _____ _ _____ _ // | __ \ (_) / ____| (_) // | | | |_ _ _ _ __ ___ ______| | ___ _ _ __ // | | | | | | | | '_ \ / _ \______| | / _ \| | '_ \ // | |__| | |_| | | | | | (_) | | |___| (_) | | | | | // |_____/ \__,_|_|_| |_|\___/ \_____\___/|_|_| |_| // Code for Teensy 4.1 boards v2.4 // © Duino-Coin Community 2019-2022 // Distributed under MIT License ////////////////////////////////////////////////////////// // https://github.com/joaquinbvw - Teensy 4.1 code // https://github.com/revoxhere/duino-coin - GitHub // https://duinocoin.com - Official Website // https://discord.gg/k48Ht5y - Discord ////////////////////////////////////////////////////////// // If you don't know what to do, visit official website // and navigate to Getting Started page. Happy mining! ////////////////////////////////////////////////////////// // Include SHA1 library // Authors: https://github.com/daknuett, https://github.com/JoyBed, https://github.com/revox #include "sha1.h" // Include Arduino identifier library // Author: https://github.com/ricaun //#include "uniqueID.h" #include "Arduino.h" #include <TeensyID.h> // Create globals char buffer[44]; String IDstring = "DUCOID"; String lastblockhash = ""; String newblockhash = ""; unsigned int difficulty = 0; unsigned int ducos1result = 0; int led = 13; unsigned int sizeofblockhash1 = 100; unsigned char* newblockhash1; // Setup stuff void setup() { lastblockhash.reserve(200); newblockhash.reserve(200); // Prepare built-in led pin as output //pinMode(LED_BUILTIN, OUTPUT); pinMode(led, OUTPUT); // Open serial port Serial.begin(1000000); Serial.setTimeout(5000); // Grab Arduino chip ID uint8_t uid64[8]; teensyUID64(uid64); IDstring = IDstring + teensyUID64(); IDstring.remove(IDstring.length()-3,1); IDstring.remove(IDstring.length()-5,1); IDstring.remove(IDstring.length()-7,1); IDstring.remove(IDstring.length()-9,1); IDstring.remove(IDstring.length()-11,1); IDstring.remove(IDstring.length()-13,1); IDstring.remove(IDstring.length()-15,1); //for (size_t i = 0; i < 8; i++) //IDstring += uid64[i]; //IDstring += UniqueID[i]; newblockhash1 = (unsigned char*)malloc(sizeofblockhash1 * sizeof(unsigned char)); Serial.flush(); //Serial.println(IDstring); //Serial.println(SHA1_HASH_LEN*sizeof(char)); } // DUCO-S1A hasher int ducos1a(String lastblockhash_, String newblockhash_, int difficulty_) { // DUCO-S1 algorithm implementation for AVR boards (DUCO-S1A) // Difficulty loop //Conversion const char * c = newblockhash_.c_str(); size_t len = newblockhash_.length(); size_t final_len = len / 2; //unsigned char* newblockhash1 = (unsigned char*)malloc((final_len + 1) * sizeof(unsigned char)); memset(newblockhash1, 0, sizeofblockhash1); for (size_t i = 0, j = 0; j < final_len; i += 2, j++) newblockhash1[j] = (c[i] % 32 + 9) % 25 * 16 + (c[i + 1] % 32 + 9) % 25; for (int ducos1res = 0; ducos1res < difficulty_ * 100 + 1; ducos1res++) { delayMicroseconds(65); Sha1.init(); Sha1.print(lastblockhash_ + String(ducos1res)); //Sha1.print(lastblockhash_ + ducos1res); // Get SHA1 result uint8_t * hash_bytes = Sha1.result(); //delayMicroseconds(50); //if (memcmp(hash_bytes, newblockhash1, sizeof(hash_bytes)) == 0) { //if (memcmp(hash_bytes, newblockhash1, SHA1_HASH_LEN) == 0) { if (memcmp(hash_bytes, newblockhash1, SHA1_HASH_LEN*sizeof(char)) == 0) { // If expected hash is equal to the found hash, return the result return ducos1res; } } return 0; } // Infinite loop void loop() { // Wait for serial data while (Serial.available() > 10) { // Read last block hash lastblockhash = Serial.readStringUntil(','); // Read expected hash newblockhash = Serial.readStringUntil(','); // Read difficulty difficulty = Serial.readStringUntil(',').toInt(); while(Serial.available()) Serial.read(); newblockhash.toUpperCase(); // Start time measurement unsigned long startTime = micros(); // Call DUCO-S1A hasher ducos1result = ducos1a(lastblockhash, newblockhash, difficulty); lastblockhash = ""; newblockhash = ""; difficulty = 0; // End time measurement unsigned long endTime = micros(); // Calculate elapsed time unsigned long elapsedTime = endTime - startTime; // Send result back to the program with share time while(Serial.available()) Serial.read(); Serial.print(String(ducos1result) + "," + String(elapsedTime) + "," + String(IDstring) + "\n"); // Turn on built-in led //PORTB = PORTB | B00100000; digitalWrite(led, HIGH); // Wait a bit delay(25); // Turn off built-in led //PORTB = PORTB & B11011111; digitalWrite(led, LOW); } }