#arduino #sha
Вопрос:
Я пытаюсь создать небольшой блокчейн, в котором блоки могут быть добыты с помощью Arduinos в рамках моего основного проекта, и я застрял с этой проблемой в течение последних 15 часов.
Я реализовал простую цепочку блоков в python, и она отлично работает во время майнинга и после того , как некоторые блоки будут добыты, если предыдущий хэш имеет конечный символ as 0
, то я получаю неверный SHA-1
вывод.
В моем блокчейне доказательство работы будет проверять, есть ли один, начинающийся 0
в хэше, или нет. И этот хэш будет рассчитан с использованием previous_hash
объединенного с a nonce
.
Вот мой код:
#include "sha1.h"
void setup(){
Serial.begin(115200);
}
void loop() {
if(Serial.available() > 0){
String s = Serial.readStringUntil(',');
Serial.print("Input: ");
Serial.println(s);
compute_hash(s);
//read out the extra bytes
while(Serial.available())
Serial.read();
}
}
//computes the has until it has found a hash that is starting with a '0' character
void compute_hash(String s){
char *digitArray = "0123456789abcdef";
int nonce = 0;
char buffer[40];
//hash the string until the starting two characters are equal to zero
//every time we do not find the required hash, we will add a nonce to it by incrementing it
while(buffer[0] != '0'){
String h=s;
uint8_t *hash;
//add nonce to the string
h.concat(nonce);
Serial.print("concated string: ");
Serial.println(h);
Sha1.init();
Sha1.print(h);
hash = Sha1.result();
for(int i=0; i<40; i =2){
buffer[i] = digitArray[(hash[i/2] amp; 0xF0) >> 4];
buffer[i 1] = digitArray[(hash[i/2] amp; 0x0F)];
}
nonce = 1;
}
for(int i=0; i<40; i ){
Serial.print(buffer[i]);
}
Serial.print(",");
Serial.println(nonce);
}
Я использую эти https://github.com/Arduino-IoT/libraries/tree/master/Cryptosuite включить файлы для sha1.h
Я получаю неправильный хэш для этого ввода 059e615d5e041f66d3f32e7788dac69271d8cfd0
, для этого ввода вывод должен быть 011fa5182d3dc2f2051730430f89a9ef9e98fe5f,27
, 27
где nonce
начинается хэш 0
, но то, что я получаю в своем выводе 08c6d46a863cd6256faac014760ccd3fdd1ba72,0
, неверно по сравнению с фактическим выводом.
Любая помощь будет признательна. Спасибо!