diff --git a/chain/src/chain.rs b/chain/src/chain.rs index 5d145ee39..685381998 100644 --- a/chain/src/chain.rs +++ b/chain/src/chain.rs @@ -140,6 +140,7 @@ pub struct Chain { verifier_cache: Arc<RwLock<VerifierCache>>, // POW verification function pow_verifier: fn(&BlockHeader, u8) -> bool, + archive_mode: bool, } unsafe impl Sync for Chain {} @@ -156,6 +157,7 @@ impl Chain { genesis: Block, pow_verifier: fn(&BlockHeader, u8) -> bool, verifier_cache: Arc<RwLock<VerifierCache>>, + archive_mode: bool, ) -> Result<Chain, Error> { let chain_store = store::ChainStore::new(db_env)?; @@ -187,6 +189,7 @@ impl Chain { pow_verifier, verifier_cache, block_hashes_cache: Arc::new(RwLock::new(VecDeque::with_capacity(HASHES_CACHE_SIZE))), + archive_mode, }) } @@ -664,6 +667,14 @@ impl Chain { /// Meanwhile, the chain will not be able to accept new blocks. It should /// therefore be called judiciously. pub fn compact(&self) -> Result<(), Error> { + if self.archive_mode { + debug!( + LOGGER, + "Blockchain compaction disabled, node running in archive mode." + ); + return Ok(()); + } + debug!(LOGGER, "Starting blockchain compaction."); // Compact the txhashset via the extension. { diff --git a/chain/tests/data_file_integrity.rs b/chain/tests/data_file_integrity.rs index 211aad4e2..c42bbcc7e 100644 --- a/chain/tests/data_file_integrity.rs +++ b/chain/tests/data_file_integrity.rs @@ -55,6 +55,7 @@ fn setup(dir_name: &str) -> Chain { genesis_block, pow::verify_size, verifier_cache, + false, ).unwrap() } @@ -68,6 +69,7 @@ fn reload_chain(dir_name: &str) -> Chain { genesis::genesis_dev(), pow::verify_size, verifier_cache, + false, ).unwrap() } diff --git a/chain/tests/mine_simple_chain.rs b/chain/tests/mine_simple_chain.rs index 80fc62cb2..87ae792ce 100644 --- a/chain/tests/mine_simple_chain.rs +++ b/chain/tests/mine_simple_chain.rs @@ -52,6 +52,7 @@ fn setup(dir_name: &str, genesis: Block) -> Chain { genesis, pow::verify_size, verifier_cache, + false, ).unwrap() } @@ -497,6 +498,7 @@ fn actual_diff_iter_output() { genesis_block, pow::verify_size, verifier_cache, + false, ).unwrap(); let iter = chain.difficulty_iter(); let mut last_time = 0; diff --git a/chain/tests/test_coinbase_maturity.rs b/chain/tests/test_coinbase_maturity.rs index ab351ecb5..9d62a8189 100644 --- a/chain/tests/test_coinbase_maturity.rs +++ b/chain/tests/test_coinbase_maturity.rs @@ -57,6 +57,7 @@ fn test_coinbase_maturity() { genesis_block, pow::verify_size, verifier_cache, + false, ).unwrap(); let prev = chain.head_header().unwrap(); diff --git a/servers/src/grin/server.rs b/servers/src/grin/server.rs index eef5aab3c..483c5380e 100644 --- a/servers/src/grin/server.rs +++ b/servers/src/grin/server.rs @@ -165,6 +165,7 @@ impl Server { genesis.clone(), pow::verify_size, verifier_cache.clone(), + archive_mode, )?); pool_adapter.set_chain(Arc::downgrade(&shared_chain)); diff --git a/wallet/tests/common/testclient.rs b/wallet/tests/common/testclient.rs index 22b7d7bac..22e274c66 100644 --- a/wallet/tests/common/testclient.rs +++ b/wallet/tests/common/testclient.rs @@ -111,6 +111,7 @@ where genesis_block, pow::verify_size, verifier_cache, + false, ).unwrap(); let (tx, rx) = channel(); let retval = WalletProxy {