De Bitcoin Mempool: Waar de transacties heengaan

De Bitcoin Mempool: Waar de transacties heengaan

nieuw verhaal

@ evanaze Evan Azevedo Ik ben een generalist en liefhebber van de wetenschappen

Een van de sterke punten van Bitcoin en wat het uniek maakt in de financiële wereld is de radicale transparantie. Blokketengegevens zijn als een venster, je kunt er dwars doorheen kijken.

reacties

Maar als Blockchain data een venster is, voelt het vaak minder als het venster in uw appartement om uit te kijken (plechtig tijdens een pandemie, mogelijk), en meer als dit:

reacties

In blokketengegevens worden de betrokken agenten verdoezeld. Er is geen centrale instantie die weet wie welke transactie plaatst, maar de gegevens zijn voor iedereen te zien en vaak probeert men een verhaal te vertellen.

reacties

Ons doel in deze blogpost is om blokketengegevens te gebruiken en één zo’n verhaal te ontdekken: het verhaal van miljoenen dollars aan digitale valuta op de vlucht tussen verzender(s) en ontvanger(s).

reacties

Wij willen de transparantie van de blokketen in ons voordeel gebruiken en onze tegenpartijen observeren die grote transacties uitvoeren nog voor ze voltooid zijn. Dit is een ongelooflijk krachtig vermogen, en we kunnen wat hersenkracht en toetsenbord-vaardigheden gebruiken om het bijna gratis te doen.

reacties

In dit bericht zullen we enkele van dezelfde onderwerpen aansnijden als in een van mijn vorige berichten, namelijk in- en uitstroom en BitMEX-portemonnees. We zullen ook leren over onderwerpen als de mempool, wat een digitale portemonnee is, hoe je live streaming data kunt beluisteren met een kleine computer, en graven in (enigszins) ruwe blockchain data met behulp van Amberdata.

reacties

Amberdata’s API verenigt blokketen- en cryptocurrency-marktgegevens, metrieken en referentiepercentages in één enkel integratiepunt, wat het verrukkelijk maakt voor de datawetenschap. Er zijn veel onderwerpen om te behandelen, dus laten we daarmee aan de slag gaan!

reacties

Wat is de Bitcoin Mempool?

Wanneer een nieuwe transactie wordt ingediend bij het Bitcoin-netwerk, moet deze eerst worden geverifieerd door elk knooppunt in het netwerk. Nadat de transactie geverifieerd is, wordt deze toegevoegd aan de “mempool” van de node, of aan de lijst van lopende transacties. Wanneer een nieuw blok wordt aangemaakt, vult een mijnwerker het blok met transacties uit de mempool en ontgint het blok, waardoor de transactie een deel van de blokketen wordt.

reacties

Dit is wat we bedoelen als we zeggen dat we transacties “in flight” kunnen waarnemen in de mempool: we kunnen de transacties en hun informatie zien vóór de geldovermaking. Als ik een cryptocurrency handelaar ben, zou ik deze informatie in mijn voordeel willen gebruiken om te identificeren hoe entiteiten geld sturen op de blokketen – iets wat onmogelijk is in de meeste traditionele markten. Klinkt makkelijk, toch? Hier is waar blokketengegevens een beetje lastig worden, zoals dat glas-in-loodraam.

reacties

Wat is een Bitcoin-portefeuille?

Als u geïnteresseerd bent in het kopen en eventueel verhandelen van cryptocurrency, kunt u een digitale portemonnee opzetten met een van de vele portemonnee-aanbieders die er zijn. Deze portemonnee bevat een “geheime sleutel” die bewijst dat u eigenaar bent van een bepaalde hoeveelheid cryptocurrency op het netwerk. Om een vriend of een ruilmiddel te laten storten in uw portemonnee, moet u hem of haar een adres geven waar hij of zij het naartoe kan sturen. Dit wordt echter gecompliceerd omdat de meeste moderne digitale portemonnees als veiligheidsmaatregel een nieuw adres aanmaken voor elke overdracht. De meeste gecentraliseerde uitwisselingen zoals Coinbase hebben deze veiligheidsmaatregel ook overgenomen.

reacties

