Files
agrarian/src/invalid.cpp
T
2024-12-04 22:14:27 -08:00

91 lines
2.3 KiB
C++

// Copyright (c) 2018 The PIVX developers
// Distributed under the MIT software license, see the accompanying
// file COPYING or http://www.opensource.org/licenses/mit-license.php.
#include "invalid.h"
#include "invalid_outpoints.json.h"
#include "invalid_serials.json.h"
namespace invalid_out
{
std::set<CBigNum> setInvalidSerials;
std::set<COutPoint> setInvalidOutPoints;
UniValue read_json(const std::string& jsondata)
{
UniValue v;
if (!v.read(jsondata) || !v.isArray())
{
return UniValue(UniValue::VARR);
}
return v.get_array();
}
bool LoadOutpoints()
{
UniValue v = read_json(LoadInvalidOutPoints());
if (v.empty())
return false;
for (unsigned int idx = 0; idx < v.size(); idx++) {
const UniValue &val = v[idx];
const UniValue &o = val.get_obj();
const UniValue &vTxid = find_value(o, "txid");
if (!vTxid.isStr())
return false;
uint256 txid = uint256(vTxid.get_str());
if (txid == 0)
return false;
const UniValue &vN = find_value(o, "n");
if (!vN.isNum())
return false;
auto n = static_cast<uint32_t>(vN.get_int());
COutPoint out(txid, n);
setInvalidOutPoints.insert(out);
}
return true;
}
bool LoadSerials()
{
UniValue v = read_json(LoadInvalidSerials());
if (v.empty())
return false;
for (unsigned int idx = 0; idx < v.size(); idx++) {
const UniValue &val = v[idx];
const UniValue &o = val.get_obj();
const UniValue &vSerial = find_value(o, "s");
if (!vSerial.isStr())
return false;
CBigNum bnSerial = 0;
bnSerial.SetHex(vSerial.get_str());
if (bnSerial == 0)
return false;
setInvalidSerials.insert(bnSerial);
}
return true;
}
bool ContainsOutPoint(const COutPoint& out)
{
return static_cast<bool>(setInvalidOutPoints.count(out));
}
bool ContainsSerial(const CBigNum& bnSerial)
{
return static_cast<bool>(setInvalidSerials.count(bnSerial));
}
}