Saltar al contenido
buybitcoinsmart

Glosario / Nodos y software

RPC

También se conoce como JSON-RPC o Llamada a procedimiento remoto.

¿Qué es RPC?
RPC es la interfaz de comandos que un nodo de bitcoin expone a otros programas, y permite que una billetera, el backend de un exchange o su propia terminal le hagan preguntas y le den instrucciones.

Todo lo que automatiza bitcoin habla con un nodo de esta forma. Bitcoin Core escucha en el puerto 8332 las solicitudes HTTP que llevan JSON, responde a una llamada cada vez y, de forma predeterminada, solo acepta conexiones desde la máquina en la que se ejecuta. Si algún servicio le ha ofrecido alguna vez una estimación de comisión o le ha dicho que un retiro se confirmó, alguna llamada RPC produjo esa respuesta.

Cómo funciona

Una llamada RPC es una solicitud HTTP POST cuyo cuerpo nombra un método y enumera sus argumentos.

Llame a getblockchaininfo y recibirá el nombre de la cadena, la altura actual, el progreso de la verificación y el tamaño en disco. Llame a listunspent o a sendtoaddress y estará manejando la billetera del nodo. Llame a getrawtransaction y obtendrá bytes. El programa bitcoin-cli que viene incluido es una capa fina que construye el JSON, lo envía e imprime la respuesta, así que cualquier cosa que usted pueda escribir en una línea de comandos la puede hacer un programa a través de un socket.

La autenticación tiene una historia que vale la pena conocer. Bitcoin Core eliminó su compatibilidad integrada con SSL en la versión 0.12.0, así que la interfaz habla HTTP sin cifrar y nada más. Esa misma versión introdujo el archivo de cookie, una credencial aleatoria que se escribe en el directorio de datos al arrancar y se reemplaza en cada reinicio, y por eso bitcoin-cli funciona en su propia máquina sin que usted tenga que establecer nunca una contraseña. Para los clientes remotos existe rpcauth, que guarda en el archivo de configuración un hash con sal en lugar de un secreto en texto plano. Sigue sin haber cifrado del transporte, así que llegar a un nodo a través de una red exige un túnel SSH, una VPN o un servicio oculto de Tor, y ninguna otra cosa sirve.

Cada red tiene su propio puerto para que varios demonios (procesos en segundo plano) puedan compartir una misma máquina: 8332 en la mainnet, 18332 en la testnet3, 48332 en la testnet4, 38332 en la signet y 18443 en la regtest. El puerto RPC de la mainnet está justo por debajo del 8333, el puerto entre pares, y confundir los dos es un error habitual de principiante.

El dialecto ha evolucionado despacio. Bitcoin Core respondió con una variante laxa de JSON-RPC 1.0 durante bastante más de una década, y la versión 28.0 enseñó al servidor a reconocer las solicitudes JSON-RPC 2.0 y a responder en estricta conformidad con esa especificación, sin dejar de aceptar el estilo antiguo. Las llamadas propias de una billetera se dirigen por ruta, de modo que un nodo con varias billeteras las enruta a través de /wallet/ seguido del nombre de la billetera.

Dónde aparece

RPC es el punto de unión entre bitcoin en sí y todos los productos construidos sobre él.

Una implementación Lightning pide bloques a un nodo y difunde a través de él las transacciones de cierre. Los exploradores de bloques, los paneles de la mempool y los procesadores de pagos como BTCPay Server se apoyan en una instancia de bitcoind y la envuelven en algo más amigable. El sistema de retiros de un exchange es, en su capa más baja, una cola de llamadas RPC sendrawtransaction. Cuando nuestras reseñas de exchanges señalan que una plataforma agrupa los retiros por lotes, ese procesamiento por lotes ocurre en un código que acaba aquí.

También es aquí donde las instalaciones autoalojadas quedan comprometidas. El puerto 8332 se escanea constantemente, y un nodo expuesto abiertamente a internet con una contraseña fácil de adivinar y una billetera cargada es una billetera que alguien dejará sin fondos. Mantenga la interfaz limitada a la máquina local y acceda por un túnel si la necesita desde otro lugar.

RPC frente a orden de bytes RPC

RPC y el orden de bytes RPC comparten unas siglas y nada más, y eso causa errores reales. RPC es la interfaz. El orden de bytes RPC es una convención de presentación: los hash de bloque y de transacción se calculan y se envían en un orden y la capa RPC los imprime invertidos, y por eso un txid copiado de un explorador de bloques aparece invertido en comparación con los mismos 32 bytes dentro de una transacción en bruto. Pase un txid copiado directamente a un analizador de bytes sin invertirlo y la búsqueda simplemente nunca coincidirá.

No confundir con

Preguntas frecuentes

¿Es seguro exponer a internet el puerto RPC de un nodo de bitcoin?

No. Bitcoin Core eliminó la compatibilidad de RPC con SSL en la versión 0.12.0, así que la interfaz es HTTP sin cifrar, y el puerto 8332 se escanea de forma continua. Limítelo a la máquina local y, en su lugar, acceda a él mediante un túnel SSH, una VPN o un servicio oculto de Tor.

¿Por qué bitcoin-cli funciona sin contraseña?

Porque Bitcoin Core escribe una credencial de cookie aleatoria en su directorio de datos al arrancar y bitcoin-cli la lee de ahí. El archivo se reemplaza en cada reinicio, así que la credencial solo funciona desde la misma máquina y solo durante la sesión actual.

Términos relacionados

Más en la sección Nodos y software

Leer esta página en inglés