BtcExplorer/Models/Transaction.cpp

35 lines
1019 B
C++

#include "Transaction.h"
#include "VarInt.h"
#include <iostream>
Transaction::Transaction(const std::byte *data) {
_version = *((uint32_t*)data);
VarInt inputCount(data + sizeof(_version));
const std::byte* curPtr = data + sizeof(_version) + inputCount.size();
//std::cout << "======== Transaction ========" << std::endl;
for(size_t i = 0; i < inputCount.value(); ++i) {
TxInput input(curPtr);
curPtr += input.size();
_inputs.emplace_back(std::move(input));
}
VarInt outputCount(curPtr);
curPtr += outputCount.size();
for(size_t i = 0; i < outputCount.value(); ++i) {
TxOutput output(curPtr);
curPtr += output.size();
//std::cout << "Output " << output.value()/100000000.0 << " BTC to address: " << output.address() << std::endl;
_outputs.emplace_back(std::move(output));
}
_lockTime = *((uint32_t*)curPtr);
_size = curPtr - data + sizeof(_lockTime);
}
size_t Transaction::size() const {
return _size;
}