ДСцСнтрализованная Π°Ρ„Ρ„ΠΈΠ»Π΅ΠΉΡ‚-ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° с ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚Ρ‹ΠΌ исходным ΠΊΠΎΠ΄ΠΎΠΌ Π½Π° Π±Π»ΠΎΠΊΡ‡Π΅ΠΉΠ½Π΅ Waves

ДСцСнтрализованная Π°Ρ„Ρ„ΠΈΠ»Π΅ΠΉΡ‚-ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° Π½Π° Π±Π»ΠΎΠΊΡ‡Π΅ΠΉΠ½Π΅ Waves, рСализованная Π² Ρ€Π°ΠΌΠΊΠ°Ρ… Π³Ρ€Π°Π½Ρ‚Π° Waves Labs ΠΊΠΎΠΌΠ°Π½Π΄ΠΎΠΉ Bettex.

ΠŸΠΎΡΡ‚ Π½Π΅ являСтся Ρ€Π΅ΠΊΠ»Π°ΠΌΠ½Ρ‹ΠΌ! ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° ΠΈΠΌΠ΅Π΅Ρ‚ ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚Ρ‹ΠΉ исходный ΠΊΠΎΠ΄, Π΅Π΅ использованиС ΠΈ распространСниС бСсплатно. ΠŸΡ€ΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ стимулируСт Ρ€Π°Π·Π²ΠΈΡ‚ΠΈΠ΅ dApp ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ ΠΈ Π² Ρ†Π΅Π»ΠΎΠΌ способствуСт Π΄Π΅Ρ†Π΅Π½Ρ‚Ρ€Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ, Ρ‡Ρ‚ΠΎ ΠΈΠ΄Π΅Ρ‚ Π½Π° Π±Π»Π°Π³ΠΎ ΠΊΠ°ΠΆΠ΄ΠΎΠΌΡƒ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŽ Π‘Π΅Ρ‚ΠΈ.

ДСцСнтрализованная Π°Ρ„Ρ„ΠΈΠ»Π΅ΠΉΡ‚-ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° с ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚Ρ‹ΠΌ исходным ΠΊΠΎΠ΄ΠΎΠΌ Π½Π° Π±Π»ΠΎΠΊΡ‡Π΅ΠΉΠ½Π΅ Waves

ΠŸΡ€Π΅Π΄ΡΡ‚Π°Π²Π»Π΅Π½Π½Ρ‹ΠΉ dApp для affiliate-ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ являСтся шаблоном для ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΎΠ², Π²ΠΊΠ»ΡŽΡ‡Π°ΡŽΡ‰ΠΈΡ… affiliate ΠΊΠ°ΠΊ Ρ‡Π°ΡΡ‚ΡŒ своСго Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»Π°. Код ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ использован ΠΊΠ°ΠΊ шаблон для копирования, ΠΊΠ°ΠΊ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° ΠΈΠ»ΠΈ ΠΊΠ°ΠΊ Π½Π°Π±ΠΎΡ€ ΠΈΠ΄Π΅ΠΉ для тСхничСской Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ.

По Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»Ρƒ это обычная affiliate-систСма, Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΡŽΡ‰Π°Ρ Ρ€Π΅Π³ΠΈΡΡ‚Ρ€Π°Ρ†ΠΈΡŽ с ΡƒΠΊΠ°Π·Π°Π½ΠΈΠ΅ΠΌ Ρ€Π΅Ρ„Π΅Ρ€Π΅Ρ€Π°, ΠΌΠ½ΠΎΠ³ΠΎΡƒΡ€ΠΎΠ²Π½Π΅Π²ΠΎΠ΅ начислСниС Π²ΠΎΠ·Π½Π°Π³Ρ€Π°ΠΆΠ΄Π΅Π½ΠΈΠΉ Π·Π° Ρ€Π΅Ρ„Π΅Ρ€Π°Π»ΠΎΠ² ΠΈ ΠΌΠΎΡ‚ΠΈΠ²Π°Ρ†ΠΈΡŽ для рСгистрации Π² систСмС (кСшбэк). БистСма являСтся β€œΡ‡ΠΈΡΡ‚Ρ‹ΠΌβ€ dApp, Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ Π²Π΅Π±-ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ взаимодСйствуСт Π½Π°ΠΏΡ€ΡΠΌΡƒΡŽ с Π±Π»ΠΎΠΊΡ‡Π΅ΠΉΠ½ΠΎΠΌ, Π½Π΅ имСя своСго бэкэнда, Π±Π°Π·Ρ‹ Π΄Π°Π½Π½Ρ‹Ρ… ΠΈ Ρ‚.ΠΏ.

Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ Ρ‚Π΅Ρ…Π½ΠΈΠΊΠΈ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Ρ‚Π°ΠΊΠΆΠ΅ ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ ΠΏΠΎΠ»Π΅Π·Π½Ρ‹ Π²ΠΎ ΠΌΠ½ΠΎΠ³ΠΈΡ… Π΄Ρ€ΡƒΠ³ΠΈΡ… ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°Ρ…:

  • Π’Ρ‹Π·ΠΎΠ² смарт-Π°ΠΊΠΊΠ°ΡƒΠ½Ρ‚Π° Π² Π΄ΠΎΠ»Π³ с Π½Π΅ΠΌΠ΅Π΄Π»Π΅Π½Π½Ρ‹ΠΌ погашСниСм (Π² ΠΌΠΎΠΌΠ΅Π½Ρ‚ Π²Ρ‹Π·ΠΎΠ²Π° Π½Π° Π°ΠΊΠΊΠ°ΡƒΠ½Ρ‚Π΅ Π½Π΅Ρ‚ Ρ‚ΠΎΠΊΠ΅Π½ΠΎΠ² для ΠΎΠΏΠ»Π°Ρ‚Ρ‹ Π²Ρ‹Π·ΠΎΠ²Π°, Π½ΠΎ ΠΎΠ½ΠΈ ΠΏΠΎΡΠ²Π»ΡΡŽΡ‚ΡΡ Ρ‚Π°ΠΌ Π² Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π΅ Π²Ρ‹Π·ΠΎΠ²Π°).
  • PoW-captchaβ€Šβ€”β€ŠΠ·Π°Ρ‰ΠΈΡ‚Π° ΠΎΡ‚ высокочастотного Π°Π²Ρ‚ΠΎΠΌΠ°Ρ‚ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ Π²Ρ‹Π·ΠΎΠ²Π° Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ смарт-Π°ΠΊΠΊΠ°ΡƒΠ½Ρ‚Π°β€Šβ€”β€ŠΠ°Π½Π°Π»ΠΎΠ³ ΠΊΠ°ΠΏΡ‡ΠΈ, Π½ΠΎ Ρ‡Π΅Ρ€Π΅Π· Π΄ΠΎΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒΡΡ‚Π²ΠΎ использования Π²Ρ‹Ρ‡ΠΈΡΠ»ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… рСсурсов.
  • Запрос ΠΊ ΠΊΠ»ΡŽΡ‡Π°ΠΌ data ΠΏΠΎ ΡˆΠ°Π±Π»ΠΎΠ½Ρƒ.

ΠŸΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ состоит ΠΈΠ·:

  • ΠΊΠΎΠ΄Π° смарт-Π°ΠΊΠΊΠ°ΡƒΠ½Ρ‚Π° Π½Π° языкС ride4dapps (ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΏΠΎ Π·Π°Π΄ΡƒΠΌΠΊΠ΅ мСрТится Π² основной смарт-Π°ΠΊΠΊΠ°ΡƒΠ½Ρ‚, для ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ Π½Π°Π΄ΠΎ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ affiliate-Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»);
  • js-ΠΎΠ±Π΅Ρ€Ρ‚ΠΊΠΈ, Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΡŽΡ‰Π΅ΠΉ ΡƒΡ€ΠΎΠ²Π΅Π½ΡŒ абстракции Π½Π°Π΄ WAVES NODE REST API;
  • ΠΊΠΎΠ΄Π° Π½Π° vuejs framework, ΡΠ²Π»ΡΡŽΡ‰ΠΈΠΌΡΡ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ΠΎΠΌ использования Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ ΠΈ RIDE-ΠΊΠΎΠ΄Π°.

ОпишСм всС пСрСчислСнныС особСнности.

Π’Ρ‹Π·ΠΎΠ² смарт-Π°ΠΊΠΊΠ°ΡƒΠ½Ρ‚Π° Π² Π΄ΠΎΠ»Π³ с Π½Π΅ΠΌΠ΅Π΄Π»Π΅Π½Π½Ρ‹ΠΌ погашСниСм

