Skip to content

Вопросы на собеседовании: Блокчейн-разработчик

100 реальных вопросов с образцовыми ответами и пояснениями для уровня Junior.

Смотреть пример резюме: Блокчейн-разработчик

Тренировка флешкарточками

Интервальное повторение · Hunter Pass

Вопросы

databasedistributed

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

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

Зачем это спрашивают: Интервьюер проверяет, понимаете ли вы модель общих копий и роль консенсуса, не называя блокчейном любую реплицируемую базу данных.

Заголовок содержит компактные метаданные для идентификации и проверки блока, а тело содержит включённые в него транзакции или другие записи.

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

Зачем это спрашивают: Сильный ответ разделяет компактные метаданные консенсуса и данные транзакций, а также объясняет, как заголовок фиксирует содержимое тела.

blockchain

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

  • Даже изменение одного бита с подавляющей вероятностью создаёт другой криптографический хеш.
  • Следующий блок продолжает ссылаться на исходный хеш, поэтому изменённая история сразу не проходит проверку.
  • Атакующему пришлось бы пересобрать изменённый блок и всех его потомков, а затем преодолеть правила консенсуса сети.
  • Хеши делают вмешательство обнаружимым, а консенсус и экономические затраты мешают сети принять альтернативную историю.

Зачем это спрашивают: Интервьюер хочет убедиться, что вы отличаете обнаружение изменений с помощью хешей от устойчивости к переписыванию, которую обеспечивает консенсус.

blockchain

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

  • Публичные сети, например Ethereum, используют permissionless-валидацию и экономические стимулы, поскольку валидаторы могут не знать и не доверять друг другу.
  • Приватные сети, например Hyperledger Fabric, могут ограничивать круг тех, кто читает данные, отправляет транзакции или проверяет обновления.
  • Разрешительное членство может повысить пропускную способность и приватность, но концентрирует контроль у участвующих организаций.

Зачем это спрашивают: Интервьюер оценивает, можете ли вы связать правила участия с доверием, приватностью, производительностью и контролем.

Модель счетов обновляет балансы и состояние, связанные с адресами, а модель UTXO расходует существующие выходы и создаёт новые.

  • У счетов Ethereum есть такие поля, как баланс и nonce, которые транзакции изменяют в общем глобальном состоянии.
  • В Bitcoin выход расходуется целиком, поэтому платёж обычно создаёт один выход получателю, а другой возвращает сдачу отправителю.
  • UTXO легко проверять независимо и можно обрабатывать параллельно, если они не расходуют одни и те же выходы.
  • Счета упрощают представление балансов и состояния смарт-контрактов, но транзакции могут конкурировать за одно состояние.

Зачем это спрашивают: Сильный ответ объясняет, как каждая модель представляет владение и как это влияет на построение транзакций и доступ к состоянию.

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

  • Полная нода загружает блоки и проверяет транзакции, подписи и правила консенсуса перед принятием состояния.
  • Лёгкий клиент обычно хранит заголовки блоков и может проверить включение через доказательство Меркла, не загружая каждую транзакцию.
  • Лёгким клиентам нужно намного меньше места и трафика, поэтому они подходят для телефонов и браузерных кошельков.
  • Их безопасность зависит от протокола и доступных доказательств, а работа через одного RPC-провайдера добавляет риски доверия и приватности.

Зачем это спрашивают: Интервьюер проверяет, понимаете ли вы компромисс между ресурсами и доверием, а не считаете лёгкую ноду полноценным валидатором.

blockchaintransactions

Узлы передают новые транзакции и блоки подключённым пирам, и так данные распространяются по сети по принципу gossip.

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

Зачем это спрашивают: Интервьюер хочет услышать, как проверка, устранение дубликатов и задержки сети влияют на одноранговое распространение данных.

transactions

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

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

Зачем это спрашивают: Сильный ответ описывает мемпул как локальную очередь с собственными правилами, а не как единую глобальную очередь с гарантированным включением в блокчейн.

