Автор: Бретт Маклейн, директор з розробки – Crypto, Fiat, Staking
Якщо ви зацікавлені в криптовалютах, платежах або ставках і хочете допомогти побудувати фінансову систему майбутнього, команда фінансування @ Kraken наймає!
Коли Kraken був запущений десять років тому, підтримувалися лише три криптовалюти: BTC, LTC і XRP.
Сьогодні Kraken підтримує 82 активи на 33 блокчейнах і послуги стекінгу для 8 криптовалют.
Щоб полегшити мільйони депозитів, зняття коштів і трансакцій на ставки на Kraken на рік, команда криптотехніки керує сотнями послуг, щоб забезпечити плавний потік коштів на біржі та з неї. Програмне забезпечення блокчейну, яке лежить в основі цих послуг, часто оновлюється; Для деяких із більш активних блокчейнів жорсткі та м’які форки можуть проводитися щомісяця, тоді як для інших, як-от Ethereum, події проводяться двічі на рік. Загалом щотижня існує принаймні кілька оновлень програмного забезпечення нашої інфраструктури блокчейну.
Проблема підтримки та оновлення такої великої кількості різноманітних служб і водночас створення нових може бути складною.
За останні 12 місяців наша команда додала підтримку для:
- 60 нових криптовалют:
- 39 жетонів ERC20
- Polkadot (під час запуску основної мережі)
- Кусама
- Filecoin (при запуску основної мережі)
- Потік (при запуску основної мережі)
- Кава
- Energy Web Token (під час запуску основної мережі)
- USDT (TRC20)
- 10 краудпозик Parachain
- Солана
- 1 x жетон SPL (сироватка)
- Mina
- 8 нових активів для ставки:
- Polkadot (під час запуску основної мережі)
- Кусама
- Ethereum 2.0 (під час запуску основної мережі)
- Потік (при запуску основної мережі)
- Кардано
- Космос
- Кава
- Солана
Ці досягнення були досягнуті разом із підтримкою наших існуючих інтеграцій. Інженери криптографічної команди відповідають не лише за власне програмне забезпечення шлюзу, а й за підтримку та розгортання нашої інфраструктури блокчейну, на яку спираються наші шлюзи. Швидкість розробки блокчейнів у цих проектах може бути неймовірною, коли критичні зміни та нові функції з’являються часто, іноді без попередження.
Отже, як Kraken вдається випускати десятки нових продуктів щороку, не відставаючи від швидкого розвитку блокчейну?
End to End (E2E) тести!
Чому ми цінуємо тести E2E і уникаємо імітацій
З перших днів у Kraken наголошувалося на тому, що тести E2E є найціннішим видом тестів, який може створити інженер. Модильні тести мають своє місце, але багато розробників, які не мають досвіду складної інтеграції, прагнуть писати модульні тести для кожного фрагмента коду, який вони створюють, вважаючи, що вони покращують загальну якість програмного забезпечення, яке вони розробляють.
Цей шлях, хоч і сповнений добрих намірів, часто може призвести до великого болю. Надмірна залежність від модульних тестів зміцнює вашу архітектуру; це все одно, що налити шар епоксидної смоли поверх усієї бази коду. Ви тісно пов’язуєте код із його тестами, роблячи код більш жорстким, негнучким і стійким до рефакторингу. Якщо вам потрібно внести зміни, вам, швидше за все, доведеться внести значні зміни в тести, а в деяких випадках і зовсім їх викинути. Рефакторинг коду є ключовим інструментарієм команди інженерів, і все, що ускладнює рефакторинг, слід ретельно оцінити перед впровадженням. Під час рефакторингу коду добре розроблений тест E2E часто не потребує значних змін і забезпечує гнучкість у налаштуванні внутрішньої нутрощі програми, гарантуючи, що вона продовжує працювати належним чином.
Чи означає це, що вам не слід писати модульні тести? Зовсім ні! Є багато сценаріїв, коли модульні тести є ідеальним рішенням, однак ми виявили, що для складних інтеграцій тести E2E працюють краще. Загалом модульні тести є найбільш ефективними, коли написані для коду, який відповідає таким критеріям:
- Алгоритмічно складний із багатьма крайовими випадками.
- Чітко визначені вимоги.
- Виконує окрему одиницю роботи.
- Без громадянства.
Ці невеликі фрагменти складного коду з вузьким діапазоном часто є будівельними блоками більшої програми, і навіть якщо рефакторинг відбудеться, ці функції навряд чи зміняться. У нашому світі це були б такі речі, як отримання адреси, перевірка адреси, підписання транзакцій тощо.
Ключовий висновок тут полягає в тому, що, будучи невеликою командою інженерів, ми не можемо підтримувати обсяг послуг, які ми зараз підтримуємо, та створювати нові продукти без наскрізних випробувань. Модульні тести слід розглядати як настільні ставки, але окремо їх буде недостатньо для нас, щоб не відставати в цьому просторі, що розвивається. Натомість ми вирішили інвестувати значні кошти в надійні набори інтеграційних і E2E-тестів, які підтверджують, що наші служби успішно функціонуватимуть у найпоширеніших режимах роботи.
Проблеми тестів E2E
Хоча тести E2E можуть бути потужними, вони не є панацеєю. Під час інтеграції зі службами сторонніх розробників такі тести часто втрачають значну частину своєї цінності, оскільки певні кінцеві точки чи інтерфейси потрібно імітувати, щоб повністю перевірити потік певної функції чи виклику. Вигадки настільки хороші, наскільки добре ви розумієте службу, яку ви знущаєтеся, і, як наслідок, вони можуть бути схильними до помилок, коли оновлення часті та великі за своєю природою. Підтримування власного коду, а також ваших макетів є порушенням принципу DRY (не повторюйтеся), терміну, який придумали Девід Томас та Ендрю Хант у «Прагматичному програмісту». У своїй книзі вони стверджують, що «кожна частина знання повинна мати єдине, однозначне, авторитетне представлення в системі». Створення імітаційної версії будь-якої служби означає, що тепер існує дві потенційно різні копії зазначеної служби: ваша імітована версія та фактична версія. Помилки в перекладі поведінки імітованої залежності тепер є ще однією проблемою, яку потрібно враховувати.
Регтест на допомогу
На щастя для нас, більшість блокчейнів підтримують можливість запускати тимчасові приватні мережі, які можна створити в рамках нашого процесу безперервної інтеграції (CI)/безперервного розгортання (CD). Найпопулярнішим прикладом цього є режим регресійного тесту біткойна (regtest). Коли ви запускаєте bitcoin з опцією `-regtest`, створюється нове локальне середовище блокчейну, над яким ви маєте повний контроль. Ключовою особливістю режиму regtest є те, що ви можете видобувати будь-яку кількість блоків за бажанням, дозволяючи вашим E2E-тестам завершувати зворотні поїздки для депозитів і зняття всіх типів і варіацій, імітуючи сотні сценаріїв за секунди. Граничні випадки та інші унікальні сценарії можна легко змоделювати в режимі regtest, як-от багатопідписні транзакції, повторні організації, заміна за оплату (RBF), дитина платить за батьків (CPFP) тощо! Ці тести не тільки гарантують, що наш код не містить помилок, вони також перевіряють кінцевий стан блокчейну та наших бухгалтерських книг, щоб переконатися, що все працює належним чином.
У рамках процесу додавання підтримки нової криптовалюти на Kraken команда фінансування створює структуру регулярних тестів для всіх нових лістингів. Цей код є основою нашого режиму обслуговування: кожного разу, коли випускається нова версія, потрібно просто оновити версію вузла блокчейну та повторно запустити наш конвеєр CI, щоб гарантувати відсутність критичних змін. Уважне читання приміток до випуску та співпраця зі спільнотою все ще дуже необхідні, але ці тести дають нам впевненість у випуску нових версій, яких інакше б не було.
Креативні рішення
На жаль для нас, не всі блокчейни так само перевірені в боях, як біткойн. Нові блокчейни часто вводять нові концепції, і щоб запропонувати нашим клієнтам доступ до найцікавіших нових технологій, Kraken вважає за краще запускати підтримку нових блокчейнів якомога ближче до початку основної мережі. Щоб безпечно підтримувати новий актив у дату запуску або близько до неї, Kraken іноді потрібно розробити складні тестові пакети, щоб отримати впевненість в інтеграції та переконатися, що кошти клієнтів не знаходяться під загрозою.
Ідеальною ілюстрацією цього є те, що Kraken запустив підтримку Ethereum 2.0 лише через 3 дні після запуску основної мережі 1 грудня 2020 року. Хоча тисячі людей і компаній у всьому світі допомогли протестувати Ethereum 2.0 у багатьох тестових мережах, таких як Medalla та Spadina, ми все ще вирішив вивести концепцію regtests на зовсім інший рівень за допомогою цієї інтеграції. Ми з самого початку знали, що 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-payments-staking-at-kraken/
- &
- 000
- 11
- 2020
- доступ
- рахунки
- активний
- ВСІ
- Усі транзакції
- Дозволити
- додаток
- архітектура
- навколо
- активи
- Активи
- Бій
- маячок ланцюга
- Біткойн
- blockchain
- БТД
- будувати
- Створюємо
- call
- випадків
- виклик
- зміна
- Перевірки
- дитина
- код
- співробітництво
- майбутній
- загальний
- співтовариство
- Компанії
- компанія
- довіра
- Консенсус
- триває
- контракт
- контрактів
- створення
- крипто
- cryptocurrencies
- криптовалюта
- Database
- угода
- затримка
- Виявлення
- розвивати
- Розробник
- розробників
- розробка
- Директор
- Рано
- край
- Ефективний
- інженер
- Машинобудування
- Інженери
- Навколишнє середовище
- ERC20
- ETH
- Ефіріума
- Ethereum 2.0
- Етос
- Події
- обмін
- ШВИДКО
- особливість
- риси
- указ
- фінансовий
- Гнучкість
- потік
- Рамки
- Повний
- функція
- фінансування
- засоби
- майбутнє
- Загальне
- Книга Буття
- добре
- великий
- тут
- Високий
- будинок
- Як
- HTTPS
- Сотні
- У тому числі
- Augmenter
- промисловість
- Інфраструктура
- інтеграція
- інтеграцій
- ізоляція
- IT
- зберігання
- ключ
- знання
- Кракена
- великий
- запуск
- вести
- рівень
- оголошення
- місцевий
- LTC
- Робить
- Mining
- місяців
- Найбільш популярний
- Мультисиг
- мережу
- Нові можливості
- нові продукти
- вузли
- пропонувати
- операційний
- варіант
- порядок
- Інше
- Біль
- Платити
- платежі
- платформа
- популярний
- price
- приватний
- Продукти
- проектів
- якість
- читання
- зменшити
- опора
- Вимога
- ресурси
- REST
- Нагороди
- Risk
- прогін
- біг
- Безпека
- Екран
- Послуги
- комплект
- невеликий
- розумний
- розумний контракт
- Спритні контракти
- So
- Софтвер
- Простір
- частка
- Стейкінг
- старт
- стан
- стрес
- підтримка
- Підтриманий
- Опори
- система
- Технології
- тимчасовий
- тест
- Тестування
- Тести
- час
- знак
- топ
- Відстеження
- угода
- Transactions
- Оновити
- Updates
- us
- значення
- обсяг
- Web
- week
- в
- Work
- світ
- X
- xrp
- рік