ethlite 0.2.1 → 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
  SHA256:
3
- metadata.gz: 5dea4d9654501b9b1fa7a86477a0b509e7722975fdf29ce3c95e060750d917f7
4
- data.tar.gz: 25b082b2803cb0404b39cab23b62740c716680f22d3f61825e364f9dfd387640
3
+ metadata.gz: ed8e8c05d930dceca2c2bf5f4b2e21ebeaaef68309b0c16474b47df667da2a89
4
+ data.tar.gz: 203ef7c86aa93e602028b1e0450e70c1c2c3a1388273263ce1e90fc503a18b08
5
5
  SHA512:
6
- metadata.gz: 6c28f0334a44bdbb3c2b4d2f375b94ff9ee643a49aa66953eac3bcd471a78398f2c89f8f8b150f64a1d64d19c2a47590f793b4c88ab7c41c045330a44a85a06b
7
- data.tar.gz: 45ff4d1b251eb7273f8fa1034b92bb2a95164796268e2d0a69d26f3567e7b806163ab7d851ef8d314d75bb61845d0117ae56fd7af089098ff43e3940dc1c7b2d
6
+ metadata.gz: 1527a1fccb6908164d7744e0b06772c48a18f2f67bc60068f72c7577f512d2de295e9dfe8d917c5ca3c724963396cfb02ddff0aac6611be65d79575aaa90c34f
7
+ data.tar.gz: 92f93f217349b9ef33b1fc1ec7c0da36e50d172e2b44e06b9b8281d008fc770b4da081ad64f46e2be1819bbb7fa423dbe14a6519da4ddae6f782d9ea9f056108
data/Manifest.txt CHANGED
@@ -2,15 +2,14 @@ CHANGELOG.md
2
2
  Manifest.txt
3
3
  README.md
4
4
  Rakefile
5
- lib/digest/keccak256.rb
5
+ lib/digest/keccak.rb
6
6
  lib/digest/sha3.rb
7
7
  lib/ethlite.rb
8
8
  lib/ethlite/abi/abi_coder.rb
9
- lib/ethlite/abi/constant.rb
10
- lib/ethlite/abi/exceptions.rb
11
9
  lib/ethlite/abi/type.rb
12
10
  lib/ethlite/abi/utils.rb
11
+ lib/ethlite/constant.rb
13
12
  lib/ethlite/contract.rb
14
- lib/ethlite/rpc.rb
15
13
  lib/ethlite/utility.rb
16
14
  lib/ethlite/version.rb
15
+ lib/jsonrpc/jsonrpc.rb
@@ -8,8 +8,15 @@
8
8
  ## require 'digest'
9
9
 
10
10
 
11
+
12
+ ##
13
+ # note: use KeccakLite (or KeccakZero? KeccakSHA3?) instead of Keccak
14
+ # to allow usage of native w/ c-extension Keccak and "lite" version
15
+
16
+
17
+
11
18
  module Digest
12
- class Keccak256 < Digest::Class
19
+ class KeccakLite < Digest::Class
13
20
  PILN = [10, 7, 11, 17, 18, 3, 5, 16,
14
21
  8, 21, 24, 4, 15, 23, 19, 13,
15
22
  12, 2, 20, 14, 22, 9, 6, 1]
@@ -27,16 +34,18 @@ module Digest
27
34
  0x000000000000800a, 0x800000008000000a, 0x8000000080008081,
28
35
  0x8000000000008080, 0x0000000080000001, 0x8000000080008008]
29
36
 
30
- def initialize
31
- @size = 256 / 8
37
+ ## note: changed initialize to use param hash_size = 512
38
+ ## do NOT hard-code only 256 bit
39
+ def initialize( hash_size = 512 )
40
+ @size = hash_size / 8
32
41
  @buffer = ''
33
42
  end
34
43
 
35
- def << s
44
+ def <<( s )
36
45
  @buffer << s
37
46
  self
38
47
  end
39
- alias update <<
48
+ alias_method :update, :<<
40
49
 
41
50
  def reset
42
51
  @buffer.clear
@@ -44,37 +53,40 @@ module Digest
44
53
  end
45
54
 
46
55
  def finish
47
- s = Array.new 25, 0
56
+ s = Array.new( 25, 0 )
48
57
  width = 200 - @size * 2
58
+
59
+ ### note: padding changed in final FIPS PUB 202 standard
60
+ ## from "\x01" to "\x06"
49
61
  padding = "\x01"
50
62
 
51
63
  buffer = @buffer
