Odkrywanie CryptoKitties - Część 2: The CryptoMidwives

To druga część posta na blogu na temat wydobywania i analizowania danych z blockchainu Ethereum. Możesz pominąć wprowadzenie, jeśli czytasz część 1

Wprowadzenie

Jeśli to czytasz, prawdopodobnie słyszałeś o grze, która przyciągnęła uwagę wszystkich w sieci Ethereum w ciągu ostatnich kilku miesięcy: CryptoKitties!

Krótko mówiąc, gra polega na zbieraniu wirtualnych kotów. Koty są tworzone przez graczy w grze, którzy mogą hodować dwa koty, aby wygenerować nowy. Każdy kot ma własną sekwencję genetyczną, która określa ich fizyczne atrybuty. Ich genom jest funkcją genów ich rodziców oraz pewnej losowości. Oprócz hodowli Axiom Zen, firma stojąca za grą, może stworzyć do 50 000 kotów o określonych właściwościach. Istnieje rynek na kupno i sprzedaż kotów, a drugi na „wypożyczanie” kotów do celów hodowlanych. Możesz przeczytać więcej o grze tutaj.

Block Science to firma zajmująca się badaniami i analizą technologii, specjalizująca się w projektowaniu i ocenie zdecentralizowanych systemów ekonomicznych. Analiza aspektów gospodarki CryptoKitties wydawała się świetną okazją do udoskonalenia naszych narzędzi do ekstrakcji danych, a jednocześnie zdobycia niektórych danych z rzeczywistego świata z żywej (i żywej!) Zdecentralizowanej aplikacji.

Ten post został podzielony na dwie części:

  • Część 1 obejmuje aspekty techniczne związane z wydobywaniem i przekształcaniem danych z łańcucha bloków Ethereum.
  • Część 2 (ten post) zawiera rzeczywistą analizę niektórych danych gry.

Analiza danych

Naszą analizę rozpoczęliśmy od utworzenia ramki danych ze wszystkimi wpisami dziennika zapisanymi między blokami 4605167 i 5374870 przez trzy inteligentne kontrakty CryptoKitties: podstawową mechanikę gry, aukcję sprzedaży i aukcję sire (w której gracze „wynajmują” swoje koty, aby inni mogli się rozmnażać z nimi ). Z liczb (wykres 1) dochodzimy do dwóch interesujących wniosków:

Wykres 1 - Liczby częstotliwości zdarzeń CryptoKitties
  1. Zdarzenie w ciąży występuje znacznie częściej niż aukcja Udane zdarzenie inteligentnego kontraktu na aukcji. Powinno to oznaczać, że większość hodowli odbywa się między kotami należącymi do tego samego gracza, ponieważ wiemy z kodu źródłowego gry, że każda udana aukcja rodząca powoduje ciążę; i
  2. Zdarzenie Transfer jest tylko o 6% częstsze niż suma zdarzeń, które go powodują - z kodu źródłowego wiemy, że każda aukcja utworzona lub anulowana, każde urodzenie i każda sprzedaż skutkuje przeniesieniem. Oznacza to, że 6% transferów odbywa się za pomocą innego mechanizmu niż oficjalne inteligentne umowy - na przykład gracze obdarowujący kociąt znajomym. Ten procent powinien wzrosnąć, gdy nowe gry zbudowane na bazie CryptoKitties staną się na tyle popularne, że gracze zaczną na przykład tracić koty w wyzwaniach; lub kiedy pojawią się zdecentralizowane giełdy z bardziej zaawansowanymi funkcjami handlowymi, które pozwalają na umieszczenie na nich kryptokitti.

Ekonomia rodzenia kociąt

