ОсСдлай Π²ΠΎΠ»Π½Ρƒ Web 3.0

Π Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊ ΠšΡ€ΠΈΡΡ‚ΠΎΡ„ Π’Π΅Ρ€Π΄ΠΎ рассказываСт ΠΎΠ± ΠΎΠ½Π»Π°ΠΉΠ½-курсС β€˜Mastering Web 3.0 with Waves’, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΎΠ½ Π½Π΅Π΄Π°Π²Π½ΠΎ ΠΏΡ€ΠΎΡˆΠ΅Π».

ОсСдлай Π²ΠΎΠ»Π½Ρƒ Web 3.0

РасскаТитС Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ ΠΎ сСбС. Π§Π΅ΠΌ вас заинтСрСсовал этот курс?

Π― занимаюсь Π²Π΅Π±-Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΎΠΉ ΠΎΠΊΠΎΠ»ΠΎ 15 Π»Π΅Ρ‚, Π² основном, ΠΊΠ°ΠΊ фрилансСр.

Разрабатывая Π²Π΅Π±-ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ долгосрочного рСгистра для Ρ€Π°Π·Π²ΠΈΠ²Π°ΡŽΡ‰ΠΈΡ…ΡΡ стран ΠΏΠΎ Π·Π°ΠΊΠ°Π·Ρƒ ΠΎΠ΄Π½ΠΎΠΉ банковской Π³Ρ€ΡƒΠΏΠΏΡ‹, я столкнулся с Π·Π°Π΄Π°Ρ‡Π΅ΠΉ ΠΈΠ½Ρ‚Π΅Π³Ρ€Π°Ρ†ΠΈΠΈ Π² Π½Π΅Π³ΠΎ Π±Π»ΠΎΠΊΡ‡Π΅ΠΉΠ½-сСртификации. Π’ Ρ‚ΠΎ врСмя я Π½Π΅ ΠΎΡ‡Π΅Π½ΡŒ ΠΌΠ½ΠΎΠ³ΠΎ Π·Π½Π°Π» ΠΎ Π±Π»ΠΎΠΊΡ‡Π΅ΠΉΠ½-сСртификации, Ρ…ΠΎΡ‚ΡŒ ΡƒΠΆΠ΅ ΠΈ интСрСсовался ΠΊΡ€ΠΈΠΏΡ‚ΠΎ-тСхнологиями – Π² основном, ΠΊΠ°ΠΊ инвСстор.

Π’ ΠΈΡ‚ΠΎΠ³Π΅ эта функция Π½Π΅ Π±Ρ‹Π»Π° Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Π°, Π½ΠΎ, Π·Π°Π΄ΡƒΠΌΠ°Π²ΡˆΠΈΡΡŒ ΠΎ Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ ΠΎΡ€Π³Π°Π½ΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΈ Π±Π°Π½ΠΊΠΈ заинтСрСсованы Π² Ρ‚Π°ΠΊΠΎΠΌ Ρ€Π΅ΡˆΠ΅Π½ΠΈΠΈ для своих ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ, я занялся ΠΈΠ·ΡƒΡ‡Π΅Π½ΠΈΠ΅ΠΌ вопроса ΠΈ скоро запустил ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ Signature Chain.

Π― Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Π°Π» Π΅Π³ΠΎ Π±Π΅Ρ‚Π°-Π²Π΅Ρ€ΡΠΈΡŽ, которая ΡƒΠΆΠ΅ доступна Π² основной сСти. Π’ Ρ‚ΠΎ врСмя [языка программирования Waves] Ride Π΅Ρ‰Π΅ Π½Π΅ Π±Ρ‹Π»ΠΎ, ΠΈ я Π΄Π΅Π»Π°Π» всС ΠΏΡ€ΠΎΡΡ‚Π΅ΠΉΡˆΠΈΠΌ способом, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΈ ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄Π° с Π²Π»ΠΎΠΆΠ΅Π½Π½Ρ‹ΠΌ JSON. Но основная Ρ†Π΅Π»ΡŒ Π±Ρ‹Π»Π° Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ Π±ΠΎΠ»Π΅Π΅ ΠΏΡ€ΠΎΠ΄Π²ΠΈΠ½ΡƒΡ‚Ρ‹ΠΉ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π» послС запуска Ride. И это – главная ΠΏΡ€ΠΈΡ‡ΠΈΠ½Π°, ΠΏΠΎ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ я присоСдинился ΠΊ курсу: ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π°Ρ стадия развития ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° прСдусматривала созданиС Π΄Π΅Ρ†Π΅Π½Ρ‚Ρ€Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ прилоТСния (dApp).

