Krótki opis:
Zadanie — zebranie informacji o transakcjach na platformie Uniswap V3 (z thegraph.com). Projekt składa się z dwóch części. Na tym etapie potrzebny jest kosztorys dla pierwszej części – zbierania danych historycznych. Należy stworzyć dwa skrapery/parsers:
1. do zbierania danych historycznych (uruchamiany na żądanie, do zbierania danych z określonym przez użytkownika interwałem czasowym) — podaj tylko koszt tej części.
2. parser w czasie rzeczywistym, który stale zbiera dane przesyłane do thegraph.com z minimalnym opóźnieniem (ta część będzie realizowana później, po pomyślnym zakończeniu pierwszej części)
Na tym etapie szukamy osoby, która potrafi stworzyć skraper/parser danych historycznych. Prosimy więc o podanie kosztorysu i ram czasowych tylko dla tej części. Dane pobieramy przez API, są one dostępne publicznie, nie chronione captcha ani innymi metodami. Jeśli ta część zakończy się sukcesem, będziemy kontynuować pracę nad parserem danych w czasie rzeczywistym.
Do pierwszej części – zbierania danych historycznych – konieczna jest dobra znajomość Pythona, MySQL, doświadczenie w tworzeniu parserów, pracy z API.
Do drugiej części projektu, konieczna jest umiejętność pracy z Redis, Docker, Google Pub/Sub oraz parsowania danych w czasie rzeczywistym.
System przechowuje wszystkie dane o transakcjach w bazie danych MySQL, uruchamia zadania w tle za pomocą cron i jest utrzymywany w stanie roboczym oraz monitorowany za pomocą PM2. Rozwiązanie jest całkowicie oparte na backendzie bez frontendu, wdrożone na serwerze VPS.
Poszukujemy doświadczonego i niezawodnego inżyniera danych / developera backendu do stworzenia niezawodnego i szybkiego skryptu do zbierania danych, który będzie pobierał, analizował i zapisywał dane z Uniswap V3. Głównym wymogiem jest zbieranie transakcji, przechowywanie ustrukturyzowanych danych w cache Redis oraz ich strumieniowe przesyłanie do systemu komunikatów Google Pub/Sub w celu kierowania każdej przychodzącej transakcji do naszego modelu uczenia maszynowego. Ponadto dane będą również przechowywane w bazie danych.
Zakres projektu
• Zbieranie danych na poziomie transakcji za pomocą API Graph z Uniswap V3 Subgraph na Arbitrum
https://thegraph.com/explorer/subgraphs/5zvR82QoaXYFyDEKLZ9t6v9adgnptxYpKpSbxtgVENFV?view=Query&chain=arbitrum-one
• Paginacja. Implementacja rozwiązania z paginacją, jeśli będzie konieczna, dla efektywnego zbierania dużej ilości danych
• Zapisywanie danych w Redis. Eliminacja duplikatów (dla drugiej części projektu)
• Integracja Google Pub/Sub. Wysyłanie (push) każdej przychodzącej transakcji do dwóch różnych pubsub topics do dalszej obróbki. A także odbieranie danych wyjściowych i ich zapis z powrotem w Redis i bazie danych. (dla drugiej części projektu)
• Wdrożenie aplikacji/skryptu za pomocą Docker. Upewnić się, że pliki Dockerfile są poprawne, załadowanie, wdrożenie i monitorowanie kontenera w czasie rzeczywistym.
Wymagane umiejętności
• Ekspert w Pythonie: biegła znajomość asyncio, szybkie parsowanie danych, zoptymalizowane wywołania sieciowe. Dodatkowo, jeśli masz doświadczenie w przetwarzaniu wsadowym (batch processing).
• GraphQL: doświadczenie w zapytaniach do API Graph lub dowolnego Web3 subgraph
• Redis: magazyn danych w czasie rzeczywistym z kluczami i zbiorami posortowanymi według ocen (potrzebne tylko na drugim etapie projektu)
• Google Pub/Sub: publikacja zdarzeń z otrzymanych danych (potrzebne tylko na drugim etapie projektu)
• Docker: konteneryzacja rozwiązania z jasną konfiguracją (potrzebne tylko na drugim etapie projektu)
• Projektowanie baz danych: optymalizacja zapytań, planowanie schematów (Redis i bazy danych niższego poziomu) (potrzebne tylko na drugim etapie projektu)
Technologiczny stos, którego będziesz używać
• Python 3.x (aiohttp/requests + biblioteki graphql)
• Graph API / GraphQL (Uniswap V3 Arbitrum)
• Baza danych Mysql
• Redis (Sorted Sets, Streams, Pipelines) (tylko drugi etap projektu)
• Google Cloud Pub/Sub (tylko drugi etap projektu)
• Docker (tylko drugi etap projektu)
Załączony plik zawiera powyższy tekst w języku angielskim.
Jeśli jesteś zainteresowany projektem - wyślij cenę, kiedy możesz rozpocząć pracę, ile dni zajmie realizacja pierwszej części projektu. Jeśli potrzebujesz doprecyzowania czegoś do wyliczeń, wyślij konkretne pytania.