eth 0.5.0 → 0.5.1

Sign up to get free protection for your applications and to get access to all the features.
data/lib/eth/tx.rb CHANGED
@@ -12,7 +12,6 @@
12
12
  # See the License for the specific language governing permissions and
13
13
  # limitations under the License.
14
14
 
15
- require "rlp"
16
15
  require "konstructor"
17
16
 
18
17
  require "eth/chain"
@@ -21,14 +20,14 @@ require "eth/tx/eip2930"
21
20
  require "eth/tx/legacy"
22
21
  require "eth/unit"
23
22
 
24
- # Provides the `Eth` module.
23
+ # Provides the {Eth} module.
25
24
  module Eth
26
25
 
27
26
  # Provides the `Tx` module supporting various transaction types.
28
27
  module Tx
29
28
  extend self
30
29
 
31
- # Provides a special transactoin error if transaction type is unknown.
30
+ # Provides a special transaction error if transaction type is unknown.
32
31
  class TransactionTypeError < TypeError; end
33
32
 
34
33
  # Provides an decoder error if transaction cannot be decoded.
@@ -197,16 +196,16 @@ module Eth
197
196
  # @raise [ParameterError] if amount is invalid.
198
197
  # @raise [ParameterError] if access list is invalid.
199
198
  def validate_params(fields)
200
- unless fields[:nonce] >= 0
199
+ if fields[:nonce].nil? or fields[:nonce] < 0
201
200
  raise ParameterError, "Invalid signer nonce #{fields[:nonce]}!"
202
201
  end
203
- unless fields[:priority_fee] >= 0
202
+ if fields[:priority_fee].nil? or fields[:priority_fee] < 0
204
203
  raise ParameterError, "Invalid gas priority fee #{fields[:priority_fee]}!"
205
204
  end
206
- unless fields[:max_gas_fee] >= 0
205
+ if fields[:max_gas_fee].nil? or fields[:max_gas_fee] < 0
207
206
  raise ParameterError, "Invalid max gas fee #{fields[:max_gas_fee]}!"
208
207
  end
209
- unless fields[:gas_limit] >= DEFAULT_GAS_LIMIT and fields[:gas_limit] <= BLOCK_GAS_LIMIT
208
+ if fields[:gas_limit].nil? or fields[:gas_limit] < DEFAULT_GAS_LIMIT or fields[:gas_limit] > BLOCK_GAS_LIMIT
210
209
  raise ParameterError, "Invalid gas limit #{fields[:gas_limit]}!"
211
210
  end
212
211
  unless fields[:value] >= 0
@@ -229,13 +228,13 @@ module Eth
229
228
  # @raise [ParameterError] if amount is invalid.
230
229
  # @raise [ParameterError] if access list is invalid.
231
230
  def validate_legacy_params(fields)
232
- unless fields[:nonce] >= 0
231
+ if fields[:nonce].nil? or fields[:nonce] < 0
233
232
  raise ParameterError, "Invalid signer nonce #{fields[:nonce]}!"
234
233
  end
235
- unless fields[:gas_price] >= 0
234
+ if fields[:gas_price].nil? or fields[:gas_price] < 0
236
235
  raise ParameterError, "Invalid gas price #{fields[:gas_price]}!"
237
236
  end
238
- unless fields[:gas_limit] >= DEFAULT_GAS_LIMIT and fields[:gas_limit] <= BLOCK_GAS_LIMIT
237
+ if fields[:gas_limit].nil? or fields[:gas_limit] < DEFAULT_GAS_LIMIT or fields[:gas_limit] > BLOCK_GAS_LIMIT
239
238
  raise ParameterError, "Invalid gas limit #{fields[:gas_limit]}!"
240
239
  end
241
240
  unless fields[:value] >= 0
data/lib/eth/unit.rb CHANGED
@@ -14,7 +14,7 @@
14
14
 
15
15
  require "bigdecimal"
16
16
 
17
- # Provides the `Eth` module.
17
+ # Provides the {Eth} module.
18
18
  module Eth
19
19
 
20
20
  # Provides constants for common Ethereum units.
data/lib/eth/util.rb CHANGED
@@ -13,12 +13,11 @@
13
13
  # limitations under the License.
14
14
 
15
15
  require "digest/keccak"
16
- require "rlp"
17
16
 
18
- # Provides the `Eth` module.
17
+ # Provides the {Eth} module.
19
18
  module Eth
20
19
 
