mirror of
https://github.com/mimblewimble/grin.git
synced 2025-01-22 03:51:08 +03:00
028b14d9d9
* only store leaves in rm_log * cleanup * commit * add failing test to cover case where we compact an already compacted data file * fix the logic for pruning the data file * rm_log only contains leaves prunelist only contains non-leaf subtree roots * cleanup * commit * bitmap impl running in parallel * rustfmt * this is better - rewind unremoves outpu pos spent by rewound inputs * commit * commit * pass bitmap around when rewinding * store and retrieve input bitmap per block from the db * Replace the RemoveLog with the UTXO set. * utxo set starting to pass tests * stuff works... * split store types out added some tests to compare the performance of the rm_log and the proposed utxo_set * pull prune_list out into standalone file * cleanup, get rid of unused height param * cleanup and add doc comments * add support for migrating rm_log to utxo_set * take snapshot of utxo file during fast sync implement migration of rm_log -> utxo_set * rename rewound_copy to snapshot * fixup pmmr tests to reflect cutoff_pos * cleanup unused import * check_compact needs to rewind the utxo_set as appropriate * fix pool tests * fixup core tests * cache block_input_bitmaps via LruCache in store * cache block header on initial write to db * rename utxo_set -> leaf_set and remove references to "spent" in grin_store * better document the rewind behavior
41 lines
1.4 KiB
Rust
41 lines
1.4 KiB
Rust
// Copyright 2018 The Grin Developers
|
|
//
|
|
// Licensed under the Apache License, Version 2.0 (the "License");
|
|
// you may not use this file except in compliance with the License.
|
|
// You may obtain a copy of the License at
|
|
//
|
|
// http://www.apache.org/licenses/LICENSE-2.0
|
|
//
|
|
// Unless required by applicable law or agreed to in writing, software
|
|
// distributed under the License is distributed on an "AS IS" BASIS,
|
|
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
// See the License for the specific language governing permissions and
|
|
// limitations under the License.
|
|
|
|
//! Globally accessible static instance of secp256k1, to avoid
|
|
//! initialization overhead
|
|
|
|
use rand::thread_rng;
|
|
use secp_ as secp;
|
|
use std::sync::{Arc, Mutex};
|
|
|
|
lazy_static! {
|
|
/// Static reference to secp instance
|
|
pub static ref SECP256K1:Arc<Mutex<secp::Secp256k1>>
|
|
= Arc::new(Mutex::new(secp::Secp256k1::with_caps(secp::ContextFlag::Commit)));
|
|
}
|
|
|
|
/// Returns the static instance, but calls randomize on it as well
|
|
/// (Recommended to avoid side channel attacks
|
|
pub fn static_secp_instance() -> Arc<Mutex<secp::Secp256k1>> {
|
|
let mut secp_inst = SECP256K1.lock().unwrap();
|
|
secp_inst.randomize(&mut thread_rng());
|
|
SECP256K1.clone()
|
|
}
|
|
|
|
/// Convenient way to generate a commitment to zero.
|
|
pub fn commit_to_zero_value() -> secp::pedersen::Commitment {
|
|
let secp = static_secp_instance();
|
|
let secp = secp.lock().unwrap();
|
|
secp.commit_value(0).unwrap()
|
|
}
|