Hoewel dit geweldig is voor u als gebruiker omdat het uw digitale activa beschermt tegen diefstal, maakt het het een stuk moeilijker voor datamijnwerkers zoals ikzelf om te identificeren wie er naar wie stuurt. Hoewel dit niet altijd het geval is, begint het er steeds meer op te lijken dat elke transactie tussen nieuwe gebruikers plaatsvindt, wat niet bevorderlijk is. Als je mijn eerdergenoemde post op BitMEX portemonnees leest, weet je hoe we dit probleem hebben opgelost voor portemonnees op de BitMEX beurs, maar ik zal het hier samenvatten.

reacties

BitMEX is een van de meest liquide Bitcoin-beurzen, wat betekent dat het een van de hoogste volumes van Bitcoin- en cryptocurrencyhandel heeft. Gelukkig voor ons beginnen alle BitMEX-adressen met “3BMEX” of “3BitMEX”, waardoor ze zeer eenvoudig te identificeren zijn. Dit soort dingen worden niet gemakkelijk aangekondigd door de beurs zelf, maar volgens sommige goede bronnen en bij verificatie met de gegevens blijkt dat dit nog steeds het geval te zijn.

reacties

Het verkrijgen van de gegevens

Het volume van de transactiegegevens voor een groot netwerk als Bitcoin is constant en groot, dus om een nauwkeurig beeld te krijgen van de activiteit is het een goed idee om het live te bekijken en de signalen waar we ons op willen richten te ontleden. Onze belangrijkste gegevensbron zal Amberdata’s Pending Transactions Websocket zijn, die beschikbaar is met een gratis Amberdata API-sleutel. Ze hebben een handige handleiding om op zoek te gaan naar bewijs van grote token transfers genaamd Real Time Asset Movement, maar aangezien ik deze analyse in Python uitvoer dacht ik dat mijn methode ook nuttig zou kunnen zijn.

reacties

Aangezien we enkele dagen gegevens nodig hebben om iets interessants te vinden, kies ik ervoor om een kleiner apparaat te gebruiken om energie te besparen en mijn slaapkamer wat koeler te houden. Mijn apparaat is een Raspberry Pi 3B geüpgraded naar de nieuwste versie van Raspberry Pi OS 10: Buster. Deze versie wordt geleverd met Python 3.7 die we nodig hebben om het dataverzamelingsscript uit te voeren. Over dataverzameling gesproken, nu komen we bij de ster van de show van de technische kant: websockets.

reacties

Wat zijn WebSockets?

Websockets zijn een manier om streaming data uit een API te halen. De twee meest bruikbare tools voor het opnemen van live data in Python zijn het websockets pakket en asyncio in de standaard Python bibliotheek. Websockets wordt actief onderhouden en ik raad het aan over websocket-client omdat het goede programmeerpraktijken afdwingt, inclusief het gebruik van asyncio.

reacties

Als u niet bekend bent met asyncio, is het een pakket voor multithreading met enkele speciale functionaliteiten die zeer nuttig zullen zijn voor het beluisteren van streaming data. Deze gids van Real Python is geweldig om op snelheid te komen met asyncio. Hier is hoe mijn gegevensverzamelingsfunctie eruit ziet met behulp van de websocketbibliotheek:

reacties

Kortom, door onze functie te beginnen met

async def

wacht op websocket.send(bericht)

hangende_transactie

terwijl True

antwoord = wacht asyncio.wait_for(websocket.recv(), time-out=25)

reacties

kunnen we de functie oproepen en ons programma hervatten zonder te wachten tot het terugkomt. We gebruiken dezelfde methode door gebruik te maken van De algemene vorm van het programma is om een client te openen en de websocket server een bericht te sturen dat we naar de websocket willen luisteren voor nieuwe gebeurtenissen. Zodra de verbinding tot stand is gebracht, starten we een oneindige lus met en luisteren we naar nieuwe gebeurtenissen met

Als de gegevens binnenkomen, verwerken we de gegevens met een functie genaamd

op_antwoord()

reacties

