Skip to content

Commit 864769d

Browse files
foriequal0mergify[bot]
authored andcommitted
Remove unused epoch_transition
`epoch_transition` is not used anymore after removing `on_epoch_begin`
1 parent fe7c4a2 commit 864769d

File tree

1 file changed

+1
-124
lines changed

1 file changed

+1
-124
lines changed

core/src/blockchain/blockchain.rs

Lines changed: 1 addition & 124 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,6 @@
1414
// You should have received a copy of the GNU Affero General Public License
1515
// along with this program. If not, see <https://www.gnu.org/licenses/>.
1616

17-
use std::mem;
1817
use std::sync::Arc;
1918

2019
use ctypes::BlockNumber;
@@ -25,7 +24,7 @@ use rlp::RlpStream;
2524

2625
use super::block_info::BestBlockChanged;
2726
use super::body_db::{BodyDB, BodyProvider};
28-
use super::extras::{BlockDetails, EpochTransitions, TransactionAddress, EPOCH_KEY_PREFIX};
27+
use super::extras::{BlockDetails, EpochTransitions, TransactionAddress};
2928
use super::headerchain::{HeaderChain, HeaderProvider};
3029
use super::invoice_db::{InvoiceDB, InvoiceProvider};
3130
use super::route::{tree_route, ImportRoute};
@@ -362,128 +361,6 @@ impl BlockChain {
362361
batch.write(db::COL_EXTRA, &epoch_num, &transitions);
363362
}
364363
}
365-
366-
/// Iterate over all epoch transitions.
367-
/// This will only return transitions within the canonical chain.
368-
#[allow(dead_code)]
369-
pub fn epoch_transitions(&self) -> EpochTransitionIter {
370-
let iter = self.db.iter_from_prefix(db::COL_EXTRA, &EPOCH_KEY_PREFIX[..]);
371-
EpochTransitionIter {
372-
chain: self,
373-
prefix_iter: iter,
374-
}
375-
}
376-
377-
/// Get a specific epoch transition by block number and provided block hash.
378-
pub fn epoch_transition(&self, block_num: u64, block_hash: H256) -> Option<EpochTransition> {
379-
ctrace!(BLOCKCHAIN, "Loading epoch transition at block {}, {}", block_num, block_hash);
380-
381-
self.db.read(db::COL_EXTRA, &block_num).and_then(|transitions: EpochTransitions| {
382-
transitions.candidates.into_iter().find(|c| c.block_hash == block_hash)
383-
})
384-
}
385-
386-
/// Get the transition to the epoch the given parent hash is part of
387-
/// or transitions to.
388-
/// This will give the epoch that any children of this parent belong to.
389-
///
390-
/// The block corresponding the the parent hash must be stored already.
391-
#[allow(dead_code)]
392-
pub fn epoch_transition_for(&self, parent_hash: H256) -> Option<EpochTransition> {
393-
// slow path: loop back block by block
394-
#[allow(clippy::identity_conversion)]
395-
// This is a false alarm. https://github.com/rust-lang/rust-clippy/issues/3944
396-
for hash in self.ancestry_iter(parent_hash)? {
397-
let details = self.block_details(&hash)?;
398-
399-
// look for transition in database.
400-
if let Some(transition) = self.epoch_transition(details.number, hash) {
401-
return Some(transition)
402-
}
403-
404-
// canonical hash -> fast breakout:
405-
// get the last epoch transition up to this block.
406-
//
407-
// if `block_hash` is canonical it will only return transitions up to
408-
// the parent.
409-
if self.block_hash(details.number)? == hash {
410-
return self.epoch_transitions().map(|(_, t)| t).take_while(|t| t.block_number <= details.number).last()
411-
}
412-
}
413-
414-
// should never happen as the loop will encounter genesis before concluding.
415-
None
416-
}
417-
418-
/// Iterator that lists `first` and then all of `first`'s ancestors, by hash.
419-
#[allow(dead_code)]
420-
pub fn ancestry_iter(&self, first: H256) -> Option<AncestryIter> {
421-
if self.is_known(&first) {
422-
Some(AncestryIter {
423-
current: first,
424-
chain: self,
425-
})
426-
} else {
427-
None
428-
}
429-
}
430-
}
431-
432-
/// An iterator which walks the blockchain towards the genesis.
433-
#[derive(Clone)]
434-
pub struct AncestryIter<'a> {
435-
current: H256,
436-
chain: &'a BlockChain,
437-
}
438-
439-
impl<'a> Iterator for AncestryIter<'a> {
440-
type Item = H256;
441-
fn next(&mut self) -> Option<H256> {
442-
if self.current.is_zero() {
443-
None
444-
} else {
445-
self.chain.block_details(&self.current).map(|details| mem::replace(&mut self.current, details.parent))
446-
}
447-
}
448-
}
449-
450-
type TransitionIterInternal<'a> = Box<Iterator<Item = (Box<[u8]>, Box<[u8]>)> + 'a>;
451-
/// An iterator which walks all epoch transitions.
452-
/// Returns epoch transitions.
453-
#[allow(dead_code)]
454-
pub struct EpochTransitionIter<'a> {
455-
chain: &'a BlockChain,
456-
prefix_iter: TransitionIterInternal<'a>,
457-
}
458-
459-
impl<'a> Iterator for EpochTransitionIter<'a> {
460-
type Item = (u64, EpochTransition);
461-
462-
fn next(&mut self) -> Option<Self::Item> {
463-
loop {
464-
// some epochs never occurred on the main chain.
465-
let (key, val) = self.prefix_iter.next()?;
466-
467-
// iterator may continue beyond values beginning with this
468-
// prefix.
469-
if !key.starts_with(&EPOCH_KEY_PREFIX[..]) {
470-
return None
471-
}
472-
473-
let transitions: EpochTransitions = ::rlp::decode(&val[..]);
474-
475-
// if there are multiple candidates, at most one will be on the
476-
// canon chain.
477-
for transition in transitions.candidates.into_iter() {
478-
let is_in_canon_chain =
479-
self.chain.block_hash(transition.block_number).map_or(false, |hash| hash == transition.block_hash);
480-
481-
if is_in_canon_chain {
482-
return Some((transitions.number, transition))
483-
}
484-
}
485-
}
486-
}
487364
}
488365

489366
/// Interface for querying blocks by hash and by number.

0 commit comments

Comments
 (0)