Mastering Bitcoin
5. El Cliente Bitcoin » Clientes Alternativos, Bibliotecas y Kits de Herramientas » btcd
Página 27 de 98
pycoin
La biblioteca Python pycoin, originalmente escrita y mantenida por Richard Kiss, es una biblioteca escrita en Python que soporta manipulación de claves y transacciones bitcoin, soportando inclusive el lenguaje de scripting lo suficiente como para lidiar apropiadamente con transacciones no estándar.
La biblioteca pycoin soporta tanto Python 2 (2.7.x) como Python 3 (para versiones mayores a 3.3) y viene con algunas utilidades de línea de comandos prácticas, ku y tx. Para instalar pycoin 0.42 bajo Python 3 en un entorno virtual (venv), utilice lo siguiente:
$ python3 -m venv /tmp/pycoin
$ . /tmp/pycoin/bin/activate
$ pip install pycoin==0.42
Downloading/unpacking pycoin==0.42
Downloading pycoin-0.42.tar.gz (66kB): 66kB downloaded
Running setup.py (path:/tmp/pycoin/build/pycoin/setup.py) egg_info for package pycoin
Installing collected packages: pycoin
Running setup.py install for pycoin
Installing tx script to /tmp/pycoin/bin
Installing cache_tx script to /tmp/pycoin/bin
Installing bu script to /tmp/pycoin/bin
Installing fetch_unspent script to /tmp/pycoin/bin
Installing block script to /tmp/pycoin/bin
Installing spend script to /tmp/pycoin/bin
Installing ku script to /tmp/pycoin/bin
Installing genwallet script to /tmp/pycoin/bin
Successfully installed pycoin
Cleaning up…
$
Aquí hay un script Python de ejemplo para traer y gastar algunos bitcoins usando la biblioteca pycoin:
#!/usr/bin/env python
from pycoin.key import Key
from pycoin.key.validate import is_address_valid, is_wif_valid
from pycoin.services import spendables_for_address
from pycoin.tx.tx_utils import create_signed_tx
def get_address(which):
while 1:
print("enter the %s address=> " % which, end='')
address = input()
is_valid = is_address_valid(address)
if is_valid:
return address
print("invalid address, please try again")
src_address = get_address("source")
spendables = spendables_for_address(src_address)
print(spendables)
while 1:
print("enter the WIF for %s=> " % src_address, end='')
wif = input()
is_valid = is_wif_valid(wif)
if is_valid:
break
print("invalid wif, please try again")
key = Key.from_text(wif)
if src_address not in (key.address(use_uncompressed=False),
key.address(use_uncompressed=True)):
print("** WIF doesn't correspond to %s" % src_address)
print("The secret exponent is %d" % key.secret_exponent())
dst_address = get_address("destination")
tx = create_signed_tx(spendables, payables=[dst_address], wifs=[wif]) print("here is the signed output transaction")
print(tx.as_hex())
Par a ejemplos usando las utilidades de línea de comandos ku y tx, ver [appdxbitcoinimpproposals].
btcd
btcd es una implementación de nodo completo bitcoin escrita en Go. Actualmente descarga, valida y sirve la cadena de bloques usando las mismas reglas (incluyendo errores) para aceptación de bloques que la implementación de referencia, bitcoind. También transmite correctamente bloques recientemente minados, mantiene una reserva de transacciones y transmite transacciones individuales que no han sido aún ingresadas en un bloque. Se asegura de que todas las transacciones individuales admitidas en la reserva sigan las reglas requeridas y también incluye la vasta mayoría de los chequeos más estrictos de filtrado de transacciones basados en requerimientos de mineros (transacciones «estándar»).
Una diferencia clave entre btcd y bitcoind es que btcd no incluye la funcionalidad de cartera, y ésta fue una decisión de diseño muy intencional. Esto significa que no puedes crear o recibir pagos directamente con btcd. Esa funcionalidad está provista por los proyectos btcwallet y btcgui, ambos cuales se encuentran bajo activo desarrollo. Otras diferencias notorias entre btcd y bitcoind incluyen el soporte de btcd para solicitudes HTTP POST (como bitcoind) y el método preferido de Websockets, y el hecho de que las conexiones RPC de btcd habilitan TLS por defecto.
Instalando btcd
Para instalar btcd en Windows, descargue y ejecute el msi disponible en GitHub, o ejecute el siguiente comando en Linux, asumiendo que ya tiene instalado el lenguaje Go:
$ go get github.com/conformal/btcd/…
Para actualizar btcd a la versión más reciente simplemente ejecute:
$ go get -u -v github.com/conformal/btcd/…
Controlando btcd
btcd posee un número de opciones de configuración, las cuales puede ver ejecutando: $ btcd --help btcd viene preempaquetado con algunas utilidades tales como btcctl, el cual es un programa de línea de comandos que puede ser usado tanto para controlar como para consultar btcd a través de RPC. El cliente btcd no habilita su servidor RPC por defecto; debe configurar como mínimo un nombre de usuario y contraseña RPC en los archivos de configuración siguientes:
btcd.conf
:
[Application Options]
rpcuser=myuser
rpcpass=SomeDecentp4ssw0rd
btcctl.conf
:
[Application Options]
rpcuser=myuser
rpcpass=SomeDecentp4ssw0rd
O si prefiere sobrescribir los archivos de configuración desde la línea de comandos:
$ btcd -u myuser -P SomeDecentp4ssw0rd
$ btcctl -u myuser -P SomeDecentp4ssw0rd
Para una lista de las opciones disponibles, ejecute lo siguiente:
$ btcctl --help