«Среда продакшна вне вашего контроля»: Риан Льюис о тестировании блокчейн-проектов
Может показаться, что сейчас уже поздно обсуждать криптовалюты и блокчейн-проекты: мол, пару лет назад было сказано всё возможное, а потом завышенные ожидания не оправдались, ажиотаж спал и тема стала неактуальна.
Но на самом деле как раз сейчас можно говорить о ней серьёзно. На пике ажиотажа сложно было пробиться через вопли «ВЛОЖИСЬ В НАШЕ ICO ПОКА НЕ ПОЗДНО» к чему-то рассудительнее, и в соотношении «сигнал/шум» зашкаливала вторая составляющая. Зато теперь, когда шумиха схлынула и любители быстрой наживы переключились на что-то другое, стало можно поговорить нормально. И когда вопрос «во что вложить деньги» перестал затмевать всё остальное, стало проще затрагивать технические аспекты.
Риан Льюис (известная, например, небольшим сервисом CountMyCrypto) видит блокчейн-экосистему и с ракурса энтузиаста, и с ракурса технического специалиста: ей интересно и «что вообще происходит», и тестирование блокчейн-проектов. И мы решили задать ей вопросы сначала о первом, а затем перейти к второму.
— В 2018-м, когда многие отвернулись от криптовалют, вы остаётесь их энтузиастом. Вы считаете, что в долгосрочной перспективе у них светлое будущее?
— Совершенно верно. Знаете понятие «Hype cycle» от Gartner? Есть типичный цикл: сначала на новую технологию возлагают неоправданные ожидания, затем разочаровываются в ней, а уже после этого всего она развивается и становится по-настоящему востребованной. На мой взгляд, мы сейчас как раз в нижней точке разочарования. Отчасти это связано с нынешним кризисом криптовалют. Как вы знаете, тренд цен сейчас понижательный. Тем не менее, есть распространённое мнение, с которым я согласна, что именно в этой фазе происходит важная работа.
Сейчас значительно меньше спекуляции, чем в 2017 году и второй половине 2016 года. Проекты медленно, но верно развиваются. Параллельно с падением цен падает интерес к ICO, но при этом количество новых стартапов не сокращается: просто компании переходят на частное финансирование. Перспективных идей по-прежнему хватает.
На мой взгляд, это положительная тенденция, потому что благодаря ней произошла фильтрация людей с нереалистичными замыслами. Думаю, вы знаете, что значительная часть современных технологий в этой области плохо масштабируется, и очень многие стартапы, собравшие большие суммы денег, были основаны на крайне нереалистичных ожиданиях. Сейчас наступил период консолидации, и, с мой точки зрения, это к лучшему. Идёт работа над очень интересными проектами, просто о них не рассказывают каждый день в новостях.
А конкретно в случае с Ethereum снижение числа транзакций вообще кажется мне здоровым признаком. Архитектура блокчейна Ethereum не предназначена для того количества децентрализованных приложений, которое стало возникать в прошлом году после выхода CryptoKitties. Один из IT-евангелистов из Parity недавно даже полушутя попросил перестать развёртывать новые DApp под Ethereum. Многие возмущались, услышав это, но, в сущности, он был прав. Нельзя продолжать развёртывать всё больше и больше децентрализованных приложений на Ethereum, не думая об архитектуре этих приложений. Необходимо стараться выполнять максимум действий вне цепи, поскольку нынешняя ситуация долго продолжаться не может.
В целом, сейчас наблюдается достаточно высокий уровень активности, но, благодаря тому, что всё новые блокчейны запускают свои основные сети, количество транзакций оказывается распределённым между большим числом блокчейнов. Кроме того, растёт популярность блокчейнов без токенизации — в качестве примеров можно назвать Hyperledger и Corda. Corda была создана в консорциуме R3, её можно использовать как частный блокчейн. Так что сейчас существует целый ряд блокчейнов, не являющихся публичными и токенизированными, в них нельзя увидеть текущую деятельность. Ну и, конечно, существуют блокчейны внутри различных организаций, созданных различными реализациями Blockchain as a Service наподобие SAP или тех, которые предлагает Microsoft. Так что, я думаю, уровень активности сейчас достаточно высокий, просто далеко не вся эта деятельность видна публике.
— Несколько лет назад многие смаковали новость о том, что даже Bitcoin-конференция перестала принимать оплату в биткойнах из-за возросших комиссии и времени обработки. А что теперь с криптовалютами как формой оплаты?
— В качестве примера я могу привести конференцию Hackers Congress Paralelní Polis в Праге, на которой я сейчас буду — там принимают оплату только в биткойнах и других криптовалютах. Я уже купила билет на биткойны, и, пока я буду там, всю еду я тоже буду покупать на них. Тем не менее, вы подняли действительно важную проблему: из-за роста цен на биткойн люди какое-то время использовали его не для совершения сделок, а как вложение. Всё время говорилось о том, что это электронное золото, поэтому его покупали для хранения, а не для транзакций. Я в 2013 году купила за биткойны довольно много пива и кофе — тогда это стоило несколько фунтов или несколько евро, а сейчас те же суммы в биткойнах можно реализовать за довольно приличную сумму денег.
На самом деле, здесь многое зависит от конкретной личности. Например, у меня есть подруга из России, у которой нет счёта в банке, последние четыре года она по этическим соображениям пользуется только криптовалютой. Существует небольшое количество таких людей, пример которых доказывает, что так жить в принципе возможно. Но значительная часть тех компаний, которые раньше принимали биткойны, теперь это делать перестали. Отчасти это обусловлено тем, что во время всплеска интереса к биткойнам в каком-нибудь кафе или баре могли обучить сотрудника пользоваться приложением, а потом этот сотрудник уходил, и следующий кассир уже не знал, как работать с приложением. Жалко, что оно так происходило, поскольку эти навыки очень простые. В значительной степени тут всё завязано на сохранение имеющихся знаний. Сейчас делается довольно много для того, чтобы интегрировать криптовалюту и фиатные деньги, упрощая оплату.
В целом, мы сейчас находимся в некоторой промежуточной фазе. Поначалу было много энтузиазма из-за того, что люди рассчитывали платить за всё только криптовалютой. Потом этот энтузиазм иссяк, и многих оттолкнула нестабильность курсов. Тем не менее, я считаю, что недалеко то время, когда люди будут пользоваться множеством различных криптовалют. Также стоит помнить о попытках различных компаний ввести некоторую цензуру — известно, например, что PayPal закрывает аккаунты людей по политическим причинам. Благодаря этому сейчас крепнет осознание необходимости денег, неподвластных цензуре.
— Три года назад любили повторять «возможности блокчейна не ограничиваются биткойном, у него возможна куча других применений», и его пытались использовать в самых разных сферах. А что теперь показала жизнь, пригодился ли он на практике где-то ещё?
— Да. Один из наиболее известных недавних проектов был создан Samsung для перевозок грузов. Возможно, вы знаете, что каждое грузовое судно, приходящее из Китая в Европу, генерирует при этом около двух килограмм документов. Это занимает огромное количество ресурсов, поскольку речь идёт не только о бумаге, но и о сотнях людей, которые ставят подписи, печати, заполняют эти документы и так далее. Всё это необходимо из-за того, что люди не доверяют друг другу: компания, получающая товар, хочет убедиться, что он не поддельный; власти хотят убедиться, что компания не импортирует ничего нелегального; власти разных стран не доверяют друг другу. Благодаря этому возникла идея использовать блокчейн для решения этой проблемы отсутствия доверия, в особенности в применении к перевозке грузов. И недавно консорциум под руководством Samsung провёл первую перевозку из Азии в Европу, зарегистрированную при помощи блокчейна.
Таким образом, уже сейчас существуют успешные проекты на основе блокчейна, однако большая часть из них всё ещё находится на экспериментальной стадии. Правда, некоторые компании потихоньку наращивают активность — например, Power Ledger, она занимается распределением электричества и записывает небольшие транзакции при помощи блокчейна. Совсем недавно они расширили своё поле деятельности до трёх городов в Австралии и, кажется, предлагают свои услуги даже за пределами Австралии. Некоторые банки используют блокчейны для заключения сделок.
Когда мы говорим о блокчейнах за пределами биткойна, нужно соблюдать определённую осторожность. Несколько лет тому назад было популярно настроение, что нам нужен блокчейн без биткойна, но, думаю, сейчас люди осознали, что для публичных блокчейнов необходима некоторая мотивация при помощи токенов. А вот в частных блокчейнах или блокчейнах консорциумов действительно много различной деятельности, не связанной с биткойном.
— А можете ли привести отрицательный пример, когда казалось «блокчейн тут очень пригодится», но жизнь показала, что это не так?
— Здесь сложно ответить объективно. Думаю, вы не найдёте такого случая, чтобы кто-либо публично заявил: «здесь блокчейн не работает». Но были ситуации, когда фирмам приходилось делать разворот на 180 градусов.
В Берлине есть интересный стартап под названием SatoshiPay, они занимаются микроплатежами в издательском деле. Их замысел заключался в том, чтобы позволить писателям монетизировать свой контент: за небольшую плату в биткойнах читателю открывается небольшая часть страницы, затем следующая и так далее. Поначалу компания быстро обрела известность и смогла собрать средства, но затем плата за транзакции в Bitcoin стала слишком высокой, и все их планы из-за этого погорели. Дело не закончилось полным провалом, но им пришлось перейти с Bitcoin на Stellar. Другой пример, который я могу привести, касается рынков предсказаний. Речь идёт о некоторых сайтах для ставок, которые изначально были основаны на Ethereum и которым впоследствии пришлось от него отказаться. В обоих описанных примерах мысль использовать блокчейн была вполне разумной, просто был сделан неверный конкретный выбор.
Есть и другие примеры резких разворотов. Не могу назвать конкретных имён, но были слухи относительно стартапов, использовавших блокчейн для создания медицинских записей. Поначалу это казалось перспективным направлением, но потом возникли вопросы, связанные с юридической стороной дела: допустимо ли иметь иммутабельную структуру данных для хранения информации, которую может оказаться необходимо изменить в случае изменения законодательства или по этическим соображениям, то есть если человек добьётся права не включать эту информацию в свою медицинскую книжку.
Я думаю, было много ситуаций, когда компании пытались использовать блокчейн просто потому что это было модно, а не потому, что у них была конкретная проблема отсутствия доверия, которую можно было решить при помощи блокчейна. Думаю, трудности сейчас переживают именно такого рода проекты. Но, насколько мне известно, обычно эти трудности решаются переходом с одного блокчейна на другой, или, в интересах экономии времени, переходом с публичного блокчейна для всего проекта на частные блокчейном с доказательством полномочий (proof of authority).
— Перейдём к более техническим вопросам. У вас есть пост о десяти распространённых заблуждениях насчёт блокчейна/криптовалют. Он ориентирован на широкую публику, и большинство наших читателей уже знает описанное там, зато может не знать чего-то ещё. Есть ли заблуждения о блокчейне, распространённые среди IT-аудитории?
— Я бы не употребляла слово «заблуждение», потому что любой человек, занимающийся техникой и хотя бы немного знакомый с блокчейном, будет иметь очень хорошее представление об основах этой технологии. Думаю, правильнее говорить не об избавлении от заблуждений, а о некотором новом знании, дополнительном обучении при разработке и тестировании публичных блокчейнов (частные блокчейны значительно ближе к тому, чем программисты обычно занимаются).
Я думаю, тяжелее всего бывает привыкнуть к тому, что среда продакшна находится полностью вне контроля разработчика. Непросто предсказать, какая будет производительность, и смоделировать необходимые условия. Для меня это было главной сложностью, когда я с друзьями писала приложение для Ethereum два года назад.
У нас всё шло гладко, был хорошо налаженный пайплайн, приложение успешно запускалось в виртуальном блокчейне, который входит в набор предоставляемых Ethereum инструментов. Мы развернули приложение в Testnet, и там оно работало прекрасно. Но при развёртывании в рабочей сети становится значительно сложнее предсказать, как приложение будет себя вести у пользователя. Например, возможны многочисленные и малопредсказуемые задержки. Многие серьёзные проблемы не встречаются в тестовой среде, а возникают только в продакшне.
Предположим, у вас есть контракт в Ethereum, и этот контракт, помимо прочего, динамически создаёт кошельки для пользователей. Но другой контракт того же приложения может оказаться запущен до того, как начнётся создание кошельков, и это произойдёт из-за того, что соответствующий блок будет добыт первым. Таким образом, перед вами будет много эксплуатируемых ловушек, которые зачастую нельзя обнаружить до продакшна. Поэтому вам недостаточно протестировать приложение, вам необходимо заранее предугадать, как оно будет себя вести в продакшне.
Например, недавно был обнаружен очень серьёзный баг в кошельке с мультиподписью Parity Wallet. Кошелёк, в сущности, был выведен из строя из-за того, что посторонний человек получил доступ к функции, которая должна была быть приватной. Таким образом, ему удалось вывести из строя весь контракт. Эта ситуация не должна была возникнуть, но коль скоро она произошла, сделать уже ничего нельзя, потому что этот код уже оказался на тысячах машин и откатить его невозможно. Поэтому при продумывании архитектуры и тестировании вы должны думать о наихудших возможных сценариях и о том, как смягчить возможный урон в ситуации, когда вы не можете отозвать код.
Обычно при написании сайта в качестве крайней меры вы всегда можете отключить свой сервер. Конечно, это будет стоить вам денег, но возможность есть. А в случае с публичным блокчейном вы не можете сделать даже этого: однажды развёрнутый код вернуть уже невозможно.
— Когда задумываешься о тестировании криптовалютных проектов, первое, о чём вспоминаешь — это истории с гигантскими кражами. Правильно ли я понимаю, что тут в тестировании самым главным соображением является безопасность?
— Совершенно верно. Согласно эффекту Меткалфа (Metcalfe effect), сеть с наибольшим количеством пользователей будет наиболее успешной и популярной в будущем. Благодаря этому эффекту из всех публичных блокчейнов больше всего разработки ведётся на Ethereum. Для неё создано множество инструментов и библиотек. Например, есть стартап OpenZeppelin, который предоставляет доступ к различным библиотекам с наиболее базовую функциональностью — например, у них есть библиотека SafeMath, которая предотвращает переполнения. Таким образом, они заботятся о некоторых очень простых вещах — например, удостоверяются, что вы включили в проект опенсорсные библиотеки, предназначенные для безопасности.
Быть ответственным за чужие деньги всегда тяжело, но угрозу представляют далеко не только кражи. В случае наиболее серьёзных взломов часто происходила не кража, а закрытие доступа к деньгам: так было, например, в случае с багом в кошельке Parity, о котором я уже говорила. Деньги никуда не деваются, но владельцу получить их невозможно. С точки зрения безопасности это совершенно новая угроза, которую также необходимо иметь в виду. Вы должны думать не о том, может ли кто-либо украсть эти деньги, а о том, безопасна ли система, может ли кто-либо аннулировать контракт.
Когда я говорю о тестировании блокчейнов на предмет безопасности, я всегда пытаюсь донести мысль о том, что уязвимости могут быть не только в смарт-контрактах. Их причиной также может быть то, что разработчики целиком фокусируются на смарт-контракте, и из-за этого упускают из виду приложение в целом. Конечно, это в значительно меньшей степени играет роль, если вы просто предоставляете базу данных или API. Однако очень многие разрабатывают веб-приложения или мобильные приложения на основе блокчейнов, и здесь могут возникать весьма существенные уязвимости из-за того, что разработчики не мыслят надлежащим образом. Например, в прошлом году произошёл взлом итальянской криптобиржи BitGrail валюты Nano. На бэкенде не было никаких проблем с взаимодействием с кошельками различных валют. Но мне до сих пор не верится, что никто не заметил ошибку, сделанную разработчиком фронтенда. Когда пользователь снимал деньги со своего кошелька, чек с балансом счёта создавался на стороне клиента, и из-за этого любой злоумышленник с самым базовым знанием инструментов Chrome мог снимать деньги, каждый раз изменяя свой баланс на более высокую сумму. Этим многие воспользовались, и произошла крупная утечка средств.
Таким образом, стараясь сделать как можно более безопасным блокчейн, разработчики зачастую игнорируют элементарную безопасность, скажем, фронтенда. И это далеко не первая уязвимость фронтенда, которой воспользовались злоумышленники. Интересно, что команды разработчиков, о которых идёт речь, все достаточно опытные; но в целом процесс жизненного цикла разработки софта идёт не так, как они планируют. Кроме того, специалисты-тестировщики есть лишь на немногих проектах с блокчейнами. Большая часть этих проектов ещё экспериментальные, и из-за этого многие ещё не успели набрать обычную для коммерческой разработки команду. Поэтому тестирование зачастую страдает. Это печально, потому что у многих публичных блокчейнов есть очень хорошие инструменты для тестирования.
— А помимо акцента на безопасность, в целом тестирование похоже на тестирование «обычных» проектов?
— Думаю, навыки везде необходимы одни и те же. Единственное различие в том, что вам нужно научиться работать со средой продакшна, находящейся вне вашего контроля и плохо предсказуемой. Очевидно, это требует очень хорошего знания технической стороны дела.
Но если ваша работа уже требует от вас умения автоматизировать тесты, тестировать API, тестировать производительность, то все эти навыки вам пригодятся. Существенная разница лишь в том, что вам необходимо думать об ожиданиях пользователя и о user experience. Необходимо иметь в виду, что широкая публика пока плохо знакома со спецификой этой технологии, и до пользователей необходимо доносить, что с сохранённой информацией дальше уже ничего нельзя сделать, и что некоторая транзакция может занять произвольное количество времени. Это помогает сформировать ожидания пользователей.
Таким образом, тестировщику в большей степени необходимо думать о качестве продукта в целом, чем о поиске конкретных багов. Здесь, я думаю, необходимы некоторые навыки работы с людьми, чтобы предсказать, как пользователь будет взаимодействовать с приложением.
Поэтому же я считаю, что разработчикам публичных блокчейнов следует иметь опыт использования этих блокчейнов и понимание основ этой системы. Просто прочитать об этом недостаточно. Когда я провожу встречи и отвечаю на вопросы, я всегда демонстрирую то, о чём я говорю, на практике. Раньше я для этой цели использовала кошелёк Bitcoin, а после того, как Bitcoin подорожал, стала использовать Litecoin. В целях обучения я прошу установить этот кошелёк, показываю, как осуществляется транзакция и как убедиться в её осуществлении через Block Explorer. Даже такой пятиминутный опыт помогает понять, что вы имеете дело с публичной и прозрачной сетью.
Все остальные необходимые навыки являются общими для любого вида тестирования: умение понимать код, использовать инструменты вроде Docker, Jenkins и так далее.
— То есть у человека, уже работающего тестировщиком, не займёт много времени перейти на тестирование блокчейн-проектов?
— Именно так. Думаю, самое важное, помимо хороших технических навыков — это заинтересованность в предмете. Трудность в том, что эта область очень быстро меняется — хотя это скорее фича, а не баг. Если вам комфортно, когда обстановка остаётся примерно одинаковой и вы занимаетесь одним и тем же делом год или два — вам, скорее всего, эта область не подойдёт. Но, с другой стороны, если вам нравится быстрый темп изменений в разработке, то, скорее всего, будет интересно.
— Выглядит так, что вовремя вложившие деньги в криптовалюты вернули эти вложения многократно, а вот вложившие своё время тестировщики его потеряли: приобретённые знания быстро стали неактуальны. Это так?
— Думаю, на это можно ответить исходя из общих соображений о том, как развивается технология. Знания человека, получившего специальность computer science 10 лет назад, не остаются статичными за это время, потому что проекты сейчас работают совершенно иначе, чем тогда. Например, тогда не было контейнеров, можно было найти проекты без контроля версий, а непрерывная интеграция использовалась только в самых передовых проектах. Так что если вы хотите участвовать в сколько-либо интересных проектах, вам в любом случае придётся смириться с изменениями. Хотя действительно, в блокчейнах обстановка меняется быстрее, чем в других областях.
Но если разработчик рассчитывает на постоянство, то, скорее всего, его карьера будет не слишком длинной — исключение, возможно, составляют очень крупные старые проекты, которые не могут себе позволить каких-либо существенных перемен. Сейчас нужно быть гибким и уметь учиться. Вспомните, например, переход с SQL на NoSQL или на Redis. Этих технологий раньше не существовало, а за последние 5-6 лет от тестировщиков стали ожидать, что они в них разбираются.
— Думаю, людей, раздумывающих о тестировании блокчейнов, может останавливать опасение «раз шумиха схлопнулась, то и вакансий там нет». Но раз, по вашим словам, стартапов по-прежнему много, то и рынок труда тоже активен?
— Думаю, мы сейчас в начале витка роста спроса на тестировщиков. В основном это спрос не со стороны стартапов, а со стороны банков, бирж, различных внутренних проектов.
Конечно, есть вероятность, что эта технология будет значительно менее распространённой, чем мы сейчас ожидаем. Но мы можем в качестве примера взглянуть на кластер взаимосвязанных технологий, возникший вокруг искусственного интеллекта и машинного обучения. Там постоянно ищут новых сотрудников; раньше это в основном были исследователи и разработчики, сейчас там появился спрос в том числе и на тестировщиков. Думаю, блокчейн будет развиваться по похожей траектории.
Идея структуры данных, не нуждающейся во внешней системе безопасности, является привлекательной, и люди видят, насколько она может помочь сократить издержки и сколько новых бизнес-моделей она может породить. Несмотря на все изменения, я думаю, что этот основной принцип сохранится. Возможно, немногие готовы сейчас специализироваться на блокчейне, но, по крайней мере, его можно добавить к своему инструментарию. Например, работая в big data, я лишь недавно стала замечать спрос на тестировщиков, имеющих опыт с Hadooop. Проекты с этой технологией существовали и раньше, но там не искали людей со специализированным опытом. Я полагаю, что аналогичным образом будет развиваться и блокчейн. Те экспериментальные технологии, которые у всех на слуху сегодня, будут наиболее перспективными на рынке труда завтра.
— Раз вы заговорили о будущем, есть более общий вопрос. Очевидно, это в значительной степени будут догадки, но всё же: что вам видится в будущем блокчейна (как в целом, так и с технической точки зрения)?
— Главная техническая проблема, на мой взгляд — это масштабирование. К её решению есть два различных подхода. Согласно одному из них, следует выносить часть активности за пределы главной цепочки при помощи, скажем, каналов доверия — например, Lightning Network для Bitcoin и Litecoin, Plasma и Raiden для Ethereum. Второй подход — изменить функционирование самих блокчейнов. Например, в Ethereum произойдут весьма существенные изменения в течение следующих нескольких месяцев — поменяется система вознаграждений, к proof-of-work добавится proof-of-stake. Это механизм консенсуса, которые выполняют ту же функцию, но работают немного иначе. Кроме того, есть достаточно перспективная идея сегментирования блокчейнов, то есть разбивки данных на небольшие куски, которые затем можно собрать заново.
Я считаю, что эта технология лучше всего себя покажет именно тогда, когда проблема масштабирования будет решена, и будут существовать публичные сети с тысячами узлов, к которым каждый может присоединиться. Распределенные бухгалтерские книги для частных компаний и консорциумов — это, конечно, интересно, но они не раскрывают всего потенциала этих механизмов обеспечения доверия в той степени, в которой это делают публичные блокчейны.
— И последний вопрос, не вполне серьёзный, но любопытно услышать ответ. Когда криптовалюты были на пике, все только и говорили об их покупке, а после падения больше не говорят. Но раз сейчас курсы ниже и период затишья, то, наверное, вот как раз сейчас-то и надо бежать покупать? Что вы как знаток посоветуете?
— Я никогда не советую людям покупать криптовалюту на сумму больше, чем вы морально готовы потерять. Сама я покупаю небольшие суммы разных валют. И я бы сказала, что сейчас действительно разумнее покупать, чем в конце прошлого года. Но всегда имейте в виду, что вы можете потерять то, что купили. Я не думаю, что биткойн упадёт до нуля, и тем не менее, вероятность этого ненулевая.
— Прекрасный совет. Спасибо большое за ваши ответы!
Минутка рекламы. Скоро Риан расскажет про тестирование блокчейн-проектов ещё подробнее: со списком уязвимостей, о которых надо помнить, и с конкретными советами, помогающими противостоять этим уязвимостям. Это произойдёт на нашей конференции Heisenbug 2018 Moscow, которая пройдёт 6-7 декабря. Сейчас уже можно и прочитать описание этого доклада, и изучить программу конференции в целом.