die in wezen kijkt of de lopende transactie groot genoeg is – groter dan onze drempel – en deze registreert in ons databestand als dat het geval is. In het bijzonder loggen we de tijdstempel van wanneer de hangende transactie in de mempool verscheen, de waarde van de hangende transactie, van wie de transactie afkomstig is en de ontvangers van de transactie, de transactie hash, en of deze transactie op, naar/van, of niet gerelateerd is aan de BitMEX-beurs. Als u niet bekend bent met blockchain data, is de transactie hash slechts een unieke identificatie die ons in staat stelt om deze specifieke transactie op elk gewenst moment te vinden, waar we later gebruik van zullen maken als we controleren of de transacties zijn doorgegaan.

Terwijl we de transactie registreren, willen we controleren of de afzender of de ontvangers deel uitmaken van onze beurs, zodat we een idee hebben of het geld op, vanuit of binnen de beurs wordt verhandeld. Dit is in feite een behoorlijke indicator voor de gezondheid van de markt van cryptocurrency. Hoe meer mensen geld op een beurs zetten, hoe meer ze zich opstoken en vice versa. Om dit voor de BitMEX-portemonnee te bereiken, kunnen we de adressen voor “3BMEX” of “3BitMEX” eenvoudigweg ontleden, zoals hierboven vermeld. Maar, ik wilde nog een stap verder gaan en een zogenaamde bloeifilter gebruiken.

reacties

Bloeifilter

Een bloeifilter is een efficiënte datastructuur voor het opvragen van een lijst met items. Het kan de vraag “Staat dit object niet in de lijst met items?” met zekerheid beantwoorden, maar geeft een antwoord met enige foutmarge als je het vraagt “Staat dit object in de lijst met items?”. Dit maakt het nuttig voor lichtere toepassingen wanneer je tot miljoenen of meer items hebt om te zoeken. Om hier gebruik van te maken, heb ik mijn lijst met adressen uit de BitMEX-blogpost gebruikt om elke keer dat we een nieuwe grote transactie hebben gelogd een kruisverwijzing te maken.

reacties

Het kan zijn dat je niet zo’n mooi algoritme hebt voor het identificeren van uitwisselingsadressen op andere beurzen, in dat geval kun je een lijst bijhouden van de uitwisselingsadressen die je tegenkomt en het bloeifilter gebruiken om nieuwe transacties te controleren op uitwisselingsadressen als ze binnenkomen. Dit alles gezegd hebbende, wil je waarschijnlijk ook een derde proces – eventueel met een andere machine of gedaan nadat de gegevens zijn verzameld – om de transacties te dubbelchecken om er zeker van te zijn dat de bloeifilter geen enkele transactie heeft gemist.

reacties

Aan de slag

We zullen ook goed gebruik maken van het programma tmux geschreven in C voor Linux machines. Dit is een zeer nuttig programma en is een standaard onderdeel van mijn workflow geworden sinds ik het heb geleerd voor deze blogpost. Tmux start een server sessie die ervoor zorgt dat je shell sessies in leven blijven, zelfs nadat je weggaat, of de computer zou regelmatig gaan slapen. Het belangrijkste gebruik hier is om de Python-sessie in leven te houden en te luisteren naar de websocket voor onbepaalde tijd, maar er zijn veel meer toepassingen voor tmux, zoals het creëren van een aangepaste dev-omgeving, en nog veel meer.

reacties

Als u deze analyse wilt volgen of zelf wilt proberen, heeft u eerst een Amberdata API Key nodig om toegang te krijgen tot de websocket. De volledige code voor deze blogpost, samen met de andere blogposts in deze serie is hier beschikbaar, en voor deze post zullen we ons richten op de repository txn-mempool. Ik heb ervoor gezorgd dat er minimale pakketten zijn om te installeren, dus je zou in staat moeten zijn om aan de slag te gaan met het verzamelen van data met alleen Python versie 3.7 en de virtuele omgeving manager van je keuze. Nu we dat uit de weg hebben, kunnen we overgaan tot het leuke gedeelte.

reacties

De analyse

Ik heb mijn Raspberry Pi ongeveer een dag laten lopen terwijl ik naar de Bitcoin-mempool luisterde. Ik stelde mijn drempel op voor hangende transacties die groter zijn dan 100 Bitcoin, of transacties met een waarde van ten minste ongeveer $1,15 miljoen.

