Class: Etherlite::Transaction

Inherits:
Object
  • Object
show all
Defined in:
lib/etherlite/transaction.rb

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(_connection, _tx_hash) ⇒ Transaction

Returns a new instance of Transaction.



5
6
7
8
9
# File 'lib/etherlite/transaction.rb', line 5

def initialize(_connection, _tx_hash)
  @connection = _connection
  @tx_hash = _tx_hash
  @loaded = false
end

Instance Attribute Details

#tx_hashObject (readonly)

Returns the value of attribute tx_hash.



3
4
5
# File 'lib/etherlite/transaction.rb', line 3

def tx_hash
  @tx_hash
end

Instance Method Details

#block_hashObject



48
49
50
51
52
# File 'lib/etherlite/transaction.rb', line 48

def block_hash
  return nil unless mined?

  original['blockHash']
end

#block_numberObject



42
43
44
45
46
# File 'lib/etherlite/transaction.rb', line 42

def block_number
  return nil unless mined?

  Utils.hex_to_uint(original['blockNumber'])
end

#confirmationsObject



54
55
56
57
58
# File 'lib/etherlite/transaction.rb', line 54

def confirmations
  return 0 unless mined?

  (@connection.eth_block_number - block_number) + 1
end

#contract_addressObject



94
95
96
# File 'lib/etherlite/transaction.rb', line 94

def contract_address
  receipt && receipt['contractAddress']
end

#eventsObject



90
91
92
# File 'lib/etherlite/transaction.rb', line 90

def events
  receipt && ::Etherlite::EventProvider.parse_raw_logs(@connection, logs)
end

#failed?Boolean

Returns:

  • (Boolean)


78
79
80
# File 'lib/etherlite/transaction.rb', line 78

def failed?
  status == 0
end

#gasObject



30
31
32
# File 'lib/etherlite/transaction.rb', line 30

def gas
  original && Utils.hex_to_uint(original['gas'])
end

#gas_priceObject



34
35
36
# File 'lib/etherlite/transaction.rb', line 34

def gas_price
  original && Utils.hex_to_uint(original['gasPrice'])
end

#gas_usedObject



82
83
84
# File 'lib/etherlite/transaction.rb', line 82

def gas_used
  receipt && Utils.hex_to_uint(receipt['gasUsed'])
end

#logsObject



86
87
88
# File 'lib/etherlite/transaction.rb', line 86

def logs
  receipt && (receipt['logs'] || [])
end

#mined?Boolean

Returns:

  • (Boolean)


26
27
28
# File 'lib/etherlite/transaction.rb', line 26

def mined?
  original.present? && !original['blockNumber'].nil?
end

#originalObject



17
18
19
20
# File 'lib/etherlite/transaction.rb', line 17

def original
  refresh unless @loaded
  @original
end

#receiptObject

receipt attributes



62
63
64
65
66
# File 'lib/etherlite/transaction.rb', line 62

def receipt
  return nil unless mined?
  
  @receipt ||= @connection.eth_get_transaction_receipt(@tx_hash)
end

#refreshObject



11
12
13
14
15
# File 'lib/etherlite/transaction.rb', line 11

def refresh
  @original = @connection.eth_get_transaction_by_hash(@tx_hash)
  @loaded = true
  self
end

#removed?Boolean

Returns:

  • (Boolean)


22
23
24
# File 'lib/etherlite/transaction.rb', line 22

def removed?
  original.nil?
end

#statusObject



68
69
70
71
72
# File 'lib/etherlite/transaction.rb', line 68

def status
  return nil if receipt.nil?

  receipt['status'].is_a?(String) ? Utils.hex_to_uint(receipt['status']) : receipt['status']
end

#succeeded?Boolean

Returns:

  • (Boolean)


74
75
76
# File 'lib/etherlite/transaction.rb', line 74

def succeeded?
  status == 1
end

#valueObject



38
39
40
# File 'lib/etherlite/transaction.rb', line 38

def value
  original && Utils.hex_to_uint(original['value'])
end

#wait_for_block(timeout: 120) ⇒ Object



98
99
100
101
102
103
104
105
106
107
# File 'lib/etherlite/transaction.rb', line 98

def wait_for_block(timeout: 120)
  start = Time.now
  while !refresh.mined?
    return false if removed?
    return false if Time.now - start > timeout
    sleep 1
  end

  true
end