Hush Full Node software. We were censored from Github, this is where all development happens now.
https://hush.is
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
87 lines
2.6 KiB
87 lines
2.6 KiB
// Copyright (c) 2016-2020 The Hush developers
|
|
// Distributed under the GPLv3 software license, see the accompanying
|
|
// file COPYING or https://www.gnu.org/licenses/gpl-3.0.en.html
|
|
#include <gtest/gtest.h>
|
|
#include "consensus/upgrades.h"
|
|
#include "consensus/validation.h"
|
|
#include "main.h"
|
|
#include "utiltest.h"
|
|
|
|
extern bool ReceivedBlockTransactions(const CBlock &block, CValidationState& state, CBlockIndex *pindexNew, const CDiskBlockPos& pos);
|
|
|
|
void ExpectOptionalAmount(CAmount expected, boost::optional<CAmount> actual) {
|
|
EXPECT_TRUE((bool)actual);
|
|
if (actual) {
|
|
EXPECT_EQ(expected, *actual);
|
|
}
|
|
}
|
|
|
|
// Fake an empty view
|
|
class FakeCoinsViewDB : public CCoinsView {
|
|
public:
|
|
FakeCoinsViewDB() {}
|
|
|
|
bool GetSproutAnchorAt(const uint256 &rt, SproutMerkleTree &tree) const {
|
|
return false;
|
|
}
|
|
|
|
bool GetSaplingAnchorAt(const uint256 &rt, SaplingMerkleTree &tree) const {
|
|
return false;
|
|
}
|
|
|
|
bool GetNullifier(const uint256 &nf, ShieldedType type) const {
|
|
return false;
|
|
}
|
|
|
|
bool GetCoins(const uint256 &txid, CCoins &coins) const {
|
|
return false;
|
|
}
|
|
|
|
bool HaveCoins(const uint256 &txid) const {
|
|
return false;
|
|
}
|
|
|
|
uint256 GetBestBlock() const {
|
|
uint256 a;
|
|
return a;
|
|
}
|
|
|
|
uint256 GetBestAnchor(ShieldedType type) const {
|
|
uint256 a;
|
|
return a;
|
|
}
|
|
|
|
bool BatchWrite(CCoinsMap &mapCoins,
|
|
const uint256 &hashBlock,
|
|
const uint256 &hashSproutAnchor,
|
|
const uint256 &hashSaplingAnchor,
|
|
CAnchorsSproutMap &mapSproutAnchors,
|
|
CAnchorsSaplingMap &mapSaplingAnchors,
|
|
CNullifiersMap &mapSproutNullifiers,
|
|
CNullifiersMap saplingNullifiersMap) {
|
|
return false;
|
|
}
|
|
|
|
bool GetStats(CCoinsStats &stats) const {
|
|
return false;
|
|
}
|
|
};
|
|
|
|
TEST(Validation, ContextualCheckInputsPassesWithCoinbase) {
|
|
// Create fake coinbase transaction
|
|
CMutableTransaction mtx;
|
|
mtx.vin.resize(1);
|
|
CTransaction tx(mtx);
|
|
ASSERT_TRUE(tx.IsCoinBase());
|
|
|
|
// Fake an empty view
|
|
FakeCoinsViewDB fakeDB;
|
|
CCoinsViewCache view(&fakeDB);
|
|
|
|
for (int idx = Consensus::BASE_SPROUT; idx < Consensus::MAX_NETWORK_UPGRADES; idx++) {
|
|
auto consensusBranchId = NetworkUpgradeInfo[idx].nBranchId;
|
|
CValidationState state;
|
|
PrecomputedTransactionData txdata(tx);
|
|
EXPECT_TRUE(ContextualCheckInputs(tx, state, view, false, 0, false, txdata, Params(CBaseChainParams::MAIN).GetConsensus(), consensusBranchId));
|
|
}
|
|
}
|
|
|