Utreexo: compressing ntau UTXO Bitcoin

Utreexo: compressing ntau UTXO Bitcoin

Hlo Habr!

Hauv Bitcoin network, tag nrho cov nodes, los ntawm kev pom zoo, pom zoo rau ib txheej ntawm UTXOs: pes tsawg npib muaj rau kev siv, rau leej twg raws nraim, thiab nyob rau hauv dab tsi tej yam kev mob. UTXO teeb yog qhov tsawg kawg nkaus ntawm cov ntaub ntawv xav tau rau lub validator node, yam tsis muaj qhov node yuav tsis muaj peev xwm txheeb xyuas qhov siv tau ntawm cov khoom xa tuaj thiab cov blocks uas muaj lawv.

Hauv qhov no, kev sim ua tau nyob rau hauv txhua txoj hauv kev los txo cov neeg sawv cev khaws cia ntawm cov txheej txheem no, txhawm rau txhawm rau nws yam tsis muaj kev ruaj ntseg lav. Qhov me me ntawm cov ntaub ntawv khaws cia, qhov tsawg dua qhov chaw disk qhov yuav tsum tau muaj ntawm lub validator node, uas ua rau lub validator node pheej yig, tso cai rau koj nthuav lub network thiab yog li ua rau kom ruaj ntseg ntawm lub network.

Hauv tsab xov xwm no peb yuav tshaj tawm Rust qauv ntawm qhov kev thov tsis ntev los no los ntawm tus kws sau ntawv Lightning Network Daim ntawv, Thaddeus Dryja - Utreexo: dynamic hash-based accumulator optimized rau Bitcoin UTXO teeb, uas tso cai rau txo qhov chaw seem disk rau validator nodes.

Qhov teeb meem yog dab tsi?

Ib qho ntawm Bitcoin cov teeb meem txhua xyoo yog nws qhov scalability. Lub tswv yim ntawm "koj tus kheej lub txhab nyiaj" xav kom cov neeg koom tes hauv network khaws cov ntaub ntawv ntawm txhua qhov nyiaj muaj rau kev siv. Hauv Bitcoin, cov nyiaj muaj peev xwm tau nthuav tawm raws li cov khoom siv tsis tau siv - UTXO-set. Txawm hais tias qhov no tsis yog qhov tshwj xeeb tshaj tawm cov neeg sawv cev, nws muaj txiaj ntsig zoo ntawm kev siv cov kev ua tau zoo tshaj qhov sawv cev uas txhua "lub hnab nyiaj" muaj "sib npaug" raws li kev nkag mus, thiab tseem ntxiv kev ceev ntiag tug (piv txwv li. CoinJoin).

Nws yog ib qho tseem ceeb kom paub qhov txawv ntawm keeb kwm ntawm kev lag luam (dab tsi yog hu ua blockchain) thiab lub xeev tam sim no ntawm cov kab ke. Bitcoin pauv keeb kwm tam sim no nyob txog 200 GB ntawm qhov chaw disk, thiab txuas ntxiv mus. Txawm li cas los xij, lub xeev lub xeev yog me dua, ntawm qhov kev txiav txim ntawm 4 GB, thiab tsuas yog siv rau hauv tus account qhov tseeb tias ib tug neeg tam sim no muaj nyiaj npib. Qhov ntim ntawm cov ntaub ntawv no kuj nce ntxiv rau lub sijhawm, tab sis ntawm tus nqi qis dua thiab qee zaum txawm tias yuav txo qis (saib CDPV).

Cov neeg siv teeb pom kev zoo (SPVs) kev lag luam ruaj ntseg lav rau lub peev xwm khaws tsis muaj lub xeev yam tsawg kawg nkaus (UTXO-teeb) uas tsis yog cov yuam sij ntiag tug.

UTXO and UTXO-set

UTXO (Unspent Transaction Output) yog cov khoom lag luam tsis siv nyiaj, qhov kawg ntawm cov lus ntawm txhua Satoshi pauv hauv kev lag luam. Unspent outputs ua inputs ntawm kev hloov tshiab thiab yog li siv (siv) thiab tshem tawm ntawm UTXO-set.