52
64
  buffer << padding << "\0" * (width - buffer.size % width)
53
65
  buffer[-1] = (buffer[-1].ord | 0x80).chr
54
66
 
55
- 0.step buffer.size - 1, width do |j|
56
- quads = buffer[j, width].unpack 'Q*'
67
+ 0.step( buffer.size - 1, width ) do |j|
68
+ quads = buffer[j, width].unpack( 'Q*' )
57
69
  (width / 8).times do |i|
58
70
  s[i] ^= quads[i]
59
71
  end
60
72
 
61
- keccak s
73
+ _keccak( s )
62
74
  end
63
75
 
64
76
  s.pack('Q*')[0, @size]
65
77
  end
66
78
 
67
79
  private
68
- def keccak s
69
- 24.times.each_with_object [] do |round, a|
80
+ def _keccak( s )
81
+ 24.times.each_with_object( [] ) do |round, a|
70
82
  # Theta
71
83
  5.times do |i|
72
84
  a[i] = s[i] ^ s[i + 5] ^ s[i + 10] ^ s[i + 15] ^ s[i + 20]
73
85
  end
74
86
 
75
87
  5.times do |i|
76
- t = a[(i + 4) % 5] ^ rotate(a[(i + 1) % 5], 1)
77
- 0.step 24, 5 do |j|
88
+ t = a[(i + 4) % 5] ^ _rotate(a[(i + 1) % 5], 1)
89
+ 0.step( 24, 5 ) do |j|
78
90
  s[j + i] ^= t
79
91
  end
80
92
  end
@@ -84,12 +96,12 @@ module Digest
84
96
  24.times do |i|
85
97
  j = PILN[i]
86
98
  a[0] = s[j]
87
- s[j] = rotate t, ROTC[i]
99
+ s[j] = _rotate( t, ROTC[i] )
88
100
  t = a[0]
89
101
  end
90
102
 
91
103
  # Chi
92
- 0.step 24, 5 do |j|
104
+ 0.step( 24, 5 ) do |j|
93
105
  5.times do |i|
94
106
  a[i] = s[j + i]
95
107
  end
@@ -104,8 +116,10 @@ module Digest
104
116
  end
105
117
  end
106
118
 
107
- def rotate x, y
119
+ def _rotate( x, y )
108
120
  (x << y | x >> 64 - y) & (1 << 64) - 1
109
121
  end
110
- end
111
- end
122
+
123
+
124
+ end # class KeccakLite
125
+ end # module Digest
data/lib/digest/sha3.rb CHANGED
@@ -6,8 +6,13 @@
6
6
 
7
7
  ## require 'digest'
8
8
 
9
+ ##
10
+ # note: use SHA3Lite (or SHA3Zero? ZeroSHA3?) instead of SHA3
11
+ # to allow usage of native w/ c-extension SHA3 and "lite" version
12
+
13
+
9
14
  module Digest
10
- class SHA3 < Digest::Class
15
+ class SHA3Lite < Digest::Class
11
16
  PILN = [10, 7, 11, 17, 18, 3, 5, 16,
12
17
  8, 21, 24, 4, 15, 23, 19, 13,
13
18
  12, 2, 20, 14, 22, 9, 6, 1]
@@ -25,16 +30,16 @@ module Digest
25
30
  0x000000000000800a, 0x800000008000000a, 0x8000000080008081,
26
31
  0x8000000000008080, 0x0000000080000001, 0x8000000080008008]
27
32
 
28
- def initialize hash_size = 512
29
- @size = hash_size / 8
30
- @buffer = ''
33
+ def initialize( hash_size = 512 )
34
+ @size = hash_size / 8
35
+ @buffer = '' ## todo/check: make sure buffer is with encoding BINARY - why? why not?
31
36
  end
32
37
 
33
- def << s
38
+ def <<( s )
34
39
  @buffer << s
35
40
  self
36
41
  end
37
- alias update <<
42
+ alias_method :update, :<<
38
43
 
39
44
  def reset
40
45
  @buffer.clear
@@ -42,36 +47,40 @@ module Digest
42
47
  end
43
48
 
44
49
  def finish
45
- s = Array.new 25, 0
50
+ s = Array.new( 25, 0 )
46
51
  width = 200 - @size * 2
47
52
 
53
+ ### note: padding changed in final FIPS PUB 202 standard
54
+ ## from "\x01" to "\x06"
55
+ padding = "\x06"
56
+
48
57
  buffer = @buffer
49
- buffer << "\x06" << "\0" * (width - buffer.size % width)
58
+ buffer << padding << "\0" * (width - buffer.size % width)
50
59
  buffer[-1] = (buffer[-1].ord | 0x80).chr
51
60
 
52
- 0.step buffer.size - 1, width do |j|
53
- quads = buffer[j, width].unpack 'Q*'
61
+ 0.step( buffer.size - 1, width ) do |j|
62
+ quads = buffer[j, width].unpack( 'Q*' )
54
63
  (width / 8).times do |i|
55
64
  s[i] ^= quads[i]
56
65
  end
57
66
 
58
- keccak s
67
+ _keccak( s )
59
68
  end
60
69
 
61
70
  s.pack('Q*')[0, @size]
62
71
  end
63
72
 
64
- private
65
- def keccak s
66
- 24.times.each_with_object [] do |round, a|
73
+ private
74
+ def _keccak( s )
75
+ 24.times.each_with_object( [] ) do |round, a|
67
76
  # Theta
68
77
  5.times do |i|
69
78
  a[i] = s[i] ^ s[i + 5] ^ s[i + 10] ^ s[i + 15] ^ s[i + 20]
70
79
  end
71
80
 
72
81
  5.times do |i|
73
- t = a[(i + 4) % 5] ^ rotate(a[(i + 1) % 5], 1)
74
- 0.step 24, 5 do |j|
82
+ t = a[(i + 4) % 5] ^ _rotate(a[(i + 1) % 5], 1)
83
+ 0.step( 24, 5 ) do |j|
75
84
  s[j + i] ^= t
76
85
  end
77
86
  end
@@ -81,12 +90,12 @@ module Digest
81
90
  24.times do |i|
82
91
  j = PILN[i]
83
92
  a[0] = s[j]
84
- s[j] = rotate t, ROTC[i]
93
+ s[j] = _rotate( t, ROTC[i] )
85
94
  t = a[0]
86
95
  end
87
96
 
88
97
  # Chi
89
- 0.step 24, 5 do |j|
98
+ 0.step( 24, 5 ) do |j|
90
99
  5.times do |i|
91
100
  a[i] = s[j + i]
92
101
  end
@@ -101,8 +110,9 @@ module Digest
101
110
  end
102
111
  end
103
112
 
104
- def rotate x, y
113
+ def _rotate( x, y )
105
114
  (x << y | x >> 64 - y) & (1 << 64) - 1
106
115
  end
107
- end
108
- end
116
+
117
+ end # class SHA3Lite
118
+ end # module Digest
@@ -14,8 +14,11 @@ module Ethlite
14
14
 
15
15
  include Constant
16
16
 
17
+
17
18
  class EncodingError < StandardError; end
18
19
  class DecodingError < StandardError; end
20
+ class ValueError < StandardError; end
21
+
19
22
  class ValueOutOfBounds < ValueError; end
20
23
 
21
24
  ##
@@ -2,17 +2,16 @@ module Ethlite
2
2
  module Abi
3
3
  class Type
4
4
 
5
- class ParseError < StandardError;
6
- end
5
+ class ParseError < StandardError; end
6
+
7
7
 
8
- class <<self
9
8
  ##
10
9
  # Crazy regexp to seperate out base type component (eg. uint), size (eg.
11
10
  # 256, 128x128, nil), array component (eg. [], [45], nil)
12
11
  #
13
- def parse(type)
12
+ def self.parse( type )
14
13
 
15
- return parse('uint256') if type=='trcToken'
14
+ return parse('uint256') if type=='trcToken'
16
15
 
17
16
  if type =~ /^\((.*)\)((\[[0-9]*\])*)/
18
17
  return Tuple.parse $1, $2.scan(/\[[0-9]*\]/)
@@ -56,10 +55,10 @@ module Ethlite
56
55
  new(base, sub, dims.map {|x| x[1...-1].to_i})
57
56
  end
58
57
 
59
- def size_type
58
+ def self.size_type
60
59
  @size_type ||= new('uint', 256, [])
61
60
  end
62
- end
61
+
63
62
 
64
63
  attr :base, :sub, :dims
65
64
 
@@ -69,7 +68,7 @@ module Ethlite
69
68
  # @param dims [Array[Integer]] dimensions of array type, e.g. [1,2,0]
70
69
  # for uint256[1][2][], [] for non-array type
71
70
  #
72
- def initialize(base, sub, dims)
71
+ def initialize( base, sub, dims )
73
72
  @base = base
74
73
  @sub = sub