reacties

Kijken naar lopende transacties (boven een bepaalde drempel) live

Ik ving periodiek mempool transacties op vanaf 26 augustus 2020 om 8:30 uur PST tot en met de 28e om 8 uur. Het in kaart brengen van deze transacties in volgorde van voorkomen geeft ons dit:

reacties

Een plot van de omvang van de transactie over de periode van mijn gegevensverzameling

We zien dat we in principe twee niveaus van hangende transacties hebben waargenomen. Kleine (in het schema van de dingen) transacties met een waarde van minder dan 1.000 Bitcoin (~ $11 miljoen) die vaak voorkomen, en een groot aantal hangende transacties in de 10.000 Bitcoin range (~$100 miljoen) en hoger. Dit kan voor sommigen een verrassing zijn over de schokkende hoeveelheid waarde die voortdurend wordt overgedragen op het Bitcoin-netwerk. De totale verdeling van de lopende transacties die we hebben opgenomen ziet er als volgt uit:

reacties

telling 503 gemiddeld 1034 std 2613,3 min 100 25% 131 50% 211 75% 438 max 11711

De gemiddelde hangende transactie – exclusief transacties onder 100 FTK – was ongeveer 1034 FTK, maar de mediaan was lager op iets meer dan 200 FTK, wat aangeeft dat er enkele veel grotere transacties zijn die de verdeling scheeftrekken.

reacties

Terzijde: hoewel Tmux een server in leven houdt zodat het luisterprogramma zich kan blijven abonneren op gegevens uit de websocket, was ik dom en heb ik de stekker van mijn machine een paar uur per keer uit het stopcontact gehaald. Mijn Kindle deelt dezelfde lader, en ik ben ook een fervent lezer. Hier is hoe mijn dataverzameling eruit ziet in het tijdsdomein met downtime van het loskoppelen van mijn Raspberry Pi:

reacties

Mijn gegevensverzameling uptime

We zullen het effect hiervan later in de analyse zien opduiken, maar voorlopig kunnen we dit gewoon in het achterhoofd houden. Aangezien onze analyse gericht is op het in de gaten houden van de portemonnee op de BitMEX beurs, laten we dit vertalen naar transacties waarbij deze BitMEX adressen betrokken zijn.

reacties

Het filteren van transacties naar/van/op de beurs

Door te praten over de geldstroom met betrekking tot een beurs, kunnen we een idee krijgen of mensen binnen de beurs handelen, geld in de beurs stoppen om te handelen, of het geld uit de beurs halen. Het plaatsen van geld in een beurs weerspiegelt mogelijk een bullish sentiment, omdat mensen meer Bitcoin kopen om te handelen. Geld uit de beurs halen daarentegen kan een weerspiegeling zijn van een draaglijk sentiment. Mensen kunnen geld uit de beurs halen om zich terug te trekken en in een koude portemonnee te steken, naar een andere beurs over te schrijven, of te liquideren in USD of een andere valuta.

reacties

Zoals hierboven vermeld, gebruiken we een bloeifilter om hangende transacties van een beurs ‘on the fly’ te identificeren en stromen te observeren voordat ze afgeronde transacties worden. Als er een BitMEX-adres in het veld “van” staat, dan beschouwen we de transactie als “van” of “van” de beurs. Op dezelfde manier, als we een BitMEX-adres vinden in het “tot” veld, dan is de transactie “op” de beurs. Als beide velden een BitMEX-adres bevatten, dan is de transactie “binnen” de beurs.

reacties

Slechts ongeveer 4% van de transacties die we op de beurs hebben geregistreerd, vonden plaats. Hier negeren we de transacties die geen verband houden met BitMEX. Helaas waren we niet in staat om transacties op te nemen die alleen van of buiten de beurs kwamen. Voor de activiteit die we wel hebben geregistreerd, is de splitsing ongeveer 40/60 van de activiteit die naar de beurs gaat versus de activiteit die binnen de beurs plaatsvindt.

reacties

De verdeling van transacties die te maken hebben met BitMEX