blockchaintransactions

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

  • Каждый следующий блок добавляет подтверждение и снижает вероятность реорганизации в сети proof-of-work.
  • Финальность в proof-of-work вероятностная, поэтому приложения ждут больше подтверждений при более высокой сумме или риске.
  • Во многих proof-of-stake сетях валидаторы голосованием финализируют контрольные точки, после чего откат требует серьёзного нарушения протокола и влечёт штрафы.

Зачем это спрашивают: Интервьюер оценивает, отличаете ли вы включение транзакции от разных гарантий финальности, которые дают механизмы консенсуса.

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

  • Ссылка на родителя должна указывать на известный корректный блок, а поля заголовка должны отвечать правилам консенсуса сети.
  • Узел проверяет подписи транзакций, nonce или потраченные выходы, балансы и другие условия протокола.
  • Он выполняет корректные транзакции по порядку и пересчитывает записанные в заголовке корни транзакций, квитанций или состояния.

Зачем это спрашивают: Интервьюер проверяет, отличаете ли вы получение предложенного блока от самостоятельной проверки всех правил консенсуса и состояния.

consensusblockchain

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

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

Зачем это спрашивают: Интервьюер проверяет, связывает ли кандидат консенсус с конфликтующим состоянием и отличает ли злонамеренное поведение от обычного отказа узла.

consensus

В proof of work майнеры ищут хеш блока ниже текущего целевого значения сети.

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

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

blockchainconsensus

Proof of stake связывает участие в консенсусе с заблокированным капиталом, который протокол может вознаграждать или штрафовать.

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

Зачем это спрашивают: Интервьюер проверяет, может ли кандидат объяснить proof of stake через выбор участников, стимулы и штрафы, а не назвать его майнингом с низким энергопотреблением.

ethereumconsensusvalidation

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

  • Соло-валидатор Ethereum вносит 32 ETH и запускает ПО, которое выполняет назначенные обязанности консенсуса.
  • Для каждого слота один выбранный пропозер собирает и рассылает блок-кандидат.
  • Другие валидаторы публикуют аттестации с голосами за голову цепочки и связи между контрольными точками, а протокол суммирует вес их стейка.
  • Пропуск обязанности лишает потенциальной награды, а подпись противоречивых сообщений может привести к слешингу.

Зачем это спрашивают: Интервьюер проверяет, может ли кандидат отделить общую роль валидатора от обязанностей пропозера и голосующих участников в слоте.

blockchain

Форк создает конкурирующие корректные ветки, а правило выбора ветки протокола определяет одну из них как каноническую.

  • Временный форк может возникнуть, когда разные блоки публикуются почти одновременно и доходят до узлов в разном порядке.
  • Узлы проверяют каждую ветку до применения правила выбора, поэтому некорректный блок не победит лишь за счет продолжения ветки.
  • Цепочки proof of work обычно предпочитают корректную ветку с наибольшей накопленной работой, а цепочки proof of stake используют голоса валидаторов и собственные правила протокола.
  • Блоки вне выбранной ветки становятся неканоническими, а их транзакции могут включить снова, если они остаются корректными.

Зачем это спрашивают: Интервьюер проверяет, отличает ли кандидат корректность блока от отдельного правила выбора среди корректных веток.

blockchain

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

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

Зачем это спрашивают: Интервьюер оценивает, понимает ли кандидат и откат состояния, и практическую обработку подтверждений на стороне клиентов.

При вероятностной финальности откат со временем становится менее вероятным, а при экономической финальности он требует наказуемой потери стейка.

  • В proof of work каждый дополнительный блок добавляет работу поверх транзакции, поэтому заменить ее ветку становится все менее вероятно и все дороже.
  • В proof of stake контрольная точка может стать финализированной после того, как за нее проголосует требуемая правилами протокола доля стейка.
  • Для отката экономически финализированной контрольной точки валидаторам пришлось бы нарушить проверяемые правила и рисковать значительной частью стейка.

Зачем это спрашивают: Интервьюер проверяет, может ли кандидат сравнить уверенность от накопленной работы с гарантией финальности, обеспеченной стейком под риском слешинга.

consensusblockchain

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

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

Зачем это спрашивают: Интервьюер проверяет, знает ли кандидат реальные риски контроля цепочки и не считает ли большинство неограниченным доступом к средствам или состоянию протокола.

