
В днешно време решенията за тестване и бенчмаркинг на блокчейн технологии са предназначени основно за конкретен блокчейн или неговите форкове. Въпреки това, съществуват и няколко по-общи решения с различен функционал: част от тях са опенсорс проекти, други се предлагат като SaaS, но по-голямата част са вътрешни решения, разработвани от екипа на блокчейн. Въпреки това, всички те решават подобни задачи. В тази статия ще разгледам накратко няколко продукта, предназначени за тестване на блокчейни.
Работата на блокчейн мрежата наподобява работата на разпределена база данни, затова за тестване могат да се прилагат аналогични средства и методи. За да разберете по-добре как тестват разпределените бази данни, разгледайте добрата подборка от ресурси и статии. Например, латентността е разгледана подробно в тази статия , а за да разберете как търсят бъгове в алгоритмите за репликация, ви препоръчвам да се запознаете с тази .
Ще опиша няколко популярни решения за тестване и бенчмаркинг на блокчейни. Ще се радвам, ако в коментарите споделите и други полезни софтуерни продукти за решаване на същите задачи.

Ще започна с инструмент, който не е създаден специално за блокчейни, но позволява ефективно тестване на тяхната работа, при условие че вече има стартирана мрежа, върху която може да се експериментира. Най-важният фактор за надеждността на разпределената система е способността да продължи работа в случай на проблеми със сървърите и мрежата. Това могат да бъдат мрежови закъснения, пренапълване на диска, недостъпност на външни услуги (DNS), хардуерни повреди и много други причини. За да се проверява устойчивостта на всякакви системи, работещи координирано на голям брой машини, може да се използва . В него се използва изключително ефективен подход, наречен Chaos Engineering.
С помощта на собствен агент за мрежа, Gremlin създава на необходимия брой машини множество различни типове проблеми: мрежови забавяния, претоварване на всякакви ресурси (CPU, диск, памет, мрежа), изключване на отделни протоколи и т.н. За блокчейн, Gremlin може да се използва на сървъри на тестовата мрежа, емулирайки реални проблеми и наблюдавайки поведението на мрежата. С негова помощ разработчиците и администраторите в контролирана среда могат да наблюдават какво ще се случи в системата при сблъсъци или при обновяване на кода. В този случай мрежата трябва предварително да бъде конфигурирана и разположена, както и да се настрои събиране на необходимите метрики.
Gremlin е удобен инструмент за архитекти, девопс специалисти и специалисти по сигурността и универсално решение за тестване на всякакви готови и запуснати разпределени системи, включително блокчейни.

Hyperledger Caliper е много по-специализирано решение . В момента Caliper поддържа няколко блокчейна от семейството Hyperledger (Fabric, Sawtooth, Iroha, Burrow, Besu), както и Ethereum и мрежата FISCO BCOS.
С помощта на Caliper можете да зададете топология на блокчейн мрежата и договорите за тестване, както и да опишете конфигурацията на нодата. Нодовете на блокчейна се стартират в docker контейнери на една машина. След това можете да изберете необходимите и да получите файл с отчета за резултатите от теста след стартиране. С пълния списък с метрики на Caliper и подхода за бенчмаркинг можете да се запознаете тук , това е отлична статия, ако ви интересува темата за бенчмаркинга на блокчейни. Също така, можете да настроите събиране на метрики в отделен Prometheus/Grafana.
Hyperledger Caliper е инструмент, ориентиран към разработчици и системни архитекти, тъй като осигурява повторяемост на тестовете и автоматизация на тестването и бенчмаркинга. Той се използва при разработването на ядрото на блокчейните: алгоритми за консенсус, виртуална машина за обработка на смарт договори, peer-to-peer слой и други системни механизми.

