Class: Bitcoin::TxIn

Inherits:
Object
  • Object
show all
Defined in:
lib/bitcoin/tx_in.rb

Overview

transaction input

Constant Summary collapse

SEQUENCE_FINAL =

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

0xffffffff
SEQUENCE_LOCKTIME_DISABLE_FLAG =

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

(1 << 31)
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.

(1 << 22)
SEQUENCE_LOCKTIME_MASK =

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

0x0000ffff

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(out_point: nil, script_sig: Bitcoin::Script.new, script_witness: ScriptWitness.new, sequence: SEQUENCE_FINAL) ⇒ TxIn

Returns a new instance of TxIn.



27
28
29
30
31
32
# 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

Instance Attribute Details

#out_pointObject

Returns the value of attribute out_point.



9
10
11
# File 'lib/bitcoin/tx_in.rb', line 9

def out_point
  @out_point
end

#script_sigObject

Returns the value of attribute script_sig.



10
11
12
# File 'lib/bitcoin/tx_in.rb', line 10

def script_sig
  @script_sig
end

#script_witnessObject

Returns the value of attribute script_witness.



12
13
14
# File 'lib/bitcoin/tx_in.rb', line 12

def script_witness
  @script_witness
end

#sequenceObject

Returns the value of attribute sequence.



11
12
13
# File 'lib/bitcoin/tx_in.rb', line 11

def sequence
  @sequence
end

Class Method Details

.parse_from_payload(payload) ⇒ Object



34
35
36
37
38
39
40
41
42
43
44
45
46
# 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
  i.out_point = OutPoint.parse_from_payload(buf)
  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

Instance Method Details

#==(other) ⇒ Object



72
73
74
# File 'lib/bitcoin/tx_in.rb', line 72

def ==(other)
  to_payload == other.to_payload
end

#coinbase?Boolean

Returns:

  • (Boolean)


48
49
50
# File 'lib/bitcoin/tx_in.rb', line 48

def coinbase?
  out_point.coinbase?
end

#has_witness?Boolean

Returns:

  • (Boolean)


59
60
61
# File 'lib/bitcoin/tx_in.rb', line 59

def has_witness?
  !script_witness.empty?
end

#prev_hashObject

return previous output hash (not txid)



77
78
79
80
# File 'lib/bitcoin/tx_in.rb', line 77

def prev_hash
  return nil unless out_point
  out_point.tx_hash
end

#to_hObject



63
64
65
66
67
68
69
70
# File 'lib/bitcoin/tx_in.rb', line 63

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) ⇒ Object



52
53
54
55
56
57
# File 'lib/bitcoin/tx_in.rb', line 52

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