Π’Ρ‹Π·ΠΎΠ² InvokeScript Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚ ΠΎΠΏΠ»Π°Ρ‚Ρ‹ комиссии с ΠΈΠ½ΠΈΡ†ΠΈΠΈΡ€ΡƒΡŽΡ‰Π΅Π³ΠΎ Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΡŽ Π°ΠΊΠΊΠ°ΡƒΠ½Ρ‚Π°. Π­Ρ‚ΠΎ Π½Π΅ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ°, Ссли Π²Ρ‹ Π΄Π΅Π»Π°Π΅Ρ‚Π΅ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ для Π±Π»ΠΎΠΊΡ‡Π΅ΠΉΠ½-Π³ΠΈΠΊΠΎΠ², Ρƒ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… Π½Π° ΡƒΡ‡Π΅Ρ‚Π½ΠΎΠΉ записи Π΅ΡΡ‚ΡŒ ΠΊΠ°ΠΊΠΎΠ΅-Ρ‚ΠΎ количСство Ρ‚ΠΎΠΊΠ΅Π½ΠΎΠ² WAVES, Π½ΠΎ Ссли ΠΏΡ€ΠΎΠ΄ΡƒΠΊΡ‚ ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½ Π½Π° использованиС Π² ΡˆΠΈΡ€ΠΎΠΊΠΈΡ… ΠΌΠ°ΡΡΠ°Ρ…β€Šβ€”β€ŠΡΡ‚ΠΎ становится ΡΠ΅Ρ€ΡŒΠ΅Π·Π½ΠΎΠΉ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠΎΠΉ. Π’Π΅Π΄ΡŒ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒ Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΎΠ·Π°Π±ΠΎΡ‚ΠΈΡ‚ΡŒΡΡ ΠΏΠΎΠΊΡƒΠΏΠΊΠΎΠΉ Ρ‚ΠΎΠΊΠ΅Π½ΠΎΠ² WAVES (ΠΈΠ»ΠΈ ΠΈΠ½ΠΎΠ³ΠΎ подходящСго ассСта, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌ ΠΌΠΎΠΆΠ½ΠΎ ΠΎΠΏΠ»Π°Ρ‡ΠΈΠ²Π°Ρ‚ΡŒ Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΈ), Ρ‡Ρ‚ΠΎ ΠΏΠΎΠ²Ρ‹ΡˆΠ°Π΅Ρ‚ ΠΈ Π±Π΅Π· Ρ‚ΠΎΠ³ΠΎ Π½Π΅ΠΌΠ°Π»Ρ‹ΠΉ ΠΏΠΎΡ€ΠΎΠ³ Π²Ρ…ΠΎΠ΄Π° Π² ΠΏΡ€ΠΎΠ΅ΠΊΡ‚. ΠœΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ Ρ€Π°Π·Π΄Π°Ρ‚ΡŒ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡΠΌ ассСт, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌ ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈΡ‚ ΠΎΠΏΠ»Π°Ρ‚ΠΈΡ‚ΡŒ Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΈ ΠΈ столкнСмся с риском ΠΈΡ… Π½Π΅Ρ†Π΅Π»Π΅Π²ΠΎΠ³ΠΎ использования, ΠΊΠΎΠ³Π΄Π° ΡΠΎΠ·Π΄Π°ΡŽΡ‚ΡΡ Π°Π²Ρ‚ΠΎΠΌΠ°Ρ‚ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹Π΅ систСмы для выкачивания Π»ΠΈΠΊΠ²ΠΈΠ΄Π½ΠΎΠ³ΠΎ ассСта ΠΈΠ· нашСй систСмы.

Π‘Ρ‹Π»ΠΎ Π±Ρ‹ ΠΎΡ‡Π΅Π½ΡŒ ΡƒΠ΄ΠΎΠ±Π½ΠΎ, Ссли Π±Ρ‹Π»Π° Π±Ρ‹ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚ΡŒ Π²Ρ‹Π·ΠΎΠ² InvokeScript β€œΠ·Π° счСт получатСля” (Ρ‚ΠΎΠ³ΠΎ смарт-Π°ΠΊΠΊΠ°ΡƒΠ½Ρ‚Π°, Π½Π° ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ установлСн скрипт), ΠΈ такая Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ, хотя ΠΈ Π½Π΅ ΠΎΡ‡Π΅Π²ΠΈΠ΄Π½Ρ‹ΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, сущСствуСт.

Если Π²Π½ΡƒΡ‚Ρ€ΠΈ InvokeScript произвСсти ScriptTransfer Π½Π° адрСс Π²Ρ‹Π·Ρ‹Π²Π°ΡŽΡ‰Π΅Π³ΠΎ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ компСнсируСт Π·Π°Ρ‚Ρ€Π°Ρ‡Π΅Π½Π½Ρ‹Π΅ Π½Π° fee Ρ‚ΠΎΠΊΠ΅Π½Ρ‹, Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠΉ Π²Ρ‹Π·ΠΎΠ² ΠΏΡ€ΠΎΠΉΠ΄Π΅Ρ‚ ΡƒΡΠΏΠ΅ΡˆΠ½ΠΎ, Π΄Π°ΠΆΠ΅ Ссли Π² ΠΌΠΎΠΌΠ΅Π½Ρ‚ Π²Ρ‹Π·ΠΎΠ²Π° Π½Π° Π²Ρ‹Π·Ρ‹Π²Π°ΡŽΡ‰Π΅ΠΌ Π°ΠΊΠΊΠ°ΡƒΠ½Ρ‚Π΅ Π½Π΅ Π±Ρ‹Π»ΠΎ Π½ΠΈΠΊΠ°ΠΊΠΈΡ… ассСтов. Π­Ρ‚ΠΎ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ благодаря Ρ‚ΠΎΠΌΡƒ, Ρ‡Ρ‚ΠΎ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° наличия достаточного количСства Ρ‚ΠΎΠΊΠ΅Π½ΠΎΠ² производится послС Π²Ρ‹Π·ΠΎΠ²Π° Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΈ, Π° Π½Π΅ ΠΏΠ΅Ρ€Π΅Π΄ Π½Π΅ΠΉ, Ρ‚Π°ΠΊ Ρ‡Ρ‚ΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚ΡŒ Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΈ Π² ΠΊΡ€Π΅Π΄ΠΈΡ‚ ΠΏΡ€ΠΈ условии ΠΈΡ… Π½Π΅ΠΌΠ΅Π΄Π»Π΅Π½Π½ΠΎΠ³ΠΎ погашСния.

