Proporcionar ganchos de Metamask solo usando un nodo alojado en el servidor

Actualmente estoy buscando alojar un nodo Ethereum en mi servidor web para permitir que mis usuarios interactúen con mis dApps sin necesidad de Metamask (aunque podría usarse). ¿Cómo podría hacer que el código Web3.js del lado del cliente interactúe con mi servidor como el gancho en lugar de lo que Metamask normalmente inyectaría? Si tuviera que incluir el código web3.js en mi servidor y vincularlo en el encabezado, ¿podría simplemente construir el objeto Web3 con mi nodo como proveedor y Metamask ya no sería necesario?

Si Metamask es necesario para los navegadores normales sin importar qué, una explicación de por qué sería muy apreciada. Si lo que he dicho podría funcionar, ¿cómo podría usar mi nodo alojado en el servidor como proveedor (qué puerto usaría y podría usar mi dominio normal) y qué podría hacer para mejorar la seguridad? Mi mayor preocupación es que si todo funciona tan simple como lo sugerí aquí, alguien podría crear un sitio web propio que se conecte a mi nodo y todos comenzarán a usar mi nodo para todos sus sitios web.

Mi servidor está configurado como un servidor LAMP y uso hosts virtuales con nombre para redirigir/controlar el tráfico según lo necesito (¿podría usarse para proteger mi nodo de otros que lo usan?). Preferiría quedarme con mi configuración actual en lugar de cambiar a node.js, pero si es absolutamente necesario para obtener un sitio que funcione sin Metamask, definitivamente lo investigaría.

Respuestas (1)

Trabajo en MetaMask.

Creo que MetaMask principalmente hace dos cosas:

  1. Proporciona un objeto web3 para leer, una fuente de datos de cadena de bloques.
  2. Administra las claves del usuario y, al conectarlas a la API de web3, brinda a los sitios una manera fácil de solicitar que un usuario firme una transacción, sin ceder el control del usuario para aprobar solo lo que desea.

La solución que propusieron sería un reemplazo sencillo de MetaMask en el primer caso que describí. El problema más complicado es la gestión de claves del usuario. ¿Dónde crees que caería eso, en tu configuración LAMP propuesta?

Puede optar por administrar las cuentas de usuario del lado del servidor, almacenar las claves privadas de los usuarios para ellos y solicitar que financien las cuentas cuando comiencen, tal vez facilitando el financiamiento con el widget Coinbase como lo hace MetaMask.

El mayor problema aquí es que el modelo de confianza no está realmente descentralizado. Su servidor se convierte en un punto central de confianza y falla. Si un solo pirata informático obtuviera acceso a su servidor, la cuenta de cada usuario podría vaciarse por completo y todos los activos podrían robarse, de una sola vez.

Parte de la innovación en blockchains es mantener las claves criptográficas de un usuario bajo su propio control. Hay algunas formas decentes de hacer esto sin MetaMask. Mi favorito es si sus usuarios tienen una billetera de hardware, hay algunas bibliotecas decentes para Ledger, por ejemplo, pero la mayoría de las personas no tienen un Ledger.

Antes de MetaMask, la gente hacía muchas cosas inseguras para crear sitios donde los usuarios pudieran interactuar con Ethereum. Cosas como pedirles que carguen claves privadas o darles comandos para copiar y pegar en sus líneas de comando.

Ese es el problema básico que me llevó a decidir trabajar en MetaMask. Esas experiencias de usuario fueron horribles y necesitábamos formas más fáciles de interactuar con Ethereum. Hay algunos modelos nuevos geniales basados ​​en aplicaciones móviles, pero creo que MetaMask sigue siendo muy importante para el escritorio, porque lo hace tan fácil como crear un sitio web para hacer una aplicación compatible con Ethereum.

Espero que esto responda tu pregunta.

Impresionante saber. Tendré que probar esto más a fondo, pero estoy de acuerdo con que el usuario no tenga acceso a una cuenta. Un sitio que le permite ver todo lo que vería un usuario de Metamask pero sin la capacidad de interactuar es una buena alternativa para simplemente dejarlos en el polvo. ¡Gracias de nuevo!