Optimize block_amount lookup
		
	This commit is contained in:
		
					parent
					
						
							
								eb141ba940
							
						
					
				
			
			
				commit
				
					
						929581855a
					
				
			
		
					 3 changed files with 10 additions and 4 deletions
				
			
		| 
						 | 
					@ -129,7 +129,7 @@ void nano::active_elections::notify_observers (nano::secure::read_transaction co
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	auto block = status.winner;
 | 
						auto block = status.winner;
 | 
				
			||||||
	auto account = block->account ();
 | 
						auto account = block->account ();
 | 
				
			||||||
	auto amount = node.ledger.any.block_amount (transaction, block->hash ()).value_or (0).number ();
 | 
						auto amount = node.ledger.any.block_amount (transaction, block).value_or (0).number ();
 | 
				
			||||||
	auto is_state_send = block->type () == block_type::state && block->is_send ();
 | 
						auto is_state_send = block->type () == block_type::state && block->is_send ();
 | 
				
			||||||
	auto is_state_epoch = block->type () == block_type::state && block->is_epoch ();
 | 
						auto is_state_epoch = block->type () == block_type::state && block->is_epoch ();
 | 
				
			||||||
	node.observers.blocks.notify (status, votes, account, amount, is_state_send, is_state_epoch);
 | 
						node.observers.blocks.notify (status, votes, account, amount, is_state_send, is_state_epoch);
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -89,12 +89,17 @@ std::optional<nano::amount> nano::ledger_set_any::block_amount (secure::transact
 | 
				
			||||||
	{
 | 
						{
 | 
				
			||||||
		return std::nullopt;
 | 
							return std::nullopt;
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	auto block_balance = block_l->balance ();
 | 
						return block_amount (transaction, block_l);
 | 
				
			||||||
	if (block_l->previous ().is_zero ())
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					std::optional<nano::amount> nano::ledger_set_any::block_amount (secure::transaction const & transaction, std::shared_ptr<nano::block> const & block) const
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
						auto block_balance = block->balance ();
 | 
				
			||||||
 | 
						if (block->previous ().is_zero ())
 | 
				
			||||||
	{
 | 
						{
 | 
				
			||||||
		return block_balance.number ();
 | 
							return block_balance.number ();
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	auto previous_balance = this->block_balance (transaction, block_l->previous ());
 | 
						auto previous_balance = this->block_balance (transaction, block->previous ());
 | 
				
			||||||
	if (!previous_balance)
 | 
						if (!previous_balance)
 | 
				
			||||||
	{
 | 
						{
 | 
				
			||||||
		return std::nullopt;
 | 
							return std::nullopt;
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -48,6 +48,7 @@ public: // Operations on accounts
 | 
				
			||||||
public: // Operations on blocks
 | 
					public: // Operations on blocks
 | 
				
			||||||
	std::optional<nano::account> block_account (secure::transaction const & transaction, nano::block_hash const & hash) const;
 | 
						std::optional<nano::account> block_account (secure::transaction const & transaction, nano::block_hash const & hash) const;
 | 
				
			||||||
	std::optional<nano::amount> block_amount (secure::transaction const & transaction, nano::block_hash const & hash) const;
 | 
						std::optional<nano::amount> block_amount (secure::transaction const & transaction, nano::block_hash const & hash) const;
 | 
				
			||||||
 | 
						std::optional<nano::amount> block_amount (secure::transaction const & transaction, std::shared_ptr<nano::block> const & block) const;
 | 
				
			||||||
	std::optional<nano::amount> block_balance (secure::transaction const & transaction, nano::block_hash const & hash) const;
 | 
						std::optional<nano::amount> block_balance (secure::transaction const & transaction, nano::block_hash const & hash) const;
 | 
				
			||||||
	bool block_exists (secure::transaction const & transaction, nano::block_hash const & hash) const;
 | 
						bool block_exists (secure::transaction const & transaction, nano::block_hash const & hash) const;
 | 
				
			||||||
	bool block_exists_or_pruned (secure::transaction const & transaction, nano::block_hash const & hash) const;
 | 
						bool block_exists_or_pruned (secure::transaction const & transaction, nano::block_hash const & hash) const;
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue