Utreexo: ΠΊΠΎΠΌΠΏΡ€Π΅ΡΠΈΡ€Π°ΡšΠ΅ Π½Π° ΠΌΠ½ΠΎΠ³Ρƒ UTXO Bitcoin

Utreexo: ΠΊΠΎΠΌΠΏΡ€Π΅ΡΠΈΡ€Π°ΡšΠ΅ Π½Π° ΠΌΠ½ΠΎΠ³Ρƒ UTXO Bitcoin

Π•Ρ˜ Π₯Π°Π±Ρ€!

Π’ΠΎ ΠΌΡ€Π΅ΠΆΠ°Ρ‚Π° Π½Π° Bitcoin, ситС јазли, ΠΏΡ€Π΅ΠΊΡƒ консСнзус, сС согласуваат Π·Π° Π·Π±ΠΈΡ€ Π½Π° UTXOs: ΠΊΠΎΠ»ΠΊΡƒ ΠΌΠΎΠ½Π΅Ρ‚ΠΈ сС достапни Π·Π° Ρ‚Ρ€ΠΎΡˆΠ΅ΡšΠ΅, Π½Π° ΠΊΠΎΠ³ΠΎ Ρ‚ΠΎΡ‡Π½ΠΎ ΠΈ ΠΏΠΎΠ΄ ΠΊΠΎΠΈ услови. Π‘Π΅Ρ‚ΠΎΡ‚ UTXO Π΅ ΠΌΠΈΠ½ΠΈΠΌΠ°Π»Π½ΠΈΠΎΡ‚ сСт Π½Π° ΠΏΠΎΠ΄Π°Ρ‚ΠΎΡ†ΠΈ ΠΏΠΎΡ‚Ρ€Π΅Π±Π½ΠΈ Π·Π° јазол Π·Π° Π²Π°Π»ΠΈΠ΄Π°Ρ‚ΠΎΡ€, Π±Π΅Π· кој Ρ˜Π°Π·ΠΎΠ»ΠΎΡ‚ Π½Π΅ΠΌΠ° Π΄Π° ΠΌΠΎΠΆΠ΅ Π΄Π° ја ΠΏΠΎΡ‚Π²Ρ€Π΄ΠΈ валидноста Π½Π° Π΄ΠΎΡ˜Π΄ΠΎΠ²Π½ΠΈΡ‚Π΅ трансакции ΠΈ Π±Π»ΠΎΠΊΠΎΠ²ΠΈΡ‚Π΅ ΡˆΡ‚ΠΎ Π³ΠΈ содрТат.

Π’ΠΎ овој ΠΏΠΎΠ³Π»Π΅Π΄, сС ΠΏΡ€Π°Π²Π°Ρ‚ ΠΎΠ±ΠΈΠ΄ΠΈ Π½Π° сСкој ΠΌΠΎΠΆΠ΅Π½ Π½Π°Ρ‡ΠΈΠ½ Π΄Π° сС Π½Π°ΠΌΠ°Π»ΠΈ Π·Π°Ρ‡ΡƒΠ²Π°Π½Π°Ρ‚Π° застапСност Π½Π° овој сСт, Π΄Π° сС компрСсира Π±Π΅Π· Π³ΡƒΠ±Π΅ΡšΠ΅ Π½Π° бСзбСдноснитС Π³Π°Ρ€Π°Π½Ρ†ΠΈΠΈ. ΠšΠΎΠ»ΠΊΡƒ Π΅ ΠΏΠΎΠΌΠ°Π» ΠΎΠ±Π΅ΠΌΠΎΡ‚ Π½Π° складирани ΠΏΠΎΠ΄Π°Ρ‚ΠΎΡ†ΠΈ, Ρ‚ΠΎΠ»ΠΊΡƒ сС ΠΏΠΎΠΌΠ°Π»ΠΈ Π±Π°Ρ€Π°ΡšΠ°Ρ‚Π° Π·Π° простор Π½Π° дискот Π½Π° Ρ˜Π°Π·ΠΎΠ»ΠΎΡ‚ Π·Π° Π²Π°Π»ΠΈΠ΄Π°Ρ†ΠΈΡ˜Π°, ΡˆΡ‚ΠΎ Π³ΠΎ ΠΏΡ€Π°Π²ΠΈ Π΅Π²Ρ‚ΠΈΠ½ΠΎ Π»Π°Π½ΡΠΈΡ€Π°ΡšΠ΅Ρ‚ΠΎ Π½Π° јазол Π·Π° Π²Π°Π»ΠΈΠ΄Π°Ρ†ΠΈΡ˜Π°, ΡˆΡ‚ΠΎ Π²ΠΈ ΠΎΠ²ΠΎΠ·ΠΌΠΎΠΆΡƒΠ²Π° Π΄Π° ја ΠΏΡ€ΠΎΡˆΠΈΡ€ΠΈΡ‚Π΅ ΠΌΡ€Π΅ΠΆΠ°Ρ‚Π° ΠΈ со Ρ‚ΠΎΠ° Π΄Π° ја Π·Π³ΠΎΠ»Π΅ΠΌΠΈΡ‚Π΅ стабилноста Π½Π° ΠΌΡ€Π΅ΠΆΠ°Ρ‚Π°.

Π’ΠΎ овој пост ќС објавимС ΠΏΡ€ΠΎΡ‚ΠΎΡ‚ΠΈΠΏ Π½Π° Rust Π½Π° Π½Π΅ΠΎΠ΄Π°ΠΌΠ½Π΅ΡˆΠ½ΠΈΠΎΡ‚ ΠΏΡ€Π΅Π΄Π»ΠΎΠ³ ΠΎΠ΄ ΠΊΠΎΠ°Π²Ρ‚ΠΎΡ€ Lightning Network Paper, ВадСус Π”Ρ€ΠΈΡ˜Π° - Utreexo: Π΄ΠΈΠ½Π°ΠΌΠΈΡ‡Π΅Π½ Π°ΠΊΡƒΠΌΡƒΠ»Π°Ρ‚ΠΎΡ€ Π±Π°Π·ΠΈΡ€Π°Π½ Π½Π° Ρ…Π°Ρˆ ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·ΠΈΡ€Π°Π½ Π·Π° сСтот Bitcoin UTXO, ΡˆΡ‚ΠΎ ΠΎΠ²ΠΎΠ·ΠΌΠΎΠΆΡƒΠ²Π° Π½Π°ΠΌΠ°Π»ΡƒΠ²Π°ΡšΠ΅ Π½Π° Π±Π°Ρ€Π°ΡšΠ°Ρ‚Π° Π·Π° простор Π½Π° дискот Π·Π° валидаторскитС јазли.

Π¨Ρ‚ΠΎ Π΅ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠΎΡ‚?

Π•Π΄Π΅Π½ ΠΎΠ΄ Ρ‚Ρ€Π°Ρ˜Π½ΠΈΡ‚Π΅ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠΈ Π½Π° Π‘ΠΈΡ‚ΠΊΠΎΠΈΠ½ Π΅ Π½Π΅Π³ΠΎΠ²Π°Ρ‚Π° приспособливост. Π˜Π΄Π΅Ρ˜Π°Ρ‚Π° Π·Π° β€žΠ²Π°ΡˆΠ° сопствСна Π±Π°Π½ΠΊΠ°β€œ Π±Π°Ρ€Π° ΠΎΠ΄ учСсницитС Π²ΠΎ ΠΌΡ€Π΅ΠΆΠ°Ρ‚Π° Π΄Π° Π²ΠΎΠ΄Π°Ρ‚ Π΅Π²ΠΈΠ΄Π΅Π½Ρ†ΠΈΡ˜Π° Π·Π° ситС срСдства достапни Π·Π° ΠΊΠΎΡ€ΠΈΡΡ‚Π΅ΡšΠ΅. Π’ΠΎ Bitcoin, располоТливитС срСдства сС ΠΈΠ·Ρ€Π°Π·ΡƒΠ²Π°Π°Ρ‚ ΠΊΠ°ΠΊΠΎ Π·Π±ΠΈΡ€ Π½Π° Π½Π΅ΠΏΠΎΡ‚Ρ€ΠΎΡˆΠ΅Π½ΠΈ Ρ€Π΅Π·ΡƒΠ»Ρ‚Π°Ρ‚ΠΈ - UTXO-сСт. Иако ΠΎΠ²Π° Π½Π΅ Π΅ особСно ΠΈΠ½Ρ‚ΡƒΠΈΡ‚ΠΈΠ²Π½ΠΎ ΠΏΡ€Π΅Ρ‚ΡΡ‚Π°Π²ΡƒΠ²Π°ΡšΠ΅, Ρ‚ΠΎΠ° Π΅ корисно Π²ΠΎ однос Π½Π° пСрформанситС Π½Π° ΠΈΠΌΠΏΠ»Π΅ΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΡ˜Π°Ρ‚Π° Π²ΠΎ однос Π½Π° прСтставата Π²ΠΎ која сСкој β€žΠΏΠ°Ρ€ΠΈΡ‡Π½ΠΈΠΊβ€œ ΠΈΠΌΠ° β€žΠ±Π°Π»Π°Π½Ρβ€œ ΠΊΠ°ΠΊΠΎ посСбСн запис, Π° исто Ρ‚Π°ΠΊΠ° Π΄ΠΎΠ΄Π°Π²Π° приватност (Π½Π° ΠΏΡ€. CoinΠŸΡ€ΠΈΠ΄Ρ€ΡƒΠΆΠΈ сС).

