Electroneum
Loading...
Searching...
No Matches
multi_tx_test_base.h
Go to the documentation of this file.
1// Copyrights(c) 2017-2021, The Electroneum Project
2// Copyrights(c) 2014-2019, The Monero Project
3//
4// All rights reserved.
5//
6// Redistribution and use in source and binary forms, with or without modification, are
7// permitted provided that the following conditions are met:
8//
9// 1. Redistributions of source code must retain the above copyright notice, this list of
10// conditions and the following disclaimer.
11//
12// 2. Redistributions in binary form must reproduce the above copyright notice, this list
13// of conditions and the following disclaimer in the documentation and/or other
14// materials provided with the distribution.
15//
16// 3. Neither the name of the copyright holder nor the names of its contributors may be
17// used to endorse or promote products derived from this software without specific
18// prior written permission.
19//
20// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY
21// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
22// MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL
23// THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
24// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
25// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
26// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
27// STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF
28// THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
29//
30// Parts of this file are originally copyright (c) 2012-2013 The Cryptonote developers
31
32#pragma once
33
34#include <vector>
35
39#include "crypto/crypto.h"
40
41template<size_t a_ring_size>
43{
44 static_assert(0 < a_ring_size, "ring_size must be greater than 0");
45
46public:
47 static const size_t ring_size = a_ring_size;
48 static const size_t real_source_idx = ring_size / 2;
49
50 bool init()
51 {
52 using namespace cryptonote;
53
54 std::vector<tx_source_entry::output_entry> output_entries;
55 for (size_t i = 0; i < ring_size; ++i)
56 {
57 m_miners[i].generate();
58
59 if (!construct_miner_tx(0, 0, 0, 2, 0, m_miners[i].get_keys().m_account_address, m_miner_txs[i]))
60 return false;
61
62 txout_to_key tx_out = boost::get<txout_to_key>(m_miner_txs[i].vout[0].target);
63 output_entries.push_back(std::make_pair(i, rct::ctkey({rct::pk2rct(tx_out.key), rct::zeroCommit(m_miner_txs[i].vout[0].amount)})));
64 m_public_keys[i] = tx_out.key;
66 }
67
68 m_source_amount = m_miner_txs[0].vout[0].amount;
69
70 tx_source_entry source_entry;
71 source_entry.amount = m_source_amount;
73 source_entry.real_output_in_tx_index = 0;
74 source_entry.outputs.swap(output_entries);
75 source_entry.real_output = real_source_idx;
76 source_entry.mask = rct::identity();
77 source_entry.rct = false;
78
79 m_sources.push_back(source_entry);
80
81 return true;
82 }
83
84protected:
88
89 std::vector<cryptonote::tx_source_entry> m_sources;
92};
std::vector< cryptonote::tx_source_entry > m_sources
cryptonote::transaction m_miner_txs[ring_size]
cryptonote::account_base m_miners[ring_size]
const crypto::public_key * m_public_key_ptrs[ring_size]
crypto::public_key m_public_keys[ring_size]
POD_CLASS public_key
Definition crypto.h:79
Holds cryptonote related classes and helpers.
Definition ban.cpp:40
crypto::public_key get_tx_pub_key_from_extra(const std::vector< uint8_t > &tx_extra, size_t pk_index)
bool construct_miner_tx(size_t height, size_t median_weight, uint64_t already_generated_coins, size_t current_block_weight, uint64_t fee, const account_public_address &miner_address, transaction &tx, const blobdata &extra_nonce, size_t max_outs, uint8_t hard_fork_version, network_type nettype)
key zeroCommit(etn_amount amount)
Definition rctOps.cpp:322
key identity()
Definition rctOps.h:73
unsigned __int64 uint64_t
Definition stdint.h:136
crypto::public_key real_out_tx_key
uint64_t amount
bool rct
size_t real_output
std::vector< output_entry > outputs
rct::key mask
size_t real_output_in_tx_index