Зміцер Пічулін, вядомы пад нікам «deemru», стаў пераможцам гульні.
Каб перамагчы ў
Перамогу Зміцеру прынёс створаны ім бот
Раскажыце крыху пра сябе. Чым займаецеся? Калі зацікавіліся тэхналогіяй блокчэйн?
Я - распрацоўшчык у сферы інфармацыйнай бяспекі. У блокчэйн прыйшоў з «хайпам» 2017 года, разабраўся ў тэхналогіі і застаўся дзеля тэхналогіі.
Што стала асноўнай матывацыяй для ўдзелу ў гульні?
Перш за ўсё - тэхнічная цікавасць. Жадалася разабрацца як яна працуе, знайсці ўразлівасці, не даць гульні скончыцца, ну і «патроліць» астатніх гульцоў, вядома.
Вы ўжо вырашылі, як выдаткуеце выйгрыш? У чым будзеце захоўваць яго, калі вырашыце пакуль не марнаваць?
Не прыдумаў, што рабіць з выйгрышам. Не чакаў яго, таму і планаў няма. Пакуль будзе ляжаць як ёсць. Можа, у які-небудзь праект на Waves перацячэ.
Чаму вы вырашылі прыняць удзел у гульні з дапамогай бота? Як прыйшла ідэя Patrollo? Маглі б расказаць падрабязней пра яго распрацоўку?
З уразлівасцямі не выйшла. Я «падняў» гульню ў тэставай сетцы, пагуляў сам з сабой, перакаштаваў усе варыянты, але ўсё аказалася «жалезна», уразлівасцяў у кантракце няма. Стала зразумела, што гэтым шляхам не перамагчы.
Як вы шукалі ўразлівасці? Якія ў Вас былі гіпотэзы? Не маглі б прывесці прыклад кода?
Гіпотэз было дзве. Па-першае, напад на праверкі тыпаў дадзеных у запісах дата-транзакцый. Напрыклад, я разлічваў, што дрэннае кадаваньне дазволіць абыйсці праверку перавыкарыстання transaction ID. Другая - атака на цэлалікавае перапаўненне. Я разлічваў, што ёсць спосаб задаць занадта вялікую ці адмоўную вышыню і паспрабаваць апынуцца ў мінулым.
$tx = $wk->txBroadcast( $wk->txSign( $wk->txData( [ 'heightToGetMoney' => -9223372036854775807 ] ) ) ));
Што вы зрабілі, калі ўбачылі, што чаканні па ўразлівасцях не пацвердзіліся?
У сваім тэлеграм-чаце Tradisys панаракаў, што пакуль у сеткі ўсё ціха, гульня будзе вечнай, але ў блытаніне (пры абнаўленнях нод або непрадбачаных форках) шанцы ў добрых робатаў павялічваюцца. Там жа, у чаце, я прыняў выклік - напісаць добрага бота, - што і зрабіў праз пару дзён. Код Patrollo я напісаў на мове PHP, на аснове майго фрэймворка
Праверыў працу ў тэставай сетцы, выклаў код на github, запусціў робата ў асноўнай сетцы і забыўся пра яго.
Мая канфігурацыя Patrollo павінна была вырашаць дзве задачы: рабіць стаўкі як мага радзей і працаваць як мага надзейней.
Першае вырашаецца вельмі рызыкоўнымі стаўкамі, пажадана ў самым апошнім блоку. У выніку я ўсё ж паставіў робата на перадапошні блок, але з дадатковай затрымкай у 29 секунд. Гэта дазволіла зрабіць усяго восем ставак за ўвесь час гульні.
Чаму менавіта 29 секунд? Як вы прыйшлі да гэтага ліку?
29 секунд з'явіліся паступова. Спачатку затрымкі не было, але я заўважыў, што на перадапошнім блоку бывалі выпадкі адначасовых ставак - гэта значыць, ставіць не было сэнсу. Тады з'явілася затрымка - здаецца, у 17 секунд, але і яна не дапамагла: усё яшчэ былі адначасовыя стаўкі. Тады я вырашыў рызыкаваць мацней, але ўжо сапраўды, каб не было адначасовых ставак. Чаму 17, 29 ітд.? Проста любоў да простых лікаў. 24, 25, 26, 27, 28, 30 - усе складовыя. А больш за 30 секунд ужо было б зусім рызыкоўна.
Як вырашылася пытанне надзейнасці?
Надзейнасць вырашалася, галоўным чынам, механізмам выбару працоўнай ноды і, у меншай ступені, правядзеннем трансфер-транзакцыі для стаўкі загадзя, каб стаўка ў дата-транзакцыі ўжо сапраўды спасылалася на існуючую ў блокчейне транзакцыю.
Падчас кожнага круга цыклу ўсе ноды, зададзеныя ў канфігурацыі, апытваліся на прадмет іх бягучай вышыні, выбіралася нода з найвялікай бягучай вышынёй, і з ёй адбывалася наступнае ўзаемадзеянне. У маім разуменні гэта павінна было абараніць ад форкаў, недаступнасці, кэшавання і магчымых памылак на нодах. Ёсць упэўненасць, што менавіта гэты просты механізм і прывёў да перамогі.
У чым, на ваш погляд, асноўныя асаблівасці і перавагі гульняў на блокчейне? Наколькі перспектыўныя для распрацоўкі гульняў публічныя блокчейны наогул і блокчейн Waves у прыватнасці?
Галоўныя перавагі - вядомыя, зафіксаваныя і не змяняюцца правілы гульні, плюс роўныя ўмовы доступу да гульні з любой кропкі свету.
Гульні на грошы па-за блокчэйнам павінны памерці.
У Waves багаты тэхнічны функцыянал, аднак існуюць нюансы, як уласцівыя любым блокчейнам, так і спецыфічныя. І тыя, і іншыя пакуль не вельмі добра адлюстраваны ў існуючых інструментах распрацоўшчыка.
Напрыклад, калі б вы паспрабавалі рэагаваць на транзакцыі ў рэжыме рэальнага часу, а не на дыстанцыі ў 5-10 пацверджанняў, вы б даведаліся аб рэдкіх, але мелых месца з'явах: пераскокванні транзакцый з блока ў блок, згубе транзакцый у адных блоках і з'яўленні ў іншых. Усё гэта крытычна для хуткасці і надзейнасці любых прыкладанняў і павінна быць вырашана ў агульным выглядзе, але пакуль кожны распрацоўшчык дасягае неабходнага яму ўзроўню надзейнасці самастойна. З часам, вядома, усё гэта будзе вырашана, але пакуль ёсць вызначаны, даволі высокі, парог уваходжання і страх перад спецыфікай працы сапраўды дэцэнтралізаваных блокчейнов у цэлым.
Чым гульня FOMO адрозніваецца ад іншых вядомых вам гульняў на блокчейне? У чым яе перавагі і недахопы?
Гэта - гульні доўга. Цікавасць да такіх гульняў расце з велічынёй выйгрышу, а велічыня выйгрышу расце з часам.
Ідэальна, калі гульня ніколі не скончыцца. Калі гульня заканчваецца - гэта сумна…
Нядаўна была
Так, калі будзе час і цікавасць, я распачну тыя ж крокі: аналіз на ўразлівасці, гульня з самім сабой у тэставай сетцы, бот, open source і г.д.
У заключэнне раскажыце, калі ласка, пра свае планы як распрацоўшчыка.
Мне цікава вырашаць нявырашаныя задачы, а ў тэме блокчейна шмат нявырашаных задач. Гэта - сапраўдны выклік! І ён прыняты.
Крыніца: habr.com