Слешинг уничтожает часть стейка валидатора, когда криптографические доказательства подтверждают запрещенное действие в консенсусе.

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

Зачем это спрашивают: Интервьюер проверяет, понимает ли кандидат, какое поведение можно доказать, зачем его наказывают и чем слешинг отличается от штрафа за простой.

blockchain

Блокчейны защищаются от атак Сивиллы, связывая влияние в консенсусе с дефицитным ресурсом, а не с числом идентификаторов.

  • Создать тысячи пар ключей почти бесплатно, поэтому одни подписи не доказывают, что ключи принадлежат независимым участникам.
  • Proof of work взвешивает влияние по вложенным вычислениям, для которых нужны оборудование и энергия.
  • Proof of stake взвешивает влияние по заблокированному стейку, поэтому разделение тех же средств между множеством валидаторов не создает дополнительной общей силы голоса.
  • Permissioned-сети могут вместо этого ограничивать участие через проверенные организации, сертификаты или процесс контроля доступа.

Зачем это спрашивают: Интервьюер оценивает, понимает ли кандидат, почему дешевые псевдонимные идентификаторы требуют допуска к консенсусу через ресурс или контролируемое членство.

Закрытые вопросы

  • 21

    Как связаны приватный и публичный ключи?

  • 22

    Почему цифровая подпись не равна шифрованию?

    encryption
  • 23

    Как из публичного ключа получают адрес EOA в Ethereum?

    ethereum
  • 24

    Чем различаются кошелек, аккаунт и приватный ключ?

    wallets
  • 25

    Что такое seed-фраза BIP39 и как она используется для получения ключей HD-кошелька?

    wallets
  • 26

    Какие свойства делают криптографический хеш полезным в блокчейнах?

    blockchain
  • 27

    Что такое дерево Меркла и как работает доказательство Меркла?

    cryptography
  • 28

    Какая информация входит в транзакцию Ethereum?

    ethereumtransactions
  • 29

    Что такое nonce транзакции EOA и почему он важен?

    transactions
  • 30

    Опишите жизненный цикл транзакции Ethereum от подписания до включения в блок.

    ethereumtransactions
  • 31

    Почему выполнение в EVM должно быть детерминированным?

    evm
  • 32

    Как связаны исходный код Solidity и байткод EVM?

    solidevmsolidity
  • 33

    Чем различаются стек, память, хранилище и calldata в EVM?

    evmmemorydata-location
  • 34

    Чем транзакция Ethereum отличается от вызова сообщения?

    ethereumtransactions
  • 35

    Что происходит с изменениями состояния при откате выполнения EVM?

    evmerror-handling
  • 36

    Что такое газ в EVM и как работают лимиты газа транзакции и блока?

    evmtransactionsgas
  • 37

    Как рассчитываются комиссии транзакций по EIP-1559?

    transactions
  • 38

    Чем eth_call отличается от отправки транзакции?

    transactions
  • 39

    Что такое ABI Ethereum и селектор функции?

    ethereum
  • 40

    Как работают события, логи и indexed-параметры в Ethereum?

    indexesethereum
  • 41

    Какие основные части вы ожидаете увидеть в Solidity-контракте?

    solidsolidity
  • 42

    Что делает конструктор Solidity и когда он выполняется?

    solidsolidity
  • 43

    Чем отличаются уровни видимости public, external, internal и private в Solidity?

    csssolidsolidity
  • 44

    Что означают view, pure и payable у функций Solidity?

    solidsolidity
  • 45

    Чем отличаются типы-значения, ссылочные типы и mappings в Solidity?

    soliditydata-structuressolid
  • 46

    Когда в Solidity следует использовать require, revert и assert?

    solidityerror-handlingsolid
  • 47

    В чём разница между receive и fallback в Solidity?

    solidsolidity
  • 48

    Для каких разных задач в Solidity служат наследование, интерфейсы и библиотеки?

    typesoopsolidity
  • 49

    Что определяет интерфейс ERC-20 и как работают события и allowances?

    tokenstypes
  • 50

    Как в ERC-721 работают владение, approvals и безопасные переводы?

    ownershiptokens
  • 51

    Вам нужно выпустить базовый ERC-20 с фиксированным начальным предложением на текущей версии OpenZeppelin Contracts. Как вы его реализуете и проверите?

    tokens
  • 52

    Вашему ERC-20 нужен минт после деплоя, но выпускать токены должен только одобренный сервис. Как вы реализуете и протестируете такой контроль доступа?

    tokensdeployment
  • 53

    Как вы спроектируете в кошельке сценарий approve для ERC-20, чтобы не дать spender больше allowance, чем намеревался пользователь?

    designtokenswallets
  • 54

    Как вы реализуете функцию минта ERC-721 со стабильными метаданными на текущей версии OpenZeppelin Contracts?

    tokens
  • 55

    Вы добавляете платный публичный минт в контракт ERC-721. Как вы безопасно примете ETH и предотвратите ошибочный или повторный минт?

    tokens
  • 56

    Как вы реализуете простое ETH-хранилище, где каждый пользователь может внести и вывести только собственный учтённый баланс?

    secrets
  • 57

    Вы хотите выпускать доли хранилища, чтобы прибыль или убыток распределялись пропорционально. Как вы рассчитаете депозиты и погашения?

    secretsdistributed
  • 58

    Как вы реализуете простой краудфандинговый контракт с целью сбора, deadline, выплатой создателю и возвратами?

    estimation
  • 59

    Как вы реализуете простую продажу ERC-20 по фиксированной цене с жёстким лимитом токенов?

    tokens
  • 60

    Как вы добавите паузу и аварийное управление в контракт, не передавая одному оператору полный контроль?

  • 61

    Функция withdraw отправляет Ether до обнуления баланса вызывающего. Как вы исправите и проверите её?

  • 62

    Контракт выполняет target.call(data) и продолжает работу, не читая результат. Что вы измените?

  • 63

    Административная функция использует require(tx.origin == owner). Как вы её защитите?

  • 64

    Контракт на Solidity 0.8 увеличивает балансы, а ревьюер предлагает обернуть арифметику в unchecked ради экономии газа. Что вы сделаете?

    solidsoliditygas
  • 65

    Функция обмена принимает только amountIn, поэтому другая транзакция может изменить цену до исполнения. Какую защиту вы добавите?

    transactions
  • 66

    На ревью вы обнаружили, что setFee и mint может вызвать кто угодно. Как вы исправите отсутствие контроля доступа?

  • 67

    Функция mint принимает любого получателя и сумму, включая нулевой адрес и ноль. Какую валидацию вы добавите?

    validation
  • 68

    Контракт выплат предполагает, что address(this).balance всегда равен записанным депозитам пользователей. Как сделать этот учёт безопасным?

  • 69

    Функция distribute проходит циклом по всем получателям и с ростом списка перестала помещаться в лимит газа. Как вы предотвратите этот отказ в обслуживании?

    gas
  • 70

    Функция deposit вызывает IERC20(token).transferFrom и игнорирует возвращённый boolean. Как вы защитите это взаимодействие?

    tokens
  • 71

    Функция объявлена как function sum(uint256[] memory values) external pure returns (uint256) и только читает values. Как снизить расход газа?

    memorygas
  • 72

    Контракт объявляет uint128 deposited; uint256 total; uint128 withdrawn; address owner; bool paused. Как улучшить эту раскладку в storage?

  • 73

    Функция withdraw выполняет require(balances[msg.sender] >= amount), а затем balances[msg.sender] = balances[msg.sender] - amount. Как убрать повторное чтение storage?

  • 74

    Функция record одновременно добавляет Payment(msg.sender, amount, block.timestamp) в массив payments в storage и обновляет totalPaid[msg.sender], но историю платежей читает только внешний дашборд. Как её улучшить?

  • 75

    Вывод средств использует require(amount <= balances[msg.sender], "Insufficient balance for requested withdrawal"). Как сделать эту ошибку дешевле и сохранить её полезность для клиентов?

  • 76

    Контракт сохраняет address public owner из конструктора и инициализирует uint256 public feeBps = 30, причём оба значения никогда не меняются. Как улучшить эти объявления?

  • 77

    Контракт хранит address[] members, а isMember перебирает весь массив в поиске аккаунта. Как улучшить проверку членства при росте списка?

  • 78

    Функция getDepositors при каждом вызове копирует в memory весь растущий массив из storage. Как сделать такой getter практичным?

    memory
  • 79

    Цикл использует for (uint256 i; i < values.length; i++) для суммирования массива из calldata. Как оптимизировать только инкремент, не отключая безопасность для суммы?

    optimizationdata-location
  • 80

    На ревью предлагают заменить mapping(address => bool) allowed на написанный вручную bitmap с assembly исключительно ради экономии газа. Как решить, принимать ли это изменение?

    gasdata-structures
  • 81

    Вам нужно протестировать перевод ERC-20 в Hardhat 3. Что вы проверите помимо успешного выполнения транзакции?

    tokenstransactionshardhat
  • 82

    Перевод должен завершиться ошибкой InsufficientBalance(address,uint256,uint256). Как вы протестируете эту custom error в Foundry или Hardhat 3?

    foundryhardhat
  • 83

    Как вы проверите, что перевод ERC-20 испускает правильное событие Transfer?

    tokens
  • 84

    Тесты контракта меняют балансы и права доступа. Как вы изолируете каждый тест в Hardhat 3 и Foundry?

    contractfoundryhardhat
  • 85

    Функция claim доступна до сохранённого deadline. Как вы протестируете временные границы без ожидания в реальном времени?

    estimation
  • 86

    Как вы протестируете функцию только для владельца с несколькими аккаунтами в Hardhat 3 и Foundry?

    foundryhardhat
  • 87

    Как превратить один пример перевода ERC-20 в полезный fuzz-тест Foundry?

    tokensfoundry
  • 88

    Как написать простой invariant-тест Foundry для депозитного контракта, который хранит total managed assets и депозит каждого пользователя?

    foundry
  • 89

    Вы интегрируете развёрнутый price feed. Когда вы выберете fork-тест вместо локального mock?

    mockingdeployment
  • 90

    Как вы проверите, что функция вывода защищена от reentrancy?

    reentrancy
  • 91

    Во фронтенде есть provider ethers.js v6 и аккаунт кошелька. Как создать экземпляр контракта для чтения и для записи?

    walletsethers
  • 92

    Как с помощью ethers.js v6 прочитать баланс ERC-20, отправить перевод и показать в интерфейсе подтверждённый успех?

    tokensethers
  • 93

    После переключения тестнета вызов контракта начал завершаться ошибкой. Как определить, неверны ли ABI, адрес или сеть?

  • 94

    Квитанция перевода ERC-20 содержит несколько логов из вложенных вызовов контрактов. Как извлечь событие Transfer с помощью ethers.js v6?

    tokensethers
  • 95

    WebSocket переподключился, и приложение пропустило несколько событий Transfer. Как надёжно совместить подписку ethers.js и загрузку пропущенных событий?

    websocketsethersbackfill
  • 96

    Как перед отправкой перевода токена применить staticCall и estimateGas в ethers.js v6 и чего эти проверки не гарантируют?

    estimationtokensethers
  • 97

    Вызов staticCall завершился с CALL_EXCEPTION, а Solidity-контракт объявляет InsufficientBalance(address,uint256,uint256). Как декодировать ошибку в ethers.js v6?

    solidsolidityethers
  • 98

    Alice владеет токенами ERC-20, а Bob должен перевести разрешённую сумму Carol. Как реализовать цепочку approve, затем transferFrom через ethers.js v6?

    tokensethers
  • 99

    EIP-1559 транзакция пользователя несколько минут остаётся pending из-за слишком низкой комиссии. Как заменить или отменить её через ethers.js v6?

    transactionsethers
  • 100

    Нужно развернуть Box(address owner, uint256 initialValue) в Sepolia через Hardhat 3 и верифицировать его в обозревателе. Опишите воспроизводимый процесс и поиск ошибки в constructor arguments.

    deploymenthardhatconcurrency