Nu we een beeld hebben van de grote transacties in de vlucht op BitMEX, laten we ze over de prijs plotten om een beeld te krijgen van wat er aan de hand was toen de transactie werd ingediend.

reacties

Uitzetten van grote beursgerelateerde transacties over de prijs

We gebruiken Amberdata’s OHLCV historische eindpunt om minutieuze gegevens te krijgen over de sluitingsprijs van Bitcoin in deze periode. Als u deze analyse wilt repliceren, wees u er dan van bewust dat u maximaal 24 uur aan data op deze granulariteit tegelijk kunt opvragen, maar het is eenvoudig om gewoon een hoppingvenster te doen om zoveel data te verzamelen als u nodig heeft. Ik heb de twee databronnen gecombineerd en de grote hangende transacties over de Bitcoin-prijs uitgezet, waarbij ik elke transactie heb gecodeerd met een kleurcode, of deze nu “op” of “binnen” de beurs was.

reacties

Een perceel van enkele levende in afwachting van de instroom in BitMEX…

In dit deel van de gegevens ging het grootste deel van de lopende transacties van externe adressen naar de uitwisseling, zodat we een aantal live-instroom op BitMEX konden vastleggen. Dit is hoe de transacties eruit zien, gesorteerd op waarde:

reacties

Grootste hangende BitMEX-gerelateerde transacties

Het lijkt erop dat de grootste van deze hangende transacties – bij lange na niet – twee waren aan het begin van de observatieperiode.

reacties

Grootste activiteit binnen de beurs

De eerste hangende transactie, die eigenlijk op mijn tweede minuut van de waarneming plaatsvond, is de grootste hangende transactie met 3400 btc. Nog interessanter is dat twee van de transacties binnen dezelfde minuut plaatsvonden, waarvan één de op één na grootste transactie is die we in de mempool over de periode hebben waargenomen. Slechts milliseconden nadat een transactie werd gepost voor meer dan 1000 Bitcoin, een andere transactie in dezelfde beurs gepost voor 150 Bitcoin. Ik heb de adressen van beide transacties bekeken en ze hebben niets met elkaar gemeen, dus het is onduidelijk of de twee wel met elkaar te maken hebben.

reacties

Er is nog een andere subtiliteit die we tot nu toe hebben gemist in de analyse. Zo komt de eerste transactie op de lijst eigenlijk alleen voor tussen twee unieke adressen, en één daarvan is geen BitMEX-adres, ook al hebben we de transactie als zodanig vermeld. Dit komt door de manier waarop BitMEX een transactie verwerkt. Als een BitMEX-portemonnee een overboeking initieert om geld te versturen, zal de verzender het volledige saldo van zijn rekening als invoer sturen, en zal hij zijn saldo ontvangen minus het bedrag dat hij wil versturen en de vergoeding daarvoor.

reacties

Als u de “binnen” transacties doorloopt, zult u merken dat ze allemaal dit formulier zijn, wat betekent dat ze gewoon een BitMEX-overdracht van fondsen naar een externe rekening zijn. We vonden dus geen BitMEX transfers binnen de beurs – dus van het ene BitMEX-adres naar het andere, en alleen transfers vanuit de beurs.

reacties

Terugkijkend op onze transacties op de beurs kunnen we nu het bedrag berekenen dat ofwel de beurs heeft verlaten zoals besproken, ofwel het bedrag dat naar de beurs is overgemaakt. Dat heb ik gedaan met het volgende script:

reacties

Dit script doorloopt de transacties die “binnen” werden gelabeld en berekent het bedrag dat naar niet-BitMEX adressen werd overgebracht, en doorloopt de transacties die “aan” werden gelabeld en berekent het bedrag dat naar BitMEX adressen werd verzonden. We gebruiken Amberdata’s Single endpoint om de transactiedata te verkrijgen gezien de transactie hash. De resultaten zien er als volgt uit:

reacties

Zoals we kunnen zien, past slechts één transactie in onze beschrijving van een grote stroom van meer dan 100 btc. Iemand heeft op 28 augustus om ongeveer 7:00 uur PST 100 btc uit BitMEX overgebracht. Met deze extra laag code konden we in zones op de transfers van Bitcoin in of uit een exchange, net zoals ze op het netwerk werden gepost.