UTXOs tshiab yeej ib txwm tsim los ntawm kev lag luam:

  • coinbase muas yam tsis muaj inputs: tsim UTXOs tshiab thaum miners teeb nyiaj npib
  • Kev hloov pauv tsis tu ncua: tsim UTXOs tshiab thaum siv qee yam ntawm UTXOs uas twb muaj lawm

Txheej txheem ua haujlwm nrog UTXO:
Utreexo: compressing ntau UTXO Bitcoin

Cov hnab nyiaj suav cov nyiaj npib uas muaj rau kev siv nyiaj (sib npaug) raws li tus nqi ntawm UTXO muaj rau lub hnab nyiaj no rau kev siv nyiaj.

Txhua qhov validator node, txhawm rau tiv thaiv kev siv nyiaj ob zaug, yuav tsum saib xyuas cov teeb ntawm txhua tus UTXO thaum kuaj txhua kev lag luam ntawm txhua tus thaiv.

Lub node yuav tsum muaj logic:

  • Ntxiv rau UTXO-set
  • Kev tshem tawm ntawm UTXO-set
  • Tshawb xyuas lub xub ntiag ntawm ib qho UTXO hauv ib txheej

Muaj ntau txoj hauv kev los txo cov kev xav tau ntawm cov ntaub ntawv khaws cia ntawm cov txheej txheem, thaum tswj kev muaj peev xwm ntxiv thiab tshem tawm cov ntsiab lus, tshawb xyuas thiab ua pov thawj qhov muaj nyob ntawm cov khoom hauv ib txheej siv. cryptographic accumulators.

Roj teeb rau UTXO

Lub tswv yim ntawm kev siv roj teeb los khaws ntau UTXOs tau tham ua ntej lawm.

UTXO-set yog tsim nyob rau hauv ya, thaum lub sij hawm pib block download (IBD), khaws cia nyob rau hauv tag nrho thiab mus tas li, thaum nws cov ntsiab lus hloov tom qab ua muas los ntawm txhua qhov tshiab thiab raug thaiv ntawm lub network. Cov txheej txheem no yuav tsum rub tawm kwv yees li 200 GB ntawm cov ntaub ntawv thaiv thiab txheeb xyuas ntau pua lab tus lej kos npe digital. Tom qab cov txheej txheem IBD tiav lawm, cov kab hauv qab yog tias UTXO-set yuav nyob txog 4 GB.

Txawm li cas los xij, nrog cov accumulators, cov cai ntawm kev pom zoo rau cov nyiaj tau txo qis rau kev txheeb xyuas thiab tsim cov ntaub ntawv pov thawj cryptographic, thiab lub nra ntawm kev taug qab cov nyiaj tau hloov mus rau tus tswv ntawm cov nyiaj, uas muab pov thawj ntawm lawv lub neej thiab kev ua tswv cuab.

Ib qho accumulator tuaj yeem raug hu ua tus sawv cev ntawm cov txheej txheem. Qhov loj ntawm cov khoom sawv cev yuav tsum yog qhov tsis tu ncua Utreexo: compressing ntau UTXO Bitcoin, los yog nce sublinearly nrog rau kev hwm rau cardinality ntawm lub teeb thiab qhov loj ntawm lub caij nws tus kheej, piv txwv li Utreexo: compressing ntau UTXO Bitcoin, qhov twg n yog lub cardinality ntawm cov khoom khaws cia.

Hauv qhov no, lub accumulator yuav tsum tso cai tsim cov ntaub ntawv pov thawj ntawm kev suav nrog cov khoom hauv cov txheej txheem (cov pov thawj suav nrog) thiab ua kom nws muaj peev xwm txheeb xyuas cov ntaub ntawv pov thawj no zoo.

Lub roj teeb hu ua muaj zog yog tias tso cai rau koj ntxiv cov ntsiab lus thiab tshem tawm cov ntsiab lus ntawm lub teeb.