ScriptTransfer(i.caller, i.fee, unit)

ΠŸΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π½Ρ‹ΠΉ Π½ΠΈΠΆΠ΅ ΠΊΠΎΠ΄ Π²ΠΎΠ·ΠΌΠ΅Ρ‰Π°Π΅Ρ‚ ΠΏΠΎΡ‚Ρ€Π°Ρ‡Π΅Π½Π½ΠΎΠ΅ fee Π·Π° счСт срСдств смарт-Π°ΠΊΠΊΠ°ΡƒΠ½Ρ‚Π°. Для Π·Π°Ρ‰ΠΈΡ‚Ρ‹ ΠΎΡ‚ Π½Π΅Ρ†Π΅Π»Π΅Π²ΠΎΠ³ΠΎ использования этой возмоТности Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΡƒ, Ρ‡Ρ‚ΠΎ Π²Ρ‹Π·Ρ‹Π²Π°ΡŽΡ‰ΠΈΠΉ Ρ‚Ρ€Π°Ρ‚ΠΈΡ‚ fee Π² Π½ΡƒΠΆΠ½ΠΎΠΌ ассСтС ΠΈ Π² Ρ€Π°Π·ΡƒΠΌΠ½Ρ‹Ρ… ΠΏΡ€Π΅Π΄Π΅Π»Π°Ρ…:

func checkFee(i:Invocation) = {
if i.fee > maxFee then throw(β€œunreasonable large fee”) else
if i.feeAssetId != unit then throw(β€œfee must be in WAVES”) else true
}

Π’Π°ΠΊΠΆΠ΅ для Π·Π°Ρ‰ΠΈΡ‚Ρ‹ ΠΎΡ‚ Π·Π»ΠΎΠ½Π°ΠΌΠ΅Ρ€Π΅Π½Π½ΠΎΠΉ ΠΈ бСссмыслСнной растраты срСдств Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠ° Π·Π°Ρ‰ΠΈΡ‚Π° ΠΎΡ‚ автоматичСского Π²Ρ‹Π·ΠΎΠ²Π° (PoW-captcha)

PoW-captcha

Π‘Π°ΠΌΠ° идСя proof-of-work captcha Π½Π΅ Π½ΠΎΠ²Π° ΠΈ ΡƒΠΆΠ΅ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Π° Π² Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Ρ… ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°Ρ…, Π² Ρ‚ΠΎΠΌ числС Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Π½Ρ‹Ρ… Π½Π° Π±Π°Π·Π΅ WAVES. Бмысл ΠΈΠ΄Π΅ΠΈ Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ для ΡΠΎΠ²Π΅Ρ€ΡˆΠ΅Π½ΠΈΡ дСйствия, тратящСго рСсурсы нашСго ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°, Π²Ρ‹Π·Ρ‹Π²Π°ΡŽΡ‰ΠΈΠΉ Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΏΠΎΡ‚Ρ€Π°Ρ‚ΠΈΡ‚ΡŒ ΠΈ свои собствСнныС рСсурсы, Ρ‡Ρ‚ΠΎ Π΄Π΅Π»Π°Π΅Ρ‚ Π°Ρ‚Π°ΠΊΡƒ Π½Π° истощСниС рСсурсов довольно Π·Π°Ρ‚Ρ€Π°Ρ‚Π½ΠΎΠΉ. Для ΠΎΡ‡Π΅Π½ΡŒ Π»Π΅Π³ΠΊΠΎΠΉ ΠΈ ΠΌΠ°Π»ΠΎΠ·Π°Ρ‚Ρ€Π°Ρ‚Π½ΠΎΠΉ Π²Π°Π»ΠΈΠ΄Π°Ρ†ΠΈΠΈ Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎ ΠΎΡ‚ΠΏΡ€Π°Π²ΠΈΡ‚Π΅Π»ΡŒ Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΈ Ρ€Π΅ΡˆΠΈΠ» PoW-Π·Π°Π΄Π°Ρ‡Ρƒ, сущСствуСт ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° id Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΈ:

if take(toBase58String(i.transactionId), 3) != β€œ123” then throw(β€œproof of work failed”) else