21
- # Defines handy tools for the `Eth` gem for convenience.
20
+ # Defines handy tools for the {Eth} gem for convenience.
22
21
  module Util
23
22
  extend self
24
23
 
@@ -93,7 +92,7 @@ module Eth
93
92
  # Checks if a string is hex-adecimal.
94
93
  #
95
94
  # @param str [String] a string to be checked.
96
- # @return [String] a match if true; nil if not.
95
+ # @return [String] a match if true; `nil` if not.
97
96
  def is_hex?(str)
98
97
  return false unless str.is_a? String
99
98
  str = remove_hex_prefix str
@@ -103,7 +102,7 @@ module Eth
103
102
  # Checks if a string is prefixed with `0x`.
104
103
  #
105
104
  # @param hex [String] a string to be checked.
106
- # @return [String] a match if true; nil if not.
105
+ # @return [String] a match if true; `nil` if not.
107
106
  def is_prefixed?(hex)
108
107
  hex.match /\A0x/
109
108
  end
@@ -111,14 +110,24 @@ module Eth
111
110
  # Serializes an unsigned integer to big endian.
112
111
  #
113
112
  # @param num [Integer] unsigned integer to be serialized.
114
- # return [String] serialized big endian integer string.
115
- # raises [ArgumentError] if unsigned integer is out of bounds.
113
+ # @return [String] serialized big endian integer string.
114
+ # @raise [ArgumentError] if unsigned integer is out of bounds.
116
115
  def serialize_int_to_big_endian(num)
117
116
  num = num.to_i(16) if is_hex? num
118
- unless num.is_a? Integer and num >= 0 and num <= Abi::UINT_MAX
117
+ unless num.is_a? Integer and num >= 0 and num <= Constant::UINT_MAX
119
118
  raise ArgumentError, "Integer invalid or out of range: #{num}"
120
119
  end
121
- RLP::Sedes.big_endian_int.serialize num
120
+ Rlp::Sedes.big_endian_int.serialize num
121
+ end
122
+
123
+ # Converts an integer to big endian.
124
+ #
125
+ # @param num [Integer] integer to be converted.
126
+ # @return [String] packed, big-endian integer string.
127
+ def int_to_big_endian(num)
128
+ hex = num.to_s(16) unless is_hex? num
129
+ hex = "0#{hex}" if hex.size.odd?
130
+ hex_to_bin hex
122
131
  end
123
132
 
124
133
  # Deserializes big endian data string to integer.
@@ -126,7 +135,55 @@ module Eth
126
135
  # @param str [String] serialized big endian integer string.
127
136
  # @return [Integer] an deserialized unsigned integer.
128
137
  def deserialize_big_endian_to_int(str)
129
- RLP::Sedes.big_endian_int.deserialize str.sub(/\A(\x00)+/, "")
138
+ Rlp::Sedes.big_endian_int.deserialize str.sub(/\A(\x00)+/, "")
139
+ end
140
+
141
+ # Converts a big endian to an interger.
142
+ #
143
+ # @param str [String] big endian to be converted.
144
+ # @return [Integer] an unpacked integer number.
145
+ def big_endian_to_int(str)
146
+ str.unpack("H*").first.to_i(16)
147
+ end
148
+
149
+ # Converts a binary string to bytes.
150
+ #
151
+ # @param str [String] binary string to be converted.
152
+ # @return [Object] the string bytes.
153
+ def str_to_bytes(str)
154
+ is_bytes?(str) ? str : str.b
155
+ end
156
+
157
+ # Converts bytes to a binary string.
158
+ #
159
+ # @param bin [Object] bytes to be converted.
160
+ # @return [String] a packed binary string.
161
+ def bytes_to_str(bin)
162
+ bin.unpack("U*").pack("U*")
163
+ end
164
+
165
+ # Checks if a string is a byte-string.
166
+ #
167
+ # @param str [String] a string to check.
168
+ # @return [Boolean] true if it's an ASCII-8bit encoded byte-string.
169
+ def is_bytes?(str)
170
+ str && str.instance_of?(String) && str.encoding.name == Constant::BINARY_ENCODING
171
+ end
172
+
173
+ # Checks if the given item is a string primitive.
174
+ #
175
+ # @param item [Object] the item to check.
176
+ # @return [Boolean] true if it's a string primitive.
177
+ def is_primitive?(item)
178
+ item.instance_of?(String)
179
+ end
180
+
181
+ # Checks if the given item is a list.
182
+ #
183
+ # @param item [Object] the item to check.
184
+ # @return [Boolean] true if it's a list.
185
+ def is_list?(item)
186
+ !is_primitive?(item) && item.respond_to?(:each)
130
187
  end
