The Bitcoin Mempool: Gdzie transakcje zabierają lot

nowa historia

@ evanaze Evan Azevedo Jestem generałem i miłośnikiem nauki

Jedną z mocnych stron Bitcoinu i tym, co czyni go wyjątkowym w świecie finansów, jest jego radykalna przejrzystość. Dane Blockchain są jak okienko, można je zobaczyć bezpośrednio przez nie.

reakcje

Ale jeśli dane Blockchain są oknem, to często czuje się mniej jak ten w twoim mieszkaniu, aby wyglądać z (uroczyście podczas pandemii, być może), a bardziej jak to:

reakcje

W danych dotyczących łańcucha blokowego agenci, których to dotyczy, są zaciemnieni. Nie istnieje żadna centralna agencja, która wie, kto zamieszcza jaką transakcję, ale dane te są dostępne dla każdego i często próbuje opowiedzieć pewną historię.

reakcje

Naszym celem w tym wpisie na blogu jest wykorzystanie danych z łańcucha blokowego i odkrycie jednej takiej historii: historii o milionach dolarów waluty cyfrowej w locie pomiędzy nadawcą (nadawcami) a odbiorcą (odbiorcami).

reakcje

Staramy się wykorzystywać przejrzystość łańcucha blokowego na naszą korzyść i obserwować naszych kontrahentów dokonujących dużych transakcji zanim zostaną one jeszcze zakończone. Jest to niewiarygodnie potężna umiejętność, a my możemy wykorzystać trochę mocy umysłowej i umiejętności klawiatury, aby zrobić to niemal za darmo.

reakcje

W tym wpisie poruszymy niektóre z tych samych tematów, co jeden z moich poprzednich wpisów, a mianowicie napływ i odpływ oraz portfele BitMEX. Dowiemy się również o takich tematach jak mempool, czym jest cyfrowy portfel, jak słuchać transmisji danych na żywo za pomocą malutkiego komputera i kopać w (nieco) surowe dane z łańcucha blokowego za pomocą Amberdata.

reakcje

API Amberdata ujednolica blokowe łańcuchy sieciowe i kryptokurczowe dane rynkowe, wskaźniki i stopy referencyjne w jednym punkcie integracji, co czyni go doskonałym rozwiązaniem dla nauki o danych. Jest tu wiele tematów do omówienia, więc zacznijmy od tego!

reakcje

Co to jest Bitcoin Mempool?

Kiedy nowa transakcja jest zgłaszana do sieci Bitcoin, najpierw musi zostać zweryfikowana przez każdy węzeł w sieci. Po zweryfikowaniu transakcji jest ona dodawana do mempool węzła, czyli listy oczekujących transakcji. Gdy tworzony jest nowy blok, górnik wypełnia go transakcjami z mempool i wydobywa blok, czyniąc transakcję częścią łańcucha blokowego.

reakcje

To właśnie mamy na myśli, gdy mówimy, że możemy obserwować transakcje w locie w mempool: możemy zobaczyć transakcje i ich informacje przed przekazem środków. Jeśli jestem handlowcem kryptofinansowym, być może będę chciał wykorzystać te informacje na swoją korzyść, aby zidentyfikować, w jaki sposób podmioty wysyłają pieniądze w łańcuchu blokowym – co jest niemożliwe do zrobienia na większości tradycyjnych rynków. Brzmi łatwo, prawda? W tym miejscu dane z łańcucha blokowego stają się nieco kłopotliwe, jak w przypadku tego witrażu.

reakcje

Co to jest portfel Bitcoina?

Jeśli jesteś zainteresowany zakupem i ewentualnym handlem kryptokurrency, możesz założyć cyfrowy portfel u jednego z wielu dostawców portfeli. Portfel ten posiada tajny klucz potwierdzający, że użytkownik posiada pewną ilość waluty kryptograficznej w sieci. Aby przyjaciel lub osoba dokonująca wymiany wpłaciła pewną ilość kryptoformy do portfela, należy podać jej adres do wysłania. Jednakże, komplikuje to sprawę, ponieważ większość nowoczesnych portfeli cyfrowych tworzy nowy adres dla każdego przelewu jako środek bezpieczeństwa. Większość centralnych giełd, takich jak Coinbase, również przyjęło ten środek bezpieczeństwa.