Π’Π°ΠΆΠ½ΠΎ Π΅ Π΄Π° сС Π½Π°ΠΏΡ€Π°Π²ΠΈ Ρ€Π°Π·Π»ΠΈΠΊΠ° ΠΏΠΎΠΌΠ΅Ρ“Ρƒ ΠΈΡΡ‚ΠΎΡ€ΠΈΡ˜Π°Ρ‚Π° Π½Π° трансакциитС (ΠΎΠ½Π° ΡˆΡ‚ΠΎ сС Π½Π°Ρ€Π΅ΠΊΡƒΠ²Π° Π±Π»ΠΎΠΊΡ‡Π΅Ρ˜Π½) ΠΈ ΠΌΠΎΠΌΠ΅Π½Ρ‚Π°Π»Π½Π°Ρ‚Π° ΡΠΎΡΡ‚ΠΎΡ˜Π±Π° Π½Π° систСмот. Π˜ΡΡ‚ΠΎΡ€ΠΈΡ˜Π°Ρ‚Π° Π½Π° трансакции Π½Π° Π±ΠΈΡ‚ΠΊΠΎΠΈΠ½ ΠΌΠΎΠΌΠ΅Π½Ρ‚Π°Π»Π½ΠΎ Π·Π°Ρ„Π°ΡœΠ° ΠΎΠΊΠΎΠ»Ρƒ 200 GB простор Π½Π° дискот ΠΈ ΠΏΡ€ΠΎΠ΄ΠΎΠ»ΠΆΡƒΠ²Π° Π΄Π° растС. Π‘Π΅ΠΏΠ°ΠΊ, ΡΠΎΡΡ‚ΠΎΡ˜Π±Π°Ρ‚Π° Π½Π° систСмот Π΅ ΠΌΠ½ΠΎΠ³Ρƒ ΠΏΠΎΠΌΠ°Π»Π°, ΠΎΠ΄ Ρ€Π΅Π΄ΠΎΡ‚ Π½Π° 4 GB, ΠΈ Π³ΠΎ Π·Π΅ΠΌΠ° ΠΏΡ€Π΅Π΄Π²ΠΈΠ΄ само Ρ„Π°ΠΊΡ‚ΠΎΡ‚ Π΄Π΅ΠΊΠ° нСкој ΠΌΠΎΠΌΠ΅Π½Ρ‚Π°Π»Π½ΠΎ посСдува ΠΌΠΎΠ½Π΅Ρ‚ΠΈ. ΠžΠ±Π΅ΠΌΠΎΡ‚ Π½Π° ΠΎΠ²ΠΈΠ΅ ΠΏΠΎΠ΄Π°Ρ‚ΠΎΡ†ΠΈ исто Ρ‚Π°ΠΊΠ° сС Π·Π³ΠΎΠ»Π΅ΠΌΡƒΠ²Π° со Ρ‚Π΅ΠΊΠΎΡ‚ Π½Π° Π²Ρ€Π΅ΠΌΠ΅Ρ‚ΠΎ, Π½ΠΎ со ΠΌΠ½ΠΎΠ³Ρƒ ΠΏΠΎΠ±Π°Π²Π½ΠΎ Ρ‚Π΅ΠΌΠΏΠΎ, Π° понСкогаш Π΄ΡƒΡ€ΠΈ ΠΈ ΠΈΠΌΠ° Ρ‚Π΅Π½Π΄Π΅Π½Ρ†ΠΈΡ˜Π° Π΄Π° сС Π½Π°ΠΌΠ°Π»ΡƒΠ²Π° (Π²ΠΈΠ΄ΠΈ CDPV).

ЛСснитС ΠΊΠ»ΠΈΠ΅Π½Ρ‚ΠΈ (SPV) Ρ‚Ρ€Π³ΡƒΠ²Π°Π°Ρ‚ со бСзбСдносни Π³Π°Ρ€Π°Π½Ρ†ΠΈΠΈ Π·Π° способноста Π΄Π° Π½Π΅ сС складира ΠΌΠΈΠ½ΠΈΠΌΠ°Π»Π½Π° ΡΠΎΡΡ‚ΠΎΡ˜Π±Π° (UTXO-сСт) освСн ΠΏΡ€ΠΈΠ²Π°Ρ‚Π½ΠΈ ΠΊΠ»ΡƒΡ‡Π΅Π²ΠΈ.

UTXO ΠΈ UTXO-сСт

UTXO (Unspent Transaction Output) Π΅ ΠΈΠ·Π»Π΅Π·ΠΎΡ‚ Π½Π° Π½Π΅ΠΏΠΎΡ‚Ρ€ΠΎΡˆΠ΅Π½Π°Ρ‚Π° Ρ‚Ρ€Π°Π½ΡΠ°ΠΊΡ†ΠΈΡ˜Π°, ΠΊΡ€Π°Ρ˜Π½Π°Ρ‚Π° Ρ‚ΠΎΡ‡ΠΊΠ° Π½Π° ΠΏΠ°Ρ‚ΡƒΠ²Π°ΡšΠ΅Ρ‚ΠΎ Π½Π° сСкој Π‘Π°Ρ‚ΠΎΡˆΠΈ прСнСсСн Π²ΠΎ трансакциитС. ΠΠ΅ΠΏΠΎΡ‚Ρ€ΠΎΡˆΠ΅Π½ΠΈΡ‚Π΅ ΠΈΠ·Π»Π΅Π·ΠΈ стануваат Π²Π»Π΅Π·ΠΎΠ²ΠΈ Π½Π° Π½ΠΎΠ²ΠΈ трансакции ΠΈ Π½Π° Ρ‚ΠΎΡ˜ Π½Π°Ρ‡ΠΈΠ½ сС Ρ‚Ρ€ΠΎΡˆΠ°Ρ‚ (Ρ‚Ρ€ΠΎΡˆΠ°Ρ‚) ΠΈ сС отстрануваат ΠΎΠ΄ UTXO-мноТСството.

НовитС UTXO сСкогаш сС создаваат со трансакции:

  • coinbase трансакции Π±Π΅Π· Π²Π»Π΅Π·ΠΎΠ²ΠΈ: ΠΊΡ€Π΅ΠΈΡ€Π°Ρ˜Ρ‚Π΅ Π½ΠΎΠ²ΠΈ UTXO ΠΊΠΎΠ³Π° Ρ€ΡƒΠ΄Π°Ρ€ΠΈΡ‚Π΅ ΠΈΠ·Π΄Π°Π²Π°Π°Ρ‚ ΠΌΠΎΠ½Π΅Ρ‚ΠΈ
  • Ρ€Π΅Π΄ΠΎΠ²Π½ΠΈ трансакции: ΠΊΡ€Π΅ΠΈΡ€Π°Ρ˜Ρ‚Π΅ Π½ΠΎΠ²ΠΈ UTXO Π΄ΠΎΠ΄Π΅ΠΊΠ° Ρ‚Ρ€ΠΎΡˆΠΈΡ‚Π΅ ΠΎΠ΄Ρ€Π΅Π΄Π΅Π½ сСт Π½Π° постоСчки UTXO

ΠŸΡ€ΠΎΡ†Π΅Ρ Π½Π° Ρ€Π°Π±ΠΎΡ‚Π° со UTXO:
Utreexo: ΠΊΠΎΠΌΠΏΡ€Π΅ΡΠΈΡ€Π°ΡšΠ΅ Π½Π° ΠΌΠ½ΠΎΠ³Ρƒ UTXO Bitcoin

ΠŸΠ°Ρ€ΠΈΡ‡Π½ΠΈΡ†ΠΈΡ‚Π΅ Π³ΠΎ Π±Ρ€ΠΎΡ˜Π°Ρ‚ Π±Ρ€ΠΎΡ˜ΠΎΡ‚ Π½Π° ΠΌΠΎΠ½Π΅Ρ‚ΠΈ достапни Π·Π° Ρ‚Ρ€ΠΎΡˆΠ΅ΡšΠ΅ (баланс) Π²Ρ€Π· основа Π½Π° износот Π½Π° UTXO ΡˆΡ‚ΠΎ Π΅ достапСн Π·Π° овој ΠΏΠ°Ρ€ΠΈΡ‡Π½ΠΈΠΊ Π·Π° Ρ‚Ρ€ΠΎΡˆΠ΅ΡšΠ΅.

БСкој валидаторски јазол, Π·Π° Π΄Π° спрСчи ΠΎΠ±ΠΈΠ΄ΠΈ Π·Π° двојно Ρ‚Ρ€ΠΎΡˆΠ΅ΡšΠ΅, ΠΌΠΎΡ€Π° Π΄Π° Π³ΠΎ Π½Π°Π΄Π³Π»Π΅Π΄ΡƒΠ²Π° мноТСството Π‘ΠΈΡ‚Π΅ UTXO ΠΏΡ€ΠΈ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° сСкој трансакции ΠΎΠ΄ сСкоја Π±Π»ΠΎΠΊ.

ΠˆΠ°Π·ΠΎΠ»ΠΎΡ‚ ΠΌΠΎΡ€Π° Π΄Π° ΠΈΠΌΠ° Π»ΠΎΠ³ΠΈΠΊΠ°:

  • Π”ΠΎΠΏΠΎΠ»Π½ΡƒΠ²Π°ΡšΠ° Π½Π° UTXO-сСт
  • Π‘Ρ€ΠΈΡˆΠ΅ΡšΠ΅ ΠΎΠ΄ UTXO-сСт
  • ΠŸΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° Π½Π° присуство Π½Π° Π΅Π΄Π΅Π½ UTXO Π²ΠΎ ΠΊΠΎΠΌΠΏΠ»Π΅Ρ‚

ΠŸΠΎΡΡ‚ΠΎΡ˜Π°Ρ‚ Π½Π°Ρ‡ΠΈΠ½ΠΈ Π΄Π° сС Π½Π°ΠΌΠ°Π»Π°Ρ‚ Π±Π°Ρ€Π°ΡšΠ°Ρ‚Π° Π·Π° складирани ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ Π·Π° мноТСство, ΠΏΡ€ΠΈΡ‚ΠΎΠ° Π·Π°Π΄Ρ€ΠΆΡƒΠ²Π°Ρ˜ΡœΠΈ ја способноста Π·Π° додавањС ΠΈ ΠΎΡ‚ΡΡ‚Ρ€Π°Π½ΡƒΠ²Π°ΡšΠ΅ Π΅Π»Π΅ΠΌΠ΅Π½Ρ‚ΠΈ, ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° ΠΈ Π΄ΠΎΠΊΠ°ΠΆΡƒΠ²Π°ΡšΠ΅ Π½Π° ΠΏΠΎΡΡ‚ΠΎΠ΅ΡšΠ΅Ρ‚ΠΎ Π½Π° Π΅Π»Π΅ΠΌΠ΅Π½Ρ‚ Π²ΠΎ мноТСство ΠΊΠΎΡ€ΠΈΡΡ‚Π΅Ρ˜ΡœΠΈ криптографски Π°ΠΊΡƒΠΌΡƒΠ»Π°Ρ‚ΠΎΡ€ΠΈ.

Π‘Π°Ρ‚Π΅Ρ€ΠΈΠΈ Π·Π° UTXO

