Merkle puu põhineb blake3

blake3Avaneb uues aknas põhineb merkle-puul, kuid avalikustatud liides ei ekspordi merkle-puud.

baoAvaneb uues aknas rakendab blake3 voogedastuse valideerimist, kuid ei saa muuta aluseks olevate tükkideAvaneb uues aknas suurust (vt suuremate "tükkide rühmade" toetamine, et vähendada ruumi koormustAvaneb uues aknas ).

See tähendab, et bao kulutab Merkle-puu salvestamiseks 6% lisamäluruumi, mis on jaotatud sisuindeksi puhul märkimisväärne lisakulu.

Seega rakendasin blake3_merkle'iAvaneb uues aknas, et tuletada 32 baiti hashi 1 MB sisu kohta, mille täiendav salvestuskoormus on 0,3‱.

Merkle-puu genereerib hashed, mis on kooskõlas blake3-ga.

Kui sisu on väiksem või võrdne 1MB, on Merkle-puul ainult üks sõlm ja selle sõlme hash on võrdne blake3 hashiga.

./examples/main.rs Järgnevalt :

use blake3_merkle::Merkle;

use std::{env, error::Error, fs::File, io::copy};

fn main() -> Result<(), Box<dyn Error>> {
  let fpath = env::current_dir()?.join("test.pdf");

  let mut blake3 = blake3::Hasher::new();
  copy(&mut File::open(&fpath)?, &mut blake3)?;

  let mut merkle = Merkle::new();
  copy(&mut File::open(&fpath)?, &mut merkle)?;
  merkle.finalize();
  dbg!(&merkle.li);
  dbg!(merkle.blake3());
  dbg!(blake3.finalize());
  Ok(())
}

Käivita ./example.main.shja väljund on järgmine

[examples/main.rs:14] &merkle.li = [
    HashDepth {
        hash: Hash(
            "eb896f431b7ff8acb4749b54981d461359a01ded0261fa0da856dd28bf29d3b3",
        ),
        depth: 10,
    },
    HashDepth {
        hash: Hash(
            "4a84cc85f03f47a7c32755f8d9d81c5d3f3e04548ee8129fd480cb71c7dbc5b4",
        ),
        depth: 10,
    },
    HashDepth {
        hash: Hash(
            "fbfe78e550b355cb6775e324c4fed7eb987084b115dca599aaf40056bfb031c3",
        ),
        depth: 10,
    },
    HashDepth {
        hash: Hash(
            "392878c3bdc9c315d6cc8a1721d8cd0a39e49ac8716f4cb8cdf6cf83fbb666f5",
        ),
        depth: 6,
    },
]
[examples/main.rs:15] merkle.blake3() = Hash(
    "74a79d0bc37dcac64c493e872252f19e8bdb32dee306481a6827fa037b378c76",
)
[examples/main.rs:16] blake3.finalize() = Hash(
    "74a79d0bc37dcac64c493e872252f19e8bdb32dee306481a6827fa037b378c76",
)
Uuendused:
Alates: gcxfd