
Oggi le soluzioni per il testing e il benchmarking delle blockchain sono specifiche per una determinata blockchain o le sue fork. Tuttavia, esistono anche alcune soluzioni più generali che si differenziano per funzionalità: alcune di esse sono progetti open source, altre sono fornite come SaaS, ma la maggior parte sono soluzioni interne sviluppate dal team della blockchain. Tutte affrontano comunque compiti simili. In questo articolo ho cercato di esaminare brevemente alcuni prodotti specifici per il testing delle blockchain.
Il funzionamento di una rete blockchain assomiglia a quello di un database distribuito, quindi è possibile utilizzare strumenti e metodi analoghi per il testing. Per comprendere meglio come vengono testati i database distribuiti, ti invito a dare un'occhiata a una buona selezione di risorse e articoli. Ad esempio, la latenza è analizzata approfonditamente in questo , e per capire come vengono cercati i bug negli algoritmi di replica, consiglio di consultare questo .
Descriverò alcune soluzioni popolari per il testing e il benchmarking delle blockchain. Sarei felice se nei commenti poteste segnalare altri prodotti software utili per affrontare le stesse sfide.

Inizierò con uno strumento, anche se non creato specificamente per le blockchain, che consente di testarne il funzionamento a condizione che esista già una rete avviata su cui è possibile sperimentare. Un fattore chiave di affidabilità di un sistema distribuito è la capacità di continuare a funzionare in caso di problemi con server e rete. Questi possono includere lag di rete, esaurimento dello spazio su disco, indisponibilità di servizi esterni (DNS), guasti hardware e centinaia di altre cause. Per valutare la resilienza di qualsiasi sistema che funziona in modo coordinato su un gran numero di macchine, si può utilizzare . Questo strumento adotta un approccio estremamente efficace chiamato Chaos Engineering.
Con il suo agente di rete, Gremlin crea su un numero necessario di macchine vari tipi di problemi: lag di rete, sovraccarico di qualsiasi risorsa (CPU, disco, memoria, rete), disabilita protocolli specifici, ecc. Per le blockchain, Gremlin può essere utilizzato sui server di una rete di test, emulando problemi reali e osservando il comportamento della rete. In questo modo, sviluppatori e amministratori in un ambiente controllato possono osservare cosa accadrebbe al sistema in caso di guasti o aggiornamenti del codice. È necessario configurare e distribuire in anticipo la rete e impostare la raccolta delle metriche necessarie.
Gremlin è uno strumento utile per architetti, DevOps e professionisti della sicurezza ed è una soluzione universale per testare qualsiasi sistema distribuito già operativo, comprese le blockchain.

Hyperledger Caliper è una soluzione molto più specializzata . Attualmente, Caliper supporta diversi blockchain, tra cui membri della famiglia Hyperledger (Fabric, Sawtooth, Iroha, Burrow, Besu), oltre a Ethereum e la rete FISCO BCOS.
Con Caliper puoi definire la topologia della rete blockchain e i contratti da testare, così come descrivere la configurazione dei nodi. I nodi blockchain vengono avviati in contenitori Docker su una singola macchina. Puoi quindi scegliere le necessarie e ricevere un file con il report dei risultati del test dopo l'esecuzione. Puoi trovare l'elenco completo delle metriche di Caliper e il suo approccio al benchmarking qui , è un ottimo articolo se sei interessato al benchmarking delle blockchain. Inoltre, puoi configurare la raccolta delle metriche su un Prometheus/Grafana separato.
Hyperledger Caliper è uno strumento orientato agli sviluppatori e agli architetti di sistema, poiché garantisce ripetibilità dei test e automazione del testing e del benchmarking. È utilizzato nello sviluppo del nucleo delle blockchain: algoritmi di consenso, macchina virtuale per l'elaborazione degli smart contract, livello peer-to-peer e altri meccanismi di sistema.

è uno strumento che è emerso durante lo sviluppo degli algoritmi di consenso e di finalità per reti basate su EOS e nel testing dei parachain basati su Parity Substrate (Polkadot). Per funzionalità, è simile a Hyperledger Caliper, in quanto consente di raccogliere metriche importanti dai nodi di qualsiasi sistema distribuito e dalle macchine client su cui vengono eseguiti gli script di test.
MixBytes Tank utilizza diversi servizi cloud (Digital Ocean, Google Cloud Engine e altri), dove è in grado di avviare numerosi nodi, eseguire le procedure di configurazione preliminare, avviare in parallelo più benchmark su macchine diverse, raccogliere le metriche necessarie e spegnere automaticamente la rete.
MixBytes Tank consente di ottimizzare i costi per i server cloud, chiudendo automaticamente le risorse non necessarie dopo un test. Un'altra caratteristica distintiva è l'uso del pacchetto Molecule, che permette agli sviluppatori di testare il deployment necessario della blockchain in locale.
MixBytes Tank permette di identificare precocemente i colli di bottiglia e gli errori negli algoritmi che si manifestano in reti reali con un gran numero di server e clienti distribuiti geograficamente. Il Tank ti aiuterà a capire cosa accade sui nodi se i clienti inviano transazioni con un tps specifico in condizioni altamente ripetibili e con un numero reale di nodi distribuiti in diversi continenti, se necessario.

Whiteblock Genesis è una piattaforma per il testing delle blockchain basata su Ethereum. Questo strumento offre una funzionalità abbastanza ampia: consente di avviare una rete, creare il numero desiderato di account, avviare il numero necessario di client, configurare la topologia della rete, specificare parametri come bandwidth e packetloss e avviare il test.
Whiteblock Genesis fornisce potenza di calcolo dedicata per eseguire test. Gli sviluppatori devono semplicemente specificare i parametri dei test, avviarli utilizzando un'API pronta all'uso e ottenere i risultati tramite un dashboard intuitivo.
Whiteblock Genesis consente di configurare test molto dettagliati che la piattaforma eseguirà automaticamente per ogni cambiamento significativo nel codice. Questo aiuterà a catturare errori nelle prime fasi e a valutare immediatamente l'impatto delle modifiche su parametri cruciali della rete, come la velocità delle transazioni e le risorse utilizzate dai nodi.
Madt
Un altro interessante giovane prodotto per il testing di sistemi distribuiti è . È scritto in Python e consente di creare la topologia della rete necessaria e il numero richiesto di server e client tramite uno script di configurazione semplice (). Dopo di che, il servizio distribuisce la rete in diversi contenitori docker e avvia un'interfaccia web, in cui è possibile osservare i messaggi dai server e clienti della rete. Madt può essere utilizzato per testare blockchain: nel repository del progetto è presente un test della rete p2p basato sul protocollo Kademlia, in cui i ritardi nella consegna dei dati ai nodi aumentano progressivamente e si verifica lo stato di questi dati.
Madt è apparso recentemente, ma considerando l'architettura molto flessibile, può evolversi in un prodotto funzionale.
Altre soluzioni
Praticamente qualsiasi test della parte sistemica delle blockchain richiede l'esecuzione di scenari preliminari, la preparazione di account e condizioni per il test (questo può includere testing degli errori di consenso, che possono generare numerosi fork delle catene, simulazioni di scenari di hard fork, modifica dei parametri di sistema, ecc.). Tutte queste operazioni vengono eseguite in modo diverso a seconda delle blockchain, quindi le squadre trovano più semplice adattare progressivamente il testing e il benchmarking del prodotto ai propri sistemi CI/CD interni e utilizzare le proprie risorse, che si complicano gradualmente con lo sviluppo della funzionalità della blockchain.
Tuttavia, l'uso di soluzioni pronte può ridurre notevolmente il tempo di testing per queste squadre, quindi ritengo che questo software si svilupperà attivamente nei prossimi anni.
Conclusione
Concludendo questa breve panoramica, elencherò alcune caratteristiche importanti degli strumenti per il testing delle blockchain:
- La possibilità di distribuire automaticamente una rete blockchain in condizioni ripetibili. Questo fattore è cruciale nello sviluppo delle parti sistemiche delle blockchain: algoritmi di consenso, finalità, smart contract di sistema.
- Costo di possesso del sistema, risorse consumate e facilità di utilizzo continuo. Questo fattore consente al progetto di eseguire test di alta qualità a costi contenuti.
- Flessibilità e semplicità di configurazione dei test. Questo fattore aumenta le possibilità di individuare problemi nel sistema: minori possibilità di trascurare qualcosa di importante.
- Personalizzazione per tipi specifici di blockchain. Sviluppare una soluzione basata su qualcosa di già esistente può migliorare notevolmente la qualità e ridurre i tempi di lavoro.
- Comodità e accessibilità dei risultati ottenuti e il loro tipo (report, metriche, grafici, log, ecc.). Questo è assolutamente necessario se si desidera monitorare la storia di sviluppo del prodotto o se è necessaria un'analisi approfondita del comportamento della rete blockchain.
Buona fortuna con i vostri test e che le vostre blockchain siano veloci e resilienti!
Fonte: habr.com