75
74
  @dims = dims
@@ -123,7 +122,7 @@ module Ethlite
123
122
 
124
123
  class Tuple < Type
125
124
 
126
- def self.parse types, dims
125
+ def self.parse( types, dims )
127
126
 
128
127
  depth = 0
129
128
  collected = []
@@ -156,7 +155,8 @@ module Ethlite
156
155
  end
157
156
 
158
157
  attr_reader :types, :parsed_types
159
- def initialize types, dims
158
+
159
+ def initialize( types, dims )
160
160
  super('tuple', '', dims)
161
161
  @types = types
162
162
  @parsed_types = types.map{|t| Type.parse t}
@@ -188,14 +188,11 @@ module Ethlite
188
188
  subtype.dynamic? ? nil : dims.last * subtype.size
189
189
  end
190
190
  end
191
-
192
-
193
191
  end
194
192
 
195
193
  def subtype
196
194
  @subtype ||= Tuple.new(types, dims[0...-1])
197
195
  end
198
-
199
196
  end
200
197
 
201
198
 
@@ -12,16 +12,16 @@ module Abi
12
12
  def keccak256(x)
13
13
  # Digest::SHA3.new(256).digest(x)
14
14
  ## Digest::Keccak.digest(x, 256)
15
- Digest::Keccak256.digest( x )
15
+ Digest::KeccakLite.new(256).digest( x )
16
16
  end
17
17
 
18
- =begin
19
- ## check where required / in use - what for?
18
+ ## todo/check where required / in use - what for?
20
19
  def keccak512(x)
21
20
  # Digest::SHA3.new(512).digest(x)
22
- Digest::Keccak.digest(x, 512)
21
+ # Digest::Keccak.digest(x, 512)
22
+ Digest::KeccakLite.new(512).digest( x )
23
23
  end
24
- =end
24
+
25
25
 
26
26
  def keccak256_rlp(x)
27
27
  keccak256 RLP.encode(x)
@@ -218,8 +218,6 @@ module Abi
218
218
  def signature_hash signature, length=64
219
219
  encode_hex(keccak256(signature))[0...length]
220
220
  end
221
-
222
-
223
221
  end
224
222
 
225
223
  end # module Abi
@@ -1,6 +1,5 @@
1
1
 
2
2
  module Ethlite
3
- module Abi
4
3
  module Constant
5
4
 
6
5
  BYTE_EMPTY = "".freeze
@@ -20,13 +19,33 @@ module Ethlite
20
19
 
21
20
  HASH_ZERO = ("\x00"*32).freeze
22
21
 
22
+
23
23
  PUBKEY_ZERO = ("\x00"*32).freeze
24
24
  PRIVKEY_ZERO = ("\x00"*32).freeze
25
25
  PRIVKEY_ZERO_HEX = ('0'*64).freeze
26
26
 
27
27
  CONTRACT_CODE_SIZE_LIMIT = 0x6000
28
28
 
29
- end
30
29
 
31
- end # module Abi
30
+ =begin
31
+ # The RLP short length limit.
32
+ SHORT_LENGTH_LIMIT = 56.freeze
33
+
34
+ # The RLP long length limit.
35
+ LONG_LENGTH_LIMIT = (256 ** 8).freeze
36
+
37
+ # The RLP primitive type offset.
38
+ PRIMITIVE_PREFIX_OFFSET = 0x80.freeze
39
+
40
+ # The RLP array type offset.
41
+ LIST_PREFIX_OFFSET = 0xc0.freeze
42
+
43
+ # The binary encoding is ASCII (8-bit).
44
+ BINARY_ENCODING = "ASCII-8BIT".freeze
45
+
46
+ # Infinity as constant for convenience.
47
+ INFINITY = (1.0 / 0.0).freeze
48
+
49
+ =end
50
+ end # module Constant
32
51
  end # module Ethlite
@@ -2,6 +2,35 @@
2
2
  class ContractMethod
3
3
  include Utility
4
4
 