КакиС аспСкты курса показались Π²Π°ΠΌ Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ простыми ΠΈ ΠΊΠ°ΠΊΠΈΠ΅ Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ слоТными?

Π‘Π°ΠΌΡ‹ΠΌ простым Π±Ρ‹Π»ΠΎ Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ Ρƒ нас Π±Ρ‹Π»ΠΎ достаточно Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ Π½Π° всС задания. Бмысл курса β€” Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π½Π°ΡƒΡ‡ΠΈΡ‚ΡŒΡΡ Ρ‡Π΅ΠΌΡƒ-Ρ‚ΠΎ, Π° Π½Π΅ ΡΠΎΡ€Π΅Π²Π½ΠΎΠ²Π°Ρ‚ΡŒΡΡ ΠΌΠ΅ΠΆΠ΄Ρƒ собой. ОбъяснСния Π±Ρ‹Π»ΠΈ ΠΎΡ‡Π΅Π½ΡŒ доступными, Π° ΠΈΠ»Π»ΡŽΡΡ‚Ρ€Π°Ρ†ΠΈΠΈ – простыми, Π½ΠΎ ΠΈΡΡ‡Π΅Ρ€ΠΏΡ‹Π²Π°ΡŽΡ‰ΠΈΠΌΠΈ. Π­Ρ‚ΠΎ ΠΏΠΎΠΌΠΎΠ³Π»ΠΎ Π²ΠΈΠ·ΡƒΠ°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΈ ΠΏΠΎΠ½ΡΡ‚ΡŒ Ρ€Π°Π·Π½Ρ‹Π΅ Ρ‚Π΅ΠΌΡ‹.

ΠŸΡ€ΠΈ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠΈ Π·Π°Π΄Π°Π½ΠΈΠΉ нас ΠΏΠΎΠ΄Ρ‚Π°Π»ΠΊΠΈΠ²Π°Π»ΠΈ ΠΊ Ρ‚ΠΎΠΌΡƒ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΌΡ‹ΡΠ»ΠΈΡ‚ΡŒ нСзависимо ΠΈ ΠΈΠ½ΠΎΠ³Π΄Π° Ρ‡Ρ‚ΠΎ-Ρ‚ΠΎ ΡΠ°ΠΌΠΎΡΡ‚ΠΎΡΡ‚Π΅Π»ΡŒΠ½ΠΎ ΠΈΠ·ΡƒΡ‡Π°Ρ‚ΡŒ. Π­Ρ‚ΠΎ – Π½Π°ΠΈΠ»ΡƒΡ‡ΡˆΠΈΠΉ способ Π½Π°ΡƒΡ‡ΠΈΡ‚ΡŒΡΡ Ρ‡Π΅ΠΌΡƒ-Ρ‚ΠΎ ΠΈ Ρ€Π°Π·ΠΎΠ±Ρ€Π°Ρ‚ΡŒΡΡ Π² идСях, рассматриваСмых Π½Π° занятиях.

