Mastering Bitcoin

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

Ir a la siguiente página

Report Page