From 83fd01f7559fd29dea099e57e2553d632f0e3ce8 Mon Sep 17 00:00:00 2001 From: Selim Mustafaev Date: Tue, 7 Dec 2021 23:58:13 +0300 Subject: [PATCH] Uploading latest changes --- CMakeLists.txt | 4 ++-- Models/Script.cpp | 5 ++++- Models/Script.h | 9 ++++----- main.cpp | 31 ++++++++++++++++++++++--------- 4 files changed, 32 insertions(+), 17 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index adb419b..a89671a 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -2,9 +2,9 @@ cmake_minimum_required(VERSION 3.19) project(btcexplorer) 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}") +set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -O2") if(APPLE) set(OPENSSL_ROOT_DIR "/usr/local/opt/openssl") diff --git a/Models/Script.cpp b/Models/Script.cpp index 9ccac02..8d8a223 100644 --- a/Models/Script.cpp +++ b/Models/Script.cpp @@ -4,7 +4,10 @@ #include #include -Script::Script(std::span data, bool coinbase): _operations(10) { +Script::Script(std::span data, bool coinbase) { + + _operations.reserve(5); + for(auto iter = data.begin(); iter != data.end();) { auto opCode = OpCode(*iter++); diff --git a/Models/Script.h b/Models/Script.h index 7870de0..a6b3582 100644 --- a/Models/Script.h +++ b/Models/Script.h @@ -157,17 +157,16 @@ struct ScriptOperation { OpCode opCode = OP_INVALIDOPCODE; std::optional> input = std::nullopt; - ScriptOperation(OpCode opCode, std::vector&& param) { + ScriptOperation(OpCode opCode, std::vector&& param) noexcept { this->opCode = opCode; - this->input = param; + this->input = std::move(param); } - ScriptOperation(OpCode opCode) { + explicit ScriptOperation(OpCode opCode) { this->opCode = opCode; } - ScriptOperation() { - } + ScriptOperation() = default; }; class Script { diff --git a/main.cpp b/main.cpp index 84aa63b..3a05ca3 100644 --- a/main.cpp +++ b/main.cpp @@ -7,15 +7,27 @@ #include #include "Models/Block.h" +#include "Models/VarInt.h" 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() { - 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 paths; - for (const auto & entry : fs::directory_iterator(dir)) - paths.insert(entry.path().string()); + for (const auto & entry : fs::directory_iterator(dir)) { + 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(blockBufferSize); std::vector blocks; auto start = std::chrono::high_resolution_clock::now(); @@ -30,18 +42,19 @@ int main() { file.read((char*)&header, sizeof(header)); 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()) { break; } -// if(index == 10117) { -// std::cout << "problem block" << std::endl; -// } - - auto blockData = std::make_unique(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); //std::cout << "Parsed new block " << index++ << " with size: " << header.blockSize << std::endl;