ethlite 0.2.1 → 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
  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