5
+
6
+ def self.parse_abi( abi )
7
+ ## convenience helper - auto-convert to json if string passed in
8
+ abi = JSON.parse( abi ) if abi.is_a?( String )
9
+
10
+ name = abi['name']
11
+ constant = !!abi['constant'] || abi['stateMutability']=='view'
12
+ input_types = abi['inputs'] ? abi['inputs'].map{|a| _parse_component_type( a ) } : []
13
+ output_types = abi['outputs'] ? abi['outputs'].map{|a| _parse_component_type( a ) } : []
14
+ type = abi['type'] || 'function'
15
+
16
+ new( name, inputs: input_types,
17
+ outputs: output_types,
18
+ constant: constant,
19
+ type: type )
20
+ end
21
+
22
+ def self._parse_component_type( argument )
23
+ if argument['type'] =~ /^tuple((\[[0-9]*\])*)/
24
+ argument['components'] ? "(#{argument['components'].collect{ |c| _parse_component_type( c ) }.join(',')})#{$1}"
25
+ : "()#{$1}"
26
+ else
27
+ argument['type']
28
+ end
29
+ end
30
+
31
+
32
+
33
+
5
34
  attr_reader :abi,
6
35
  :signature,
7
36
  :name,
@@ -10,29 +39,19 @@
10
39
  :output_types,
11
40
  :constant
12
41
 
13
- def initialize( abi )
14
- ## convenience helper - auto-convert to json if string passed in
15
- abi = JSON.parse( abi ) if abi.is_a?( String )
42
+ def initialize( name, inputs:,
43
+ outputs: [],
44
+ constant: true,
45
+ type: 'function' )
46
+ @name = name
47
+ @constant = constant
48
+ @input_types = inputs
49
+ @output_types = outputs
16
50
 
17
- @abi = abi
18
- @name = abi['name']
19
- @constant = !!abi['constant'] || abi['stateMutability']=='view'
20
- @input_types = abi['inputs'] ? abi['inputs'].map{|a| parse_component_type a } : []
21
- @output_types = abi['outputs'] ? abi['outputs'].map{|a| parse_component_type a } : nil
22
51
  @signature = Abi::Utils.function_signature( @name, @input_types )
23
- @signature_hash = Abi::Utils.signature_hash( @signature, abi['type']=='event' ? 64 : 8)
52
+ @signature_hash = Abi::Utils.signature_hash( @signature, type=='event' ? 64 : 8)
24
53
  end
25
54
 
26
- def parse_component_type( argument )
27
- if argument['type'] =~ /^tuple((\[[0-9]*\])*)/
28
- argument['components'] ? "(#{argument['components'].collect{|c| parse_component_type( c ) }.join(',')})#{$1}"
29
- : "()#{$1}"
30
- else
31
- argument['type']
32
- end
33
- end
34
-
35
-
36
55
  def do_call( rpc, contract_address, args )
37
56
  data = '0x' + @signature_hash + Abi::Utils.encode_hex(
38
57
  Abi::AbiCoder.encode_abi(@input_types, args) )
@@ -3,7 +3,7 @@
3
3
  module Ethlite
4
4
  MAJOR = 0
5
5
  MINOR = 2
6
- PATCH = 1
6
+ PATCH = 3
7
7
  VERSION = [MAJOR,MINOR,PATCH].join('.')
8
8
 
9
9
  def self.version
data/lib/ethlite.rb CHANGED
@@ -13,29 +13,54 @@ require 'digest'
13
13
  require 'rlp' ## gem rlp - see https://rubygems.org/gems/rlp
14
14
 
15
15
  ## bundled require 'digest/keccak' ## gem keccak - see https://rubygems.org/gems/keccak
16
- require 'digest/keccak256'
16
+ require_relative 'digest/keccak'
17
+ require_relative 'digest/sha3'
17
18
 
19
+ require_relative 'jsonrpc/jsonrpc'
18
20
 
19
21
 
20
22
 
21
23
  ## our own code
22
24
  require_relative 'ethlite/version' # note: let version always go first
23
25
 
26
+ require_relative 'ethlite/constant'
27
+
24
28
 
25
29
  require_relative 'ethlite/abi/type'
26
- require_relative 'ethlite/abi/constant'
27
- require_relative 'ethlite/abi/exceptions'
28
30
  require_relative 'ethlite/abi/utils'
29
31
  require_relative 'ethlite/abi/abi_coder'
30
32
 
31
33
 
32
- require_relative 'ethlite/rpc'
33
-
34
34
  require_relative 'ethlite/utility'
35
35
  require_relative 'ethlite/contract'
36
36
 
37
37
 
38
38
 
