pub struct QuantumBlockchain {
pub chain: Vec<Block>,
pub pending_transactions: Vec<Transaction>,
pub difficulty: usize,
pub consensus: ConsensusType,
pub nodes: Vec<String>,
}Expand description
Quantum blockchain with distributed ledger
Fields§
§chain: Vec<Block>Chain of blocks
pending_transactions: Vec<Transaction>Pending transactions
difficulty: usizeMining difficulty
consensus: ConsensusTypeConsensus algorithm
nodes: Vec<String>Network nodes
Implementations§
Source§impl QuantumBlockchain
impl QuantumBlockchain
Sourcepub fn new(consensus: ConsensusType, difficulty: usize) -> Self
pub fn new(consensus: ConsensusType, difficulty: usize) -> Self
Creates a new quantum blockchain
Examples found in repository?
examples/quantum_crypto.rs (line 226)
217fn run_blockchain_example() -> Result<()> {
218 println!("\nQuantum Blockchain Example");
219 println!("-------------------------");
220
221 use quantrs2_ml::blockchain::{ConsensusType, QuantumBlockchain, Transaction};
222
223 // Create a quantum blockchain
224 let difficulty = 2; // 2 leading zeros required for mining
225 println!("Creating quantum blockchain with difficulty {}", difficulty);
226 let mut blockchain = QuantumBlockchain::new(ConsensusType::QuantumProofOfWork, difficulty);
227
228 // Create a transaction
229 let sender = vec![1, 2, 3, 4];
230 let recipient = vec![5, 6, 7, 8];
231 let amount = 100.0;
232
233 println!(
234 "Creating transaction: {} sends {} units to recipient",
235 sender
236 .iter()
237 .map(|&b| b.to_string())
238 .collect::<Vec<_>>()
239 .join(""),
240 amount
241 );
242
243 let transaction = Transaction::new(sender.clone(), recipient.clone(), amount, Vec::new());
244
245 // Add transaction
246 println!("Adding transaction to blockchain...");
247 blockchain.add_transaction(transaction)?;
248
249 // Mine a block
250 println!("Mining new block...");
251 let start = Instant::now();
252 let block = blockchain.mine_block()?;
253 println!("Block mined in {:.2?}", start.elapsed());
254
255 println!(
256 "Block hash: {:02x?}",
257 &block.hash[0..8.min(block.hash.len())]
258 );
259 println!("Blockchain length: {}", blockchain.chain.len());
260
261 // Verify blockchain
262 println!("Verifying blockchain integrity...");
263 let is_valid = blockchain.verify_chain()?;
264
265 if is_valid {
266 println!("✓ Blockchain verification successful!");
267 } else {
268 println!("✗ Blockchain verification failed!");
269 }
270
271 Ok(())
272}Sourcepub fn add_transaction(&mut self, transaction: Transaction) -> Result<()>
pub fn add_transaction(&mut self, transaction: Transaction) -> Result<()>
Adds a transaction to the pending transactions
Examples found in repository?
examples/quantum_crypto.rs (line 247)
217fn run_blockchain_example() -> Result<()> {
218 println!("\nQuantum Blockchain Example");
219 println!("-------------------------");
220
221 use quantrs2_ml::blockchain::{ConsensusType, QuantumBlockchain, Transaction};
222
223 // Create a quantum blockchain
224 let difficulty = 2; // 2 leading zeros required for mining
225 println!("Creating quantum blockchain with difficulty {}", difficulty);
226 let mut blockchain = QuantumBlockchain::new(ConsensusType::QuantumProofOfWork, difficulty);
227
228 // Create a transaction
229 let sender = vec![1, 2, 3, 4];
230 let recipient = vec![5, 6, 7, 8];
231 let amount = 100.0;
232
233 println!(
234 "Creating transaction: {} sends {} units to recipient",
235 sender
236 .iter()
237 .map(|&b| b.to_string())
238 .collect::<Vec<_>>()
239 .join(""),
240 amount
241 );
242
243 let transaction = Transaction::new(sender.clone(), recipient.clone(), amount, Vec::new());
244
245 // Add transaction
246 println!("Adding transaction to blockchain...");
247 blockchain.add_transaction(transaction)?;
248
249 // Mine a block
250 println!("Mining new block...");
251 let start = Instant::now();
252 let block = blockchain.mine_block()?;
253 println!("Block mined in {:.2?}", start.elapsed());
254
255 println!(
256 "Block hash: {:02x?}",
257 &block.hash[0..8.min(block.hash.len())]
258 );
259 println!("Blockchain length: {}", blockchain.chain.len());
260
261 // Verify blockchain
262 println!("Verifying blockchain integrity...");
263 let is_valid = blockchain.verify_chain()?;
264
265 if is_valid {
266 println!("✓ Blockchain verification successful!");
267 } else {
268 println!("✗ Blockchain verification failed!");
269 }
270
271 Ok(())
272}Sourcepub fn mine_block(&mut self) -> Result<Block>
pub fn mine_block(&mut self) -> Result<Block>
Mines a new block
Examples found in repository?
examples/quantum_crypto.rs (line 252)
217fn run_blockchain_example() -> Result<()> {
218 println!("\nQuantum Blockchain Example");
219 println!("-------------------------");
220
221 use quantrs2_ml::blockchain::{ConsensusType, QuantumBlockchain, Transaction};
222
223 // Create a quantum blockchain
224 let difficulty = 2; // 2 leading zeros required for mining
225 println!("Creating quantum blockchain with difficulty {}", difficulty);
226 let mut blockchain = QuantumBlockchain::new(ConsensusType::QuantumProofOfWork, difficulty);
227
228 // Create a transaction
229 let sender = vec![1, 2, 3, 4];
230 let recipient = vec![5, 6, 7, 8];
231 let amount = 100.0;
232
233 println!(
234 "Creating transaction: {} sends {} units to recipient",
235 sender
236 .iter()
237 .map(|&b| b.to_string())
238 .collect::<Vec<_>>()
239 .join(""),
240 amount
241 );
242
243 let transaction = Transaction::new(sender.clone(), recipient.clone(), amount, Vec::new());
244
245 // Add transaction
246 println!("Adding transaction to blockchain...");
247 blockchain.add_transaction(transaction)?;
248
249 // Mine a block
250 println!("Mining new block...");
251 let start = Instant::now();
252 let block = blockchain.mine_block()?;
253 println!("Block mined in {:.2?}", start.elapsed());
254
255 println!(
256 "Block hash: {:02x?}",
257 &block.hash[0..8.min(block.hash.len())]
258 );
259 println!("Blockchain length: {}", blockchain.chain.len());
260
261 // Verify blockchain
262 println!("Verifying blockchain integrity...");
263 let is_valid = blockchain.verify_chain()?;
264
265 if is_valid {
266 println!("✓ Blockchain verification successful!");
267 } else {
268 println!("✗ Blockchain verification failed!");
269 }
270
271 Ok(())
272}Sourcepub fn verify_chain(&self) -> Result<bool>
pub fn verify_chain(&self) -> Result<bool>
Alias for verify() - to match the example call
Examples found in repository?
examples/quantum_crypto.rs (line 263)
217fn run_blockchain_example() -> Result<()> {
218 println!("\nQuantum Blockchain Example");
219 println!("-------------------------");
220
221 use quantrs2_ml::blockchain::{ConsensusType, QuantumBlockchain, Transaction};
222
223 // Create a quantum blockchain
224 let difficulty = 2; // 2 leading zeros required for mining
225 println!("Creating quantum blockchain with difficulty {}", difficulty);
226 let mut blockchain = QuantumBlockchain::new(ConsensusType::QuantumProofOfWork, difficulty);
227
228 // Create a transaction
229 let sender = vec![1, 2, 3, 4];
230 let recipient = vec![5, 6, 7, 8];
231 let amount = 100.0;
232
233 println!(
234 "Creating transaction: {} sends {} units to recipient",
235 sender
236 .iter()
237 .map(|&b| b.to_string())
238 .collect::<Vec<_>>()
239 .join(""),
240 amount
241 );
242
243 let transaction = Transaction::new(sender.clone(), recipient.clone(), amount, Vec::new());
244
245 // Add transaction
246 println!("Adding transaction to blockchain...");
247 blockchain.add_transaction(transaction)?;
248
249 // Mine a block
250 println!("Mining new block...");
251 let start = Instant::now();
252 let block = blockchain.mine_block()?;
253 println!("Block mined in {:.2?}", start.elapsed());
254
255 println!(
256 "Block hash: {:02x?}",
257 &block.hash[0..8.min(block.hash.len())]
258 );
259 println!("Blockchain length: {}", blockchain.chain.len());
260
261 // Verify blockchain
262 println!("Verifying blockchain integrity...");
263 let is_valid = blockchain.verify_chain()?;
264
265 if is_valid {
266 println!("✓ Blockchain verification successful!");
267 } else {
268 println!("✗ Blockchain verification failed!");
269 }
270
271 Ok(())
272}Sourcepub fn tamper_with_block(
&self,
block_index: usize,
sender: &str,
amount: f64,
) -> Result<QuantumBlockchain>
pub fn tamper_with_block( &self, block_index: usize, sender: &str, amount: f64, ) -> Result<QuantumBlockchain>
Gets a blockchain with a tampered block for testing
Trait Implementations§
Source§impl Clone for QuantumBlockchain
impl Clone for QuantumBlockchain
Source§fn clone(&self) -> QuantumBlockchain
fn clone(&self) -> QuantumBlockchain
Returns a duplicate of the value. Read more
1.0.0 · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
Performs copy-assignment from
source. Read moreAuto Trait Implementations§
impl Freeze for QuantumBlockchain
impl RefUnwindSafe for QuantumBlockchain
impl Send for QuantumBlockchain
impl Sync for QuantumBlockchain
impl Unpin for QuantumBlockchain
impl UnwindSafe for QuantumBlockchain
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. Read more
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self>
fn into_either(self, into_left: bool) -> Either<Self, Self>
Converts
self into a Left variant of Either<Self, Self>
if into_left is true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
Converts
self into a Left variant of Either<Self, Self>
if into_left(&self) returns true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§impl<T> Pointable for T
impl<T> Pointable for T
Source§impl<SS, SP> SupersetOf<SS> for SPwhere
SS: SubsetOf<SP>,
impl<SS, SP> SupersetOf<SS> for SPwhere
SS: SubsetOf<SP>,
Source§fn to_subset(&self) -> Option<SS>
fn to_subset(&self) -> Option<SS>
The inverse inclusion map: attempts to construct
self from the equivalent element of its
superset. Read moreSource§fn is_in_subset(&self) -> bool
fn is_in_subset(&self) -> bool
Checks if
self is actually part of its subset T (and can be converted to it).Source§fn to_subset_unchecked(&self) -> SS
fn to_subset_unchecked(&self) -> SS
Use with care! Same as
self.to_subset but without any property checks. Always succeeds.Source§fn from_subset(element: &SS) -> SP
fn from_subset(element: &SS) -> SP
The inclusion map: converts
self to the equivalent element of its superset.Source§impl<SS, SP> SupersetOf<SS> for SPwhere
SS: SubsetOf<SP>,
impl<SS, SP> SupersetOf<SS> for SPwhere
SS: SubsetOf<SP>,
Source§fn to_subset(&self) -> Option<SS>
fn to_subset(&self) -> Option<SS>
The inverse inclusion map: attempts to construct
self from the equivalent element of its
superset. Read moreSource§fn is_in_subset(&self) -> bool
fn is_in_subset(&self) -> bool
Checks if
self is actually part of its subset T (and can be converted to it).Source§fn to_subset_unchecked(&self) -> SS
fn to_subset_unchecked(&self) -> SS
Use with care! Same as
self.to_subset but without any property checks. Always succeeds.Source§fn from_subset(element: &SS) -> SP
fn from_subset(element: &SS) -> SP
The inclusion map: converts
self to the equivalent element of its superset.