mirror of
https://git.wownero.com/wownero/wownero.git
synced 2024-08-15 01:03:23 +00:00
Bulletproof aggregated verification and tests
Also constrains bulletproofs to simple rct, for simplicity
This commit is contained in:
parent
126196b017
commit
2a8fcb421b
21 changed files with 844 additions and 174 deletions
|
@ -135,7 +135,7 @@ VARIANT_TAG(binary_archive, serialized_block, 0xcd);
|
|||
VARIANT_TAG(binary_archive, serialized_transaction, 0xce);
|
||||
VARIANT_TAG(binary_archive, event_visitor_settings, 0xcf);
|
||||
|
||||
typedef boost::variant<cryptonote::block, cryptonote::transaction, cryptonote::account_base, callback_entry, serialized_block, serialized_transaction, event_visitor_settings> test_event_entry;
|
||||
typedef boost::variant<cryptonote::block, cryptonote::transaction, std::vector<cryptonote::transaction>, cryptonote::account_base, callback_entry, serialized_block, serialized_transaction, event_visitor_settings> test_event_entry;
|
||||
typedef std::unordered_map<crypto::hash, const cryptonote::transaction*> map_hash2tx_t;
|
||||
|
||||
class test_chain_unit_base
|
||||
|
@ -263,6 +263,30 @@ bool check_tx_verification_context(const cryptonote::tx_verification_context& tv
|
|||
}
|
||||
//--------------------------------------------------------------------------
|
||||
template<class t_test_class>
|
||||
auto do_check_tx_verification_context(const std::vector<cryptonote::tx_verification_context>& tvcs, size_t tx_added, size_t event_index, const std::vector<cryptonote::transaction>& txs, t_test_class& validator, int)
|
||||
-> decltype(validator.check_tx_verification_context(tvcs, tx_added, event_index, txs))
|
||||
{
|
||||
return validator.check_tx_verification_context(tvcs, tx_added, event_index, txs);
|
||||
}
|
||||
//--------------------------------------------------------------------------
|
||||
template<class t_test_class>
|
||||
bool do_check_tx_verification_context(const std::vector<cryptonote::tx_verification_context>& tvcs, size_t tx_added, size_t /*event_index*/, const std::vector<cryptonote::transaction>& /*txs*/, t_test_class&, long)
|
||||
{
|
||||
// Default block verification context check
|
||||
for (const cryptonote::tx_verification_context &tvc: tvcs)
|
||||
if (tvc.m_verifivation_failed)
|
||||
throw std::runtime_error("Transaction verification failed");
|
||||
return true;
|
||||
}
|
||||
//--------------------------------------------------------------------------
|
||||
template<class t_test_class>
|
||||
bool check_tx_verification_context(const std::vector<cryptonote::tx_verification_context>& tvcs, size_t tx_added, size_t event_index, const std::vector<cryptonote::transaction>& txs, t_test_class& validator)
|
||||
{
|
||||
// SFINAE in action
|
||||
return do_check_tx_verification_context(tvcs, tx_added, event_index, txs, validator, 0);
|
||||
}
|
||||
//--------------------------------------------------------------------------
|
||||
template<class t_test_class>
|
||||
auto do_check_block_verification_context(const cryptonote::block_verification_context& bvc, size_t event_index, const cryptonote::block& blk, t_test_class& validator, int)
|
||||
-> decltype(validator.check_block_verification_context(bvc, event_index, blk))
|
||||
{
|
||||
|
@ -339,6 +363,26 @@ public:
|
|||
return true;
|
||||
}
|
||||
|
||||
bool operator()(const std::vector<cryptonote::transaction>& txs) const
|
||||
{
|
||||
log_event("cryptonote::transaction");
|
||||
|
||||
std::vector<cryptonote::blobdata> tx_blobs;
|
||||
std::vector<cryptonote::tx_verification_context> tvcs;
|
||||
cryptonote::tx_verification_context tvc0 = AUTO_VAL_INIT(tvc0);
|
||||
for (const auto &tx: txs)
|
||||
{
|
||||
tx_blobs.push_back(t_serializable_object_to_blob(tx));
|
||||
tvcs.push_back(tvc0);
|
||||
}
|
||||
size_t pool_size = m_c.get_pool_transactions_count();
|
||||
m_c.handle_incoming_txs(tx_blobs, tvcs, m_txs_keeped_by_block, false, false);
|
||||
size_t tx_added = m_c.get_pool_transactions_count() - pool_size;
|
||||
bool r = check_tx_verification_context(tvcs, tx_added, m_ev_index, txs, m_validator);
|
||||
CHECK_AND_NO_ASSERT_MES(r, false, "tx verification context check failed");
|
||||
return true;
|
||||
}
|
||||
|
||||
bool operator()(const cryptonote::block& b) const
|
||||
{
|
||||
log_event("cryptonote::block");
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue