Π Π°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊ ΠΡΠΈΡΡΠΎΡ ΠΠ΅ΡΠ΄ΠΎ ΡΠ°ΡΡΠΊΠ°Π·ΡΠ²Π°Π΅Ρ ΠΎΠ± ΠΎΠ½Π»Π°ΠΉΠ½-ΠΊΡΡΡΠ΅ β
Π Π°ΡΡΠΊΠ°ΠΆΠΈΡΠ΅ Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ ΠΎ ΡΠ΅Π±Π΅. Π§Π΅ΠΌ Π²Π°Ρ Π·Π°ΠΈΠ½ΡΠ΅ΡΠ΅ΡΠΎΠ²Π°Π» ΡΡΠΎΡ ΠΊΡΡΡ?
Π― Π·Π°Π½ΠΈΠΌΠ°ΡΡΡ Π²Π΅Π±-ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠΎΠΉ ΠΎΠΊΠΎΠ»ΠΎ 15 Π»Π΅Ρ, Π² ΠΎΡΠ½ΠΎΠ²Π½ΠΎΠΌ, ΠΊΠ°ΠΊ ΡΡΠΈΠ»Π°Π½ΡΠ΅Ρ.
Π Π°Π·ΡΠ°Π±Π°ΡΡΠ²Π°Ρ Π²Π΅Π±-ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π΄ΠΎΠ»Π³ΠΎΡΡΠΎΡΠ½ΠΎΠ³ΠΎ ΡΠ΅Π³ΠΈΡΡΡΠ° Π΄Π»Ρ ΡΠ°Π·Π²ΠΈΠ²Π°ΡΡΠΈΡ ΡΡ ΡΡΡΠ°Π½ ΠΏΠΎ Π·Π°ΠΊΠ°Π·Ρ ΠΎΠ΄Π½ΠΎΠΉ Π±Π°Π½ΠΊΠΎΠ²ΡΠΊΠΎΠΉ Π³ΡΡΠΏΠΏΡ, Ρ ΡΡΠΎΠ»ΠΊΠ½ΡΠ»ΡΡ Ρ Π·Π°Π΄Π°ΡΠ΅ΠΉ ΠΈΠ½ΡΠ΅Π³ΡΠ°ΡΠΈΠΈ Π² Π½Π΅Π³ΠΎ Π±Π»ΠΎΠΊΡΠ΅ΠΉΠ½-ΡΠ΅ΡΡΠΈΡΠΈΠΊΠ°ΡΠΈΠΈ. Π ΡΠΎ Π²ΡΠ΅ΠΌΡ Ρ Π½Π΅ ΠΎΡΠ΅Π½Ρ ΠΌΠ½ΠΎΠ³ΠΎ Π·Π½Π°Π» ΠΎ Π±Π»ΠΎΠΊΡΠ΅ΠΉΠ½-ΡΠ΅ΡΡΠΈΡΠΈΠΊΠ°ΡΠΈΠΈ, Ρ ΠΎΡΡ ΡΠΆΠ΅ ΠΈ ΠΈΠ½ΡΠ΅ΡΠ΅ΡΠΎΠ²Π°Π»ΡΡ ΠΊΡΠΈΠΏΡΠΎ-ΡΠ΅Ρ Π½ΠΎΠ»ΠΎΠ³ΠΈΡΠΌΠΈ β Π² ΠΎΡΠ½ΠΎΠ²Π½ΠΎΠΌ, ΠΊΠ°ΠΊ ΠΈΠ½Π²Π΅ΡΡΠΎΡ.
Π ΠΈΡΠΎΠ³Π΅ ΡΡΠ° ΡΡΠ½ΠΊΡΠΈΡ Π½Π΅ Π±ΡΠ»Π° ΡΠ΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Π°, Π½ΠΎ, Π·Π°Π΄ΡΠΌΠ°Π²ΡΠΈΡΡ ΠΎ ΡΠΎΠΌ, ΡΡΠΎ ΠΎΡΠ³Π°Π½ΠΈΠ·Π°ΡΠΈΠΈ ΠΈ Π±Π°Π½ΠΊΠΈ Π·Π°ΠΈΠ½ΡΠ΅ΡΠ΅ΡΠΎΠ²Π°Π½Ρ Π² ΡΠ°ΠΊΠΎΠΌ ΡΠ΅ΡΠ΅Π½ΠΈΠΈ Π΄Π»Ρ ΡΠ²ΠΎΠΈΡ
ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ, Ρ Π·Π°Π½ΡΠ»ΡΡ ΠΈΠ·ΡΡΠ΅Π½ΠΈΠ΅ΠΌ Π²ΠΎΠΏΡΠΎΡΠ° ΠΈ ΡΠΊΠΎΡΠΎ Π·Π°ΠΏΡΡΡΠΈΠ» ΠΏΡΠΎΠ΅ΠΊΡ
Π― ΡΠ°Π·ΡΠ°Π±ΠΎΡΠ°Π» Π΅Π³ΠΎ Π±Π΅ΡΠ°-Π²Π΅ΡΡΠΈΡ, ΠΊΠΎΡΠΎΡΠ°Ρ ΡΠΆΠ΅ Π΄ΠΎΡΡΡΠΏΠ½Π° Π² ΠΎΡΠ½ΠΎΠ²Π½ΠΎΠΉ ΡΠ΅ΡΠΈ. Π ΡΠΎ Π²ΡΠ΅ΠΌΡ [ΡΠ·ΡΠΊΠ° ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΡ Waves] Ride Π΅ΡΠ΅ Π½Π΅ Π±ΡΠ»ΠΎ, ΠΈ Ρ Π΄Π΅Π»Π°Π» Π²ΡΠ΅ ΠΏΡΠΎΡΡΠ΅ΠΉΡΠΈΠΌ ΡΠΏΠΎΡΠΎΠ±ΠΎΠΌ, ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡ ΡΡΠ°Π½Π·Π°ΠΊΡΠΈΠΈ ΠΏΠ΅ΡΠ΅Π²ΠΎΠ΄Π° Ρ Π²Π»ΠΎΠΆΠ΅Π½Π½ΡΠΌ JSON. ΠΠΎ ΠΎΡΠ½ΠΎΠ²Π½Π°Ρ ΡΠ΅Π»Ρ Π±ΡΠ»Π° Π² ΡΠΎΠΌ, ΡΡΠΎΠ±Ρ Π΄ΠΎΠ±Π°Π²ΠΈΡΡ Π±ΠΎΠ»Π΅Π΅ ΠΏΡΠΎΠ΄Π²ΠΈΠ½ΡΡΡΠΉ ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π» ΠΏΠΎΡΠ»Π΅ Π·Π°ΠΏΡΡΠΊΠ° Ride. Π ΡΡΠΎ β Π³Π»Π°Π²Π½Π°Ρ ΠΏΡΠΈΡΠΈΠ½Π°, ΠΏΠΎ ΠΊΠΎΡΠΎΡΠΎΠΉ Ρ ΠΏΡΠΈΡΠΎΠ΅Π΄ΠΈΠ½ΠΈΠ»ΡΡ ΠΊ ΠΊΡΡΡΡ: ΡΠ»Π΅Π΄ΡΡΡΠ°Ρ ΡΡΠ°Π΄ΠΈΡ ΡΠ°Π·Π²ΠΈΡΠΈΡ ΠΏΡΠΎΠ΅ΠΊΡΠ° ΠΏΡΠ΅Π΄ΡΡΠΌΠ°ΡΡΠΈΠ²Π°Π»Π° ΡΠΎΠ·Π΄Π°Π½ΠΈΠ΅ Π΄Π΅ΡΠ΅Π½ΡΡΠ°Π»ΠΈΠ·ΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ (dApp).
ΠΠ°ΠΊΠΈΠ΅ Π°ΡΠΏΠ΅ΠΊΡΡ ΠΊΡΡΡΠ° ΠΏΠΎΠΊΠ°Π·Π°Π»ΠΈΡΡ Π²Π°ΠΌ Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ ΠΏΡΠΎΡΡΡΠΌΠΈ ΠΈ ΠΊΠ°ΠΊΠΈΠ΅ Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ ΡΠ»ΠΎΠΆΠ½ΡΠΌΠΈ?
Π‘Π°ΠΌΡΠΌ ΠΏΡΠΎΡΡΡΠΌ Π±ΡΠ»ΠΎ ΡΠΎ, ΡΡΠΎ Ρ Π½Π°Ρ Π±ΡΠ»ΠΎ Π΄ΠΎΡΡΠ°ΡΠΎΡΠ½ΠΎ Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ Π½Π° Π²ΡΠ΅ Π·Π°Π΄Π°Π½ΠΈΡ. Π‘ΠΌΡΡΠ» ΠΊΡΡΡΠ° β Π² ΡΠΎΠΌ, ΡΡΠΎΠ±Ρ Π½Π°ΡΡΠΈΡΡΡΡ ΡΠ΅ΠΌΡ-ΡΠΎ, Π° Π½Π΅ ΡΠΎΡΠ΅Π²Π½ΠΎΠ²Π°ΡΡΡΡ ΠΌΠ΅ΠΆΠ΄Ρ ΡΠΎΠ±ΠΎΠΉ. ΠΠ±ΡΡΡΠ½Π΅Π½ΠΈΡ Π±ΡΠ»ΠΈ ΠΎΡΠ΅Π½Ρ Π΄ΠΎΡΡΡΠΏΠ½ΡΠΌΠΈ, Π° ΠΈΠ»Π»ΡΡΡΡΠ°ΡΠΈΠΈ β ΠΏΡΠΎΡΡΡΠΌΠΈ, Π½ΠΎ ΠΈΡΡΠ΅ΡΠΏΡΠ²Π°ΡΡΠΈΠΌΠΈ. ΠΡΠΎ ΠΏΠΎΠΌΠΎΠ³Π»ΠΎ Π²ΠΈΠ·ΡΠ°Π»ΠΈΠ·ΠΈΡΠΎΠ²Π°ΡΡ ΠΈ ΠΏΠΎΠ½ΡΡΡ ΡΠ°Π·Π½ΡΠ΅ ΡΠ΅ΠΌΡ.
ΠΡΠΈ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠΈ Π·Π°Π΄Π°Π½ΠΈΠΉ Π½Π°Ρ ΠΏΠΎΠ΄ΡΠ°Π»ΠΊΠΈΠ²Π°Π»ΠΈ ΠΊ ΡΠΎΠΌΡ, ΡΡΠΎΠ±Ρ ΠΌΡΡΠ»ΠΈΡΡ Π½Π΅Π·Π°Π²ΠΈΡΠΈΠΌΠΎ ΠΈ ΠΈΠ½ΠΎΠ³Π΄Π° ΡΡΠΎ-ΡΠΎ ΡΠ°ΠΌΠΎΡΡΠΎΡΡΠ΅Π»ΡΠ½ΠΎ ΠΈΠ·ΡΡΠ°ΡΡ. ΠΡΠΎ β Π½Π°ΠΈΠ»ΡΡΡΠΈΠΉ ΡΠΏΠΎΡΠΎΠ± Π½Π°ΡΡΠΈΡΡΡΡ ΡΠ΅ΠΌΡ-ΡΠΎ ΠΈ ΡΠ°Π·ΠΎΠ±ΡΠ°ΡΡΡΡ Π² ΠΈΠ΄Π΅ΡΡ , ΡΠ°ΡΡΠΌΠ°ΡΡΠΈΠ²Π°Π΅ΠΌΡΡ Π½Π° Π·Π°Π½ΡΡΠΈΡΡ .
ΠΠ΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΡΠ°Π· Ρ Π½Π΅ ΠΏΠΎΠ»Π½ΠΎΡΡΡΡ ΠΏΠΎΠ½ΠΈΠΌΠ°Π» ΡΠ΅ΠΎΡΠ΅ΡΠΈΡΠ΅ΡΠΊΡΡ ΡΠ°ΡΡΡ Π΄ΠΎ ΡΠ΅Ρ ΠΏΠΎΡ, ΠΏΠΎΠΊΠ° Π½Π΅ Π½Π°ΡΠΈΠ½Π°Π» ΠΏΠΈΡΠ°ΡΡ ΠΊΠΎΠ΄, Π²ΡΠΏΠΎΠ»Π½ΡΡ Π·Π°Π΄Π°Π½ΠΈΠ΅. ΠΠ°ΠΌ Π½Π΅ ΡΠ°Π·ΡΠ΅ΡΠ°Π»ΠΎΡΡ Π΄Π΅Π»Π°ΡΡ βcopy/pasteβ, Π²Π΅ΡΡ ΠΊΠΎΠ΄ Π½ΡΠΆΠ½ΠΎ Π±ΡΠ»ΠΎ ΠΏΠΈΡΠ°ΡΡ ΡΠ°ΠΌΠΈΠΌ, ΠΈ ΡΡΠΎ ΡΠΎΠΆΠ΅ ΠΏΠΎΠΌΠΎΠ³Π°Π»ΠΎ Π»ΡΡΡΠ΅ Π²ΠΎ Π²ΡΠ΅ΠΌ ΡΠ°Π·ΠΎΠ±ΡΠ°ΡΡΡΡ.
Π‘Π°ΠΌΡΠΌ ΡΠ»ΠΎΠΆΠ½ΡΠΌ Π±ΡΠ»ΠΎ ΡΠΎ, ΡΡΠΎ Π²ΠΎΠΏΡΠΎΡΡ Π² Π·Π°Π΄Π°Π½ΠΈΠΈ Ρ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΈΠΌΠΈ Π²Π°ΡΠΈΠ°Π½ΡΠ°ΠΌΠΈ ΠΎΡΠ²Π΅ΡΠ° Π±ΡΠ»ΠΈ Π½Π΅ Π²ΡΠ΅Π³Π΄Π° ΠΏΠΎΠ½ΡΡΠ½Ρ. ΠΠΎΠΉ Π°Π½Π³Π»ΠΈΠΉΡΠΊΠΈΠΉ Π½Π΅ ΠΈΠ΄Π΅Π°Π»Π΅Π½, ΠΈ Π²ΠΎΠΏΡΠΎΡΡ Π±ΡΠ»ΠΈ Π½Π°ΠΏΠΈΡΠ°Π½Ρ ΡΠ΅Π»ΠΎΠ²Π΅ΠΊΠΎΠΌ, Π½Π΅ ΡΠ²Π»ΡΡΡΠΈΠΌΡΡ Π½ΠΎΡΠΈΡΠ΅Π»Π΅ΠΌ ΡΠ·ΡΠΊΠ°, ΠΏΠΎΡΡΠΎΠΌΡ ΠΏΠΎΡΠΎΠΉ Π²ΠΎΠ·Π½ΠΈΠΊΠ°Π»ΠΎ Π½Π΅Π΄ΠΎΠΏΠΎΠ½ΠΈΠΌΠ°Π½ΠΈΠ΅.
ΠΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, ΡΠ°ΡΡΡ ΠΊΡΡΡΠ°, ΠΏΠΎΡΠ²ΡΡΠ΅Π½Π½Π°Ρ ΠΎΡΠ°ΠΊΡΠ»Π°ΠΌ ΠΈ NFT ΠΌΠΎΠ³Π»Π° Π±Ρ Π±ΡΡΡ Π±ΠΎΠ»Π΅Π΅ ΠΏΠΎΠ΄ΡΠΎΠ±Π½ΠΎΠΉ. ΠΠΎ, Π² Π»ΡΠ±ΠΎΠΌ ΡΠ»ΡΡΠ°Π΅, ΠΎΡΠ½ΠΎΠ²Π½Π°Ρ Π·Π°Π΄Π°ΡΠ° ΠΊΡΡΡΠ° β Π·Π°ΠΈΠ½ΡΠ΅ΡΠ΅ΡΠΎΠ²Π°ΡΡ ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊΠΎΠ². ΠΠΎΡΠΎΠΌ, ΡΡΠΎΠ±Ρ ΠΏΠΎΠ»Π½ΠΎΡΡΡΡ ΠΏΠΎΠ½ΡΡΡ Π²ΡΠ΅ Π΅Π³ΠΎ Π°ΡΠΏΠ΅ΠΊΡΡ, Π½ΡΠΆΠ½ΠΎ Π±ΡΠ΄Π΅Ρ, ΠΊΠΎΠ½Π΅ΡΠ½ΠΎ, ΠΏΠΎΡΡΠ°ΡΠΈΡΡ ΠΊΠ°ΠΊΠΎΠ΅-ΡΠΎ Π²ΡΠ΅ΠΌΡ Π½Π° ΡΠΎ, ΡΡΠΎΠ±Ρ ΠΏΠΎΡΠΊΡΠΏΠ΅ΡΠΈΠΌΠ΅Π½ΡΠΈΡΠΎΠ²Π°ΡΡ ΠΈ ΠΏΠΎΠΏΡΠ°ΠΊΡΠΈΠΊΠΎΠ²Π°ΡΡΡΡ.
Π Π°ΡΡΠΊΠ°ΠΆΠΈΡΠ΅ ΠΏΠΎΠ΄ΡΠΎΠ±Π½Π΅Π΅ ΠΎ ΡΠ΅ΡΠ΅Π½ΠΈΠΈ, Π½Π°Π΄ ΠΊΠΎΡΠΎΡΡΠΌ Π²Ρ ΡΠ°Π±ΠΎΡΠ°Π»ΠΈ Π² ΡΠ΅ΡΠ΅Π½ΠΈΠ΅ Π²ΡΠ΅Π³ΠΎ ΠΊΡΡΡΠ° β βCoupon Bazaarβ? ΠΠΎΠΆΠ½ΠΎ ΡΠ°ΠΊΠΆΠ΅ ΡΠ²ΠΈΠ΄Π΅ΡΡ ΠΏΡΠΈΠΌΠ΅ΡΡ ΠΊΠΎΠ΄Π°?
ΠΠ°, ΠΌΡ ΡΠ°Π±ΠΎΡΠ°Π»ΠΈ Π½Π°Π΄ βCoupon Bazaarβ, ΡΡΠΎ β ΠΌΠ°ΡΠΊΠ΅ΡΠΏΠ»Π΅ΠΉΡ, Π³Π΄Π΅ Π»ΡΠ΄ΠΈ ΠΏΡΠΎΠ΄Π°ΡΡ ΠΈ ΠΏΠΎΠΊΡΠΏΠ°ΡΡ ΠΊΡΠΏΠΎΠ½Ρ, Π΄Π°ΡΡΠΈΠ΅ ΠΏΡΠ°Π²ΠΎ ΠΊΡΠΏΠΈΡΡ ΡΠΎΠ²Π°ΡΡ ΠΈ ΡΡΠ»ΡΠ³ΠΈ ΠΏΠΎ Π±ΠΎΠ»Π΅Π΅ Π½ΠΈΠ·ΠΊΠΎΠΉ ΡΠ΅Π½Π΅. ΠΠ°ΠΆΠ΄ΡΠΉ ΠΊΡΠΏΠΎΠ½ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½ ΡΠΈΡΡΠΎΠ²ΡΠΌ Π°ΡΡΠ΅ΡΠΎΠΌ, ΠΊΠΎΡΠΎΡΡΠΉ ΠΏΡΠ΅Π΄ΠΏΠΎΠ»Π°Π³Π°Π΅Ρ ΡΠΏΠ΅ΡΠΈΠ°Π»ΡΠ½ΡΡ ΡΠΊΠΈΠ΄ΠΊΡ ΠΎΡ ΠΏΠΎΡΡΠ°Π²ΡΠΈΠΊΠ°.
ΠΡΠΆΠ½ΠΎ Π±ΡΠ»ΠΎ ΡΠ°Π·ΡΠ°Π±ΠΎΡΠ°ΡΡ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠΎΠ² ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ. ΠΠΎ-ΠΏΠ΅ΡΠ²ΡΡ
, Π½ΡΠΆΠ½ΠΎ Π±ΡΠ»ΠΎ ΡΠΎΠ·Π΄Π°ΡΡ ΡΠΈΡΡΠ΅ΠΌΡ Π΄Π»Ρ ΡΠ΅Π³ΠΈΡΡΡΠ°ΡΠΈΠΈ ΠΏΠΎΡΡΠ°Π²ΡΠΈΠΊΠΎΠ² ΠΈ ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΡ ΠΊΡΠΏΠΎΠ½Π°ΠΌΠΈ. ΠΠ°ΡΠ΅ΠΌ Π½ΡΠΆΠ½Π° Π±ΡΠ»Π° ΡΡΠ½ΠΊΡΠΈΡ Π²Π΅ΡΠΈΡΠΈΠΊΠ°ΡΠΈΠΈ ΠΈ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡ ΠΏΠΎΠΈΡΠΊΠ° ΠΊΡΠΏΠΎΠ½ΠΎΠ² ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»ΡΠΌΠΈ.
ΠΠΎ Π²ΡΠ΅ΠΌΡ ΠΊΡΡΡΠ° ΠΌΡ ΡΠ°ΠΊΠΆΠ΅ Π΄ΠΎΠ±Π°Π²ΠΈΠ»ΠΈ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ Π½ΠΎΠ²ΡΡ
ΡΡΠ½ΠΊΡΠΈΠΉ, Π²ΠΊΠ»ΡΡΠ°Ρ ΡΠΈΡΡΠ΅ΠΌΡ Π³ΠΎΠ»ΠΎΡΠΎΠ²Π°Π½ΠΈΡ ΠΈ ΡΡΠ½ΠΊΡΠΈΡ, ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡΡΡΡ Π²Π΅ΡΠΈΡΠΈΡΠΈΡΠΎΠ²Π°ΡΡ ΠΈ Π²Π½ΠΎΡΠΈΡΡ Π² ΡΠ΅ΡΠ½ΡΠΉ ΡΠΏΠΈΡΠΎΠΊ ΠΏΠΎΡΡΠ°Π²ΡΠΈΠΊΠΎΠ².
Π‘Π½Π°ΡΠ°Π»Π° ΠΌΡ ΠΈΠ·ΡΡΠΈΠ»ΠΈ ΡΠ°Π·Π½ΠΈΡΡ ΠΌΠ΅ΠΆΠ΄Ρ ΡΠΌΠ°ΡΡ-Π°ΡΡΠ΅ΡΠ°ΠΌΠΈ, ΡΠΌΠ°ΡΡ-Π°ΠΊΠΊΠ°ΡΠ½ΡΠ°ΠΌΠΈ ΠΈ dApp-Π°ΠΊΠΊΠ°ΡΠ½ΡΠ°ΠΌΠΈ ΠΈ ΠΎΡΠ½ΠΎΠ²Ρ ΡΠ°Π±ΠΎΡΡ Ρ ΡΡΠ½ΠΊΡΠΈΡΠΌΠΈ Π²Π΅ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡΠ°. Π€ΡΠ½ΠΊΡΠΈΠΈ Π²Π΅ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡΠ° ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡΡ ΠΈΠ·ΠΌΠ΅Π½ΡΡΡ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ Π°ΠΊΠΊΠ°ΡΠ½ΡΠ°, Π·Π°Π΄Π°Π½Π½ΠΎΠ΅ ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ. ΠΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ ΠΎΠ½ΠΈ ΠΏΡΠΎΠ²Π΅ΡΡΡΡ ΠΏΠΎΠ΄ΠΏΠΈΡΠΈ ΡΡΠ°Π½Π·Π°ΠΊΡΠΈΠΉ, Π½ΠΎ ΡΡΠ½ΠΊΡΠΈΡ Π²Π΅ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡΠ° ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ Π·Π°Π΄Π°Π²Π°ΡΡ Π΄ΡΡΠ³ΠΈΠ΅ Β«ΠΏΡΠ°Π²ΠΈΠ»Π°Β».
{-# STDLIB_VERSION 3 #-}
{-# CONTENT_TYPE DAPP #-}
{-# SCRIPT_TYPE ACCOUNT #-}
letownerPublicKey = base58'H8ndsHjBha6oJBQQx33zqbP5wi8sQP7hwgjzWUv3q95M'
@Verifier(tx)
funcverify() = {
matchtx {
cases: SetScriptTransaction=>sigVerify(tx.bodyBytes, tx.proofs[0], ownerPublicKey)
cased: DataTransaction=>true
case_ =>false
}
}
ΠΠ°ΡΠ΅ΠΌ ΠΌΡ Π½Π°ΡΠ°Π»ΠΈ Π΄ΠΎΠ±Π°Π²Π»ΡΡΡ ΠΊΡΠΏΠΎΠ½Ρ. ΠΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π»ΠΈ ΠΎΠ΄Π½Ρ ΠΈΠ· Π²Π°ΠΆΠ½Π΅ΠΉΡΠΈΡ ΡΡΠ½ΠΊΡΠΈΠΉ dApp, ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡΡΡΡ Π·Π°ΠΏΠΈΡΡΠ²Π°ΡΡ Π² Π±Π»ΠΎΠΊΡΠ΅ΠΉΠ½ Π΄Π°Π½Π½ΡΠ΅ Π»ΡΠ±ΠΎΠ³ΠΎ ΡΠΈΠΏΠ° Π² Π²ΠΈΠ΄Π΅ ΠΏΠ°Ρ Β«ΠΊΠ»ΡΡ-Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅Β» β ΡΡΠ°Π½Π·Π°ΠΊΡΠΈΡ Π΄Π°Π½Π½ΡΡ . ΠΡ ΠΎΠ±ΡΠ΅Π΄ΠΈΠ½ΠΈΠ»ΠΈ Π΅Π΅ Ρ Π½ΠΎΠ²ΠΎΠΉ ΡΡΠ°Π½Π·Π°ΠΊΡΠΈΠ΅ΠΉ, invokeScript, ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡΠ΅ΠΉΡΡ Π΄Π»Ρ Π²ΡΠ·ΠΎΠ²Π° Π²ΡΠ·ΡΠ²Π°Π΅ΠΌΠΎΠΉ ΡΡΠ½ΠΊΡΠΈΠΈ Π² dApp ΠΈΠ·Π²Π½Π΅ Π±Π»ΠΎΠΊΡΠ΅ΠΉΠ½Π°.
Π’ΠΈΠΏ ΡΡΠ°Π½Π·Π°ΠΊΡΠΈΠΉ Π΄Π°Π½Π½ΡΡ , ΠΊΠΎΡΠΎΡΡΠΉ ΠΌΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π»ΠΈ Π²ΠΎ Π²ΡΠ΅ΠΌΡ ΠΏΡΠΎΡ ΠΎΠΆΠ΄Π΅Π½ΠΈΡ ΠΊΡΡΡΠ°, ΡΡΠΎ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ ΠΊΡΠΏΠΎΠ½ΠΎΠ² Π½Π° ΠΌΠ°ΡΠΊΠ΅ΡΠΏΠ»Π΅ΠΉΡ:
letdatajson = {
"title": "t-shirt with , vote 1",
"coupon_price": 10000000,
"old_price": 1000000000,
"new_price": 100000000,
"address": "Universe",
"description": "I want you to make love, not war, i know you've heard it before",
"image": "https://bit.ly/2EXTghg"
}
it('add item', asyncfunction(){
letts = invokeScript({
dApp: dappAddress,
call:{
function:"addItem",
args:[
{ type:"string", value: datajson.title },
{ type:"integer", value: datajson.coupon_price },
{ type:"string", value: JSON.stringify(datajson) }
]},
payment: []
}, accountSupplierSeed)
lettx = awaitbroadcast(ts)
awaitwaitForTx(tx.id)
})
ΠΠ»Ρ ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠΈ ΡΡΠΈΡ Π΄Π°Π½Π½ΡΡ ΡΡΠ½ΠΊΡΠΈΠ΅ΠΉ addItem ΠΈ ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠΈ ΡΡΠ½ΠΊΡΠΈΠΈ ΠΏΠΎΠΊΡΠΏΠΊΠΈ ΠΈ Π΄ΡΡΠ³ΠΈΡ ΠΎΠΏΡΠΈΠΉ ΠΌΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π»ΠΈ Π²ΡΠ·ΡΠ²Π°Π΅ΠΌΡΡ ΡΡΠ½ΠΊΡΠΈΡ, ΠΊΠΎΡΠΎΡΡΡ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ ΠΌΠΎΠΆΠ΅Ρ Π²ΡΠ·Π²Π°ΡΡ ΠΈΠ·Π²Π½Π΅ Π±Π»ΠΎΠΊΡΠ΅ΠΉΠ½Π°. Π ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠ΅ ΠΎΠ½Π° ΠΌΠΎΠΆΠ΅Ρ Π²ΡΠΏΠΎΠ»Π½ΡΡΡ ΡΠ°Π·Π»ΠΈΡΠ½ΡΠ΅ Π·Π°Π΄Π°ΡΠΈ, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, ΠΈΠ½ΠΈΡΠΈΠΈΡΠΎΠ²Π°ΡΡ ΠΏΠ΅ΡΠ΅Π΄Π°ΡΡ ΡΡΠ΅Π΄ΡΡΠ², Π·Π°ΠΏΠΈΡΡΠ²Π°ΡΡ ΠΈΠ»ΠΈ ΠΎΠ±Π½ΠΎΠ²Π»ΡΡΡ Π΄Π°Π½Π½ΡΠ΅ Π² Ρ ΡΠ°Π½ΠΈΠ»ΠΈΡΠ΅ Π΄Π°Π½Π½ΡΡ dApp ΠΈ Ρ.Π΄.
ΠΠΎΡ ΠΏΡΠΈΠΌΠ΅Ρ Π²ΡΠ·ΡΠ²Π°Π΅ΠΌΠΎΠΉ ΡΡΠ½ΠΊΡΠΈΠΈ, ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌΠΎΠΉ Π² ΡΡΠ½ΠΊΡΠΈΠΈ addItem:
@Callable(i)
funcaddItem(title: String, price: Int, data: String) = {
letsupplierAddress = toBase58String(i.caller.bytes)
letitem = getKeyItem(supplierAddress, title)
if( price <= 0) thenthrow("purchase amount cannot be less than item price")
elseif( getValueItemSupplier(item) !=NONE ) thenthrow("an item is already exist")
else{
WriteSet([
DataEntry(getKeyItemSupplier(item), supplierAddress),
DataEntry(getKeyItemPrice(item), price),
DataEntry(getKeyItemData(item), data)
])
}
}
ΠΠΎΠ·Π΄Π½Π΅Π΅ ΠΌΡ ΡΠ°Π·ΡΠ°Π±ΠΎΡΠ°Π»ΠΈ ΡΠΈΡΡΠ΅ΠΌΡ Π³ΠΎΠ»ΠΎΡΠΎΠ²Π°Π½ΠΈΡ, ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡΡΡΡ ΠΎΡΠ΄Π°Π²Π°ΡΡ Π³ΠΎΠ»ΠΎΡΠ° Π·Π° ΠΏΡΠΎΠ΄Π²ΠΈΠΆΠ΅Π½ΠΈΠ΅ ΠΈΠ»ΠΈ ΡΠ΄Π°Π»Π΅Π½ΠΈΠ΅ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π½ΡΡ ΠΏΡΠΎΠ΄ΡΠΊΡΠΎΠ². Π§ΡΠΎΠ±Ρ Π½Π΅ Π΄ΠΎΠΏΡΡΡΠΈΡΡ Π²Π»ΠΈΡΠ½ΠΈΡ ΠΈΠ·Π²Π½Π΅ Π½Π° ΠΏΡΠΎΡΠ΅ΡΡ Π³ΠΎΠ»ΠΎΡΠΎΠ²Π°Π½ΠΈΡ, ΠΎΠ½Π° ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅Ρ ΡΡ Π΅ΠΌΡ βCommit-Revealβ.
Π€Π°Π·Π° Β«commitΒ» ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ Π΄Π»Ρ ΡΠ±ΠΎΡΠ° Π·Π°ΡΠΈΡΡΠΎΠ²Π°Π½Π½ΡΡ Π³ΠΎΠ»ΠΎΡΠΎΠ² Ρ ΠΏΠΎΠΌΠΎΡΡΡ Ρ ΡΡ-ΡΡΠ½ΠΊΡΠΈΠΈ ΠΈ Β«ΡΠΎΠ»ΠΈΒ».
Π€Π°Π·Π° Β«revealΒ» ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ Π΄Π»Ρ ΡΠ±ΠΎΡΠ° Π·Π°ΡΠΈΡΡΠΎΠ²Π°Π½Π½ΡΡ Π³ΠΎΠ»ΠΎΡΠΎΠ² ΠΈ ΡΡΠ°Π²Π½Π΅Π½ΠΈΡ ΠΈΡ Ρ ΡΡΠ΅ΠΉ.
ΠΠΎΡ ΠΏΡΠΈΠΌΠ΅Ρ Π²ΡΠ·ΡΠ²Π°Π΅ΠΌΠΎΠΉ ΡΡΠ½ΠΊΡΠΈΠΈ, ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌΠΎΠΉ Π·Π΄Π΅ΡΡ:
@Callable(i)
funcvoteCommit(item: String, hash: String) = {
letuser = toBase58String(i.caller.bytes)
letcommits = getValueCommitsCount(item)
letstatus = getValueItemStatus(item)
if( commits >=VOTERS) thenthrow("reached max num of voters")
elseif(getValueCommit(item, user) !=NONE) thenthrow("user has already participated")
elseif(getKeyItemSupplier(item) ==NONE) thenthrow("item does not exist")
elseif(status !=NONE && status !=VOTING) thenthrow("voting is not possible")
else{
WriteSet([
DataEntry(getKeyCommit(item, user), hash),
DataEntry(getKeyCommitsCount(item), commits +1),
DataEntry(getKeyItemStatus(item),if(commits ==VOTERS) thenREVEAL elseVOTING)
])
}
}
>
Π§ΡΠΎ Π΅ΡΠ΅ Π²Ρ ΡΠ·Π½Π°Π»ΠΈ ΠΈΠ· ΠΊΡΡΡΠ°?
ΠΡΡΡ ΡΠ°ΠΊΠΆΠ΅ Π²ΠΊΠ»ΡΡΠ°Π» Π² ΡΠ΅Π±Ρ ΡΠΎΠΊΠ΅Π½ΠΈΠ·Π°ΡΠΈΡ ΠΈ non-fungible ΡΠΎΠΊΠ΅Π½Ρ (NFT) β ΡΠΎΠΊΠ΅Π½Ρ, ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»ΡΡΡΠΈΠ΅ ΡΡΠΎ-Π»ΠΈΠ±ΠΎ ΡΠ½ΠΈΠΊΠ°Π»ΡΠ½ΠΎΠ΅ ΠΈ ΠΏΠΎΡΡΠΎΠΌΡ Π½Π΅ Π²Π·Π°ΠΈΠΌΠΎΠ·Π°ΠΌΠ΅Π½ΡΠ΅ΠΌΡΠ΅.
ΠΠΎΡΠ»Π΅Π΄Π½Π΅Π΅ Π·Π°Π½ΡΡΠΈΠ΅ Π±ΡΠ»ΠΎ ΠΏΠΎΡΠ²ΡΡΠ΅Π½ΠΎ ΠΎΡΠ°ΠΊΡΠ»Π°ΠΌ. ΠΠΎΡΠΊΠΎΠ»ΡΠΊΡ Π±Π»ΠΎΠΊΡΠ΅ΠΉΠ½ Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ ΠΏΠΎΠ»ΡΡΠ°ΡΡ Π΄Π°Π½Π½ΡΠ΅ ΠΈΠ· Π²Π½Π΅ΡΠ½Π΅Π³ΠΎ ΠΌΠΈΡΠ°, Π½Π°ΠΌ Π½ΡΠΆΠ½Ρ ΠΎΡΠ°ΠΊΡΠ»Ρ Π΄Π»Ρ ΠΎΡΠΏΡΠ°Π²ΠΊΠΈ Π² Π½Π΅Π³ΠΎ ΡΡΠΈΡ Π΄Π°Π½Π½ΡΡ .
ΠΠ»Ρ Π½Π°ΡΠ΅Π³ΠΎ ΠΌΠ°ΡΠΊΠ΅ΡΠΏΠ»Π΅ΠΉΡΠ° ΠΎΡΠ°ΠΊΡΠ»Ρ Π±ΡΠ»ΠΈ Π½ΡΠΆΠ½Ρ, ΡΡΠΎΠ±Ρ Π²Π΅ΡΠΈΡΠΈΡΠΈΡΠΎΠ²Π°ΡΡ ΠΈ, ΠΏΡΠΈ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎΡΡΠΈ, Π²Π½Π΅ΡΡΠΈ Π² ΡΠ΅ΡΠ½ΡΠΉ ΡΠΏΠΈΡΠΎΠΊ ΠΏΠΎΡΡΠ°Π²ΡΠΈΠΊΠ°, ΠΊΠΎΡΠΎΡΡΠΉ, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, Π½Π΅ ΠΏΡΠΈΠ½ΡΠ» ΠΏΡΠΎΠ΄Π°Π½Π½ΡΠΉ ΠΊΡΠΏΠΎΠ½.
ΠΠΎΡ ΠΏΡΠΈΠΌΠ΅Ρ:
funcgetExtValueItemWhiteListStatus(item:String) = {
item +"_verifier_status"
}
letverifier = "3Mx9qgMyMhHt7WUZr6PsaXNfmydxMG7YMxv"
letVERIFIED = "verified"
letBLACKLISTED = "blacklist"
@Callable(i)
funcsetstatus(supplier: String, status: String) = {
letaccount = toBase58String(i.caller.bytes)
if( account !=verifier ) thenthrow("only oracle verifier are able to manage whitelist")
elseif( status !=VERIFIED && status !=BLACKLISTED) thenthrow("wrong status")
else{
WriteSet([
DataEntry(getExtValueItemWhiteListStatus(supplier), status)
])
}
}
Π§ΡΠΎ Π±ΡΠ»ΠΎ Π΄Π»Ρ Π²Π°Ρ Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ ΠΏΠΎΠ»Π΅Π·Π½ΡΠΌ?
Π‘Π°ΠΌΠ°Ρ ΠΏΠΎΠ»Π΅Π·Π½Π°Ρ ΡΠ°ΡΡΡ β ΡΡΠΎ Π·Π°Π΄Π°Π½ΠΈΡ. ΠΠ»Π°Π³ΠΎΠ΄Π°ΡΡ ΠΈΠΌ ΠΌΠ°ΡΠ΅ΡΠΈΠ°Π» Π»Π΅ΠΊΡΠΈΠΉ ΡΡΠ°Π½ΠΎΠ²ΠΈΠ»ΡΡ ΠΏΠΎΠ½ΡΡΠ½Π΅Π΅, Π° ΡΠΎΠ»ΡΠΊΠΎ ΡΡΠΎ ΠΏΠΎΠ»ΡΡΠ΅Π½Π½ΡΠ΅ Π·Π½Π°Π½ΠΈΡ Π·Π°ΠΊΡΠ΅ΠΏΠ»ΡΠ»ΠΈΡΡ ΠΌΠ΅ΡΠΎΠ΄ΠΎΠΌ ΠΏΡΠΎΠ± ΠΈ ΠΎΡΠΈΠ±ΠΎΠΊ. ΠΡΠ΅Π½Ρ ΠΏΠΎΠ»Π΅Π·Π½Π° Π±ΡΠ»Π° ΠΈ ΠΏΡΠ°ΠΊΡΠΈΡΠ΅ΡΠΊΠ°Ρ ΡΠ°Π±ΠΎΡΠ° Ρ
ΠΠ°ΠΊ Π²Ρ ΠΏΠ»Π°Π½ΠΈΡΡΠ΅ΡΠ΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΡΠΎ, ΡΠ΅ΠΌΡ Π½Π°ΡΡΠΈΠ»ΠΈΡΡ, Π½Π° ΠΏΡΠ°ΠΊΡΠΈΠΊΠ΅?
Π‘ ΡΠ°ΠΌΠΎΠ³ΠΎ Π½Π°ΡΠ°Π»Π° Ρ ΠΎΠΆΠΈΠ΄Π°Π», ΡΡΠΎ ΠΊΡΡΡ ΠΏΠΎΠΌΠΎΠΆΠ΅Ρ Π²ΡΠ²Π΅ΡΡΠΈ ΠΌΠΎΠΉ ΠΏΡΠΎΠ΅ΠΊΡ Π½Π° Π½ΠΎΠ²ΡΠΉ ΡΡΠΎΠ²Π΅Π½Ρ. ΠΠ΄Π΅Ρ ΡΠΎΡΡΠΎΡΠ»Π° Π² ΡΠΎΠΌ, ΡΡΠΎΠ±Ρ ΡΠ΅ΠΏΠ΅ΡΡ Π½Π°ΠΏΠΈΡΠ°ΡΡ ΠΊΠΎΠ΄
ΠΡΡΡ ΡΠ°ΠΊΠΆΠ΅ Π΄Π°Π» ΠΏΠΈΡΡ Π΄Π»Ρ ΡΠ°Π·ΠΌΡΡΠ»Π΅Π½ΠΈΠΉ, ΠΈ Ρ ΠΌΠ΅Π½Ρ ΠΏΠΎΡΠ²ΠΈΠ»ΠΎΡΡ ΠΌΠ½ΠΎΠ³ΠΎ Π½ΠΎΠ²ΡΡ
ΠΈΠ΄Π΅ΠΉ. Π― ΡΠ²Π΅ΡΠ΅Π½, ΡΡΠΎ ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΡ ΠΏΡΠΎΡΠ²ΡΡΡΡ ΠΈ Π² Π±ΡΠ΄ΡΡΠ΅ΠΌ.
ΠΡΡΠΎΡΠ½ΠΈΠΊ: habr.com