Для Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ провСсти Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΡŽ, Π²Ρ‹Π·Ρ‹Π²Π°ΡŽΡ‰ΠΈΠΉ Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΏΠΎΠ΄ΠΎΠ±Ρ€Π°Ρ‚ΡŒ Ρ‚Π°ΠΊΠΈΠ΅ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π΅Π΅ base58 ΠΊΠΎΠ΄ (id) начинался Π½Π° Ρ†ΠΈΡ„Ρ€Ρ‹ 123, Ρ‡Ρ‚ΠΎ соотвСтствуСт Π² срСднСм ΠΏΠ°Ρ€Π΅ дСсятков сСкунд процСссорного Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ ΠΈ Π² Ρ†Π΅Π»ΠΎΠΌ Ρ€Π°Π·ΡƒΠΌΠ½ΠΎ для нашСй Π·Π°Π΄Π°Ρ‡ΠΈ. Если трСбуСтся Π±ΠΎΠ»Π΅Π΅ простой ΠΈΠ»ΠΈ Π±ΠΎΠ»Π΅Π΅ слоТный PoW, Ρ‚ΠΎ Π·Π°Π΄Π°Ρ‡Ρƒ Π»Π΅Π³ΠΊΠΎ Π΄ΠΎΡ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ ΠΎΡ‡Π΅Π²ΠΈΠ΄Π½Ρ‹ΠΌ способом.

Запрос ΠΊ ΠΊΠ»ΡŽΡ‡Π°ΠΌ data ΠΏΠΎ ΡˆΠ°Π±Π»ΠΎΠ½Ρƒ

Для Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ blockchain Π² качСствС Π±Π°Π·Ρ‹ Π΄Π°Π½Π½Ρ‹Ρ…, ΠΆΠΈΠ·Π½Π΅Π½Π½ΠΎ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΈΠΌΠ΅Ρ‚ΡŒ инструмСнты API для запросов ΠΊ Π±Π°Π·Π΅ ΠΊΠ°ΠΊ key-val ΠΏΠΎ шаблонам. Π’Π°ΠΊΠΎΠΉ инструмСнтарий появился Π² Π½Π°Ρ‡Π°Π»Π΅ июля 2019 Π² Π²ΠΈΠ΄Π΅ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π° ?matches Ρƒ запроса REST API /addresses/data?matches=regexp. Π’Π΅ΠΏΠ΅Ρ€ΡŒ, Ссли Π½Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ ΠΈΠ· Π²Π΅Π±-прилоТСния ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ Π½Π΅ ΠΎΠ΄ΠΈΠ½ ΠΊΠ»ΡŽΡ‡ ΠΈ Π½Π΅ всС ΠΊΠ»ΡŽΡ‡ΠΈ сразу, Π° Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΊΠ°ΠΊΡƒΡŽ-Ρ‚ΠΎ Π³Ρ€ΡƒΠΏΠΏΡƒ, Ρ‚ΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ Π²Ρ‹Π±ΠΎΡ€ΠΊΡƒ ΠΏΠΎ ΠΈΠΌΠ΅Π½ΠΈ ΠΊΠ»ΡŽΡ‡Π°. НапримСр, Π² Π΄Π°Π½Π½ΠΎΠΌ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π΅ Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΈ Π²Ρ‹Π²ΠΎΠ΄Π° срСдств ΠΊΠΎΠ΄ΠΈΡ€ΡƒΡŽΡ‚ΡΡ Π² Π²ΠΈΠ΄Π΅

withdraw_${userAddress}_${txid}

Ρ‡Ρ‚ΠΎ позволяСт ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ список Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΉ Π½Π° Π²Ρ‹Π²ΠΎΠ΄ срСдств для любого Π·Π°Π΄Π°Π½Π½ΠΎΠ³ΠΎ адрСса ΠΏΠΎ ΡˆΠ°Π±Π»ΠΎΠ½Ρƒ:

?matches=withdraw_${userAddress}_.*

Π’Π΅ΠΏΠ΅Ρ€ΡŒ Ρ€Π°Π·Π±Π΅Ρ€Π΅ΠΌ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρ‹ Π³ΠΎΡ‚ΠΎΠ²ΠΎΠ³ΠΎ Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ.

Код на vuejs

Код являСтся Ρ€Π°Π±ΠΎΡ‡Π΅ΠΉ дСмонстрациСй, Π±Π»ΠΈΠ·ΠΊΠΎΠΉ ΠΊ Ρ€Π΅Π°Π»ΡŒΠ½ΠΎΠΌΡƒ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Ρƒ. Он Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΠ΅Ρ‚ Π²Ρ…ΠΎΠ΄ Ρ‡Π΅Ρ€Π΅Π· Waves Keeper ΠΈ Ρ€Π°Π±ΠΎΡ‚Ρƒ с Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΎΠΉ affiliate.js, с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ ΠΎΠ½ рСгистрируСт ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ Π² систСмС, ΠΎΠΏΡ€Π°ΡˆΠΈΠ²Π°Π΅Ρ‚ Π΄Π°Π½Π½Ρ‹Π΅ ΠΎ транзакциях, Π° Ρ‚Π°ΠΊΠΆΠ΅ позволяСт Π²Ρ‹Π²ΠΎΠ΄ΠΈΡ‚ΡŒ Π·Π°Ρ€Π°Π±ΠΎΡ‚Π°Π½Π½Ρ‹Π΅ срСдства Π½Π° Π°ΠΊΠΊΠ°ΡƒΠ½Ρ‚ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ.

