Π‘Π»ΡΡΡŠΠΊ ΠΈ бСдност Π½Π° Π°Ρ‚ΠΎΠΌΠ½ΠΈΡ‚Π΅ своповС

Какво Π΅ Π»ΠΎΡˆΠΎΡ‚ΠΎ Π² Π°Ρ‚ΠΎΠΌΠ½ΠΈΡ‚Π΅ своповС ΠΈ ΠΊΠ°ΠΊ ΠΊΠ°Π½Π°Π»ΠΈΡ‚Π΅ ΠΌΠΎΠ³Π°Ρ‚ Π΄Π° ΠΏΠΎΠΌΠΎΠ³Π½Π°Ρ‚, ΠΊΠ°ΠΊΠ²ΠΎ Π²Π°ΠΆΠ½ΠΎ сС случи Π² Ρ…Π°Ρ€Π΄Ρ„ΠΎΡ€ΠΊΠ° Constantinople ΠΈ ΠΊΠ°ΠΊΠ²ΠΎ Π΄Π° ΠΏΡ€Π°Π²ΠΈΠΌ, ΠΊΠΎΠ³Π°Ρ‚ΠΎ нямамС с ΠΊΠ°ΠΊΠ²ΠΎ Π΄Π° ΠΏΠ»Π°Ρ‚ΠΈΠΌ Π·Π° Π³Π°Π·Π°.

ΠžΡΠ½ΠΎΠ²Π½Π°Ρ‚Π° мотивация Π½Π° всСки спСциалист ΠΏΠΎ бСзопасност Π΅ ΠΆΠ΅Π»Π°Π½ΠΈΠ΅Ρ‚ΠΎ Π΄Π° ΠΈΠ·Π±Π΅Π³Π½Π΅ отговорността.

ΠŸΡ€ΠΎΠ²ΠΈΠ΄Π΅Π½ΠΈΠ΅Ρ‚ΠΎ бСшС благосклонно, напуснах ICO, Π±Π΅Π· Π΄Π° ΠΈΠ·Ρ‡Π°ΠΊΠ°ΠΌ ΠΏΡŠΡ€Π²Π°Ρ‚Π° Π½Π΅ΠΎΠ±Ρ€Π°Ρ‚ΠΈΠΌΠ° транзакция, Π½ΠΎ скоро сС ΠΎΠ·ΠΎΠ²Π°Ρ… Π² Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° Π½Π° криптоборса.

Аз съм ΠΊΠ°Ρ‚Π΅Π³ΠΎΡ€ΠΈΡ‡Π½ΠΎ Π½Π΅ ΠœΠΎΠΌΡ‡Π΅Ρ‚ΠΎ ΠšΠΈΠ±Π°Π»ΡŒΡ‡ΠΈΡˆ, ΠΈ Π΅Π΄ΠΈΠ½ строг ΠΏΠΎΠ³Π»Π΅Π΄ Π΅ напълно Π΄ΠΎΡΡ‚Π°Ρ‚ΡŠΡ‡Π΅Π½, Π·Π° Π΄Π° Π΄Π°ΠΌ всички ΠΊΠ»ΡŽΡ‡ΠΎΠ²Π΅ ΠΈ ΠΏΠ°Ρ€ΠΎΠ»ΠΈ. Π—Π°Ρ‚ΠΎΠ²Π° основната ΠΌΠΈ Ρ†Π΅Π» ΠΊΠ°Ρ‚ΠΎ Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ бСшС Π΄Π° Ρ€Π°Π·ΠΏΠΎΠ»ΠΎΠΆΠ° Π³ΠΎΡ€Π΅Ρ‰Π°Ρ‚Π° стрСла Π½Π° ΠΊΡ€ΠΈΠΏΡ‚ΠΎΠ°Π½Π°Π»ΠΈΠ·Π° ΠΊΠΎΠ»ΠΊΠΎΡ‚ΠΎ сС ΠΌΠΎΠΆΠ΅ ΠΏΠΎ-Π΄Π°Π»Π΅Ρ‡Π΅ ΠΎΡ‚ ΡΠΊΡŠΠΏΠΈΡ‚Π΅ ΠΌΠΈ инспирационни Π΅Π»Π΅ΠΌΠ΅Π½Ρ‚ΠΈ.

НС Ρ‚Π²ΠΎΠΈΡ‚Π΅ ΠΊΠ»ΡŽΡ‡ΠΎΠ²Π΅, Π½Π΅ Ρ‚Π²ΠΎΠΈΡ‚Π΅ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠΈ

Π‘Ρ‚Ρ€ΠΎΠΈΠΌ систСма Π·Π° ΠΎΠ±ΠΌΠ΅Π½ Π½Π° Π°ΠΊΡ‚ΠΈΠ²ΠΈ ΠΈ искамС Π΄Π° ΠΈΠ·ΠΊΠ»ΡŽΡ‡ΠΈΠΌ ΠΌΠ΅ΠΆΠ΄ΠΈΠ½Π½ΠΎΡ‚ΠΎ ΡΡŠΡ…Ρ€Π°Π½Π΅Π½ΠΈΠ΅ Π½Π° Ρ‚Π΅Π·ΠΈ Π°ΠΊΡ‚ΠΈΠ²ΠΈ ΠΏΡ€ΠΈ нас, Π½ΠΎ трябва Π΄Π° Π³Π°Ρ€Π°Π½Ρ‚ΠΈΡ€Π°ΠΌΠ΅ сигурността Π½Π° сдСлката.

МоТС Π΄Π° дСйстватС ΠΊΠ°Ρ‚ΠΎ съдия Π² спорна ситуация ΠΈ Π΄Π° ΠΈΠ·Π²ΡŠΡ€ΡˆΠ²Π°Ρ‚Π΅ сдСлки с ΠΏΠΎΡ€Ρ‚Ρ„Π΅ΠΉΠ»ΠΈ, изискващи Π΄Π²Π° ΠΎΡ‚ Ρ‚Ρ€ΠΈΡ‚Π΅ подписа: Π½Π° ΠΊΡƒΠΏΡƒΠ²Π°Ρ‡Π°, ΠΏΡ€ΠΎΠ΄Π°Π²Π°Ρ‡Π° ΠΈ Сскроу.

Но, Π°ΠΊΠΎ ΡƒΡ‡Π°ΡΡ‚Π½ΠΈΠΊΡŠΡ‚ ΡƒΡΠΏΠ΅ΡˆΠ½ΠΎ Π°Ρ‚Π°ΠΊΡƒΠ²Π° Сскроу, Ρ‚ΠΎΠΉ ΠΏΠΎΠ»ΡƒΡ‡Π°Π²Π° исканитС Π΄Π²Π° подписа.

АтомСн своп Π΅ схСма Π½Π° ΠΎΠ±ΠΌΠ΅Π½, ΠΏΡ€ΠΈ която Π³Π°Ρ€Π°Π½Ρ‚ΡŠΡ‚ Π΅ смарт ΠΊΠΎΠ½Ρ‚Ρ€Π°ΠΊΡ‚, ΠΊΠΎΠΉΡ‚ΠΎ допуска само чСстно ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅.

ΠšΠ°ΠΊΡ‚ΠΎ Π² Π·Π°Π³Π°Π΄ΠΊΠ°Ρ‚Π° Π·Π° вълка, ΠΊΠΎΠ·Π°Ρ‚Π° ΠΈ капустата, ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π° дСйстватС само ΠΏΠΎ Π΅Π΄ΠΈΠ½ ΠΏΡ€Π°Π²ΠΈΠ»Π΅Π½ сцСнарий ΠΈ понСсСтС Π·Π°Π³ΡƒΠ±ΠΈ, Π°ΠΊΠΎ ΠΎΡ‚ΡΡ‚ΡŠΠΏΠΈΡ‚Π΅ ΠΎΡ‚ Π½Π΅Π³ΠΎ.

Π‘Π°ΠΌΠΎ Ρ‡Π΅ вмСсто Π»Π°ΠΊΠΎΠΌΠΈΡ‚Π΅ ΠΆΠΈΠ²ΠΎΡ‚Π½ΠΈ, Ρ€Π΅Π΄Π° осигурява Ρ…Π΅Ρˆ-функция, ΠΏΡ€ΠΈ която Π΅ Ρ‚ΠΎΠ»ΠΊΠΎΠ²Π° Ρ‚Ρ€ΡƒΠ΄Π½ΠΎ Π΄Π° сС Π½Π°ΠΌΠ΅Ρ€ΠΈ колизия, Ρ‡Π΅ Π΄ΠΎΡ€ΠΈ Π½Π΅ си заслуТава Π΄Π° Π·Π°ΠΏΠΎΡ‡Π²Π°Ρˆ.

Π‘Ρ‚ΡŠΠΏΠΊΠ° ΠΏΡŠΡ€Π²Π°: Π·Π°Π³Π°Π΄ΠΊΠ°Ρ‚Π°

