Lo que es mejor, enlaces API preexistentes de Bitcoin-core para python o funciones de envoltura personalizadas

Lo recomendable es usar el siguiente código para consultar el núcleo de bitcoin en comparación con el uso de alguna biblioteca RPC de Python.

import os
btc_prefix = 'bitcoin-cli '

def getblockcount(btc_prefix):
    print("in getblockcount")
    cmd = ' '.join([btc_prefix, 'getblockcount'])
    response = os.popen(cmd).read()
    return int(response)
getblockcount(btc_prefix)

Es una especie de función contenedora para las API principales. ¿Cuáles son los inconvenientes/ventajas de usar el código anterior? Además, ¿afecta la seguridad de alguna manera?

Respuestas (1)

bitcoin-clies solo un envoltorio para las funciones RPC, por lo que esencialmente está haciendo exactamente lo mismo que una llamada RPC. En general, se prefiere usar RPC ya que no tiene que depender de que el bitcoin-cliejecutable esté en el sistema y en su ruta actual. Lo más probable es que esto no funcione en Windows, por ejemplo.

En general, se prefiere RPC porque puede acceder a él desde otros sistemas. Con su programa, solo podrá ejecutarlo en el sistema que tiene instalado Bitcoin Core, mientras que con RPC, puede ejecutarlo desde otros sistemas.

También tiene una sobrecarga mucho menor, ya que no necesita iniciar un nuevo proceso para cada solicitud.
@PieterWuille ¿Qué tiene una sobrecarga más baja?
@Jimmy ¿No hay una falla de seguridad como tal en mi enfoque?
Usar bitcoin-cli es muy lento. Use JSON-RPC directamente desde su programa; será mucho más flexible y rápido que usar el contenedor binario de Bitcoin Core.
La falla de seguridad en getblockcount es que un atacante puede ejecutar cualquier cosa en su sistema (por ejemplo, pasar btc_prefix como rm -rf /). Le recomiendo encarecidamente que utilice JSON-RPC, que solo ejecutará lo que desee.
@JimmySong Pero luego, como mencionaste, el enfoque que estoy usando no permite que nadie acceda a bitcoind de forma remota (lo cual es necesario en mi caso). Y es un módulo interno que no está expuesto a ninguna API donde puede pasar btc_prefix. Se guarda en un archivo de configuración. ¿Plantea alguna falla de seguridad similar dadas las condiciones?
Si su aplicación interna está bloqueada desde una perspectiva de seguridad, entonces, por supuesto, estará segura independientemente del código que ejecute en ella. Generalmente, cuando solicita una auditoría de seguridad, asume que alguna parte externa tiene acceso.