#merkle-tree #root #running

rust-merkle

Rust 中简单的 Merkle 树实现

8 个版本

0.1.7 2024 年 4 月 14 日
0.1.6 2024 年 4 月 14 日

#694加密

36 每月下载量

MIT 许可证

10KB
182

Rust Merkle

这是 Merkle 树的 Rust 实现。

入门指南

以下步骤将帮助您在本地机器上创建项目副本并运行开发与测试。

先决条件

您需要安装哪些软件以及如何安装它们

  • Rust:您可以从这里安装

安装

一系列逐步示例,告诉您如何获取开发环境运行

git clone [email protected]:keohanoi/rust-merkle.git
cd rust-merkle
cargo build

运行测试 解释如何运行此系统的自动化测试

cargo test

示例

找到 Merkle 树的根

use rust_merkle::merkle::{MerkleTreeKeccak, MerkleTreeSha256};

fn main() {
  // Example usage:
  let hashes = vec![vec![0; 32], vec![1; 32], vec![2; 32], vec![3; 32]];
  let tree_keccak = MerkleTreeKeccak::new(hashes.clone());
  let tree_sha256 = MerkleTreeSha256::new(hashes.clone());

  println!("Root (Keccak): {:?}", tree_keccak.tree.root());
  println!("Root (SHA256): {:?}", tree_sha256.tree.root());
}

使用特定结构构建

use rust_merkle::merkle::MerkleTreeKeccak;

pub struct TestStruct {
  pub field1: String,
  pub field2: u64,
}

fn main() {
  // Example usage:
  let vals: Vec<TestStruct> = vec![
    TestStruct {
      field1: "test1".to_string(),
      field2: 1,
    },
    TestStruct {
      field1: "test2".to_string(),
      field2: 2,
    },
    TestStruct {
      field1: "test3".to_string(),
      field2: 3,
    }
  ];
  let mut hashes: Vec<Vec<u8>> = vec![];

  for i in 0..vals.len() {
    let bytes = [vals[i].field1.as_bytes(), &vals[i].field2.to_string().as_bytes()].concat();
    let hash = MerkleTreeKeccak::keccak256(&bytes);
    hashes.push(hash);
  }

  let tree_keccak = MerkleTreeKeccak::new(hashes.clone());
  println!("Root (Keccak): {:?}", tree_keccak.tree.root());
}

依赖项

~1.5MB
~12K SLoC