Kurs29384

 

Nie dałem fee, transakcja utknęła - co robić ?

 

transakcja-utknela-360x225

 

Czasami chcąc zaoszczędzić na opłacie transakcyjnej (fee) możemy narobić sobie kłopotu. Okazuje się, że kolejne bloki wpadają, a nasza transakcja nadal nie zostaje zatwierdzona. Postaramy się wyjaśnić dlaczego tak się dzieje i co można zrobić w takim przypadku.

 

Każda transakcja ma swoją wielkość wyrażaną w bajtach. Wielkość transakcji nie zależy wcale od jej wartości (ile wysyłamy) a od ilości użytych w niej wejść i wyjść. Innymi słowy: im transakcja jest bardziej skomplikowana tym jest większa. Domyślną wartością opłaty jest 0.0001 BTC za każdy kilobajt transakcji. Zwykła transakcja mająca jedno wejście i dwa wyjścia zajmuje około 300 bajtów i zasadniczo za każdą transakcję powinniśmy uiścić tą minimalną opłatę. Wysyłanie 0.00001BTC "na próbę" traci całkowicie sens, bo opłata jest większa niż wartość transakcji.

 

Transakcje mogą być wysyłane bez opłaty tylko w szczególnym przypadku - gdy ich priorytet będzie odpowiednio wysoki. Priorytet transakcji zależy od kilku czynników:

 

  • wielkości transakcji
  • wartości transakcji
  • wieku wejść

 

Oblicza się to następująco:

 

priorytet = suma (wartość * wiek + ….) / wielkość

 

Wartość podawana w satoshi, wiek w ilości potwierdzeń transakcji a wielkość w bajtach. Jeżeli priorytet jest wyższy niż 57`600`000 to Bitcoin Core traktuje ją jako darmową. Wszystkie inne transakcje powinny mieć naliczoną opłatę.

 

Na przykład wysyłamy łącznie 0.02 BTC które otrzymaliśmy w dwóch częściach po 0.01 wczoraj i przedwczoraj. Cała transakcja będzie miała 2 wejścia i jedno wyjście i zajmie około 380 bajtów. Jeden dzień to 144 bloki. Core liczy więc następująco:

 

(0.01*100000000*144+0.01*100000000*288)/380 = 1 136 845

 

Jest to zdecydowanie za mało, żeby poszło za darmo. Jeżeli jednak mieliśmy te monety przez trzy miesiące, kalkulacja będzie wyglądała następująco:

 

(0.01*100000000*12960+0.01*100000000*13104)/380 = 68 589 473 i transakcja może być darmowa.

 

Jeżeli na przykład wczoraj otrzymaliśmy całego bitcoina i wysyłamy go dalej:

 

(1*100000000*144)/234 = 61 538 461 i transakcja również może być bez opłaty (transakcja ma jedno wejście i jedno wyjście więc jest mniejsza niż poprzednia).

 

Ostatnie słowo ma jednak kopalnia która wykopuje bloki, ponieważ to od konfiguracji jej węzła zależy, jakie transakcje są w ogóle do bloku przyjmowane. Transakcje z odpowiednio wysokim priorytetem, a bez opłaty są zawsze przyjmowane, może jednak ich być w danym czasie tak dużo, że nie wystarczy miejsca w bloku na przyjęcie naszej transakcji. Będzie ona musiała czekać na kolejny blok/bloki. Dodatkowo, jeżeli nasza transakcja nie ma wysokiego priorytetu i nie ma opłaty trafia w kolejkę oczekujących, która właściwie nie ma końca - ilość transakcji czekających na potwierdzenie to średnio około 2000, około tysiąca wchodzi do każdego bloku.

Co więc robić w sytuacji, gdy nasza transakcja nie przechodzi od wielu godzin/dni?

 

  1. sprawdzić, czy od czasu jej wysłania w ogóle wpadł jakiś blok. Bloki wpadają średnio co 10 minut, ale są przypadki, gdy na blok czekamy nawet kilka godzin. Może się okazać, że niepotrzebnie się martwimy
  2. sprawdzić w przeglądarce bloków np. blockchain.info jak nasza transakcja jest traktowana. Transakcje które są niestandardowe mają stosowny komunikat w polu "priorytet"

 