Widząc istnienie elementu ekonomicznego związanego z narodzinami nowych kotów, przystępujemy do bardziej szczegółowego badania tego procesu. Kiedy dwa koty się rozmnażają, u ciężarnego kota ustawiana jest zmienna, która mówi, który blok zajdzie w ciążę. Jednak w sieci Ethereum nie ma wbudowanego timera, który umożliwia automatyczne wykonanie fragmentu kodu w określonym bloku. Oznacza to, że ktoś musi nazwać funkcję w grze inteligentną umową, która „rodzi” nowego kota. Taki jest cel funkcji giveBirth: po wywołaniu sprawdza, czy ciąża osiągnęła prawidłowy przebieg. Dopiero po wywołaniu funkcji giveBirth geny potomstwa są określane przez algorytm o zamkniętym źródle. Aby zmniejszyć szanse graczy na granie w system, programiści stworzyli mechanizm motywacyjny, aby wywołać funkcję comeBirth, gdy tylko ciąża zostanie zakończona.

Ponieważ ta funkcja giveBirth () zawiera element losowy, bardzo ważne jest, aby została wywołana szybko po oczekiwanym czasie narodzin (w ciągu 250 bloków lub około 30 minut). Jeśli połączenie trwa dłużej, złym aktorom daje się możliwość „przerzucenia” losowego elementu ich kombinacji genetycznej i uzyskania nieuczciwej przewagi nad innymi hodowcami. Aby temu zapobiec, zezwalamy każdemu na wywoływanie metody giveBirth () i przekazujemy całą opłatę porodową pierwszemu dzwoniącemu, który z powodzeniem urodzi nowego kota. (źródło)

Wspomnienie o terminie 250 bloków sugeruje, że CryptoKitties używa skrótu bloku poprzedzającego oczekiwany blok porodowy jako źródło entropii w celu ustalenia genów nowych kociąt. Skróty blokowe są dostępne dla EVM tylko dla 256 bloków (~ 250). Następnie wywołania blokowania zwracają zero. Oznacza to, że gdyby nie istniała zachęta dla zewnętrznych agentów, gracz mógłby symulować narodziny nowego kotka i, jeśli nie spodobał mu się wynik, poczekaj 256 bloków i spróbuj ponownie.

Aktualizacja (19 sierpnia 2018 r.): Ostatnia publikacja artykułu Erays prowadzi nas do przekonania, że ​​ta zachęta ekonomiczna jest jeszcze ważniejsza, niż początkowo sądziliśmy. Według artykułu, jeśli poród nastąpi po okresie 256 bloków, CryptoKitties nie używa „zera” jako źródła entropii, ale raczej bieżący numer bloku. Oznacza to, że atakujący dostanie nie tylko drugi rzut, ale tyle powtórzeń, ile będzie chciał, po prostu symulując narodziny swojego nowego kotka na różnych blokach.

Tak więc gra pobiera opłatę za każdą hodowlę (zwaną opłatą porodową) i pozwala każdemu rachunkowi Ethereum zażądać tej opłaty, po prostu wywołując funkcję giveBirth u ciężarnego kota w odpowiednim bloku lub po nim. Nowy kot nadal trafia do właściciela ciężarnego kota. Ale każdy może urodzić kota, którego ciąża się skończyła i otrzymać za to rekompensatę.

Doprowadziło to do pojawienia się „CryptoMidwives”, jak nazwał je Michael Zargham: agenci, którzy, nawet jeśli sami nie są graczami, pełnią kluczową funkcję w gospodarce CryptoKitties. Koncepcja nie jest unikalna dla CryptoKitties i może być uogólniona do „CryptoServices” - wzorca projektowego, w którym konto, które wywołuje określone funkcje inteligentnej umowy, jest za to nagradzane.

// Wyślij opłatę bilansową osobie, która urodziła dziecko.
msg.sender.send (autoBirthFee);

Zestaw danych dziennika zdarzeń pokazuje, że większość urodzeń jest spowodowana tylko kilkoma kontami. Na początku historii gry konta związane z AxiomZen były jedynymi, które rodziły kocięta. Z biegiem czasu inne konta zaczęły wywoływać metodę giveBirth. Widzimy także, że tylko kilka położnych odpowiada za większość porodów: pomarańczowy obszar na wykresie 2 reprezentuje 5 najlepszych kont na 1000 bloków (łącznie 151 kont). Z wyjątkiem skoku wokół bloku 4.700.000, AxiomZen i najlepsi dzwoniący odpowiadają za ogromną większość urodzeń przez cały czas.