Ib qho piv txwv ntawm xws li lub roj teeb yuav yog RSA accumulator npaj los ntawm Boneh, Bunz, Fisch thaum Lub Kaum Ob Hlis 2018. Xws li ib qho accumulator muaj qhov loj me me ntawm cov sawv cev khaws cia, tab sis yuav tsum muaj lub xub ntiag qhia zais cia (kev teeb tsa ntseeg tau). Qhov kev xav tau no cuam tshuam qhov kev siv ntawm xws li ib qho accumulator rau trustless networks xws li Bitcoin, txij li thaum cov ntaub ntawv to thaum lub sij hawm zais cia tuaj yeem tso cai rau cov neeg tawm tsam los tsim cov pov thawj cuav ntawm UTXO, dag cov nodes nrog UTXO-teeb raws li xws li ib tug accumulator.

Utreexo

Tus tsim Utreexo tau npaj los ntawm Thaddeus Dryja ua rau nws tsim tau muaj zog roj teeb tsis muaj ntseeg-kev teeb tsa.

Utreexo yog ib tug hav zoov ntawm zoo meej binary Merkle Tsob Ntoo thiab yog ib qho kev txhim kho ntawm cov tswv yim nthuav tawm hauv Ua tau zoo asynchronous accumulators rau faib pki, ntxiv qhov muaj peev xwm tshem tawm cov ntsiab lus ntawm ib txheej.

Roj teeb Logical Structure

Cov roj teeb hlwb tau teem rau hauv hav zoov ntawm cov ntoo zoo tagnrho binary. Ntoo raug txiav los ntawm qhov siab. Qhov kev sawv cev no tau xaiv los ua qhov pom tseeb tshaj plaws thiab tso cai rau koj pom kev sib koom ua ke ntawm cov ntoo thaum ua haujlwm ntawm lub roj teeb.

Tus sau sau tseg tias txij li tag nrho cov ntoo hauv hav zoov yog qhov zoo tagnrho, lawv qhov siab yog qhia raws li lub zog ntawm ob, ib yam li txhua tus lej tuaj yeem sawv cev raws li qhov suav ntawm lub zog ntawm ob. Raws li, txhua txheej ntawm nplooj tuaj yeem muab faib ua binary ntoo, thiab nyob rau hauv txhua rooj plaub, ntxiv cov ntsiab lus tshiab yuav tsum muaj kev paub. tsuas yog hais txog cov cag ntawm cov ntoo khaws cia.

Yog li, khaws cia sawv cev ntawm Utreexo accumulator yog cov npe ntawm cov hauv paus pob (Merkle hauv paus), thiab tsis yog tag nrho cov hav zoov ntawm cov ntoo.

Cia peb sawv cev cov npe ntawm cov hauv paus ntsiab lus raws li Vec<Option<Hash>>. Xaiv hom Option<Hash> qhia tias cov hauv paus ntsiab lus yuav ploj mus, uas txhais tau hais tias tsis muaj tsob ntoo nrog qhov siab tsim nyog hauv lub accumulator.

/// SHA-256 Ρ…Π΅Ρˆ
#[derive(Copy, Clone, Hash, Eq, PartialEq)]
pub struct Hash(pub [u8; 32]);

#[derive(Debug, Clone)]
pub struct Utreexo {
    pub roots: Vec<Option<Hash>>,
}

impl Utreexo {
    pub fn new(capacity: usize) -> Self {
        Utreexo {
            roots: vec![None; capacity],
        }
    }
}

Ntxiv cov ntsiab lus

Ua ntej, cia peb piav qhia txog kev ua haujlwm parent(), uas paub txog niam txiv node rau ob lub ntsiab lus muab.

niam txiv() muaj nuj nqi

Txij li thaum peb tab tom siv cov ntoo Merkle, niam txiv ntawm txhua tus ntawm ob lub nodes yog ib qho ntawm cov khoom uas khaws cov hash ntawm concatenation ntawm hashes ntawm tus me nyuam nodes:

