Job Negotiation to uzgodnienie między górnikiem a poolem dotyczące własnego zadania wydobywczego. Stratum V2 określa zasady komunikacji między urządzeniami wydobywczymi a poolem. Job Declaration Protocol to jego część obsługująca własne propozycje, współpracująca z przekazywaniem szablonów i zadań. Celem jest umożliwienie wyboru transakcji, podczas gdy pool nadal ewidencjonuje pracę i wypłaca nagrody. Liczy się rzeczywista konfiguracja, a nie sama nazwa połączenia.
Anna przechodzi na Stratum V2, ale wciąż otrzymuje listę transakcji od poolu. Nie ma w tym sprzeczności. Mining Protocol, część odpowiedzialna za przesyłanie pracy i wyników, może działać bez Job Declaration i Template Distribution. Ta ostatnia dostarcza szablony bloków, a Job Declaration obsługuje własne propozycje. Aby Anna mogła wybierać, potrzebne są także te role oraz wspierający je pool. Nowocześniejszy transport sam w sobie nie mówi zatem, kto decyduje o zawartości bloku w sieci Bitcoin. [1] [4]
Wybrane płatności nie mogą wypełnić bloku tak, że nie zmieści się transakcja nagrody coinbase. Dostawca szablonu, Template Provider, musi więc znać potrzebną rezerwę. Po stronie Anny działa program JDC, czyli Job Declarator Client. Ustala wymagania używanych pooli i wysyła je dostawcy szablonu w komunikacie z danymi o nazwie CoinbaseOutputConstraints. Rezerwuje się miejsce na dane oraz sigops, operacje sprawdzania podpisów wliczane do limitu bloku. Inaczej dodatkowe wyjścia coinbase, pozycje przypisujące środki, mogłyby przekroczyć limity bloku. Własny wybór transakcji musi od początku uwzględniać poprawność całego wyniku. [3]
W trybie Full-Template JDC wysyła DeclareMiningJob do JDS, czyli Job Declarator Server po stronie poolu lub usługi, której pool ufa. Wiadomość podaje identyfikatory wybranych transakcji. Jeśli serwer nie ma którejś z tych transakcji, może poprosić o jej dane przez ProvideMissingTransactions. Anna udostępnia zatem informacje pozwalające sprawdzić jej wybór. Potwierdzenie deklaracji i późniejsze przyjęcie własnego zadania przez pool to dwa oddzielne kroki. Pierwsza pomyślna wiadomość nie kończy jeszcze całego uzgodnienia. [2]
W trybie Coinbase-only JDC nie ujawnia zestawu transakcji i nie używa DeclareMiningJob. Pool szacuje przychód na podstawie przekazanej coinbase. Chroni to wybór Anny przed ujawnieniem poolowi, ale samo nie dowodzi poprawności ukrytych transakcji ani rzeczywistej wysokości ich opłat. Specyfikacja wprost opisuje to ryzyko. Mniej przekazanych informacji oznacza także inne możliwości kontroli; nazwa trybu nie gwarantuje, że wszystkie warunki nagrody zostały odpowiednio wykazane. Ta prywatność dotyczy propozycji w czasie wydobycia. Jeśli Anna znajdzie poprawny blok i rozgłosi go w sieci, jego transakcje staną się widoczne. [2]
W komunikacji technicznej pojawia się kilka podobnych oznaczeń. JDS przydziela mining_job_token, na który klient powołuje się w SetCustomMiningJob. Po przyjęciu zadania pool odsyła SetCustomMiningJob.Success z własnym job_id. Token i job_id mają inne role: pierwszy łączy uzgodnienia dotyczące propozycji, drugi identyfikuje pracę podczas przesyłania wyników. Przypomina to numer wniosku i numer zatwierdzonego zlecenia. Ich pomylenie uniemożliwiłoby poolowi przypisanie wyniku do właściwej przyjętej pracy. [1]
Czekanie na każdy krok komunikacji niepotrzebnie zatrzymywałoby sprzęt. Kiedy klient ma wymagany token i szablon, może rozpocząć optymistyczne wydobycie jeszcze przed SetCustomMiningJob.Success. Znalezione shares, częściowe wyniki potwierdzające pracę według celu poolu, są przechowywane do potwierdzenia. Po przyjęciu zadania można je wysłać z przydzielonym oznaczeniem. Działająca maszyna nie dowodzi więc jeszcze, że pool przyjął lub zaliczył tę pracę. Rozpoczęcie obliczeń i zgoda na wynagradzanie zadania to różne momenty. [1] [2]
Jeżeli Anna otrzyma SetCustomMiningJob.Error albo nie doczeka się odpowiedzi w rozsądnym czasie, specyfikacja zaleca inny pool lub wydobycie samodzielne. Odporność zależy więc od działającego fallbacku, przygotowanej ścieżki zastępczej. Gdyby program po cichu przełączył się na pierwotny szablon poolu, który odmówił, mógłby utrzymać działanie, ale straciłby wybór Anny. Ważne jest zatem, co system naprawdę robi po odmowie. Funkcja opisana w protokole nie jest dowodem, że każda usługa ją obsługuje. [1] [4]
Anna chce wybierać transakcje i nadal korzystać ze wspólnych nagród. Jej JDC musi więc przydzielić wartość do wskazanego wyjścia poolu w coinbase, aby spełnić warunki tych nagród. Jeśli skieruje część przychodu gdzie indziej, pool może proporcjonalnie zmniejszyć zapłatę za tę pracę. Job Declaration nie tworzy automatycznej bezpośredniej wypłaty górnikowi ani nie usuwa zasad rozliczeń usługi. Zmienia przede wszystkim to, kto może proponować zawartość bloku; reguły poprawności i podział przychodu należy oceniać osobno. [2]
Pełniejszy obraz uzyskasz, czytając to hasło razem z Stratum V2, getblocktemplate, Mining Pool, Block Template, Bitcoin. Do tego hasła prowadzą również odsyłacze z Stratum V2, Mining Pool Centralization.