reacties

Controleren of de transactie is doorgegaan

Als we zien dat een grote transactie in de mempool is gepost, willen we misschien controleren of of het doorgaat of wanneer het doorgaat. We kunnen gebruik maken van Amberdata’s blockchain adres transactie-eindpunt om te zien wanneer de transactie in een blok wordt gedolven. Het uitvoeren van deze code, laat zien dat de transactie de volgende dag, op 27 augustus, in blok 645509 is gedolven.

reacties

Laten we nu eens kijken of een van de top 10 transacties waar we naar gekeken hebben, bevestigd is. Door simpelweg bovenstaande code te gebruiken en onze top 10 adressen door te lopen, kunnen we snel zien of een van de transacties nog is doorgelopen.

reacties

Opmerking: sommige van deze adressen zijn veel actiever dan degene die we hierboven hebben bekeken, dus we moeten het aantal records verhogen om terug te keren naar 1000 per pagina. Ik heet u welkom om dit te proberen in de analyse Jupyter Notebook, maar voor nu kunt u me vertrouwen dat van de 19 transacties met betrekking tot de uitwisseling, alle, op drie na, zijn gegaan op het moment van schrijven.

reacties

Aantal afgeronde transacties: 16 Totaal aantal transacties: 19 Procent afgerond: 84.2

Wat hebben we geleerd?

Als je met mij tot het einde toe bent doorgegaan, gefeliciteerd! We hebben vandaag een heleboel onderwerpen doorgenomen. We leerden wat een mempool is, waarom blockchain-portemonnees zo moeilijk te vinden zijn, en namen enkele eerste stappen in het berekenen van stromen uit Bitcoin-transacties. Van het verzamelen van de gegevens, het plotten van de stromen over de prijs, en het controleren van voltooide transacties, maakte Amberdata’s blockchain en marktgegevens API’s het verkrijgen van zichtbaarheid in de mempool een makkie.

reacties

We hebben ook geleerd over een aantal coole dev tools, zoals tmux, de websockets bibliotheek, bloom filters, en hoe je goedkoop kunt beginnen met het luisteren naar live blockchain data op een Raspberry Pi. Het belangrijkste is dat we hebben geleerd dat we grote geldstromen kunnen ontdekken, net zoals ze aan een blokketen worden voorgelegd, vaak tot 24 uur voordat ze door het netwerk worden verwerkt.

reacties

Als u geïnteresseerd bent in het uitproberen van deze analyse voor uzelf, kunt u de Github repository voor dit blogbericht hier bekijken. Ik heb de gegevens van deze analyse als voorbeeld opgenomen om te beginnen.

reacties

Aanbevolen foto door Sam Bark op Unsplash

reacties

Bronnen

Bitcoin’s Mempool: Uitleg voor beginners: https://99bitcoins.com/bitcoin/mempool/

Amberdata In afwachting van de transactie Websocket: https://docs.amberdata.io/reference#address-mempool

Amberdata’s blokketen adres transactie eindpunt: https://docs.amberdata.io/reference#get-address-transactions

Amberdata’s OHLCV Historisch Eindpunt: https://docs.amberdata.io/reference#get-historical-ohlc

Amberdata’s Enkelvoudig Eindpunt: https://docs.amberdata.io/reference#get-transaction

Traceer Activa Beweging en Blokketen Gebeurtenissen Gids: https://amberdata.io/guides/track-asset-movement-and-blockchain-events

Async IO in Python: https://realpython.com/async-io-python/#async-io-design-patterns

Websockets: https://pypi.org/project/websockets/

Waarom verandert een Bitcoin-portemonneeadres voortdurend?: https://www.btcwires.com/round-the-block/why-does-a-bitcoin-wallet-address-change-constantly/

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

Deel dit verhaal @ evanaze Evan Azevedo Lees mijn verhalen Ik ben een generalist en liefhebber van de wetenschappen

Tags

Laat een reactie achter

Het e-mailadres wordt niet gepubliceerd. Vereiste velden zijn gemarkeerd met *