НСсколько Ρ€Π°Π· я Π½Π΅ ΠΏΠΎΠ»Π½ΠΎΡΡ‚ΡŒΡŽ ΠΏΠΎΠ½ΠΈΠΌΠ°Π» Ρ‚Π΅ΠΎΡ€Π΅Ρ‚ΠΈΡ‡Π΅ΡΠΊΡƒΡŽ Ρ‡Π°ΡΡ‚ΡŒ Π΄ΠΎ Ρ‚Π΅Ρ… ΠΏΠΎΡ€, ΠΏΠΎΠΊΠ° Π½Π΅ Π½Π°Ρ‡ΠΈΠ½Π°Π» ΠΏΠΈΡΠ°Ρ‚ΡŒ ΠΊΠΎΠ΄, выполняя Π·Π°Π΄Π°Π½ΠΈΠ΅. Нам Π½Π΅ Ρ€Π°Π·Ρ€Π΅ΡˆΠ°Π»ΠΎΡΡŒ Π΄Π΅Π»Π°Ρ‚ΡŒ β€˜copy/paste’, вСсь ΠΊΠΎΠ΄ Π½ΡƒΠΆΠ½ΠΎ Π±Ρ‹Π»ΠΎ ΠΏΠΈΡΠ°Ρ‚ΡŒ самим, ΠΈ это Ρ‚ΠΎΠΆΠ΅ ΠΏΠΎΠΌΠΎΠ³Π°Π»ΠΎ Π»ΡƒΡ‡ΡˆΠ΅ Π²ΠΎ всСм Ρ€Π°Π·ΠΎΠ±Ρ€Π°Ρ‚ΡŒΡΡ.

Π‘Π°ΠΌΡ‹ΠΌ слоТным Π±Ρ‹Π»ΠΎ Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ вопросы Π² Π·Π°Π΄Π°Π½ΠΈΠΈ с нСсколькими Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Π°ΠΌΠΈ ΠΎΡ‚Π²Π΅Ρ‚Π° Π±Ρ‹Π»ΠΈ Π½Π΅ всСгда понятны. Мой английский Π½Π΅ ΠΈΠ΄Π΅Π°Π»Π΅Π½, ΠΈ вопросы Π±Ρ‹Π»ΠΈ написаны Ρ‡Π΅Π»ΠΎΠ²Π΅ΠΊΠΎΠΌ, Π½Π΅ ΡΠ²Π»ΡΡŽΡ‰ΠΈΠΌΡΡ носитСлСм языка, поэтому ΠΏΠΎΡ€ΠΎΠΉ Π²ΠΎΠ·Π½ΠΈΠΊΠ°Π»ΠΎ Π½Π΅Π΄ΠΎΠΏΠΎΠ½ΠΈΠΌΠ°Π½ΠΈΠ΅.

Π’ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, Ρ‡Π°ΡΡ‚ΡŒ курса, посвящСнная ΠΎΡ€Π°ΠΊΡƒΠ»Π°ΠΌ ΠΈ NFT ΠΌΠΎΠ³Π»Π° Π±Ρ‹ Π±Ρ‹Ρ‚ΡŒ Π±ΠΎΠ»Π΅Π΅ ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½ΠΎΠΉ. Но, Π² любом случаС, основная Π·Π°Π΄Π°Ρ‡Π° курса – Π·Π°ΠΈΠ½Ρ‚Π΅Ρ€Π΅ΡΠΎΠ²Π°Ρ‚ΡŒ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΎΠ². ΠŸΠΎΡ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠ»Π½ΠΎΡΡ‚ΡŒΡŽ ΠΏΠΎΠ½ΡΡ‚ΡŒ всС Π΅Π³ΠΎ аспСкты, Π½ΡƒΠΆΠ½ΠΎ Π±ΡƒΠ΄Π΅Ρ‚, ΠΊΠΎΠ½Π΅Ρ‡Π½ΠΎ, ΠΏΠΎΡ‚Ρ€Π°Ρ‚ΠΈΡ‚ΡŒ ΠΊΠ°ΠΊΠΎΠ΅-Ρ‚ΠΎ врСмя Π½Π° Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΡΠΊΡΠΏΠ΅Ρ€ΠΈΠΌΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΈ ΠΏΠΎΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠΎΠ²Π°Ρ‚ΡŒΡΡ.

