Skip to content
This repository was archived by the owner on Jun 30, 2023. It is now read-only.

Commit 4a1e05d

Browse files
committed
temporary move snapDB to consensus layer, clique and other consensus could use it too;
1 parent f2f0cae commit 4a1e05d

File tree

4 files changed

+37
-41
lines changed

4 files changed

+37
-41
lines changed

src/consensus/mod.rs

Lines changed: 31 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,8 @@ use std::{
2424
};
2525
use std::time::{SystemTimeError};
2626
use tokio::sync::watch;
27+
use tracing::{*};
28+
use crate::kv::tables;
2729

2830
#[derive(Debug)]
2931
pub enum FinalizationChange {
@@ -159,7 +161,7 @@ pub trait Consensus: Debug + Send + Sync + 'static {
159161
/// To be overridden for consensus validators' snap.
160162
fn snapshot(
161163
&mut self,
162-
_db: &dyn SnapRW,
164+
_db: &dyn SnapDB,
163165
_block_number: BlockNumber,
164166
_block_hash: H256,
165167
) -> anyhow::Result<(), DuoError> {
@@ -529,3 +531,31 @@ pub fn engine_factory(
529531
)),
530532
})
531533
}
534+
535+
/// to handle snap from db
536+
pub trait SnapDB: HeaderReader {
537+
/// read snap from db
538+
fn read_parlia_snap(&self, block_hash: H256) -> anyhow::Result<Option<Snapshot>>;
539+
/// write snap into db
540+
fn write_parlia_snap(&self, snap: &Snapshot) -> anyhow::Result<()>;
541+
}
542+
543+
impl<E: EnvironmentKind> SnapDB for MdbxTransaction<'_, RW, E> {
544+
fn read_parlia_snap(&self, block_hash: H256) -> anyhow::Result<Option<Snapshot>> {
545+
let snap_op = self.get(tables::ColParliaSnapshot, block_hash)?;
546+
Ok(match snap_op {
547+
None => {
548+
None
549+
}
550+
Some(val) => {
551+
Some(serde_json::from_slice(&val)?)
552+
}
553+
})
554+
}
555+
556+
fn write_parlia_snap(&self, snap: &Snapshot) -> anyhow::Result<()> {
557+
debug!("snap store {}, {}", snap.block_number, snap.block_hash);
558+
let value = serde_json::to_vec(snap)?;
559+
self.set(tables::ColParliaSnapshot, snap.block_hash, value)
560+
}
561+
}

src/consensus/parlia/mod.rs

Lines changed: 4 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -4,8 +4,8 @@ mod snapshot;
44
mod contract_upgrade;
55
mod util;
66
mod state;
7+
pub use snapshot::Snapshot;
78
pub use state::{ParliaNewBlockState};
8-
pub use snapshot::{SnapRW};
99
pub use util::{is_system_transaction, SYSTEM_ACCOUNT};
1010

1111
use super::*;
@@ -20,9 +20,6 @@ use std::str;
2020

2121
use crate::{
2222
consensus::{
23-
parlia::{
24-
snapshot::{Snapshot},
25-
},
2623
ValidationError, ParliaError
2724
},
2825
crypto::go_rng::{RngSource, Shuffle},
@@ -343,7 +340,7 @@ impl Consensus for Parlia {
343340

344341
fn snapshot(
345342
&mut self,
346-
db: &dyn SnapRW,
343+
db: &dyn SnapDB,
347344
block_number: BlockNumber,
348345
block_hash: H256,
349346
) -> anyhow::Result<(), DuoError> {
@@ -360,7 +357,7 @@ impl Consensus for Parlia {
360357
break;
361358
}
362359
if block_number % CHECKPOINT_INTERVAL == 0 {
363-
if let Some(cached) = db.read_snap(block_hash)? {
360+
if let Some(cached) = db.read_parlia_snap(block_hash)? {
364361
debug!("snap find from db {} {:?}", block_number, block_hash);
365362
snap = cached;
366363
break;
@@ -392,7 +389,7 @@ impl Consensus for Parlia {
392389
snap_cache.insert(snap.block_hash, snap.clone());
393390
if snap.block_number % CHECKPOINT_INTERVAL == 0 {
394391
debug!("snap save {} {:?}", snap.block_number, snap.block_hash);
395-
db.write_snap(&snap)?;
392+
db.write_parlia_snap(&snap)?;
396393
}
397394
return Ok(());
398395
}

src/consensus/parlia/snapshot.rs

Lines changed: 1 addition & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -2,15 +2,12 @@ use crate::{
22
consensus::{
33
parlia::{util, SIGNATURE_LENGTH, VANITY_LENGTH},*
44
},
5-
kv::{mdbx::*, tables},
6-
HeaderReader,
75
};
86
use serde::{Deserialize, Serialize};
97
use std::{
108
collections::{BTreeMap},
119
};
1210
use ethereum_types::{Address};
13-
use tracing::*;
1411

1512
/// Snapshot, record validators and proposal from epoch chg.
1613
#[derive(Clone, Debug, Default, Deserialize, Serialize)]
@@ -45,7 +42,7 @@ impl Snapshot {
4542

4643
pub fn apply(
4744
&mut self,
48-
db: &dyn SnapRW,
45+
db: &dyn SnapDB,
4946
header: &BlockHeader,
5047
chain_id: ChainId,
5148
) -> Result<Snapshot, DuoError> {
@@ -117,31 +114,3 @@ impl Snapshot {
117114
-1
118115
}
119116
}
120-
121-
/// to handle snap from db
122-
pub trait SnapRW: HeaderReader {
123-
/// read snap from db
124-
fn read_snap(&self, block_hash: H256) -> anyhow::Result<Option<Snapshot>>;
125-
/// write snap into db
126-
fn write_snap(&self, snap: &Snapshot) -> anyhow::Result<()>;
127-
}
128-
129-
impl<E: EnvironmentKind> SnapRW for MdbxTransaction<'_, RW, E> {
130-
fn read_snap(&self, block_hash: H256) -> anyhow::Result<Option<Snapshot>> {
131-
let snap_op = self.get(tables::ColParliaSnapshot, block_hash)?;
132-
Ok(match snap_op {
133-
None => {
134-
None
135-
}
136-
Some(val) => {
137-
Some(serde_json::from_slice(&val)?)
138-
}
139-
})
140-
}
141-
142-
fn write_snap(&self, snap: &Snapshot) -> anyhow::Result<()> {
143-
debug!("snap store {}, {}", snap.block_number, snap.block_hash);
144-
let value = serde_json::to_vec(snap)?;
145-
self.set(tables::ColParliaSnapshot, snap.block_hash, value)
146-
}
147-
}

src/consensus/parlia/util.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -131,7 +131,7 @@ pub fn is_similar_tx(actual: &Message, expect: &Message) -> bool {
131131

132132
/// find header.block_number - count, block header
133133
pub fn find_ancient_header(
134-
db: &dyn SnapRW,
134+
db: &dyn SnapDB,
135135
header: &BlockHeader,
136136
count: u64,
137137
) -> Result<BlockHeader, DuoError> {

0 commit comments

Comments
 (0)