131
188
 
132
189
  # Ceil and integer to the next multiple of 32 bytes.
@@ -154,7 +211,7 @@ module Eth
154
211
  # @param len [Integer] number of symbols for the final string.
155
212
  # @return [String] a zero-padded serialized string of wanted size.
156
213
  def zpad(str, len)
157
- lpad str, Abi::BYTE_ZERO, len
214
+ lpad str, Constant::BYTE_ZERO, len
158
215
  end
159
216
 
160
217
  # Left-pad a hex number with zeros.
data/lib/eth/version.rb CHANGED
@@ -12,9 +12,9 @@
12
12
  # See the License for the specific language governing permissions and
13
13
  # limitations under the License.
14
14
 
15
- # Provides the `Eth` module.
15
+ # Provides the {Eth} module.
16
16
  module Eth
17
17
 
18
- # Defines the version of the `Eth` module.
19
- VERSION = "0.5.0".freeze
18
+ # Defines the version of the {Eth} module.
19
+ VERSION = "0.5.1".freeze
20
20
  end
data/lib/eth.rb CHANGED
@@ -12,16 +12,22 @@
12
12
  # See the License for the specific language governing permissions and
13
13
  # limitations under the License.
14
14
 
15
- # Provides the `Eth` module.
15
+ # Provides the {Eth} module.
16
16
  module Eth
17
17
  end
18
18
 
19
- # Loads the `Eth` module classes.
19
+ # Loads the {Eth} module classes.
20
20
  require "eth/abi"
21
+ require "eth/api"
21
22
  require "eth/address"
22
23
  require "eth/chain"
24
+ require "eth/constant"
25
+ require "eth/client"
26
+ require "eth/client/http"
27
+ require "eth/client/ipc"
23
28
  require "eth/eip712"
24
29
  require "eth/key"
30
+ require "eth/rlp"
25
31
  require "eth/signature"
26
32
  require "eth/tx"
27
33
  require "eth/unit"
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: eth
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.5.0
4
+ version: 0.5.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Steve Ellis
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: exe
11
11
  cert_chain: []
12
- date: 2022-01-17 00:00:00.000000000 Z
12
+ date: 2022-01-31 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: keccak
@@ -53,34 +53,20 @@ dependencies:
53
53
  - - "~>"
54
54
  - !ruby/object:Gem::Version
55
55
  version: '5.1'
56
- - !ruby/object:Gem::Dependency
57
- name: rlp
58
- requirement: !ruby/object:Gem::Requirement
59
- requirements:
60
- - - "~>"
61
- - !ruby/object:Gem::Version
62
- version: '0.7'
63
- type: :runtime
64
- prerelease: false
65
- version_requirements: !ruby/object:Gem::Requirement
66
- requirements:
67
- - - "~>"
68
- - !ruby/object:Gem::Version
69
- version: '0.7'
70
56
  - !ruby/object:Gem::Dependency
71
57
  name: openssl
72
58
  requirement: !ruby/object:Gem::Requirement
73
59
  requirements:
74
60
  - - "~>"
75
61
  - !ruby/object:Gem::Version
76
- version: '3.0'
62
+ version: '2.2'
77
63
  type: :runtime
78
64
  prerelease: false
79
65
  version_requirements: !ruby/object:Gem::Requirement
80
66
  requirements:
81
67
  - - "~>"
82
68
  - !ruby/object:Gem::Version
83
- version: '3.0'
69
+ version: '2.2'
84
70
  - !ruby/object:Gem::Dependency
85
71
  name: scrypt
86
72
  requirement: !ruby/object:Gem::Requirement
@@ -109,6 +95,7 @@ files:
109
95
  - ".gitignore"
110
96
  - ".gitmodules"
111
97
  - ".rspec"
98
+ - ".yardopts"
112
99
  - AUTHORS.txt
113
100
  - CHANGELOG.md
114
101
  - Gemfile
@@ -120,14 +107,25 @@ files:
120
107
  - eth.gemspec
121
108
  - lib/eth.rb
122
109
  - lib/eth/abi.rb
123
- - lib/eth/abi/constant.rb
124
110
  - lib/eth/abi/type.rb
125
111
  - lib/eth/address.rb
112
+ - lib/eth/api.rb
126
113
  - lib/eth/chain.rb
114
+ - lib/eth/client.rb
115
+ - lib/eth/client/http.rb
116
+ - lib/eth/client/ipc.rb
117
+ - lib/eth/constant.rb
127
118
  - lib/eth/eip712.rb
128
119
  - lib/eth/key.rb
129
120
  - lib/eth/key/decrypter.rb
130
121
  - lib/eth/key/encrypter.rb
122
+ - lib/eth/rlp.rb
123
+ - lib/eth/rlp/decoder.rb
124
+ - lib/eth/rlp/encoder.rb
125
+ - lib/eth/rlp/sedes.rb
126
+ - lib/eth/rlp/sedes/big_endian_int.rb
127
+ - lib/eth/rlp/sedes/binary.rb
128
+ - lib/eth/rlp/sedes/list.rb
131
129
  - lib/eth/signature.rb
132
130
  - lib/eth/tx.rb
133
131
  - lib/eth/tx/eip1559.rb
@@ -140,10 +138,11 @@ homepage: https://github.com/q9f/eth.rb
140
138
  licenses:
141
139
  - Apache-2.0
142
140
  metadata:
143
- homepage_uri: https://github.com/q9f/eth.rb
144
- source_code_uri: https://github.com/q9f/eth.rb
145
- github_repo: https://github.com/q9f/eth.rb
146
141
  bug_tracker_uri: https://github.com/q9f/eth.rb/issues
142
+ changelog_uri: https://github.com/q9f/eth.rb/blob/main/CHANGELOG.md
143
+ documentation_uri: https://q9f.github.io/eth.rb/
144
+ github_repo: https://github.com/q9f/eth.rb
145
+ source_code_uri: https://github.com/q9f/eth.rb
147
146
  post_install_message:
148
147
  rdoc_options: []
149
148
  require_paths:
@@ -162,7 +161,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
162
161
  - !ruby/object:Gem::Version
163
162
  version: '0'
164
163
  requirements: []
165
- rubygems_version: 3.2.29
164
+ rubygems_version: 3.3.5
166
165
  signing_key:
167
166
  specification_version: 4
168
167
  summary: Ruby Ethereum library.
@@ -1,63 +0,0 @@
1
- # Copyright (c) 2016-2022 The Ruby-Eth Contributors
2
- #
3
- # Licensed under the Apache License, Version 2.0 (the "License");
4
- # you may not use this file except in compliance with the License.
5
- # You may obtain a copy of the License at
6
- #
7
- # http://www.apache.org/licenses/LICENSE-2.0
8
- #
9
- # Unless required by applicable law or agreed to in writing, software
10
- # distributed under the License is distributed on an "AS IS" BASIS,
11
- # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12
- # See the License for the specific language governing permissions and
13
- # limitations under the License.
14
-
15
- # -*- encoding : ascii-8bit -*-
16
-
17
- # Provides the `Eth` module.
18
- module Eth
19
-
20
- # Provides a Ruby implementation of the Ethereum Applicatoin Binary Interface (ABI).
21
- module Abi
22
-
23
- # Provides commonly used constants, such as zero bytes or zero keys.
24
- module Constant
25
-
26
- # The empty byte is defined as "".
27
- BYTE_EMPTY = "".freeze
28
-
29
- # The zero byte is 0x00.
30
- BYTE_ZERO = "\x00".freeze
31
-
32
- # The byte one is 0x01.
33
- BYTE_ONE = "\x01".freeze
34
-
35
- # The size of a 32-bit number.
36
- TT32 = (2 ** 32).freeze
37
-
38
- # The size of a 256-bit number.
39
- TT256 = (2 ** 256).freeze
40
-
41
- # The maximum possible value of an UInt256.
42
- UINT_MAX = (2 ** 256 - 1).freeze
43
-
44
- # The minimum possible value of an UInt256.
45
- UINT_MIN = 0.freeze
46
-
47
- # The maximum possible value of an Int256.
48
- INT_MAX = (2 ** 255 - 1).freeze
49
-
50
- # The minimum possible value of an Int256.
51
- INT_MIN = (-2 ** 255).freeze
52
-
53
- # A hash containing only zeros.
54
- HASH_ZERO = ("\x00" * 32).freeze
55
-
56
- # A private key containing only zeros.
57
- PRIVKEY_ZERO = ("\x00" * 32).freeze
58
-
59
- # A private key containing only zeros (hex).
60
- PRIVKEY_ZERO_HEX = ("0" * 64).freeze
61
- end
62
- end
63
- end