130 / 736CSV

CSV

Czekanie od potwierdzenia konkretnych monet

Czasem chcesz poczekać, aż monety spędzą pewien czas w łańcuchu, zamiast czekać do ustalonej daty. CSV pomaga wymusić taki odstęp. Odliczanie nie zaczyna się od utworzenia portfela ani podpisania płatności.

CSV to skrót OP_CHECKSEQUENCEVERIFY w Bitcoin Script. Razem z BIP 68 umożliwia blokadę względną: określona ścieżka wydania staje się dostępna, gdy potwierdzone wyjście jest dostatecznie stare. Wyjście to otrzymana kwota wraz z warunkami wydania. Czekanie nie zastępuje podpisu ani nie wysyła pieniędzy.

Anna i Piotr mogą wspólnie wydać przechowywane razem monety. Chcą też ścieżki awaryjnej, z której Anna skorzysta sama, lecz dopiero po odczekaniu od potwierdzenia odpowiedniego wyjścia. CSV pomaga wymusić ten warunek. W odróżnieniu od CLTV, które wskazuje stałą wysokość lub czas, granica nie jest jednym z góry określonym punktem całej historii. Zależy od konkretnych monet. Utworzenie portfela, przygotowanie podpisu lub długie oczekiwanie niepotwierdzonej transakcji nie zastępuje tego początku. Portfel to aplikacja lub urządzenie do odbierania i wysyłania bitcoinów. [1] [2] [8]

Blok grupuje transakcje w pakiet dołączany do wspólnej historii. Wysokość bloku oznacza jego pozycję w łańcuchu. Wyobraźmy sobie wyjście potwierdzone na wysokości 900000 i wymaganą zwłokę 10 bloków. Według tej blokady najwcześniejszy blok wydania to 900010. Odstęp zaledwie 9 bloków jest za mały. Nie oznacza to obietnicy dokładnej liczby minut: bloki nie pojawiają się w równych odstępach. Dostateczny wiek nie jest też potwierdzeniem płatności. Transakcja musi być poprawna pod każdym innym względem, a górnik musi rzeczywiście włączyć ją do bloku. [2] [4] [9]

Opóźnienie można zapisać również w krokach po 512 sekund. Kod 2 oznacza wtedy 1024 sekundy. Nie porównuje się jednak dwóch zegarów komputerowych. Początkiem jest Median Time Past bloku poprzedzającego blok potwierdzenia wyjścia, a drugim końcem — Median Time Past bloku poprzedzającego blok kandydujący. To środkowy znacznik czasu ostatnich maksymalnie 11 bloków po uporządkowaniu. Różnica tych median musi osiągnąć wymagany odstęp. Nie jest to precyzyjny budzik według lokalnego czasu. [2] [4] [7]

Portfel może połączyć kilka wcześniej otrzymanych kwot w jednej płatności. Każde wejście transakcji wskazuje wcześniej otrzymane wyjście, którego wiek liczy się od potwierdzenia w łańcuchu. Pole nSequence należy do samego wejścia. To pole niesie informację używaną do względnego czekania. Nie wystarczy, że tylko część pieniędzy jest dostatecznie stara: muszą być spełnione wszystkie blokady mające zastosowanie do transakcji. Reorganizacja łańcucha może też zmienić miejsce potwierdzenia. Wcześniejsza możliwość wydania nie jest więc nieodwracalną cechą monety. Podczas reorganizacji sieć przyjmuje inną poprawną gałąź łańcucha, zastępując część wcześniejszej historii bloków. [2] [4] [9]

Full Node samodzielnie weryfikuje reguły poprzez powiązane kontrole. CSV według BIP 112 porównuje argument skryptu z nSequence wejścia, które wydaje dane wyjście. Sam nie oblicza wieku; robi to BIP 68 podczas weryfikacji transakcji. Przy zwykłym argumencie bez flagi wyłączenia wersja transakcji musi wynosić co najmniej 2, a bit 31 w nSequence nie może być ustawiony. Bit to mały przełącznik w polu liczbowym. Ujemny argument, starsza wersja lub niezgodne nSequence powodują niepowodzenie kontroli. [1] [2] [3]