РасскаТитС ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½Π΅Π΅ ΠΎ Ρ€Π΅ΡˆΠ΅Π½ΠΈΠΈ, Π½Π°Π΄ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌ Π²Ρ‹ Ρ€Π°Π±ΠΎΡ‚Π°Π»ΠΈ Π² Ρ‚Π΅Ρ‡Π΅Π½ΠΈΠ΅ всСго курса – β€˜Coupon Bazaar’? МоТно Ρ‚Π°ΠΊΠΆΠ΅ ΡƒΠ²ΠΈΠ΄Π΅Ρ‚ΡŒ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρ‹ ΠΊΠΎΠ΄Π°?

Π”Π°, ΠΌΡ‹ Ρ€Π°Π±ΠΎΡ‚Π°Π»ΠΈ Π½Π°Π΄ β€˜Coupon Bazaar’, это – маркСтплСйс, Π³Π΄Π΅ люди ΠΏΡ€ΠΎΠ΄Π°ΡŽΡ‚ ΠΈ ΠΏΠΎΠΊΡƒΠΏΠ°ΡŽΡ‚ ΠΊΡƒΠΏΠΎΠ½Ρ‹, Π΄Π°ΡŽΡ‰ΠΈΠ΅ ΠΏΡ€Π°Π²ΠΎ ΠΊΡƒΠΏΠΈΡ‚ΡŒ Ρ‚ΠΎΠ²Π°Ρ€Ρ‹ ΠΈ услуги ΠΏΠΎ Π±ΠΎΠ»Π΅Π΅ Π½ΠΈΠ·ΠΊΠΎΠΉ Ρ†Π΅Π½Π΅. ΠšΠ°ΠΆΠ΄Ρ‹ΠΉ ΠΊΡƒΠΏΠΎΠ½ прСдставлСн Ρ†ΠΈΡ„Ρ€ΠΎΠ²Ρ‹ΠΌ ассСтом, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΏΡ€Π΅Π΄ΠΏΠΎΠ»Π°Π³Π°Π΅Ρ‚ ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½ΡƒΡŽ скидку ΠΎΡ‚ поставщика.

ОсСдлай Π²ΠΎΠ»Π½Ρƒ Web 3.0

НуТно Π±Ρ‹Π»ΠΎ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ нСсколько ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΎΠ² прилоТСния. Π’ΠΎ-ΠΏΠ΅Ρ€Π²Ρ‹Ρ…, Π½ΡƒΠΆΠ½ΠΎ Π±Ρ‹Π»ΠΎ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ систСму для рСгистрации поставщиков ΠΈ управлСния ΠΊΡƒΠΏΠΎΠ½Π°ΠΌΠΈ. Π—Π°Ρ‚Π΅ΠΌ Π½ΡƒΠΆΠ½Π° Π±Ρ‹Π»Π° функция Π²Π΅Ρ€ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΠΈ ΠΈ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ поиска ΠΊΡƒΠΏΠΎΠ½ΠΎΠ² ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡΠΌΠΈ.

ОсСдлай Π²ΠΎΠ»Π½Ρƒ Web 3.0

Π’ΠΎ врСмя курса ΠΌΡ‹ Ρ‚Π°ΠΊΠΆΠ΅ Π΄ΠΎΠ±Π°Π²ΠΈΠ»ΠΈ нСсколько Π½ΠΎΠ²Ρ‹Ρ… Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ, Π²ΠΊΠ»ΡŽΡ‡Π°Ρ систСму голосования ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ, ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‰ΡƒΡŽ Π²Π΅Ρ€ΠΈΡ„ΠΈΡ†ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΈ Π²Π½ΠΎΡΠΈΡ‚ΡŒ Π² Ρ‡Π΅Ρ€Π½Ρ‹ΠΉ список поставщиков.

Π‘Π½Π°Ρ‡Π°Π»Π° ΠΌΡ‹ ΠΈΠ·ΡƒΡ‡ΠΈΠ»ΠΈ Ρ€Π°Π·Π½ΠΈΡ†Ρƒ ΠΌΠ΅ΠΆΠ΄Ρƒ смарт-ассСтами, смарт-Π°ΠΊΠΊΠ°ΡƒΠ½Ρ‚Π°ΠΌΠΈ ΠΈ 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)
        ])
    }
}