НСка ΠΏΡ€Π΅Π΄ΠΏΠΎΠ»ΠΎΠΆΠΈΠΌ, Ρ‡Π΅ Алиса Π΅Π΄Π½Π° страхотна ΡƒΡ‚Ρ€ΠΈΠ½ иска Π΄Π° ΠΏΡ€Π΅Π΄Π°Π΄Π΅ Π±ΠΈΡ‚ΠΊΠΎΠΉΠ½ΠΈ Π½Π° Π‘ΠΎΠ± срСщу шСпа "ΠΊΡ€ΠΈΠΏΡ‚ΠΎΡŽΠ°Π½ΠΈ".

  • Вя Π·Π°Π³Π°Π΄Π²Π° някаква голяма Ρ‚Π°ΠΉΠ½Π°
  • ΠŸΠΎΠ»ΡƒΡ‡Π°Π²Π° ΠΎΡ‚ Π½Π΅Π³ΠΎ Ρ…Π΅Ρˆ
  • ΠŸΡ€Π΅Π²Π΅ΠΆΠ΄Π° Π±ΠΈΡ‚ΠΊΠΎΠΉΠ½ΠΈΡ‚Π΅ Π½Π° смарт ΠΊΠΎΠ½Ρ‚Ρ€Π°ΠΊΡ‚, ΠΎΡ‚ ΠΊΠΎΠΉΡ‚ΠΎ ΠΏΠ°Ρ€ΠΈΡ‚Π΅ ΠΌΠΎΠΆΠ΅ Π΄Π° Π²Π·Π΅ΠΌΠ΅ Π‘ΠΎΠ±, прСдставяйки Ρ‚Π°ΠΉΠ½Π°Ρ‚Π° (Ρ…Π΅Ρˆ Π½Π° нСя трябва Π΄Π° съвпада с ΡƒΠΊΠ°Π·Π°Π½ΠΎΡ‚ΠΎ Π² Π΄ΠΎΠ³ΠΎΠ²ΠΎΡ€Π°)
  • Π’ случай, Ρ‡Π΅ Π‘ΠΎΠ± Π½Π΅ сС появи Π·Π° Π±ΠΈΡ‚ΠΊΠΎΠΉΠ½ΠΈΡ‚Π΅ си Π²Π΅Ρ‡Π΅Ρ€Ρ‚Π°, Алиса ΠΌΠΎΠΆΠ΅ Π΄Π° Π³ΠΈ Π²Π·Π΅ΠΌΠ΅ ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎ.

Π‘Ρ‚ΡŠΠΏΠΊΠ° Π²Ρ‚ΠΎΡ€Π°: ΠΏΡ€ΠΈΠΌΠ°ΠΌΠΊΠ°Ρ‚Π°

Π’ ΠΈΠ³Ρ€Π°Ρ‚Π° Π²Π»ΠΈΠ·Π° Π‘ΠΎΠ± ΠΈ ΠΏΡ€Π΅Π²Π΅ΠΆΠ΄Π° "ΠΊΡ€ΠΈΠΏΡ‚ΠΎΠ΅Π²Ρ€ΠΎ" Π½Π° своя ΠΊΠΎΠ½Ρ‚Ρ€Π°ΠΊΡ‚, ΠΊΠΎΠΉΡ‚ΠΎ Π΅ написан ΠΏΠΎ Ρ‚Π°ΠΊΡŠΠ² Π½Π°Ρ‡ΠΈΠ½, Ρ‡Π΅:

  • Алиса ΠΌΠΎΠΆΠ΅ Π΄Π° Π²Π·Π΅ΠΌΠ΅ "ΠΊΡ€ΠΈΠΏΡ‚ΠΎΡŽΠ°Π½ΠΈΡ‚Π΅", прСдставяйки сСкрСтно число
  • НС ΠΏΠΎ-Ρ€Π°Π½ΠΎ ΠΎΡ‚ обяд Π‘ΠΎΠ±, ΠΏΡ€ΠΈ ΠΎΡ‚ΡΡŠΡΡ‚Π²ΠΈΠ΅ Π½Π° Алиса, ΠΌΠΎΠΆΠ΅ Π΄Π° Π²ΡŠΡ€Π½Π΅ Π΄Π΅ΠΏΠΎΠ·ΠΈΡ‚Π°

Π‘Ρ‚ΡŠΠΏΠΊΠ° Ρ‚Ρ€Π΅Ρ‚Π°: ΠΎΡ‚Π³ΠΎΠ²ΠΎΡ€ΡŠΡ‚ Π² ΠΏΡ€ΠΈΠΌΠ°ΠΌΠΊΠ°Ρ‚Π°

Алисата ΠΈΠ΄Π²Π° Π·Π° своитС ΠΏΠ°Ρ€ΠΈ ΠΈ Π²Π·ΠΈΠΌΠ° ΠΏΠ°Ρ€ΠΈΡ‚Π΅ ΠΎΡ‚ Π΄ΠΎΠ³ΠΎΠ²ΠΎΡ€Π° Π½Π° Π‘ΠΎΠ±, Ρ€Π°Π·ΠΊΡ€ΠΈΠ²Π°ΠΉΠΊΠΈ Π² ΡΡŠΡ‰ΠΎΡ‚ΠΎ Π²Ρ€Π΅ΠΌΠ΅ своята Ρ‚Π°ΠΉΠ½Π°.

Π—Π°Π²ΡŠΡ€ΡˆΠΈΡ‚Π΅Π»Π½Π° ΡΡ‚ΡŠΠΏΠΊΠ°: Π·Π°Π³Π°Π΄ΠΊΠ°Ρ‚Π° Π΅ Ρ€Π°Π·Π³Π°Π΄Π°Π½Π°

Вранзакцията Π²ΠΈΠΆΠ΄Π° Π‘ΠΎΠ± ΠΈ с ΠΎΡ€Π»ΠΈΠ½ΠΎ ΠΎΠΊΠΎ ΠΈΠ·Π²Π΅ΠΆΠ΄Π° ΠΎΡ‚ нСя Ρ‚Π°ΠΉΠ½Π°Ρ‚Π°, прСдставСна ΠΎΡ‚ Алисата Π½Π° Π΄ΠΎΠ³ΠΎΠ²ΠΎΡ€Π°. Π’Π°Π·ΠΈ Ρ‚Π°ΠΉΠ½Π° Ρ‚ΠΎΠΉ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°, Π·Π° Π΄Π° Π²Π·Π΅ΠΌΠ΅ Π²Π΅Ρ‡Π΅ своитС Π±ΠΈΡ‚ΠΊΠΎΠΉΠ½ΠΈ.

ΠšΠΎΠ³Π°Ρ‚ΠΎ Π½Π΅Ρ‰ΠΎ Π²ΡŠΡ€Π²ΠΈ Π½Π° Π·Π»Π΅

Ако Алисата извСднъТ сС ΠΎΠΊΠ°ΠΆΠ΅ ΡΠΌΡŠΡ€Ρ‚Π½Π°, Π‘ΠΎΠ± обядва ΠΈ Π²Π·ΠΈΠΌΠ° своитС юани.

ΠžΡ‚ своя страна, Алисата Π²Π΅Ρ‡Π΅Ρ€Ρ‚Π° Π²Ρ€ΡŠΡ‰Π° Π±ΠΈΡ‚ΠΊΠΎΠΉΠ½Π°, Π°ΠΊΠΎ вСроломният Π‘ΠΎΠ± Ρ€Π΅ΡˆΠΈ Π΄Π° Π·Π°Π΄ΡŠΡ€ΠΆΠΈ ΠΏΠ°Ρ€ΠΈΡ‚Π΅ Π΄ΠΎ ΠΏΠΎ-Π΄ΠΎΠ±Ρ€ΠΈ Π²Ρ€Π΅ΠΌΠ΅Π½Π°.

Ако ΠΏΡ€Π΅Π΄ΠΏΠΎΡ‡ΠΈΡ‚Π°Ρ‚Π΅ ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ ΠΏΡ€Π΅Π΄ тСкст, Π½Π° Π₯Π°Π±Ρ€Π° ΠΈΠΌΠ° Π·Π° вас ΠΏΠΎ-ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½ΠΎ ΠΈ Π²ΠΈΠ·ΡƒΠ°Π»Π½ΠΎ обяснСниС Π·Π° Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚Π° Π½Π° Π°Ρ‚ΠΎΠΌΠ½ΠΈΡ‚Π΅ своповС.

Π Π°Π·Π»ΠΈΠΊΠ°Ρ‚Π° ΠΌΠ΅ΠΆΠ΄Ρƒ Ρ‚Π°ΠΉΠΌΠ°ΡƒΡ‚ΠΈΡ‚Π΅ Π΅ ΠΏΡ€Π΅Π΄Π½Π°Π·Π½Π°Ρ‡Π΅Π½Π° Π΄Π° Π½ΠΈ застрахова ΠΎΡ‚ Π·Π»ΠΎΠ½Π°ΠΌΠ΅Ρ€Π΅Π½Π°Ρ‚Π° Алиса, която Π²Π·ΠΈΠΌΠ° ΠΏΠ°Ρ€ΠΈΡ‚Π΅ Π½Π° Π‘ΠΎΠ± Π² Π½Π°ΠΉ-късния ΠΌΠΎΠΌΠ΅Π½Ρ‚, ΠΈ Ρ‚Π°ΠΉΠΌΠ°ΡƒΡ‚ΡŠΡ‚ ΠΈΠ·Ρ‚ΠΈΡ‡Π°, Π΄ΠΎΠΊΠ°Ρ‚ΠΎ Ρ‚ΠΎΠΉ с Ρ‚Ρ€Π΅ΠΏΠ΅Ρ€Π΅Ρ‰ΠΈ ΠΏΡ€ΡŠΡΡ‚ΠΈ въвСТда hex Π² транзакцията.

