Ich verwende diese Bibliothek: https://github.com/lian/bitcoin-ruby
Und hier ist mein Code:
require 'open-uri'
require 'net/http'
require 'net/https'
require 'json'
require 'bitcoin'
Bitcoin.network = :testnet3
def get_response(prev_tx)
url = "https://testnet.blockexplorer.com/api/rawtx/#{prev_tx}"
uri = URI(url)
response = Net::HTTP.get(uri)
response = JSON.parse(response)
response = response['rawtx'].to_s
return response
end
def build_transaction(prev_tx, prev_out_index, key, satoshi_to_spend, 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 satoshi_to_spend
o.script {|s| s.type :address; s.recipient addr }
end
end
puts ""
puts "--- new tx ---"
puts new_tx.to_json
return new_tx
end
def bin_to_hex(s)
s.unpack('H*').first
end
bitcoin_key_1_pub = "0367e6251a89c5afc1212c3e2169866ccfe9d6059a4cfc15dc139b534b974fd7ca"
bitcoin_key_1_priv = "*****24c56528becd02d23076123a2edc2f3cf52c3c0202178c1b7fa9ac*****"
bitcoin_key_1_addr = "mxz4hu6JrTHevn22W4GDVjS3ko9MwXuHND"
# the previous transaction that has an output to your address #1
prev_tx_1 = "427138ed5f2443fbfbf8065e990f1bf9ce0236e14376e8abca0b2876eabca653"
# the number of the output you want to use
prev_out_index = 1
# 0.5 BTC in satoshis
btc_to_spend = 0.5
satoshi_to_spend = btc_to_spend * 100000000
bitcoin_key_2_pub = "02989d0578f715a1980d4d6e968bcba487077e74aaf8a219d11ee4384ea1fc1eda"
bitcoin_key_2_priv = "*****cb521a27f9782cc503b461bf5c6b470469ca00ba1d7dc26f4ab61b*****"
bitcoin_key_2_addr = "n4SYP6TJyK7pUouW65fnC1hDBrbb7Za8RR"
# fetch the tx from whereever you like and parse it
response = get_response(prev_tx_1)
$prev_tx = Bitcoin::P::Tx.new(response.htb)
prev_tx = $prev_tx
tx_value = prev_tx.outputs[prev_out_index].value
puts "tx_value: #{tx_value}"
key = Bitcoin::Key.new(bitcoin_key_1_priv, bitcoin_key_1_pub)
tx = build_transaction(prev_tx, prev_out_index, key, satoshi_to_spend, bitcoin_key_2_addr, "hello")
puts ""
puts "--- bin_to_hex ---"
puts bin_to_hex(tx.to_payload)
Hier ist die Ausgabe:
➜ examples git:(master) ✗ ruby sandbox.rb
tx_value: 75972791
/Users/glaksmono/.rvm/gems/ruby-2.4.2/gems/bitcoin-ruby-0.0.18/lib/bitcoin/script.rb:281: warning: constant ::Fixnum is deprecated
/Users/glaksmono/.rvm/gems/ruby-2.4.2/gems/bitcoin-ruby-0.0.18/lib/bitcoin/script.rb:455: warning: constant ::Fixnum is deprecated
--- new tx ---
/Users/glaksmono/.rvm/gems/ruby-2.4.2/gems/bitcoin-ruby-0.0.18/lib/bitcoin/script.rb:261: warning: constant ::Fixnum is deprecated
{
"hash":"88217866a40829f144e2d2c19b2e506812ae013d08d9335ce8fa839582f1b18e",
"ver":1,
"vin_sz":1,
"vout_sz":1,
"lock_time":0,
"size":191,
"in":[
{
"prev_out":{
"hash":"427138ed5f2443fbfbf8065e990f1bf9ce0236e14376e8abca0b2876eabca653",
"n":1
},
"scriptSig":"304402201cf2d99b7f10c71a1c77ae629ec134a3f255c0027f47815aff3e43d500e6da46022008409ea148d6cce6876910c7a7218b8197c3a827a6a7bf3d5f064a3ed3a0616701 0367e6251a89c5afc1212c3e2169866ccfe9d6059a4cfc15dc139b534b974fd7ca"
}
],
"out":[
{
"value":"0.50000000",
"scriptPubKey":"OP_DUP OP_HASH160 fb75447d6038b05bb736e5b05f18a3c9da2b34db OP_EQUALVERIFY OP_CHECKSIG"
}
]
}
--- bin_to_hex ---
010000000153a6bcea76280bcaabe87643e13602cef91b0f995e06f8fbfb43245fed387142010000006a47304402201cf2d99b7f10c71a1c77ae629ec134a3f255c0027f47815aff3e43d500e6da46022008409ea148d6cce6876910c7a7218b8197c3a827a6a7bf3d5f064a3ed3a0616701210367e6251a89c5afc1212c3e2169866ccfe9d6059a4cfc15dc139b534b974fd7caffffffff0180f0fa02000000001976a914fb75447d6038b05bb736e5b05f18a3c9da2b34db88ac00000000
Es scheint erfolgreich zu sein, aber ich sehe nicht, dass die BTC im Blockcypher Explorer tatsächlich von bitcoin_key_1_addr
nach übertragen wird:bitcoin_key_2_addr
bitcoin_key_1_addr
URL: https://live.blockcypher.com/btc-testnet/address/mxz4hu6JrTHevn22W4GDVjS3ko9MwXuHND/
bitcoin_key_2_addr
URL: https://live.blockcypher.com/btc-testnet/address/n4SYP6TJyK7pUouW65fnC1hDBrbb7Za8RR/
Wie Sie im Blockcypher Explorer feststellen, wird der BTC-Betrag noch nicht von bitcoin_key_1_addr
nach transferiert bitcoin_key_2_addr
. Ideen?
Beschlossen, die BlockCypher-API zu verwenden, und es funktioniert einfach. Folgen Sie einfach diesem CURL-Beispiel: https://gist.githubusercontent.com/matthieu/b07c5ba27bc99188a15f/raw/870a9d0e1bdd05a6230acde359e6953add15621a/gistfile1.sh
Und Sie können das immer in die Sprache übersetzen, die Sie verwenden möchten. In meinem Fall verwende ich Ruby.
Andreas Chow
0xgoku
0xgoku
Andreas Chow
0xgoku
Andreas Chow
0xgoku
Andreas Chow