ДСцСнтрализованная Π°Ρ„Ρ„ΠΈΠ»Π΅ΠΉΡ‚-ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° с ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚Ρ‹ΠΌ исходным ΠΊΠΎΠ΄ΠΎΠΌ Π½Π° Π±Π»ΠΎΠΊΡ‡Π΅ΠΉΠ½Π΅ Waves

Код на RIDE

Бостоит ΠΈΠ· Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ register, fund ΠΈ withdraw.

Ѐункция register рСгистрируСт Π² систСмС ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ. Π£ Π½Π΅Π΅ Π΄Π²Π° ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π°: referer (адрСс Ρ€Π΅Ρ„Π΅Ρ€Π°) ΠΈ Π½Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹ΠΉ Π² ΠΊΠΎΠ΄Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ salt, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π½ΡƒΠΆΠ΅Π½ для ΠΏΠΎΠ΄Π±ΠΎΡ€Π° id Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΈ (Π·Π°Π΄Π°Ρ‡Π° PoW-captcha).

Ѐункция (ΠΊΠ°ΠΊ ΠΈ ΠΎΡΡ‚Π°Π»ΡŒΠ½Ρ‹Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΈΠ· Π΄Π°Π½Π½ΠΎΠ³ΠΎ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°) ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ Ρ‚Π΅Ρ…Π½ΠΈΠΊΡƒ Π²Ρ‹Π·ΠΎΠ²Π° Π² Π΄ΠΎΠ»Π³, Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ΠΎΠΌ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ являСтся финансированиС Π²Ρ‹ΠΏΠ»Π°Ρ‚Ρ‹ fee Π·Π° Π²Ρ‹Π·ΠΎΠ² этой Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ. Благодаря Π΄Π°Π½Π½ΠΎΠΌΡƒ Ρ€Π΅ΡˆΠ΅Π½ΠΈΡŽ, Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ρ‡Ρ‚ΠΎ создавший кошСлСк ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒ сразу ΠΌΠΎΠΆΠ΅Ρ‚ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ с систСмой ΠΈ Π΅ΠΌΡƒ Π½Π΅ Π½ΡƒΠΆΠ½ΠΎ ΠΎΠ·Π°Π΄Π°Ρ‡ΠΈΠ²Π°Ρ‚ΡŒΡΡ вопросом приобрСтСния ΠΈΠ»ΠΈ получСния ассСта, ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‰Π΅Π³ΠΎ ΠΎΠΏΠ»Π°Ρ‚ΠΈΡ‚ΡŒ комиссию Π·Π° Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΡŽ.

Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ΠΎΠΌ Ρ€Π°Π±ΠΎΡ‚Ρ‹ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ рСгистрации ΡΠ²Π»ΡΡŽΡ‚ΡΡ Π΄Π²Π΅ записи:

${owner)_referer = referer
${referer}_referral_${owner} = owner

Π­Ρ‚ΠΎ позволяСт ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚ΡŒ прямой ΠΈ ΠΎΠ±Ρ€Π°Ρ‚Π½Ρ‹ΠΉ поиски (Ρ€Π΅Ρ„Π΅Ρ€Π΅Ρ€ Π΄Π°Π½Π½ΠΎΠ³ΠΎ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ ΠΈ всС Ρ€Π΅Ρ„Π΅Ρ€Π°Π»Ρ‹ Π΄Π°Π½Π½ΠΎΠ³ΠΎ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ).

Ѐункция fund являСтся скорСС шаблоном для Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ настоящСго Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»Π°. Π’ прСдставлСнном Π²ΠΈΠ΄Π΅ ΠΎΠ½Π° Π±Π΅Ρ€Π΅Ρ‚ всС пСрСчисляСмыС Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠ΅ΠΉ срСдства ΠΈ распрСдСляСт ΠΈΡ… Π½Π° Π°ΠΊΠΊΠ°ΡƒΠ½Ρ‚Ρ‹ Ρ€Π΅Ρ„Π΅Ρ€Π΅Ρ€ΠΎΠ² 1, 2, 3 уровня, Π½Π° Π°ΠΊΠΊΠ°ΡƒΠ½Ρ‚ β€œΠΊΠ΅ΡˆΠ±ΡΠΊΠ°β€ ΠΈ Π°ΠΊΠΊΠ°ΡƒΠ½Ρ‚ β€œΡΠ΄Π°Ρ‡ΠΈβ€ (сюда ΠΏΠΎΠΏΠ°Π΄Π°Π΅Ρ‚ всС, Ρ‡Ρ‚ΠΎ ΠΎΡΡ‚Π°Π»ΠΎΡΡŒ ΠΏΡ€ΠΈ распрСдСлСнии ΠΏΠΎ ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰ΠΈΠΌ Π°ΠΊΠΊΠ°ΡƒΠ½Ρ‚Π°ΠΌ).

ΠšΠ΅ΡˆΠ±ΡΠΊβ€Šβ€”β€ŠΡΡ‚ΠΎ срСдство стимулирования ΠΊΠΎΠ½Π΅Ρ‡Π½ΠΎΠ³ΠΎ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ для участия Π² Ρ€Π΅Ρ„Π΅Ρ€Π°Π»ΡŒΠ½ΠΎΠΉ систСмС. Π’Ρ‹ΠΏΠ»Π°Ρ‡ΠΈΠ²Π°Π΅ΠΌΡƒΡŽ Ρ‡Π°ΡΡ‚ΡŒ комиссии систСмой Π² Π²ΠΈΠ΄Π΅ β€œΠΊΠ΅ΡˆΠ±ΡΠΊΠ°β€ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒ ΠΌΠΎΠΆΠ΅Ρ‚ ΡΠ½ΡΡ‚ΡŒ Ρ‚Π°ΠΊ ΠΆΠ΅, ΠΊΠ°ΠΊ вознаграТдСния Π·Π° Ρ€Π΅Ρ„Π΅Ρ€Π°Π»ΠΎΠ².

ΠŸΡ€ΠΈ использовании Ρ€Π΅Ρ„Π΅Ρ€Π°Π»ΡŒΠ½ΠΎΠΉ систСмы Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ fund слСдуСт Π²ΠΈΠ΄ΠΎΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ, Π²ΡΡ‚Ρ€ΠΎΠΈΡ‚ΡŒ Π² ΠΎΡΠ½ΠΎΠ²Π½ΡƒΡŽ Π»ΠΎΠ³ΠΈΠΊΡƒ Ρ‚ΠΎΠ³ΠΎ смарт-Π°ΠΊΠΊΠ°ΡƒΠ½Ρ‚Π°, Π½Π° ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ Π±ΡƒΠ΄Π΅Ρ‚ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ систСма. НапримСр, Ссли Ρ€Π΅Ρ„Π΅Ρ€Π°Π»ΡŒΠ½ΠΎΠ΅ Π²ΠΎΠ·Π½Π°Π³Ρ€Π°ΠΆΠ΄Π΅Π½ΠΈΠ΅ выплачиваСтся Π·Π° ΡΠ΄Π΅Π»Π°Π½Π½ΡƒΡŽ ставку, Ρ‚ΠΎ функция fund Π΄ΠΎΠ»ΠΆΠ½Π° Π±Ρ‹Ρ‚ΡŒ встроСна Π² Π»ΠΎΠ³ΠΈΠΊΡƒ, Π³Π΄Π΅ дСлаСтся ставка (ΠΈΠ»ΠΈ производится ΠΈΠ½ΠΎΠ΅ Ρ†Π΅Π»Π΅Π²ΠΎΠ΅ дСйствиС, Π·Π° ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ ΠΈ выплачиваСтся Π²ΠΎΠ·Π½Π°Π³Ρ€Π°ΠΆΠ΄Π΅Π½ΠΈΠ΅). Π’ Π΄Π°Π½Π½ΡƒΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ Π·Π°ΠΊΠΎΠ΄ΠΈΡ€ΠΎΠ²Π°Π½ΠΎ Ρ‚Ρ€ΠΈ уровня Ρ€Π΅Ρ„Π΅Ρ€Π°Π»ΡŒΠ½Ρ‹Ρ… Π²ΠΎΠ·Π½Π°Π³Ρ€Π°ΠΆΠ΄Π΅Π½ΠΈΠΉ. Если трСбуСтся ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ большС ΠΈΠ»ΠΈ мСньшС ΡƒΡ€ΠΎΠ²Π½Π΅ΠΉ, Ρ‚ΠΎ это Ρ‚Π°ΠΊΠΆΠ΅ правится Π² ΠΊΠΎΠ΄Π΅. ΠŸΡ€ΠΎΡ†Π΅Π½Ρ‚ вознаграТдСния задаСтся константами level1-level3, Π² ΠΊΠΎΠ΄Π΅ ΠΎΠ½ считаСтся ΠΊΠ°ΠΊ amount * level / 1000, Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ 1 соотвСтствуСт 0,1% (это Ρ‚ΠΎΠΆΠ΅ ΠΌΠΎΠΆΠ½ΠΎ ΠΌΠ΅Π½ΡΡ‚ΡŒ Π² ΠΊΠΎΠ΄Π΅).

