Я запустил пример реакции трюфельного ящика с отключенной метамаской, и сохраненное значение правильно отображается как 5.
simpleStorageInstance.set(5, {from: accounts[0]})
Однако, когда я включаю плагин Metamask в Chrome, появляется окно Metamask с запросом на одобрение транзакции до вызова SimpleStorage
метода .set
Вопрос: Почему транзакция была автоматически одобрена/подписана при отключенной метамаске, но не при включенной метамаске?
Моя догадка: это потому, что когда Metamask отключен, используемый провайдер web3 — это тот, который предоставляется Truffle, и запущен запуск, truffle develop
когда testrpc
все учетные записи разблокированы и, следовательно, не требуют одобрения каких-либо транзакций?
Ваша догадка полностью верна. Код трюфельного ящика настроен на использование провайдера web3, внедренного в браузер сначала через плагины (MetaMast, Mist, Toshi и т. д.), но есть запасной вариант, который использует локальный testrpc: https://github.com/truffle- коробка/реагировать-коробка/BLOB/fafbd7ae6151338d570f2556fb322e8439552a75/клиент/src/utils/getWeb3.js#L20
Тестовый ПК автоматически принимает все поступающие к нему вызовы и выполняет их с использованием созданных им учетных записей и ключей. В состоянии по умолчанию он мгновенно выполняет те, которые генерируют новые блоки. Это отлично подходит для тестирования и автоматизации — вам не нужно ждать 1-3 минуты для каждого вызова функции, прежде чем вы сможете убедиться, что ваш код работает.
Диалоговое окно подтверждения предоставляется MetaMask как функция для вас — он принимает вызов, предлагает вам принять или отклонить этот вызов, вместо этого подписывает его с помощью ключа, который вы сохранили в MetaMask, а затем передает транзакцию в блокчейн — скорее всего в этом случае вернемся к testrpc.