УчастницитС Π½Π΅ ΠΌΠΎΠ³Π°Ρ‚ Π΄Π° загубят ΠΏΠ°Ρ€ΠΈΡ‚Π΅ си, максимум Ρ‰Π΅ трябва Π΄Π° ΠΈΠ·Ρ‡Π°ΠΊΠ°Ρ‚ Π²ΡŠΠ·ΡΡ‚Π°Π½ΠΎΠ²ΡΠ²Π°Π½Π΅Ρ‚ΠΎ.

ΠŸΠΎΠ΄Π΄Ρ€ΡŠΠΆΠΊΠ° Π² Π±Π»ΠΎΠΊΡ‡Π΅ΠΉΠ½ΠΈΡ‚Π΅Π’ΠΎΠ²Π° Π΅ проста схСма, която изисква ΠΎΡ‚ взаимодСйствалнитС Π±Π»ΠΎΠΊΡ‡Π΅ΠΉΠ½ΠΈ СдинствСно:

  • ΠŸΠΎΠ΄Π΄Ρ€ΡŠΠΆΠΊΠ° Π½Π° смарт Π΄ΠΎΠ³ΠΎΠ²ΠΎΡ€ΠΈ с ΠΏΠΎΠ½Π΅ Π΅Π΄Π½ΠΎ Ρ€Π°Π·ΠΊΠ»ΠΎΠ½Π΅Π½ΠΈΠ΅
  • И Π΄Π²Π°Ρ‚Π° Π±Π»ΠΎΠΊΡ‡Π΅ΠΉΠ½Π° трябва Π΄Π° ΠΏΠΎΠ΄Π΄ΡŠΡ€ΠΆΠ°Ρ‚ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ‡Π½ΠΈ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠΈ Π·Π° Ρ…Π΅ΡˆΠΈΡ€Π°Π½Π΅ (Π½Π΅ забравяйтС Π΄Π° ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΡ‚Π΅ Π΄ΡŠΠ»ΠΆΠΈΠ½Π°Ρ‚Π° Π½Π° Ρ‚Π°ΠΉΠ½Π°Ρ‚Π°)
  • Π’Π°ΠΉΠΌΠ»ΠΎΠΊΠΎΠ²Π΅.

На ΠΏΡ€ΡŠΠ² ΠΏΠΎΠ³Π»Π΅Π΄, Π²Π΅Ρ‡Π΅ ΠΌΠΎΠΆΠ΅ΠΌ Π΄Π° ΠΊΠ°ΠΆΠ΅ΠΌ Π½Π° борсата "сбогом, Π½Π°ΡˆΠ°Ρ‚Π° срСща бСшС Π³Ρ€Π΅ΡˆΠΊΠ°", Π½ΠΎ Π½Π΅ Ρ‚Π°ΠΊΠ° лСсно.

ΠŸΡ€ΠΈ всички свои прСдимства, Ρ€Π΅ΡˆΠ΅Π½ΠΈΡΡ‚Π° Π½Π° Π°Ρ‚ΠΎΠΌΠ΅Π½ своп Π½Π΅ блСстят с ликвидност. По-голямата част ΠΎΡ‚ Ρ‚ΠΎΠ²Π° Π΅, Π·Π°Ρ‰ΠΎΡ‚ΠΎ Π² Π½Π°ΠΉ-популярната Π΄Π²ΠΎΠΉΠΊΠ° BTC-USD, Ρ„ΠΈΠ°Ρ‚Π½Π°Ρ‚Π° част Π½Π΅ Π΅ напълно Ρ‚ΠΎΠΊΠ΅Π½ΠΈΠ·ΠΈΡ€Π°Π½Π°.
Π£ΡΠΏΠ΅Ρ…ΡŠΡ‚ Π½Π° USDT Ρ…Π²ΡŠΡ€Π»ΠΈ цяла вълна ΠΎΡ‚ стабилни ΠΌΠΎΠ½Π΅Ρ‚ΠΈ във Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ ERC20 Π·Π° всСки вкус, ΠΎΡ‚ Π½Π°ΠΉ-костодиалния USDC Π΄ΠΎ Π½Π°ΠΉ-алгоритмичния DAI.

Π‘Π»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»Π½ΠΎ Π·Π° простота Ρ‰Π΅ Ρ€Π°Π·ΡΡŠΠΆΠ΄Π°Π²Π°ΠΌΠ΅ Π½Π°Ρ‚Π°Ρ‚ΡŠΠΊ, Ρ‡Π΅ Алисата ΠΏΡ€ΠΎΠ΄Π°Π²Π° Π½Π° Π‘ΠΎΠ± Π±ΠΈΡ‚ΠΊΠΎΠΉΠ½ΠΈ Π·Π° някакви ERC20 Ρ‚ΠΎΠΊΠ΅Π½ΠΈ ΠΈ сС надявамС Π½Π° ΠΊΡŠΡΠΌΠ΅Ρ‚Π° Π½Π° стабилизаторитС, Ρ‚ΡŠΠΉ ΠΊΠ°Ρ‚ΠΎ ΠΈΠΌΠ°ΠΌΠ΅ ΠΌΠ½ΠΎΠ³ΠΎ ΠΏΠΎ-тСхничСски ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠΈ.

Бкорост

Π‘ΠΈΡ‚ΠΊΠΎΠΉΠ½ ΠΈ Ethereum ΠΏΠΎΠΎΡ‚Π΄Π΅Π»Π½ΠΎ Π½Π΅ са ΠΏΡ€Π΅ΠΊΠ°Π»Π΅Π½ΠΎ Π±ΡŠΡ€Π·ΠΈ, Π° Ρ‚ΡƒΠΊ трябва Π΄Π° ΠΈΠ·Ρ‡Π°ΠΊΠ°ΠΌΠ΅ ΠΏΡŠΡ€Π²ΠΎ Π΅Π΄ΠΈΠ½ Π΄Π΅ΠΏΠΎΠ·ΠΈΡ‚ с всички ΠΏΠΎΡ‚Π²ΡŠΡ€ΠΆΠ΄Π΅Π½ΠΈΡ, слСд Ρ‚ΠΎΠ²Π° Π²Ρ‚ΠΎΡ€ΠΈ.

Всичко Ρ‚ΠΎΠ²Π° сС дълТи Π½Π° Ρ„Π°ΠΊΡ‚Π°, Ρ‡Π΅ ΠΏΡŠΡ€Π²ΠΎ ΠΏΠ°Ρ€ΠΈΡ‚Π΅ внася ΡƒΡ‡Π°ΡΡ‚Π½ΠΈΠΊΡŠΡ‚, ΠΊΠΎΠΉΡ‚ΠΎ Π·Π½Π°Π΅ Ρ‚Π°ΠΉΠ½Π°Ρ‚Π°, Π° ΠΏΡ€ΠΎΡ‚ΠΈΠ²Π½ΠΈΠΊΡŠΡ‚ Ρ‡Π°ΠΊΠ° Ρ„ΠΈΠ½Π°Π»ΠΈΠ·ΠΈΡ€Π°Π½Π΅Ρ‚ΠΎ ΠΈ само Ρ‚ΠΎΠ³Π°Π²Π° ΠΏΡ€Π΅Ρ…Π²ΡŠΡ€Π»Ρ своята част.

ОсвСн Ρ‚ΠΎΠ²Π°, ΠΈΠΌΠ°ΠΌΠ΅ Ρ€Π°Π±ΠΎΡ‚Π° с доста Π²ΠΎΠ»Π°Ρ‚ΠΈΠ»Π½Π° Π°ΠΊΡ‚ΠΈΠ², Ρ‚Π°ΠΊΠ° Ρ‡Π΅ ΠΏΡ€Π΅Π· Ρ‚ΠΎΠ²Π° Π²Ρ€Π΅ΠΌΠ΅ ΠΊΡƒΡ€ΡΡŠΡ‚ ΠΌΠΎΠΆΠ΅ Π΄Π° сС ΠΏΡ€ΠΎΠΌΠ΅Π½ΠΈ Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»Π½ΠΎ, Π° промяната Π½Π° условията Π²Π΅Ρ‡Π΅ Π΅ Ρ‚Ρ€ΡƒΠ΄Π½ΠΎ.

ΠšΠΎΠ½Ρ„ΠΈΠ΄Π΅Π½Ρ†ΠΈΠ°Π»Π½ΠΎΡΡ‚

