etherlite 0.2.2 → 0.2.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: ca6ccaaf22a1079aa68d7d157900b271bed5e1db
4
- data.tar.gz: 1d208e7063d99de949f7b80a3eefdffb799ee840
3
+ metadata.gz: 3d9836bec35f181ec6d32abafcd7a3a5dde485e4
4
+ data.tar.gz: 98977ede760cfcb7dcf32910d79acffef187b89e
5
5
  SHA512:
6
- metadata.gz: 18451599c309267ee0fe65da4d04ff653ada9673ed9a21381bd27c7d5aa1333cdaed95a1d7d21d3e911d743490cf7f7728fb5fd7d4e6ccbc03ea02ff08578609
7
- data.tar.gz: a6bf702b4f531e738651060de080ae097e67328783164c6509117fb49c3c76727e9b8c1784eec283f34c5586b3cde2d88cb24643d00ae32feb31bebfbce66313
6
+ metadata.gz: 12c60f7ad8b8a4556171db68c495a49ac4f72a8f10a0a3a64321db3170bbf05ea992a5bcbf40c89b1ee9054092eef7818aa3bf49fa6349c9e872720e9e9f3f2a
7
+ data.tar.gz: b36ebbd7fb4d09d33bad6129eb1d42ffe6b1588a20fbe90cf7ffe193d0cf4d20c1fb49d388897741ad3ad93d08e55948fc51e95a1c5b8c046d99bf3f741c7017
@@ -32,6 +32,7 @@ require "etherlite/contract/function_input"
32
32
 
33
33
  require "etherlite/errors"
34
34
  require "etherlite/configuration"
35
+ require "etherlite/event_provider"
35
36
  require "etherlite/abi"
36
37
  require "etherlite/utils"
37
38
  require "etherlite/connection"
@@ -12,8 +12,8 @@ module Etherlite
12
12
  connection.eth_gas_price
13
13
  end
14
14
 
15
- def get_transaction(_hash)
16
- load_transaction(_hash).refresh
15
+ def get_transaction(*_args)
16
+ load_transaction(*_args).refresh
17
17
  end
18
18
 
19
19
  def load_transaction(_hash)
@@ -9,6 +9,10 @@ module Etherlite
9
9
  Etherlite::Utils.hex_to_uint ipc_call(:eth_gasPrice)
10
10
  end
11
11
 
12
+ def eth_get_transaction_by_hash(_tx_hash)
13
+ ipc_call(:eth_getTransactionByHash, _tx_hash)
14
+ end
15
+
12
16
  def eth_get_transaction_receipt(_tx_hash)
13
17
  ipc_call(:eth_getTransactionReceipt, _tx_hash)
14
18
  end
@@ -18,6 +18,7 @@ module Etherlite::Abi
18
18
 
19
19
  klass.functions.freeze
20
20
  klass.events.freeze
21
+ ::Etherlite::EventProvider.register_contract_events klass
21
22
  klass
22
23
  end
23
24
 
@@ -64,24 +64,14 @@ module Etherlite::Contract
64
64
  toBlock: Etherlite::Utils.encode_block_param(to_block)
65
65
  }
66
66
 
67
- params[:topics] = [events.map { |e| event_topic e }] unless events.nil?
68
-
69
- event_map = Hash[(events || self.class.events).map { |e| [event_topic(e), e] }]
67
+ params[:topics] = [events.map(&:topic)] unless events.nil?
70
68
 
71
69
  logs = @connection.ipc_call(:eth_getLogs, params)
72
- logs.map do |log|
73
- event = event_map[log["topics"].first]
74
- # TODO: support anonymous events!
75
- event.decode(@connection, log) unless event.nil?
76
- end
70
+ ::Etherlite::EventProvider.parse_raw_logs(@connection, logs)
77
71
  end
78
72
 
79
73
  private
80
74
 
81
75
  attr_reader :default_account, :normalized_address
82
-
83
- def event_topic(_event)
84
- '0x' + Etherlite::Utils.sha3(_event.signature)
85
- end
86
76
  end
87
77
  end
@@ -17,6 +17,10 @@ module Etherlite::Contract
17
17
  end
18
18
  end
19
19
 
20
+ def self.topic
21
+ '0x' + Etherlite::Utils.sha3(signature)
22
+ end
23
+
20
24
  def self.decode(_connection, _json)
21
25
  new(
22
26
  _json['blockNumber'].nil? ? nil : Etherlite::Utils.hex_to_uint(_json['blockNumber']),
@@ -0,0 +1,29 @@
1
+ module Etherlite
2
+ module EventProvider
3
+ extend self
4
+
5
+ def register_contract_events(_contract_class)
6
+ _contract_class.events.each { |e| register_event e }
7
+ end
8
+
9
+ def register_event(_event)
10
+ event_by_topic[_event.topic] = _event
11
+ end
12
+
13
+ def parse_raw_log(_connection, _raw_log)
14
+ event = event_by_topic[_raw_log["topics"].first]
15
+ return nil if event.nil?
16
+ event.decode(_connection, _raw_log)
17
+ end
18
+
19
+ def parse_raw_logs(_connection, _raw_logs)
20
+ _raw_logs.map { |e| parse_raw_log(_connection, e) }.reject &:nil?
21
+ end
22
+
23
+ private
24
+
25
+ def event_by_topic
26
+ @event_by_topic ||= {}
27
+ end
28
+ end
29
+ end
@@ -37,10 +37,30 @@ module Etherlite
37
37
  @connection.eth_block_number - block_number
38
38
  end
39
39
 
40
+ def gas
41
+ Utils.hex_to_uint original['gas']
42
+ end
43
+
40
44
  def gas_used
41
45
  Utils.hex_to_uint @receipt['gasUsed']
42
46
  end
43
47
 
48
+ def gas_price
49
+ Utils.hex_to_uint original['gasPrice']
50
+ end
51
+
52
+ def value
53
+ Utils.hex_to_uint original['value']
54
+ end
55
+
56
+ def logs
57
+ @receipt['logs'] || []
58
+ end
59
+
60
+ def events
61
+ ::Etherlite::EventProvider.parse_raw_logs(@connection, logs)
62
+ end
63
+
44
64
  def block_number
45
65
  Utils.hex_to_uint @receipt['blockNumber']
46
66
  end
@@ -59,5 +79,11 @@ module Etherlite
59
79
 
60
80
  true
61
81
  end
82
+
83
+ private
84
+
85
+ def original
86
+ @original ||= @connection.eth_get_transaction_by_hash(@tx_hash)
87
+ end
62
88
  end
63
89
  end
@@ -1,3 +1,3 @@
1
1
  module Etherlite
2
- VERSION = "0.2.2"
2
+ VERSION = "0.2.3"
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: etherlite
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.2
4
+ version: 0.2.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Ignacio Baixas
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2018-02-19 00:00:00.000000000 Z
11
+ date: 2018-05-16 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: digest-sha3
@@ -208,6 +208,7 @@ files:
208
208
  - lib/etherlite/contract/function.rb
209
209
  - lib/etherlite/contract/function_input.rb
210
210
  - lib/etherlite/errors.rb
211
+ - lib/etherlite/event_provider.rb
211
212
  - lib/etherlite/nonce_manager.rb
212
213
  - lib/etherlite/railtie.rb
213
214
  - lib/etherlite/railties/configuration_extensions.rb