Π˜Π΄Π΅Ρ˜Π°Ρ‚Π° Π·Π° ΠΊΠΎΡ€ΠΈΡΡ‚Π΅ΡšΠ΅ Π½Π° Π±Π°Ρ‚Π΅Ρ€ΠΈΠΈ Π·Π° ΡΠΊΠ»Π°Π΄ΠΈΡ€Π°ΡšΠ΅ Π½Π° повСќС UTXO сС Ρ€Π°Π·Π³ΠΎΠ²Π°Ρ€Π°ΡˆΠ΅ ΠΏΠΎΡ€Π°Π½ΠΎ.

UTXO-сСтот Π΅ ΠΈΠ·Π³Ρ€Π°Π΄Π΅Π½ Π²ΠΎ Π»Π΅Ρ‚, Π·Π° Π²Ρ€Π΅ΠΌΠ΅ Π½Π° ΠΏΠΎΡ‡Π΅Ρ‚Π½ΠΎΡ‚ΠΎ ΠΏΡ€Π΅Π·Π΅ΠΌΠ°ΡšΠ΅ Π±Π»ΠΎΠΊ (IBD), Π·Π°Ρ‡ΡƒΠ²Π°Π½ цСлосно ΠΈ Ρ‚Ρ€Π°Ρ˜Π½ΠΎ, Π΄ΠΎΠ΄Π΅ΠΊΠ° Π½Π΅Π³ΠΎΠ²Π°Ρ‚Π° содрТина сС ΠΌΠ΅Π½ΡƒΠ²Π° ΠΏΠΎ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ°Ρ‚Π° Π½Π° трансакциитС ΠΎΠ΄ сСкој Π½ΠΎΠ² ΠΈ ΠΏΡ€Π°Π²ΠΈΠ»Π΅Π½ Π±Π»ΠΎΠΊ Π½Π° ΠΌΡ€Π΅ΠΆΠ°Ρ‚Π°. Овој процСс Π±Π°Ρ€Π° ΠΏΡ€Π΅Π·Π΅ΠΌΠ°ΡšΠ΅ ΠΏΡ€ΠΈΠ±Π»ΠΈΠΆΠ½ΠΎ 200 GB Π±Π»ΠΎΠΊ ΠΏΠΎΠ΄Π°Ρ‚ΠΎΡ†ΠΈ ΠΈ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° Π½Π° стотици ΠΌΠΈΠ»ΠΈΠΎΠ½ΠΈ Π΄ΠΈΠ³ΠΈΡ‚Π°Π»Π½ΠΈ потписи. ΠžΡ‚ΠΊΠ°ΠΊΠΎ ќС Π·Π°Π²Ρ€ΡˆΠΈ процСсот Π½Π° IBD, Π²ΠΎ ΠΊΡ€Π°Ρ˜Π½Π° линија Π΅ Π΄Π΅ΠΊΠ° UTXO-сСтот ќС Π·Π°Ρ„Π°ΡœΠ° ΠΎΠΊΠΎΠ»Ρƒ 4 GB.

ΠœΠ΅Ρ“ΡƒΡ‚ΠΎΠ°, кај Π°ΠΊΡƒΠΌΡƒΠ»Π°Ρ‚ΠΎΡ€ΠΈΡ‚Π΅, ΠΏΡ€Π°Π²ΠΈΠ»Π°Ρ‚Π° Π·Π° консСнзус Π·Π° срСдствата сС свСдуваат Π½Π° Π²Π΅Ρ€ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΡ˜Π° ΠΈ Π³Π΅Π½Π΅Ρ€ΠΈΡ€Π°ΡšΠ΅ Π½Π° криптографски Π΄ΠΎΠΊΠ°Π·ΠΈ, Π° Ρ‚ΠΎΠ²Π°Ρ€ΠΎΡ‚ Π·Π° слСдСњС Π½Π° располоТливитС срСдства сС ΠΏΡ€Π΅Ρ„Ρ€Π»Π° Π½Π° сопствСникот Π½Π° Ρ‚ΠΈΠ΅ срСдства, кој ΠΎΠ±Π΅Π·Π±Π΅Π΄ΡƒΠ²Π° Π΄ΠΎΠΊΠ°Π· Π·Π° Π½ΠΈΠ²Π½ΠΎΡ‚ΠΎ ΠΏΠΎΡΡ‚ΠΎΠ΅ΡšΠ΅ ΠΈ сопствСност.

Акумулаторот ΠΌΠΎΠΆΠ΅ Π΄Π° сС Π½Π°Ρ€Π΅Ρ‡Π΅ ΠΊΠΎΠΌΠΏΠ°ΠΊΡ‚Π½Π° прСтстава Π½Π° мноТСство. Π“ΠΎΠ»Π΅ΠΌΠΈΠ½Π°Ρ‚Π° Π½Π° Π·Π°Ρ‡ΡƒΠ²Π°Π½Π°Ρ‚Π° прСтстава ΠΌΠΎΡ€Π° Π΄Π° Π±ΠΈΠ΄Π΅ ΠΈΠ»ΠΈ константна Utreexo: ΠΊΠΎΠΌΠΏΡ€Π΅ΡΠΈΡ€Π°ΡšΠ΅ Π½Π° ΠΌΠ½ΠΎΠ³Ρƒ UTXO Bitcoin, ΠΈΠ»ΠΈ ΠΏΠΎΠ΄Π»ΠΈΠ½Π΅Π°Ρ€Π½ΠΎ сС Π·Π³ΠΎΠ»Π΅ΠΌΡƒΠ²Π° Π²ΠΎ однос Π½Π° кардиналноста Π½Π° мноТСството ΠΈ Π³ΠΎΠ»Π΅ΠΌΠΈΠ½Π°Ρ‚Π° Π½Π° самиот Π΅Π»Π΅ΠΌΠ΅Π½Ρ‚, Π½Π° ΠΏΡ€ΠΈΠΌΠ΅Ρ€ Utreexo: ΠΊΠΎΠΌΠΏΡ€Π΅ΡΠΈΡ€Π°ΡšΠ΅ Π½Π° ΠΌΠ½ΠΎΠ³Ρƒ UTXO Bitcoin, ΠΊΠ°Π΄Π΅ ΡˆΡ‚ΠΎ n Π΅ кардиналноста Π½Π° Π·Π°Ρ‡ΡƒΠ²Π°Π½ΠΎΡ‚ΠΎ мноТСство.

Π’ΠΎ овој ΡΠ»ΡƒΡ‡Π°Ρ˜, Π°ΠΊΡƒΠΌΡƒΠ»Π°Ρ‚ΠΎΡ€ΠΎΡ‚ Ρ‚Ρ€Π΅Π±Π° Π΄Π° ΠΎΠ²ΠΎΠ·ΠΌΠΎΠΆΠΈ Π³Π΅Π½Π΅Ρ€ΠΈΡ€Π°ΡšΠ΅ Π½Π° Π΄ΠΎΠΊΠ°Π· Π·Π° Π²ΠΊΠ»ΡƒΡ‡ΡƒΠ²Π°ΡšΠ΅ Π½Π° Π΅Π»Π΅ΠΌΠ΅Π½Ρ‚ Π²ΠΎ ΠΊΠΎΠΌΠΏΠ»Π΅Ρ‚ΠΎΡ‚ (Π΄ΠΎΠΊΠ°Π· Π·Π° Π²ΠΊΠ»ΡƒΡ‡ΡƒΠ²Π°ΡšΠ΅) ΠΈ Π΄Π° ΠΎΠ²ΠΎΠ·ΠΌΠΎΠΆΠΈ Сфикасно Π΄Π° сС ΠΏΠΎΡ‚Π²Ρ€Π΄ΠΈ овој Π΄ΠΎΠΊΠ°Π·.

Π‘Π°Ρ‚Π΅Ρ€ΠΈΡ˜Π°Ρ‚Π° сС Π²ΠΈΠΊΠ° Π΄ΠΈΠ½Π°ΠΌΠΈΡ‡Π΅Π½ Π°ΠΊΠΎ Π²ΠΈ Π΄ΠΎΠ·Π²ΠΎΠ»ΡƒΠ²Π° Π΄Π° Π΄ΠΎΠ΄Π°Π΄Π΅Ρ‚Π΅ Π΅Π»Π΅ΠΌΠ΅Π½Ρ‚ΠΈ ΠΈ Π΄Π° отстранитС Π΅Π»Π΅ΠΌΠ΅Π½Ρ‚ΠΈ ΠΎΠ΄ мноТСство.

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ Π·Π° Ρ‚Π°ΠΊΠ²Π° Π±Π°Ρ‚Π΅Ρ€ΠΈΡ˜Π° Π±ΠΈ Π±ΠΈΠ» Акумулатор RSA ΠΏΡ€Π΅Π΄Π»ΠΎΠΆΠ΅Π½ ΠΎΠ΄ Boneh, Bunz, Fisch Π²ΠΎ Π΄Π΅ΠΊΠ΅ΠΌΠ²Ρ€ΠΈ 2018 Π³ΠΎΠ΄ΠΈΠ½Π°. Π’Π°ΠΊΠ²ΠΈΠΎΡ‚ Π°ΠΊΡƒΠΌΡƒΠ»Π°Ρ‚ΠΎΡ€ ΠΈΠΌΠ° ΠΏΠΎΡΡ‚ΠΎΡ˜Π°Π½Π° Π³ΠΎΠ»Π΅ΠΌΠΈΠ½Π° Π½Π° складирана Ρ€Π΅ΠΏΡ€Π΅Π·Π΅Π½Ρ‚Π°Ρ†ΠΈΡ˜Π°, Π½ΠΎ Π±Π°Ρ€Π° присуство сподСлСна Ρ‚Π°Ρ˜Π½Π° (Π΄ΠΎΠ²Π΅Ρ€Π»ΠΈΠ²ΠΎ ΠΏΠΎΡΡ‚Π°Π²ΡƒΠ²Π°ΡšΠ΅). Ова Π±Π°Ρ€Π°ΡšΠ΅ ја Π½Π΅Π³ΠΈΡ€Π° примСнливоста Π½Π° Ρ‚Π°ΠΊΠΎΠ² Π°ΠΊΡƒΠΌΡƒΠ»Π°Ρ‚ΠΎΡ€ Π·Π° ΠΌΡ€Π΅ΠΆΠΈ Π±Π΅Π· Π΄ΠΎΠ²Π΅Ρ€Π±Π° ΠΊΠ°ΠΊΠΎ Bitcoin, бидСјќи ΠΈΡΡ‚Π΅ΠΊΡƒΠ²Π°ΡšΠ΅Ρ‚ΠΎ Π½Π° ΠΏΠΎΠ΄Π°Ρ‚ΠΎΡ†ΠΈ Π·Π° Π²Ρ€Π΅ΠΌΠ΅ Π½Π° Ρ‚Π°Ρ˜Π½ΠΎΡ‚ΠΎ Π³Π΅Π½Π΅Ρ€ΠΈΡ€Π°ΡšΠ΅ ΠΌΠΎΠΆΠ΅ Π΄Π° ΠΈΠΌ ΠΎΠ²ΠΎΠ·ΠΌΠΎΠΆΠΈ Π½Π° Π½Π°ΠΏΠ°Ρ“Π°Ρ‡ΠΈΡ‚Π΅ Π΄Π° создадат Π»Π°ΠΆΠ΅Π½ Π΄ΠΎΠΊΠ°Π· Π·Π° ΠΏΠΎΡΡ‚ΠΎΠ΅ΡšΠ΅Ρ‚ΠΎ Π½Π° UTXO, ΠΈΠ·ΠΌΠ°ΠΌΡƒΠ²Π°Ρ˜ΡœΠΈ Π³ΠΈ Ρ˜Π°Π·Π»ΠΈΡ‚Π΅ со UTXO-сСт Π±Π°Π·ΠΈΡ€Π°Π½ Π½Π° Ρ‚Π°ΠΊΠΎΠ² Π°ΠΊΡƒΠΌΡƒΠ»Π°Ρ‚ΠΎΡ€.

