#blockchain #hashing #sha-256 #elliptic-curve #cryptography

bin+lib blockchain_maker

使用椭圆曲线密码学和 SHA-256 哈希算法实现的区块链

2 个版本 (1 个稳定版本)

1.1.0 2024 年 3 月 7 日
0.1.0 2024 年 3 月 5 日

#1928 in 魔法豆

MIT 许可证

19KB
218

Rust Blockchain Maker 包 🚀

欢迎来到 Rust Blockchain Maker 包!这是您在 Rust 中构建、验证和管理区块链的终极工具包。下面,您将找到您需要了解的一切,以集成和利用我们区块链功能在您的 Rust 项目中。

依赖项 📦

在深入了解区块链的奇妙之处之前,请确保在您的 Cargo.toml 中包含以下依赖项

chrono = "0.4"
serde = { version = "1.0", features = ["derive"] }
sha2 = "0.10"
openssl = "0.10"
serde_json = "1.0"

这些依赖项将确保正确处理时间、序列化、加密函数和 JSON 格式化。

入门 🌟

从我们的包和标准 Rust 库导入必要的模块,开始构建您的区块链

use blockchain_maker::Blockchain; // Our primary Blockchain structure.
//instead of all of this
use chrono::prelude::*; // For handling timestamps.
use serde::{Deserialize, Serialize}; // For data serialization.
use sha2::{Sha256, Digest}; // For creating cryptographic hashes.
use openssl::ec::{EcGroup, EcKey}; // For elliptic curve cryptography.

核心功能 🛠

我们的包提供各种函数来支持您的区块链探险

get_block_hash_from_file(路径:P) -> 结果<String, Box<dynstd::错误::Error>>

从指定文件检索区块链块的哈希。

  • 参数: path: P - 包含块的文件路径的引用。
  • 返回: 如果成功,则包含作为 String 的块哈希的 Result

count_files_in_folder(路径:P) -> std::io::结果<usize>

计算指定目录中的文件数量,有助于块管理。

  • 参数: path: P - 目录路径的引用。
  • 返回: 包含文件计数的 Result

sign(信息: &str,奖励: u64,区块编号: u64) -> (Vec<u8>, Vec<u8>)

使用ECDSA为给定的消息生成数字签名。

  • 参数

    1- message: &str - 要签名的消息。

    2- reward: u64 - 挖矿奖励。

    3- block_number: u64 - 区块编号。

  • 返回:包含签名和公钥的元组。

结构体 🏗

我们的主要结构包括 BlockBlockchain,用于封装所有必要的区块链数据和功能。

Block

表示区块链中的单个区块,包含时间戳、数据、前一个哈希等属性。

Blockchain

管理区块链,提供添加新区块、验证链和计算奖励的方法。

使用示例 📝

以下是如何使用我们的包创建和管理区块链的方法。

use blockchain_maker::Blockchain;
use blockchain_maker::count_files_in_folder;

fn main() {
    // Attempt to load the blockchain from disk
    let mut blockchain: Blockchain = match Blockchain::load_chain_from_disk("my_blocks".to_string()) {
        Ok(chain) => chain,
        Err(e) => {
            // Handle the error e.g., by logging or creating a new, empty blockchain
            println!("Failed to load chain from disk, error: {}", e);
            // Potentially initialize a new, empty blockchain here if desired
            Blockchain::new() // This assumes you have a `new` method to create an empty blockchain
        },
    };

    // Validate the loaded or new blockchain
    if blockchain.validate_chain("my_blocks".to_string()) {
        println!("Blockchain validated successfully.");
    } else {
        println!("Blockchain validation failed.");
    }

    // Add new blocks to the blockchain
    if let Err(e) = blockchain.add_block("Block 1 Transactions Data".to_string()) {
        println!("Failed to add block: {}", e);
    }

    if let Err(e) = blockchain.add_block("Block 2 Transactions Data".to_string()) {
        println!("Failed to add block: {}", e);
    }

    // Print out the current state of the blockchain or other relevant information
    // This might involve iterating over the blocks and printing them out, 
    // or simply printing out the number of blocks in the chain
    println!("Current blockchain size: {}", count_files_in_folder("my_blocks".to_string()).unwrap());
}

此示例演示从磁盘加载区块链、验证它、添加新区块以及显示区块链大小。

更新 1.1.0 🚀

现在您可以为区块链的第一个区块选择初始奖励,以及减半发生的时间。

    pub struct Blockchain {
    chain: Vec<Block>,
    get_reward: u64,
    get_halving_interval: u64,
}

贡献和支持 🤝

欢迎贡献!如果您想贡献或发现错误,请在我们的GitHub存储库中打开一个问题或拉取请求。对于支持,请通过我们的支持渠道联系。

使用我们的Rust区块链制作包深入区块链开发!快乐编码!🚀

依赖项

~3.5–5MB
~101K SLoC