Obtener datos del contrato a la DApp sin proveedor

Tengo una DApp que usa metamask o mist como proveedor. La DApp puede leer alguna información del contrato y mostrarla en la página usando niebla o metamáscara. ¿Es posible leer el contrato y mostrar información sin usar metamask o mist?

Creo que tengo algunas opciones: 1) Ejecutar un nodo en un servidor dedicado y simplemente abrir el servidor local predeterminado: 8545 para usarlo como proveedor. Pero entonces habrá muchos problemas de seguridad... 2) Tal vez usar algunos nodos públicos como infura.io o blackapps.net(?)

Solo quiero saber la forma correcta de hacerlo. Gracias.

Respuestas (2)

Puede ejecutar el nodo ethereum en un servidor dedicado como mencionó, pero en lugar de abrir el puerto 8545 y hablar con él directamente, cree un servidor API nodeJS en esa instancia (que usará web3.js) y hable con ese servidor nodejs en su lugar.

El servidor NodeJS se comunicará con el nodo Ethereum con la ayuda de las API web3.js, lo que hará que su diseño sea seguro y no se podrá acceder al nodo Ethereum desde el exterior.

Espero que esto ayude.

Entonces, si hay un proveedor como meta o mist, debería usarlos. Entonces, si no hay un proveedor, debería enviar solicitudes HTTP a mi servidor NodeJS, ¿verdad? Realmente no trabajé con backend, así que lo siento si me equivoqué en algo. Una pregunta más: en mi contrato hay funciones que solo pueden ser ejecutadas por la dirección del propietario. ¿Significa que si quiero que los usuarios obtengan información a través de mi cuenta de propietario, debo agregar nuevas funciones para que no obtengan más información de la que deberían? ¿O solo necesito implementar el contrato desde una cuenta y luego usar otro para usarlo en el servidor nodejs? ¡Gracias de todos modos!
NodeJS funcionará como un middleware y tiene que haber un proveedor en segundo plano para que su DApp funcione y la interfaz de usuario de su DApp se comunicará con el servidor NodeJS a través de solicitudes HTTP como mencionó.
No es necesario implementar otro contrato. Puede crear otro modificador como OnlyMember, que no tendrá privilegios de propietario pero podrá acceder a cierta información a la que desea que accedan.
Implementé el modificador OnlyMember en uno de los contratos que escribí, puede buscar la referencia: github.com/inovizz/lms/blob/master/contracts/LMS.sol
gracias, pero quise decir que si uso el servidor nodejs que interactúa con el nodo ethereum usando mi cuenta de implementación, eso significa que todas las solicitudes HTTP al servidor nodejs serán procesadas por este servidor usando mi contrato de 'propietario', lo que significa que el mensaje. el remitente será el propietario y el modificador onlyMember no tiene mucho sentido. Es por eso que pregunté que tal vez de alguna manera debería usar otro contrato en mi nodo ethereum, no el que usé para implementar el contrato.
Siempre puede controlar desde qué cuenta se realiza la transacción (la llamada a la función). De forma predeterminada, sería las cuentas [0] o eth.coinbase, pero si desea utilizar alguna otra cuenta para una llamada de función específica. Puede hacerlo así: ContractName.function(arg, {from: accounts[i]}). En este caso, msg.sender no sería el propietario (cuentas [0]).
¡Lo tengo. Gracias! Voy a tratar de. Pero aún esperaba que tal vez haya otras formas de hacerlo, porque ¿por qué lo llamamos Aplicación descentralizada si todavía usamos una arquitectura bastante centralizada usando un servidor típico?

Si bien puede ir en contra del "Ethos" de la comunidad, hemos descubierto que es mucho más fácil usar un nodo como proveedor de servicios como Infura o Alchemy . Tener que administrar su propio nodo puede ser un dolor de cabeza con las bifurcaciones de Ethereum y la administración de errores en Parity/Geth.