reakcje

Choć jest to świetne rozwiązanie dla Ciebie jako użytkownika, ponieważ chroni Twoje cyfrowe zasoby przed kradzieżą, to dla osób wydobywających dane, takich jak ja, jest to o wiele trudniejsze do zidentyfikowania, kto do kogo wysyła dane. Chociaż nie zawsze tak jest, zaczyna to wyglądać coraz bardziej jak każda transakcja pomiędzy nowymi użytkownikami, co nie jest korzystne. Jeśli przeczytasz mój wyżej wymieniony post na temat portfeli BitMEX, będziesz wiedział jak rozwiązaliśmy ten problem dla portfeli na giełdzie BitMEX, ale podsumuję to tutaj.

reakcje

BitMEX jest jedną z najbardziej płynnych giełd Bitcoin, co oznacza, że ma jedne z najwyższych wolumenów handlu Bitcoin i kryptokurrency. Na szczęście dla nas wszystkie adresy BitMEX zaczynają się od 3BMEX lub 3BitMEX, co czyni je bardzo łatwymi do zidentyfikowania. Tego typu rzeczy nie są łatwo ogłaszane przez samą giełdę, ale według niektórych dobrych źródeł i weryfikacji z danymi wydaje się, że tak jest nadal.

reakcje

Uzyskiwanie danych

Wolumen danych transakcyjnych dla dużej sieci, takiej jak Bitcoin, jest stały i pokaźny, więc aby uzyskać dokładny obraz jego aktywności, dobrze jest obserwować go na żywo i analizować sygnały, na których chcemy się skupić. Naszym głównym źródłem danych będzie Amberdatas Pending Transactions Websocket, który jest dostępny z darmowym kluczem API Amberdata. Mają one przydatny przewodnik jak wstawać i ruszać w poszukiwaniu dowodów dużych transferów tokenowych o nazwie Real Time Asset Movement, ale ponieważ przeprowadzam tę analizę w Pythonie, pomyślałem, że moja metoda może być również przydatna.

reakcje

Ponieważ będziemy potrzebować kilkudniowych danych, aby znaleźć coś interesującego, zdecydowałem się użyć mniejszego urządzenia, aby zaoszczędzić energię i zachować nieco chłodniejszą sypialnię. Moje urządzenie to Raspberry Pi 3B zmodernizowane do najnowszej wersji Raspberry Pi OS 10: Buster. Ta wersja jest zainstalowana z Pythonem 3.7, który będzie nam potrzebny do uruchomienia skryptu zbierania danych. Mówiąc o zbieraniu danych, teraz przechodzimy do gwiazdy show od strony technicznej: websockets.

reakcje

Co to jest WebSockets?

Kieszenie internetowe to sposób na otrzymywanie danych strumieniowych z API. Dwa najbardziej przydatne narzędzia do pobierania danych na żywo w Pythonie to pakiet websockets i asyncio w standardowej bibliotece Pythona. Websockets jest aktywnie utrzymywany i polecam go przez websocket-clienta, ponieważ wymusza on dobre praktyki programowania, w tym używanie asyncio.

reakcje

Jeśli nie jesteś zaznajomiony z asyncio, jest to pakiet do wielowątkowości z kilkoma specjalnymi funkcjami, które będą bardzo przydatne do słuchania transmisji strumieniowej danych. Ten przewodnik autorstwa Real Pythona jest świetny do przyspieszenia pracy z asyncio. Oto jak wygląda moja funkcja zbierania danych przy użyciu biblioteki websockets:

reakcje

W skrócie, rozpoczynając naszą funkcję od

asynk

czekaj websocket.send(wiadomość)

pending_transakcja

podczas gdy prawdziwy

response = czekaj asyncio.wait_for(websocket.recv(), timeout=25)

reakcje

jesteśmy w stanie wywołać funkcję i wznowić nasz program bez czekania na jego powrót. Używamy tej samej metodyki używającThe ogólna forma programu polega na otwarciu klienta i wysłaniu do serwera websocket wiadomości, że chcemy słuchać thewebsocketa na nowe wydarzenia. Po nawiązaniu połączenia uruchamiamy nieskończoną pętlę i słuchamy nowych zdarzeń za pomocą

W miarę pojawiania się danych przetwarzamy je za pomocą funkcji o nazwie