fn hash(bytes: &[u8]) -> Hash {
    let mut sha = Sha256::new();
    sha.input(bytes);
    let res = sha.result();
    let mut res_bytes = [0u8; 32];
    res_bytes.copy_from_slice(res.as_slice());

    Hash(res_bytes)
}

fn parent(left: &Hash, right: &Hash) -> Hash {
    let concat = left
        .0
        .into_iter()
        .chain(right.0.into_iter())
        .map(|b| *b)
        .collect::<Vec<_>>();

    hash(&concat[..])
}

Tus sau sau tseg tias txhawm rau tiv thaiv kev tawm tsam uas tau piav qhia los ntawm Charles Bouillaguet, Pierre-Alain Fouque, Adi Shamir, thiab Sebastien Zimmer hauv
Thib ob preimage tawm tsam ntawm dithered hash functions, ntxiv rau ob lub hashes, qhov siab hauv tsob ntoo kuj yuav tsum tau ntxiv rau qhov sib txuas.

Thaum koj ntxiv cov ntsiab lus rau lub accumulator, koj yuav tsum tau taug qab cov hauv paus ntsiab lus hloov. Los ntawm kev ua raws li txoj hauv kev hloov cov hauv paus ntsiab lus rau txhua lub caij koj ntxiv, tom qab ntawd koj tuaj yeem tsim cov ntaub ntawv pov thawj ntawm cov khoom no.

Taug qab cov kev hloov pauv thaum koj ntxiv lawv

Txhawm rau taug qab cov kev hloov pauv, cia peb tshaj tawm cov qauv Update, uas yuav khaws cov ntaub ntawv hais txog kev hloov ntawm node.

#[derive(Debug)]
pub struct Update<'a> {
    pub utreexo: &'a mut Utreexo,
    // ProofStep Ρ…Ρ€Π°Π½ΠΈΡ‚ "сосСда" элСмСнта ΠΈ Π΅Π³ΠΎ ΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅
    pub updated: HashMap<Hash, ProofStep>,
}

Txhawm rau ntxiv cov khoom rau lub roj teeb, koj xav tau:

  • Tsim ib qho array ntawm pob tawb ntawm cov hauv paus ntsiab lus new_roots thiab tso cov hauv paus ntsiab lus uas twb muaj lawm nyob rau ntawd, ib qho rau txhua lub thoob:

code

let mut new_roots = Vec::new();

for root in self.roots.iter() {
    let mut vec = Vec::<Hash>::new();
    if let Some(hash) = root {
        vec.push(*hash);
    }

    new_roots.push(vec);
}

  • Ntxiv cov ntsiab lus ntxiv (array insertions) mus rau thawj lub laub new_roots[0]:

Utreexo: compressing ntau UTXO Bitcoin

code

new_roots[0].extend_from_slice(insertions);

  • Coalesce cov khoom ntxiv rau thawj pob tawb nrog tus so:
    • Rau txhua lub laub uas muaj ntau tshaj ib yam khoom:
      1. Nqa ob lub ntsiab lus los ntawm qhov kawg ntawm lub pob tawb, xam lawv niam lawv txiv, tshem tawm ob lub ntsiab lus
      2. Ntxiv cov niam txiv suav nrog rau lub laub tom ntej

Utreexo: compressing ntau UTXO Bitcoin

code

