lib/bitcoin/protocol/txout.rb in bitcoin-ruby-0.0.18 vs lib/bitcoin/protocol/txout.rb in bitcoin-ruby-0.0.19
- old
+ new
@@ -1,101 +1,108 @@
# encoding: ascii-8bit
module Bitcoin
module Protocol
-
+ # TxOut section of https://en.bitcoin.it/wiki/Protocol_documentation#tx
class TxOut
-
# output value (in base units; "satoshi")
attr_accessor :value
# pk_script output Script
attr_reader :pk_script, :pk_script_length
# p2sh redeem script (optional, not included in the serialized binary format)
attr_accessor :redeem_script
- def initialize *args
+ def initialize(*args)
if args.size == 2
- @value, @pk_script_length, @pk_script = args[0], args[1].bytesize, args[1]
+ @value = args[0]
+ @pk_script_length = args[1].bytesize
+ @pk_script = args[1]
else
@value, @pk_script_length, @pk_script = *args
end
end
def ==(other)
- @value == other.value && @pk_script == other.pk_script rescue false
+ @value == other.value && @pk_script == other.pk_script
+ rescue StandardError
+ false
end
# parse raw binary data for transaction output
def parse_data(data)
buf = data.is_a?(String) ? StringIO.new(data) : data
parse_data_from_io(buf)
buf.pos
end
def self.from_io(buf)
- txout = new; txout.parse_data_from_io(buf); txout
+ txout = new
+ txout.parse_data_from_io(buf)
+ txout
end
# parse raw binary data for transaction output
def parse_data_from_io(buf)
clear_parsed_script_cache
- @value = buf.read(8).unpack("Q")[0]
+ @value = buf.read(8).unpack('Q')[0]
@pk_script_length = Protocol.unpack_var_int_from_io(buf)
@pk_script = buf.read(@pk_script_length)
end
- alias :parse_payload :parse_data
+ alias parse_payload parse_data
def parsed_script
@parsed_script ||= Bitcoin::Script.new(pk_script)
end
def clear_parsed_script_cache
remove_instance_variable(:@parsed_script) if defined?(@parsed_script)
end
def to_payload
- [@value].pack("Q") << Protocol.pack_var_int(@pk_script_length) << @pk_script
+ [@value].pack('Q') << Protocol.pack_var_int(@pk_script_length) << @pk_script
end
def to_null_payload
self.class.new(-1, '').to_payload
end
def to_hash(options = {})
- h = { 'value' => "%.8f" % (@value / 100000000.0),
- 'scriptPubKey' => parsed_script.to_string }
- h["address"] = parsed_script.get_address if parsed_script.is_hash160? && options[:with_address]
+ h = { 'value' => format('%.8f', (@value / 100_000_000.0)),
+ 'scriptPubKey' => parsed_script.to_string }
+ if options[:with_address]
+ addrs = parsed_script.get_addresses
+ h['address'] = addrs.first if addrs.size == 1
+ end
h
end
def self.from_hash(output)
- amount = output['value'] ? output['value'].gsub('.','').to_i : output['amount']
+ amount = output['value'] ? output['value'].delete('.').to_i : output['amount']
script = Script.binary_from_string(output['scriptPubKey'] || output['script'])
new(amount, script)
end
# set pk_script and pk_script_length
def pk_script=(pk_script)
clear_parsed_script_cache
- @pk_script_length, @pk_script = pk_script.bytesize, pk_script
+ @pk_script_length = pk_script.bytesize
+ @pk_script = pk_script
end
- alias :amount :value
- alias :amount= :value=
+ alias amount value
+ alias amount= value=
- alias :script :pk_script
- alias :script= :pk_script=
+ alias script pk_script
+ alias script= pk_script=
# create output spending +value+ btc (base units) to +address+
def self.value_to_address(value, address)
pk_script = Bitcoin::Script.to_address_script(address)
raise "Script#pk_script nil with address #{address}" unless pk_script
new(value, pk_script)
end
-
end
-
end
end