Π§Ρ‚ΠΎ Π±Ρ‹Π»ΠΎ для вас Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ ΠΏΠΎΠ»Π΅Π·Π½Ρ‹ΠΌ?

Бамая полСзная Ρ‡Π°ΡΡ‚ΡŒ – это задания. Благодаря ΠΈΠΌ ΠΌΠ°Ρ‚Π΅Ρ€ΠΈΠ°Π» Π»Π΅ΠΊΡ†ΠΈΠΉ становился понятнСС, Π° Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ρ‡Ρ‚ΠΎ ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½Π½Ρ‹Π΅ знания Π·Π°ΠΊΡ€Π΅ΠΏΠ»ΡΠ»ΠΈΡΡŒ ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠΌ ΠΏΡ€ΠΎΠ± ΠΈ ошибок. ΠžΡ‡Π΅Π½ΡŒ ΠΏΠΎΠ»Π΅Π·Π½Π° Π±Ρ‹Π»Π° ΠΈ практичСская Ρ€Π°Π±ΠΎΡ‚Π° с IDE, эксплорСром ΠΈ oΡ€Π°ΠΊΡƒΠ»Π°ΠΌΠΈ.

Как Π²Ρ‹ ΠΏΠ»Π°Π½ΠΈΡ€ΡƒΠ΅Ρ‚Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Ρ‚ΠΎ, Ρ‡Π΅ΠΌΡƒ Π½Π°ΡƒΡ‡ΠΈΠ»ΠΈΡΡŒ, Π½Π° ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠ΅?

Π‘ самого Π½Π°Ρ‡Π°Π»Π° я ΠΎΠΆΠΈΠ΄Π°Π», Ρ‡Ρ‚ΠΎ курс ΠΏΠΎΠΌΠΎΠΆΠ΅Ρ‚ вывСсти ΠΌΠΎΠΉ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ Π½Π° Π½ΠΎΠ²Ρ‹ΠΉ ΡƒΡ€ΠΎΠ²Π΅Π½ΡŒ. ИдСя состояла Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ Π½Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ ΠΊΠΎΠ΄ sign-web.app Π½Π° RIDE. Π‘ΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰Π°Ρ вСрсия ΡƒΠΆΠ΅ ΠΈΠΌΠ΅Π΅Ρ‚ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ сСртификации Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ², Π½ΠΎ, благодаря RIDE, Π΅Π΅ ΠΌΠΎΠΆΠ½ΠΎ Π±ΡƒΠ΄Π΅Ρ‚ Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ ΡƒΠ»ΡƒΡ‡ΡˆΠΈΡ‚ΡŒ. Новая вСрсия Π±ΡƒΠ΄Π΅Ρ‚ Π±ΠΎΠ»Π΅Π΅ Π³ΠΈΠ±ΠΊΠΎΠΉ ΠΈ понятной, Π² Π½Π΅ΠΉ Π±ΡƒΠ΄Π΅Ρ‚ большС Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ, Π²ΠΊΠ»ΡŽΡ‡Π°Ρ ΡΠ΅Ρ€Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΡŽ элСктронных писСм, соглашСний ΠΌΠ΅ΠΆΠ΄Ρƒ нСсколькими сторонами ΠΈ Ρ‚.Π΄.

ΠšΡƒΡ€Ρ Ρ‚Π°ΠΊΠΆΠ΅ Π΄Π°Π» ΠΏΠΈΡ‰Ρƒ для Ρ€Π°Π·ΠΌΡ‹ΡˆΠ»Π΅Π½ΠΈΠΉ, ΠΈ Ρƒ мСня появилось ΠΌΠ½ΠΎΠ³ΠΎ Π½ΠΎΠ²Ρ‹Ρ… ΠΈΠ΄Π΅ΠΉ. Π― ΡƒΠ²Π΅Ρ€Π΅Π½, Ρ‡Ρ‚ΠΎ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Ρ‹ проявятся ΠΈ Π² Π±ΡƒΠ΄ΡƒΡ‰Π΅ΠΌ.

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

Π”ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΉