Skip to content
Snippets Groups Projects
Commit 94e39b7b authored by Éloïs's avatar Éloïs
Browse files

[fix] server: init cm_v1 db

parent 0e7d6892
No related branches found
No related tags found
No related merge requests found
...@@ -18,7 +18,6 @@ mod txs; ...@@ -18,7 +18,6 @@ mod txs;
mod uds; mod uds;
use crate::*; use crate::*;
use dubp::crypto::keys::ed25519::PublicKey;
use duniter_dbs::databases::bc_v2::BcV2DbWritable; use duniter_dbs::databases::bc_v2::BcV2DbWritable;
pub fn apply_block<B: Backend>( pub fn apply_block<B: Backend>(
...@@ -26,27 +25,7 @@ pub fn apply_block<B: Backend>( ...@@ -26,27 +25,7 @@ pub fn apply_block<B: Backend>(
block: &DubpBlockV10, block: &DubpBlockV10,
) -> KvResult<BlockMetaV2> { ) -> KvResult<BlockMetaV2> {
//log::info!("apply_block #{}", block.number().0); //log::info!("apply_block #{}", block.number().0);
let block_meta = BlockMetaV2 { let block_meta = BlockMetaV2::from(block);
version: 10,
number: block.number().0,
hash: block.hash().0,
signature: block.signature(),
inner_hash: block.inner_hash(),
previous_hash: block.previous_hash(),
issuer: block.issuer(),
previous_issuer: PublicKey::default(),
time: block.local_time(),
pow_min: block.pow_min() as u32,
members_count: block.members_count() as u64,
issuers_count: block.issuers_count() as u32,
issuers_frame: block.issuers_frame() as u64,
issuers_frame_var: 0,
median_time: block.common_time(),
nonce: block.nonce(),
monetary_mass: block.monetary_mass(),
dividend: block.dividend(),
unit_base: block.unit_base() as u32,
};
( (
bc_db.blocks_meta_write(), bc_db.blocks_meta_write(),
...@@ -174,7 +153,8 @@ pub fn revert_block<B: Backend>( ...@@ -174,7 +153,8 @@ pub fn revert_block<B: Backend>(
mod tests { mod tests {
use super::*; use super::*;
use dubp::{ use dubp::{
crypto::keys::PublicKey as _, documents::transaction::TransactionDocumentV10Stringified, crypto::keys::{ed25519::PublicKey, PublicKey as _},
documents::transaction::TransactionDocumentV10Stringified,
documents_parser::prelude::FromStringObject, documents_parser::prelude::FromStringObject,
}; };
use duniter_dbs::{ use duniter_dbs::{
......
...@@ -14,31 +14,24 @@ ...@@ -14,31 +14,24 @@
// along with this program. If not, see <https://www.gnu.org/licenses/>. // along with this program. If not, see <https://www.gnu.org/licenses/>.
use crate::*; use crate::*;
use dubp::crypto::keys::ed25519::PublicKey; use duniter_dbs::databases::bc_v2::BcV2DbReadable;
use duniter_dbs::BlockDbV2; use duniter_dbs::BlockDbV2;
pub fn init(bc_db: &BcV2Db<FileBackend>, cm_db: &CmV1Db<MemSingleton>) -> KvResult<()> {
if let Some(current_block_meta) = bc_db
.blocks_meta()
.iter_rev(.., |it| it.values().next_res())?
{
cm_db
.current_block_meta_write()
.upsert((), current_block_meta)
} else {
Ok(())
}
}
pub fn apply_block(block: &DubpBlockV10, cm_db: &CmV1Db<MemSingleton>) -> KvResult<()> { pub fn apply_block(block: &DubpBlockV10, cm_db: &CmV1Db<MemSingleton>) -> KvResult<()> {
let block_meta = BlockMetaV2 { let block_meta = BlockMetaV2::from(block);
version: 10,
number: block.number().0,
hash: block.hash().0,
signature: block.signature(),
inner_hash: block.inner_hash(),
previous_hash: block.previous_hash(),
issuer: block.issuer(),
previous_issuer: PublicKey::default(),
time: block.local_time(),
pow_min: block.pow_min() as u32,
members_count: block.members_count() as u64,
issuers_count: block.issuers_count() as u32,
issuers_frame: block.issuers_frame() as u64,
issuers_frame_var: 0,
median_time: block.common_time(),
nonce: block.nonce(),
monetary_mass: block.monetary_mass(),
dividend: block.dividend(),
unit_base: block.unit_base() as u32,
};
cm_db.current_block_meta_write().upsert((), block_meta)?; cm_db.current_block_meta_write().upsert((), block_meta)?;
cm_db cm_db
.current_block_write() .current_block_write()
......
...@@ -13,6 +13,8 @@ ...@@ -13,6 +13,8 @@
// You should have received a copy of the GNU Affero General Public License // You should have received a copy of the GNU Affero General Public License
// along with this program. If not, see <https://www.gnu.org/licenses/>. // along with this program. If not, see <https://www.gnu.org/licenses/>.
use dubp::block::DubpBlockV10;
use crate::*; use crate::*;
const BLOCK_META_SERIALIZED_SIZE: usize = 323; const BLOCK_META_SERIALIZED_SIZE: usize = 323;
...@@ -104,3 +106,30 @@ mod tests { ...@@ -104,3 +106,30 @@ mod tests {
Ok(()) Ok(())
} }
} }
impl From<&DubpBlockV10> for BlockMetaV2 {
fn from(block: &DubpBlockV10) -> Self {
use dubp::block::prelude::DubpBlockTrait;
BlockMetaV2 {
version: 10,
number: block.number().0,
hash: block.hash().0,
signature: block.signature(),
inner_hash: block.inner_hash(),
previous_hash: block.previous_hash(),
issuer: block.issuer(),
previous_issuer: PublicKey::default(),
time: block.local_time(),
pow_min: block.pow_min() as u32,
members_count: block.members_count() as u64,
issuers_count: block.issuers_count() as u32,
issuers_frame: block.issuers_frame() as u64,
issuers_frame_var: 0,
median_time: block.common_time(),
nonce: block.nonce(),
monetary_mass: block.monetary_mass(),
dividend: block.dividend(),
unit_base: block.unit_base() as u32,
}
}
}
...@@ -117,6 +117,7 @@ impl DuniterServer { ...@@ -117,6 +117,7 @@ impl DuniterServer {
log::info!("open duniter databases..."); log::info!("open duniter databases...");
let (bc_db, dbs) = duniter_dbs::open_dbs(profile_path_opt)?; let (bc_db, dbs) = duniter_dbs::open_dbs(profile_path_opt)?;
dbs.dunp_db.heads_old_write().clear()?; // Clear WS2Pv1 HEADs dbs.dunp_db.heads_old_write().clear()?; // Clear WS2Pv1 HEADs
duniter_dbs_write_ops::cm::init(&bc_db, &dbs.cm_db)?;
log::info!("Databases successfully opened."); log::info!("Databases successfully opened.");
let current = duniter_dbs_read_ops::get_current_block_meta(&dbs.cm_db) let current = duniter_dbs_read_ops::get_current_block_meta(&dbs.cm_db)
.context("Fail to get current")?; .context("Fail to get current")?;
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment