web3-eth 0.2.21 → 0.2.23

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: 27869236d216cf8a0cbeb2c1102cc3e9d3505ba6
4
- data.tar.gz: d2e4948dcdc6b237acebe86da9bb6bb9a2908aef
3
+ metadata.gz: 367f280dbfd454078088f84b5285554facb4c0ef
4
+ data.tar.gz: 46b237bcdfa35281333e08a7e75b30b25a2f021b
5
5
  SHA512:
6
- metadata.gz: ce86e2db9a40f52e0376427d5976cdd67c8cadba1d2829d3e80c7cc12b806d99c85cc2056ccf604db24f5fd25f2a8bcbab2520df1533d598ffded5e514888c64
7
- data.tar.gz: 0ba1c2c31b35929922dea30d49cc547386ba784805694c599a388c82829692f8b0caf8af6a9300b2288f2e8d1d7d8c4605b15a764c83ae8b4e01d9e8a126dbb4
6
+ metadata.gz: 9fd72406fee7ec39e1e0301083c67cc43b2515f8946d00a4cc6143018a1119f9eed4e4248c3d9275a16da3796173cf628f93f7ee99ab0cbdbe3bf771da696273
7
+ data.tar.gz: fb1a3ddc4178a0e0163bebed295baca51bc350682ec4da3ba746bfca38d4482b95b876c8a6afa369a06dd81f9580a90d12ecc2787021b4f864a97333020b29b0
@@ -248,7 +248,7 @@ module Web3::Eth::Abi
248
248
  end
249
249
 
250
250
  def decode_type(type, arg)
251
- return nil if arg.nil?
251
+ return nil if arg.nil? || arg.empty?
252
252
  if type.kind_of?(Tuple) && type.dims.empty?
253
253
  arg ? decode_abi(type.types, arg) : []
254
254
  elsif %w(string bytes).include?(type.base) && type.sub.empty?
@@ -14,7 +14,7 @@ module Web3::Eth::Abi
14
14
  def parse(type)
15
15
 
16
16
  if type =~ /^\((.*)\)((\[[0-9]*\])*)/
17
- return Tuple.new $1.split(','), $2.scan(/\[[0-9]*\]/)
17
+ return Tuple.parse $1, $2.scan(/\[[0-9]*\]/)
18
18
  end
19
19
 
20
20
  _, base, sub, dimension = /([a-z]*)([0-9]*x?[0-9]*)((\[[0-9]*\])*)/.match(type).to_a
@@ -123,10 +123,43 @@ module Web3::Eth::Abi
123
123
 
124
124
  class Tuple < Type
125
125
 
126
- attr_reader :types
126
+ def self.parse types, dims
127
+
128
+ depth = 0
129
+ collected = []
130
+ current = ''
131
+
132
+ types.split('').each do |c|
133
+ case c
134
+ when ',' then
135
+ if depth==0
136
+ collected << current
137
+ current = ''
138
+ else
139
+ current += c
140
+ end
141
+ when '(' then
142
+ depth += 1
143
+ current += c
144
+ when ')' then
145
+ depth -= 1
146
+ current += c
147
+ else
148
+ current += c
149
+ end
150
+
151
+ end
152
+ collected << current unless current.empty?
153
+
154
+ Tuple.new collected, dims
155
+
156
+ end
157
+
158
+ attr_reader :types, :parsed_types
127
159
  def initialize types, dims
128
- super('tuple', '', dims)
160
+ super('tuple', '', dims.map {|x| x[1...-1].to_i})
129
161
  @types = types
162
+ @parsed_types = types.map{|t| Type.parse t}
130
163
  end
131
164
 
132
165
  def ==(another_type)
@@ -136,7 +169,27 @@ module Web3::Eth::Abi
136
169
  end
137
170
 
138
171
  def size
139
- nil
172
+ @size ||= calculate_size
173
+ end
174
+
175
+ def calculate_size
176
+ if dims.empty?
177
+ s = 0
178
+ parsed_types.each do |type|
179
+ ts = type.size
180
+ return nil if ts.nil?
181
+ s += ts
182
+ end
183
+ s
184
+ else
185
+ if dims.last == 0 # 0 for dynamic array []
186
+ nil
187
+ else
188
+ subtype.dynamic? ? nil : dims.last * subtype.size
189
+ end
190
+ end
191
+
192
+
140
193
  end
141
194
 
142
195
  def subtype
@@ -1,5 +1,5 @@
1
1
  module Web3
2
2
  module Eth
3
- VERSION = "0.2.21"
3
+ VERSION = "0.2.23"
4
4
  end
5
5
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: web3-eth
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.21
4
+ version: 0.2.23
5
5
  platform: ruby
6
6
  authors:
7
7
  - studnev
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2019-04-01 00:00:00.000000000 Z
11
+ date: 2019-04-02 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rlp