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