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

Започвам с инструмент, който, въпреки че не е създаден конкретно за блокчейни, позволява ефективно тестване на тяхната работа при условие, че вече съществува работеща мрежа, на която могат да се правят експерименти. Най-важният фактор за надеждността на разпределената система е способността ѝ да продължи работа в случай на проблеми със сървърите и мрежата. Това могат да бъдат мрежови забавяния, пренаселване на диска, недостъпност на външни услуги (DNS), хардуерни повреди и стотици други причини. За да се проверява устойчивостта на всякакви системи, работещи последователно на голям брой машини, може да се използва . В него се използва изключително ефективен подход, наречен Chaos Engineering.
С помощта на собствен агент за мрежа, Gremlin създава на необходимо количество машини множество различни типове проблеми: мрежови забавяния, пренатоварване на всякакъв ресурс (ЦПУ, диск, памет, мрежа), изключва определени протоколи и т.н. За блокчейновете 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 и да получат резултатите чрез удобен dashboard.
Whiteblock Genesis позволява конфигуриране на достатъчно подробен тест, който платформата ще провежда автоматично при всяка значима промяна в кода. Това ще позволи на ранни етапи да се уловят грешки и веднага да се оцени влиянието на промените върху важните параметри на мрежата, като скорост на провеждане на транзакции и ресурси, използвани от възлите.
Madt
Още един интересен млад продукт за тестване на разпределени системи — . Той е написан на Python и позволява да се създаде необходимата топология на мрежата и нужното количество сървъри и клиенти с помощта на несложен конфигурационен скрипт (). След това услугата разгръща мрежата в няколко docker-контейнера и стартира уеб интерфейс, в който могат да се следят съобщенията от сървърите и клиентите на мрежата. Madt може да се използва за тестване на блокчейни — в репозитория на проекта има тест на p2p мрежа на базата на протокола Kademlia, при който постепенно се увеличават закъсненията при доставката на данни до възлите и се проверява статусът на тези данни.
Madt се появи съвсем скоро, но, имайки предвид много гъвкавата архитектура, може да се развие в функционален продукт.
Други решения
Практически всяко тестване на системната част на блокчейните изисква стартиране на предварителни сценарии, подготовка на акаунти и условия за теста (това може да бъде тестване на грешки в консенсуса, които могат да породят многобройни разклонения на веригите, отработване на сценарии на хардфорк, промяна на системни параметри и т.н.). Всички тези манипулации в различните блокчейни се извършват по различен начин, затова екипите е по-лесно постепенно да адаптират тестването и бенчмаркинга на продукта към вътрешния CI/CD и да използват собствени разработки, които постепенно усложняват с развитието на функционалността на блокчейна.
Въпреки това, използването на готови решения може значително да съкрати времето за тестване на тези екипи, затова смятам, че този софтуер ще се развива активно в близките години.
Заключение
В завършек на този кратък преглед, ще изброя няколко важни характеристики на инструментите за тестване на блокчейни:
- Възможността за автоматично разгръщане на блокчейн мрежа в повтаряеми условия. Този фактор е важен при разработката на системната част на блокчейните: алгоритми на консенсуса, финалност, системни смарт контракти.
- Цената на притежание на системата, потребяваните ресурси и удобството за постоянно използване. Този фактор осигурява на проекта висококачествени тестове на малка цена.
- Гъвкавостта и простотата в конфигурирането на тестовете. Този фактор увеличава шансовете за откриване на проблеми в системата — по-малка вероятност да се пропусне нещо важно.
- Персонализиране за конкретни типове блокчейни. Разработването на решение на базата на вече съществуващо може значително да подобри качеството и да намали времевите разходи.
- Удобството и достъпността на получените резултати и техният тип (отчети, метрики, графики, лога и т.н.). Това е напълно необходимо, ако искате да проследявате историята на развитието на продукта или ако ви е необходима задълбочена аналитика на поведението на блокчейн мрежата.
Успех в тестовете и нека вашите блокчейни бъдат бързи и устойчиви на сривове!
Източник: habr.com