on_response()

reakcje

który zasadniczo sprawdza, czy trwająca transakcja jest wystarczająco duża – większa niż nasz próg – i loguje ją do naszego pliku danych, jeśli tak. W szczególności, logujemy znacznik czasu, kiedy oczekująca transakcja pojawiła się w mempool, wartość oczekującej transakcji, kto jest od i odbiorców transakcji, hash transakcji i czy ta transakcja jest na, do/z, czy nie jest związana z wymianą BitMEX. Jeśli nie znasz danych z łańcucha blokowego, hash transakcji jest tylko unikalnym identyfikatorem, który pozwala nam na odnalezienie tej konkretnej transakcji w dowolnym momencie, który wykorzystamy później, gdy sprawdzimy, czy transakcje zostały przeprowadzone.

Logując transakcję, chcemy sprawdzić, czy nadawca lub odbiorcy są częścią naszej wymiany interesów, więc mamy pojęcie, czy pieniądze są przedmiotem handlu na, z lub w ramach wymiany. W rzeczywistości jest to przyzwoity wskaźnik kondycji rynku kryptokurantów. Im więcej ludzi wkłada pieniądze na giełdę, tym bardziej są oni byczy i na odwrót. Aby to osiągnąć w przypadku portfeli BitMEX, możemy po prostu przetworzyć adresy dla 3BMEX lub 3BitMEX, jak wspomniano powyżej. Ale ja chciałem pójść o krok dalej i użyć czegoś, co nazywa się filtrem bloom.

reakcje

Filtr Bloom

Filtr bloom jest efektywną strukturą danych dla zapytań o listę pozycji. Może odpowiedzieć na pytanie Czy ten obiekt nie znajduje się na liście pozycji? z pewnością, lecz daje odpowiedź z pewnym marginesem błędu, gdy zapytasz Czy ten obiekt znajduje się na liście pozycji?. To czyni go użytecznym dla lżejszych zastosowań, kiedy masz do milionów lub więcej pozycji do przeszukania. Aby to wykorzystać, wykorzystałem moją listę adresów z postu na blogu BitMEX, aby odnieść się do niej za każdym razem, gdy logowaliśmy nową dużą transakcję.

reakcje

Być może nie posiadasz tak ładnego algorytmu do identyfikacji adresów giełdowych na innych giełdach, w takim przypadku możesz zachować listę adresów giełd, na które się natkniesz i użyć filtra bloom do sprawdzania nowych transakcji pod kątem adresów giełdowych w momencie ich pojawienia się. Wszystko to, co zostało powiedziane i zrobione, prawdopodobnie będziesz również chciał, aby trzeci proces – być może z inną maszyną lub zrobiony po zebraniu danych – podwójnie sprawdzał transakcje, aby upewnić się, że filtr bloom nie przeoczył żadnej.

reakcje

Rozpoczęcie pracy

Dobrze wykorzystamy również program tmux napisany w języku C dla maszyn z systemem Linux. Jest to bardzo użyteczny program, który stał się standardową częścią mojej pracy, odkąd nauczyłem się go na tym blogu. Tmux uruchamia sesję serwerową, która pozwala Twoim sesjom powłoki pozostać przy życiu nawet po Twoim odejściu, w przeciwnym razie komputer będzie regularnie kładł się spać. Jego głównym zastosowaniem jest utrzymanie sesji Pythona przy życiu i słuchanie webocketu przez nieokreślony czas, ale jest wiele innych zastosowań tmuxa, takich jak tworzenie niestandardowego środowiska devów i wiele innych.

reakcje

Jeśli chcesz podążać za tą analizą lub spróbować jej samodzielnie, najpierw potrzebujesz klucza API Amberdata, aby uzyskać dostęp do witryny. Pełny kod dla tego wpisu na blogu, wraz z innymi wpisami z tej serii jest dostępny tutaj, a dla tego wpisu będziemy się koncentrować na repozytorium txn-mempool. Upewniłem się, że istnieją minimalne pakiety do zainstalowania, więc powinieneś być w stanie wstać i uruchomić zbieranie danych tylko z Pythona w wersji 3.7 i menedżera środowiska wirtualnego z wyboru. Teraz, gdy mamy już to z głowy, możemy przejść do części poświęconej zabawie.

reakcje

Analiza

