WavesKit - framework PHP do pracy z blockchainem Waves

Lubię PHP dla szybkości rozwoju i doskonałej przenośności. To bardzo dobrze, gdy zawsze masz w kieszeni gotowe narzędzie do rozwiązywania problemów.

Szkoda było, gdy zapoznając się z rodzimym blockchainem Platforma fal nie miał w swoim arsenale gotowego PHP SDK. Cóż, musiałam to napisać.

Najpierw musiałem użyć węzły do podpisywania transakcji. Tak więc, aby zarządzać trzema adresami, trzeba było uruchomić trzy węzły… To był żałosny widok, chociaż rozwiązał pewne problemy. Aż przyszło zrozumienie, że poleganie na węzłach to ślepy zaułek. Po pierwsze, ze względu na ograniczoną funkcjonalność API, po drugie ze względu na szybkość (w tamtych czasach węzły były bardzo powolne).

Zacząłem dwie równoległe prace. Jednym z nich jest stworzenie eksploratora łańcucha bloków, który jest szybki i całkowicie niezależny od interfejsu API węzłów. Drugi to zebranie w jednym miejscu wszystkich funkcji do pracy z Platformą Waves. Tak powstały projekty. w8io и Zestaw Waves.

Pierwszym krokiem za kulisami blockchaina Waves było przeglądarka w8io. Nie było to łatwe, ale udało się napisać niezależne obliczenia wszystkich sald, a nawet znaleźć błąd w obliczeniach na oryginalnych węzłach (program nagród za błędy Nawiasem mówiąc, im to działa, płacą za znalezione błędy). Możesz dowiedzieć się więcej o funkcjonalności przeglądarki w8io w tym wątku: https://forum.wavesplatform.com/t/w8io-waves-explorer-based-on-php-sqlite

W trakcie pracy nad w8io miałem już wątpliwości, ale kiedy prace dobiegły logicznego końca i zacząłem tworzyć SDK, moje wątpliwości się potwierdziły. Nigdzie nie mogłem znaleźć niektórych funkcji, w tym najważniejszych kryptograficznych. Następnie zacząłem od wykonania cegieł fundamentowych. Tak się urodzili: Kod AB zakodować do base58 (właściwie zakodować dowolny alfabet na dowolny), Curve25519 do tworzenia i weryfikowania zgodnych podpisów (z opcjami na sterydach), Blake2b obliczyć jeden z skrótów (który jest dostępny dopiero od PHP 7.2) itp.

Tutaj muszę podziękować Inała Kardanowa za cenne rady, które mnie nakierowały komponować zamiast zwykłego dla mnie, ale przestarzałego, dołączam pliki.

Po kilku miesiącach WavesKit ujrzał światło dzienne, wyszedł wersje beta i jest teraz gotowy do pracy ze wszystkimi standardowymi funkcjami platformy Waves. Wszystkie dostępne w sieć główna transakcje można łatwo tworzyć, podpisywać i wysyłać za pomocą tylko jednego pakietu, który działa na wszystkich 64-bitowych wersjach PHP od 5.6 włącznie.

Podłączamy WavesKit do naszego projektu:

composer require deemru/waveskit

Używamy:

use deemruWavesKit;
$wk = new WavesKit( 'T' );
$wk->setSeed( 'manage manual recall harvest series desert melt police rose hollow moral pledge kitten position add' );
$tx = $wk->txBroadcast( $wk->txSign( $wk->txTransfer( 'test', 1 ) ) );
$tx = $wk->ensure( $tx );

W powyższym przykładzie tworzymy obiekt WavesKit, który działa w sieci testowej „T”. Ustawiamy frazę seed, z której automatycznie wyliczane są klucze i adres konta na podstawie klucza publicznego. Następnie tworzymy transakcję transferu 0.00000001 Waves z adresu wyliczonego automatycznie z frazy seed na adres „testowego” aliasu, przekazujemy ją do podpisu kluczem prywatnym i wysyłamy do sieci. Następnie upewniamy się, że transakcja została pomyślnie potwierdzona przez sieć.

Transakcje koncentrują się na funkcje zaczynające się od tx. Aby lepiej zrozumieć pracę z transakcjami, możesz się uczyć Dokumentacja WavesKit lub przejdź bezpośrednio do ilustrujących przykładów w ciągłe testy integracyjne.

Ponieważ WavesKit został opracowany w praktyce, ma już zaawansowane funkcje. Pierwsza funkcja zabójcy to zapewnić funkcjonalność, który kontroluje osiągnięcie wymaganego poziomu pewności, że transakcja nie została utracona, a wręcz przeciwnie, została potwierdzona i osiągnęła wymaganą liczbę potwierdzeń w sieci.

Innym kuloodpornym mechanizmem jest sposób, w jaki WavesKit komunikuje się z węzłami. W warunkach szklarniowych framework współpracuje tylko z głównym węzłem, utrzymując z nim stałe połączenie, ale w przypadku błędów może automatycznie przełączyć się na zapasowe. Jeśli konfigurujesz tablicę węzłów rezerwowych, możesz wywołać tę funkcję ustawNajlepszywęzeł określenie najlepszego węzła jako węzła głównego na podstawie maksymalnej wartości aktualnej wysokości i szybkości odpowiedzi. Teraz dodaj do tego wewnętrzną pamięć podręczną zapytań i poczuj troskę zarówno użytkowników, jak i właścicieli węzłów.

Jednym z najnowszych zaawansowanych mechanizmów jest funkcja txMonitor. Pojawił się w związku z koniecznością reagowania na transakcje przychodzące w czasie rzeczywistym. Ta funkcja całkowicie rozwiązuje wszystkie niuanse związane z przetwarzaniem transakcji w blockchainie. Koniec z bólem, po prostu skonfiguruj funkcję oddzwaniania z wybranymi opcjami i poczekaj, aż nowe transakcje rozpoczną procesy. Na przykład kolejny z moich projektów VECRO całkowicie zbudowany wokół tej funkcji, możesz łatwo nauczyć się, jak to działa poprawnie w kodzie projektu.

Uwielbiam open source, to jedno z największych osiągnięć ludzkości. Ponieważ jestem jedynym programistą i osiągnąłem stan, że wszystkie moje potrzeby zostały rozwiązane, zapraszam do korzystania i współtworzenia Zestaw Waves.

Źródło: www.habr.com

Dodaj komentarz