Expanding ability for ledger::is_send to process non-state blocks.
Two new ledger contexts generate a send/receive pair on the genesis chain with state and legacy blocks.
This commit is contained in:
parent
ce58418bb1
commit
be4a72c48b
3 changed files with 38 additions and 5 deletions
|
|
@ -5646,3 +5646,32 @@ TEST (ledger, unconfirmed_frontiers)
|
||||||
ASSERT_EQ (uncemented_info1.cemented_frontier, uncemented_info2.cemented_frontier);
|
ASSERT_EQ (uncemented_info1.cemented_frontier, uncemented_info2.cemented_frontier);
|
||||||
ASSERT_EQ (uncemented_info1.frontier, uncemented_info2.frontier);
|
ASSERT_EQ (uncemented_info1.frontier, uncemented_info2.frontier);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
TEST (ledger, is_send_genesis)
|
||||||
|
{
|
||||||
|
auto ctx = nano::test::context::ledger_empty ();
|
||||||
|
auto & ledger = ctx.ledger ();
|
||||||
|
auto & store = ctx.store ();
|
||||||
|
auto tx = store.tx_begin_read ();
|
||||||
|
ASSERT_FALSE (ledger.is_send (tx, *nano::dev::genesis));
|
||||||
|
}
|
||||||
|
|
||||||
|
TEST (ledger, is_send_state)
|
||||||
|
{
|
||||||
|
auto ctx = nano::test::context::ledger_send_receive ();
|
||||||
|
auto & ledger = ctx.ledger ();
|
||||||
|
auto & store = ctx.store ();
|
||||||
|
auto tx = store.tx_begin_read ();
|
||||||
|
ASSERT_TRUE (ledger.is_send (tx, *ctx.blocks ()[0]));
|
||||||
|
ASSERT_FALSE (ledger.is_send (tx, *ctx.blocks ()[1]));
|
||||||
|
}
|
||||||
|
|
||||||
|
TEST (ledger, is_send_legacy)
|
||||||
|
{
|
||||||
|
auto ctx = nano::test::context::ledger_send_receive_legacy ();
|
||||||
|
auto & ledger = ctx.ledger ();
|
||||||
|
auto & store = ctx.store ();
|
||||||
|
auto tx = store.tx_begin_read ();
|
||||||
|
ASSERT_TRUE (ledger.is_send (tx, *ctx.blocks ()[0]));
|
||||||
|
ASSERT_FALSE (ledger.is_send (tx, *ctx.blocks ()[1]));
|
||||||
|
}
|
||||||
|
|
|
||||||
|
|
@ -923,14 +923,19 @@ std::string nano::ledger::block_text (nano::block_hash const & hash_a)
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool nano::ledger::is_send (nano::transaction const & transaction_a, nano::state_block const & block_a) const
|
bool nano::ledger::is_send (nano::transaction const & transaction_a, nano::block const & block_a) const
|
||||||
{
|
{
|
||||||
|
if (block_a.type () != nano::block_type::state)
|
||||||
|
{
|
||||||
|
return block_a.type () == nano::block_type::send;
|
||||||
|
}
|
||||||
|
nano::block_hash previous = block_a.previous ();
|
||||||
/*
|
/*
|
||||||
* if block_a does not have a sideband, then is_send()
|
* if block_a does not have a sideband, then is_send()
|
||||||
* requires that the previous block exists in the database.
|
* requires that the previous block exists in the database.
|
||||||
* This is because it must retrieve the balance of the previous block.
|
* This is because it must retrieve the balance of the previous block.
|
||||||
*/
|
*/
|
||||||
debug_assert (block_a.has_sideband () || block_a.hashables.previous.is_zero () || store.block.exists (transaction_a, block_a.hashables.previous));
|
debug_assert (block_a.has_sideband () || previous.is_zero () || store.block.exists (transaction_a, previous));
|
||||||
|
|
||||||
bool result (false);
|
bool result (false);
|
||||||
if (block_a.has_sideband ())
|
if (block_a.has_sideband ())
|
||||||
|
|
@ -939,10 +944,9 @@ bool nano::ledger::is_send (nano::transaction const & transaction_a, nano::state
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
nano::block_hash previous (block_a.hashables.previous);
|
|
||||||
if (!previous.is_zero ())
|
if (!previous.is_zero ())
|
||||||
{
|
{
|
||||||
if (block_a.hashables.balance < balance (transaction_a, previous))
|
if (block_a.balance () < balance (transaction_a, previous))
|
||||||
{
|
{
|
||||||
result = true;
|
result = true;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -51,7 +51,7 @@ public:
|
||||||
bool root_exists (nano::transaction const &, nano::root const &);
|
bool root_exists (nano::transaction const &, nano::root const &);
|
||||||
std::string block_text (char const *);
|
std::string block_text (char const *);
|
||||||
std::string block_text (nano::block_hash const &);
|
std::string block_text (nano::block_hash const &);
|
||||||
bool is_send (nano::transaction const &, nano::state_block const &) const;
|
bool is_send (nano::transaction const &, nano::block const &) const;
|
||||||
nano::account const & block_destination (nano::transaction const &, nano::block const &);
|
nano::account const & block_destination (nano::transaction const &, nano::block const &);
|
||||||
nano::block_hash block_source (nano::transaction const &, nano::block const &);
|
nano::block_hash block_source (nano::transaction const &, nano::block const &);
|
||||||
std::pair<nano::block_hash, nano::block_hash> hash_root_random (nano::transaction const &) const;
|
std::pair<nano::block_hash, nano::block_hash> hash_root_random (nano::transaction const &) const;
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue