Автор: Бретт Маклейн, технический директор – криптовалюта, фиат, стейкинг
Если вы интересуетесь криптовалютами, платежами или стейкингом и хотите помочь построить финансовую систему будущего, команда инженеров по финансированию @ Kraken приглашает на работу!
Когда Kraken был запущен десять лет назад, поддерживались только три криптовалюты: BTC, LTC и XRP.
Сегодня Kraken поддерживает 82 актива в 33 блокчейнах и сервисы ставок для 8 криптовалют.
Чтобы облегчить миллионы транзакций депозитов, снятия средств и ставок в год на Kraken, команда криптоинженеров управляет сотнями сервисов, обеспечивающих плавный поток средств на биржу и из нее. Программное обеспечение блокчейна, лежащее в основе этих услуг, часто обновляется; для некоторых из наиболее активных блокчейнов хард- и софт-форки могут проводиться ежемесячно, в то время как другие, такие как Ethereum, проводятся дважды в год. В целом каждую неделю в нашей инфраструктуре блокчейна выходит как минимум несколько обновлений программного обеспечения.
Задача поддержки и обновления такого большого количества различных сервисов и одновременного создания новых может оказаться сложной.
За последние 12 месяцев наша команда добавила поддержку:
- 60 новых криптовалют:
- 39 токенов ERC20
- Polkadot (при запуске основной сети)
- Кусама
- Filecoin (при запуске основной сети)
- Поток (при запуске основной сети)
- Кава
- Energy Web Token (при запуске основной сети)
- USDT (TRC20)
- 10 краудкредитов парачейна
- Solana
- 1 токен SPL (сыворотка)
- Мина
- 8 новых активов для ставок:
- Polkadot (при запуске основной сети)
- Кусама
- Ethereum 2.0 (при запуске основной сети)
- Поток (при запуске основной сети)
- Cardano
- Космос
- Кава
- Solana
Эти достижения были достигнуты наряду с сохранением наших существующих интеграций. Инженеры криптокоманды несут ответственность не только за программное обеспечение шлюза, написанное собственными силами, но также за обслуживание и развертывание нашей инфраструктуры блокчейна, на которую опираются наши шлюзы. Темпы разработки блокчейнов в этих проектах могут быть стремительными: кардинальные изменения и новые функции появляются часто, а иногда и без особого предупреждения.
Итак, как Kraken удается выпускать десятки новых продуктов каждый год, сохраняя при этом быстрые темпы развития блокчейна?
Сквозные (E2E) тесты!
Почему мы ценим E2E-тесты и избегаем моков
С первых дней работы в Kraken упор делался на то, что E2E-тесты — это наиболее ценный вид тестов, который может создать инженер. Модульные тесты имеют свое место, но многие разработчики, не имеющие опыта сложной интеграции, склонны писать модульные тесты для каждого фрагмента кода, который они создают, полагая, что они улучшают общее качество разрабатываемого ими программного обеспечения.
Этот путь, хотя и полон добрых намерений, часто может привести к большим страданиям в будущем. Чрезмерная зависимость от модульных тестов имеет тенденцию цементировать вашу архитектуру; это все равно, что налить слой эпоксидной смолы поверх всей вашей кодовой базы. Вы тесно связываете код с его тестами, делая код более жестким, негибким и устойчивым к рефакторингу. Если вам нужно внести изменения, вам, вероятно, придется внести существенные изменения в тесты, а в некоторых случаях вообще отказаться от них. Рефакторинг кода — это ключевая возможность, которую должна иметь в своем наборе инструментов команда инженеров, и все, что усложняет рефакторинг, должно быть тщательно оценено перед внедрением. При рефакторинге кода хорошо спроектированный E2E-тест часто не требует большого количества изменений и обеспечивает гибкость в настройке внутренних компонентов приложения, гарантируя при этом, что оно продолжает работать должным образом.
Означает ли это, что вам не следует писать модульные тесты? Нисколько! Существует множество сценариев, в которых модульные тесты являются идеальным решением, однако мы обнаружили, что для сложных интеграций E2E-тесты работают лучше. В целом модульные тесты наиболее эффективны, когда они написаны для кода, который соответствует следующим критериям:
- Алгоритмически сложный, со множеством краевых случаев.
- Ограниченный объем и четко определенные требования.
- Завершает одну единицу работы.
- Без гражданства.
Эти небольшие фрагменты сложного кода с ограниченной областью действия часто являются строительными блоками более крупного приложения, и даже если произойдет рефакторинг, эти функции вряд ли изменятся. В нашем мире это будут такие вещи, как получение адреса, проверка адреса, подписание транзакций и т. д.
Ключевой вывод здесь заключается в том, что, будучи небольшой командой инженеров, мы никогда не сможем поддерживать тот объем услуг, который поддерживаем в настоящее время. и создавайте новые продукты без сквозных испытаний. Модульные тесты следует рассматривать как ставку на стол, но в отдельности их будет недостаточно, чтобы мы могли идти в ногу с этим развивающимся пространством. Вместо этого мы решили вложить значительные средства в надежные наборы интеграционных и E2E-тестов, которые подтверждают, что наши сервисы будут успешно работать в наиболее распространенных режимах работы.
Проблемы тестов E2E
Хотя E2E-тесты могут быть эффективными, они не являются панацеей. При интеграции со сторонними сервисами такие тесты часто теряют большую часть своей ценности, поскольку необходимо имитировать определенные конечные точки или интерфейсы, чтобы полностью протестировать поток конкретной функции или вызова. Моки хороши настолько, насколько хорошо вы понимаете сервис, над которым вы издеваетесь, и в результате они могут быть подвержены ошибкам, если обновления часты и имеют большой размер. Сопровождение собственного кода, а также макетов — это нарушение принципа DRY (не повторяйтесь), термина, придуманного Дэвидом Томасом и Эндрю Хантом в книге «Программист-прагматик». В своей книге они заявляют, что «каждая часть знаний должна иметь единственное, однозначное и авторитетное представление в системе». Создание имитируемой версии любого сервиса означает, что теперь существуют две потенциально различающиеся копии указанного сервиса: ваша имитируемая версия и фактическая версия. Ошибки при трансляции поведения имитируемой зависимости теперь являются еще одной проблемой, которую следует учитывать.
Регистраторы в помощь
К счастью для нас, большинство блокчейнов поддерживают возможность запуска временных частных сетей, которые можно развернуть в рамках нашего процесса непрерывной интеграции (CI)/непрерывного развертывания (CD). Самым популярным примером этого является режим регрессионного тестирования (regtest) Биткойна. Когда вы запускаете bitcoind с опцией `-regtest`, он создает новую локальную среду блокчейна, над которой вы имеете полный контроль. Ключевой особенностью режима regtest является то, что вы можете майнить произвольное количество блоков по своему желанию, что позволяет вашим E2E-тестам выполнять круговые обходы для ввода и вывода средств всех типов и вариантов, моделируя сотни сценариев за считанные секунды. Краевые случаи и другие уникальные сценарии можно легко смоделировать в режиме regtest, например, транзакции с мультиподписью, реорганизацию, замену комиссией (RBF), дочернюю плату за родительскую (CPFP) и многое другое! Эти тесты не только гарантируют, что наш код не содержит ошибок, но также проверяют конечное состояние блокчейна и наших реестров, чтобы убедиться, что все работает так, как ожидалось.
В рамках процесса добавления поддержки новой криптовалюты на Kraken команда финансирования создает систему регистрации для всех новых листингов. Этот код является основой нашего режима обслуживания: каждый раз, когда выпускается новая версия, это просто вопрос обновления версии узла блокчейна и повторного запуска нашего конвейера CI, чтобы гарантировать отсутствие критических изменений. Внимательное чтение примечаний к выпуску и сотрудничество с сообществом по-прежнему крайне необходимы, но эти тесты вселяют в нас уверенность в выпуске новых версий, которых в противном случае у нас бы не было.
Творческие решения
К сожалению для нас, не все блокчейны так проверены в боях, как Биткойн. Новые блокчейны часто представляют новые концепции, и чтобы предложить нашим клиентам доступ к самым интересным новым технологиям, Kraken предпочитает запускать поддержку новых блокчейнов как можно ближе к началу основной сети. Чтобы безопасно поддерживать новый актив к дате запуска или близко к ней, Kraken иногда необходимо разработать сложные тестовые программы, чтобы получить уверенность в интеграции и гарантировать, что средства клиентов не подвергаются риску.
Прекрасной иллюстрацией этого является то, что Kraken запустил поддержку Ethereum 2.0 всего через 3 дня после запуска основной сети 1 декабря 2020 года. Хотя тысячи людей и компаний по всему миру помогли протестировать Ethereum 2.0 в нескольких тестовых сетях, таких как Medalla и Spadina, мы все равно решил вывести концепцию регулярных тестов на совершенно другой уровень с помощью этой интеграции. Мы с самого начала знали, что Ethereum 2.0 станет значительным событием, и это убеждение подтвердилось, поскольку на данный момент в цепочке маяков были поставлены миллионы ETH, в том числе более 800,000 XNUMX ETH, которые были поставлены клиентами Kraken.
Ниже вы можете увидеть диаграмму набора сервисов, которые наш конвейер непрерывной интеграции (CI) запускает и отключает каждый раз, когда разработчик фиксирует код в одном из наших репозиториев кода ETH2.
На высоком уровне поток тестирования выглядит следующим образом:
- Запустите основной и альтернативный узлы ETH1 (каждый из них по очереди занимается майнингом для достижения консенсуса) с генезисом, который содержит начальное количество ETH для тестирования.
- Запустите узел цепочки маяков ETH2 как частную цепочку, используя специальный режим минимальной конфигурации, в котором для активации Genesis необходимо всего 16 валидаторов.
- Разверните смарт-контракт ETH2 в блокчейне ETH1.
- Внесите ETH в депозитный контракт ETH2, где средства сжигаются, а валидаторы создаются на внешнем узле валидатора ETH2. Это валидаторы, которые просто управляют сетью ETH2 и рассматриваются как внешние по отношению к валидаторам Kraken.
- Запустите обозреватели блоков ETH1 и ETH2.
- Запустить базу данных.
- Запуск шлюза и подписантов.
- Вставьте клиентские запросы на стейкинг ETH -> ETH2.
- Шлюз принимает клиентские запросы и отправляет ETH в депозитный контракт в блокчейне ETH1 и создает соответствующее количество валидаторов на внутреннем узле валидатора ETH2. Валидаторы разделены на внутренние и внешние наборы валидаторов, чтобы мы могли проверить, что происходит, когда наши валидаторы выходят из строя (чтобы проверить сокращение, штрафы, потерю вознаграждений), а также увидеть, что происходит, когда остальная часть сети выходит из строя или отключается от сети, кроме наших валидаторов. оставаться на ногах.
- Отслеживайте, пока валидаторы не станут активными в цепочке ETH2, начните отслеживать вознаграждения, выплаты, тестировать сокращения и штрафы, обнаруживать потерянные вознаграждения и выплачивать вознаграждения клиентам.
- Запустите отдельный процесс финансовой сверки для всех транзакций, чтобы убедиться, что все данные во всех наших регистрах совпадают.
Вышеупомянутое представляет собой лишь общий обзор того, что происходит в нашей тестовой среде; существует ряд других тестов, проверок и проверок. Если разработчику необходимо что-то отладить или просмотреть состояние любой сети, он может обратиться к обозревателям блоков, чтобы сразу увидеть, что именно произошло. Обычно мы не включаем обозреватели блоков в наш конвейер CI, но, учитывая сложность интеграции, на этапе разработки было полезно визуализировать то, что происходит в цепочке.
Вы можете подумать, что это приводит к огромной задержке в нашем конвейере CI, но, к счастью, это не так. В настоящее время запуск полного конвейера CI для нашего репозитория Ethereum 2.0 занимает всего 14 минут. Это включает в себя аудит/построение всех зависимостей, запуск всех сервисов, развертывание различных смарт-контрактов в блокчейне, майнинг блоков, создание валидаторов, а затем выполнение всех более чем 100 тестовых сценариев.
Заключение
Разработка комплексных тестов E2E для каждой интеграции блокчейна в Kraken требует значительного количества инженерных ресурсов. Это цена, которую мы с радостью платим, поскольку нашей главной заботой является безопасность средств наших клиентов и обеспечение качественного опыта работы на нашей платформе. Могла бы наша команда выпустить больше продуктов, если бы мы тратили меньше времени на тестирование при создании новых интеграций? Без вопросов. Однако это противоречило бы духу и ценностям не только команды инженеров, но и компании в целом. Эти тесты гарантируют, что мы можем безопасно обновляться до новых версий программного обеспечения блокчейна, повышать уверенность во время хард-/мягких вилок и снижать стресс для разработчиков при развертывании изменений.
Почему инженеры Kraken являются одними из самых уважаемых в отрасли? Это сообщение Стив Хант, вице-президент Kraken по разработке, описывает наши ценности и стремление помогать другим инженерам блокчейнов.
Источник: https://blog.kraken.com/post/10227/testing-crypto-pays-stake-at-kraken/
- &
- 000
- 11
- 2020
- доступ
- Учетная запись
- активный
- Все
- Все транзакции
- Позволяющий
- Применение
- архитектура
- около
- активы
- Активы
- Боевой
- цепь маяка
- Bitcoin
- блокчейн
- BTC
- строить
- Строительство
- призывают
- случаев
- вызов
- изменение
- Проверки
- ребенок
- код
- сотрудничество
- приход
- Общий
- сообщество
- Компании
- Компания
- доверие
- Консенсус
- продолжается
- контракт
- контрактов
- Создающий
- крипто-
- криптовалюты
- криптовалюта
- База данных
- сделка
- задерживать
- обнаружение
- развивать
- Застройщик
- застройщиков
- Развитие
- директор
- Рано
- Edge
- Эффективный
- инженер
- Проект и
- Инженеры
- Окружающая среда
- ERC20
- ETH
- Эфириума
- Ethereum 2.0
- этос
- События
- обмена
- БЫСТРО
- Особенность
- Особенности
- Fiat
- финансовый
- Трансформируемость
- поток
- Рамки
- полный
- функция
- финансирование
- средства
- будущее
- Общие
- Genesis
- хорошо
- большой
- здесь
- High
- Вилла / Бунгало
- Как
- HTTPS
- Сотни
- В том числе
- Увеличение
- промышленность
- Инфраструктура
- интеграции.
- интеграций
- изоляция
- IT
- хранение
- Основные
- знания
- Kraken
- большой
- запуск
- вести
- уровень
- Объявления
- локальным
- LTC
- Создание
- Горнодобывающая промышленность
- месяцев
- Самые популярные
- Multisig
- сеть
- Новые функции
- новые продукты
- узлы
- предлагают
- операционный
- Опция
- заказ
- Другое
- боль
- ОПЛАТИТЬ
- платежи
- Платформа
- Популярное
- цена
- частная
- Продукция
- проектов
- Reading
- уменьшить
- опора
- Требования
- Полезные ресурсы
- ОТДЫХ
- Награды
- Снижение
- Run
- Бег
- Сохранность
- экран
- Услуги
- набор
- небольшой
- умный
- умный контракт
- Смарт-контракты
- So
- Software
- Space
- доля
- Стейкинг
- Начало
- Область
- стресс
- поддержка
- Поддержанный
- Поддержка
- система
- технологии
- временный
- тестXNUMX
- Тестирование
- тестов
- время
- знак
- топ
- Отслеживание
- сделка
- Сделки
- Обновление ПО
- Updates
- us
- ценностное
- объем
- Web
- неделя
- в
- Работа
- Мир
- X
- XRP
- год