class Bitcoin::TxIn

transaction input

Constants

SEQUENCE_FINAL

Setting nSequence to this value for every input in a transaction disables nLockTime.

SEQUENCE_LOCKTIME_DISABLE_FLAG

If this flag set, TxIn#sequence is NOT interpreted as a relative lock-time.

SEQUENCE_LOCKTIME_MASK

If TxIn#sequence encodes a relative lock-time, this mask is applied to extract that lock-time from the sequence field.

SEQUENCE_LOCKTIME_TYPE_FLAG

If TxIn#sequence encodes a relative lock-time and this flag is set, the relative lock-time has units of 512 seconds, otherwise it specifies blocks with a granularity of 1.

Attributes

out_point[RW]
script_sig[RW]
script_witness[RW]
sequence[RW]

Public Class Methods

new(out_point: nil, script_sig: Bitcoin::Script.new, script_witness: ScriptWitness.new, sequence: SEQUENCE_FINAL) click to toggle source
# File lib/bitcoin/tx_in.rb, line 27
def initialize(out_point: nil, script_sig: Bitcoin::Script.new, script_witness: ScriptWitness.new, sequence: SEQUENCE_FINAL)
  @out_point = out_point
  @script_sig = script_sig
  @script_witness = script_witness
  @sequence = sequence
end
parse_from_payload(payload) click to toggle source
# File lib/bitcoin/tx_in.rb, line 34
def self.parse_from_payload(payload)
  buf = payload.is_a?(String) ? StringIO.new(payload) : payload
  i = new
  hash, index = buf.read(36).unpack('a32V')
  i.out_point = OutPoint.new(hash.bth, index)
  sig_length = Bitcoin.unpack_var_int_from_io(buf)
  if sig_length == 0
    i.script_sig = Bitcoin::Script.new
  else
    i.script_sig = Script.parse_from_payload(buf.read(sig_length))
  end
  i.sequence = buf.read(4).unpack1('V')
  i
end

Public Instance Methods

==(other) click to toggle source
# File lib/bitcoin/tx_in.rb, line 73
def ==(other)
  to_payload == other.to_payload
end
coinbase?() click to toggle source
# File lib/bitcoin/tx_in.rb, line 49
def coinbase?
  out_point.coinbase?
end
has_witness?() click to toggle source
# File lib/bitcoin/tx_in.rb, line 60
def has_witness?
  !script_witness.empty?
end
prev_hash() click to toggle source

return previous output hash (not txid)

# File lib/bitcoin/tx_in.rb, line 78
def prev_hash
  return nil unless out_point
  out_point.tx_hash
end
to_h() click to toggle source
# File lib/bitcoin/tx_in.rb, line 64
def to_h
  sig = script_sig.to_h
  sig.delete(:type)
  h = {txid: out_point.txid, vout: out_point.index,  script_sig: sig }
  h[:txinwitness] = script_witness.stack.map(&:bth) if has_witness?
  h[:sequence] = sequence
  h
end
to_payload(script_sig = @script_sig, sequence = @sequence) click to toggle source
# File lib/bitcoin/tx_in.rb, line 53
def to_payload(script_sig = @script_sig, sequence = @sequence)
  p = out_point.to_payload
  p << Bitcoin.pack_var_int(script_sig.to_payload.bytesize)
  p << script_sig.to_payload << [sequence].pack('V')
  p
end