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_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



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

def confirmations
  return 0 unless mined?

  (@connection.eth_block_number - block_number) + 1
end

#contract_addressObject



88
89
90
# File 'lib/etherlite/transaction.rb', line 88

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

#eventsObject



84
85
86
# File 'lib/etherlite/transaction.rb', line 84

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

#failed?Boolean

Returns:

  • (Boolean)


72
73
74
# File 'lib/etherlite/transaction.rb', line 72

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



76
77
78
# File 'lib/etherlite/transaction.rb', line 76

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

#logsObject



80
81
82
# File 'lib/etherlite/transaction.rb', line 80

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



56
57
58
59
60
# File 'lib/etherlite/transaction.rb', line 56

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



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

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)


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

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



92
93
94
95
96
97
98
99
100
101
# File 'lib/etherlite/transaction.rb', line 92

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