mirror of
https://github.com/dashpay/dash.git
synced 2024-12-27 21:12:48 +01:00
eec81f7b33
3004d5a12d09d94bfc4dee2a8e8f2291996a4aaf [validation] Remove fMissingInputs from AcceptToMemoryPool() (John Newbery) c428622a5bb1e37b2e6ab2c52791ac05d9271238 [validation] Remove unused first_invalid parameter from ProcessNewBlockHeaders() (John Newbery) 7204c6434b944f6ad51b3c895837729d3aa56eea [validation] Remove useless ret parameter from Invalid() (John Newbery) 1a37de4b3174d19a6d8691ae07e92b32fdfaef11 [validation] Remove error() calls from Invalid() calls (John Newbery) 067981e49246822421a7bcc720491427e1dba8a3 [validation] Tidy Up ValidationResult class (John Newbery) a27a2957ed9afbe5a96caa5f0f4cbec730d27460 [validation] Add CValidationState subclasses (John Newbery) Pull request description: Carries out some remaining tidy-ups remaining after PR 15141: - split ValidationState into TxValidationState and BlockValidationState (commit from ajtowns) - various minor code style tidy-ups to the ValidationState class - remove the useless `ret` parameter from `ValidationState::Invalid()` - remove the now unused `first_invalid` parameter from `ProcessNewBlockHeaders()` - remove the `fMissingInputs` parameter from `AcceptToMemoryPool()`, and deal with missing inputs the same way as other errors by using the `TxValidationState` object. Tip for reviewers (thanks ryanofsky!): The first commit ("[validation] Add CValidationState subclasses" ) is huge and can be easier to start reviewing if you revert the rote, mechanical changes: Substitute the commit hash of commit "[validation] Add CValidationState subclasses" for <CommitHash> in the commands below. ```sh git checkout <CommitHash> git grep -l ValidationState | xargs sed -i 's/BlockValidationState\|TxValidationState/CValidationState/g' git grep -l ValidationResult | xargs sed -i 's/BlockValidationResult\|TxValidationResult/ValidationInvalidReason/g' git grep -l MaybePunish | xargs sed -i 's/MaybePunishNode\(ForBlock\|ForTx\)/MaybePunishNode/g' git diff HEAD^ ``` After that it's possible to easily see the mechanical changes with: ```sh git log -p -n1 -U0 --word-diff-regex=. <CommitHash> ``` ACKs for top commit: laanwj: ACK 3004d5a12d09d94bfc4dee2a8e8f2291996a4aaf amitiuttarwar: code review ACK 3004d5a12d09d94bfc4dee2a8e8f2291996a4aaf. Also built & ran tests locally. fjahr: Code review ACK 3004d5a12d09d94bfc4dee2a8e8f2291996a4aaf . Only nit style change and pure virtual destructor added since my last review. ryanofsky: Code review ACK 3004d5a12d09d94bfc4dee2a8e8f2291996a4aaf. Just whitespace change and pure virtual destructor added since last review. Tree-SHA512: 511de1fb380a18bec1944ea82b513b6192df632ee08bb16344a2df3c40811a88f3872f04df24bc93a41643c96c48f376a04551840fd804a961490d6c702c3d36
86 lines
2.4 KiB
C++
86 lines
2.4 KiB
C++
// Copyright (c) 2021-2023 The Dash Core developers
|
|
// Distributed under the MIT software license, see the accompanying
|
|
// file COPYING or http://www.opensource.org/licenses/mit-license.php.
|
|
|
|
#include <bls/bls.h>
|
|
#include <consensus/validation.h>
|
|
#include <evo/mnhftx.h>
|
|
#include <evo/specialtx.h>
|
|
#include <primitives/transaction.h>
|
|
#include <uint256.h>
|
|
#include <util/string.h>
|
|
#include <util/strencodings.h>
|
|
|
|
#include <boost/test/unit_test.hpp>
|
|
#include <test/util/setup_common.h>
|
|
|
|
#include <cstdint>
|
|
#include <vector>
|
|
|
|
|
|
bool VerifyMNHFTx(const CTransaction& tx, TxValidationState& state)
|
|
{
|
|
MNHFTxPayload mnhfTx;
|
|
if (!GetTxPayload(tx, mnhfTx)) {
|
|
return state.Invalid(TxValidationResult::TX_CONSENSUS, "bad-mnhf-payload");
|
|
}
|
|
|
|
if (mnhfTx.nVersion == 0 || mnhfTx.nVersion > MNHFTxPayload::CURRENT_VERSION) {
|
|
return state.Invalid(TxValidationResult::TX_CONSENSUS, "bad-mnhf-version");
|
|
}
|
|
|
|
return true;
|
|
}
|
|
|
|
static CMutableTransaction CreateMNHFTx(const uint256& mnhfTxHash, const CBLSSignature& cblSig, const uint16_t& versionBit)
|
|
{
|
|
MNHFTxPayload extraPayload;
|
|
extraPayload.nVersion = 1;
|
|
extraPayload.signal.nVersion = versionBit;
|
|
extraPayload.signal.quorumHash = mnhfTxHash;
|
|
extraPayload.signal.sig = cblSig;
|
|
|
|
CMutableTransaction tx;
|
|
tx.nVersion = 3;
|
|
tx.nType = TRANSACTION_MNHF_SIGNAL;
|
|
SetTxPayload(tx, extraPayload);
|
|
|
|
return tx;
|
|
}
|
|
|
|
BOOST_FIXTURE_TEST_SUITE(specialtx_tests, BasicTestingSetup)
|
|
|
|
BOOST_AUTO_TEST_CASE(verify_mnhf_specialtx_tests)
|
|
{
|
|
int count = 10;
|
|
uint16_t ver = 2;
|
|
|
|
std::vector<CBLSSignature> vec_sigs;
|
|
std::vector<CBLSPublicKey> vec_pks;
|
|
std::vector<CBLSSecretKey> vec_sks;
|
|
|
|
CBLSSecretKey sk;
|
|
uint256 hash = GetRandHash();
|
|
for (int i = 0; i < count; i++) {
|
|
sk.MakeNewKey();
|
|
vec_pks.push_back(sk.GetPublicKey());
|
|
vec_sks.push_back(sk);
|
|
}
|
|
|
|
CBLSSecretKey ag_sk = CBLSSecretKey::AggregateInsecure(vec_sks);
|
|
CBLSPublicKey ag_pk = CBLSPublicKey::AggregateInsecure(vec_pks);
|
|
|
|
BOOST_CHECK(ag_sk.IsValid());
|
|
BOOST_CHECK(ag_pk.IsValid());
|
|
|
|
uint256 verHash = uint256S(ToString(ver));
|
|
auto sig = ag_sk.Sign(verHash);
|
|
BOOST_CHECK(sig.VerifyInsecure(ag_pk, verHash));
|
|
|
|
const CMutableTransaction tx = CreateMNHFTx(hash, sig, ver);
|
|
TxValidationState state;
|
|
BOOST_CHECK(VerifyMNHFTx(CTransaction(tx), state));
|
|
}
|
|
|
|
BOOST_AUTO_TEST_SUITE_END()
|