УтрССксо

Π”ΠΈΠ·Π°Ρ˜Π½ΠΎΡ‚ Utreexo ΠΏΡ€Π΅Π΄Π»ΠΎΠΆΠ΅Π½ ΠΎΠ΄ Thaddeus Dryja ΠΎΠ²ΠΎΠ·ΠΌΠΎΠΆΡƒΠ²Π° создавањС Π΄ΠΈΠ½Π°ΠΌΠΈΡ‡Π΅Π½ Π°ΠΊΡƒΠΌΡƒΠ»Π°Ρ‚ΠΎΡ€ Π±Π΅Π· Π΄ΠΎΠ²Π΅Ρ€Π»ΠΈΠ²ΠΎ ΠΏΠΎΡΡ‚Π°Π²ΡƒΠ²Π°ΡšΠ΅.

Utreexo Π΅ ΡˆΡƒΠΌΠ° ΠΎΠ΄ ΡΠΎΠ²Ρ€ΡˆΠ΅Π½ΠΈ Π±ΠΈΠ½Π°Ρ€Π½ΠΈ ΠœΠ΅Ρ€ΠΊΠ» Π΄Ρ€Π²Ρ˜Π° ΠΈ Π΅ Ρ€Π°Π·Π²ΠΎΡ˜ Π½Π° ΠΈΠ΄Π΅ΠΈΡ‚Π΅ прСтставСни Π²ΠΎ Ефикасни асинхрони Π°ΠΊΡƒΠΌΡƒΠ»Π°Ρ‚ΠΎΡ€ΠΈ Π·Π° дистрибуирани pki, додавајќи моТност Π·Π° ΠΎΡ‚ΡΡ‚Ρ€Π°Π½ΡƒΠ²Π°ΡšΠ΅ Π½Π° Π΅Π»Π΅ΠΌΠ΅Π½Ρ‚ΠΈ ΠΎΠ΄ мноТСство.

Π›ΠΎΠ³ΠΈΡ‡ΠΊΠ° структура Π½Π° Π±Π°Ρ‚Π΅Ρ€ΠΈΡ˜Π°Ρ‚Π°

БатСрискитС ќСлии сС распорСдСни Π²ΠΎ ΡˆΡƒΠΌΠ° ΠΎΠ΄ ΠΈΠ΄Π΅Π°Π»Π½ΠΈ Π±ΠΈΠ½Π°Ρ€Π½ΠΈ Π΄Ρ€Π²Ρ˜Π°. Π”Ρ€Π²Ρ˜Π°Ρ‚Π° сС ΠΏΠΎΠ΄Ρ€Π΅Π΄Π΅Π½ΠΈ ΠΏΠΎ висина. Оваа прСтстава Π΅ ΠΈΠ·Π±Ρ€Π°Π½Π° ΠΊΠ°ΠΊΠΎ Π½Π°Ρ˜Π²ΠΈΠ·ΡƒΠ΅Π»Π½Π° ΠΈ Π²ΠΈ ΠΎΠ²ΠΎΠ·ΠΌΠΎΠΆΡƒΠ²Π° Π΄Π° Π³ΠΎ Π²ΠΈΠ·ΡƒΠ΅Π»ΠΈΠ·ΠΈΡ€Π°Ρ‚Π΅ ΡΠΏΠΎΡ˜ΡƒΠ²Π°ΡšΠ΅Ρ‚ΠΎ Π½Π° Π΄Ρ€Π²Ρ˜Π°Ρ‚Π° Π·Π° Π²Ρ€Π΅ΠΌΠ΅ Π½Π° ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈΡ‚Π΅ Π½Π° Π±Π°Ρ‚Π΅Ρ€ΠΈΡ˜Π°Ρ‚Π°.

Авторот Π·Π°Π±Π΅Π»Π΅ΠΆΡƒΠ²Π° Π΄Π΅ΠΊΠ° со ΠΎΠ³Π»Π΅Π΄ Π½Π° Ρ‚ΠΎΠ° ΡˆΡ‚ΠΎ ситС Π΄Ρ€Π²Ρ˜Π° Π²ΠΎ ΡˆΡƒΠΌΠ°Ρ‚Π° сС ΠΈΠ΄Π΅Π°Π»Π½ΠΈ, Π½ΠΈΠ²Π½Π°Ρ‚Π° висина сС ΠΈΠ·Ρ€Π°Π·ΡƒΠ²Π° ΠΊΠ°ΠΊΠΎ сила ΠΎΠ΄ Π΄Π²Π°, исто ΠΊΠ°ΠΊΠΎ ΡˆΡ‚ΠΎ сСкој ΠΏΡ€ΠΈΡ€ΠΎΠ΄Π΅Π½ Π±Ρ€ΠΎΡ˜ ΠΌΠΎΠΆΠ΅ Π΄Π° сС прСтстави ΠΊΠ°ΠΊΠΎ Π·Π±ΠΈΡ€ Π½Π° сили ΠΎΠ΄ Π΄Π²Π°. Π‘ΠΎΠΎΠ΄Π²Π΅Ρ‚Π½ΠΎ Π½Π° Ρ‚ΠΎΠ°, сСкој сСт Π½Π° лисја ΠΌΠΎΠΆΠ΅ Π΄Π° сС Π³Ρ€ΡƒΠΏΠΈΡ€Π° Π²ΠΎ Π±ΠΈΠ½Π°Ρ€Π½ΠΈ Π΄Ρ€Π²Ρ˜Π°, ΠΈ Π²ΠΎ ситС случаи, Π΄ΠΎΠ΄Π°Π²Π°ΡšΠ΅Ρ‚ΠΎ Π½ΠΎΠ² Π΅Π»Π΅ΠΌΠ΅Π½Ρ‚ Π±Π°Ρ€Π° знаСњС само Π·Π° корСнскитС јазли Π½Π° складиранитС Π΄Ρ€Π²Ρ˜Π°.

Π’Π°ΠΊΠ°, складираната прСтстава Π½Π° Π°ΠΊΡƒΠΌΡƒΠ»Π°Ρ‚ΠΎΡ€ΠΎΡ‚ Utreexo Π΅ листа Π½Π° корСнски јазли (ΠΊΠΎΡ€Π΅Π½ Merkle), Π° Π½Π΅ Ρ†Π΅Π»Π°Ρ‚Π° ΡˆΡƒΠΌΠ° ΠΎΠ΄ Π΄Ρ€Π²Ρ˜Π°.

Π”Π° ја прСтставимС листата Π½Π° корСнски Π΅Π»Π΅ΠΌΠ΅Π½Ρ‚ΠΈ ΠΊΠ°ΠΊΠΎ Vec<Option<Hash>>. Π˜Π·Π±ΠΎΡ€Π΅Π½ Ρ‚ΠΈΠΏ Option<Hash> ΠΏΠΎΠΊΠ°ΠΆΡƒΠ²Π° Π΄Π΅ΠΊΠ° корСнскиот Π΅Π»Π΅ΠΌΠ΅Π½Ρ‚ ΠΌΠΎΠΆΠ΅ Π΄Π° нСдостасува, ΡˆΡ‚ΠΎ Π·Π½Π°Ρ‡ΠΈ Π΄Π΅ΠΊΠ° Π²ΠΎ Π°ΠΊΡƒΠΌΡƒΠ»Π°Ρ‚ΠΎΡ€ΠΎΡ‚ Π½Π΅ΠΌΠ° Π΄Ρ€Π²ΠΎ со соодвСтна висина.

/// 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],
        }
    }
}

Π”ΠΎΠ΄Π°Π²Π°ΡšΠ΅ Π΅Π»Π΅ΠΌΠ΅Π½Ρ‚ΠΈ

ΠŸΡ€Π²ΠΎ, Π΄Π° ја опишСмС Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡ˜Π°Ρ‚Π° parent(), кој Π³ΠΎ ΠΏΡ€Π΅ΠΏΠΎΠ·Π½Π°Π²Π° родитСлскиот јазол Π·Π° Π΄Π²Π° Π΄Π°Π΄Π΅Π½ΠΈ Π΅Π»Π΅ΠΌΠ΅Π½Ρ‚ΠΈ.

Π€ΡƒΠ½ΠΊΡ†ΠΈΡ˜Π° Ρ€ΠΎΠ΄ΠΈΡ‚Π΅Π»().

Π‘ΠΈΠ΄Π΅Ρ˜ΡœΠΈ користимС Merkle Π΄Ρ€Π²Ρ˜Π°, Ρ€ΠΎΠ΄ΠΈΡ‚Π΅Π» Π½Π° сСкој ΠΎΠ΄ Π΄Π²Π°Ρ‚Π° јазли Π΅ Π΅Π΄Π΅Π½ јазол ΡˆΡ‚ΠΎ Π³ΠΎ складира Ρ…Π°ΡˆΠΎΡ‚ Π½Π° ΠΊΠΎΠ½ΠΊΠ°Ρ‚Π΅Π½Π°Ρ†ΠΈΡ˜Π°Ρ‚Π° Π½Π° Ρ…Π°ΡˆΠΎΠ²ΠΈΡ‚Π΅ Π½Π° дСтскитС јазли:

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[..])
}

