¿Cómo conectar Ethereum RPC Client a un servidor remoto?

Tengo un nodo Ethereum ejecutando el servidor JSON RPC en este ejemplo de IP 136.10.164.134. Entonces quiero usar un cliente para enviar algunos datos. Veo esta biblioteca para hacer el cliente.

Pero no puedo conectarme a mi servidor. Recibí este error:

requests.exceptions.ConnectionError: HTTPConnectionPool(host='136.10.164.134', port=8545): 
Max retries exceeded with url: / (Caused by NewConnectionError
('<requests.packages.urllib3.connection.HTTPConnection object at 0x10ecfacd0>: 
Failed to establish a new connection: [Errno 61] Connection refused',))

Acabo de poner estas 3 líneas como se menciona en la documentación como esta en mi secuencia de comandos de python:

from eth_rpc_client import Client
client = Client(host="136.10.164.134", port="8545")
client.get_coinbase()

Creo que no puedo conectarme a mi servidor porque la contraseña no está definida en mi script. ¿Cómo puedo enviar la contraseña del servidor en el cliente ethereum rpc?

Editar

Ok, ahora solucioné el problema de conexión. Reconfiguré la paridad con esta línea de comando:

geth --rpc --rpcaddr <ip> --rpcport <portnumber>

Y configuré mi IP en el objeto web3:

var Web3 = require('web3');
var web3 = new Web3();
web3.setProvider(new Web3.providers.HttpProvider('http://136.10.164.134:8545'));
web3.eth.syncing

Pero ahora tengo otro problema. tengo este error:

ValueError: No JSON object could be decoded

Estoy viendo la red con Charles y puedo ver esto:

415 Unsupported Media Type
Supplied content type is not allowed. Content-Type: application/json is required

Por supuesto, el tipo de contenido enviado es text/html; charset=utf-8.

¿Cómo puedo cambiar el tipo de contenido con este cliente Ethererum rpc?

Mi cuenta ya está desbloqueada. Pero el problema era la configuración de paridad. Tengo que hacer este comando: geth --rpc --rpcaddr <ip> --rpcport <portnumber>y cambiar la ip web3 de esta manera: web3.setProvider(new Web3.providers.HttpProvider('http://136.10.164.134:8545'));en lugar del host local. Pero ahora tengo un problema con el tipo de contenido.
¿Puedes publicar el código js completo? Los clientes de Ethereum solo devuelven objetos JSON. La razón por la que recibe el error es porque no está tratando la respuesta, que es un objeto JSON, como un objeto JSON.
Ya pegué todo mi código. Sólo tengo estas 4 líneas.
¿Quizás tienes una biblioteca mejor cliente de Python para ethereum json rpc?
@john no debes usar ethereum-rpc-client. Ya no es compatible. Eche un vistazo a web3.py si desea una opción de python para conectarse a un servidor RPC.
@Sebi Muchas gracias por tu explicación y tu ayuda. Eso fue realmente útil. #PiperMerriam Gracias por el enlace. Le daré un vistazo.
@John, es posible que desee considerar publicar su "Solución de trabajo Edit 2" como respuesta y autoaceptar su respuesta después de uno o dos días. Esto borrará su pregunta de la cola sin respuesta.

Respuestas (1)

solución de trabajo

Bueno, como dijo @PiperMerriam, usé esta biblioteca web3.py. La biblioteca anterior que usé no está más actualizada. Ahora puedo conectar python web3 a mi nodo de servidor remoto de esta manera:

# Import
from web3 import Web3, HTTPProvider

# Connection to the remote server
web3rpc = Web3(HTTPProvider(host="136.10.164.134", port="8545")) 

# Unlock your account
duration = 1000
web3rpc.personal.unlockAccount(web3rpc.eth.coinbase, 'your-passphrase', duration)

# Syncing check
web3rpc.eth.syncing

# Transaction from account A to account B
web3rpc.eth.sendTransaction({'to': 'your_token_account', 'from': web3rpc.eth.coinbase, 'value': web3rpc.toWei(1, "wei"), 'data': web3rpc.toHex('Test Transaction')})