Всяка размяна оставя Π°Ρ€Ρ‚Π΅Ρ„Π°ΠΊΡ‚ΠΈ ΠΈ Π½Π° Π΄Π²Π΅Ρ‚Π΅ Π±Π»ΠΎΠΊΡ‡Π΅ΠΉΠ½ΠΈ. Π’Π½ΠΈΠΌΠ°Ρ‚Π΅Π»Π΅Π½ Π½Π°Π±Π»ΡŽΠ΄Π°Ρ‚Π΅Π» ΠΌΠΎΠΆΠ΅ Π΄Π° Π·Π°Π±Π΅Π»Π΅ΠΆΠΈ Π΅Π΄Π½Π°ΠΊΠ²ΠΈ Ρ…Π΅ΡˆΠΎΠ²Π΅ Π² смарт ΠΊΠΎΠ½Ρ‚Ρ€Π°ΠΊΡ‚ΠΈΡ‚Π΅ ΠΈ Π΄Π° Π½Π°ΠΏΡ€Π°Π²ΠΈ Π»ΠΎΠ³ΠΈΡ‡Π΅Π½ ΠΈΠ·Π²ΠΎΠ΄, Ρ‡Π΅ Π΅ ΠΈΠ·Π²ΡŠΡ€ΡˆΠ΅Π½Π° сдСлка, ΠΎΡ‚ ΠΊΠΎΠ΅Ρ‚ΠΎ ΠΌΠΎΠ³Π°Ρ‚ Π΄Π° сС ΠΈΠ·Π²Π»Π΅ΠΊΠ°Ρ‚ мноТСство Π·Π°ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ, ΠΎΡ‚ курсови Π΄ΠΎ Π΄Π°Π½ΡŠΡ‡Π½ΠΈ.

ΠšΠΎΠ³Π°Ρ‚ΠΎ борсата Π·Π½Π°Π΅ Π·Π° Ρ‚Π²ΠΎΠΈΡ‚Π΅ Π΄Π΅Π»Π° β€” Ρ‚ΠΎΠ²Π° Π΅ ΠΈΠ·ΠΊΠ»ΡŽΡ‡ΠΈΡ‚Π΅Π»Π½ΠΎ нСприятно, ΠΊΠΎΠ³Π°Ρ‚ΠΎ всСки Π·Π½Π°Π΅ Π·Π° тях β€” нСприятноститС сС удвоят.

Удобство

БпСциалността Π½Π° Π±Π»ΠΎΠΊΡ‡Π΅ΠΉΠ½Π° ΠΈΠ·ΠΎΠ±Ρ‰ΠΎ ΠΈ Π½Π° Π΅Ρ„ΠΈΡ€Π° Π² частност. НСка Π΄Π° Π²ΠΈΠ΄ΠΈΠΌ ΠΊΠ°ΠΊΠ²ΠΈ дСйствия трябва Π΄Π° ΠΏΡ€Π΅Π΄ΠΏΡ€ΠΈΠ΅ΠΌΠ°Ρ‚ ΠΏΡ€ΠΎΠ΄Π°Π²Π°Ρ‡ΡŠΡ‚ ΠΈ ΠΊΡƒΠΏΡƒΠ²Π°Ρ‡ΡŠΡ‚.

ΠžΡ‚ Π³Π»Π΅Π΄Π½Π° Ρ‚ΠΎΡ‡ΠΊΠ° Π½Π° ΠΏΡ€ΠΎΠ΄Π°Π²Π°Ρ‡Π° всичко Π΅ сравнитСлно просто: просто трябва Π΄Π° ΠΏΡ€Π΅Π²Π΅Π΄Π΅ Π±ΠΈΡ‚ΠΊΠΎΠΉΠ½ Π½Π° p2sh адрСс. Π‘ Π΅Ρ„ΠΈΡ€Π° всичко Π΅ ΠΌΠ½ΠΎΠ³ΠΎ ΠΏΠΎ-слоТно.

ΠšΠΎΠ½Ρ‚Ρ€Π°ΠΊΡ‚ΠΠ΅ΠΊΠ° Ρ€Π°Π·Π³Π»Π΅Π΄Π°ΠΌΠ΅ срСдСн ΠΊΠΎΠ½Ρ‚Ρ€Π°ΠΊΡ‚ Π·Π° своп ΠΏΠΎ GitHub:

contract iERC20 {
    function totalSupply() public view returns (uint256);
    function transfer(address receiver, uint numTokens) public returns (bool);
    function balanceOf(address tokenOwner) public view returns (uint);
    function approve(address delegate, uint numTokens) public returns (bool);
    function allowance(address owner, address delegate) public view returns (uint);
    function transferFrom(address owner, address buyer, uint numTokens) public returns (bool);
}

contract Swapper {

    struct Swap {
        iERC20 token;
        bytes32 hash;
        uint amount;
        uint refundTime;
        bytes32 secret;
    }

    mapping (address => mapping(address => Swap)) swaps;

    function create(iERC20 token, bytes32 hash, address receiver, uint amount, uint refundTime) public {
        require(swaps[msg.sender][receiver].amount == 0); // check is swap with given hash already exists
        require(token.transferFrom(msg.sender, address(this), amount)); // transfer locked tokens to swap contract
        swaps[msg.sender][receiver] = Swap(token, hash, amount, refundTime, 0x00); //create swap
    }
    
    function hashOf(bytes32 secret) public pure returns(bytes32) {
        return sha256(abi.encodePacked(secret));
    }


    function withdraw(address owner, bytes32 secret) public {
        Swap memory swap = swaps[owner][msg.sender];
        require(swap.secret == bytes32(0));
        require(swap.hash == sha256(abi.encodePacked(secret))); // swap exists
        swaps[owner][msg.sender].secret = secret;
        swap.token.transfer(msg.sender, swap.amount);
    }

    function refund(address receiver) public {
        Swap memory swap = swaps[msg.sender][receiver];
        require(now > swap.refundTime);
        delete swaps[msg.sender][receiver];
        swap.token.transfer(msg.sender, swap.amount);
    }
}

Π’Π½ΠΈΠΌΠ°Π½ΠΈΠ΅! НС ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΉΡ‚Π΅ Ρ‚ΠΎΠ·ΠΈ ΠΈ Π΄Ρ€ΡƒΠ³ΠΈ ΠΊΠΎΠ½Ρ‚Ρ€Π°ΠΊΡ‚ΠΈ ΠΎΡ‚ статията Π² продукция, Ρ‚Π΅ са написани изцяло Π·Π° дСмонстрация. ОсобСно Ρ‚ΠΎΠ·ΠΈ.

  • Π‘ΠΎΠ± трябва Π΄Π° ΠΈΠ·Π²ΠΈΠΊΠ° Π² ΠΊΠΎΠ½Ρ‚Ρ€Π°ΠΊΡ‚Π° Π½Π° Ρ‚ΠΎΠΊΠ΅Π½Π° ΠΌΠ΅Ρ‚ΠΎΠ΄ approve, Π΄Π°Π²Π°ΠΉΠΊΠΈ Π½Π° ΠΊΠΎΠ½Ρ‚Ρ€Π°ΠΊΡ‚Π° Π·Π° своп Π΄ΠΎΡΡ‚ΡŠΠΏ Π΄ΠΎ своитС Ρ‚ΠΎΠΊΠ΅Π½ΠΈ
  • Π‘ΠΎΠ± създава своп ΠΈ ΠΊΠΎΠ½Ρ‚Ρ€Π°ΠΊΡ‚ Ρ‡Ρ€Π΅Π· ΠΌΠ΅Ρ‚ΠΎΠ΄Π° transferFrom Π²Π·Π΅ΠΌΠ° Ρ‚ΠΎΠΊΠ΅Π½ΠΈΡ‚Π΅ Π½Π° ΠΈΠ·ΠΏΡ€Π°Ρ‰Π°Ρ‡Π° Π½Π° своя адрСс
  • Алиса Π² withdraw Ρ€Π°Π·ΠΊΡ€ΠΈΠ²Π° сСкрСт ΠΈ ΠΊΠΎΠ½Ρ‚Ρ€Π°ΠΊΡ‚ΡŠΡ‚ ΠΈΠ·Π²ΠΈΠΊΠ²Π° ΠΏΡ€Π΅Ρ…Π²ΡŠΡ€Π»ΡΠ½Π΅

ΠŸΠΎΠ²Π΅Ρ‡Π΅Ρ‚ΠΎ ΠΏΠΎΡ€Ρ‚Ρ„Π΅ΠΉΠ»ΠΈ ΠΈ криптоборси Π½Π΅ ΠΏΠΎΠ΄Π΄ΡŠΡ€ΠΆΠ°Ρ‚ approve Ρ‚ΠΎΠΊΠ΅Π½ΠΈ, ΠΈ Π½Π΅ Π±Π΅Π· основаниС.

Π‘Π°ΠΌΠΈΡ‚Π΅ ΠΏΠΎΡ‚Ρ€Π΅Π±ΠΈΡ‚Π΅Π»ΠΈ чСсто Π³Ρ€Π΅ΡˆΠ°Ρ‚ ΠΈ просто ΠΏΡ€Π΅Ρ…Π²ΡŠΡ€Π»ΡΡ‚ Ρ‚ΠΎΠΊΠ΅Π½ΠΈ Π½Π° ΠΊΠΎΠ½Ρ‚Ρ€Π°ΠΊΡ‚Π°, слСд ΠΊΠΎΠ΅Ρ‚ΠΎ Ρ‚ΠΎΠΊΠ΅Π½ΠΈΡ‚Π΅ просто сС губят. ΠšΠΎΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΡ‚Π΅ Π² Etherscan са пълни с оплаквания Π½Π° нСщастнитС.

А Π·Π° Π΄Π° сС ΠΈΠ·Π²ΠΈΠΊΠ° ΠΊΠΎΠ½Ρ‚Ρ€Π°ΠΊΡ‚, Π΅ Π½ΡƒΠΆΠ½ΠΎ Π΄Π° сС Π·Π°ΠΏΠ»Π°Ρ‚ΠΈ такса Π² ETH, ΠΊΠΎΠ΅Ρ‚ΠΎ ΠΎΠ·Π½Π°Ρ‡Π°Π²Π°, Ρ‡Π΅ ΠΈ Π΄Π²Π°ΠΌΠ°Ρ‚Π° участници трябва Π΄Π° ΠΈΠΌΠ°Ρ‚ Ρ€Π΅Π·Π΅Ρ€Π²ΠΈ ΠΏΡ€Π΅Π΄ΠΈ Π½Π°Ρ‡Π°Π»ΠΎΡ‚ΠΎ Π½Π° сдСлката, Π° Ρ‚ΠΎΠ²Π° ΠΌΠ°Π»ΠΊΠΎ Ρ…ΠΎΡ€Π° искат Π΄Π° правят.

Π“Π°Π·Π³ΠΎΠ»Π΄Π΅Ρ€

ΠŸΡŠΡ€Π²ΠΎ, трябва Π΄Π° ΠΏΡ€Π΅ΠΌΠ°Ρ…Π½Π΅ΠΌ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ°Ρ‚Π° Π½Π° податСля навсякъдС, ΠΊΡŠΠ΄Π΅Ρ‚ΠΎ Π΅ възмоТно, ΠΈ Π΄Π° ΠΏΡ€Π΅Π΄ΠΏΠΎΠ»ΠΎΠΆΠΈΠΌ, Ρ‡Π΅ ΠΈΠΌΠ°ΠΌΠ΅ някой, ΠΊΠΎΠΉΡ‚ΠΎ страда ΠΎΡ‚ ΠΈΠ·ΠΎΠ±ΠΈΠ»ΠΈΠ΅ Π½Π° Π³Π°Π· ΠΈ ΠΈΠ·Π²ΠΈΠΊΠ²Π° ΠΊΠΎΠ½Ρ‚Ρ€Π°ΠΊΡ‚ΠΈΡ‚Π΅ Π·Π° всички ΠΆΠ΅Π»Π°Π΅Ρ‰ΠΈ.

ΠœΠΎΠ΄Π΅Ρ€Π½ΠΈΠ·ΠΈΡ€Π°Π½ ΠΊΠΎΠ½Ρ‚Ρ€Π°ΠΊΡ‚

contract Swapper {

    struct Swap {
        iERC20 token;
        address receiver;
        uint amount;
        address refundAddress;
        uint refundTime;
    }

    mapping (bytes32 => Swap) swaps;

    function create(iERC20 token, bytes32 hash, address receiver, uint amount, address refundAddress, uint refundTime) public {
        require(swaps[hash].amount == 0); // use hash once
        require(token.transferFrom(msg.sender, address(this), amount));
        swaps[hash] = Swap(token, receiver, amount, refundAddress, refundTime);
    }


    function withdraw(bytes memory secret) public {
        bytes32 hash = sha256(secret);
        Swap memory swap = swaps[hash];
        require(swap.amount > 0);
        delete swaps[hash];
        swap.token.transfer(swap.receiver, swap.amount);
    }

    function refund(bytes32 hash) public {
        Swap memory swap = swaps[hash];
        require(now > swap.refundTime);
        delete swaps[hash];
        swap.token.transfer(swap.refundAddress, swap.amount);
    }
}

Π”ΡƒΠ°Π»ΠΈΠ·ΡŠΠΌ Π½Π° ΠΊΠΎΠ½Ρ‚Ρ€Π°ΠΊΡ‚ΠΈΡ‚Π΅ ΠΈ EIP 712

ΠšΠ°ΠΊΡ‚ΠΎ Π·Π½Π°Π΅ΠΌ, адрСс Π² Π΅Ρ„ΠΈΡ€Π° ΠΌΠΎΠΆΠ΅ Π΄Π° бъдС ΠΊΠΎΠ½Ρ‚Ρ€Π°ΠΊΡ‚ ΠΈΠ»ΠΈ Π΄Π° бъдС субСкт, Ρ‚.Π΅. ΠΊΠ»ΡŽΡ‡.
ΠžΡΠ½ΠΎΠ²Π½ΠΎΡ‚ΠΎ задълТСниС Π½Π° ΠΊΠ»ΡŽΡ‡Π° Π΅ Π΄Π° подписва ΡΡŠΠΎΠ±Ρ‰Π΅Π½ΠΈΡ.

МоТСм Π΄Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΌΠ΅ ΠΊΠΎΠ½Ρ‚Ρ€Π°ΠΊΡ‚ Π‘ΠΎΠ± ΠΊΠ°Ρ‚ΠΎ ΠΈΠ·ΠΏΡ€Π°Ρ‰Π°Ρ‡, ΠΊΠΎΠΉΡ‚ΠΎ ΠΏΡ€Π°Π²ΠΈ всичкитС Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΈ прСдавания, провСрявайки ΠΏΡ€Π΅Π΄ΠΈ Ρ‚ΠΎΠ²Π° подписа Π½Π° ΠΊΠ»ΡŽΡ‡Π° Π‘ΠΎΠ±.

Π‘Π΅Π³Π°, всСки ΠΌΠΎΠΆΠ΅ Π΄Π° спонсорира таксата Π½Π° участника, Π½ΠΎ Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅Ρ‚ΠΎ Π²Π·Π΅ΠΌΠ° само ΠΎΠ½Π·ΠΈ, Π½Π° ΠΊΠΎΠ³ΠΎΡ‚ΠΎ Π΅ извСстСн ΠΊΠ»ΡŽΡ‡ΡŠΡ‚.

Π‘ΠΎΠ±-ΠΊΠΎΠ½Ρ‚Ρ€Π°ΠΊΡ‚

library EIP712ProxyLibrary {
    function hashCommand(address sender, iERC20 token, Swapper swapper, bytes32 hash, address receiver, uint amount, address refundAddress, uint refundTime) public view returns(bytes32);
}

contract ProxyBob {
    address owner;

    constructor(address _owner) public {
        owner = _owner;
    }

    function createSwap(Swapper swapper, iERC20 token, bytes32 hash, address receiver, uint amount, address refundAddress, uint refundTime, uint8 v, bytes32 r, bytes32 s) public {
        require(owner == ecrecover(EIP712ProxyLibrary.hashCommand(address(this), token, swapper, hash, receiver, amount, refundAddress, refundTime), v, r, s));
        token.approve(address(swapper), amount);
        swapper.create(token, hash, receiver, amount, refundAddress, refundTime);
    }
}

Π—Π° Ρ€Π°Π±ΠΎΡ‚Π° с подписи Π½Π° слоТни структури ΠΎΡ‚ Π΄Π°Π½Π½ΠΈ Π² Ethereum ΡΡŠΡ‰Π΅ΡΡ‚Π²ΡƒΠ²Π° стандарт EIP 712, ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π° ΠΏΡ€ΠΎΡ‡Π΅Ρ‚Π΅Ρ‚Π΅ ΠΏΠΎΠ²Π΅Ρ‡Π΅ Π·Π° Π½Π΅Π³ΠΎ Π² Π±Π»ΠΎΠ³Π° Π½Π° ΠΏΠΎΡ€Ρ‚Ρ„Π΅ΠΉΠ»Π° Metamask

РаздСляй и владСй

ЧСсто сцСнарият Π½Π° Ρ…Π°ΠΊΠ²Π°Π½Π΅ Π½Π° Ethereum ΠΊΠΎΠ½Ρ‚Ρ€Π°ΠΊΡ‚ ΠΈΠ·Π³Π»Π΅ΠΆΠ΄Π° Ρ‚Π°ΠΊΠ°:

  • Π£Ρ‡Π°ΡΡ‚Π½ΠΈΠΊΡŠΡ‚ Π²Π»Π°Π³Π° срСдства Π² ΠΊΠΎΠ½Ρ‚Ρ€Π°ΠΊΡ‚Π°
  • Π‘Π»Π΅Π΄ Ρ‚ΠΎΠ²Π° ΠΏΡ€ΠΈΠ±ΠΈΡ€Π° срСдствата
  • НСщо Π½Π΅ Π΅ Π½Π°Ρ€Π΅Π΄
  • Π—Π»ΠΎΡƒΠΌΡ‹ΡˆΠ»Π΅Π½ΠΈΠΊΡŠΡ‚ Π²Π·ΠΈΠΌΠ° ΠΏΠ°Ρ€ΠΈΡ‚Π΅ ΠΎΡ‚Π½ΠΎΠ²ΠΎ ΠΈ ΠΎΡ‚Π½ΠΎΠ²ΠΎ

Ако сС Π²ΡŠΡ€Π½Π΅ΠΌ към нашия ΠΏΡŠΡ€Π²ΠΈ ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Π½Π΅Ρ‰ΠΎ Π½Π΅ Π΅ Π½Π°Ρ€Π΅Π΄, Π°ΠΊΠΎ Π·Π°Π³Π°Π΄ΠΊΠ°Ρ‚Π° Π΅ ΠΏΡ€Π°Π·Π΅Π½ Π½Π°Π±ΠΎΡ€ ΠΎΡ‚ Π±Π°ΠΉΡ‚ΠΎΠ²Π΅.

Как Π΄Π° ΠΎΡ‚ΠΊΡ€Π°Π΄Π½Π΅ΠΌ милионБъздавамС своп с Ρ…Π΅Ρˆ 0x66687aadf862bd776c8fc18b8e9f8e20089714856ee233b3902a591d0d5f2925
Π’ΠΎΠ²Π° Π΅ sha256 ΠΎΡ‚ 0x0000000000000000000000000000000000000000000000000000000000000000
ΠŸΡ€Π΅Π΄Π°Π²Π°ΠΌΠ΅ Ρ‚Π°ΠΉΠ½Π° ΠΈ ΠΏΡ€ΠΈΠ±ΠΈΡ€Π°Π½Π΅ Π½Π° Ρ‚ΠΎΠΊΠ΅Π½ΠΈΡ‚Π΅ си
ΠŸΡ€Π΅Π΄Π°Π²Π°ΠΌΠ΅ ΠΎΡ‚Π½ΠΎΠ²ΠΎ ΠΈ Π²Π·ΠΈΠΌΠ°ΠΌΠ΅ Ρ‡ΡƒΠΆΠ΄ΠΈ, всичко Π·Π°Ρ€Π°Π΄ΠΈ Ρ‚ΠΎΠ²Π°, Ρ‡Π΅ 0 = 0

Бъздавайки ΠΎΡ‚Π΄Π΅Π»Π΅Π½ ΠΊΠΎΠ½Ρ‚Ρ€Π°ΠΊΡ‚ Π·Π° всяка сдСлка, ΠΌΠΎΠΆΠ΅ΠΌ Π΄Π° ΠΈΠ·ΠΎΠ»ΠΈΡ€Π°ΠΌΠ΅ ΠΊΠΎΠ½Ρ‚Ρ€Π°ΠΊΡ‚ΠΈΡ‚Π΅ Π½Π° Π½ΠΈΠ²ΠΎ EVM.

Но ΠΈ Ρ‚ΠΎΠ²Π° Π½Π΅ Π΅ всичко: сСга всяка сдСлка ΠΈΠΌΠ° свой адрСс, Π½Π° ΠΊΠΎΠΉΡ‚ΠΎ ΠΌΠΎΠ³Π°Ρ‚ Π΄Π° сС ΠΏΡ€Π΅Ρ…Π²ΡŠΡ€Π»ΡΡ‚ Ρ‚ΠΎΠΊΠ΅Π½ΠΈ ΠΎΡ‚ всякакъв ΠΏΠΎΡ€Ρ‚Ρ„Π΅ΠΉΠ» ΠΈΠ»ΠΈ борса.

Π˜Π·ΠΎΡΡ‚Π°Π²Π΅Π½ΠΈ ΠΊΠΎΠ½Ρ‚Ρ€Π°ΠΊΡ‚ΠΈ ΠΈ create2

Но сСга Π·Π° всяка сдСлка Π½ΠΈ сС Π½Π°Π»Π°Π³Π° Π΄Π° създавамС ΠΊΠΎΠ½Ρ‚Ρ€Π°ΠΊΡ‚ ΠΈ Π΄Π° Ρ‡Π°ΠΊΠ°ΠΌΠ΅ ΠΊΡƒΠΏΡƒΠ²Π°Ρ‡ΡŠΡ‚ Π΄Π° ΠΏΡ€Π΅Π²Π΅Π΄Π΅ Ρ‚Π°ΠΌ трудовия си β€œΠΊΡ€ΠΈΠΏΡ‚ΠΎΡ„Π΅Π½ΠΈΠ½Π³β€. Π’ схСмата β€œΡΡƒΡ‚Ρ€ΠΈΠ½ ΠΊΠΎΠ½Ρ‚Ρ€Π°ΠΊΡ‚ΠΈ, Π²Π΅Ρ‡Π΅Ρ€ пари” Π²ΠΈΠ½Π°Π³ΠΈ ΡΡŠΡ‰Π΅ΡΡ‚Π²ΡƒΠ²Π° риск, Ρ‡Π΅ ΠΊΡƒΠΏΡƒΠ²Π°Ρ‡ΡŠΡ‚ Ρ‰Π΅ сС ΠΎΡ‚ΠΊΠ°ΠΆΠ΅, Π° Π΅Ρ„ΠΈΡ€ΡŠΡ‚ Π·Π° създаванС Π½Π° ΠΊΠΎΠ½Ρ‚Ρ€Π°ΠΊΡ‚Π° Π²Π΅Ρ‡Π΅ Π΅ ΠΏΠΎΡ…Π°Ρ€Ρ‡Π΅Π½.

НС ΠΌΠΎΠΆΠ΅ Π»ΠΈ Π΄Π° станС Ρ‚Π°ΠΊΠ°, Ρ‡Π΅ сутрин ΠΏΠ°Ρ€ΠΈΡ‚Π΅, Π° Π²Π΅Ρ‡Π΅Ρ€ Π±Π°ΠΉΡ‚ΠΎΠ²Π΅Ρ‚Π΅?

Π’ Ρ…Π°Ρ€Π΄Ρ„ΠΎΡ€ΠΊΠ° Constantinople Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΡ†ΠΈΡ‚Π΅ EIP 1014 Π΄ΠΎΠ±Π°Π²ΠΈΡ…Π° инструкция create2, която създава Π½ΠΎΠ² ΠΊΠΎΠ½Ρ‚Ρ€Π°ΠΊΡ‚ Π½Π° Π΄Π΅Ρ‚Π΅Ρ€ΠΌΠΈΠ½ΠΈΡ€Π°Π½ адрСс

keccak256( 0xff ++ адрСс ++ сол ++ keccak256(init_code))[12:]

КъдС

  • адрСс β€” адрСс Π½Π° фабричния ΠΊΠΎΠ½Ρ‚Ρ€Π°ΠΊΡ‚
  • сол β€” някакво число, Ρ‡ΠΈΠΉΡ‚ΠΎ смисъл Ρ‰Π΅ Ρ€Π°Π·Π±Π΅Ρ€Π΅ΠΌ Π² слСдващия Π΅ΠΏΠΈΠ·ΠΎΠ΄
  • init_code β€” Π±Π°ΠΉΡ‚-ΠΊΠΎΠ΄ Π½Π° ΠΊΠΎΠ½Ρ‚Ρ€Π°ΠΊΡ‚Π° ΠΈ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΈ Π½Π° конструктора.

Π€Π°Π±Ρ€ΠΈΠΊΠ°Π˜Π½ΡΡ‚Ρ€ΡƒΠΊΡ†ΠΈΡΡ‚Π° Ρ€Π°Π±ΠΎΡ‚ΠΈ само Ρ‡Ρ€Π΅Π· assembly, Π·Π°Ρ‚ΠΎΠ²Π° Ρ„Π°Π±Ρ€ΠΈΠΊΠ°Ρ‚Π° ΠΈΠ·Π³Π»Π΅ΠΆΠ΄Π° ΠΌΠ°Π»ΠΊΠΎ ΠΏΠ»Π°ΡˆΠ΅Ρ‰ΠΎ:

contract Factory {
  event Deployed(address addr, uint256 salt);

  function create2(bytes memory code, uint256 salt) public {
    address addr;
    assembly {

      addr := create2(0, add(code, 0x20), mload(code), salt)
    }

    emit Deployed(addr, salt);
  }
}

ΠšΠΎΠ΄ΡŠΡ‚ Π½Π° вашия ΠΊΠΎΠ½Ρ‚Ρ€Π°ΠΊΡ‚ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π° ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚Π΅ Ρ‡Ρ€Π΅Π· web3:

const MyContract = new web3.eth.Contract(ABI, {})
const сode = MyContract.deploy({
    data: BYTECODE,
    arguments: contructorArgs  
}).encodeABI();
const factory = new web3.eth.Contract(FACTORY_ABI, factoryAddress);
tx = factory.methods.create2(сode, salt);

ΠŸΠΎΡ€Π°Π΄ΠΈ ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½Π°Ρ‚Π° ΠΏΠΎΠ΄Π΄Ρ€ΡŠΠΆΠΊΠ° Π² solidity Π³Π°Π·Π° Π·Π° ΠΊΠΎΠ½Ρ‚Ρ€Π°ΠΊΡ‚Π° ΠΌΠΎΠΆΠ΅ Π΄Π° сС изчислява Π½Π΅ΠΏΡ€Π°Π²ΠΈΠ»Π½ΠΎ ΠΏΠΎΡ€Π°Π΄ΠΈ някои нюанси Π½Π° Π΅Ρ„ΠΈΡ€Π°.

ОсобСно ΠΌΠΈΠ»ΠΎ Π΅, Ρ‡Π΅ Π² случай Π½Π° Π½Π΅Π΄ΠΎΡΡ‚Π°Ρ‚ΡŠΡ‡Π΅Π½ Π³Π°Π· ΠΊΠΎΠ½Ρ‚Ρ€Π°ΠΊΡ‚ΡŠΡ‚ ΠΏΠ°Π΄Π° с Π²ΡŠΡ‚Ρ€Π΅ΡˆΠ½Π° Π³Ρ€Π΅ΡˆΠΊΠ°, Π±Π΅Π· Π΄Π° ΡΡŠΠΎΠ±Ρ‰Π°Π²Π°, Ρ‡Π΅ Π³Π°Π·ΡŠΡ‚ Π΅ ΡΠ²ΡŠΡ€ΡˆΠΈΠ», ΠΊΠ°ΠΊΠ²ΠΎΡ‚ΠΎ Π±ΠΈ ΠΌΠΎΠ³Π»ΠΎ Π΄Π° сС ΠΎΡ‡Π°ΠΊΠ²Π°.

Π‘Π΅Π³Π° ΠΌΠΎΠΆΠ΅ΠΌ Π΄Π° ΠΏΡ€Π΅Ρ…Π²ΡŠΡ€Π»ΡΠΌΠ΅ Ρ‚ΠΎΠΊΠ΅Π½ΠΈ към ΠΊΠΎΠ½Ρ‚Ρ€Π°ΠΊΡ‚ΠΈ, Π±Π΅Π· Π΄Π° Π³ΠΈ създавамС ΠΏΡ€Π΅Π΄Π²Π°Ρ€ΠΈΡ‚Π΅Π»Π½ΠΎ, ΠΈ Π½ΠΈΠΊΠΎΠΉ няма Π΄Π° Ρ€Π°Π·Π±Π΅Ρ€Π΅ ΠΊΠ°ΠΊΠ²ΠΎ Ρ‚ΠΎΡ‡Π½ΠΎ ΠΏΡ€Π°Π²ΠΈ ΠΊΠΎΠ½Ρ‚Ρ€Π°ΠΊΡ‚ΡŠΡ‚, ΠΏΡ€Π΅Π΄ΠΈ Π΄Π° Π³ΠΎ ΠΏΡƒΠ±Π»ΠΈΠΊΡƒΠ²Π°ΠΌΠ΅ Π² ΠΌΡ€Π΅ΠΆΠ°Ρ‚Π°.

Π’ΠΎΡ€ΠΎΠ½ Π²ΠΎΡ€ΠΎΠ½ΡŒΠ΅ ΠΎΠΊΠΎ Π½Π΅ Π²Ρ‹ΠΊΠ»ΡŽΠ΅Ρ‚

Ясно Π΅, Ρ‡Π΅ истинският Π°Π½Π°Π»ΠΈΠ·Π°Ρ‚ΠΎΡ€, особСно Ρ‚ΠΎΠ·ΠΈ, ΠΊΠΎΠΉΡ‚ΠΎ Π΅ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠ» Π΄ΠΎΠ±Ρ€ΠΈ инвСстиции Π·Π° Π±ΠΎΡ€Π±Π° с Π²Ρ€Π°Π³ΠΎΠ²Π΅Ρ‚Π΅ Π½Π° Ρ€Π΅ΠΆΠΈΠΌΠ° Ρ‡Ρ€Π΅Π· ΠΏΡ€Π°Π½Π΅ Π½Π° ΠΏΠ°Ρ€ΠΈ, няма Π΄Π° бъдС спрян ΠΎΡ‚ Ρ‚Π°ΠΊΠΈΠ²Π° дСтски Ρ‚Ρ€ΠΈΠΊΠΎΠ²Π΅, ΠΈ слСд ΡΡŠΠ·Π΄Π°Π²Π°Π½Π΅Ρ‚ΠΎ Π½Π° ΠΊΠΎΠ½Ρ‚Ρ€Π°ΠΊΡ‚Π°, всС ΠΏΠ°ΠΊ Ρ‰Π΅ Π²ΠΈΠ΄ΠΈ Ρ…Π΅ΡˆΠ°.

Как Π΄Π° Π½Π°ΠΏΡ€Π°Π²ΠΈΠΌ Ρ‚Π°ΠΊΠ°, Ρ‡Π΅ Ρ…Π΅ΡˆΡŠΡ‚ Π΄Π° Π½Π΅ бъдС Ρ€Π°Π·ΠΊΡ€ΠΈΡ‚?

Бамият своп ΠΏΡ€Π΅Ρ…Π²ΡŠΡ€Π»ΡΠΌΠ΅ Π² ΠΎΡ„Ρ‡Π΅ΠΉΠ½: участницитС обмСнят подписи Π·Π° ΠΏΡ€Π΅Ρ…Π²ΡŠΡ€Π»ΡΠ½Π΅ Π½Π° своп-ΠΊΠΎΠ½Ρ‚Ρ€Π°ΠΊΡ‚Π°, Π° слСд Ρ‚ΠΎΠ²Π° Ρ‚Π°ΠΉΠ½ΠΎ Ρ€Π°Π·ΠΊΡ€ΠΈΠ²Π°Ρ‚ сСкрСт.

Π‘Ρ‚ΡŠΠΏΠΊΠ° ΠΏΠΎ ΡΡ‚ΡŠΠΏΠΊΠ°Π‘ΡŠΠ·Π΄Π°Π²Π°Ρ‚ сС Π΄Π²Π° "мултисига", ΠΎΡ‚ ΠΊΠΎΠΈΡ‚ΠΎ ΠΌΠΎΠ³Π°Ρ‚ Π΄Π° сС Π²Π·Π΅ΠΌΠ°Ρ‚ срСдства ΠΏΡ€ΠΈ Π½Π°Π»ΠΈΡ‡ΠΈΠ΅ Π½Π° подписи ΠΎΡ‚ Алиса ΠΈ Π‘ΠΎΠ±.

Π—Π° Π΄Π° Π½Π΅ станС трагСдия ΠΏΡ€ΠΈ ΠΈΠ·Π»ΠΈΠ·Π°Π½Π΅Ρ‚ΠΎ Π½Π° някой ΠΎΡ‚ участницитС Π² ΠΎΡ„Π»Π°ΠΉΠ½, Ρ‰Π΅ Π΄ΠΎΠ±Π°Π²ΠΈΠΌ стария Π΄ΠΎΠ±ΡŠΡ€ Ρ‚Π°ΠΉΠΌΠ°ΡƒΡ‚.

Алиса ΠΈ Π‘ΠΎΠ± ΠΏΠ°Ρ€Π°Π»Π΅Π»Π½ΠΎ внасят Π΄Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΈ

  • Алиса измисля сСкрСт ΠΈ ΠΏΡ€Π΅Π΄Π°Π²Π° Π½Π° Π‘ΠΎΠ± Ρ…Π΅Ρˆ Π½Π° сСкрСтa ΠΈ подпись Π½Π° транзакцията, която ΠΏΡ€Π΅Ρ…Π²ΡŠΡ€Π»Ρ Π±ΠΈΡ‚ΠΊΠΎΠΉΠ½ΠΈ Π½Π° адрСса Π½Π° свопа.
  • Π‘ΠΎΠ± ΠΏΡ€Π΅Π΄Π°Π²Π° Π½Π° Алиса подпис Π·Π° изтСглянС Π½Π° Ρ‚ΠΎΠΊΠ΅Π½ΠΈΡ‚Π΅ Π½Π° своп ΠΊΠΎΠ½Ρ‚Ρ€Π°ΠΊΡ‚Π° с измислСния Ρ…Π΅Ρˆ.
  • Алиса ΡΡŠΠΎΠ±Ρ‰Π°Π²Π° Π½Π° Π‘ΠΎΠ± тайния сСкрСт.

Π’ Ρ‚ΠΎΠ·ΠΈ ΠΌΠΎΠΌΠ΅Π½Ρ‚ Π½Π°ΡΡ‚ΡŠΠΏΠ²Π° хармония: ΠΈ Алиса, ΠΈ Π‘ΠΎΠ± ΠΌΠΎΠ³Π°Ρ‚ ΠΏΠΎ всяко Π²Ρ€Π΅ΠΌΠ΅ Π΄Π° Π·Π°Π²ΡŠΡ€ΡˆΠ°Ρ‚ сдСлката. Π’ Ρ‚Π°ΠΊΠ°Π²Π° приятСлска атмосфСра Ρ‚Π΅ ΠΌΠΎΠ³Π°Ρ‚ Π΄Π° обмСнят подписи, Π·Π° Π΄Π° изтСглят ΠΏΠ°Ρ€ΠΈ Π½Π° ΠΊΡ€Π°ΠΉΠ½ΠΈ адрСси.

Π—Π° страничния Π½Π°Π±Π»ΡŽΠ΄Π°Ρ‚Π΅Π» Ρ‚ΠΎΠ²Π° ΠΈΠ·Π³Π»Π΅ΠΆΠ΄Π°, сякаш ΠΏΠ°Ρ€ΠΈΡ‚Π΅ са ΠΏΡ€Π΅ΠΌΠΈΠ½Π°Π»ΠΈ ΠΏΡ€Π΅Π· ΠΊΠΎΠ½Ρ‚Ρ€Π°ΠΊΡ‚ с мултиподпис 2 ΠΎΡ‚ 2.

И ΠΎΡ‰Π΅, Ρ‚Π°ΠΊΠ°Π²Π° схСма позволява Π½Π° Π΄Π²Π΅Ρ‚Π΅ страни Π΄Π° правят Π΄Π΅ΠΏΠΎΠ·ΠΈΡ‚ Π΅Π΄Π½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎ, Ρ‚ΡŠΠΉ ΠΊΠ°Ρ‚ΠΎ ΡΠ΅ΠΊΡ€Π΅Ρ‚ΡŠΡ‚ сС измисля Π²Π΅Ρ‡Π΅ слСд всичкитС ΠΏΠΎΡ‚Π²ΡŠΡ€ΠΆΠ΄Π΅Π½ΠΈΡ.

Level 2

Π‘Π΅Π³Π°, ΠΊΠΎΠ³Π°Ρ‚ΠΎ ΠΌΠΎΠΆΠ΅ΠΌ Π΄Π° изтСглямС ΠΏΠ°Ρ€ΠΈ Π½Π° Π΅Π΄ΠΈΠ½ адрСс ΠΈ Π΄Π° Π½Π΅ ΠΏΡƒΠ±Π»ΠΈΠΊΡƒΠ²Π°ΠΌΠ΅ ΠΌΠ΅ΠΆΠ΄ΠΈΠ½Π½Π°Ρ‚Π° транзакция, Π½ΠΈΡ‰ΠΎ Π½Π΅ ΠΏΡ€Π΅Ρ‡ΠΈ Π΄Π° изтСглямС ΠΏΠ°Ρ€ΠΈ Π½Π° няколко адрСса ΠΈ Π΄Π° ΠΈΠ·Π²ΡŠΡ€ΡˆΠ²Π°ΠΌΠ΅ Π½Π΅ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ Π±Ρ€ΠΎΠΉ ΠΌΠ΅ΠΆΠ΄ΠΈΠ½Π½ΠΈ Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΈ. НС Ρ‡Π΅ Ρ‚ΠΎΠ²Π° Π΅ нСобходимият ΠΊΠΎΠΌΠΏΠ»Π΅ΠΊΡ‚ Π·Π° размяна, Π½ΠΎ ΠΊΠΎΠ³Π°Ρ‚ΠΎ Π·Π°ΠΏΠΎΡ‡Π½Π΅Ρˆ Π΄Π° ΡΡŠΠ±ΠΈΡ€Π°Ρˆ своп, Ρ‚Ρ€ΡƒΠ΄Π½ΠΎ Π΅ Π΄Π° ΡΠΏΡ€Π΅Ρˆ.

Π‘Π΅Π³Π° Алиса ΠΈ Π‘ΠΎΠ± ΠΌΠΎΠ³Π°Ρ‚ Π΄Π° сС развихрят. НапримСр, автоматичСски Π΄Π° изчисляват срСдната Ρ†Π΅Π½Π°, обмСняйки ΠΏΠΎ ΡΠ°Ρ‚ΠΎΡˆΠΈ Π² сСкунда ΠΈΠ»ΠΈ просто Π΄Π° ΡΠ²ΡŠΡ€ΠΆΠ°Ρ‚ ΠΌΠ°Ρ€ΠΊΠ΅Ρ‚ΠΌΠ΅ΠΉΠΊΡŠΡ€Π° ΠΈ получатСля Π½Π° ликвидност.

Π‘Ρ‚ΡŠΠΏΠΊΠ° ΠΏΠΎ ΡΡ‚ΡŠΠΏΠΊΠ°

  • ΠŸΡ€ΠΎΠ΄Π°Π²Π°Ρ‡ΡŠΡ‚ измисля сСкрСт ΠΈ ΠΏΡ€Π΅Π΄Π°Π²Π° Π½Π° ΠΊΡƒΠΏΡƒΠ²Π°Ρ‡Π° Ρ…Π΅Ρˆ Π½Π° сСкрСтa ΠΈ подпись Π½Π° транзакция, ΠΊΡŠΠ΄Π΅Ρ‚ΠΎ част ΠΎΡ‚ срСдствата сС ΠΏΡ€Π΅Ρ…Π²ΡŠΡ€Π»ΡΡ‚ Π½Π° p2sh адрСса Π½Π° свопа, Π° ΠΎΡΡ‚Π°Ρ‚ΡŠΠΊΡŠΡ‚ сС Π²Ρ€ΡŠΡ‰Π° Π½Π° адрСса Π½Π° ΠΏΡ€ΠΎΠ΄Π°Π²Π°Ρ‡Π°.
  • ΠšΠ»ΠΈΠ΅Π½Ρ‚ прСдоставя подпис, ΠΊΠΎΠΉΡ‚ΠΎ позволява ΠΈΠ·Π²Π΅ΠΆΠ΄Π°Π½Π΅Ρ‚ΠΎ Π½Π° Ρ‚ΠΎΠΊΠ΅Π½ΠΈ ΠΈ ΠΎΡΡ‚Π°Ρ‚ΡŠΠΊΠ° Π½Π° адрСса Π½Π° получатСля.
  • ΠŸΡ€ΠΎΠ΄Π°Π²Π°Ρ‡ΡŠΡ‚ Ρ€Π°Π·ΠΊΡ€ΠΈΠ²Π° Ρ‚Π°ΠΉΠ½Π°
  • Π˜ΡΡ‚ΠΎΡ€ΠΈΡΡ‚Π° сС повтаря с Π½ΠΎΠ²Π° Ρ‚Π°ΠΉΠ½Π°, ΠΊΠ°Ρ‚ΠΎ към свопа ΠΈ ΠΎΡΡ‚Π°Ρ‚ΡŠΠΊΠ° сС добавя ΠΈ ΠΈΠ·Π²Π΅ΠΆΠ΄Π°Π½Π΅Ρ‚ΠΎ Π½Π° ΠΏΡ€Π΅Π΄ΠΈ Π·Π°ΠΊΡƒΠΏΠ΅Π½ΠΎΡ‚ΠΎ Π½Π° адрСса Π½Π° ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π° ΠΈ Π²Π΅Ρ‡Π΅ ΠΏΠ»Π°Ρ‚Π΅Π½ΠΎΡ‚ΠΎ Π½Π° адрСса Π½Π° ΠΏΡ€ΠΎΠ΄Π°Π²Π°Ρ‡Π°.

Π‘Π΅Π³Π° ΠΈΠΌΠ°ΠΌΠ΅ Π΄ΠΎΡΡ‚ΡŠΠΏ Π΄ΠΎ високо скоростна p2p Ρ‚ΡŠΡ€Π³ΠΎΠ²ΠΈΡ, Π²Π°ΠΆΠ½ΠΎ Π΅ Π΄Π° слСдим Π²Ρ€Π΅ΠΌΠ΅Ρ‚ΠΎ ΠΈ Π΄Π° Π·Π°Ρ‚Π²ΠΎΡ€ΠΈΠΌ сдСлката ΠΏΡ€Π΅Π΄ΠΈ Ρ‚Π°ΠΉΠΌΠ°ΡƒΡ‚Π°.

Но с Π»Π΅ΠΊΠΎ ΠΊΠΎΡ€ΠΈΠ³ΠΈΡ€Π°Π½Π΅ Π½Π° Π½Π°ΡˆΠΈΡ‚Π΅ Π΄ΠΎΠ³ΠΎΠ²ΠΎΡ€ΠΈ ΠΌΠΎΠΆΠ΅ΠΌ Π΄Π° ΠΏΠΎΠ΄Π°Ρ€ΠΈΠΌ Π±Π΅Π·ΡΠΌΡŠΡ€Ρ‚ΠΈΠ΅ Π½Π° Π½Π°ΡˆΠΈΡ‚Π΅ ΠΊΠ°Π½Π°Π»ΠΈ, ΠΊΠΎΠ΅Ρ‚ΠΎ Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»Π½ΠΎ Ρ‰Π΅ улСсни ΡΡŠΠ·Π΄Π°Π²Π°Π½Π΅Ρ‚ΠΎ Π½Π° ΠΌΡ€Π΅ΠΆΠ°.

Но Π·Π° Ρ‚ΠΎΠ²Π° Ρ‰Π΅ Ρ€Π°Π·ΠΊΠ°ΠΆΠ΅ΠΌ Π² слСдващата сСрия.

Π˜Π·Ρ‚ΠΎΡ‡Π½ΠΈΠΊ: habr.com

ΠšΡƒΠΏΠ΅Ρ‚Π΅ Π½Π°Π΄Π΅ΠΆΠ΄Π΅Π½ хостинг Π·Π° сайтовС със Π·Π°Ρ‰ΠΈΡ‚Π° ΠΎΡ‚ DDoS, VPS ΠΈ VDS ΡΡŠΡ€Π²ΡŠΡ€ΠΈ πŸ”₯ ΠšΡƒΠΏΠ΅Ρ‚Π΅ Π½Π°Π΄Π΅ΠΆΠ΄Π΅Π½ хостинг Π·Π° сайтовС със Π·Π°Ρ‰ΠΈΡ‚Π° ΠΎΡ‚ DDoS, VPS ΠΈ VDS ΡΡŠΡ€Π²ΡŠΡ€ΠΈ | ProHoster