for i in 0..new_roots.len() {
    while new_roots[i].len() > 1 {
        // ОбъСдиняСм Π΄Π²Π° элСмСнта Π² ΠΎΠ΄ΠΈΠ½ ΠΈ удаляСм ΠΈΡ…
        let a = new_roots[i][new_roots[i].len() - 2];
        let b = new_roots[i][new_roots[i].len() - 1];
        new_roots[i].pop();
        new_roots[i].pop();
        let hash = self.parent(&a, &b);

        // НаращиваСм количСство ΠΊΠΎΡ€Π·ΠΈΠ½ Ссли трСбуСтся
        if new_roots.len() <= i + 1 {
            new_roots.push(vec![]);
        }

        // ΠŸΠΎΠΌΠ΅Ρ‰Π°Π΅ΠΌ элСмСнт Π² ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΡƒΡŽ ΠΊΠΎΡ€Π·ΠΈΠ½Ρƒ
        new_roots[i + 1].push(hash);

        // НС Π·Π°Π±Ρ‹Π²Π°Π΅ΠΌ ΠΎΡ‚ΡΠ»Π΅ΠΆΠΈΠ²Π°Ρ‚ΡŒ измСнСния;
        // это пригодится для Π³Π΅Π½Π΅Ρ€Π°Ρ†ΠΈΠΈ Π΄ΠΎΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒΡΡ‚Π²Π° добавлСния элСмСнтов
        updated.insert(a, ProofStep { hash: b, is_left: false });
        updated.insert(b, ProofStep {hash: a, is_left: true });
    }
}

  • Txav cov hauv paus ntsiab lus los ntawm bins mus rau qhov tshwm sim accumulator array

code

for (i, bucket) in new_roots.into_iter().enumerate() {
    // НаращиваСм аккумулятор Ссли трСбуСтся
    if self.roots.len() <= i {
        self.roots.push(None);
    }

    if bucket.is_empty() {
        self.roots[i] = None;
    } else {
        self.roots[i] = Some(bucket[0]);
    }
}

Tsim ib qho pov thawj rau cov ntsiab lus ntxiv

Pov thawj ntawm kev suav nrog ntawm tes hauv lub roj teeb (Proof) yuav ua haujlwm raws li Merkle Txoj Kev, muaj cov saw hlau ProofStep. Yog txoj kev coj mus rau qhov twg, qhov pov thawj tsis raug.

/// Π•Π΄ΠΈΠ½ΠΈΡ‡Π½Ρ‹ΠΉ шаг Π½Π° ΠΏΡƒΡ‚ΠΈ ΠΊ элСмСнту Π² Π΄Π΅Ρ€Π΅Π²Π΅ ΠœΠ΅Ρ€ΠΊΠ»Π°.
#[derive(Debug, Copy, Clone)]
pub struct ProofStep {
    pub hash: Hash,
    pub is_left: bool,
}

/// Π”ΠΎΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒΡΡ‚Π²ΠΎ Π²ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ элСмСнта. Π‘ΠΎΠ΄Π΅Ρ€ΠΆΠΈΡ‚ сам элСмСнт ΠΈ ΠΏΡƒΡ‚ΡŒ ΠΊ Π½Π΅ΠΌΡƒ.
#[derive(Debug, Clone)]
pub struct Proof {
    pub steps: Vec<ProofStep>,
    pub leaf: Hash,
}

Siv cov ntaub ntawv tau txais ua ntej thaum ntxiv cov khoom (cov qauv Update), koj tuaj yeem tsim cov ntaub ntawv pov thawj tias cov khoom tau ntxiv rau lub roj teeb. Txhawm rau ua qhov no, peb mus dhau lub rooj hloov pauv thiab ntxiv txhua kauj ruam mus rau Merkle txoj kev, uas tom qab ntawd yuav ua pov thawj:

code

impl<'a> Update<'a> {
    pub fn prove(&self, leaf: &Hash) -> Proof {
        let mut proof = Proof {
            steps: vec![],
            leaf: *leaf,
        };

        let mut item = *leaf;
        while let Some(s) = self.updated.get(&item) {
            proof.steps.push(*s);
            item = parent(&item, &s);
        }

        proof
    }
}

Cov txheej txheem ntawm kev tsim cov ntawv pov thawj

Utreexo: compressing ntau UTXO Bitcoin

Tshawb xyuas cov ntawv pov thawj rau ib qho

Kev tshuaj xyuas cov khoom pov thawj suav nrog ua rau ua raws li Merkle txoj kev mus txog thaum nws ua rau lub hauv paus tseem ceeb:

