Сегодня трудно найти человека, который не слышал о биткойн или криптовалютах вообще.

Все говорят о цифровых деньгах, но чтобы полностью понять их, нужно разобраться в технологии, лежащей в их основе – технологии blockchain.
Сегодня многие отрасли промышленности, как большие, так и малые, внедряют Blockchain-приложения.

И, как и любой технологии, blockchain необходимо тестирование, чтобы гарантировать надлежащее функционирование.

В противном случае можно оказаться в той же ситуации, что и Ethereum, второй самый известный публичный blockchain после биткойн.

Еще в 2016 году эта криптовалюта в размере 280 миллионов долларов была заблокирована и недоступна из-за технической ошибки.

По-видимому, ошибка была случайно вызвана пользователем, и, как результат, этот пользователь получил доступ к нескольким кошелькам.
Всю эту ситуацию можно было бы избежать, если бы Ethereum был надлежащим образом протестирован до выпуска в общественность.

Как бы то ни было, multisignature-кошельки Ethereum от Parity оказались замороженными из-за недостатка безопасности.
Blockhain по-прежнему является относительно новой технологией, которая уникальна во многих аспектах.

Хотя многие методы, применяемые при обычном регулярном тестировании веб-приложений, такие как тестирование безопасности, функциональное тестирование или интеграционное тестирование, по-прежнему актуальны, тестирование блокчейн-приложений имеет свои особенности и должно включать следующие типы тестирования:

  • Тестирование смарт-контрактов


Смарт-контракт — это программный модуль в сети Blockchain, который автоматически завершает транзакцию с использованием ранее определенных условий.

Чтобы проверить смарт-контракты, нужно учитывать и моделировать все возможные условия для каждого отдельного контракта.

Учитывая количество узлов и их комбинации, а также то, как быстро сеть растет и изменяется, необходимо, чтобы тестировщики применяли автоматизацию во время тестирования приложений на основе Blockchain.

  • Нефункциональное тестирование


Другие аспекты применения блокчейн, которые необходимо тестировать – это его производительность, целостность и скрытность.

Это может зависеть от нескольких факторов, включая размер сети, размер транзакции и многое другое.

  • Тестирование пользователей сети и узлов


Наиболее важным элементом Blockchain является ledger (бухгалтерская книга).

В Там записываются все криптовалютные последовательности и транзакции, которые затем распределяются по всем узлам, чтобы каждый мог видеть их идентичность.

Для этого, однако, участникам Blockchain необходим консенсус даты и времени, когда каждая транзакция присоединилась к сети.

Консенсусный протокол необходимо протестировать, чтобы проверить, действительно ли все происходит в нормальных условиях, когда все узлы терпят неудачу и когда в сети недостаточно узлов в течение определенного времени.
Это можно проверить с помощью узлов Byzantine.

В принципе, этот узел является членом блокчейн, который пытается преднамеренно нарушить его операции, например, не пересылая сообщения дальше другим членам.
Что именно требует тестирования в Blockchain-приложениях? Очевидно, есть некоторые ограничения, так что вот он список нескольких вещей, которые можно проверить:

  • Размер блока


В 2010 году Сатоши Накамото представил ограничение размера блока в 1 МБ.

Этот предел остался и до настоящего времени, хотя он был предметом многочисленных дискуссий в биткойн-сообществе.

Что произойдёт при превышении максимального размера блока?
В рамках решения биткойн представляет нам хардфорк (резкое изменение протокола, которое отменяет/проверяет ранее допустимые/недействительные блоки и транзакции).
Масштабирование состоит из двух противоречий.

С одной стороны, разработчики и пользователи хотели сохранить максимальный размер блока 1 МБ, но получить лучший алгоритм сжатия данных, в то время как другая сторона, майнеры, выступала за увеличение максимального размера блока до 8 МБ.

Биткойн и Bitcoin Cash имеют разные преимущества, поскольку один более безопасен, а другой быстрее.

Проблема, которая нуждается в тестировании здесь, заключается в том, как будет работать Blockchain при увеличении максимального размера блока или использовании различных алгоритмов сжатия.

  • Пропускная способность


В теории (в идеальных условиях) максимальная пропускная способность Blockchain биткойна — 7 транзакций в секунду, тогда как на практике она колеблется между 3 и 4.

Это довольно мало.

К примеру, максимальная пропускная способность Visa составляет 58 000, а средняя — 2 000, и даже Ethereum может достигать 20 транзакций в секунду.

Почему Биткойн этого не может?

  • Безопасность


Одним из первых вопросов новичка, который встречается с биткойн, становится вопрос, насколько это безопасно.

Это очень правильный вопрос. Большая часть внимания здесь, похоже, заключается в установлении личности участника, но что произойдёт, когда они становятся скомпрометированными? Опять же, возвращаясь к сравнению биткойн и Bitcoin Cash, один ориентирован больше на безопасность, а другой — на время, необходимое для завершения транзакции.
 

  • Размер цепи

На момент написания этой статьи количество блоков в сети биткоин составило около 522 600.

Нет ограничений на размер цепочки, поэтому можно проверить как производительность, так и функциональность, а также то, что произойдет, если цепочка будет временно нарушена (например, когда два майнера получат два разных, но оба действительных решения для одного и того же блока в то же время).

  • Стойкость


Распределённая система может давать только два варианта: вернуться к самой последней доступной ссылке в цепочке или предоставить ошибку.

Вопрос в том, что делать, если конец цепочки не доступен?
Очевидно, что есть много других вещей, которые тестировщики могут получить в свои руки, когда дело доходит до тестирования приложений, связанных с Blockchain, но эти пять дают хороший обзор того, что можно и нужно тестировать.
Хотя Blockchain развивается с колоссальной скоростью, технология все еще далека от совершенства.

Чтобы приблизиться к совершенству, разработчики и участники Blockchain должны применять целостный подход к приложениям, основанным на этой технологии.

Лучший способ сделать это — проверить его тщательно и последовательно.