etherlite 0.5.2 → 0.6.0

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: 6bd7c04f60e0b06abbc63f817737ef0deea013791b885151d41f1789d57092a5
4
- data.tar.gz: dbd6bf87f3e54a7e7c855e6e6bcf14226f5b708c5d8789c7b80b52e931f0dffc
3
+ metadata.gz: 98f9a12feec6ffb0a40a90f914810d9960f526920cc86bbbfe1c323ea83cc2ea
4
+ data.tar.gz: ea64f460710a7f52bcc3b1ea1a0ec1f7dbc2c3d06eba96f5a07df491efd07bb7
5
5
  SHA512:
6
- metadata.gz: 2afa891466239576519823c40b146196ecd64f1ec9ff2afb20bac2b3b5010f2d4fe79dbc2811c83e461d3005b917dc405163f2e06556126f9af3644aea22a50f
7
- data.tar.gz: cd7ce4b0800fe121a0ba5b9ed0e7c86de252101f3186d9504c4f69df0d0dde6300ba885762feb4f76f41ccd2981e1dacc75f1234ae01876324be8ffb6527d492
6
+ metadata.gz: 8af135b1ea2716ee896df900dcc425fd47d0384990d89964fd06b43dae03ad7c0e3bf1937937b0119ebed6171e416548d4744b258b0607ddf6a6dae9bcd45f2d
7
+ data.tar.gz: 6e0f1ec2f8db9860147e475b0ec7e283902ce70a580a6633d5eff126d18b3dcbd6c039f72ddeed4b1a47e0b30edd7cb7c2caa1b22fe83548add6591e2f19f7dd
@@ -0,0 +1,25 @@
1
+ name: Publish to rubygems
2
+
3
+ on:
4
+ push:
5
+ tags:
6
+ - v*
7
+ jobs:
8
+ build:
9
+ runs-on: ubuntu-latest
10
+ steps:
11
+ - uses: actions/checkout@v3
12
+ - uses: ruby/setup-ruby@v1
13
+ with:
14
+ ruby-version: 3.0.0
15
+ - run: bundle install
16
+ - name: publish gem
17
+ run: |
18
+ mkdir -p $HOME/.gem
19
+ touch $HOME/.gem/credentials
20
+ chmod 0600 $HOME/.gem/credentials
21
+ printf -- "---\n:rubygems_api_key: ${GEM_HOST_API_KEY}\n" > $HOME/.gem/credentials
22
+ gem build *.gemspec
23
+ gem push *.gem
24
+ env:
25
+ GEM_HOST_API_KEY: "${{secrets.RUBYGEMS_API_KEY}}"
data/etherlite.gemspec CHANGED
@@ -1,34 +1,35 @@
1
- # coding: utf-8
2
- lib = File.expand_path('../lib', __FILE__)
1
+ lib = File.expand_path('lib', __dir__)
3
2
  $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
3
  require 'etherlite/version'
5
4
 
6
5
  Gem::Specification.new do |spec|
7
- spec.name = "etherlite"
6
+ spec.name = 'etherlite'
8
7
  spec.version = Etherlite::VERSION
9
- spec.authors = ["Ignacio Baixas"]
10
- spec.email = ["ignacio@surbtc.com"]
8
+ spec.authors = ['Ignacio Baixas']
9
+ spec.email = ['ignacio@budacom.com']
11
10
 
12
- spec.summary = %q{Ethereum integration for ruby on rails}
13
- spec.description = %q{}
14
- spec.homepage = "https://github.com/SurBTC/etherlite"
15
- spec.license = "MIT"
11
+ spec.summary = 'Ethereum integration for ruby on rails'
12
+ spec.description = ''
13
+ spec.homepage = 'https://github.com/budacom/etherlite'
14
+ spec.license = 'MIT'
16
15
 
