Путаница между включенным и отключенным MetaMask

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

simpleStorageInstance.set(5, {from: accounts[0]})

Однако, когда я включаю плагин Metamask в Chrome, появляется окно Metamask с запросом на одобрение транзакции до вызова SimpleStorageметода .set

Вопрос: Почему транзакция была автоматически одобрена/подписана при отключенной метамаске, но не при включенной метамаске?

Моя догадка: это потому, что когда Metamask отключен, используемый провайдер web3 — это тот, который предоставляется Truffle, и запущен запуск, truffle developкогда testrpcвсе учетные записи разблокированы и, следовательно, не требуют одобрения каких-либо транзакций?

Ответы (1)

Ваша догадка полностью верна. Код трюфельного ящика настроен на использование провайдера web3, внедренного в браузер сначала через плагины (MetaMast, Mist, Toshi и т. д.), но есть запасной вариант, который использует локальный testrpc: https://github.com/truffle- коробка/реагировать-коробка/BLOB/fafbd7ae6151338d570f2556fb322e8439552a75/клиент/src/utils/getWeb3.js#L20

Тестовый ПК автоматически принимает все поступающие к нему вызовы и выполняет их с использованием созданных им учетных записей и ключей. В состоянии по умолчанию он мгновенно выполняет те, которые генерируют новые блоки. Это отлично подходит для тестирования и автоматизации — вам не нужно ждать 1-3 минуты для каждого вызова функции, прежде чем вы сможете убедиться, что ваш код работает.

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