Lubię za szybkość rozwoju i doskonałą przenośność. To bardzo dobrze, gdy zawsze masz pod ręką narzędzie gotowe do rozwiązania problemów.
Było dość przykre, gdy podczas zapoznawania się z krajowym blockchainem nie znalazłem gotowego SDK w PHP. Cóż, musiałem go napisać.
Na początku musiałem korzystać do podpisywania transakcji. Tak, by zarządzać trzema adresami, musiałem uruchomić trzy węzły… To był żałosny widok, chociaż rozwiązywało niektóre problemy. Do momentu, kiedy zrozumiałem, że poleganie na węzłach to ślepy zaułek. Po pierwsze, z powodu ograniczonej funkcjonalności , po drugie, z powodu prędkości (w tamtych czasach węzły były bardzo wolne).
Zacząłem dwie równoległe prace. Jedna — stworzyć przeglądarkę blockchain, która będzie szybka i całkowicie niezależna od API węzłów. Druga — zebrać wszystkie funkcje do pracy z Waves Platform w jednym miejscu. Tak powstały projekty i .
Pierwszym krokiem za kulisy blockchaina Waves była . To nie było łatwe, ale ostatecznie udało się napisać niezależny skrypt obliczający wszystkie salda i nawet znaleźć błąd w obliczeniach na oryginalnych węzłach ( notabene u nich działa, płacą za znalezione błędy). Możesz dokładniej zapoznać się z funkcjonalnością przeglądarki w8io w tym wątku:
W trakcie pracy nad w8io miałem już wątpliwości, ale gdy praca dobiegła końca i przystąpiłem do tworzenia SDK, wątpliwości się potwierdziły. Nie mogłem nigdzie znaleźć niektórych funkcji, w tym najważniejszych, kryptograficznych. Wtedy zacząłem tworzyć swoje cegły na fundament. Tak narodziły się: do kodowania w base58 (tak naprawdę do kodowania dowolnego alfabetu w dowolnym), do tworzenia i weryfikacji zgodnych podpisów (z wariantami ), do obliczania jednego z hashy (który był dostępny dopiero od PHP 7.2) itd.
Tutaj muszę podziękować za kilka cennych rad, które skierowały mnie w stronę zamiast znanych mi, ale przestarzałych, plików include.
Po kilku miesiącach , wyszedł z i jest teraz gotowy do pracy ze wszystkimi standardowymi funkcjami platformy Waves. Wszystko dostępne w Transakcje mogą być łatwo tworzone, podpisywane i wysyłane za pomocą jednego pakietu działającego na wszystkich 64-bitowych wersjach PHP od 5.6 włącznie.
Integracja WavesKit w swoim projekcie:
composer require deemru/waveskitUż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, na podstawie której automatycznie obliczane są klucze i adres konta na podstawie klucza publicznego. Następnie tworzymy transakcję transferu 0.00000001 Waves z adresu automatycznie obliczonego na podstawie frazy seed na adres aliasu „test”, przekazujemy ją do podpisu kluczem prywatnym i wysyłamy do sieci. Po tym upewniamy się, że transakcja została pomyślnie potwierdzona przez sieć.
Praca z transakcjami koncentruje się w . Aby lepiej zrozumieć pracę z transakcjami, możesz zapoznać się z lub od razu zapoznać się z praktycznymi przykładami w .
Ponieważ WavesKit rozwijał się w warunkach realnego użycia, ma już zaawansowane funkcje. Pierwsza funkcja killer to , która 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.
Inny nieprzepuszczalny mechanizm to sposób, w jaki WavesKit komunikuje się z węzłami. W kontrolowanych warunkach framework działa tylko z głównym węzłem, utrzymując z nim stałe połączenie, ale przy błędach może automatycznie przełączać się na zapasowe. Jeśli ustalisz tablicę zapasowych węzłów, możesz wywołać funkcję w celu określenia najlepszego węzła jako głównego na podstawie maksymalnej wartości aktualnej wysokości i czasu odpowiedzi. Teraz dodaj do tego wewnętrzną pamięć podręczną zapytań i poczuj troskę zarówno o użytkowników, jak i właścicieli węzłów.
Jednym z ostatnich zaawansowanych mechanizmów jest funkcja . Pojawiła się w odpowiedzi na konieczność reagowania na przychodzące transakcje w czasie rzeczywistym. Ta funkcja całkowicie rozwiązuje wszystkie kwestie związane z przetwarzaniem transakcji w blockchainie. Żadnych więcej problemów, wystarczy ustawić swoją funkcję callback z pożądanymi opcjami i czekać na nowe transakcje, które uruchomią twoje procesy. Na przykład, jeszcze jeden mój projekt jest całkowicie zbudowany wokół tej funkcji, możesz swobodnie badać, jak działa bezpośrednio .
Podoba mi się open source, to jedno z największych osiągnięć ludzkości. Ponieważ jestem jedynym deweloperem i osiągnąłem stan, w którym wszystkie moje potrzeby są zaspokojone, zapraszam cię do korzystania i wnoszenia wkładu w .
Źródło: habr.com