Bit 22 określa, jak odczytać opóźnienie. Gdy nie jest ustawiony, jednostką są bloki; gdy jest ustawiony, używa się kroków po 512 sekund. Argument skryptu i nSequence muszą mieć ten sam typ. To jak porównywanie pomiarów: większa liczba nie wystarcza, gdy jedna strona liczy kilometry, a druga godziny. Tutaj niezgodność dotyczy liczby bloków i przedziału czasu. [1] [2] [3]

Długość opóźnienia niosą dolne 16 bitów. Maska 0x0000ffff wybiera tę część pola liczbowego. CSV porównuje ją razem z typem opóźnienia; dowolnie duże nSequence nie oznacza automatycznie dłuższego czekania. Po wybraniu odpowiednich bitów wymaganie skryptu nie może przewyższać wartości wejścia. To ważna granica techniczna dla twórców portfeli. Zwykły użytkownik nie powinien jednak ustawiać jej ręcznie bez zrozumienia całej procedury. [1] [2] [3]

Zerowe opóźnienie nie dodaje czekania, ale pozostałe kontrole zwykłego CSV nadal obowiązują. Inny przypadek występuje wtedy, gdy nieujemny argument samego skryptu ma ustawiony bit 31. CSV zachowuje się wówczas jak NOP, instrukcja bez wpływu na blokadę względną. Taki argument nie wymusza czekania. Trzeba odróżnić go od tej samej flagi w nSequence wejścia: przy zwykłym argumencie flaga wejścia nie może być ustawiona. [1] [3]

Jeżeli ścieżka awaryjna Anny wymaga jej podpisu, musi go dostarczyć również po upływie czasu. Klucz prywatny to tajna wartość liczbowa służąca do utworzenia takiego podpisu. Zgubiony klucz prywatny nie wraca, a inna gałąź może nadal umożliwiać wcześniejsze wydanie. Podczas wykonywania skryptu CSV pozostawia argument na stosie, roboczym miejscu na dane; dlatego często następuje po nim OP_DROP, który go usuwa. Usunięcie danych nie upoważnia nikogo do pieniędzy. Decydują o tym podpisy i pozostałe warunki wybranej ścieżki. [1] [3] [5]

BIP 112 wprowadził CSV w miejsce OP_NOP3 razem z BIP 68 i BIP 113. To działająca funkcja, nie sam plan. Wykorzystują ją choćby kanały płatnicze Lightning Network, gdzie opóźnienie może dać drugiej stronie czas na reakcję; nie zapewnia jednak samej reakcji. Po czekaniu transakcja nadal wymaga rozgłoszenia i potwierdzenia. Liczą się opłata, dostępne dane oraz stan łańcucha. Szczegóły weryfikacji opisują Bitcoin Core v29.0 i wskazane specyfikacje. [1] [2] [6]

Pełniejszy obraz uzyskasz, czytając to hasło razem z CLTV, Opcode, Timelock, Bitcoin Script, Bitcoin, Full Node. Do tego hasła prowadzą również odsyłacze z Potwierdzenie, Timelock, HTLC, Opcode.

DOC · 001BIP 112 — OP_CHECKSEQUENCEVERIFYSpecyfikacja DOC · 002BIP 68 — Relative lock-timeSpecyfikacja DOC · 003Bitcoin Core v29.0 — Script interpreterDokumentacja DOC · 004Bitcoin Core v29.0 — Transaction sequence locksDokumentacja DOC · 005Bitcoin Developer Reference — TransactionsDokumentacja DOC · 006Bitcoin Core 0.12.1 — BIP 68/112/113 release notesDokumentacja DOC · 007BIP 113 — Median time-past lock-time calculationsSpecyfikacja DOC · 008BIP 65 — OP_CHECKLOCKTIMEVERIFYSpecyfikacja DOC · 009Bitcoin Developer Guide — Block ChainDokumentacja
Zaktualizowano: Najpierw źródła · To nie jest porada inwestycyjna