Block mining and base58
This commit is contained in:
parent
5de5d0bb3f
commit
e0b3d03fdf
4 changed files with 64 additions and 3 deletions
|
@ -3,8 +3,8 @@ project(blockchain)
|
||||||
|
|
||||||
set(CMAKE_CXX_STANDARD 14)
|
set(CMAKE_CXX_STANDARD 14)
|
||||||
find_package(OpenSSL REQUIRED)
|
find_package(OpenSSL REQUIRED)
|
||||||
add_executable(blockchain main.cpp Block.cpp Block.h config.h Blockchain.cpp Blockchain.h)
|
add_executable(blockchain main.cpp Block.cpp Block.h config.h Blockchain.cpp Blockchain.h base58.cpp base58.h)
|
||||||
add_executable(test test/main.cpp Block.cpp Block.h)
|
add_executable(test test/main.cpp Block.cpp Block.h base58.h base58.cpp)
|
||||||
include_directories(${OPENSSL_INCLUDE_DIR})
|
include_directories(${OPENSSL_INCLUDE_DIR})
|
||||||
target_link_libraries(test ${OPENSSL_LIBRARIES})
|
target_link_libraries(test ${OPENSSL_LIBRARIES})
|
||||||
target_link_libraries(blockchain ${OPENSSL_LIBRARIES})
|
target_link_libraries(blockchain ${OPENSSL_LIBRARIES})
|
43
base58.cpp
Normal file
43
base58.cpp
Normal file
|
@ -0,0 +1,43 @@
|
||||||
|
//
|
||||||
|
// Készítette: Toldi Balázs Ádám
|
||||||
|
// Dátum: 2020. 03. 27.
|
||||||
|
//
|
||||||
|
|
||||||
|
|
||||||
|
#include "base58.h"
|
||||||
|
|
||||||
|
static const char* Base58arr = "123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz";
|
||||||
|
|
||||||
|
std::string base58::encode(const char *data, int len) {
|
||||||
|
int zero = 0;
|
||||||
|
int clen = 0;
|
||||||
|
for (int i = 0; i < len && data[i] == 0; ++i)
|
||||||
|
zero++;
|
||||||
|
int size = len*138/100+1;
|
||||||
|
std::vector<unsigned char> b58(size);
|
||||||
|
for (int j = 0; j < len; ++j) {
|
||||||
|
int carry = data[j];
|
||||||
|
int i = 0;
|
||||||
|
for (auto it = b58.rbegin(); (carry != 0 || i < clen) && (it != b58.rend()); it++, i++) {
|
||||||
|
carry += 256* (*it);
|
||||||
|
*it = carry % 58;
|
||||||
|
carry /= 58;
|
||||||
|
}
|
||||||
|
assert(carry == 0);
|
||||||
|
clen = i;
|
||||||
|
}
|
||||||
|
auto it = b58.begin() + (size - clen);
|
||||||
|
while (it != b58.end() && *it == 0)
|
||||||
|
it++;
|
||||||
|
// Translate the result into a string.
|
||||||
|
std::string str;
|
||||||
|
str.reserve(zero + (b58.end() - it));
|
||||||
|
str.assign(zero, '1');
|
||||||
|
while (it != b58.end())
|
||||||
|
str += Base58arr[*(it++)];
|
||||||
|
return str;
|
||||||
|
}
|
||||||
|
|
||||||
|
std::string base58::encode(const std::string &data) {
|
||||||
|
return encode(data.c_str(),data.length());
|
||||||
|
}
|
17
base58.h
Normal file
17
base58.h
Normal file
|
@ -0,0 +1,17 @@
|
||||||
|
//
|
||||||
|
// Készítette: Toldi Balázs Ádám
|
||||||
|
// Dátum: 2020. 03. 27.
|
||||||
|
//
|
||||||
|
|
||||||
|
#ifndef BLOCKCHAIN_BASE58_H
|
||||||
|
#define BLOCKCHAIN_BASE58_H
|
||||||
|
|
||||||
|
#include <string>
|
||||||
|
#include <cstring>
|
||||||
|
#include <vector>
|
||||||
|
#include <cassert>
|
||||||
|
namespace base58 {
|
||||||
|
std::string encode(const char * data, int len);
|
||||||
|
std::string encode(const std::string& data);
|
||||||
|
}
|
||||||
|
#endif //BLOCKCHAIN_BASE58_H
|
|
@ -1,7 +1,7 @@
|
||||||
#include <iostream>
|
#include <iostream>
|
||||||
#include <cstring>
|
|
||||||
#include <sstream>
|
#include <sstream>
|
||||||
#include <openssl/sha.h>
|
#include <openssl/sha.h>
|
||||||
|
#include "../base58.h"
|
||||||
|
|
||||||
class Entity{
|
class Entity{
|
||||||
float x,y;
|
float x,y;
|
||||||
|
@ -26,5 +26,6 @@ int main(){
|
||||||
for(int i = 0; i < SHA256_DIGEST_LENGTH; i++)
|
for(int i = 0; i < SHA256_DIGEST_LENGTH; i++)
|
||||||
ss << std::hex << (int)md[i];
|
ss << std::hex << (int)md[i];
|
||||||
std::cout << ss.str() << std::endl;
|
std::cout << ss.str() << std::endl;
|
||||||
|
std::cout << base58::encode("cat") << std::endl;
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
Loading…
Reference in a new issue