Blockchain nie zna pojęcia czasu. Trzeba to zmienić
Kryptowaluty aspirują do miana pogromcy banków. Żeby stało się to rzeczywistością, funkcjonalność portfeli kryptowalutowych nie powinna ustępować systemom bankowym. A jedną z takich funkcjonalności jest zlecanie transakcji w przyszłości. Blockchain niestety nie zna pojęcia czasu i trzeba to zmienić.
Daniel Kmak. DApp Developer w Chronologic, firmie zajmującej się tworzeniem m.in. smart-kontraktów. Od pół roku pracuje z technologią blockchain jako Decentralized Application Developer (DAPP Developer, taka odmiana frontend developera). Wcześniej pracował dla RepuX’a. Pracuje w pełni zdalnie. Udziela się w społeczności StackOverflow, gdzie zdobył ponad 12 tys. punktów. Jest też blogerem piszącym o pracy developera, a jego teksty znajdziecie na platformie medium.com. Przeprowadził też serię wywiadów o blockchainie – znajdziecie je tutaj.
Jedną z podstawowych możliwości, którą systemy bankowe dają jest zlecanie transakcji w przyszłości. Prosta sprawa — mamy do zapłacenia podatek, termin jest do dziesiątego dnia miesiąca. Nie chcemy transferu wykonywać wcześniej tylko dokładnie w wyznaczonym dniu. Drugi przykład, każdego miesiąca płacimy za mieszkanie, chcemy zautomatyzować transakcję zapłaty czynszu na kolejny rok. Systemy bankowe pozwalają nam bardzo łatwo zrealizować oba scenariusze. A portfel z kryptowalutami?
Dwie najpopularniejsze kryptowaluty to Bitcoin i Ethereum. Jeśli chodzi o poziom zaawansowania obu platform i możliwości techniczne jakie dają to Ethereum przewyższa Bitcoin’a ze względu na smart-kontrakty. Co to oznacza? W Bitcoinie możemy tylko przelewać kwoty między adresami. Natomiast w Ethereum możemy pisać programy i umieszczać logikę. W ten sposób powstają zdecentralizowane aplikacje. Przykładową aplikacją może być zdecentralizowany sklep z muzyką lub plikami.
Wracając do zlecania transakcji, w Bitcoinie takiej możliwości nie ma. Idea czasu nie istnieje, są tylko bloki. Oczywiście, można uruchomić tak zwanego CRON’a, czyli ustawić, że o określonej godzinie wystartuje proces na naszej maszynie wysyłający transakcję, np. używając klienta konsolowego. Jest to jednak rozwiązanie scentralizowane, wszelkie problemy z maszyną lub internetem mogą sprawić, że nasze starania spalą na panewce.
Pomysł z CRON’em jest tak samo skuteczny (lub nieskuteczny) w przypadku Ethereum. Z tym, że Ethereum ma więcej asów w rękawie i daje pewne pole do stworzenia działającego, zdecentralizowanego rozwiązania… Wspomniałem wcześniej o smart-kontraktach, wewnątrz ich logiki możemy odczytać zarówno numer obecnego bloku, jak i… czas uniksowy. Dzięki temu, dane transakcji, którą chcemy zlecić w przyszłości, możemy zapisać w smart-kontrakcie, który pozwoli na jej wykonanie tylko w ramach czasowych jakie ustalimy. Rozwiązanie zlecania transakcji w Ethereum nie zostało więc zaimplementowane na poziomie natywnym, ale platforma umożliwia stworzenie protokołu jeden poziom wyżej — w smart-kontraktach.
Spis treści
Ethereum Alarm Clock
Takim protokołem jest Ethereum Alarm Clock, stworzony w 2015 roku przez Piper’a Merriam’a, należącego do Ethereum Foundation. Użytkownicy mogą wybrać czas uniksowy lub blok, w którym transakcja ma zostać wykonana. Ze względu na brak stuprocentowej dokładności, należy również ustalić wielkość ramy czasowej pozwalającej na wykonanie transakcji. Czyli, użytkownik A chce przesłać 1 ETH użytkownikowi B, o godzinie 17:15. Wybiera więc 17:15 jako czas początkowy oraz ustala okno wykonania transakcji na 5 minut. To znaczy, że jeśli nikt nie wykona transakcji od razu, najpóźniej będzie mógł to zrobić o 17:20.
Nad wykonywaniem transakcji czuwa sieć tzw. TimeNodes. Użytkownik zlecając transakcję ustala małą prowizję jaką jest w stanie zapłacić komuś za jej wykonanie. Dzięki temu tworzy się mały rynek i drugi aktor w sieci, czyli TimeNode — ma motywację, żeby wykonać zlecenie kogoś innego. W praktyce bycie TimeNode sprowadza się do posiadania otwartej karty przeglądarki z zaimportowanym portfelem, który będzie służył do wykonywania cudzych transakcji oraz kolekcjonowania nagród. Strona, na której można to zrobić, zarówno jak i zlecić transakcję to: app.chronologic.network. Aby przetestować wybrane funkcjonalności należy posiadać zainstalowany plugin MetaMask oraz korzystać z sieci testowej Kovan. Produkcyjnie protokół już niedługo powinien pojawić się w głównej sieci Ethereum. W tej chwili trwa audyt, którego zadaniem jest zapewnienie bezpieczeństwa środków osób korzystających z systemu.
Technikalia
Przejdźmy więc ścieżkę od zlecenia transakcji do jej wykonania. Transakcję zlecić można korzystając z eac.js-cli, konsolowego klienta JavaScript lub aplikacji webowej app.chronologic.network. Zarówno klient konsolowy jak i aplikacja korzystają z tej samej biblioteki — eac.js-lib.
Niezależnie więc, z której opcji skorzystamy po zatwierdzeniu zlecenia transakcji zawołamy funkcję schedule w kontrakcie TimestampScheduler (jeśli wybraliśmy czas uniksowy) lub BlockScheduler. Następnie, dla każdej transakcji zleconej w przyszłości tworzy się osobny kontrakt TransactionRequest. Jego stworzenie zarejestrowane jest w kontrakcie RequestFactory, który obserwowany jest przez sieć node’ów. W tej sieci, każdy TimeNode uruchamia proces konsolowy lub kartę przeglądarki, która pozwala na skanowanie eventów RequestCreated emitowanych przez RequestFactory. TimeNode zapisuje wszystkie transakcje w cache i czeka na moment, w którym będzie mógł wykonać transakcje.
Ciekawym mechanizmem jest również możliwość “claimowania” transakcji — zapewnia to danemu node’owi wyłączność na wykonanie transakcji. Czasami wiąże się to jednak z wymaganym depozytem, który trzeba złożyć wcześniej. Jeśli node zadeklaruje, że transakcję wykona, a następnie tego nie zrobi — depozyt przepadnie.
Wszystkie kontrakty Ethereum Alarm Clock zostały napisane w najbardziej popularnym języku platformy Ethereum, czyli Solidity.
Integracje
W Paryżu na Ethereum Community Conference jako ChronoLogic przeprowadziliśmy około siedemdziesiąt wywiadów, z których wynika, że zarówno programistom jak i użytkownikom Ethereum naprawdę brakuje możliwości zlecania transakcji. W świecie Ethereum często mamy do czynienia ze zbiórkami pieniędzy. Mogą one zaczynać sie w nocy — w zależności od naszej strefy czasowej. Zamiast czuwać aby kupić swoje tokeny, można wcześniej skorzystać z protokołu Ethereum Alarm Clock, a czas czuwania przeznaczyć na coś innego.
Pierwszym portfelem Ethereum, który się z nami zintegrował jest MyCrypto.
Dzięki tej integracji, użytkownicy mogą użyć przełącznika “Send Later” i wybrać dogodny dla nich czas wysłania transakcji. Kolejne integracje są w planach, ale najpierw czekamy na zakończenie audytu. Podczas rozmów z twórcą Ethereum — Vitalikiem Buterinem okazało się również, że rozważano natywną implementację zlecania transakcji w przyszłości, ale z braku czasu nie zdecydowano się na zrobienie tego w pierwszych wersjach blockchainu Ethereum.
Przyszłość
Jeśli jesteś użytkownikiem sieci Ethereum w ciągu kilku miesięcy powinieneś mieć możliwość zlecania transakcji w przyszłości podczas korzystania z Twojego ulubionego portfela. Jeśli natomiast interesujesz się zostaniem TimeNode i zdobywaniem nagród ETH za wykonywanie transakcji, być może jest to czas dla Ciebie, żeby zacząć testować mechanizm.