Autor: Brett McLain, dyrektor ds. inżynierii – Crypto, Fiat, Staking
Jeśli interesują Cię kryptowaluty, płatności lub obstawianie i chcesz pomóc w budowaniu systemu finansowego przyszłości, zespół inżynierii finansowania @ Kraken zatrudnia!
Kiedy Kraken wystartował dziesięć lat temu, obsługiwane były tylko trzy kryptowaluty: BTC, LTC i XRP.
Obecnie Kraken obsługuje 82 aktywa na 33 blockchainach i usługi stakowania dla 8 kryptowalut.
Aby ułatwić dokonywanie milionów wpłat, wypłat i transakcji w firmie Kraken rocznie, zespół inżynierii kryptograficznej obsługuje setki usług zapewniających płynny przepływ środków do iz giełdy. Oprogramowanie blockchain, które stanowi podstawę tych usług, jest często aktualizowane; w przypadku niektórych bardziej aktywnych blockchainów hard i soft forki mogą mieć charakter miesięczny, podczas gdy inne, takie jak Ethereum, odbywają się dwa razy w roku. Ogólnie rzecz biorąc, co tydzień jest co najmniej kilka aktualizacji oprogramowania naszej infrastruktury blockchain.
Wyzwanie polegające na wspieraniu i aktualizowaniu tak dużej liczby różnych usług przy jednoczesnym budowaniu nowych może być trudne.
W ciągu ostatnich 12 miesięcy nasz zespół dodał wsparcie dla:
- 60 nowych kryptowalut:
- 39 tokenów ERC20
- Polkadot (przy starcie mainnetu)
- Kusama
- Filecoin (przy starcie mainnetu)
- Flow (przy uruchomieniu sieci głównej)
- Kava
- Energy Web Token (w momencie uruchomienia mainnetu)
- USDT (TRC20)
- 10 x Crowdloans Parachain
- Solana
- 1 x token SPL (surowica)
- Mina
- 8 nowych aktywów do obstawiania:
- Polkadot (przy starcie mainnetu)
- Kusama
- Ethereum 2.0 (w momencie uruchomienia mainnetu)
- Flow (przy uruchomieniu sieci głównej)
- Cardano
- kosmos
- Kava
- Solana
Osiągnięcia te zostały osiągnięte wraz z utrzymaniem naszych istniejących integracji. Inżynierowie zespołu ds. kryptowalut są odpowiedzialni nie tylko za oprogramowanie bramki napisane we własnym zakresie, ale także za utrzymanie i wdrażanie naszej infrastruktury blockchain, na której opierają się nasze bramki. Kadencja rozwoju łańcucha bloków w tych projektach może być błyskawiczna, a przełomowe zmiany i nowe funkcje pojawiają się często, a czasem bez ostrzeżenia.
Jak więc Krakenowi udaje się co roku wypuszczać dziesiątki nowych produktów, jednocześnie nadążając za szybkim tempem rozwoju blockchain?
Testy od końca do końca (E2E)!
Dlaczego cenimy testy E2E i unikamy kpin
Od samego początku w Kraken kładziono nacisk na to, że testy E2E są najcenniejszym rodzajem testów, jakie inżynier może zbudować. Testy jednostkowe mają swoje miejsce, ale wielu programistów niedoświadczonych w złożonych integracjach ma tendencję do pisania testów jednostkowych dla każdego fragmentu kodu, który budują, w przekonaniu, że poprawiają ogólną jakość tworzonego oprogramowania.
Ta ścieżka, choć pełna dobrych intencji, często może prowadzić do wielu cierpień. Nadmierne poleganie na testach jednostkowych ma tendencję do cementowania Twojej architektury; to jak wylanie warstwy żywicy epoksydowej na całą bazę kodu. Ściśle łączysz kod z jego testami, dzięki czemu kod jest bardziej sztywny, nieelastyczny i odporny na refaktoryzację. Jeśli musisz dokonać zmiany, prawdopodobnie będziesz musiał wprowadzić znaczące zmiany w testach, a w niektórych przypadkach całkowicie je odrzucić. Kod refaktoryzacji jest kluczową umiejętnością, którą zespół inżynierów musi mieć w swoim zestawie narzędzi, a wszystko, co dodaje tarcie do łatwości refaktoryzacji, powinno być dokładnie ocenione przed wprowadzeniem. Podczas refaktoryzacji kodu dobrze zaprojektowany test E2E często nie wymaga wielu zmian i zapewnia elastyczność w dostosowywaniu wewnętrznych wnętrzności aplikacji, zapewniając jednocześnie jej działanie zgodnie z oczekiwaniami.
Czy to oznacza, że nie powinieneś pisać testów jednostkowych? Zupełnie nie! Istnieje wiele scenariuszy, w których testy jednostkowe są idealnym rozwiązaniem, jednak stwierdziliśmy, że w przypadku złożonych integracji lepiej sprawdzają się testy E2E. Ogólnie testy jednostkowe są najskuteczniejsze, gdy są napisane dla kodu, który spełnia następujące kryteria:
- Złożona algorytmicznie z wieloma przypadkami brzegowymi.
- Ścisły zakres z dobrze zdefiniowanymi wymaganiami.
- Wykonuje pojedynczą jednostkę pracy.
- Bezpaństwowiec.
Te małe, ściśle ograniczone fragmenty złożonego kodu są często blokami konstrukcyjnymi większej aplikacji i nawet gdyby wystąpiła refaktoryzacja, funkcje te prawdopodobnie nie ulegną zmianie. W naszym świecie byłyby to takie rzeczy jak pozyskiwanie adresu, walidacja adresu, podpisywanie transakcji itp.
Kluczowym wnioskiem jest to, że jako mały zespół inżynierów nie ma mowy, abyśmy kiedykolwiek mogli utrzymać zakres usług, które obecnie obsługujemy, i twórz nowe produkty bez kompleksowych testów. Testy jednostkowe powinny być traktowane jako stawki stołowe, ale w odosobnieniu nie byłyby wystarczające, abyśmy mogli nadążyć w tej rozwijającej się przestrzeni. Zamiast tego zdecydowaliśmy się zainwestować w solidne zestawy testów integracyjnych i E2E, które potwierdzają, że nasze usługi będą działać z powodzeniem w ich najczęstszych trybach działania.
Wyzwania testów E2E
Chociaż testy E2E mogą być potężne, nie są panaceum. Podczas integracji z usługami stron trzecich tego rodzaju testy często tracą wiele ze swojej wartości, ponieważ niektóre punkty końcowe lub interfejsy muszą być fałszowane, aby w pełni przetestować przepływ określonej funkcji lub wywołania. Mocki są tak dobre, jak twoje zrozumienie usługi, z której się wyśmiewasz, w wyniku czego mogą być podatne na błędy, gdy aktualizacje są częste i mają duży charakter. Utrzymywanie własnego kodu, a także kpin jest pogwałceniem zasady DRY (nie powtarzaj się), terminu ukutego przez Davida Thomasa i Andrew Hunta w „The Pragmatic Programmer”. W swojej książce stwierdzają, że „Każda wiedza musi mieć jedną, jednoznaczną, autorytatywną reprezentację w systemie”. Utworzenie fałszywej wersji dowolnej usługi oznacza, że istnieją teraz dwie potencjalnie rozbieżne kopie tej usługi: twoja fałszywa wersja i aktualna wersja. Błędy w tłumaczeniu zachowania wykpiwanej zależności są teraz kolejnym problemem, który należy uwzględnić.
Retesty na ratunek
Na szczęście dla nas większość łańcuchów bloków obsługuje możliwość uruchamiania tymczasowych prywatnych sieci, które można uruchomić w ramach naszego procesu ciągłej integracji (CI) / ciągłego wdrażania (CD). Najpopularniejszym tego przykładem jest tryb testu regresji (regtest) Bitcoina. Kiedy uruchamiasz bitcoind z opcją `-regtest`, tworzy on nowe lokalne środowisko blockchain, nad którym masz pełną kontrolę. Kluczową cechą trybu regtest jest to, że możesz dowolnie wydobywać dowolną liczbę bloków, co pozwala testom E2E na ukończenie podróży w obie strony dla wpłat i wypłat wszystkich typów i odmian, symulując setki scenariuszy w ciągu kilku sekund. Przypadki brzegowe i inne unikalne scenariusze można łatwo zasymulować w trybie regtest, takim jak transakcje multisig, re-orgs, zamiana przez opłatę (RBF), dziecko płaci za rodzica (CPFP) i wiele więcej! Testy te nie tylko zapewniają, że nasz kod nie zawiera błędów, ale także weryfikują stan końcowy łańcucha bloków i naszych rejestrów, aby upewnić się, że wszystko działa zgodnie z oczekiwaniami.
W ramach procesu dodania obsługi nowej kryptowaluty na Kraken zespół finansujący opracowuje ramy regtestów dla wszystkich nowych aukcji. Ten kod jest podstawą naszego reżimu konserwacji: za każdym razem, gdy pojawia się nowa wersja, jest to po prostu kwestia aktualizacji wersji węzła łańcucha bloków i ponownego uruchomienia naszego potoku CI, aby upewnić się, że nie nastąpią żadne istotne zmiany. Uważne czytanie informacji o wydaniu i współpraca ze społecznością są nadal bardzo potrzebne, ale te testy dają nam pewność, że wydamy nowe wersje, których inaczej byśmy nie mieli.
Kreatywne rozwiązania
Niestety dla nas nie wszystkie łańcuchy bloków są tak przetestowane w walce jak Bitcoin. Nowe blockchainy często wprowadzają nowatorskie koncepcje, a aby zaoferować naszym klientom dostęp do najbardziej ekscytujących nowych technologii, Kraken woli uruchomić wsparcie dla nowych blockchainów jak najbliżej startu sieci głównej. Aby bezpiecznie wesprzeć nowy zasób w dniu premiery lub w jej pobliżu, Kraken czasami musi opracować złożone wiązki testowe, aby zyskać zaufanie do integracji i upewnić się, że fundusze klientów nie są zagrożone.
Doskonałą ilustracją tego jest uruchomienie przez Krakena wsparcia dla Ethereum 2.0 zaledwie 3 dni po uruchomieniu głównej sieci 1 grudnia 2020 r. Chociaż tysiące osób i firm na całym świecie pomogły przetestować Ethereum 2.0 na wielu sieciach testowych, takich jak Medalla i Spadina, nadal dzięki tej integracji postanowiliśmy przenieść koncepcję regtestów na zupełnie inny poziom. Wcześnie wiedzieliśmy, że Ethereum 2.0 będzie znaczącym postępem i to przekonanie okazało się prawdziwe, ponieważ do tej pory w łańcuchu beaconów postawiono miliony ETH, w tym ponad 800,000 XNUMX ETH, które zostały postawione przez klientów Kraken.
Poniżej możesz zobaczyć diagram zestawu usług, które nasz potok ciągłej integracji (CI) uruchamia i wyłącza za każdym razem, gdy programista zatwierdza kod do jednego z naszych repozytoriów kodu ETH2.
Na wysokim poziomie przepływ testowy to:
- Rozpocznij węzły podstawowe i alternatywne ETH1 (każdy na zmianę wydobywa konsensus) z genezą zawierającą początkową ilość ETH do testowania.
- Uruchom węzeł łańcucha sygnałów nawigacyjnych ETH2 jako łańcuch prywatny, używając specjalnego trybu minimalnej konfiguracji, w którym do aktywacji genezy potrzeba tylko 16 walidatorów.
- Wdróż inteligentny kontrakt ETH2 w blockchainie ETH1.
- Wpłać ETH do umowy depozytowej ETH2, gdzie środki są spalane, a walidatory są tworzone na zewnętrznym węźle walidatora ETH2. Są to walidatory, które po prostu obsługują sieć ETH2 i są traktowane tak, jakby były zewnętrzne w stosunku do jakichkolwiek walidatorów Kraken.
- Uruchom eksploratory bloków ETH1 i ETH2.
- Uruchom bazę danych.
- Uruchom bramkę i sygnatariusze.
- Wstaw żądania klienta, aby postawić ETH -> ETH2.
- Brama odbiera żądania klientów i wysyła ETH do umowy depozytowej w łańcuchu blokowym ETH1 i tworzy odpowiednią liczbę walidatorów w wewnętrznym węźle walidatora ETH2. Walidatory są podzielone na wewnętrzne i zewnętrzne zestawy walidatorów, abyśmy mogli przetestować, co się stanie, gdy nasze walidatory przestaną działać (aby przetestować cięcie, kary, utracone nagrody) i zobaczyć, co się stanie, gdy reszta sieci przestanie działać lub wyłączy się, ale nasze walidatory pozostań w górze.
- Monitoruj, aż walidatory będą aktywne w łańcuchu ETH2, zacznij śledzić nagrody, wypłaty, testuj cięcia i kary, wykrywaj utracone nagrody i wypłacaj nagrody klientom.
- Uruchom nasz oddzielny proces uzgadniania finansowego dla wszystkich transakcji, aby upewnić się, że wszystko we wszystkich naszych księgach jest zgodne.
Powyższe jest tylko ogólnym podsumowaniem tego, co dzieje się w naszym frameworku testowym; istnieje wiele innych testów, sprawdzeń i walidacji. Jeśli programista musi coś debugować lub sprawdzić stan którejkolwiek sieci, może skonsultować się z eksploratorami bloków, aby na pierwszy rzut oka zobaczyć, co dokładnie się wydarzyło. Zwykle nie włączamy eksploratorów bloków do naszego potoku CI, ale biorąc pod uwagę złożoność integracji, pomocna była w fazie rozwoju wizualizacja tego, co dzieje się w łańcuchu.
Można by pomyśleć, że to powoduje ogromne opóźnienie w naszym potoku CI, ale na szczęście tak nie jest. Obecnie uruchomienie pełnego potoku CI dla naszego repozytorium Ethereum 2.0 zajmuje tylko 14 minut. Obejmuje to audyt/budowanie wszystkich zależności, uruchamianie wszystkich usług, wdrażanie różnych inteligentnych kontraktów w łańcuchu bloków, wydobywanie bloków, tworzenie walidatorów, a następnie przeprowadzanie wszystkich ponad 100 scenariuszy testowych.
Final Thoughts
Opracowanie kompleksowych testów E2E dla każdej integracji blockchain w Kraken pochłania znaczną ilość zasobów inżynieryjnych. Jest to cena, którą chętnie płacimy, ponieważ naszą największą troską jest bezpieczeństwo środków naszych klientów i zapewnienie im wysokiej jakości doświadczenia na naszej platformie. Czy nasz zespół mógłby wydać więcej produktów, gdybyśmy spędzili mniej czasu na testach podczas tworzenia nowych integracji? Bez pytania. Byłoby to jednak sprzeczne z etosem i wartościami nie tylko zespołu inżynierów, ale całej firmy. Testy te zapewniają, że możemy bezpiecznie aktualizować oprogramowanie do nowych wersji oprogramowania blockchain, zwiększać zaufanie podczas hard/soft forków i zmniejszać stres programistów podczas wdrażania zmian.
Dlaczego inżynierowie Krakena są jednymi z najbardziej szanowanych w branży? Ta wiadomość Steve Hunt, wiceprezes ds. inżynierii w Kraken, przedstawia nasze wartości i zaangażowanie w pomoc innym inżynierom blockchain.
Źródło: https://blog.kraken.com/post/10227/testing-crypto-payments-staking-at-kraken/
- &
- 000
- 11
- 2020
- dostęp
- Konto
- aktywny
- Wszystkie kategorie
- Wszystkie operacje
- Pozwalać
- Zastosowanie
- architektura
- na około
- kapitał
- Aktywa
- Bitwa
- łańcuch nawigacyjny
- Bitcoin
- blockchain
- BTC
- budować
- Budowanie
- wezwanie
- Etui
- wyzwanie
- zmiana
- Wykrywanie urządzeń szpiegujących
- dziecko
- kod
- współpraca
- przyjście
- wspólny
- społeczność
- Firmy
- sukcesy firma
- pewność siebie
- Zgoda
- ciągły
- umowa
- umowy
- Tworzenie
- Crypto
- cryptocurrencies
- kryptowaluta
- Baza danych
- sprawa
- opóźnienie
- Wykrywanie
- rozwijać
- Deweloper
- deweloperzy
- oprogramowania
- Dyrektor
- Wcześnie
- krawędź
- Efektywne
- inżynier
- Inżynieria
- Inżynierowie
- Środowisko
- ERC20
- ETH.
- ethereum
- Ethereum 2.0
- Etos
- wydarzenia
- wymiana
- FAST
- Cecha
- Korzyści
- Fiat
- budżetowy
- Elastyczność
- pływ
- Framework
- pełny
- funkcjonować
- Finansowanie
- fundusze
- przyszłość
- Ogólne
- Geneza
- dobry
- wspaniały
- tutaj
- Wysoki
- dom
- W jaki sposób
- HTTPS
- Setki
- Włącznie z
- Zwiększać
- przemysł
- Infrastruktura
- integracja
- integracje
- izolacja
- IT
- konserwacja
- Klawisz
- wiedza
- Kraken
- duży
- uruchomić
- prowadzić
- poziom
- ofert
- miejscowy
- LTC
- Dokonywanie
- Górnictwo
- miesięcy
- Najbardziej popularne posty
- Multisig
- sieć
- Nowe funkcje
- Nowe produkty
- węzły
- oferta
- operacyjny
- Option
- zamówienie
- Inne
- Ból
- Zapłacić
- płatności
- Platforma
- Popularny
- Cena
- prywatny
- Produkty
- projektowanie
- jakość
- Czytający
- zmniejszyć
- poleganie
- wymagania
- Zasoby
- REST
- Nagrody
- Ryzyko
- run
- bieganie
- Bezpieczeństwo
- Ekran
- Usługi
- zestaw
- mały
- mądry
- inteligentna umowa
- Inteligentne kontrakty
- So
- Tworzenie
- Typ przestrzeni
- stawka
- Staking
- początek
- Stan
- stres
- wsparcie
- Utrzymany
- podpory
- system
- Technologies
- tymczasowy
- test
- Testowanie
- Testy
- czas
- żeton
- Top
- Śledzenie
- transakcja
- transakcje
- Aktualizacja
- Nowości
- us
- wartość
- Tom
- sieć
- tydzień
- w ciągu
- Praca
- świat
- X
- Xrp
- rok