aboutsummaryrefslogtreecommitdiff
path: root/tests/performance_tests/multi_tx_test_base.h
diff options
context:
space:
mode:
Diffstat (limited to 'tests/performance_tests/multi_tx_test_base.h')
-rw-r--r--tests/performance_tests/multi_tx_test_base.h64
1 files changed, 64 insertions, 0 deletions
diff --git a/tests/performance_tests/multi_tx_test_base.h b/tests/performance_tests/multi_tx_test_base.h
new file mode 100644
index 000000000..a65062362
--- /dev/null
+++ b/tests/performance_tests/multi_tx_test_base.h
@@ -0,0 +1,64 @@
+// Copyright (c) 2012-2013 The Cryptonote developers
+// Distributed under the MIT/X11 software license, see the accompanying
+// file COPYING or http://www.opensource.org/licenses/mit-license.php.
+
+#pragma once
+
+#include <vector>
+
+#include "cryptonote_core/account.h"
+#include "cryptonote_core/cryptonote_basic.h"
+#include "cryptonote_core/cryptonote_format_utils.h"
+#include "crypto/crypto.h"
+
+template<size_t a_ring_size>
+class multi_tx_test_base
+{
+ static_assert(0 < a_ring_size, "ring_size must be greater than 0");
+
+public:
+ static const size_t ring_size = a_ring_size;
+ static const size_t real_source_idx = ring_size / 2;
+
+ bool init()
+ {
+ using namespace cryptonote;
+
+ std::vector<tx_source_entry::output_entry> output_entries;
+ for (size_t i = 0; i < ring_size; ++i)
+ {
+ m_miners[i].generate();
+
+ std::vector<size_t> block_sizes;
+ if (!construct_miner_tx(0, 0, m_miners[i].get_keys().m_account_address, m_miner_txs[i], 0, block_sizes, 2))
+ return false;
+
+ txout_to_key tx_out = boost::get<txout_to_key>(m_miner_txs[i].vout[0].target);
+ output_entries.push_back(std::make_pair(i, tx_out.key));
+ m_public_keys[i] = tx_out.key;
+ m_public_key_ptrs[i] = &m_public_keys[i];
+ }
+
+ m_source_amount = m_miner_txs[0].vout[0].amount;
+
+ tx_source_entry source_entry;
+ source_entry.amount = m_source_amount;
+ source_entry.real_out_tx_key = get_tx_pub_key_from_extra(m_miner_txs[real_source_idx]);
+ source_entry.real_output_in_tx_index = 0;
+ source_entry.outputs.swap(output_entries);
+ source_entry.real_output = real_source_idx;
+
+ m_sources.push_back(source_entry);
+
+ return true;
+ }
+
+protected:
+ cryptonote::account_base m_miners[ring_size];
+ cryptonote::transaction m_miner_txs[ring_size];
+ uint64_t m_source_amount;
+
+ std::vector<cryptonote::tx_source_entry> m_sources;
+ crypto::public_key m_public_keys[ring_size];
+ const crypto::public_key* m_public_key_ptrs[ring_size];
+};