/
nirvand
/
rust-blockchain
Обзор
Документация
Войти
/
nirvand
/
rust-blockchain
Код
Запросы
1
Задачи
Вики
Пакеты
0
Релизы
0
Аналитика
Безопасность
pull-request
src/main.rs
101 строка
4 KB
Nirvand
chore: add some commentaries
22 мар 2025, 13:51
22 мар 2025, 13:51
ecc5324
Код
Авторство
О чём код?
mod blockchain; use std::io; // Стандартная библиотека ввода use blockchain::{Block, Blockchain}; use std::time::Instant; fn main() { println!("Введите сложность майнинга (рекомендуется 3-4 для быстрого тестирования):"); println!("Значение сложности больше 5 не рекомендуется, поскольку будет требовать на порядок больше времени"); let mut input = String::new(); io::stdin().read_line(&mut input).expect("Ошибка при чтении ввода"); let difficulty: u32 = match input.trim().parse() { Ok(num) if num > 0 => num, _ => { println!("Некорректное значение сложности. Установлена сложность по умолчанию: 4"); 4 } }; let mut blockchain = Blockchain::new(difficulty); println!("Genesis Block created: {:?}", blockchain.blocks[0]); for i in 1..=5 { let start = Instant::now(); let data = format!("Data for the block {}", i); blockchain.add_block(data); let duration = start.elapsed(); println!("Elapsed time {}: {:?}", i, duration); } println!("Chain:"); for block in &blockchain.blocks { println!("{:?}", block); } if blockchain.is_chain_valid() { println!("Chain is valid"); } else { println!("Chain is invalid"); } test_block_serialization(); test_blockchain_serialization(); } fn test_block_serialization() { // Функция тестирует сериализацию и десериализацию блоков let block = Block::new(1, "Test Data".to_string(), "0000abcd".to_string(), 4); // Сериализация блока let serialized_block = block.to_json().expect("Failed to serialize block"); println!("Serialized Block: {}", serialized_block); // Десериализация блока let deserialized_block = Block::from_json(&serialized_block).expect("Failed to deserialize block"); println!("Deserialized Block: {:?}", deserialized_block); // Проверка совпадения данных assert_eq!(block.index, deserialized_block.index); assert_eq!(block.data, deserialized_block.data); assert_eq!(block.previous_hash, deserialized_block.previous_hash); assert_eq!(block.hash, deserialized_block.hash); assert_eq!(block.difficulty, deserialized_block.difficulty); assert_eq!(block.nonce, deserialized_block.nonce); println!("Block serialization and deserialization test passed!"); } fn test_blockchain_serialization() { // Функция тестирует сериализацию и десериализацию блокчейна let mut blockchain = Blockchain::new(4); blockchain.add_block("Second Block".to_string()); blockchain.add_block("Third Block".to_string()); // Сериализация блокчейна let serialized_chain = blockchain .to_json() .expect("Failed to serialize blockchain"); println!("Serialized Blockchain: {}", serialized_chain); // Десериализация блокчейна let deserialized_chain = Blockchain::from_json(&serialized_chain).expect("Failed to deserialize blockchain"); println!("Deserialized Blockchain: {:?}", deserialized_chain); // Проверка длины и данных assert_eq!(blockchain.blocks.len(), deserialized_chain.blocks.len()); assert_eq!(blockchain.difficulty, deserialized_chain.difficulty); for (original, deserialized) in blockchain .blocks .iter() .zip(deserialized_chain.blocks.iter()) { assert_eq!(original.index, deserialized.index); assert_eq!(original.data, deserialized.data); assert_eq!(original.previous_hash, deserialized.previous_hash); assert_eq!(original.hash, deserialized.hash); assert_eq!(original.difficulty, deserialized.difficulty); assert_eq!(original.nonce, deserialized.nonce); } println!("Blockchain serialization and deserialization test passed!"); }