17
- spec.files = `git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(test|spec|features)/}) }
18
- spec.bindir = "exe"
16
+ spec.files = `git ls-files -z`.split("\x0").reject do |f|
17
+ f.match(%r{^(test|spec|features)/})
18
+ end
19
+ spec.bindir = 'exe'
19
20
  spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
20
- spec.require_paths = ["lib"]
21
+ spec.require_paths = ['lib']
21
22
 
22
- spec.add_dependency "digest-sha3", "~> 1.1"
23
- spec.add_dependency "power-types", "~> 0.1"
24
- spec.add_dependency "eth", "~> 0.4.4"
25
- spec.add_dependency "activesupport"
23
+ spec.add_dependency 'activesupport'
24
+ spec.add_dependency 'eth', '~> 0.5.10'
25
+ spec.add_dependency 'keccak', '~> 1.3', '>= 1.3.1'
26
+ spec.add_dependency 'power-types', '~> 0.1'
26
27
 
27
- spec.add_development_dependency "bundler", "~> 2.1.4"
28
- spec.add_development_dependency "rake", "~> 10.0"
29
- spec.add_development_dependency "rspec", "~> 3.0"
30
- spec.add_development_dependency "guard", "~> 2.14"
31
- spec.add_development_dependency "guard-rspec", "~> 4.7"
32
- spec.add_development_dependency "webmock", "~> 3.7.5"
33
- spec.add_development_dependency "pry"
28
+ spec.add_development_dependency 'bundler', '~> 2.1'
29
+ spec.add_development_dependency 'guard', '~> 2.14'
30
+ spec.add_development_dependency 'guard-rspec', '~> 4.7'
31
+ spec.add_development_dependency 'pry'
32
+ spec.add_development_dependency 'rake', '~> 10.0'
33
+ spec.add_development_dependency 'rspec', '~> 3.0'
34
+ spec.add_development_dependency 'webmock', '~> 3.7.5'
34
35
  end
@@ -5,13 +5,14 @@ module Etherlite
5
5
  class PrivateKey < Base
6
6
  def initialize(_connection, _pk)
7
7
  @key = Eth::Key.new priv: _pk
8
- super _connection, Etherlite::Utils.normalize_address(@key.address)
8
+ super _connection, Etherlite::Utils.normalize_address(@key.address.to_s)
9
9
  end
10
10
 
11
11
  def build_raw_transaction(_options = {})
12
12
  nonce = nonce_manager.next_nonce_for(normalized_address, _options.slice(:replace, :nonce))
13
13
 
14
14
  tx = Eth::Tx.new(
15
+ chain_id: @connection.chain_id,
15
16
  value: _options.fetch(:value, 0),
16
17
  data: _options.fetch(:data, ''),
17
18
  gas_limit: _options.fetch(:gas, 90_000),
@@ -20,23 +21,20 @@ module Etherlite
20
21
  nonce: nonce
21
22
  )
22
23
 
23
- sign_with_connection_chain tx
24
-
24
+ tx.sign @key
25
25
  tx
26
26
  end
27
27
 
28
28
  def send_transaction(_options = {})
29
29
  tx = build_raw_transaction(_options)
30
30
 
31
- nonce_manager.with_next_nonce_for(normalized_address, nonce: tx.nonce) do |nonce|
32
- Etherlite::Transaction.new @connection, @connection.eth_send_raw_transaction(tx.hex)
31
+ nonce_manager.with_next_nonce_for(normalized_address, nonce: tx.signer_nonce) do |_|
32
+ Etherlite::Transaction.new @connection, @connection.eth_send_raw_transaction("0x#{tx.hex}")
33
33
  end
34
34
  end
35
35
 
36
36
  private
37
37
 
38
- @@eth_mutex = Mutex.new
39
-
40
38
  def gas_price
41
39
  # TODO: improve on this
42
40
  @gas_price ||= connection.eth_gas_price
@@ -45,13 +43,6 @@ module Etherlite
45
43
  def nonce_manager
46
44
  Etherlite::NonceManager.new @connection
47
45
  end
48
-
49
- def sign_with_connection_chain(_tx)
50
- @@eth_mutex.synchronize do
51
- Eth.configure { |c| c.chain_id = @connection.chain_id }
52
- _tx.sign @key
53
- end
54
- end
55
46
  end
56
47
  end
57
48
  end
@@ -60,15 +60,6 @@ module Etherlite
60
60
  @anonymous_account ||= Etherlite::Account::Anonymous.new(connection)
61
61
  end
62
62
 
63
- def account_from_pk(_pk)
64
- Etherlite.logger.warn(
65
- "use of 'account_from_pk' is deprecated and will be removed in next version, \
66
- use 'load_account' instead"
67
- )
68
-
69
- load_account(from_pk: _pk)
70
- end
71
-
72
63
  def_delegators :default_account, :unlock, :lock, :normalized_address, :transfer_to, :call
73
64
  end
74
65
  end
@@ -3,7 +3,7 @@ module Etherlite
3
3
  include Api::Rpc
4
4
  include Api::ParityRpc
5
5
 
6
- attr_reader :chain_id, :use_parity
6
+ attr_reader :uri, :chain_id, :use_parity
7
7
 
8
8
  def initialize(_uri, _options = {})
9
9
  @uri = _uri
@@ -5,7 +5,7 @@ module Etherlite
5
5
  extend self
6
6
 
7
7
  def sha3(_data)
8
- Digest::SHA3.hexdigest(_data, 256)
8
+ Digest::Keccak.hexdigest(_data, 256)
9
9
  end
10
10
 
11
11
  def uint_to_hex(_value, bytes: 32)
@@ -13,7 +13,7 @@ module Etherlite
13
13
  end
14
14
 
15
15
  def int_to_hex(_value, bytes: 32)
16
- if _value < 0
16
+ if _value.negative?
17
17
  # 2's complement for negative values
18
18
  (_value & ((1 << bytes * 8) - 1)).to_s(16)
19
19
  else
@@ -28,7 +28,7 @@ module Etherlite
28
28
  def hex_to_int(_hex_value, bytes: 32)
29
29
  value = _hex_value.hex
30
30
  top_bit = (1 << (bytes * 8 - 1))
31
- value & top_bit > 0 ? (value - 2 * top_bit) : value
31
+ (value & top_bit).positive? ? (value - 2 * top_bit) : value
32
32
  end
33
33
 
34
34
  def valid_address?(_address)
@@ -45,21 +45,23 @@ module Etherlite
45
45
  else
46
46
  _value = _value.to_s
47
47
  raise ArgumentError, 'invalid address' unless valid_address? _value
48
+
48
49
  normalize_address _value
49
50
  end
50
51
  end
51
52
 
52
53
  def encode_address_param(_value)
53
- '0x' + normalize_address_param(_value)
54
+ "0x#{normalize_address_param(_value)}"
54
55
  end
55
56
 
56
57
  def encode_block_param(_value)
57
58
  return _value.to_s if ['pending', 'earliest', 'latest'].include?(_value.to_s)
58
- '0x' + _value.to_s(16)
59
+
60
+ "0x#{_value.to_s(16)}"
59
61
  end
60
62
 
61
63
  def encode_quantity_param(_value)
62
- '0x' + _value.to_s(16)
64
+ "0x#{_value.to_s(16)}"
63
65
  end
64
66
  end
65
67
  end
@@ -1,3 +1,3 @@
1
1
  module Etherlite
2
- VERSION = "0.5.2"
2
+ VERSION = '0.6.0'.freeze
3
3
  end
data/lib/etherlite.rb CHANGED
@@ -1,4 +1,4 @@
1
- require "digest/sha3"
1
+ require 'digest/keccak'
2
2
  require "active_support/all"
3
3
  require "forwardable"
4
4
  require "net/http"
@@ -56,7 +56,7 @@ module Etherlite
56
56
  _url = URI(_url) unless _url.is_a? URI
57
57
 
58
58
  options = config.default_connection_options
59
- options = options.merge _options.slice options.keys
59
+ options = options.merge _options.slice(*options.keys)
60
60
 
61
61
  Client.new Connection.new(_url, options)
62
62
  end
metadata CHANGED
@@ -1,179 +1,185 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: etherlite
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.5.2
4
+ version: 0.6.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Ignacio Baixas
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2021-06-29 00:00:00.000000000 Z
11
+ date: 2023-04-21 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
- name: digest-sha3
14
+ name: activesupport
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
- - - "~>"
17
+ - - ">="
18
18
  - !ruby/object:Gem::Version
19
- version: '1.1'
19
+ version: '0'
20
20
  type: :runtime
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
- - - "~>"
24
+ - - ">="
25
25
  - !ruby/object:Gem::Version
26
- version: '1.1'
26
+ version: '0'
27
27
  - !ruby/object:Gem::Dependency
28
- name: power-types
28
+ name: eth
29
29
  requirement: !ruby/object:Gem::Requirement
30
30
  requirements:
31
31
  - - "~>"
32
32
  - !ruby/object:Gem::Version
33
- version: '0.1'
33
+ version: 0.5.10
34
34
  type: :runtime
35
35
  prerelease: false
36
36
  version_requirements: !ruby/object:Gem::Requirement
37
37
  requirements:
38
38
  - - "~>"
39
39
  - !ruby/object:Gem::Version
40
- version: '0.1'
40
+ version: 0.5.10
41
41
  - !ruby/object:Gem::Dependency
42
- name: eth
42
+ name: keccak
43
43
  requirement: !ruby/object:Gem::Requirement
44
44
  requirements:
45
45
  - - "~>"
46
46
  - !ruby/object:Gem::Version
47
- version: 0.4.4
47
+ version: '1.3'
48
+ - - ">="
49
+ - !ruby/object:Gem::Version
50
+ version: 1.3.1
48
51
  type: :runtime
49
52
  prerelease: false
50
53
  version_requirements: !ruby/object:Gem::Requirement
51
54
  requirements:
52
55
  - - "~>"
53
56
  - !ruby/object:Gem::Version
54
- version: 0.4.4
57
+ version: '1.3'
58
+ - - ">="
59
+ - !ruby/object:Gem::Version
60
+ version: 1.3.1
55
61
  - !ruby/object:Gem::Dependency
56
- name: activesupport
62
+ name: power-types
57
63
  requirement: !ruby/object:Gem::Requirement
58
64
  requirements:
59
- - - ">="
65
+ - - "~>"
60
66
  - !ruby/object:Gem::Version
61
- version: '0'
67
+ version: '0.1'
62
68
  type: :runtime
63
69
  prerelease: false
64
70
  version_requirements: !ruby/object:Gem::Requirement
65
71
  requirements:
66
- - - ">="
72
+ - - "~>"
67
73
  - !ruby/object:Gem::Version
68
- version: '0'
74
+ version: '0.1'
69
75
  - !ruby/object:Gem::Dependency
70
76
  name: bundler
71
77
  requirement: !ruby/object:Gem::Requirement
72
78
  requirements:
73
79
  - - "~>"
74
80
  - !ruby/object:Gem::Version
75
- version: 2.1.4
81
+ version: '2.1'
76
82
  type: :development
77
83
  prerelease: false
78
84
  version_requirements: !ruby/object:Gem::Requirement
79
85
  requirements:
80
86
  - - "~>"
81
87
  - !ruby/object:Gem::Version
82
- version: 2.1.4
88
+ version: '2.1'
83
89
  - !ruby/object:Gem::Dependency
84
- name: rake
90
+ name: guard
85
91
  requirement: !ruby/object:Gem::Requirement
86
92
  requirements:
87
93
  - - "~>"
88
94
  - !ruby/object:Gem::Version
89
- version: '10.0'
95
+ version: '2.14'
90
96
  type: :development
91
97
  prerelease: false
92
98
  version_requirements: !ruby/object:Gem::Requirement
93
99
  requirements:
94
100
  - - "~>"
95
101
  - !ruby/object:Gem::Version
96
- version: '10.0'
102
+ version: '2.14'
97
103
  - !ruby/object:Gem::Dependency
98
- name: rspec
104
+ name: guard-rspec
99
105
  requirement: !ruby/object:Gem::Requirement
100
106
  requirements:
101
107
  - - "~>"
102
108
  - !ruby/object:Gem::Version
103
- version: '3.0'
109
+ version: '4.7'
104
110
  type: :development
105
111
  prerelease: false
106
112
  version_requirements: !ruby/object:Gem::Requirement
107
113
  requirements:
108
114
  - - "~>"
109
115
  - !ruby/object:Gem::Version
110
- version: '3.0'
116
+ version: '4.7'
111
117
  - !ruby/object:Gem::Dependency
112
- name: guard
118
+ name: pry
113
119
  requirement: !ruby/object:Gem::Requirement
114
120
  requirements:
115
- - - "~>"
121
+ - - ">="
116
122
  - !ruby/object:Gem::Version
117
- version: '2.14'
123
+ version: '0'
118
124
  type: :development
119
125
  prerelease: false
120
126
  version_requirements: !ruby/object:Gem::Requirement
121
127
  requirements:
122
- - - "~>"
128
+ - - ">="
123
129
  - !ruby/object:Gem::Version
124
- version: '2.14'
130
+ version: '0'
125
131
  - !ruby/object:Gem::Dependency
126
- name: guard-rspec
132
+ name: rake
127
133
  requirement: !ruby/object:Gem::Requirement
128
134
  requirements:
129
135
  - - "~>"
130
136
  - !ruby/object:Gem::Version
131
- version: '4.7'
137
+ version: '10.0'
132
138
  type: :development
133
139
  prerelease: false
134
140
  version_requirements: !ruby/object:Gem::Requirement
135
141
  requirements:
136
142
  - - "~>"
137
143
  - !ruby/object:Gem::Version
138
- version: '4.7'
144
+ version: '10.0'
139
145
  - !ruby/object:Gem::Dependency
140
- name: webmock
146
+ name: rspec
141
147
  requirement: !ruby/object:Gem::Requirement
142
148
  requirements:
143
149
  - - "~>"
144
150
  - !ruby/object:Gem::Version
145
- version: 3.7.5
151
+ version: '3.0'
146
152
  type: :development
147
153
  prerelease: false
148
154
  version_requirements: !ruby/object:Gem::Requirement
149
155
  requirements:
150
156
  - - "~>"
151
157
  - !ruby/object:Gem::Version
152
- version: 3.7.5
158
+ version: '3.0'
153
159
  - !ruby/object:Gem::Dependency
154
- name: pry
160
+ name: webmock
155
161
  requirement: !ruby/object:Gem::Requirement
156
162
  requirements:
157
- - - ">="
163
+ - - "~>"
158
164
  - !ruby/object:Gem::Version
159
- version: '0'
165
+ version: 3.7.5
160
166
  type: :development
161
167
  prerelease: false
162
168
  version_requirements: !ruby/object:Gem::Requirement
163
169
  requirements:
164
- - - ">="
170
+ - - "~>"
165
171
  - !ruby/object:Gem::Version
166
- version: '0'
172
+ version: 3.7.5
167
173
  description: ''
168
174
  email:
169
- - ignacio@surbtc.com
175
+ - ignacio@budacom.com
170
176
  executables: []
171
177
  extensions: []
172
178
  extra_rdoc_files: []
173
179
  files:
180
+ - ".github/workflows/publisher.yaml"
174
181
  - ".gitignore"
175
182
  - ".rspec"
176
- - ".travis.yml"
177
183
  - CODE_OF_CONDUCT.md
178
184
  - Gemfile
179
185
  - Guardfile
@@ -229,7 +235,7 @@ files:
229
235
  - lib/etherlite/version.rb
230
236
  - lib/generators/etherlite/init_generator.rb
231
237
  - lib/generators/etherlite/templates/etherlite.yml
232
- homepage: https://github.com/SurBTC/etherlite
238
+ homepage: https://github.com/budacom/etherlite
233
239
  licenses:
234
240
  - MIT
235
241
  metadata: {}
@@ -248,7 +254,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
248
254
  - !ruby/object:Gem::Version
249
255
  version: '0'
250
256
  requirements: []
251
- rubygems_version: 3.0.3
257
+ rubygems_version: 3.2.3
252
258
  signing_key:
253
259
  specification_version: 4
254
260
  summary: Ethereum integration for ruby on rails
data/.travis.yml DELETED
@@ -1,5 +0,0 @@
1
- sudo: false
2
- language: ruby
3
- rvm:
4
- - 2.3.1
5
- before_install: gem install bundler -v 1.12.4