Π’Ρ‹Π·ΠΎΠ² Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ измСняСт баланс ΡƒΡ‡Π΅Ρ‚Π½ΠΎΠΉ записи ΠΈ Ρ‚Π°ΠΊΠΆΠ΅ создаСт записи для Ρ†Π΅Π»Π΅ΠΉ логгирования Π²ΠΈΠ΄Π°:

fund_address_txid = address:owner:inc:level:timestamp
Для получСния timestamp (Ρ‚Π΅ΠΊΡƒΡ‰Π΅Π³ΠΎ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ) ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ такая Π²ΠΎΡ‚ связка
func getTimestamp() = {
let block = extract(blockInfoByHeight(height))
toString(block.timestamp)
}

Π’ΠΎ Π΅ΡΡ‚ΡŒ врСмя Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΈβ€Šβ€”β€ŠΡΡ‚ΠΎ врСмя Π±Π»ΠΎΠΊΠ°, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ ΠΎΠ½ находится. Π­Ρ‚ΠΎ Π½Π°Π΄Π΅ΠΆΠ½Π΅Π΅, Ρ‡Π΅ΠΌ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ timestamp ΠΈΠ· самой Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΈ, Ρ‚Π΅ΠΌ Π±ΠΎΠ»Π΅Π΅, Ρ‡Ρ‚ΠΎ ΠΎΠ½ Π½Π΅ доступСн ΠΈΠ· callable.
Ѐункция withdraw Π²Ρ‹Π²ΠΎΠ΄ΠΈΡ‚ всС Π½Π°ΠΊΠΎΠΏΠ»Π΅Π½Π½Ρ‹Π΅ вознаграТдСния Π½Π° ΡƒΡ‡Π΅Ρ‚Π½ΡƒΡŽ запись ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ. Π‘ΠΎΠ·Π΄Π°Π΅Ρ‚ записи для Ρ†Π΅Π»Π΅ΠΉ логгирования:

# withdraw log: withdraw_user_txid=amount:timestamp

ΠŸΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅

Основная Ρ‡Π°ΡΡ‚ΡŒ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡβ€Šβ€”β€ŠΠ±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° affiliate.js, ΡΠ²Π»ΡΡŽΡ‰Π°ΡΡΡ мостом ΠΌΠ΅ΠΆΠ΄Ρƒ модСлями Π΄Π°Π½Π½Ρ‹Ρ… affiliate ΠΈ WAVES NODE REST API. Π Π΅Π°Π»ΠΈΠ·ΡƒΠ΅Ρ‚ ΡƒΡ€ΠΎΠ²Π΅Π½ΡŒ абстракции, нСзависимый ΠΎΡ‚ Ρ„Ρ€Π΅ΠΉΠΌΠ²ΠΎΡ€ΠΊΠ° (ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ использован любой). АктивныС Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ (register, withdraw) ΠΏΡ€Π΅Π΄ΠΏΠΎΠ»Π°Π³Π°ΡŽΡ‚, Ρ‡Ρ‚ΠΎ Π² систСмС установлСн Waves Keeper, сама Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° это Π½Π΅ провСряСт.

Π Π΅Π°Π»ΠΈΠ·ΡƒΠ΅Ρ‚ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹:

fetchReferralTransactions
fetchWithdrawTransactions
fetchMyBalance
fetchReferrals
fetchReferer
withdraw
register

Π€ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π» ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ² ΠΎΡ‡Π΅Π²ΠΈΠ΄Π΅Π½ ΠΈΠ· Π½Π°Π·Π²Π°Π½ΠΈΠΉ, ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ ΠΈ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅ΠΌΡ‹Π΅ Π΄Π°Π½Π½Ρ‹Π΅ описаны Π² ΠΊΠΎΠ΄Π΅. Π”ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠ΅Π² Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚ функция registerβ€Šβ€”β€ŠΠΎΠ½Π° запускаСт Ρ†ΠΈΠΊΠ» ΠΏΠΎΠ΄Π±ΠΎΡ€Π° id Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΈ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΠ½ начинался Π½Π° 123β€Šβ€”β€ŠΡΡ‚ΠΎ описанная Π²Ρ‹ΡˆΠ΅ PoW-captcha, Π·Π°Ρ‰ΠΈΡ‰Π°ΡŽΡ‰Π°Ρ ΠΎΡ‚ массовых рСгистраций. Ѐункция Π½Π°Ρ…ΠΎΠ΄ΠΈΡ‚ Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΡŽ с Π½ΡƒΠΆΠ½Ρ‹ΠΌ id, Π° ΠΏΠΎΡ‚ΠΎΠΌ подписываСт Ρ‡Π΅Ρ€Π΅Π· Waves Keeper.

DEX affiliate ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° доступна Π½Π° GitHub.com.

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