Π‘Π»ΡΡΡŠΠΊ ΠΈ Π½ΠΈΡ‰Π΅Ρ‚Π° Π½Π° atomic swaps

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

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

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

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

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

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

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

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

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

ΠšΠ°ΠΊΡ‚ΠΎ Π² Π·Π°Π³Π°Π΄ΠΊΠ°Ρ‚Π° Π·Π° вълка, ΠΊΠΎΠ·Π°Ρ‚Π° ΠΈ Π·Π΅Π»Π΅, моТСш Π΄Π° Π΄Π΅ΠΉΡΡ‚Π²Π°Ρˆ само ΠΏΠΎ СдинствСния ΠΏΡ€Π°Π²ΠΈΠ»Π΅Π½ сцСнарий ΠΈ носиш Π·Π°Π³ΡƒΠ±ΠΈ, Π°ΠΊΠΎ ΠΎΡ‚ΠΊΠ»ΠΎΠ½ΡΠ²Π°Ρˆ ΠΎΡ‚ Π½Π΅Π³ΠΎ.

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

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

ΠŸΡ€Π΅Π΄ΠΏΠΎΠ»ΠΎΠΆΠΈΠΌ, Ρ‡Π΅ Алиса Π΅Π΄Π½Π° прСкрасна сутрин иска Π΄Π° ΠΏΡ€Π΅Π΄Π°Π΄Π΅ Π½Π° Π‘ΠΎΠ± Π±ΠΈΡ‚ΠΊΠΎΠΉΠ½ Π² замяна Π½Π° ΠΊΡƒΠΏΡ‡ΠΈΠ½Π° β€žΠΊΡ€ΠΈΠΏΡ‚ΠΎΡŽΠ°Π½ΠΈβ€œ.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Бкорост

Π‘ΠΈΡ‚ΠΊΠΎΠΉΠ½ ΠΈ Ethereum самостоятСлно Π½Π΅ са Ρ‡Π°ΠΊ Ρ‚ΠΎΠ»ΠΊΠΎΠ²Π° Π±ΡŠΡ€Π·ΠΈ, Π° сСга Ρ‡Π°ΠΊ Ρ‚ΠΎΠ»ΠΊΠΎΠ²Π° Π½ΠΈ сС Π½Π°Π»Π°Π³Π° Π΄Π° ΠΈΠ·Ρ‡Π°ΠΊΠ°ΠΌΠ΅ ΠΏΡŠΡ€Π²ΠΎ Π΅Π΄ΠΈΠ½ Π΄Π΅ΠΏΠΎΠ·ΠΈΡ‚ с всички ΠΏΠΎΡ‚Π²ΡŠΡ€ΠΆΠ΄Π΅Π½ΠΈΡ, послС Π²Ρ‚ΠΎΡ€ΠΈ.

Всичко Ρ‚ΠΎΠ²Π° Π΅, Π·Π°Ρ‰ΠΎΡ‚ΠΎ ΠΏΡŠΡ€Π²ΠΎ ΠΏΠ°Ρ€ΠΈΡ‚Π΅ внася ΡƒΡ‡Π°ΡΡ‚Π½ΠΈΠΊΡŠΡ‚, ΠΊΠΎΠΉΡ‚ΠΎ Π·Π½Π°Π΅ Ρ‚Π°ΠΉΠ½Π°Ρ‚Π°, Π° ΠΎΠΏΠΎΠ½Π΅Π½Ρ‚ΡŠΡ‚ Ρ‡Π°ΠΊΠ° финализация ΠΈ Π΅Π΄Π²Π° слСд Ρ‚ΠΎΠ²Π° ΠΏΡ€Π΅Π²Π΅ΠΆΠ΄Π° своята част.

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

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

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

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

Usability

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

ΠžΡ‚ Π³Π»Π΅Π΄Π½Π° Ρ‚ΠΎΡ‡ΠΊΠ° Π½Π° ΠΏΡ€ΠΎΠ΄Π°Π²Π°Ρ‡Π° всичко Π΅ сравнитСлно просто: просто трябва Π΄Π° ΠΏΡ€Π΅Π²Π΅Π΄Π΅ Π±ΠΈΡ‚ΠΊΠΎΠΉΠ½ Π½Π° 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, Π·Π°Ρ‚ΠΎΠ²Π° ΠΈ Π΄Π²Π΅Ρ‚Π΅ страни трябва Π΄Π° ΠΈΠΌΠ°Ρ‚ Π½Π°Π»ΠΈΡ‡Π½ΠΎ 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 ++ address ++ salt ++ keccak256(init_code))[12:]

ΠšΡŠΠ΄Π΅Ρ‚ΠΎ

  • address β€” адрСс Π½Π° фабричния ΠΊΠΎΠ½Ρ‚Ρ€Π°ΠΊΡ‚
  • salt β€” някакво число, ΡΠΌΠΈΡΡŠΠ»ΡŠΡ‚ Π½Π° ΠΊΠΎΠ΅Ρ‚ΠΎ Ρ‰Π΅ Ρ€Π°Π·Π±Π΅Ρ€Π΅ΠΌ Π² слСдващата сСрия
  • 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 ΠΊΠΎΠ΄ = MyContract.deploy({
    data: BYTECODE,
    arguments: contructorArgs  
}).encodeABI();
const factory = new web3.eth.Contract(FACTORY_ABI, factoryAddress);
tx = factory.methods.create2(ΠΊΠΎΠ΄, salt);

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

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

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

Π’ΠΎΡ€ΠΎΠ½ Π²ΠΎΡ€ΠΎΠ½Ρƒ ΠΎΠΊΠΎ Π½Π΅ ΠΈΠ·Π²Π°ΠΆΠ΄Π°.

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

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

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

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

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

Алиса ΠΈ Π‘ΠΎΠ± ΠΏΠ°Ρ€Π°Π»Π΅Π»Π½ΠΎ Π΄Π΅ΠΏΠΎΠ·ΠΈΡ€Π°Ρ‚ срСдства.

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

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

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

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

Level 2.

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

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

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

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

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

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

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

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

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