Zostawiłem moje Raspberry Pi biegające przez około jeden dzień słuchając mempool Bitcoin. Ustanowiłem mój próg dla oczekujących transakcji powyżej 100 Bitcoin, lub transakcji wartych co najmniej około 1,15 miliona dolarów.

reakcje

Obserwowanie na żywo transakcji oczekujących na realizację (powyżej pewnego progu)

Transakcje mempoolowe przechwytywałem okresowo od 26 sierpnia 2020 o 8:30 PST do 28 sierpnia o 8 rano. Ułożenie ich w kolejności występowania daje nam to:

reakcje

Wykres wielkości transakcji w okresie zbierania przeze mnie danych

Widzimy, że zaobserwowaliśmy w zasadzie dwa poziomy nierozstrzygniętych transakcji. Małe (w schemacie rzeczy) transakcje warte mniej niż 1000 Bitcoinów (~11 milionów dolarów), które zdarzają się często, oraz duża ilość transakcji oczekujących w przedziale 10.000 Bitcoinów (~100 milionów dolarów) i więcej. To może być dla niektórych zaskoczeniem o szokującej ilości wartości stale przekazywanych w sieci Bitcoinów. Ogólny rozkład transakcji oczekujących, które zarejestrowaliśmy wygląda tak:

reakcje

liczba 503 średnia 1034 std 2613,3 min 100 25% 131 50% 211 75% 438 max 11711

Średnia transakcja oczekująca – z wyłączeniem transakcji poniżej 100 BTC – wynosiła około 1034 BTC, ale mediana była niższa przy nieco ponad 200 BTC, co wskazuje, że istnieją znacznie większe transakcje przekrzywiające rozkład.

reakcje

Na marginesie, nawet jeśli Tmux utrzymuje serwer przy życiu, aby program słuchowy mógł nadal zasubskrybować dane z sieci, byłem głupi i odłączałem moją maszynę na kilka godzin naraz. Mój Kindle dzieli się tą samą ładowarką, a ja również jestem zapalonym czytelnikiem. Oto, jak wygląda moja kolekcja danych w domenie czasu z przestojów od odłączenia mojego Raspberry Pi:

reakcje

Mój czas działania w zakresie gromadzenia danych

Efekt tego pojawi się później w analizie, ale na razie możemy po prostu zachować to w pamięci. Ponieważ nasza analiza skupia się na śledzeniu portfeli na giełdzie BitMEX, przetłumaczmy to na transakcje z udziałem tych adresów BitMEX.

reakcje

Odfiltrowywanie transakcji do/z/od/na wymianę

Mówiąc o przepływie pieniędzy w odniesieniu do giełdy, możemy sobie wyobrazić, czy ludzie handlują w ramach giełdy, wkładają pieniądze na giełdę, czy zabierają je z niej. Wkładanie pieniędzy na giełdę może odzwierciedlać uczucia byka, ponieważ ludzie kupują więcej Bitcoinów do handlu. Wyciąganie pieniędzy z giełdy, z drugiej strony, może odzwierciedlać uczucia niedźwiedzie. Ludzie mogą wycofać się z giełdy i włożyć do zimnego portfela, przenieść się do innej giełdy, lub zlikwidować w USD lub innej walucie.

reakcje

Jak wspomniano powyżej, używamy filtra bloom do identyfikacji transakcji oczekujących na wymianę w locie i obserwacji przepływów zanim staną się one transakcjami zakończonymi. Jeśli w polu od znajduje się adres BitMEX, wówczas uważamy, że transakcja jest z lub poza giełdą. Podobnie, jeśli w polu to znajdziemy adres BitMEX-a, wówczas transakcja jest na giełdzie. Jeśli oba pola zawierają adres BitMEX, wówczas transakcja jest na giełdzie.

reakcje

Zaledwie około 4% transakcji, które zarejestrowaliśmy, miało miejsce na giełdzie. Tutaj pomijamy te transakcje, które nie są związane z BitMEX-em. Niestety, nie mogliśmy zarejestrować transakcji, które były tylko z lub poza giełdą. Dla aktywności, którą rejestrowaliśmy, podział wynosi około 40/60 aktywności idących na giełdę w stosunku do występujących na niej.

reakcje

Dystrybucja transakcji mających związek z BitMEX