Авторот Π·Π°Π±Π΅Π»Π΅ΠΆΡƒΠ²Π° Π΄Π΅ΠΊΠ° Π·Π° Π΄Π° сС спрСчат Π½Π°ΠΏΠ°Π΄ΠΈΡ‚Π΅ опишани ΠΎΠ΄ Charles Bouillaguet, Pierre-Alain Fouque, Adi Shamir ΠΈ Sebastien Zimmer Π²ΠΎ
Π’Ρ‚ΠΎΡ€ΠΈ Π½Π°ΠΏΠ°Π΄ΠΈ Π½Π° preimage Π½Π° измСшани Ρ…Π°Ρˆ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, ΠΏΠΎΠΊΡ€Π°Ρ˜ Π΄Π²Π°Ρ‚Π° Ρ…Π°ΡˆΠΈ, Π½Π° ΠΊΠΎΠ½ΠΊΠ°Ρ‚Π΅Π½Π°Ρ†ΠΈΡ˜Π°Ρ‚Π° Ρ‚Ρ€Π΅Π±Π° Π΄Π° сС Π΄ΠΎΠ΄Π°Π΄Π΅ ΠΈ висината Π²ΠΎ Π²Π½Π°Ρ‚Ρ€Π΅ΡˆΠ½ΠΎΡΡ‚Π° Π½Π° Π΄Ρ€Π²ΠΎΡ‚ΠΎ.

Како ΡˆΡ‚ΠΎ Π΄ΠΎΠ΄Π°Π²Π°Ρ‚Π΅ Π΅Π»Π΅ΠΌΠ΅Π½Ρ‚ΠΈ Π²ΠΎ Π°ΠΊΡƒΠΌΡƒΠ»Π°Ρ‚ΠΎΡ€ΠΎΡ‚, Ρ‚Ρ€Π΅Π±Π° Π΄Π° слСдитС ΠΊΠΎΠΈ Π΅Π»Π΅ΠΌΠ΅Π½Ρ‚ΠΈ Π½Π° ΠΊΠΎΡ€Π΅Π½ΠΎΡ‚ сС ΠΌΠ΅Π½ΡƒΠ²Π°Π°Ρ‚. БлСдСјќи ја ΠΏΠ°Ρ‚Π΅ΠΊΠ°Ρ‚Π° Π½Π° ΠΌΠ΅Π½ΡƒΠ²Π°ΡšΠ΅ Π½Π° корСнскитС Π΅Π»Π΅ΠΌΠ΅Π½Ρ‚ΠΈ Π·Π° сСкој Π΅Π»Π΅ΠΌΠ΅Π½Ρ‚ ΡˆΡ‚ΠΎ Π³ΠΎ Π΄ΠΎΠ΄Π°Π²Π°Ρ‚Π΅, ΠΏΠΎΠ΄ΠΎΡ†Π½Π° ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π° конструиратС Π΄ΠΎΠΊΠ°Π· Π·Π° присуството Π½Π° ΠΎΠ²ΠΈΠ΅ Π΅Π»Π΅ΠΌΠ΅Π½Ρ‚ΠΈ.

Π‘Π»Π΅Π΄Π΅Ρ‚Π΅ Π³ΠΈ ΠΏΡ€ΠΎΠΌΠ΅Π½ΠΈΡ‚Π΅ Π΄ΠΎΠ΄Π΅ΠΊΠ° Π³ΠΈ Π΄ΠΎΠ΄Π°Π²Π°Ρ‚Π΅

Π—Π° Π΄Π° Π³ΠΈ слСдимС Π½Π°ΠΏΡ€Π°Π²Π΅Π½ΠΈΡ‚Π΅ ΠΏΡ€ΠΎΠΌΠ΅Π½ΠΈ, ајдС Π΄Π° ја Π΄Π΅ΠΊΠ»Π°Ρ€ΠΈΡ€Π°ΠΌΠ΅ структурата Update, кој ќС складира ΠΏΠΎΠ΄Π°Ρ‚ΠΎΡ†ΠΈ Π·Π° ΠΏΡ€ΠΎΠΌΠ΅Π½ΠΈΡ‚Π΅ Π²ΠΎ Ρ˜Π°Π·Π»ΠΈΡ‚Π΅.

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

Π—Π° Π΄Π° Π΄ΠΎΠ΄Π°Π΄Π΅Ρ‚Π΅ Π΅Π»Π΅ΠΌΠ΅Π½Ρ‚ Π½Π° Π±Π°Ρ‚Π΅Ρ€ΠΈΡ˜Π°Ρ‚Π°, ΠΏΠΎΡ‚Ρ€Π΅Π±Π½ΠΎ Π΅:

  • НаправСтС Π½ΠΈΠ·Π° ΠΎΠ΄ ΠΊΠΎΡ€ΠΏΠΈ со корСнски Π΅Π»Π΅ΠΌΠ΅Π½Ρ‚ΠΈ new_roots ΠΈ поставСтС Π³ΠΈ постоСчкитС корСнски Π΅Π»Π΅ΠΌΠ΅Π½Ρ‚ΠΈ Ρ‚Π°ΠΌΡƒ, ΠΏΠΎ Π΅Π΄Π΅Π½ Π·Π° сСкоја ΠΊΠΎΡ€ΠΏΠ°:

Код

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);
}

  • Π”ΠΎΠ΄Π°Π΄Π΅Ρ‚Π΅ Π³ΠΈ Π΅Π»Π΅ΠΌΠ΅Π½Ρ‚ΠΈΡ‚Π΅ ΡˆΡ‚ΠΎ Ρ‚Ρ€Π΅Π±Π° Π΄Π° сС Π΄ΠΎΠ΄Π°Π΄Π°Ρ‚ (Π½ΠΈΠ·Π° insertions) Π΄ΠΎ ΠΏΡ€Π²Π°Ρ‚Π° ΠΊΠΎΠ»ΠΈΡ‡ΠΊΠ° new_roots[0]:

Utreexo: ΠΊΠΎΠΌΠΏΡ€Π΅ΡΠΈΡ€Π°ΡšΠ΅ Π½Π° ΠΌΠ½ΠΎΠ³Ρƒ UTXO Bitcoin

Код

new_roots[0].extend_from_slice(insertions);

  • Π‘ΠΎΠ΅Π΄ΠΈΠ½Π΅Ρ‚Π΅ Π³ΠΈ ставкитС Π΄ΠΎΠ΄Π°Π΄Π΅Π½ΠΈ Π²ΠΎ ΠΏΡ€Π²Π°Ρ‚Π° ΠΊΠΎΡˆΠ½ΠΈΡ†Π° со останатитС:
    • Π—Π° ситС ΠΊΠΎΠ»ΠΈΡ‡ΠΊΠΈ со повСќС ΠΎΠ΄ Π΅Π΄Π½Π° ставка:
      1. Π—Π΅ΠΌΠ΅Ρ‚Π΅ Π΄Π²Π° Π΅Π»Π΅ΠΌΠ΅Π½Ρ‚ΠΈ ΠΎΠ΄ ΠΊΡ€Π°Ρ˜ΠΎΡ‚ Π½Π° ΠΊΠΎΡ€ΠΏΠ°Ρ‚Π°, ΠΏΡ€Π΅ΡΠΌΠ΅Ρ‚Π°Ρ˜Ρ‚Π΅ Π³ΠΎ Π½ΠΈΠ²Π½ΠΈΠΎΡ‚ Ρ€ΠΎΠ΄ΠΈΡ‚Π΅Π», отстранСтС Π³ΠΈ Π΄Π²Π°Ρ‚Π° Π΅Π»Π΅ΠΌΠ΅Π½Ρ‚ΠΈ
      2. Π”ΠΎΠ΄Π°Π΄Π΅Ρ‚Π΅ Π³ΠΎ прСсмСтаниот Ρ€ΠΎΠ΄ΠΈΡ‚Π΅Π» Π²ΠΎ слСдната ΠΊΠΎΠ»ΠΈΡ‡ΠΊΠ°

Utreexo: ΠΊΠΎΠΌΠΏΡ€Π΅ΡΠΈΡ€Π°ΡšΠ΅ Π½Π° ΠΌΠ½ΠΎΠ³Ρƒ UTXO Bitcoin

Код

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 });
    }
}

  • ΠŸΡ€Π΅ΠΌΠ΅ΡΡ‚Π΅Ρ‚Π΅ Π³ΠΈ корСнскитС Π΅Π»Π΅ΠΌΠ΅Π½Ρ‚ΠΈ ΠΎΠ΄ ΠΊΠΎΡ€ΠΏΠΈΡ‚Π΅ Π²ΠΎ Π΄ΠΎΠ±ΠΈΠ΅Π½Π°Ρ‚Π° акумулаторска Π½ΠΈΠ·Π°

Код

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]);
    }
}

БоздавањС Π΄ΠΎΠΊΠ°Π· Π·Π° Π΄ΠΎΠ΄Π°Π΄Π΅Π½ΠΈ Π΅Π»Π΅ΠΌΠ΅Π½Ρ‚ΠΈ

Π”ΠΎΠΊΠ°Π· Π·Π° Π²ΠΊΠ»ΡƒΡ‡ΡƒΠ²Π°ΡšΠ΅ Π½Π° ΡœΠ΅Π»ΠΈΡ˜Π°Ρ‚Π° Π²ΠΎ Π±Π°Ρ‚Π΅Ρ€ΠΈΡ˜Π°Ρ‚Π° (Proof) ќС слуТи ΠΊΠ°ΠΊΠΎ ΠœΠ΅Ρ€ΠΊΠ» ΠŸΠ°Ρ‚Π΅ΠΊΠ°, која сС состои ΠΎΠ΄ ΡΠΈΠ½ΡŸΠΈΡ€ ProofStep. Ако ΠΏΠ°Ρ‚Π΅ΠΊΠ°Ρ‚Π° Π½Π΅ Π²ΠΎΠ΄ΠΈ Π½ΠΈΠΊΠ°Π΄Π΅, Ρ‚ΠΎΠ³Π°Ρˆ Π΄ΠΎΠΊΠ°Π·ΠΎΡ‚ Π΅ Π½Π΅Ρ‚ΠΎΡ‡Π΅Π½.

