Привет, меня зовут Александра Кошелева, я работаю тестировщиком в X-Technology. Работа QA в сфере блокчейна, это почти как спрашивать на хинди у мексиканца, где тут ближайший бар. Он не знает хинди, ты тем более не знаешь хинди. Кое-как жестами вы  понимаете друг друга. Благодаришь, уходишь довольный, находишь “бар”, а там библиотека.

Первое, что понадобится QA-джуну, работающему на блокчейн-проекте - это внимательность в чтении техзадания (ТЗ) и всей проектной документации. Можно долго спорить с аналитиком или техписателем о том, что ответов на твои вопросы в них нет, но тебя все равно пошлют читать их по-новой и в конечном счете, скорее всего, окажутся правы.

Во-вторых, придется подружиться с разработчиком. Да, с тем угрюмым (не всегда), серьезным (тоже не всегда) и вечно занятым (а вот это всегда) парнем (реже девушкой, тут как повезет), с которыми ты, поначалу, даже заговорить боишься. Да, от них исходит легкое свечение неприступности, но чем быстрее ты найдешь путь к сердечку разраба и разговоришь его, тем быстрее войдешь в контекст. Кто как не он знает проект от первой до последней строчки кода. Бывают проекты, на которых нет ТЗ как такового, и тестировщики вынуждены проявлять чудеса коммуникации. Поэтому лучше, когда коммуникация уже налажена. В целом, задавать вопросы когда ты тестировщик абсолютно нормально, и ничего постыдного в этом нет.

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

Теперь практика. Возьмем небольшой проект -  одностраничный сайт для минтинга nft. 

Первое, что тебе стоит заиметь - это криптокошелек. Его выбор зависит от проекта.  Если он на тоне, то можно остановиться, например, на Tonkeeper. Мы же возьмем один из самых распространенных - MetaMask (на официальном сайте https://metamask.io или в магазине приложений Google Chrome). Это интуитивно понятный и простой  криптокошелек. 

Поначалу ты будешь работать с тестовыми сетями, где потеря содержимого кошелька может показаться не такой катастрофичной, но даже тестовые “денежки” тебе не отсыпят просто так. Их придется добывать небольшими порциями, иногда ежедневно. Поэтому приложи усилия к своей цифровой безопасности. Конечно, защита криптокошелька это отдельная и довольно серьезная тема, поэтому чтобы не перегружать тебя, обсудим только явные риски:

  • Основное правило безопа��ности, которое ты должен усвоить - нет защиты актуальнее, чем твоя собственная цифровая гигиена. Как говорит наш великий и ужасный девопс Вячеслав: “Голова пользователя - лучший антивирусник”

  • Разрешения на подключение кошелька на сайтах. Не давай их всем подряд, в сети полно мошеннических сайтов, вполне правдоподобно мимикрирующих под официальные. Пользуйся только надежными и проверенными платформами, внимательно проверяя адреса, по которым переходишь.

  • Раскрыть сид-фразу. Ту самую, которую тебе дали при регистрации кошелька. Никто, кроме самого метамаска, допустим при восстановлении, не будет и не должен просить у тебя сид-фразу. Если это происходит, поздравляю, вот они мошенники, собственной персоной. Храни ее в действительно надежном месте. Бывали случаи, когда злоумышленники взламывали сервисы для скриншотов и собирали инфу, в том числе и заскриненные сид-фразы.

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

Потом  еще одно всплывающее меню. Кликаем на стрелочку “вниз”.

Кликаем “Показать/скрыть тестовые сети”


Вуаля. Теперь у нас целый список тестовых сетей. Выбираем нужную.
Какую именно - придется решать самому, так как некоторые со временем отключают, добавляют новые, и какие будут актуальны в тот момент, когда ты будешь читать эту статью, сказать сложно. Долгое время мы работали с тестовой сетью эфириума - Kovan, которая в свою очередь пришла на замену Ropsten, пострадавшей от DoS атак. Сейчас перешли на Goerli, потому что там красивая визуализация при получении тестовых монеток (шутка, но визуал и правда очень приятный).

Где брать тестовую валюту? Для этого есть специальные краны. В них можно попросить выслать тебе “деньги” на тестовые транзакции. К реальной криптовалюте они имеют мало отношения, поэтому не стоит бегать по офису с криками “Я богат” после пе��вых упавших криптомонет. Для получения тестовых эфиров Goerli я хожу на  goerlifaucet.com. Если подключена другая сеть, к примеру Kovan, можно попросить faucets.chain.link

После регистрации просто копипастишь номер своего счета и ждешь зачисления демо-криптовалюты.

Взять номер счета можно тут.

Счетов на одном кошельке может быть несколько. Добавить либо импортировать уже существующий можно в выпадающем меню.

В меню с тремя точками есть еще одна полезная функция “Реквизиты счета”. Возможно тебе придется экспортировать разработчику закрытый ключ, и, конечно, смотреть статус транзакций на эфирскане (https://etherscan.io/), поэтому будет совсем не лишним заглянуть туда.

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

Как же “зеленым” ручникам тестировать смарт-контракты, когда с языками программирования и скриптами еще не знаком? На помощь нам придет полезный инструмент с широким функционалом - Remix IDE. Первое время вы будете использовать только одну функцию. Идем на https://remix.ethereum.org/ и попадаем в дефолтное рабочее пространство. То, куда указывают стрелочки можно закрыть (вкладку Home), удалить (дефолтные файлы, или файлы от предыдущего проекта).

Кликаем по значку Load, и загружаем  смарты, которые ты взял у разработчика. В данном случае у нас два файла формата “.sol” - это формат языка программирования solidity, с которым сложно не столкнуться на пути покорения блокчейн-проектов.

Первый файлик это собственно проект, который тестим, второй - “ERC721A.sol”, это стандарт токенов, работающий на смарт-контрактах (он вариативен, поэтому если тебе дали какой-то другой, например ERC721.sol, не торопись бежать с разборками, возможно на твоем проекте используется другой стандарт).

Если все правильно загрузилось, ты увидишь файлы в этом списке.

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

Кликаем ниже

Открывается встроенный компилятор. Жмем на синюю кнопочку Compile.sol “Название твоего файла”.

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

Теперь перейдем во вкладку деплоя.

Здесь нас интересуют:

  1. Вкладка Environment. В ней мы указываем счет, с которого будут производиться транзакции. Учти, что снятие “денег” будет производиться буквально за все. Если ты еще не в курсе такой особенности блокчейна, то почитай про плату за газ, чтобы потом не инспектировать эфирскан на предмет ограбления.

Ты можешь выбрать “встроенные” Remix VM (London или Berlin) и не тратить ни эфиринки из своих средств. Либо подключить свой счет Injected Provider - MetaMask и платить с него тестовыми эфирами, каждый раз подтверждая проведение транзакции.

  1. Вкладка Contract. Выбираешь тот, который компилили, и жмешь Deploy. Ниже должен отобразиться задеплоенный смарт-контракт. Потом жмем на стрелочку и нам открываются все доступные методы, с которыми можем дальше работать.

Твои методы, возможно, будут выглядеть иначе. Главное же, чтобы они работали, да?)

Синяя подсветка говорит о функциях, носящих информационный характер. Ты можешь узнать, например, какой сейчас установлен статус продаж, или максимальное количество nft, выставленных на продажу. Оранжевая подсветка -  для методов, которые можно применить при тестировании, в зависимости от твоих тест-кейсов.

Не забывай раскрывать каждый метод с помощью стрелочки напротив и вводить необходимые значения в поля. На примере ниже раскрыта вкладка минта, где необходимо ввести значение количества, которое ты хочешь заминтить (quantity), и сигнатуру (signature - специальную “подпись”, без которой проведение некоторых транзакций невозможно).

 

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

Если подключен твой кошелек, не забывай  подтверждать проведение транзакций. Когда открыто много вкладок на двух мониторах, окно подтверждения может “потеряться”. Поэтому если долго нет ответа от метамаска, ��оищи уведомления в нижней или верхней панели экрана.

Можно также поиграть с ценой за газ, ее можно изменить, кликнув на соответствующую кнопку.

Когда подключен свой кошелек, в некоторых методах тебе придется пользоваться полем VALUE.

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

Для расчета значения Wei используются эфир-конвертеры. Например, eth-converter.com.

Вводишь стоимость в эфирах, указанное в твоем смарте - конвертер пересчитывает его на Wei, либо GWEI. Если тебе нужно заминтить больше одного nft, это значение нужно увеличить пропорционально. 

Все проведенные транзакции и ошибки отображаются внизу. Там же будет ссылка на эфирскан.

Видишь, все не так сложно, как кажется! Главное пробовать, разбираться и не бояться!