
Dnes jsou řešení pro testování a benchmarkování blockchainů zaměřena na konkrétní blockchain nebo jeho forky. Existuje však také několik obecnějších řešení, která se liší funkcionalitou: některé z nich jsou open source projekty, jiné jsou poskytovány jako SaaS, ale většina z nich jsou interní řešení vyvinutá týmem vývoje blockchainu. Přesto všechna řešení řeší podobné úkoly. V tomto článku jsem se pokusil stručně přehledně prozkoumat několik produktů zaměřených na testování blockchainů.
Práce blockchainové sítě připomíná fungování distribuované databáze, a proto lze pro testování aplikovat podobné nástroje a metody. Abyste lépe rozuměli tomu, jak se testují distribuované databáze, podívejte se na dobrý výběr zdrojů a článků . Například latence je podrobně rozebrána v tomto , a abyste pochopili, jak se hledají chyby v algoritmech replikace, doporučuji se seznámit s tímto .
Popíšu několik populárních řešení pro testování a benchmarkování blockchainů. Budu rád, pokud v komentářích uvedete další užitečné softwarové produkty pro řešení stejných úkolů.

Začnu s nástrojem, který sice nebyl navržen konkrétně pro blockchainy, ale umožňuje efektivně testovat jejich funkci za podmínky, že existuje již spuštěná síť, na které lze experimentovat. Klíčovým faktorem spolehlivosti distribuovaného systému je schopnost pokračovat v činnosti v případě problémů se servery a sítí. To mohou být síťové zpoždění, přetečení disku, nedostupnost externích služeb (DNS), hardwarové poruchy a stovky dalších důvodů. K ověřování odolnosti jakýchkoli systémů, které pracují koordinovaně na velkém počtu strojů, lze používat . Používá se zde velmi efektivní přístup zvaný Chaos Engineering.
S pomocí vlastního síťového agenta Gremlin vytváří na požadovaném počtu strojů různé typy problémů: síťové lagy, přetížení jakéhokoliv zdroje (CPU, disk, paměť, síť), zakazuje jednotlivé protokoly atd. Pro blockchainy může být Gremlin použit na serverech testovací sítě, emulující skutečné problémy a pozorující chování sítě. S jeho pomocí mohou vývojáři a administrátoři v kontrolovaném prostředí sledovat, co se stane v systému v případě selhání nebo při aktualizaci kódu. Síť je potřeba předem nakonfigurovat a nasadit, a také nastavit sběr potřebných metrik.
Gremlin je užitečný nástroj pro architekty, devopsy a bezpečnostní specialisty a univerzální řešení pro testování jakýchkoliv hotových a provozovaných distribuovaných systémů, včetně blockchainů.

Hyperledger Caliper je mnohem specializovanější řešení . V současnosti Caliper podporuje několik blockchainů z rodiny Hyperledger (Fabric, Sawtooth, Iroha, Burrow, Besu), stejně jako Ethereum a síť FISCO BCOS.
S pomocí Caliperu můžete nastavit topologii blockchainové sítě a smlouvy pro testování, stejně jako popsat konfiguraci uzlu. Uzly blockchainu jsou nasazeny v docker kontejnerech na jednom stroji. Dále můžete vybrat požadované a po spuštění získat soubor s výsledky testu. S úplným seznamem metrik Caliper a přístupem k benchmarkingu se můžete seznámit zde , to je skvělý článek, pokud vás zajímají témata benchmarkingu blockchainů. Také je možné nastavit sběr metrik do samostatného Prometheus/Grafana.
Hyperledger Caliper je nástroj zaměřený na vývojáře a systémové architekty, protože zajišťuje opakovatelnost testů a automatizaci testování a benchmarkingu. Používá se při vývoji jádra blockchainů: algoritmů konsensu, virtuální stroj pro zpracování chytrých smluv, peer-to-peer vrstvy a dalších systémových mechanismů.

— nástroj, který vznikl během vývoje konsensuálních algoritmů a finalizace pro sítě založené na EOS a testování parachainů na základě Parity Substrate (Polkadot). Funkčně je blízký Hyperledger Caliper, protože umožňuje sbírat důležité metriky z uzlů jakéhokoliv distribuovaného systému a klientských strojů, na kterých běží testovací skripty.
MixBytes Tank využívá několik cloudových služeb (Digital Ocean, Google Cloud Engine a další), ve kterých dokáže spustit mnoho uzlů, provést předběžné konfigurační postupy, paralelně spustit několik benchmarků na různých strojích, shromáždit potřebné metriky a automaticky uzavřít síť.
MixBytes Tank umožňuje ekonomicky hospodařit s prostředky na cloudové servery tím, že automaticky uzavírá nepotřebné zdroje po provedení testu. Další výraznou vlastností je použití balíčku Molecule, který umožňuje vývojáři testovat rozbalení požadovaného blockchainu lokálně.
MixBytes Tank umožňuje v raných fázích odhalit úzká místa a chyby v algoritmech, které vznikají v reálných sítích s vysokým počtem geograficky rozložených serverů a klientů. Tank vám pomůže pochopit, co se stane na uzlech, pokud klienti budou posílat transakce se zadaným tps za vysoce opakovaných podmínek a s reálným počtem uzlů rozložených na různých kontinentech, pokud to bude potřeba.

Whiteblock Genesis je platforma pro testování blockchainů založených na Ethereum. Tento nástroj má poměrně široké funkce: umožňuje spustit síť, vytvořit v ní požadovaný počet účtů, zprovoznit potřebný počet klientů, nakonfigurovat topologii sítě, zadat parametry šířky pásma, ztráty paketů a spustit test.
Whiteblock Genesis poskytuje vlastní zdroje pro provádění testů. Vývojáři musí pouze zadat parametry testů, spustit je pomocí hotového API a získat výsledky pomocí přehledného dashboardu.
Whiteblock Genesis umožňuje nakonfigurovat dostatečně podrobný test, který platforma automaticky provede při každé významné změně kódu. To umožní v raných fázích odchytit chyby a okamžitě ohodnotit vliv změn na důležité parametry sítě, jako je rychlost transakcí a zdroje spotřebované uzly.
Madt
Další zajímavý mladý produkt pro testování distribuovaných systémů — . Je napsán v Pythonu a umožňuje vytvořit potřebnou topologii sítě a požadovaný počet serverů a klientů pomocí jednoduchého konfiguračního skriptu (). Poté tento servis nasazuje síť v několika docker kontejnerech a spouští webové rozhraní, ve kterém lze sledovat zprávy od serverů a klientů sítě. Madt lze využít pro testování blockchainů — v repozitáři projektu je test p2p sítě založený na protokolu Kademlia, ve které se postupně zvyšují latence při doručování dat na uzly a kontroluje se stav těchto dat.
Madt se objevil nedávno, ale vzhledem k velmi flexibilní architektuře se může vyvinout v funkční produkt.
Další řešení
Prakticky jakékoli testování systémové části blockchainů vyžaduje spuštění předběžných scénářů, přípravu účtů a podmínek pro test (to může zahrnovat testování chyb konsensu, které mohou vyvolat četné forky řetězců, zpracování scénářů hard forku, změny systémových parametrů atd.). Všechny tyto manipulace v různých blockchainech probíhají různě, proto jsou pro týmy snazší přizpůsobit testování a benchmarking produktu k internímu CI/CD a využívat vlastní produkce, které se postupně zkomplikuje s rozvojem funkčnosti blockchainu.
Nicméně využití hotových řešení může týmům výrazně zkrátit dobu testování, proto si myslím, že tento software se bude v následujících letech aktivně vyvíjet.
Závěr
Na závěr tohoto malého přehledu uvedu několik důležitých charakteristik nástrojů pro testování blockchainů:
- Možnost automatického nasazení blockchainové sítě v opakovatelných podmínkách. Tento faktor je důležitý při vývoji systémových částí blockchainů: algoritmů konsensu, finálnosti, systémových smart kontraktů.
- Cena vlastnictví systému, spotřebované zdroje a pohodlnost pro pravidelné používání. Tento faktor zajišťuje projektu špičkové testy za nízké náklady.
- Flexibilita a jednoduchost konfigurace testů. Tento faktor zvyšuje šance na odhalení problémů systému — menší pravděpodobnost, že něco důležitého přehlédnete.
- Personalizace pro konkrétní typy blockchainů. Vývoj řešení založeného na již existujících může výrazně zlepšit kvalitu a zkrátit časové nároky.
- Pohodlí a dostupnost získaných výsledků a jejich typ (reporty, metriky, grafy, logy atd.). To je zcela nezbytné, pokud chcete sledovat historii vývoje produktu, nebo pokud potřebujete hlubokou analýzu chování blockchainové sítě.
Hodně štěstí s testováním a ať jsou vaše blockchainy rychlé a spolehlivé!
Zdroj: habr.com