Wykres 2 - Skład udanych wezwań do wykonania porodu w czasie, według nadawcy transakcji

Skoki aktywności AxiomZen wydają się dobrze korelować z momentami wzrostu średniej ceny gazu w transakcjach Ethereum. Tego należało się spodziewać, ponieważ wzrost kosztów porodu powoduje, że jest on mniej atrakcyjny dla podmiotów zewnętrznych. W odpowiedzi na przeciążenie sieci w grudniu AxiomZen podwyższył opłatę porodową z 0,002 eteru do 0,015 eteru na kilka dni, później obniżając ją do 0,008 eteru, który utrzymywał się dobrze podczas styczniowego szczytu.

Źródło: https://etherscan.io/chart/gasprice

Kiedy wzbogacamy zestaw danych dziennika zdarzeń o informacje z transakcji, które je wygenerowały, zauważamy, że ogólnie CryptoMidwives nie wywołują bezpośrednio funkcji giveBirth w umowie o grze, ale przechodzą pośrednią inteligentną umowę. Pozwala im to na dokonanie pojedynczej transakcji na inteligentny kontrakt o zamkniętym źródle, który z kolei wywołuje funkcję giveBirth tyle razy, ile jest polecone. Zobacz transakcję 0x6cc717fc… na przykład.

Wykres 3 - Skład udanych wezwań do wykonania porodu w czasie, według odbiorcy transakcji

Dzięki danym dostępnym w blockchain możemy nawet przyjrzeć się dochodom i rentowności tych agentów. Skupmy się na 10 najlepszych CryptoMidwives w 2018 roku. Konto 0x05be6e… jest najwyższym rankingiem liczby urodzeń, wyraźnie wyprzedzającym konkurencję. Konto 0xa21037… (które należy do AxiomZen) zajmuje ósme miejsce, co jest dobre, ponieważ powinny one działać tylko w ostateczności.

Wykres 4 - Liczba kociąt dostarczonych przez 10 najlepszych CryptoMidwives w 2018 r

Od 11 grudnia nagrodą za udane narodziny jest 0,008 ETH. Dzięki tym informacjom możemy obliczyć przychód każdej z 10 najlepszych CryptoMidwives.

Wykres 5 - Przychody 10 najlepszych CryptoMidwives w 2018 r

Jednak rodzenie krypto-kociąt kosztuje opłaty. Poza tym konkurencja na tym rynku jest zacięta! Wiele prób nazywania funkcji giveBirth „przyjeżdża późno” - co oznacza, że ​​gdy górnicy przetwarzają transakcję, kot nie jest już w ciąży, ponieważ najpierw przetwarzana jest inna transakcja. Późni przybysze nie zużywają tyle paliwa, ale nadal mogą kosztować znaczną kwotę opłat. Odejmując wszystkie te opłaty od nagród, dochodzimy do zysków każdej położnej. Co ciekawe, konto 0x80cfd2…, które ma szósty przychód, wyróżnia się w tym wskaźniku wydajności. Najwyraźniej musieli znaleźć sposób na zaoszczędzenie opłat, czy to dzięki inteligentnemu projektowi kontraktu, lepszemu czasowi emisji transakcji, lepszemu wyborowi ceny gazu lub ich kombinacji.

Wykres 6 - Zyski 10 najlepszych CryptoMidwives w 2018 r

Aby zbadać hipotezę inteligentnego projektu umowy, stworzyliśmy wskaźnik, który nazywamy „wydajnością kodu”. Jest to prosty stosunek dostarczanych kociąt do zużytego gazu. Jeśli spojrzymy na znormalizowane wartości średniej wydajności kodu dla inteligentnych umów używanych przez najlepsze położne w 2018 r. (Wykres 7), widzimy, że jest bardzo niewielka różnica między nimi.

Wykres 7 - Wydajność kodu inteligentnych umów wykorzystywanych przez najlepsze CryptoMidwives z 2018 r

Jeśli zamiast definiować efektywność pod kątem zużytego gazu, definiujemy ją pod kątem zysku (zysku na dostarczonego kotka), widzimy, że konto 0x80cfd2 jest znacznie mniej wydajne niż konto 0x05be6e (wykres 8). Zakładając podobną wydajność kodu, oznaczałoby to, że 0x80cfd2 płaci wyższe ceny gazu za swoje transakcje, które z powodzeniem rodzą kocięta.

Wykres 8 - Wydajność najlepszych CryptoMidwives z 2018 r

Wyższe ceny gazu mogą tłumaczyć wyższą rentowność konta 0x80cfd2 - może to spowodować, że wygrają każdy wyścig, aby dać poród, w którym konkurują. I rzeczywiście, każda transakcja z konta 0x80cfd2 rodzi jeden lub więcej kociąt. Tego samego nie można powiedzieć o 0x05be6e, który ma dużą liczbę transakcji na swoich inteligentnych umowach, które nie rodzą żadnych kociąt.

Wykres 9 - Histogram transakcji według kont 0x05be6e i 0x80cfd2, według liczby urodzonych kociąt

Jednak opłaty poniesione przez konto 0x05be6e, które nie powodują narodzin, są spowodowane nie tylko transakcjami, które przegrywają wojnę cenową gazu. Wydaje się, że ich główny inteligentny kontrakt 0x39243a wymaga okresowej interakcji, która jest bardzo droga pod względem gazu. Zobacz na przykład transakcja 0xcc0f970e. Gdyby nie ten rodzaj transakcji, 0x05be6e prowadziłby nie tylko do rankingu przychodów, ale także do rentowności.

Aktualizacja (25 maja 2018 r.): Dalsza analiza wskazuje, że transakcje takie jak 0xcc0f970e są tym, co pozwala inteligentnej umowie położnej zaoszczędzić na benzynie na transakcjach, które rodzą kocięta, przy użyciu „refundacji za przechowywanie” - ta sama technika, która kryje się za GasToken. Muszę podziękować Ricardo za pomoc w zrozumieniu tego. Umowa używana przez konto 0x80cfd2 również wydaje się korzystać z tych zwrotów, ale używa innego konta do zapisywania danych w pamięci (0x3a91b4…). Dokładniejsza analiza rentowności musiałaby uwzględniać klastry kont i inteligentne umowy należące do jednego agenta.

Kod źródłowy tych analiz można znaleźć w Notatniku Jupyter w naszym serwisie GitHub.

Wniosek

Wydaje się, że zachęta ekonomiczna stworzona po to, by koty urodziły się jak najszybciej. Koncentracja wydarzeń związanych z narodzinami na kilku kontach wskazuje, że stworzono boty, aby jak najszybciej rodzić koty. Wydaje się jednak prawdopodobne, że gdy nie będzie już więcej korzyści z mądrzejszych umów z położnymi, boty będą musiały prowadzić wojnę cenową gazu, aby pozostać konkurencyjnym. Co oznacza, że ​​ostatecznie duża część opłat porodowych prawdopodobnie trafi w ręce górników.

W każdym razie opłata za poród powoduje, że gra w CryptoKitties jest droższa niż w przypadku, gdy ten mechanizm nie był konieczny. Jako pierwsza tego rodzaju gra, która zyskała znaczną popularność w sieci Ethereum, CryptoKitties z pewnością będzie inspirować wielu programistów przez dłuższy czas. Ciekawe będzie, jak nowe gry poradzą sobie z takim wyzwaniem w przyszłości.

Przyszła praca

Podobnie jak w przypadku wielu analiz, ta prowadzi do kolejnych pytań. Zostaw swoją i swoją opinię w komentarzach! Będziemy nadal analizować ten zestaw danych w przyszłych artykułach.

Wykres 10 - Mapa termiczna transakcji z 10 najlepszych CryptoMidwives w 2018 r., Według kont i inteligentnych umów. Co widzisz?

Specjalne podziękowania dla zespołu Block Science za badania, spostrzeżenia i recenzje.