eth 0.5.0 → 0.5.1

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.
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