BtcExplorer/Models/TxInput.cpp

31 lines
1007 B
C++

#include "TxInput.h"
#include "VarInt.h"
#include <algorithm>
#include <iostream>
#include <cstring>
static const std::array<std::byte,TxInput::idSize> nullArray {};
TxInput::TxInput(const std::byte *data) {
std::copy_n(data, _txId.size(), _txId.begin());
data += _txId.size();
_vOut = *reinterpret_cast<const uint32_t*>(data);
data += sizeof(_vOut);
VarInt scriptSigSize(data);
data += scriptSigSize.size();
int cmpResult = memcmp(_txId.data(), nullArray.data(), idSize);
bool coinbase = cmpResult == 0;
//std::cout << "=== Creating signature script of size: " << scriptSigSize.value() << std::endl;
_signatureScript = std::make_unique<Script>(std::span((uint8_t*)data, scriptSigSize.value()), coinbase);
data += scriptSigSize.value();
_sequence = *reinterpret_cast<const uint32_t*>(data);
_size = _txId.size() + sizeof(_vOut) + scriptSigSize.size() + scriptSigSize.value() + sizeof(_sequence);
}
size_t TxInput::size() const {
return _size;
}