/// Π•Π΄ΠΈΠ½ΠΈΡ‡Π½Ρ‹ΠΉ шаг Π½Π° ΠΏΡƒΡ‚ΠΈ ΠΊ элСмСнту Π² Π΄Π΅Ρ€Π΅Π²Π΅ ΠœΠ΅Ρ€ΠΊΠ»Π°.
#[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,
}

ΠšΠΎΡ€ΠΈΡΡ‚Π΅ΡšΠ΅ Π½Π° ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈΡ‚Π΅ Π΄ΠΎΠ±ΠΈΠ΅Π½ΠΈ ΠΏΡ€Π΅Ρ‚Ρ…ΠΎΠ΄Π½ΠΎ ΠΏΡ€ΠΈ додавањС Π½Π° Π΅Π»Π΅ΠΌΠ΅Π½Ρ‚ (структура Update), ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π° создадСтС Π΄ΠΎΠΊΠ°Π· Π΄Π΅ΠΊΠ° Π΅ Π΄ΠΎΠ΄Π°Π΄Π΅Π½ Π΅Π»Π΅ΠΌΠ΅Π½Ρ‚ Π½Π° Π±Π°Ρ‚Π΅Ρ€ΠΈΡ˜Π°Ρ‚Π°. Π—Π° Π΄Π° Π³ΠΎ Π½Π°ΠΏΡ€Π°Π²ΠΈΡ‚Π΅ ΠΎΠ²Π°, ја ΠΏΠΎΠΌΠΈΠ½ΡƒΠ²Π°ΠΌΠ΅ Ρ‚Π°Π±Π΅Π»Π°Ρ‚Π° со Π½Π°ΠΏΡ€Π°Π²Π΅Π½ΠΈ ΠΏΡ€ΠΎΠΌΠ΅Π½ΠΈ ΠΈ Π³ΠΎ Π΄ΠΎΠ΄Π°Π²Π°ΠΌΠ΅ сСкој Ρ‡Π΅ΠΊΠΎΡ€ Π½Π° ΠΏΠ°Ρ‚Π΅ΠΊΠ°Ρ‚Π° Π½Π° ΠœΠ΅Ρ€ΠΊΠ», ΡˆΡ‚ΠΎ послСдоватСлно ќС послуТи ΠΊΠ°ΠΊΠΎ Π΄ΠΎΠΊΠ°Π·:

Код

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
    }
}

ΠŸΡ€ΠΎΡ†Π΅Ρ Π½Π° создавањС Π΄ΠΎΠΊΠ°Π·

Utreexo: ΠΊΠΎΠΌΠΏΡ€Π΅ΡΠΈΡ€Π°ΡšΠ΅ Π½Π° ΠΌΠ½ΠΎΠ³Ρƒ UTXO Bitcoin

ΠŸΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° Π½Π° Π΄ΠΎΠΊΠ°Π· Π·Π° Π΅Π»Π΅ΠΌΠ΅Π½Ρ‚

ΠŸΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ°Ρ‚Π° Π½Π° Π΄ΠΎΠΊΠ°Π· Π·Π° Π²ΠΊΠ»ΡƒΡ‡ΡƒΠ²Π°ΡšΠ΅ Π½Π° Π΅Π»Π΅ΠΌΠ΅Π½Ρ‚ сС свСдува Π½Π° слСдСњС Π½Π° ΠΏΠ°Ρ‚Π΅ΠΊΠ°Ρ‚Π° ΠœΠ΅Ρ€ΠΊΠ» Π΄ΠΎΠ΄Π΅ΠΊΠ° Π½Π΅ Π΄ΠΎΠ²Π΅Π΄Π΅ Π΄ΠΎ постоСчки ΠΊΠΎΡ€Π΅Π½ Π΅Π»Π΅ΠΌΠ΅Π½Ρ‚:

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
    }
}

Π’ΠΈΠ·ΡƒΠ΅Π»Π½ΠΎ:

ΠŸΡ€ΠΎΡ†Π΅Ρ Π½Π° ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° Π½Π° Π΄ΠΎΠΊΠ°Π·ΠΎΡ‚ Π·Π° А

Utreexo: ΠΊΠΎΠΌΠΏΡ€Π΅ΡΠΈΡ€Π°ΡšΠ΅ Π½Π° ΠΌΠ½ΠΎΠ³Ρƒ UTXO Bitcoin

ΠžΡ‚ΡΡ‚Ρ€Π°Π½ΡƒΠ²Π°ΡšΠ΅ Π½Π° ΠΏΡ€Π΅Π΄ΠΌΠ΅Ρ‚ΠΈ

Π—Π° Π΄Π° отстранитС ќСлија ΠΎΠ΄ Π±Π°Ρ‚Π΅Ρ€ΠΈΡ˜Π°Ρ‚Π°, ΠΌΠΎΡ€Π° Π΄Π° ΠΎΠ±Π΅Π·Π±Π΅Π΄ΠΈΡ‚Π΅ Π²Π°Π»ΠΈΠ΄Π΅Π½ Π΄ΠΎΠΊΠ°Π· Π΄Π΅ΠΊΠ° ΡœΠ΅Π»ΠΈΡ˜Π°Ρ‚Π° Π΅ Ρ‚Π°ΠΌΡƒ. ΠšΠΎΡ€ΠΈΡΡ‚Π΅Ρ˜ΡœΠΈ Π³ΠΈ ΠΏΠΎΠ΄Π°Ρ‚ΠΎΡ†ΠΈΡ‚Π΅ ΠΎΠ΄ Π΄ΠΎΠΊΠ°Π·ΠΎΡ‚, ΠΌΠΎΠΆΠ½ΠΎ Π΅ Π΄Π° сС прСсмСтаат Π½ΠΎΠ²ΠΈ корСнски Π΅Π»Π΅ΠΌΠ΅Π½Ρ‚ΠΈ Π½Π° Π°ΠΊΡƒΠΌΡƒΠ»Π°Ρ‚ΠΎΡ€ΠΎΡ‚ Π·Π° ΠΊΠΎΠΈ Π΄Π°Π΄Π΅Π½ΠΈΠΎΡ‚ Π΄ΠΎΠΊΠ°Π· повСќС Π½Π΅ΠΌΠ° Π΄Π° Π±ΠΈΠ΄Π΅ вистинит.

Алгоритмот Π΅ ΠΊΠ°ΠΊΠΎ ΡˆΡ‚ΠΎ слСдува:

  1. Како ΠΈ со Π΄ΠΎΠ΄Π°Π²Π°ΡšΠ΅Ρ‚ΠΎ, ΠΎΡ€Π³Π°Π½ΠΈΠ·ΠΈΡ€Π°ΠΌΠ΅ Π·Π±ΠΈΡ€ Π½Π° ΠΏΡ€Π°Π·Π½ΠΈ ΠΊΠΎΡ€ΠΏΠΈ ΡˆΡ‚ΠΎ ΠΎΠ΄Π³ΠΎΠ²Π°Ρ€Π°Π°Ρ‚ Π½Π° Π΄Ρ€Π²Ρ˜Π°Ρ‚Π° ΠœΠ΅Ρ€ΠΊΠ» со висина Π΅Π΄Π½Π°ΠΊΠ²Π° Π½Π° ΠΌΠΎΡœΠ½ΠΎΡΡ‚Π° Π½Π° Π΄Π²Π° ΠΎΠ΄ индСксот Π½Π° ΠΊΠΎΡˆΠ½ΠΈΡ†Π°Ρ‚Π°
  2. Π’ΠΌΠ΅Ρ‚Π½ΡƒΠ²Π°ΠΌΠ΅ Π΅Π»Π΅ΠΌΠ΅Π½Ρ‚ΠΈ ΠΎΠ΄ Ρ‡Π΅ΠΊΠΎΡ€ΠΈΡ‚Π΅ Π½Π° ΠΏΠ°Ρ‚Π΅ΠΊΠ°Ρ‚Π° ΠœΠ΅Ρ€ΠΊΠ»Π΅ Π²ΠΎ ΠΊΠΎΡ€ΠΏΠΈΡ‚Π΅; индСксот Π½Π° ΠΊΠΎΡˆΠ½ΠΈΡ†Π°Ρ‚Π° Π΅ Π΅Π΄Π½Π°ΠΊΠΎΠ² Π½Π° Π±Ρ€ΠΎΡ˜ΠΎΡ‚ Π½Π° Ρ‚Π΅ΠΊΠΎΠ²Π½ΠΈΠΎΡ‚ Ρ‡Π΅ΠΊΠΎΡ€
  3. Π“ΠΎ отстранувамС корСнскиот Π΅Π»Π΅ΠΌΠ΅Π½Ρ‚ Π΄ΠΎ кој Π²ΠΎΠ΄ΠΈ ΠΏΠ°Ρ‚Π΅ΠΊΠ°Ρ‚Π° ΠΎΠ΄ Π΄ΠΎΠΊΠ°Π·ΠΎΡ‚
  4. Како ΠΈ ΠΏΡ€ΠΈ ΡΠΎΠ±ΠΈΡ€Π°ΡšΠ΅Ρ‚ΠΎ, Π½ΠΈΠ΅ Π³ΠΈ прСсмСтувамС Π½ΠΎΠ²ΠΈΡ‚Π΅ корСнски Π΅Π»Π΅ΠΌΠ΅Π½Ρ‚ΠΈ со ΠΊΠΎΠΌΠ±ΠΈΠ½ΠΈΡ€Π°ΡšΠ΅ Π½Π° Π΅Π»Π΅ΠΌΠ΅Π½Ρ‚ΠΈ ΠΎΠ΄ кошСви Π²ΠΎ ΠΏΠ°Ρ€ΠΎΠ²ΠΈ ΠΈ ΠΏΡ€Π΅ΠΌΠ΅ΡΡ‚ΡƒΠ²Π°ΡšΠ΅ Π½Π° Ρ€Π΅Π·ΡƒΠ»Ρ‚Π°Ρ‚ΠΎΡ‚ ΠΎΠ΄ ΡΠΎΠ΅Π΄ΠΈΠ½ΡƒΠ²Π°ΡšΠ΅Ρ‚ΠΎ Π²ΠΎ слСдната ΠΊΠΎΡ€ΠΏΠ°

Код

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;
    }
}

