¿Cómo interactuar con un contrato inteligente de Ethereum implementado?

Quiero crear una interfaz para interactuar con mi contrato inteligente. Tengo un ejemplo del siguiente enlace. Encimera

Antes de implementar mi contrato, intenté usar el ejemplo dado. Pero arroja un error: "No se puede encontrar web3. Ejecute MetaMask (o algo más que inyecte web". Pero puedo ejecutar la dApp desde su sitio web - Encimera

¿Cómo estás probando la aplicación exactamente? ¿Usas una página HTML guardada en tu computadora?
Si puede ejecutar su dApp correctamente (ve los mensajes "encontrado inyectado web3" y "llamada getCount ejecutada correctamente"), significa que tiene Metamask instalado y está conectado. Vuelva a verificarlo por si acaso. ¿Estás incluyendo la biblioteca web3 de la manera correcta? ¿Ves algún error en la consola del navegador (presiona F12 y ve a Consola si estás usando Google Chrome) cuando lo importas o ejecutas tu código?
@ShawnTabrizi Copié el código disponible y lo guardé como página html en mi PC.
@Patricio sí, tengo una cuenta metamask y estoy conectado. No estoy seguro acerca de la biblioteca web3. No instalé web3 en mi PC. Pero puedo usar web3 en geth. Así que no estoy seguro acerca de la ubicación de web3. ¿Tengo que instalar web3 por separado?
@Patricio Descargué web3 y lo almacené en una ubicación. Luego le di la ubicación como <script src=".\dist\web3.min.js"></script>. Ahora se muestra web3 encontrado. Pero no puedo acceder a las funciones. Atascado en algún lugar. Verificaré el problema y agregaré mis dudas como siguiente comentario. Gracias.
@ShawnTabrizi y @Patricio Creé con éxito la interfaz. Pero un problema al que me enfrento es: Error: authentication needed: password or unlock. Para que siempre tenga que desbloquear la cuenta desde la consola geth. He intentado agregar web3.personal.unlockAccount(account1,"password")mi script, pero no funciona.
También tenga en cuenta que las cuentas web3.version.network, web3.eth.accounts tampoco funcionaron.
Desafortunadamente, no sé exactamente cómo resolver ese problema, pero estoy seguro de que si haces una nueva publicación con estos detalles, alguien más puede ayudarte :)
@ShawnTabrizi Está bien. Gracias. Tengo una pregunta más. Ahora cerré el geth y comencé una nueva instancia, pero no obtengo el valor correcto del contador. Siempre se muestra. 0Enviar transacción está funcionando, pero el valor del contador no se incrementa.
¿Desplegó el contrato usted mismo en una red ethereum local o está utilizando la red principal? Y si está utilizando la red principal, ¿ya está completamente sincronizado?
red ethereum.private local en mi pc

Respuestas (1)

Desafortunadamente, no puede usar Metamask en páginas web locales (simplemente abriendo un archivo en su computadora). Se restringe explícitamente :

🌐 Http(s) - Servidor web requerido

Debido a las restricciones de seguridad del navegador, no podemos comunicarnos con dapps que se ejecutan en file://. Utilice un servidor local para el desarrollo.

Deberá publicar su código en un servidor local para probar la funcionalidad de MetaMask.

Visual Studio Code tiene un excelente complemento para hacer esto fácilmente.

Metamask se usa como proveedor de web3, ¿verdad? Entonces, ¿hay alguna otra herramienta que sirva como proveedor de web3? ¿Puedo usar geth? He implementado el contrato usando la consola geth.
Sí, podría usar algo como geth, que tiene una cuenta desbloqueada y suficiente prueba/éter real para completar una transacción. Agregaría una línea que se parece a: web3 = new Web3(new Web3.providers.HttpProvider("http://localhost:8545"));como se muestra aquí .