Confusión entre MetaMask habilitado y deshabilitado

Ejecuté el ejemplo de reacción de la caja de trufas con Metamask deshabilitado y el valor almacenado se muestra correctamente como 5.

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

Sin embargo, cuando habilito el complemento Metamask en Chrome, aparece la ventana Metamask solicitando que se apruebe la transacción, antes de llamar al SimpleStoragemétodo .set

Pregunta: ¿Por qué la transacción fue aprobada/firmada automáticamente cuando Metamask está deshabilitado, pero no cuando Metamask está habilitado?

Mi conjetura: ¿Es esto porque cuando Metamask está deshabilitado, el proveedor web3 utilizado es el que proporcionó Truffle, y comenzó a ejecutarse truffle developdonde testrpctodas las cuentas están desbloqueadas y, por lo tanto, no requieren aprobación para ninguna transacción?

Respuestas (1)

Tu conjetura es completamente correcta. El código de la caja de trufas está configurado para usar el proveedor web3 inyectado en el navegador a través de complementos primero (MetaMast, Mist, Toshi, etc.), pero hay una alternativa que usa el testrpc local: https://github.com/truffle- cuadro/react-box/blob/fafbd7ae6151338d570f2556fb322e8439552a75/client/src/utils/getWeb3.js#L20

La PC de prueba acepta automáticamente todas las llamadas que se le hacen y las completa utilizando las cuentas y claves que ha creado. En su estado por defecto ejecuta instantáneamente los que generan nuevos bloques. Esto es excelente para la prueba y la automatización: no desea tener que esperar de 1 a 3 minutos por llamada de función antes de poder verificar que su código funcione.

MetaMask le proporciona el cuadro de diálogo de confirmación como una característica: recibe la llamada, le pide que la acepte o la rechace, la firma en su lugar con la clave que ha almacenado en MetaMask y luego transmite la transacción a la cadena de bloques. probablemente en este caso de vuelta a testrpc.