etherlite 0.2.2 → 0.2.3

Sign up to get free protection for your applications and to get access to all the features.
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