pub fn verify(&self, proof: &Proof) -> bool {
    let n = proof.steps.len();
    if n >= self.roots.len() {
        return false;
    }

    let expected = self.roots[n];
    if let Some(expected) = expected {
        let mut current_parent = proof.leaf;
        for s in proof.steps.iter() {
            current_parent = if s.is_left {
                parent(&s.hash, &current_parent)
            } else {
                parent(&current_parent, &s.hash)
            };
        }

        current_parent == expected
    } else {
        false
    }
}

Pom pom:

Txheej txheem ntawm kev tshuaj xyuas cov pov thawj rau A

Utreexo: compressing ntau UTXO Bitcoin

Tshem tawm cov khoom

Txhawm rau tshem tawm lub xov tooj ntawm tes los ntawm lub roj teeb, koj yuav tsum muab pov thawj tseeb tias lub xov tooj ntawm tes nyob ntawd. Siv cov ntaub ntawv los ntawm cov ntaub ntawv pov thawj, nws muaj peev xwm xam cov hauv paus ntsiab lus tshiab ntawm lub accumulator uas cov ntaub ntawv pov thawj yuav tsis muaj tseeb.

Lub algorithm yog raws li nram no:

  1. Raws li nrog ntxiv, peb npaj ib txheej ntawm cov pob tawb npliag coj mus rau Merkle ntoo nrog qhov siab sib npaug ntawm lub zog ntawm ob los ntawm lub pob tawb.
  2. Peb ntxig cov ntsiab lus los ntawm cov kauj ruam ntawm Merkle txoj kev mus rau hauv pob tawb; lub pob tawb Performance index yog sib npaug rau tus naj npawb ntawm cov kauj ruam tam sim no
  3. Peb tshem tawm cov hauv paus ntsiab lus uas txoj kev los ntawm cov pov thawj coj
  4. Raws li nrog ntxiv, peb xam cov hauv paus ntsiab lus tshiab los ntawm kev sib txuas cov khoom los ntawm cov pob tawb hauv cov khub thiab txav cov txiaj ntsig ntawm lub koom haum mus rau lub pob tawb tom ntej.

code

fn delete(&self, proof: &Proof, new_roots: &mut Vec<Vec<Hash>>) -> Result<(), ()> {
    if self.roots.len() < proof.steps.len() || self.roots.get(proof.steps.len()).is_none() {
        return Err(());
    }

    let mut height = 0;
    let mut hash = proof.leaf;
    let mut s;

    loop {
        if height < new_roots.len() {
            let (index, ok) = self.find_root(&hash, &new_roots[height]);
            if ok {
                // Remove hash from new_roots
                new_roots[height].remove(index);

                loop {
                    if height >= proof.steps.len() {
                        if !self.roots[height]
                            .and_then(|h| Some(h == hash))
                            .unwrap_or(false)
                        {
                            return Err(());
                        }

                        return Ok(());
                    }

                    s = proof.steps[height];
                    hash = self.parent(&hash, &s);
                    height += 1;
                }
            }
        }

        if height >= proof.steps.len() {
            return Err(());
        }

        while height > new_roots.len() {
            new_roots.push(vec![]);
        }

        s = proof.steps[height];
        new_roots[height].push(s.hash);
        hash = self.parent(&hash, &s);
        height += 1;
    }
}

Cov txheej txheem tshem tawm "A":
Utreexo: compressing ntau UTXO Bitcoin

Kev koom ua ke rau hauv ib lub network uas twb muaj lawm

Siv cov ntawv thov accumulator, cov nodes tuaj yeem zam kev siv DB los khaws tag nrho UTXOs thaum tseem tuaj yeem hloov UTXO-set. Txawm li cas los xij, qhov teeb meem ntawm kev ua haujlwm nrog cov pov thawj tshwm sim.

Wb hu rau validator node uas siv UTXO accumulator compact (compact-state node), thiab validator tsis muaj accumulator yog ua kom tiav (tag nrho node). Qhov muaj nyob ntawm ob chav kawm ntawm cov nodes tsim teeb meem rau kev sib koom ua ke rau hauv ib lub network, vim cov nodes compact xav tau cov ntaub ntawv pov thawj ntawm UTXOs, uas tau siv rau hauv kev lag luam, thaum tag nrho cov nodes tsis ua. Yog tias txhua lub network nodes tsis nyob ib txhij thiab hauv kev sib koom ua ke hloov mus rau kev siv Utreexo, cov nodes compact yuav raug tso tseg thiab yuav tsis muaj peev xwm ua haujlwm ntawm Bitcoin network.

Txhawm rau daws qhov teeb meem ntawm kev sib koom ua ke ntawm cov nodes hauv lub network, nws tau thov kom qhia txog cov chav kawm ntxiv ntawm cov nodes - txuas hniav. Tus choj node yog qhov ua tiav ntawm qhov tseem khaws cov roj teeb Utreexo thiab cov pov thawj hluav taws xob rau ntawm txhua tus UTXO los ntawm UTXO-set. Cov choj suav cov hashes tshiab thiab hloov kho cov accumulator thiab cov ntaub ntawv pov thawj thaum cov blocks tshiab tuaj txog. Kev tuav tswj thiab hloov kho lub accumulator thiab cov ntaub ntawv pov thawj tsis txwv cov kev suav ntxiv ntawm cov nodes. Cov choj txi qhov chaw disk: yuav tsum khaws cov khoom sib dhos Utreexo: compressing ntau UTXO Bitcoin hashes, piv rau Utreexo: compressing ntau UTXO Bitcoin hashes rau compact nodes, qhov twg n yog lub hwj chim ntawm UTXO teeb.

Network architecture

Utreexo: compressing ntau UTXO Bitcoin

Cov txuas txuas ua rau nws tuaj yeem maj mam ntxiv cov nodes rau hauv lub network yam tsis tau hloov cov software ntawm cov nodes uas twb muaj lawm. Tag nrho cov nodes ua haujlwm zoo li ua ntej, faib kev lag luam thiab thaiv ntawm lawv tus kheej. Choj nodes yog tag nrho cov nodes uas ntxiv rau khaws Utreexo roj teeb cov ntaub ntawv thiab ib txheej ntawm cov ntaub ntawv pov thawj rau ntawm txhua tus UTXO rau tam sim no. Tus choj node tsis tshaj tawm nws tus kheej li ntawd, ua piv txwv ua ib qho ntawm tag nrho cov nodes tag nrho thiab ib qho kev cog lus rau tag nrho cov compact. Txawm hais tias txuas txuas txuas ob lub network ua ke, lawv tsuas yog xav tau txuas rau hauv ib qho kev taw qhia: los ntawm tag nrho cov nodes mus rau cov nodes. Qhov no yog qhov ua tau vim tias hom kev hloov pauv tsis tas yuav hloov pauv, thiab UTXO cov ntaub ntawv pov thawj rau cov pob txha loj tuaj yeem muab pov tseg, yog li txhua qhov kev sib cog lus tuaj yeem sib txuas lus sib txuas rau txhua tus neeg koom tes hauv network yam tsis muaj kev koom tes ntawm cov choj nodes.

xaus

Peb saib Utreexo roj teeb thiab siv nws cov qauv hauv Rust. Peb saib ntawm lub network architecture uas yuav tso cai rau kev sib koom ua ke ntawm cov roj teeb raws li cov nodes. Qhov kom zoo dua ntawm compact catches yog qhov loj ntawm cov ntaub ntawv khaws cia, uas nyob ntawm logarithmically ntawm lub zog ntawm cov txheej txheem UTXOs, uas zoo heev txo cov kev xav tau ntawm qhov chaw disk thiab kev ua haujlwm cia rau cov nodes. Qhov tsis zoo yog qhov kev sib txuas ntxiv rau kev xa cov ntaub ntawv pov thawj, tab sis cov ntaub ntawv pov thawj sib sau ua ke (thaum ib qho pov thawj ua pov thawj muaj ntau lub ntsiab lus) thiab caching tuaj yeem pab ua kom cov tsheb khiav tsis pub dhau qhov kev txwv.

ua tim khawv:

Tau qhov twg los: www.hab.com

Ntxiv ib saib