pub mod chain_builder;
pub use chain_builder::TestChainBuilder;
use crate::Ledger;
use aleo_std::StorageMode;
use console::{
account::{Address, PrivateKey, ViewKey},
network::MainnetV0,
prelude::*,
};
use snarkvm_circuit::AleoV0;
use snarkvm_ledger_store::ConsensusStore;
use snarkvm_synthesizer::vm::VM;
pub use snarkvm_ledger_test_helpers::*;
pub type CurrentNetwork = MainnetV0;
pub type CurrentAleo = AleoV0;
#[cfg(not(feature = "rocks"))]
pub type CurrentLedger = Ledger<CurrentNetwork, snarkvm_ledger_store::helpers::memory::ConsensusMemory<CurrentNetwork>>;
#[cfg(feature = "rocks")]
pub type CurrentLedger = Ledger<CurrentNetwork, snarkvm_ledger_store::helpers::rocksdb::ConsensusDB<CurrentNetwork>>;
#[cfg(not(feature = "rocks"))]
pub type LedgerType = snarkvm_ledger_store::helpers::memory::ConsensusMemory<CurrentNetwork>;
#[cfg(feature = "rocks")]
pub type LedgerType = snarkvm_ledger_store::helpers::rocksdb::ConsensusDB<CurrentNetwork>;
#[cfg(not(feature = "rocks"))]
pub type CurrentConsensusStore =
ConsensusStore<CurrentNetwork, snarkvm_ledger_store::helpers::memory::ConsensusMemory<CurrentNetwork>>;
#[cfg(feature = "rocks")]
pub type CurrentConsensusStore =
ConsensusStore<CurrentNetwork, snarkvm_ledger_store::helpers::rocksdb::ConsensusDB<CurrentNetwork>>;
#[cfg(not(feature = "rocks"))]
pub type CurrentConsensusStorage = snarkvm_ledger_store::helpers::memory::ConsensusMemory<CurrentNetwork>;
#[cfg(feature = "rocks")]
pub type CurrentConsensusStorage = snarkvm_ledger_store::helpers::rocksdb::ConsensusDB<CurrentNetwork>;
pub struct TestEnv {
pub ledger: CurrentLedger,
pub private_key: PrivateKey<CurrentNetwork>,
pub view_key: ViewKey<CurrentNetwork>,
pub address: Address<CurrentNetwork>,
}
pub fn sample_test_env(rng: &mut (impl Rng + CryptoRng)) -> TestEnv {
let private_key = PrivateKey::<CurrentNetwork>::new(rng).unwrap();
let view_key = ViewKey::try_from(&private_key).unwrap();
let address = Address::try_from(&private_key).unwrap();
let ledger = sample_ledger(private_key, rng);
TestEnv { ledger, private_key, view_key, address }
}
pub fn sample_ledger(private_key: PrivateKey<CurrentNetwork>, rng: &mut (impl Rng + CryptoRng)) -> CurrentLedger {
let store = CurrentConsensusStore::open(StorageMode::new_test(None)).unwrap();
let genesis = VM::from(store).unwrap().genesis_beacon(&private_key, rng).unwrap();
let ledger = CurrentLedger::load(genesis.clone(), StorageMode::new_test(None)).unwrap();
assert_eq!(genesis, ledger.get_block(0).unwrap());
ledger
}