Uso de un socket de Linux para conectarse a la consola de JavaScript

Estoy tratando de conectarme mediante programación a una consola de JavaScript (tal como lo hace con geth attach) usando el archivo geth.ipc que se crea en la carpeta chaindata. En Linux, es un archivo de socket, así que pensé que podría conectarme con algo como esto (en Python):

import socket

client = socket.socket( socket.AF_UNIX, socket.SOCK_STREAM )
client.connect("/home/john/Desktop/EthPrivateChain/chaindata/geth.ipc")

client.send(str.encode("admin.nodeInfo.enode"))
print(str(client.recv(1024)))

client.close()

Sin embargo, esto me da el JSON RPC, no la consola de JavaScript. El código funciona pero el punto final devuelve un error cuando intento esto. Funciona el mismo código, pero con una solicitud JSON. Quiero la consola de JavaScript porque quiero poder acceder a algunas cosas que no están disponibles a través de JSON RPC, específicamente el enodo en este caso. Creo que tiene que haber una forma de conectarse a ese archivo de esta manera porque puedo usarlo para iniciar una consola con geth attach /home/john/Desktop/EthPrivateChain/chaindata/geth.ipc. ¿Hay alguna manera de hacer que este archivo de socket acceda a la API de JavaScript cuando accedo a él con mi propio código?

Respuestas (1)

El comando geth attachsolo crea su propio bucle de evaluación de lectura de javascript, pero aún usa los comandos JSON-RPC para hablar con el nodo geth a través del archivo ipc.

Geth proporciona conjuntos de comandos más avanzados a los que solo se puede acceder mediante JSON-RPC que son gethsolo API de administración .

Se puede acceder a algunas de estas API desde javascript con web3Admin .

Para cualquier otra persona que intente hacer esto, la documentación de la API de administración dice que debe habilitar explícitamente estas API en la línea de comando cuando inicia Geth, pero no tuve que hacerlo. Estaban habilitados por defecto en Geth 1.7.3.
@JohnStanford Están habilitados de manera predeterminada si usa IPC, pero debe habilitarlos explícitamente si usa la interfaz RPC.