¿Cómo obtener el valor de retorno de la función const del sitio web?

Ok, mi problema es que mi sitio web está alojado con un servicio de terceros, por lo que no puedo ejecutar geth en el mismo servidor que mi sitio. Sin embargo, también tengo un VPS separado que puedo configurar nodejs y una página web3js o geth para interactuar con mis contratos.

Mi objetivo es llamar a una función constante en mi contrato y mostrar el resultado en mi sitio web. ¿Hay alguna forma de interactuar con mi VPS desde mi sitio web y llamar a funciones constantes? ¿Hay una mejor manera de resolver mi problema?

Si ejecuto un nodo en mi vps, ¿puedo usar web3js en mi sitio para llamar a funciones? ¿Qué pasa con las transacciones?

Respuestas (2)

Ejecute un nodo Parity o Geth alojado en algún lugar de Internet y exponga la interfaz JSON-RPC a Internet (puerto HTTP 8545). Asegúrese de que este nodo no tenga ninguna clave adjunta, no las necesitará para su uso.

Desde su sitio web, querrá hacer una publicación HTTP sobre JSON-RPC al eth_callmétodo . Puede ver el ejemplo de curl en ese enlace para obtener detalles sobre cómo estructurar la llamada.

Sin embargo, en lugar de intentar construir manualmente los parámetros, le recomiendo que use una biblioteca auxiliar como web3, ethjs o parity.js. Puede ver un ejemplo completo de cómo llamar a una función constante en la documentación de ethjs si elige seguir esa ruta. Simplemente cambie el ABI para que coincida con el ABI de su método (puede obtenerlo de una herramienta como remix o la salida del compilador Solidity) y cambie la dirección HTTP a la de su nodo.

¿Cómo me aseguro de que ahora hay claves adjuntas al nodo?
Si es un nodo nuevo, no tendrá ninguna clave. Solo asegúrate de no agregar ninguno y estarás bien. :). Si agrega claves, puede eliminarlas (varía según el cliente).
Bien, una última pregunta. Si quisiera llamar a una transacción en lugar de una constante, necesitaría claves. ¿Hay una manera segura de hacer esto? ¿De modo que los usuarios de mi sitio no puedan acceder a mis claves/transacciones de llamadas?
Puede firmar una transacción en un servidor que controle (asegurando sus claves de cualquier manera que tenga sentido para usted) y luego enviar esa transacción a su nodo público. El acto de firmar una transacción y enviar una transacción a la cadena de bloques pueden ser acciones separadas, hacerlo al mismo tiempo utilizando claves almacenadas en el nodo es simplemente una conveniencia. Para hacer esto, querrá usar github.com/paritytech/parity/wiki/… después de haber firmado la transacción en su servidor seguro.

No estoy seguro de si esto es lo que está buscando, y ciertamente no es una solución descentralizada, pero es posible que desee buscar un servicio llamado Infura. Proporciona acceso a la interfaz RPC de un nodo y lo hace con un nivel muy alto de disponibilidad. Es totalmente centralizado, pero ese es un tema diferente.