39
+
40
+ module Ethlite
41
+ class Configuration
42
+ def rpc() @rpc || JsonRpc.new( ENV['INFURA_URI'] ); end
43
+ def rpc=(value)
44
+ @rpc = if value.is_a?( String )
45
+ JsonRpc.new( value ) ## auto-wrap in (built-in/simple) jsonrpc client/serverproxy
46
+ else
47
+ value
48
+ end
49
+ end
50
+ end # class Configuration
51
+
52
+
53
+ ## lets you use
54
+ ## Ethlite.configure do |config|
55
+ ## config.rpc = Ethlite::Rpc.new( ENV['INFURA_URI'] )
56
+ ## end
57
+ def self.configure() yield( config ); end
58
+ def self.config() @config ||= Configuration.new; end
59
+ end # module Ethlite
60
+
61
+
62
+
63
+
39
64
  ## add convenience alternate spelling
40
65
  EthLite = Ethlite
41
66
 
@@ -1,12 +1,20 @@
1
- module Ethlite
2
1
 
3
- class Rpc
2
+ ###
3
+ # simple JsonRpc client
4
+ #
5
+ # see https://www.jsonrpc.org/specification
6
+ # https://en.wikipedia.org/wiki/JSON-RPC
7
+
8
+
9
+
10
+ class JsonRpc
4
11
  def initialize( uri )
5
12
  @client_id = Random.rand( 10000000 )
6
13
 
7
14
  @uri = URI.parse( uri )
8
15
  end
9
16
 
17
+
10
18
  def request( method, params=[] )
11
19
  opts = {}
12
20
  if @uri.instance_of?( URI::HTTPS )
@@ -29,9 +37,12 @@
29
37
  request.body = json
30
38
  response = http.request( request )
31
39
 
32
- raise "Error code #{response.code} on request #{@uri.to_s} #{request.body}" unless response.kind_of?( Net::HTTPOK )
40
+ unless response.kind_of?( Net::HTTPOK )
41
+ raise "Error code #{response.code} on request #{@uri.to_s} #{request.body}"
42
+ end
43
+
33
44
 
34
- body = JSON.parse(response.body, max_nesting: 1500)
45
+ body = JSON.parse( response.body, max_nesting: 1500 )
35
46
 
36
47
  if body['result']
37
48
  body['result']
@@ -42,7 +53,5 @@
42
53
  end
43
54
  end
44
55
  end
45
- end # class Rpc
46
-
47
- end # module Ethlite
56
+ end # class JsonRpc
48
57
 
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: ethlite
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.1
4
+ version: 0.2.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Gerald Bauer
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2022-11-14 00:00:00.000000000 Z
11
+ date: 2022-11-15 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: cocos
@@ -86,18 +86,17 @@ files:
86
86
  - Manifest.txt
87
87
  - README.md
88
88
  - Rakefile
89
- - lib/digest/keccak256.rb
89
+ - lib/digest/keccak.rb
90
90
  - lib/digest/sha3.rb
91
91
  - lib/ethlite.rb
92
92
  - lib/ethlite/abi/abi_coder.rb
93
- - lib/ethlite/abi/constant.rb
94
- - lib/ethlite/abi/exceptions.rb
95
93
  - lib/ethlite/abi/type.rb
96
94
  - lib/ethlite/abi/utils.rb
95
+ - lib/ethlite/constant.rb
97
96
  - lib/ethlite/contract.rb
98
- - lib/ethlite/rpc.rb
99
97
  - lib/ethlite/utility.rb
100
98
  - lib/ethlite/version.rb
99
+ - lib/jsonrpc/jsonrpc.rb
101
100
  homepage: https://github.com/pixelartexchange/artbase
102
101
  licenses:
103
102
  - Public Domain
@@ -1,29 +0,0 @@
1
-
2
- module Ethlite
3
- module Abi
4
-
5
- class DeprecatedError < StandardError; end
6
- class ChecksumError < StandardError; end
7
- class FormatError < StandardError; end
8
- class ValidationError < StandardError; end
9
- class ValueError < StandardError; end
10
- class AssertError < StandardError; end
11
-
12
- class UnknownParentError < StandardError; end
13
- class InvalidBlock < ValidationError; end
14
- class InvalidUncles < ValidationError; end
15
-
16
- class InvalidTransaction < ValidationError; end
17
- class UnsignedTransactionError < InvalidTransaction; end
18
- class InvalidNonce < InvalidTransaction; end
19
- class InsufficientStartGas < InvalidTransaction; end
20
- class InsufficientBalance < InvalidTransaction; end
21
- class BlockGasLimitReached < InvalidTransaction; end
22
-
23
- class InvalidSPVProof < ValidationError; end
24
-
25
- class ContractCreationFailed < StandardError; end
26
- class TransactionFailed < StandardError; end
27
-
28
- end # module Abi
29
- end # module Ethlite