ΠŸΡ€ΠΎΡ†Π΅ΡΠΎΡ‚ Π½Π° ΠΎΡ‚ΡΡ‚Ρ€Π°Π½ΡƒΠ²Π°ΡšΠ΅ Π½Π° Π΅Π»Π΅ΠΌΠ΅Π½Ρ‚ΠΎΡ‚ β€žΠβ€œ:
Utreexo: ΠΊΠΎΠΌΠΏΡ€Π΅ΡΠΈΡ€Π°ΡšΠ΅ Π½Π° ΠΌΠ½ΠΎΠ³Ρƒ UTXO Bitcoin

Π˜Π½Ρ‚Π΅Π³Ρ€Π°Ρ†ΠΈΡ˜Π° Π²ΠΎ постоСчка ΠΌΡ€Π΅ΠΆΠ°

ΠšΠΎΡ€ΠΈΡΡ‚Π΅Ρ˜ΡœΠΈ Π³ΠΎ ΠΏΡ€Π΅Π΄Π»ΠΎΠΆΠ΅Π½ΠΈΠΎΡ‚ Π°ΠΊΡƒΠΌΡƒΠ»Π°Ρ‚ΠΎΡ€, Ρ˜Π°Π·Π»ΠΈΡ‚Π΅ ΠΌΠΎΠΆΠ΅ Π΄Π° ΠΈΠ·Π±Π΅Π³Π½Π°Ρ‚ ΠΊΠΎΡ€ΠΈΡΡ‚Π΅ΡšΠ΅ Π½Π° DB Π·Π° ΡΠΊΠ»Π°Π΄ΠΈΡ€Π°ΡšΠ΅ Π½Π° ситС UTXO Π΄ΠΎΠ΄Π΅ΠΊΠ° сè ΡƒΡˆΡ‚Π΅ ΠΌΠΎΠΆΠ°Ρ‚ Π΄Π° Π³ΠΎ ΠΏΡ€ΠΎΠΌΠ΅Π½Π°Ρ‚ UTXO-сСтот. Π‘Π΅ΠΏΠ°ΠΊ, сС ΠΏΠΎΡ˜Π°Π²ΡƒΠ²Π° ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠΎΡ‚ со Ρ€Π°Π±ΠΎΡ‚Π° со Π΄ΠΎΠΊΠ°Π·ΠΈ.

АјдС Π΄Π° Π³ΠΎ ΠΏΠΎΠ²ΠΈΠΊΠ°ΠΌΠ΅ валидаторскиот јазол ΡˆΡ‚ΠΎ Π³ΠΎ користи Π°ΠΊΡƒΠΌΡƒΠ»Π°Ρ‚ΠΎΡ€ΠΎΡ‚ UTXO ΠΊΠΎΠΌΠΏΠ°ΠΊΡ‚Π΅Π½ (ΠΊΠΎΠΌΠΏΠ°ΠΊΡ‚Π΅Π½ јазол) ΠΈ Π²Π°Π»ΠΈΠ΄Π°Ρ‚ΠΎΡ€ Π±Π΅Π· Π°ΠΊΡƒΠΌΡƒΠ»Π°Ρ‚ΠΎΡ€ Π΅ Π·Π°Π²Ρ€ΡˆΠΈ (цСлосСн јазол). ΠŸΠΎΡΡ‚ΠΎΠ΅ΡšΠ΅Ρ‚ΠΎ Π½Π° Π΄Π²Π΅ класи Π½Π° јазли создава ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ Π·Π° Π½ΠΈΠ²Π½ΠΎ ΠΈΠ½Ρ‚Π΅Π³Ρ€ΠΈΡ€Π°ΡšΠ΅ Π²ΠΎ Π΅Π΄Π½Π° ΠΌΡ€Π΅ΠΆΠ°, бидСјќи ΠΊΠΎΠΌΠΏΠ°ΠΊΡ‚Π½ΠΈΡ‚Π΅ јазли Π±Π°Ρ€Π°Π°Ρ‚ Π΄ΠΎΠΊΠ°Π· Π·Π° ΠΏΠΎΡΡ‚ΠΎΠ΅ΡšΠ΅Ρ‚ΠΎ Π½Π° UTXO, ΠΊΠΎΠΈ сС Ρ‚Ρ€ΠΎΡˆΠ°Ρ‚ Π²ΠΎ трансакции, Π΄ΠΎΠ΄Π΅ΠΊΠ° цСлоснитС јазли Π½Π΅. Ако ситС ΠΌΡ€Π΅ΠΆΠ½ΠΈ јазли Π½Π΅ сС ΠΏΡ€Π΅Ρ„Ρ€Π»Π°Ρ‚ истоврСмСно ΠΈ Π½Π° ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½ΠΈΡ€Π°Π½ Π½Π°Ρ‡ΠΈΠ½ Π½Π° ΠΊΠΎΡ€ΠΈΡΡ‚Π΅ΡšΠ΅ Π½Π° Utreexo, Ρ‚ΠΎΠ³Π°Ρˆ ΠΊΠΎΠΌΠΏΠ°ΠΊΡ‚Π½ΠΈΡ‚Π΅ јазли ќС останат Π·Π°Π΄ сСбС ΠΈ Π½Π΅ΠΌΠ° Π΄Π° ΠΌΠΎΠΆΠ°Ρ‚ Π΄Π° Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ Π½Π° ΠΌΡ€Π΅ΠΆΠ°Ρ‚Π° Π‘ΠΈΡ‚ΠΊΠΎΠΈΠ½.

Π—Π° Π΄Π° сС Ρ€Π΅ΡˆΠΈ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠΎΡ‚ со ΠΈΠ½Ρ‚Π΅Π³Ρ€ΠΈΡ€Π°ΡšΠ΅ Π½Π° ΠΊΠΎΠΌΠΏΠ°ΠΊΡ‚Π½ΠΈ јазли Π²ΠΎ ΠΌΡ€Π΅ΠΆΠ°Ρ‚Π°, сС ΠΏΡ€Π΅Π΄Π»Π°Π³Π° Π΄Π° сС Π²ΠΎΠ²Π΅Π΄Π΅ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»Π½Π° класа Π½Π° јазли - мостови. ΠœΠΎΡΡ‚ΠΎΠ²ΠΈΠΎΡ‚ јазол Π΅ ΠΊΠΎΠΌΠΏΠ»Π΅Ρ‚Π΅Π½ јазол кој исто Ρ‚Π°ΠΊΠ° ја складира Π±Π°Ρ‚Π΅Ρ€ΠΈΡ˜Π°Ρ‚Π° Utreexo ΠΈ Π΄ΠΎΠΊΠ°Π· Π·Π° Π²ΠΊΠ»ΡƒΡ‡ΡƒΠ²Π°ΡšΠ΅ Π‘ΠΈΡ‚Π΅ UTXO ΠΎΠ΄ UTXO-сСт. ΠœΠΎΡΡ‚ΠΎΠ²ΠΈΡ‚Π΅ прСсмСтуваат Π½ΠΎΠ²ΠΈ Ρ…Π°ΡˆΠΈ ΠΈ Π³ΠΈ Π°ΠΆΡƒΡ€ΠΈΡ€Π°Π°Ρ‚ Π°ΠΊΡƒΠΌΡƒΠ»Π°Ρ‚ΠΎΡ€ΠΎΡ‚ ΠΈ Π΄ΠΎΠΊΠ°Π·ΠΈΡ‚Π΅ ΠΊΠ°ΠΊΠΎ ΡˆΡ‚ΠΎ пристигнуваат Π½ΠΎΠ²ΠΈ Π±Π»ΠΎΠΊΠΎΠ²ΠΈ Π½Π° трансакции. ΠžΠ΄Ρ€ΠΆΡƒΠ²Π°ΡšΠ΅Ρ‚ΠΎ ΠΈ Π°ΠΆΡƒΡ€ΠΈΡ€Π°ΡšΠ΅Ρ‚ΠΎ Π½Π° Π°ΠΊΡƒΠΌΡƒΠ»Π°Ρ‚ΠΎΡ€ΠΎΡ‚ ΠΈ Π΄ΠΎΠΊΠ°Π·ΠΈΡ‚Π΅ Π½Π΅ Π½Π°ΠΌΠ΅Ρ‚Π½ΡƒΠ²Π°Π°Ρ‚ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»Π½ΠΎ прСсмСтковно ΠΎΠΏΡ‚ΠΎΠ²Π°Ρ€ΡƒΠ²Π°ΡšΠ΅ Π½Π° Ρ‚Π°ΠΊΠ²ΠΈΡ‚Π΅ јазли. ΠœΠΎΡΡ‚ΠΎΠ²ΠΈΡ‚Π΅ Π³ΠΎ ΠΆΡ€Ρ‚Π²ΡƒΠ²Π°Π°Ρ‚ просторот Π½Π° дискот: Ρ‚Ρ€Π΅Π±Π° Ρ€Π°Π±ΠΎΡ‚ΠΈΡ‚Π΅ Π΄Π° сС ΠΎΡ€Π³Π°Π½ΠΈΠ·ΠΈΡ€Π°Π°Ρ‚ Utreexo: ΠΊΠΎΠΌΠΏΡ€Π΅ΡΠΈΡ€Π°ΡšΠ΅ Π½Π° ΠΌΠ½ΠΎΠ³Ρƒ UTXO Bitcoin Ρ…Π°ΡˆΠΈ, Π²ΠΎ спорСдба со Utreexo: ΠΊΠΎΠΌΠΏΡ€Π΅ΡΠΈΡ€Π°ΡšΠ΅ Π½Π° ΠΌΠ½ΠΎΠ³Ρƒ UTXO Bitcoin Ρ…Π°ΡˆΠΎΠ²ΠΈ Π·Π° ΠΊΠΎΠΌΠΏΠ°ΠΊΡ‚Π½ΠΈ јазли, ΠΊΠ°Π΄Π΅ ΡˆΡ‚ΠΎ n Π΅ ΠΌΠΎΡœΠ½ΠΎΡΡ‚Π° Π½Π° мноТСството UTXO.

ΠœΡ€Π΅ΠΆΠ½Π° Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Π°

Utreexo: ΠΊΠΎΠΌΠΏΡ€Π΅ΡΠΈΡ€Π°ΡšΠ΅ Π½Π° ΠΌΠ½ΠΎΠ³Ρƒ UTXO Bitcoin

ΠœΠΎΡΡ‚ΠΎΠ²ΠΈΡ‚Π΅ ΠΎΠ²ΠΎΠ·ΠΌΠΎΠΆΡƒΠ²Π°Π°Ρ‚ постСпСно додавањС Π½Π° ΠΊΠΎΠΌΠΏΠ°ΠΊΡ‚Π½ΠΈ јазли Π²ΠΎ ΠΌΡ€Π΅ΠΆΠ°Ρ‚Π° Π±Π΅Π· ΠΏΡ€ΠΎΠΌΠ΅Π½Π° Π½Π° софтвСрот Π½Π° постоСчкитС јазли. ЦСлоснитС јазли Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ ΠΊΠ°ΠΊΠΎ ΠΏΠΎΡ€Π°Π½ΠΎ, Π΄ΠΈΡΡ‚Ρ€ΠΈΠ±ΡƒΠΈΡ€Π°Ρ˜ΡœΠΈ трансакции ΠΈ Π±Π»ΠΎΠΊΠΎΠ²ΠΈ ΠΌΠ΅Ρ“Ρƒ сСбС. ΠœΠΎΡΡ‚ΠΎΠ²ΠΈΡ‚Π΅ јазли сС ΠΏΠΎΠ»Π½ΠΈ јазли ΠΊΠΎΠΈ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»Π½ΠΎ Π³ΠΈ складираат ΠΏΠΎΠ΄Π°Ρ‚ΠΎΡ†ΠΈΡ‚Π΅ Π·Π° Π±Π°Ρ‚Π΅Ρ€ΠΈΡ˜Π°Ρ‚Π° Utreexo ΠΈ Π·Π±ΠΈΡ€ Π½Π° Π΄ΠΎΠΊΠ°Π·ΠΈ Π·Π° Π²ΠΊΠ»ΡƒΡ‡ΡƒΠ²Π°ΡšΠ΅ Π·Π° Π‘ΠΈΡ‚Π΅ UTXO засСга. ΠˆΠ°Π·ΠΎΠ»ΠΎΡ‚ Π½Π° мостот Π½Π΅ сС Ρ€Π΅ΠΊΠ»Π°ΠΌΠΈΡ€Π° сСбСси ΠΊΠ°ΠΊΠΎ Ρ‚Π°ΠΊΠΎΠ², ΠΏΡ€Π΅ΠΏΡ€Π°Π²Π°Ρ˜ΡœΠΈ сС Π΄Π΅ΠΊΠ° Π΅ цСлосСн јазол Π·Π° ситС ΠΏΠΎΠ»Π½ΠΈ јазли ΠΈ ΠΊΠΎΠΌΠΏΠ°ΠΊΡ‚Π΅Π½ јазол Π·Π° ситС ΠΊΠΎΠΌΠΏΠ°ΠΊΡ‚Π½ΠΈ. Иако мостовитС Π³ΠΈ ΠΏΠΎΠ²Ρ€Π·ΡƒΠ²Π°Π°Ρ‚ Π΄Π²Π΅Ρ‚Π΅ ΠΌΡ€Π΅ΠΆΠΈ Π·Π°Π΅Π΄Π½ΠΎ, Ρ‚ΠΈΠ΅ Π²ΡΡƒΡˆΠ½ΠΎΡΡ‚ Ρ‚Ρ€Π΅Π±Π° Π΄Π° Π³ΠΈ ΠΏΠΎΠ²Ρ€Π·Π°Ρ‚ само Π²ΠΎ Π΅Π΄Π½Π° насока: ΠΎΠ΄ постоСчки ΠΏΠΎΠ»Π½ΠΈ јазли Π΄ΠΎ ΠΊΠΎΠΌΠΏΠ°ΠΊΡ‚Π½ΠΈ јазли. Ова Π΅ ΠΌΠΎΠΆΠ½ΠΎ бидСјќи Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ΠΎΡ‚ Π½Π° Ρ‚Ρ€Π°Π½ΡΠ°ΠΊΡ†ΠΈΡ˜Π°Ρ‚Π° Π½Π΅ Ρ‚Ρ€Π΅Π±Π° Π΄Π° сС ΠΌΠ΅Π½ΡƒΠ²Π°, Π° UTXO Π΄ΠΎΠΊΠ°Π·ΠΈΡ‚Π΅ Π·Π° ΠΊΠΎΠΌΠΏΠ°ΠΊΡ‚Π½ΠΈ јазли ΠΌΠΎΠΆΠ΅ Π΄Π° сС ΠΎΡ‚Ρ„Ρ€Π»Π°Ρ‚, Ρ‚Π°ΠΊΠ° ΡˆΡ‚ΠΎ сСкој ΠΊΠΎΠΌΠΏΠ°ΠΊΡ‚Π΅Π½ јазол ΠΌΠΎΠΆΠ΅ Π½Π° сличСн Π½Π°Ρ‡ΠΈΠ½ Π΄Π° Π΅ΠΌΠΈΡ‚ΡƒΠ²Π° трансакции Π΄ΠΎ ситС учСсници Π²ΠΎ ΠΌΡ€Π΅ΠΆΠ°Ρ‚Π° Π±Π΅Π· учСство Π½Π° јазли Π½Π° мост.

Π—Π°ΠΊΠ»ΡƒΡ‡ΠΎΠΊ

Ја ΠΏΠΎΠ³Π»Π΅Π΄Π½Π°Π²ΠΌΠ΅ Π±Π°Ρ‚Π΅Ρ€ΠΈΡ˜Π°Ρ‚Π° Utreexo ΠΈ Π³ΠΎ ΠΈΠΌΠΏΠ»Π΅ΠΌΠ΅Π½Ρ‚ΠΈΡ€Π°Π²ΠΌΠ΅ Π½Π΅Ρ˜Π·ΠΈΠ½ΠΈΠΎΡ‚ ΠΏΡ€ΠΎΡ‚ΠΎΡ‚ΠΈΠΏ Π²ΠΎ Rust. Ја Ρ€Π°Π·Π³Π»Π΅Π΄Π°Π²ΠΌΠ΅ ΠΌΡ€Π΅ΠΆΠ½Π°Ρ‚Π° Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Π° која ќС ΠΎΠ²ΠΎΠ·ΠΌΠΎΠΆΠΈ ΠΈΠ½Ρ‚Π΅Π³Ρ€Π°Ρ†ΠΈΡ˜Π° Π½Π° јазли Π±Π°Π·ΠΈΡ€Π°Π½ΠΈ Π½Π° Π±Π°Ρ‚Π΅Ρ€ΠΈΠΈ. ΠŸΡ€Π΅Π΄Π½ΠΎΡΡ‚Π° Π½Π° ΠΊΠΎΠΌΠΏΠ°ΠΊΡ‚Π½ΠΈΡ‚Π΅ Ρ„Π°ΡœΠ°ΡšΠ° Π΅ Π³ΠΎΠ»Π΅ΠΌΠΈΠ½Π°Ρ‚Π° Π½Π° складиранитС ΠΏΠΎΠ΄Π°Ρ‚ΠΎΡ†ΠΈ, која логаритамски зависи ΠΎΠ΄ ΠΌΠΎΡœΠ½ΠΎΡΡ‚Π° Π½Π° мноТСството UTXO, ΡˆΡ‚ΠΎ Π²ΠΎ Π³ΠΎΠ»Π΅ΠΌΠ° ΠΌΠ΅Ρ€Π° Π³ΠΈ Π½Π°ΠΌΠ°Π»ΡƒΠ²Π° Π±Π°Ρ€Π°ΡšΠ°Ρ‚Π° Π·Π° простор Π½Π° дискот ΠΈ пСрформанситС Π·Π° ΡΠΊΠ»Π°Π΄ΠΈΡ€Π°ΡšΠ΅ Π½Π° Ρ‚Π°ΠΊΠ²ΠΈΡ‚Π΅ јазли. НСдостаток Π΅ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»Π½ΠΈΠΎΡ‚ ΡΠΎΠΎΠ±Ρ€Π°ΡœΠ°Ρ˜ Π½Π° јазли Π·Π° прСнос Π½Π° Π΄ΠΎΠΊΠ°Π·ΠΈ, Π½ΠΎ Ρ‚Π΅Ρ…Π½ΠΈΠΊΠΈΡ‚Π΅ Π·Π° ΡΠΎΠ±ΠΈΡ€Π°ΡšΠ΅ Π΄ΠΎΠΊΠ°Π·ΠΈ (ΠΊΠΎΠ³Π° Π΅Π΄Π΅Π½ Π΄ΠΎΠΊΠ°Π· Π΄ΠΎΠΊΠ°ΠΆΡƒΠ²Π° ΠΏΠΎΡΡ‚ΠΎΠ΅ΡšΠ΅ Π½Π° Π½Π΅ΠΊΠΎΠ»ΠΊΡƒ Π΅Π»Π΅ΠΌΠ΅Π½Ρ‚ΠΈ) ΠΈ ΠΊΠ΅ΡˆΠΈΡ€Π°ΡšΠ΅Ρ‚ΠΎ ΠΌΠΎΠΆΠ΅ Π΄Π° ΠΏΠΎΠΌΠΎΠ³Π½Π°Ρ‚ Π΄Π° сС Π·Π°Π΄Ρ€ΠΆΠΈ ΡΠΎΠΎΠ±Ρ€Π°ΡœΠ°Ρ˜ΠΎΡ‚ Π²ΠΎ ΠΏΡ€ΠΈΡ„Π°Ρ‚Π»ΠΈΠ²ΠΈ Π³Ρ€Π°Π½ΠΈΡ†ΠΈ.

Ρ€Π΅Ρ„Π΅Ρ€Π΅Π½Ρ†ΠΈ:

Π˜Π·Π²ΠΎΡ€: www.habr.com

ΠšΡƒΠΏΠ΅Ρ‚Π΅ Π΄ΠΎΠ²Π΅Ρ€Π»ΠΈΠ² хостинг Π·Π° ΡΠ°Ρ˜Ρ‚ΠΎΠ²ΠΈ со DDoS Π·Π°ΡˆΡ‚ΠΈΡ‚Π°, VPS VDS сСрвСри πŸ”₯ ΠšΡƒΠΏΠ΅Ρ‚Π΅ сигурСн Π²Π΅Π±-хостинг со DDoS Π·Π°ΡˆΡ‚ΠΈΡ‚Π°, VPS VDS сСрвСри | ProHoster