Jeżeli nasza transakcja jest widoczna w przeglądarce blockchain, oznacza to że nie jest ona na tyle zła, aby być całkowicie odrzucaną przez sieć. Najczęściej wystarczy poczekać. Jeżeli jednak w kilka minut po wysłaniu nadal jest ona niewidoczna, oznacza to że najprawdopodobniej nie ma ona szans na zatwierdzenie.

 

Ponieważ żadna transakcja w sieci nie może być cofnięta, musimy poświęcić trochę czasu i wysiłku, aby to naprawić. Najpierw musimy się upewnić, że transakcja przestanie być rozgłaszana. Najprościej zrobić to przez wyłączenie własnego węzła, ponieważ będzie on naszą transakcję co pewien czas rozgłaszał. Jeżeli natomiast użyliśmy portfela online (np. z blockchain.info) musimy cierpliwie czekać (nawet 2-3 dni) aż serwis "podda się" i przestanie taką transakcję rozgłaszać. Wydane środki automatycznie znajdą się na naszym koncie ponieważ zniknie transakcja które je wydawała.

 

Aby jednak transakcja ponownie nie została wysłana z naszego portfela (np. Core) musimy przywrócić kopię portfela która jej nie zawiera. W innym przypadku zaraz po podłączeniu portfel ponownie wyśle taką transakcję i wrócimy do punktu wyjścia.

 

Innym sposobem jest import klucza prywatnego adresu z którego została wysłana transakcja do innego portfela (najlepiej nieużywanego bez środków) i ponowne wysłanie środków z tego adresu z poprawną (większą) opłatą. Operacja taka powoduje jednak zaistnienie w sieci dwóch różnych transakcji wykorzystujących te same wejścia, co jest interpretowane jako próba ataku "double spend" czyli podwójnego wydania środków. Powodując taką sytuację zmuszamy węzły kopalni do wybrania "lepszej" transakcji, czyli tej która zawiera większą opłatę/priorytet. Po jej zatwierdzeniu w bloku ta pierwsza wadliwa transakcja przestaje być rozgłaszana przez węzły, ponieważ wydaje ona już użyte wejścia.

 

Możemy też nic nie robić oprócz czekania, często taka transakcja przestaje być rozgłaszana i wraca do naszego portfela, jednak w skrajnych przypadkach może to potrwać nawet 2-3 tygodnie.

 

Aktualizacja

 

Obecnie najskuteczniejszą metodą "przepchnięcia" utkniętej transakcji jest jej wydanie ze zwiększoną opłatą transakcyjną. Wykorzystujemy w ten sposób mechanizm wprowadzony w wersji Core v0.13 o nazwie CPFP "child pays for parrent" - "dziecko płaci za rodzica". Obecnie węzły kopalni łączą niezatwierdzone transakcje w łańcuchy (jeżeli jest to możliwe) i obliczają łączną opłatę wszystkich transakcji w łańcuchu. Dotychczasowy mechanizm traktował każdą transakcję z osobna.


Dzięki takiemu rozwiązaniu to ostatnia/najnowszatransakcja może opłacić tx fee za wszystkie "wcześniejsze" niezatwierdzone transakcje które wydaje.


CPFP jest bardziej logicznym rozwiązaniem niż RBF (replace by fee) które wymagało wykonania podwójnego wydania. Jest jednak obarczone wykonaniem kolejnej transakcji zapisanej do łańcucha bloków, czego RBF nie wymaga (bo "zła" transakcja w ogóle nie jest zatwierdzana).


Użycie CPFP jest oczywiście możliwe tylko, jeżeli transakcja jest skierowana "do nas" (gdzy odbieramy od kogoś transakcję). Nie mamy możliwości "pogonienia" w ten sposób transakcji, którą sami komuś wysyłamy.
Większość obecnie używanych portfeli daje możliwość wydania niezatwierdzonych transakcji. Należy tylko pamiętać, aby ustawić ponadstandardową opłatę transakcyjną. Jeżeli wyślemy transakcję ze "zwykłą" opłatą nic nam to nie da, a będziemy mieli kolejną "wiszącą" transakcję w sieci.

 

Portal bitcoin.pl nie ponosi odpowiedzialności z tytułu ewentualnych szkód jakie powstały w wyniku wykorzystania danych zawartych na łamach serwisu.