Истраживање ЦриптоКиттиес - Дио 1: Вађење података

Извор: хттпс://ввв.цриптокиттиес.цо/китти/101

Ако ово читате, вероватно сте чули за игру која је последњих неколико месеци привукла свачију пажњу мреже Етхереум: ЦриптоКиттиес!

Укратко, игра се састоји од прикупљања виртуалних мачака. Мачке креирају играчи који могу узгајати две мачке како би генерисали нову. Свака мачка има свој генетски низ, који одређује њихове физичке особине. Њихов геном је функција гена њихових родитеља плус неке случајности. Поред узгоја, Акиом Зен, компанија која стоји иза игре, може створити и до 50.000 мачака са унапред дефинисаним карактеристикама. Постоји тржиште за куповину и продају мачака и друго за „изнајмљивање“ мачака за потребе узгоја. Више о игри можете прочитати овде.

Блоцк Сциенце је фирма за технолошка истраживања и аналитику специјализована за дизајн и процену децентрализованих економских система. Анализа аспеката економије ЦриптоКиттиес чинила се као сјајна прилика да побољшамо наше алате за вађење података, а истовремено добијемо руку стварним подацима из стварне (и живе!) Децентрализоване апликације.

Овај блог је подељен на два дела:

  • Део 1 (овај пост) покрива техничке аспекте који се односе на вађење и трансформисање података из Етхереум блоцкцхаина.
  • Други део садржи стварну анализу неких података о игри.

Извлачење података из Етхереум Блоцкцхаина

Иако је све што се икада догодило на мрежи Етхереум забиљежено на блоцкцхаину, претварање тих битова у смислене податке није увијек једноставно. Једноставно је издвојити податке о трансакцијама из којих се наводи да је на датом блокадном рачуну А послао неки етер (ЕТХ) на рачун Б и поставио одређену цену гаса за ту трансакцију која ће бити обрађена. Међутим, када радимо на трансакцијама посланим уговорима, декодирање података блоцкцхаина је сродно имплементацији ЕТЛ-а из више текстуалних датотека фиксне ширине, чији су формати описани само у изворном коду софтвера који их је створио.

Трансакције које позивају функције паметним уговорима

Узмимо за пример трансакцију која је послата на уговор 0кб1690ц08е213а35ед9баб7б318де14420фб57д8ц са следећим садржајем у пољу података

0к454а2аб3000000000000000000000000000000000000000000000000000000000000000871ад

Шта то ради?

Први део поља података (0к454а2аб3) односи се на функцију унутар паметног уговора коју позива трансакција. То су прва четири бајта хасх-а функцијског потписа, који је дефинисан као име функције, а затим типови података његових параметара.

кеццак256 ("<функција> (<тип_оф_дата_1>, <…>, <тип_оф_дата_Н>)")

Преостали бајти су вредности параметара функције. О томе можете детаљно прочитати овде.

Чак и знајући та 4 бајта, како можемо рећи која се функција позива или колико параметара има? У овом конкретном случају, знамо да је уговор 0кб1690ц ... паметни уговор на аукцији ЦриптоКиттиес - тржиште куповине и продаје мачака. А с обзиром на то да је његов изворни код јавности објављен, знамо да има функцију која се зове понуда

/// Понуде на отвореној аукцији, завршавању аукције и
/// пренос власништва над НФТ-ом ако је довољно Етхер-а.
/// парам _токенИД: ИД токена за надметање.
функционална понуда (уинт256 _токенИд)

Ако израчунамо хасх потписа понуде функције, можемо видети да су прва четири бајта тачно она која су присутна у подацима о трансакцији.

кеццак256 („понуда (уинт256)“) = 454а2аб3ц602фд9…

А будући да функција узима само један аргумент, можемо рећи да је све што следи након прва четири бајта у подацима трансакције тај параметар. Другим речима, трансакција је надметала мачка број 0к871ад (553389).

Смарт уговори који евидентирају информације

Уобичајени су паметни уговори да бележе податке током њиховог извршења. Дневници снимљени уговором могу се добити позивањем ЈСОН РПЦ АПИ етх_гетлогс методе. Као што је случај са трансакцијама које позивају уговорне функције, морамо знати изворни код уговора да бисмо декодирали податке које враћа овај АПИ. На пример, шта значи дневник са следећим подацима?

блоцкНумбер: 0к51968ф
Теми: [0к0а5311бд2а6608ф08а180дф2ее7ц5946819а649б204б554бб8е39825б2ц50ад5] дата: 0к0000000000000000000000001б8ф7б13б14а59д9770ф7ц1789цф727046ф7е542000000000000000000000000000000000000000000000000000000000009фац1000000000000000000000000000000000000000000000000000000000009ф80е000000000000000000000000000000000000000000000000000000000008957200004а50б390а6738697012а030ац21д585б4ц8214ае39446194054б98е0б98ф

Дневници се бележе када уговор покрене догађај. Први елемент низа тема (који у нашем примеру има само један елемент) је хеш потпис потписа. У случају ЦриптоКиттиес-а, дневници се бележе када мачка затрудни и, на пример, када се роди мачка.

/// Трудни догађај се покреће када се две мачке успешно размноже
/// и тајмер трудноће почиње за матрону.
догађај трудна (власник адресе, уинт256 матронИд, уинт256 сиреИд, уинт256 цоолдовнЕндБлоцк);
/// Порођајни догађај се покреће сваки пут када дође ново маче
/// постојање. Ово очигледно укључује и сваки пут када се мачка створи
/// методом ГивеБиртх, али се такође назива када
/// створена је нова ген0 мачка.
догађај Рођење (власник адресе, уинт256 киттиИд, уинт256 матронИд, уинт256 сиреИд, уинт256 гени);

Погледајте како хасх потписа Биртх евент одговара вредности у записнику у нашем примеру

кеццак256 („Рођење (адреса, уинт256, уинт256, уинт256, уинт256)“) = 0к0а5311бд2а6608ф08а180дф2ее7ц5946819а649б204б554бб8е39825б2ц50ад5

За сада знамо да се на блоку број 51968Ф (5346959) родила криптовалута! Следећи корак у нашем процесу декодирања је подела поља података према пет параметара догађаја рођења. Први параметар је Етхереум адреса која је дугачка 160 бита, али је кодирана са 256 бита (нула су додата са леве стране адресе). Остали параметри су 256-битни цели бројеви. Поље података је, дакле, подељено у 5 делова, сваки са 256-битним (64 хексадецимална карактера).

власник: 0000000000000000000000001б8ф7б13б14а59д9770ф7ц1789цф727046ф7е542
киттиИд:
000000000000000000000000000000000000000000000000000000000009фац1
матронИд:
000000000000000000000000000000000000000000000000000000000009ф80е
сиреИд:
00000000000000000000000000000000000000000000000000000000000000089572
гени:
00004а50б390а6738697012а030ац21д585б4ц8214ае39446194054б98е0б98ф

Видите шта сам мислио под "имплементацијом ЕТЛ-а из више текстуалних датотека фиксне ширине чији су формати описани само у изворном коду софтвера који их је створио"? :-)

Пређите на други део где ћемо делити неке занимљиве чињенице на које смо наишли док анализирамо податке ЦриптоКиттиес игре!

Посебна захвала тиму Блоцк Сциенце на истраживању, увидима и преиспитивању.