Teraz, gdy mamy obraz dużych transakcji w locie na BitMEX, sprecyzujmy je nad ceną, aby uzyskać obraz tego, co się działo, gdy transakcja została złożona.

reakcje

Przydział dużych transakcji walutowych do ceny

Używamy historycznego punktu końcowego Amberdata OHLCV, aby uzyskać dane o poziomie minutowym na temat ceny Bitcoinu w tym okresie. Jeśli chcesz powtórzyć tę analizę, pamiętaj, że możesz zapytać o dane co najwyżej 24 godziny przy tej ziarnistości na raz, ale łatwo jest po prostu zrobić okienko skokowe, aby zebrać tyle danych, ile potrzebujesz. Połączyłem te dwa źródła danych i wykreśliłem duże oczekujące transakcje na cenę Bitcoina, kodując kolorami każdą transakcję, czy była na czy w wymianie.

reakcje

Parcela niektórych na żywo w oczekiwaniu na napływ do BitMEX-a.

W tej części danych większość oczekujących na realizację transakcji trafiała z adresów zewnętrznych na giełdę, dzięki czemu byliśmy w stanie przechwycić część napływu na żywo na BitMEX. Oto jak wyglądają te transakcje, posortowane według wartości:

reakcje

Największe transakcje związane z BitMEX-em w toku

Wygląda na to, że największa z tych nierozstrzygniętych transakcji – w dłuższej perspektywie – to dwie na samym początku okresu obserwacji.

reakcje

Największa aktywność w ramach wymiany

Pierwsza transakcja oczekująca, która faktycznie miała miejsce w drugiej minucie mojej obserwacji, jest największą transakcją oczekującą o wartości 3400 btc. Co ciekawsze, dwie z tych transakcji miały miejsce w ciągu tej samej minuty, z których jedna była drugą największą transakcją, jaką zaobserwowaliśmy w mempool w tym okresie. Zaledwie milisekundy po transakcji zostały zaksięgowane na ponad 1000 Bitcoinów, kolejna transakcja w tej samej giełdzie została zaksięgowana na 150 Bitcoinów. Sprawdziłem adresy obu transakcji i nie mają one nic wspólnego, więc nie jest jasne, czy te dwie są w ogóle powiązane.

reakcje

Jest jeszcze jedna subtelność, której do tej pory brakowało nam w analizie. Na przykład, pierwsza transakcja na liście w rzeczywistości występuje tylko pomiędzy dwoma unikalnymi adresami, a jeden z nich nie jest adresem BitMEX, mimo że wymieniliśmy transakcję jako wewnątrz. Wynika to ze sposobu, w jaki BitMEX przetwarza transakcję. Jeśli portfel BitMEX-a zainicjuje przelew w celu wysłania środków, nadawca wyśle całe saldo rachunku jako wkład, a w zamian otrzyma swoje saldo pomniejszone o kwotę, którą chce wysłać i opłatę.

reakcje

Jeśli przejdziesz przez transakcje wewnątrz, okaże się, że wszystkie one są w tej formie, co oznacza, że są po prostu przelewem BitMEX na zewnętrzny rachunek. Tak więc nie znaleźliśmy żadnych przelewów BitMEX w ramach wymiany – tzn. z jednego adresu BitMEX na inny, a jedynie przelewy z wymiany.

reakcje

Wracając przez nasze transakcje na giełdzie, możemy teraz obliczyć kwotę, która albo pozostała na giełdzie zgodnie z ustaleniami, albo kwotę przekazaną na giełdę. Zrobiłem to za pomocą następującego skryptu:

reakcje

Skrypt ten przechodzi przez transakcje oznaczone jako wewnątrz i oblicza kwotę, która została przekazana na adresy inne niż BitMEX, oraz przechodzi przez transakcje oznaczone jako włączone i oblicza kwotę, która została przekazana na adresy BitMEX. Używamy pojedynczego punktu końcowego Amberdata, aby uzyskać dane transakcji z podaniem hasha transakcji. Wyniki wyglądają następująco:

reakcje

Jak widać, tylko jedna transakcja pasuje do naszego opisu dużego przepływu większego niż 100 btc. Ktoś około 7:00 rano PST 28 sierpnia przekazał 100 btc z BitMEX. Z tą dodatkową warstwą kodu, mogliśmy wejść na transfery Bitcoin w lub z giełdy, tak jak zostały one wysłane do sieci.

reakcje

Sprawdzanie, czy Transakcja przeszła przez

Kiedy zobaczymy, że duża transakcja została zaksięgowana w mempool, możemy chcieć sprawdzić, czy lub kiedy to nastąpi. Możemy użyć adresowego punktu końcowego transakcji w łańcuchu blokowym Amberdata, aby sprawdzić, kiedy transakcja zostanie zaminowana na blok. Uruchomienie tego kodu pokazuje, że transakcja została zaminowana na blok 645509 następnego dnia, 27 sierpnia.

reakcje

Teraz sprawdźmy, czy któraś z 10 najlepszych transakcji, które analizowaliśmy, została potwierdzona. Po prostu używając powyższego kodu i przeglądając nasze 10 najlepszych adresów, możemy szybko sprawdzić, czy któraś z transakcji została już zrealizowana.

reakcje

Uwaga: niektóre z tych adresów są znacznie bardziej aktywne niż ten, który oglądaliśmy powyżej, więc musimy zwiększyć liczbę rekordów, aby powrócić do 1000 na stronę. Cieszę się, że możecie spróbować tego w analizie Jupyter Notebook, ale na razie możecie mi zaufać, że z 19 transakcji związanych z wymianą, wszystkie oprócz trzech przeszły w momencie pisania.

reakcje

Liczba zrealizowanych transakcji: 16 Transakcje ogółem: 19 Procent zakończonych: 84.2

Czego się dowiedzieliśmy?

Jeśli utknąłeś ze mną do końca, to gratuluję! Przeszliśmy dziś przez wiele tematów. Dowiedzieliśmy się, czym jest mempool, dlaczego portfele Blockchain mogą być tak trudne do znalezienia, i zrobiliśmy kilka pierwszych kroków w obliczaniu przepływów z transakcji Bitcoin. Od zebrania danych, wykreślenia przepływów przez cenę i sprawdzenia zrealizowanych transakcji, Amberdatas blockchain i API danych rynkowych sprawiły, że wgląd do mempool stał się bardzo łatwy.

reakcje

Dowiedzieliśmy się również o kilku fajnych narzędziach dev, takich jak tmux, biblioteka websockets, filtry bloom i jak tanio zacząć słuchać na żywo danych blockchain na Raspberry Pi. Co najważniejsze, dowiedzieliśmy się, że możemy odkryć duże przepływy walutowe, tak jak są one przekazywane do łańcucha blokowego, często nawet do 24 godzin przed ich przetworzeniem przez sieć.

reakcje

Jeśli jesteś zainteresowany wypróbowaniem tej analizy dla siebie, możesz sprawdzić repozytorium Githuba dla tego wpisu na blogu tutaj. Dane z tej analizy włączyłem jako próbkę tylko na początek.

reakcje

Prezentowane zdjęcie Sama Bark na Unsplash

reakcje

Źródła

Bitcoins Mempool: Objaśnienie dla początkujących: https://99bitcoins.com/bitcoin/mempool/

Kieszeń internetowa Amberdata w oczekiwaniu na transakcję: https://docs.amberdata.io/reference#address-mempool

Punkt końcowy transakcji w łańcuchu blokad adresowych Amberdata: https://docs.amberdata.io/reference#get-address-transactions

OHLCV Amberdatas Historical Endpoint: https://docs.amberdata.io/reference#get-historical-ohlc

Pojedynczy punkt końcowy Amberdata: https://docs.amberdata.io/reference#get-transaction

Przewodnik Track Asset Movement and Blockchain Events Guide: https://amberdata.io/guides/track-asset-movement-and-blockchain-events.

Async IO w Pythonie: https://realpython.com/async-io-python/#async-io-design-patterns

Gniazda internetowe: https://pypi.org/project/websockets/

Dlaczego adres portfela Bitcoinów stale się zmienia?: https://www.btcwires.com/round-the-block/why-does-a-bitcoin-wallet-address-change-constantly/.

GeeksForGeeks – Bloom Filtry: https://www.geeksforgeeks.org/bloom-filters-introduction-and-python-implementation/

Podziel się tą historią @ evanaze Evan Azevedo Przeczytaj moje historie Jestem generalistą i miłośnikiem nauki

Tagi