Uploading latest changes
This commit is contained in:
parent
ada171e531
commit
83fd01f755
@ -2,9 +2,9 @@ cmake_minimum_required(VERSION 3.19)
|
|||||||
project(btcexplorer)
|
project(btcexplorer)
|
||||||
|
|
||||||
set(CMAKE_CXX_STANDARD 20)
|
set(CMAKE_CXX_STANDARD 20)
|
||||||
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -O0")
|
#set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -O0")
|
||||||
#set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fsanitize=address")
|
#set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fsanitize=address")
|
||||||
#set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS}")
|
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -O2")
|
||||||
|
|
||||||
if(APPLE)
|
if(APPLE)
|
||||||
set(OPENSSL_ROOT_DIR "/usr/local/opt/openssl")
|
set(OPENSSL_ROOT_DIR "/usr/local/opt/openssl")
|
||||||
|
|||||||
@ -4,7 +4,10 @@
|
|||||||
#include <iostream>
|
#include <iostream>
|
||||||
#include <iomanip>
|
#include <iomanip>
|
||||||
|
|
||||||
Script::Script(std::span<uint8_t> data, bool coinbase): _operations(10) {
|
Script::Script(std::span<uint8_t> data, bool coinbase) {
|
||||||
|
|
||||||
|
_operations.reserve(5);
|
||||||
|
|
||||||
for(auto iter = data.begin(); iter != data.end();) {
|
for(auto iter = data.begin(); iter != data.end();) {
|
||||||
auto opCode = OpCode(*iter++);
|
auto opCode = OpCode(*iter++);
|
||||||
|
|
||||||
|
|||||||
@ -157,17 +157,16 @@ struct ScriptOperation {
|
|||||||
OpCode opCode = OP_INVALIDOPCODE;
|
OpCode opCode = OP_INVALIDOPCODE;
|
||||||
std::optional<std::vector<uint8_t>> input = std::nullopt;
|
std::optional<std::vector<uint8_t>> input = std::nullopt;
|
||||||
|
|
||||||
ScriptOperation(OpCode opCode, std::vector<uint8_t>&& param) {
|
ScriptOperation(OpCode opCode, std::vector<uint8_t>&& param) noexcept {
|
||||||
this->opCode = opCode;
|
this->opCode = opCode;
|
||||||
this->input = param;
|
this->input = std::move(param);
|
||||||
}
|
}
|
||||||
|
|
||||||
ScriptOperation(OpCode opCode) {
|
explicit ScriptOperation(OpCode opCode) {
|
||||||
this->opCode = opCode;
|
this->opCode = opCode;
|
||||||
}
|
}
|
||||||
|
|
||||||
ScriptOperation() {
|
ScriptOperation() = default;
|
||||||
}
|
|
||||||
};
|
};
|
||||||
|
|
||||||
class Script {
|
class Script {
|
||||||
|
|||||||
31
main.cpp
31
main.cpp
@ -7,15 +7,27 @@
|
|||||||
#include <set>
|
#include <set>
|
||||||
|
|
||||||
#include "Models/Block.h"
|
#include "Models/Block.h"
|
||||||
|
#include "Models/VarInt.h"
|
||||||
|
|
||||||
namespace fs = std::filesystem;
|
namespace fs = std::filesystem;
|
||||||
|
|
||||||
|
void processBlock(std::byte* data, size_t size) {
|
||||||
|
VarInt txCount(data + sizeof(BlockHeader));
|
||||||
|
auto pTxData = data + sizeof(BlockHeader) + txCount.size();
|
||||||
|
}
|
||||||
|
|
||||||
int main() {
|
int main() {
|
||||||
std::string dir = "/home/selim/dl/blocks"; // "/Users/selim/Documents/blk00000.dat";
|
std::string dir = "/home/selim/dl/bitcoin/blocks"; //"/home/selim/dl/blocks"; // "/Users/selim/Documents/blk00000.dat";
|
||||||
std::set<fs::path> paths;
|
std::set<fs::path> paths;
|
||||||
|
|
||||||
for (const auto & entry : fs::directory_iterator(dir))
|
for (const auto & entry : fs::directory_iterator(dir)) {
|
||||||
paths.insert(entry.path().string());
|
if(entry.path().filename().string().starts_with("blk")) {
|
||||||
|
paths.insert(entry.path().string());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
constexpr size_t blockBufferSize = 10*1024*1024;
|
||||||
|
auto blockData = std::make_unique<std::byte[]>(blockBufferSize);
|
||||||
|
|
||||||
std::vector<Block> blocks;
|
std::vector<Block> blocks;
|
||||||
auto start = std::chrono::high_resolution_clock::now();
|
auto start = std::chrono::high_resolution_clock::now();
|
||||||
@ -30,18 +42,19 @@ int main() {
|
|||||||
file.read((char*)&header, sizeof(header));
|
file.read((char*)&header, sizeof(header));
|
||||||
header.magic = (BlockMagic)__builtin_bswap32(header.magic);
|
header.magic = (BlockMagic)__builtin_bswap32(header.magic);
|
||||||
|
|
||||||
|
if(header.blockSize > blockBufferSize) {
|
||||||
|
std::cout << "Insufficient block buffer size. Exiting" << std::endl;
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
if(file.eof()) {
|
if(file.eof()) {
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
// if(index == 10117) {
|
|
||||||
// std::cout << "problem block" << std::endl;
|
|
||||||
// }
|
|
||||||
|
|
||||||
auto blockData = std::make_unique<std::byte[]>(header.blockSize);
|
|
||||||
file.read((char*)blockData.get(), header.blockSize);
|
file.read((char*)blockData.get(), header.blockSize);
|
||||||
|
|
||||||
Block block(blockData.get(), header.blockSize);
|
processBlock(blockData.get(), header.blockSize);
|
||||||
|
//Block block(blockData.get(), header.blockSize);
|
||||||
//blocks.emplace_back(blockData.get(), header.blockSize);
|
//blocks.emplace_back(blockData.get(), header.blockSize);
|
||||||
|
|
||||||
//std::cout << "Parsed new block " << index++ << " with size: " << header.blockSize << std::endl;
|
//std::cout << "Parsed new block " << index++ << " with size: " << header.blockSize << std::endl;
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user