Fix epoch block fork process_result
This commit is contained in:
parent
0ecd02f1f8
commit
4b546c6d88
2 changed files with 35 additions and 6 deletions
|
@ -2344,3 +2344,21 @@ TEST (ledger, epoch_blocks_receive_upgrade)
|
|||
rai::open_block open2 (send3.hash (), destination2.pub, destination2.pub, destination2.prv, destination2.pub, 0);
|
||||
ASSERT_EQ (rai::process_result::unreceivable, ledger.process (transaction, open2).code);
|
||||
}
|
||||
|
||||
TEST (ledger, epoch_blocks_fork)
|
||||
{
|
||||
bool init (false);
|
||||
rai::block_store store (init, rai::unique_path ());
|
||||
ASSERT_TRUE (!init);
|
||||
rai::stat stats;
|
||||
rai::keypair epoch_key;
|
||||
rai::ledger ledger (store, stats, 123, epoch_key.pub);
|
||||
rai::genesis genesis;
|
||||
rai::transaction transaction (store.environment, nullptr, true);
|
||||
genesis.initialize (transaction, store);
|
||||
rai::keypair destination;
|
||||
rai::send_block send1 (genesis.hash (), rai::account (0), rai::genesis_amount, rai::test_genesis_key.prv, rai::test_genesis_key.pub, 0);
|
||||
ASSERT_EQ (rai::process_result::progress, ledger.process (transaction, send1).code);
|
||||
rai::state_block epoch1 (rai::genesis_account, genesis.hash (), rai::genesis_account, rai::genesis_amount, 123, epoch_key.prv, epoch_key.pub, 0);
|
||||
ASSERT_EQ (rai::process_result::fork, ledger.process (transaction, epoch1).code);
|
||||
}
|
||||
|
|
|
@ -181,16 +181,27 @@ public:
|
|||
|
||||
void ledger_processor::state_block (rai::state_block const & block_a)
|
||||
{
|
||||
result.code = rai::process_result::progress;
|
||||
// Check if this is an epoch block
|
||||
rai::account_info info;
|
||||
ledger.store.account_get (transaction, block_a.hashables.account, info);
|
||||
if (block_a.hashables.balance == info.balance && !ledger.epoch_link.is_zero () && block_a.hashables.link == ledger.epoch_link)
|
||||
rai::amount prev_balance (0);
|
||||
if (!block_a.hashables.previous.is_zero ())
|
||||
{
|
||||
epoch_block_impl (block_a);
|
||||
result.code = ledger.store.block_exists (transaction, block_a.hashables.previous) ? rai::process_result::progress : rai::process_result::gap_previous;
|
||||
if (result.code == rai::process_result::progress)
|
||||
{
|
||||
prev_balance = ledger.balance (transaction, block_a.hashables.previous);
|
||||
}
|
||||
}
|
||||
else
|
||||
if (result.code == rai::process_result::progress)
|
||||
{
|
||||
state_block_impl (block_a);
|
||||
if (block_a.hashables.balance == prev_balance && !ledger.epoch_link.is_zero () && block_a.hashables.link == ledger.epoch_link)
|
||||
{
|
||||
epoch_block_impl (block_a);
|
||||
}
|
||||
else
|
||||
{
|
||||
state_block_impl (block_a);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue