Mu maukonde a Bitcoin, ma node onse, kudzera mu mgwirizano, amavomereza pa gulu la UTXOs: ndi ndalama zingati zomwe zilipo kuti mugwiritse ntchito, kwa ndani kwenikweni, komanso pansi pa zikhalidwe ziti. Seti ya UTXO ndi chiwerengero chochepa cha deta chomwe chimafunika kuti chikhale chovomerezeka cha node, popanda zomwe nodeyo siidzatha kutsimikizira kutsimikizika kwa zochitika zomwe zikubwera ndi midadada yomwe ili nawo.
Pachifukwa ichi, kuyesayesa kukuchitika m'njira iliyonse kuti muchepetse chiwonetsero chosungidwa cha seti iyi, kuti muyipondereze popanda kutaya zitsimikizo zachitetezo. Zing'onozing'ono voliyumu ya deta yosungidwa, kuchepetsa zofunikira za disk space za validator node, zomwe zimapangitsa kukhazikitsa node yovomerezeka yotsika mtengo, kumakupatsani mwayi wowonjezera maukonde ndikuwonjezera kukhazikika kwa intaneti.
Imodzi mwamavuto osatha a Bitcoin wakhala scalability. Lingaliro la "banki yanu" limafuna kuti otenga nawo mbali pamaneti azisunga zolemba zandalama zonse zomwe zilipo kuti zigwiritsidwe ntchito. Mu Bitcoin, ndalama zomwe zilipo zimawonetsedwa ngati zotuluka zosagwiritsidwa ntchito - UTXO-set. Ngakhale kuti ichi sichiri choyimira mwachidziwitso, ndi chopindulitsa pakuchita ntchito pa chithunzi chomwe "chikwama" chilichonse chimakhala ndi "balance" monga cholowera chosiyana, komanso chimawonjezera zinsinsi (mwachitsanzo. Ndalama Coin).
Ndikofunika kusiyanitsa pakati pa mbiri ya zochitika (zomwe zimatchedwa blockchain) ndi zomwe zikuchitika panopa. Mbiri ya Bitcoin transaction pakadali pano imatenga pafupifupi 200 GB ya disk space, ndipo ikupitiliza kukula. Komabe, dongosolo la dongosolo ndi laling'ono kwambiri, pa dongosolo la 4 GB, ndipo zimangoganizira kuti wina ali ndi ndalama. Kuchuluka kwa detayi kumawonjezekanso pakapita nthawi, koma pang'onopang'ono ndipo nthawi zina kumachepetsanso (onani CDPV).
Makasitomala opepuka (SPVs) amatsimikizira chitetezo cha malonda kuti athe kusunga malo osachepera (UTXO-set) kupatula makiyi achinsinsi.
UTXO ndi UTXO-set
UTXO (Unspent Transaction Output) ndiye chotulukapo chosagwiritsidwa ntchito, mapeto a ulendo wa Satoshi aliyense amasamutsidwa muzochita. Zotuluka zosagwiritsidwa ntchito zimakhala zolowetsa zamalonda atsopano ndipo zimathera (ndalama) ndikuchotsedwa ku UTXO-set.
Ma UTXO atsopano nthawi zonse amapangidwa ndi zochitika:
Pali njira zochepetsera zofunikira pazomwe zasungidwa pa seti, ndikusunga kuthekera kowonjezera ndi kuchotsa zinthu, fufuzani ndikutsimikizira kukhalapo kwa chinthu mu seti yogwiritsira ntchito. ma cryptographic accumulators.
Mabatire a UTXO
Lingaliro logwiritsa ntchito mabatire kusunga ma UTXO angapo zinakambidwakale.
UTXO-set imamangidwa pa ntchentche, panthawi yotsitsa chipika choyamba (IBD), yosungidwa mokwanira komanso kosatha, pamene zomwe zili mkati mwake zimasintha pambuyo pokonza zochitika kuchokera ku chipika chilichonse chatsopano ndi cholondola cha intaneti. Izi zimafuna kutsitsa pafupifupi 200 GB ya data block ndikutsimikizira masaginecha mamiliyoni mazana ambiri. Pambuyo pa ndondomeko ya IBD, mfundo yaikulu ndi yakuti UTXO-set idzatenga pafupifupi 4 GB.
Komabe, ndi accumulators, malamulo a mgwirizano wa ndalama amachepetsedwa kuti atsimikizidwe ndi kubadwa kwa umboni wa cryptographic, ndipo mtolo wa kufufuza ndalama zomwe zilipo zimasinthidwa kwa mwiniwake wa ndalamazo, yemwe amapereka umboni wa kukhalapo kwawo ndi umwini.
An accumulator akhoza kutchedwa compact chifaniziro cha seti. Kukula kwa choyimira chosungidwa kuyenera kukhala kosasintha , kapena kuonjezera sublinearly polemekeza makadi a seti ndi kukula kwa chinthu chokha, mwachitsanzo , pomwe n ndi kardinali wa seti yosungidwa.
Pachifukwa ichi, accumulator ayenera kulola kuti apereke umboni wa kuphatikizidwa kwa chinthu mu seti (umboni wophatikizika) ndikupangitsa kuti zitheke kutsimikizira umboniwu.
Chitsanzo cha batire yotereyi chingakhale RSA accumulator yoperekedwa ndi Boneh, Bunz, Fisch mu Disembala 2018. Zodzikongoletsera zotere zimakhala ndi kukula kosalekeza kwa chiwonetsero chosungidwa, koma chimafuna kukhalapo chinsinsi chogawana (kukhazikika kodalirika). Chofunikira ichi chimatsutsana ndi kugwiritsidwa ntchito kwa accumulator yotereyi kwa maukonde osadalirika monga Bitcoin, popeza kutayikira kwa data panthawi yachinsinsi kumatha kulola otsutsa kuti apange umboni wonyenga wa kukhalapo kwa UTXO, node zonyenga ndi UTXO-set zochokera ku accumulator yotere.
Utreexo
Kapangidwe ka Utreexo kopangidwa ndi Thaddeus Dryja kumapangitsa kuti apange zazikulu Π°ΠΊΠΊΡΠΌΡΠ»ΡΡΠΎΡ popanda kudalira-kukhazikitsa.
Maselo a batri amakonzedwa m'nkhalango ya mitengo yabwino ya binary. Mitengo imayendetsedwa ndi kutalika. Choyimira ichi chinasankhidwa kukhala chowoneka bwino kwambiri ndipo chimakulolani kuti muwonetsere kugwirizanitsa kwa mitengo panthawi ya ntchito pa batri.
Popeza tikugwiritsa ntchito mitengo ya Merkle, kholo la node iliyonse ndi mfundo imodzi yomwe imasunga hashi ya kuphatikizika kwa ma hashes a nodi za ana:
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[..])
}
Wolembayo akunena kuti kupewa kuukira komwe Charles Bouillaguet, Pierre-Alain Fouque, Adi Shamir, ndi Sebastien Zimmer mu Kuwukira kwachiwiri kwazithunzi pazochita za dithered hashi, kuwonjezera pa ma hashes awiri, kutalika mkati mwa mtengo kuyeneranso kuwonjezeredwa ku concatenation.
Mukamawonjezera zinthu ku accumulator, muyenera kuyang'anira zomwe mizu imasinthidwa. Potsatira njira yosinthira mizu ya chinthu chilichonse chomwe mumawonjezera, mutha kupanga umboni wa kukhalapo kwa zinthu izi.
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);
}
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 });
}
}
Chotsani mizu kuchokera ku nkhokwe kupita ku gulu la accumulator
kachidindo
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]);
}
}
Kupanga umboni wa zinthu zowonjezera
Umboni wakuphatikizidwa kwa cell mu batri (Proof) idzakhala ngati Njira ya Merkle, yokhala ndi unyolo ProofStep. Ngati njirayo sikupita kulikonse, ndiye kuti umboniwo ndi wolakwika.
Kuyang'ana umboni wophatikizika wa chinthu kumagwera mpaka kutsatira njira ya Merkle mpaka kukafika ku mizu yomwe ilipo:
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, ¤t_parent)
} else {
parent(¤t_parent, &s.hash)
};
}
current_parent == expected
} else {
false
}
}
Zowoneka:
Njira yowonera umboni wa A
Kuchotsa zinthu
Kuti muchotse selo mu batire, muyenera kupereka umboni womveka kuti seloyo ilipo. Pogwiritsa ntchito deta kuchokera ku umboni, ndizotheka kuwerengera mizu yatsopano ya accumulator yomwe umboni woperekedwawo sudzakhalanso woona.
Ma algorithm ndi awa:
Monganso, timapanga madengu opanda kanthu ofanana ndi mitengo ya Merkle yokhala ndi kutalika kofanana ndi mphamvu ziwiri kuchokera pamndandanda wadengu.
Timayika zinthu kuchokera pamasitepe a Merkle njira mu madengu; mndandanda wadengu ndi wofanana ndi chiwerengero cha sitepe yamakono
Timachotsa muzu womwe njira yochokera ku umboni imatsogolera
Monga ndikuwonjezera, timawerengera mizu yatsopano pophatikiza zinthu kuchokera ku madengu awiriawiri ndikusuntha zotsatira za mgwirizano kupita ku dengu lotsatira.
kachidindo
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;
}
}
Njira yochotsera chinthu "A":
Kuphatikiza mu netiweki yomwe ilipo
Pogwiritsa ntchito accumulator yomwe mukufuna, ma node amatha kupewa kugwiritsa ntchito DB kusunga ma UTXO onse ndikutha kusintha UTXO-set. Komabe, vuto logwira ntchito ndi umboni limakhalapo.
Tiyeni tiyimbe node yovomerezeka yomwe imagwiritsa ntchito cholumikizira cha UTXO compact (compact-state node), ndi validator popanda accumulator ndi wathunthu (node ββyonse). Kukhalapo kwa magulu awiri a node kumabweretsa vuto lowaphatikiza mu intaneti imodzi, popeza ma compact node amafunikira umboni wa kukhalapo kwa UTXOs, zomwe zimagwiritsidwa ntchito pochita malonda, pamene node zonse sizitero. Ngati mfundo zonse maukonde musati imodzi ndi mogwirizana kusintha kusintha kwa ntchito Utreexo, ndiye mfundo yaying'ono adzasiyidwa ndipo sangathe ntchito pa maukonde Bitcoin.
Kuti athetse vuto la kuphatikiza ma compact node mu netiweki, akufunsidwa kuti akhazikitse gulu lina la node - milatho. Node ya mlatho ndi node yathunthu yomwe imasunganso batire ya Utreexo ndi umboni wamagetsi Π²ΡΠ΅Ρ UTXO kuchokera ku UTXO-set. Bridges amawerengera ma hashes atsopano ndikusintha cholimbikitsira ndi maumboni pomwe midadada yatsopano yosinthira ikufika. Kusunga ndi kukonzanso cholimbikitsira ndi maumboni sizimawonjezera katundu wowonjezera pama node otere. Milatho imapereka malo a disk: amafunika kusunga zinthu mwadongosolo hashes, poyerekeza ndi ma hashes a ma compact node, pomwe n ndi mphamvu ya seti ya UTXO.
Network zomangamanga
Milatho imapangitsa kuti pang'onopang'ono kuwonjezera ma compact node pa intaneti popanda kusintha mapulogalamu a node omwe alipo. Ma node athunthu amagwira ntchito monga kale, akugawa zotuluka ndi midadada pakati pawo. Ma node a Bridge ndi ma node athunthu omwe amasunganso deta ya batri ya Utreexo ndi maumboni angapo ophatikizira Π²ΡΠ΅Ρ UTXO pakali pano. Node ya mlatho simadzilengeza yokha motere, imadziyesa ngati node yathunthu yamagulu onse athunthu ndi mfundo yophatikizika kwa onse ophatikizika. Ngakhale milatho imalumikiza maukonde onse awiri palimodzi, amangofunika kuwalumikiza mbali imodzi: kuchokera ku mfundo zonse zomwe zilipo mpaka zolumikizana. Izi ndizotheka chifukwa mawonekedwe amalonda safunikira kusinthidwa, ndipo maumboni a UTXO a ma compact node amatha kutayidwa, kotero kuti node iliyonse yolumikizana imatha kuwulutsanso zochitika kwa onse omwe akuchita nawo maukonde popanda kutenga nawo gawo pama node a mlatho.
Pomaliza
Tidayang'ana batire ya Utreexo ndikugwiritsa ntchito mawonekedwe ake ku Rust. Tidayang'ana mamangidwe a netiweki omwe angalole kuphatikiza ma node otengera batri. Ubwino wa nsomba zazing'ono ndi kukula kwa deta yosungidwa, yomwe imadalira logarithmically pa mphamvu ya seti ya UTXOs, yomwe imachepetsa kwambiri zofunikira za disk space ndi ntchito yosungiramo ma node oterowo. Choyipa chake ndi kuchuluka kwa njira zotumizira maumboni, koma njira zophatikizira umboni (pamene umboni umodzi utsimikizira kukhalapo kwa zinthu zingapo) ndi kusungirako kungathandize kuti magalimoto azikhala m'malire ovomerezeka.