— инструмент, който се появи в процеса на разработване на алгоритми за консенсус и финалност за мрежи на базата на EOS и тестване на парачейни на базата на Parity Substrate (Polkadot). По функционалност е близък до Hyperledger Caliper, тъй като позволява събиране на важни метрики от възлите на всяка разпределена система и клиентските машини, на които работят тестовите скриптове.
MixBytes Tank използва няколко облачни услугии (Digital Ocean, Google Cloud Engine и др.), в които може да стартира множество възли, да проведе предварителни процедури за конфигуриране, паралелно да стартира няколко benchmark-а на различни машини, да събира необходимите метрики и автоматично да погаси мрежата.
MixBytes Tank позволява икономично разходване на средства за облачни сървъри, автоматично свивайки ненужните ресурси след провеждане на теста. Още една отличителна черта е използването на пакета Molecule, позволяващ на разработчика да тества разгръщането на нужния блокчейн локално.
MixBytes Tank позволява на ранен етап да идентифицира тесните места и грешките в алгоритмите, които възникват в реалните мрежи с голямо количество географски разпределени сървъри и клиенти. Танкът ще ви помогне да разберете какво ще се случи на възлите, ако клиентите изпращат транзакции с зададен tps при високо повтарящи се условия и с реално количество възли, разположени на различни континенти, ако е необходимо.

Whiteblock Genesis е платформа за тестване на блокчейни на база Ethereum. Този инструмент разполага с достатъчно широк функционал: той позволява стартиране на мрежа, създаване на нужното количество акаунти, повдигане на необходимия брой клиенти, конфигуриране на топологията на мрежата, задаване на параметри bandwidth, packetloss и стартиране на тест.
Whiteblock Genesis предоставя собствена мощност за провеждане на тестове. На разработчиците им е достатъчно да зададат параметрите на тестовете, да ги стартират чрез готов API и да получат резултатите, използвайки удобна табло.
Whiteblock Genesis позволява конфигуриране на достатъчно подробен тест, който платформата автоматично ще провежда при всяко значително изменение на кода. Това ще позволи на ранен етап да бъдат уловени грешките и веднага да се оцени влиянието на промените върху важни параметри на мрежата, като скоростта на извършване на транзакции и ресурсите, консумирани от възлите.
Madt
Още един интересен млад продукт за тестване на разпределени системи — . Той е написан на Python и позволява да създадете необходимата топология на мрежата и нужното количество сървъри и клиенти с помощта на лесен конфигурационен скрипт (). След това услугата разгръща мрежата в няколко docker контейнера и стартира уеб интерфейс, в който можете да наблюдавате съобщения от сървърите и клиентите на мрежата. Madt може да се използва за тестване на блокчейни — в репозитория на проекта има тест на p2p мрежа на базата на протокола Kademlia, в който постепенно се увеличават забавянията при доставката на данни до нодовете и се проверява статусът на тези данни.
Madt се появи съвсем наскоро, но, предвид много гъвкавата архитектура, може да се развие в функционален продукт.
Други решения
Практически всяко тестване на системната част на блокчейни изисква стартиране на предварителни сценарии, подготовка на акаунти и условия за теста (това може да е тестване на грешки в консенсуса, които могат да доведат до множество клонения, упражнения с хардфорк сценарии, промени в системните параметри и т.н.). Всички тези манипулации в различни блокчейни се извършват по различен начин, затова на екипите е по-лесно постепенно да приспособят тестването и бенчмаркинга на продукта към вътрешния си CI/CD и да използват собствени разработки, които постепенно стават по-сложни с развитието на функционала на блокчейна.
Въпреки това, използването на готови решения може да намали значително времето за тестване на тези екипи, затова мисля, че този софтуер ще се развива активно през следващите години.
Заключение
В завършване на този малък преглед, ще изброя няколко важни характеристики на инструментите за тестване на блокчейни:
- Възможност за автоматично разгръщане на блокчейн мрежа в повторими условия. Този фактор е важен при разработването на системни части на блокчейни: алгоритми на консенсуса, финалност, системни смарт контракти.
- Цена на притежание на системата, потребявани ресурси и удобство за постоянно използване. Този фактор осигурява на проекта висококачествени тестове на ниски цени.
- Гъвкавост и простота на конфигурация на тестовете. Този фактор увеличава шансовете за откриване на проблеми в системата — по-малка вероятност да пропуснете нещо важно.
- Персонализация за конкретни типове блокчейни. Разработването на решение, базирано на съществуващо, може значително да подобри качеството и да намали времето за реализация.
- Удобството и достъпността на получените резултати и техният тип (доклади, метрики, графики, логове и т.н.). Това е абсолютно необходимо, ако искате да следите историята на развитието на продукта или ви е необходима дълбочинна аналитика на поведението на блокчейн мрежата.
Успех в тестването и нека вашите блокчейни да бъдат бързи и устойчиви на срив!
Източник: habr.com
