1
0
Fork 0
forked from lthn/blockchain

added missing tests, reset blockchain from db

This commit is contained in:
cryptozoidberg 2019-08-05 21:43:10 +02:00
parent 4ef46c2e8b
commit 6847fa5b89
No known key found for this signature in database
GPG key ID: 22DEB97A54C6FDEC
3 changed files with 112 additions and 1 deletions

View file

@ -58,7 +58,7 @@ using namespace currency;
#define BLOCKCHAIN_STORAGE_OPTIONS_ID_CURRENT_BLOCK_CUMUL_SZ_LIMIT 0
#define BLOCKCHAIN_STORAGE_OPTIONS_ID_CURRENT_PRUNED_RS_HEIGHT 1
#define BLOCKCHAIN_STORAGE_OPTIONS_ID_LAST_WORKED_VERSION 2
#define BLOCKCHAIN_STORAGE_OPTIONS_ID_STORAGE_MAJOR_COMPATIBILITY_VERSION 3 //mismatch here means full resync
#define BLOCKCHAIN_STORAGE_OPTIONS_ID_STORAGE_MAJOR_COMPATIBILITY_VERSION 4 //mismatch here means full resync
#define BLOCKCHAIN_STORAGE_OPTIONS_ID_STORAGE_MINOR_COMPATIBILITY_VERSION 4 //mismatch here means some reinitializations
#define TARGETDATA_CACHE_SIZE DIFFICULTY_WINDOW + 10

View file

@ -0,0 +1,93 @@
// Copyright (c) 2014-2018 Zano Project
// Copyright (c) 2014-2018 The Louisdor Project
// Distributed under the MIT/X11 software license, see the accompanying
// file COPYING or http://www.opensource.org/licenses/mit-license.php.
#include "chaingen.h"
#include "pos_validation.h"
#include "tx_builder.h"
#include "hard_fork_1_bad_pos_source.h"
#include "random_helper.h"
using namespace epee;
using namespace crypto;
using namespace currency;
hard_fork_1_bad_pos_source::hard_fork_1_bad_pos_source()
{
REGISTER_CALLBACK_METHOD(hard_fork_1_bad_pos_source, c1);
REGISTER_CALLBACK_METHOD(hard_fork_1_bad_pos_source, configure_core);
}
bool hard_fork_1_bad_pos_source::generate(std::vector<test_event_entry>& events) const
{
random_state_test_restorer::reset_random();
GENERATE_ACCOUNT(preminer_acc);
GENERATE_ACCOUNT(miner_acc);
GENERATE_ACCOUNT(pos_miner_acc_before_pow);
GENERATE_ACCOUNT(pos_miner_acc_after_pow);
m_accounts.push_back(miner_acc);
m_accounts.push_back(pos_miner_acc_before_pow);
m_accounts.push_back(pos_miner_acc_after_pow);
std::list<account_base> miner_acc_lst(1, miner_acc);
MAKE_GENESIS_BLOCK(events, blk_0, preminer_acc, 1564434616);
generator.set_hardfork_height(get_hardfork_height());
DO_CALLBACK(events, "configure_core");
REWIND_BLOCKS_N_WITH_TIME(events, blk_0r, blk_0, miner_acc, CURRENCY_MINED_MONEY_UNLOCK_WINDOW + 5);
generator.set_pos_to_low_timestamp(true);
MAKE_TX(events, tx_1, miner_acc, pos_miner_acc_before_pow, 1000000000000, blk_0r);
MAKE_NEXT_BLOCK_TX1(events, blk_pow_tx1, blk_0r, miner_acc, tx_1);
MAKE_TX(events, tx_2, preminer_acc, pos_miner_acc_after_pow, 1000000000000, blk_pow_tx1);
MAKE_NEXT_POS_BLOCK_TX1(events, blk_pos_tx2, blk_pow_tx1, miner_acc, miner_acc_lst, tx_2);
block last_block = blk_pos_tx2;
for (size_t i = 0; i != CURRENCY_MINED_MONEY_UNLOCK_WINDOW; i++)
{
MAKE_NEXT_POS_BLOCK(events, next_blk_pos, last_block, miner_acc, miner_acc_lst);
events.push_back(event_core_time(next_blk_pos.timestamp - 10));
last_block = next_blk_pos;
}
std::list<currency::account_base> accounts_before_pow;
accounts_before_pow.push_back(pos_miner_acc_before_pow);
//let's try to mint PoW block from account
MAKE_NEXT_POS_BLOCK(events, next_blk_pos2, last_block, miner_acc, accounts_before_pow);
std::list<currency::account_base> accounts_after_pow;
accounts_after_pow.push_back(pos_miner_acc_after_pow);
//let's try to mint PoW block from account
generator.set_ignore_last_pow_in_wallets(true);
DO_CALLBACK(events, "mark_invalid_block");
MAKE_NEXT_POS_BLOCK(events, next_blk_pos3, next_blk_pos2, miner_acc, accounts_after_pow);
DO_CALLBACK(events, "c1");
return true;
}
bool hard_fork_1_bad_pos_source::configure_core(currency::core& c, size_t ev_index, const std::vector<test_event_entry>& events)
{
currency::core_runtime_config pc = c.get_blockchain_storage().get_core_runtime_config();
pc.min_coinstake_age = TESTS_POS_CONFIG_MIN_COINSTAKE_AGE; //four blocks
pc.pos_minimum_heigh = TESTS_POS_CONFIG_POS_MINIMUM_HEIGH; //four blocks
pc.hard_fork1_starts_after_height = get_hardfork_height();
c.get_blockchain_storage().set_core_runtime_config(pc);
return true;
}
bool hard_fork_1_bad_pos_source::c1(currency::core& c, size_t ev_index, const std::vector<test_event_entry>& events)
{
uint64_t h = c.get_blockchain_storage().get_current_blockchain_size();
CHECK_AND_ASSERT_MES(h == 29, false, "locked pos block is not accepted");
return true;
}
uint64_t hard_fork_1_bad_pos_source::get_hardfork_height()const
{
return 10;
}

View file

@ -0,0 +1,18 @@
// Copyright (c) 2014-2018 Zano Project
// Copyright (c) 2014-2018 The Louisdor Project
// Distributed under the MIT/X11 software license, see the accompanying
// file COPYING or http://www.opensource.org/licenses/mit-license.php.
#pragma once
#include "chaingen.h"
#include "wallet_tests_basic.h"
struct hard_fork_1_bad_pos_source : public wallet_test
{
hard_fork_1_bad_pos_source();
bool generate(std::vector<test_event_entry>& events) const;
bool configure_core(currency::core& c, size_t ev_index, const std::vector<test_event_entry>& events);
virtual bool c1(currency::core& c, size_t ev_index, const std::vector<test_event_entry>& events);
virtual uint64_t get_hardfork_height()const;
};