Tengo problemas con la gema bitcoin-ruby. Recibo el siguiente error cuando intento enviar dinero a otra dirección que tengo en la red de prueba:
/var/lib/gems/2.2.0/gems/bitcoin-ruby-0.0.7/lib/bitcoin/protocol/txout.rb:76:in
pk_script=': undefined method
bytesize' for nil:NilClass (NoMethodError)
Estoy generando una clave privada con:
def new_address
Bitcoin::generate_address
end
Y obtener detalles de la clave privada con:
def key_details(prikey, pubkey)
#returns prikey, prikey_hash58, pubkey_hash58, pubkey_uncompressed, address as a hash
my_key = Bitcoin::Key.new(prikey, pubkey)
{ prikey:prikey,
prikey_base58:my_key.to_base58,
pubkey_58:my_key.hash160,
pubkey: my_key.pub_uncompressed,
address:my_key.addr
}
end
El código que tengo para enviarme dinero a mí mismo es el siguiente:
require 'bitcoin'
require_relative 'utilities.rb'
require 'open-uri'
Bitcoin.network = :testnet3
def build_transaction(prev_tx, prev_out_index, key, value, addr, message)
include Bitcoin::Builder
new_tx = build_tx do |t|
t.input do |i|
i.prev_out prev_tx
i.prev_out_index prev_out_index
i.signature_key key
end
t.output do |o|
o.value value
o.script {|s| s.type :address; s.recipient addr }
end
end
end
def prev_tx(prev_hash, network)
if network == "testnet3"
prev_tx = Bitcoin::P::Tx.from_json(open("http://test.webbtc.com/tx/#{prev_hash}.json"))
else
prev_tx = Bitcoin::P::Tx.from_json(open("http://webbtc.com/tx/#{prev_hash}.json"))
end
end
def key(publ_key, priv_key)
key = Bitcoin::Key.new(priv_key, publ_key)
end
def bin_to_hex(s)
s.unpack('H*').first
end
#transaction inputs
priv_key = "private_key"
publ_key = "public_key_long_format"
address = "address"
previous_tx = "previous_tx_hash"
# generate tx info off inputs
key = Bitcoin::Key.new(priv_key, publ_key)
prev_tx = prev_tx(previous_tx, "testnet3")
prev_out_index = 1
tx_value = prev_tx.outputs[prev_out_index].value
# build new tx
tx = build_transaction(prev_tx, prev_out_index, key, tx_value, address, "hello")
#
# puts tx.to_json
puts bin_to_hex(tx.to_payload)
Debido a la falta de respuestas aquí, publiqué esta pregunta en el canal stackoverflow. Aquí hay un enlace con la respuesta: