etherlite 0.2.5 → 0.4.2
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 +5 -5
- data/etherlite.gemspec +2 -2
- data/lib/etherlite/account/base.rb +10 -2
- data/lib/etherlite/account/private_key.rb +3 -1
- data/lib/etherlite/api/node.rb +5 -8
- data/lib/etherlite/commands/abi/load_contract.rb +14 -2
- data/lib/etherlite/nonce_manager.rb +5 -2
- data/lib/etherlite/transaction.rb +48 -34
- data/lib/etherlite/version.rb +1 -1
- metadata +7 -8
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
|
-
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: 7d5972b71c09d1bb9d1a3f732b8c1b5fe0057ad46c0159c1c93e5fbe690ef695
|
4
|
+
data.tar.gz: 3b4fc972adac1ecbf23b7188040e8ba729d136ef89f51a4045d9c2339725ff34
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 6b594fc27d066ecd3ee27025f990996d9badc2bc37efc9b770bfad55cf8a96b2779fb61a59d1dbb214de5905bff3863fa7b9975b145f94a9e88521e9055838d0
|
7
|
+
data.tar.gz: 416610c6eb6f4466c5aee182147ee8bc456b8aaaf851cf5a1644bde4583df980a3dcaa822c92617e25393bdf145386200366f284c0310fcb13b283032f7a4a94
|
data/etherlite.gemspec
CHANGED
@@ -24,11 +24,11 @@ Gem::Specification.new do |spec|
|
|
24
24
|
spec.add_dependency "eth", "~> 0.4.4"
|
25
25
|
spec.add_dependency "activesupport"
|
26
26
|
|
27
|
-
spec.add_development_dependency "bundler", "~> 1.
|
27
|
+
spec.add_development_dependency "bundler", "~> 2.1.4"
|
28
28
|
spec.add_development_dependency "rake", "~> 10.0"
|
29
29
|
spec.add_development_dependency "rspec", "~> 3.0"
|
30
30
|
spec.add_development_dependency "guard", "~> 2.14"
|
31
31
|
spec.add_development_dependency "guard-rspec", "~> 4.7"
|
32
|
-
spec.add_development_dependency "webmock", "~> 3.
|
32
|
+
spec.add_development_dependency "webmock", "~> 3.7.5"
|
33
33
|
spec.add_development_dependency "pry"
|
34
34
|
end
|
@@ -9,6 +9,15 @@ module Etherlite::Account
|
|
9
9
|
@normalized_address = _normalized_address
|
10
10
|
end
|
11
11
|
|
12
|
+
def next_nonce
|
13
|
+
if @connection.use_parity
|
14
|
+
@connection.parity_next_nonce(address)
|
15
|
+
else
|
16
|
+
# https://github.com/ethereum/go-ethereum/issues/2736
|
17
|
+
@connection.eth_get_transaction_count(address, 'pending')
|
18
|
+
end
|
19
|
+
end
|
20
|
+
|
12
21
|
def transfer_to(_target, _options = {})
|
13
22
|
send_transaction _options.merge(to: _target, value: _options.fetch(:amount, 0))
|
14
23
|
end
|
@@ -30,7 +39,7 @@ module Etherlite::Account
|
|
30
39
|
end
|
31
40
|
|
32
41
|
def send_transaction(_options = {})
|
33
|
-
raise NotSupportedError, 'transactions are not supported by this kind of account'
|
42
|
+
raise Etherlite::NotSupportedError, 'transactions are not supported by this kind of account'
|
34
43
|
end
|
35
44
|
|
36
45
|
def ==(_other)
|
@@ -41,7 +50,6 @@ module Etherlite::Account
|
|
41
50
|
|
42
51
|
def call_constant(_target, _function, _params, _options)
|
43
52
|
params = {
|
44
|
-
from: json_encoded_address,
|
45
53
|
to: Etherlite::Utils.encode_address_param(_target),
|
46
54
|
data: _function.encode(_params)
|
47
55
|
}
|
@@ -9,7 +9,9 @@ module Etherlite
|
|
9
9
|
end
|
10
10
|
|
11
11
|
def send_transaction(_options = {})
|
12
|
-
|
12
|
+
nonce_options = _options.slice(:replace, :nonce)
|
13
|
+
|
14
|
+
nonce_manager.with_next_nonce_for(normalized_address, nonce_options) do |nonce|
|
13
15
|
tx = Eth::Tx.new(
|
14
16
|
value: _options.fetch(:value, 0),
|
15
17
|
data: _options.fetch(:data, ''),
|
data/lib/etherlite/api/node.rb
CHANGED
@@ -53,7 +53,11 @@ module Etherlite
|
|
53
53
|
end
|
54
54
|
|
55
55
|
def default_account
|
56
|
-
@default_account ||=
|
56
|
+
@default_account ||= (accounts.first || anonymous_account)
|
57
|
+
end
|
58
|
+
|
59
|
+
def anonymous_account
|
60
|
+
@anonymous_account ||= Etherlite::Account::Anonymous.new(connection)
|
57
61
|
end
|
58
62
|
|
59
63
|
def account_from_pk(_pk)
|
@@ -66,13 +70,6 @@ use 'load_account' instead"
|
|
66
70
|
end
|
67
71
|
|
68
72
|
def_delegators :default_account, :unlock, :lock, :normalized_address, :transfer_to, :call
|
69
|
-
|
70
|
-
private
|
71
|
-
|
72
|
-
def load_default_account
|
73
|
-
# TODO: consider configuring a global PK and allow the default account to use it
|
74
|
-
accounts.first || Etherlite::Account::Anonymous.new(connection)
|
75
|
-
end
|
76
73
|
end
|
77
74
|
end
|
78
75
|
end
|
@@ -81,9 +81,21 @@ module Etherlite::Abi
|
|
81
81
|
)
|
82
82
|
end,
|
83
83
|
(_definition['outputs'] || []).map { |input| LoadType.for signature: input['type'] },
|
84
|
-
_definition
|
85
|
-
_definition
|
84
|
+
function_payable?(_definition),
|
85
|
+
function_constant?(_definition)
|
86
86
|
)
|
87
87
|
end
|
88
|
+
|
89
|
+
def function_payable?(_definition)
|
90
|
+
return _definition['payable'] if _definition.key? 'payable'
|
91
|
+
|
92
|
+
_definition['stateMutability'] == 'payable'
|
93
|
+
end
|
94
|
+
|
95
|
+
def function_constant?(_definition)
|
96
|
+
return _definition['constant'] if _definition.key? 'constant'
|
97
|
+
|
98
|
+
_definition['stateMutability'] == 'pure' || _definition['stateMutability'] == 'view'
|
99
|
+
end
|
88
100
|
end
|
89
101
|
end
|
@@ -17,9 +17,12 @@ module Etherlite
|
|
17
17
|
last_nonce
|
18
18
|
end
|
19
19
|
|
20
|
-
def with_next_nonce_for(_normalized_address)
|
20
|
+
def with_next_nonce_for(_normalized_address, replace: false, nonce: nil)
|
21
21
|
@@nonce_mutex.synchronize do
|
22
|
-
|
22
|
+
return yield nonce if nonce.present?
|
23
|
+
|
24
|
+
next_nonce = last_nonce_for(_normalized_address)
|
25
|
+
next_nonce += 1 if next_nonce.negative? || !replace # if first tx, don't replace
|
23
26
|
|
24
27
|
begin
|
25
28
|
result = yield next_nonce
|
@@ -1,72 +1,92 @@
|
|
1
1
|
module Etherlite
|
2
2
|
class Transaction
|
3
|
-
attr_reader :tx_hash
|
3
|
+
attr_reader :tx_hash
|
4
4
|
|
5
5
|
def initialize(_connection, _tx_hash)
|
6
6
|
@connection = _connection
|
7
7
|
@tx_hash = _tx_hash
|
8
|
-
@
|
8
|
+
@loaded = false
|
9
9
|
end
|
10
10
|
|
11
11
|
def refresh
|
12
|
-
@
|
12
|
+
@original = @connection.eth_get_transaction_by_hash(@tx_hash)
|
13
|
+
@loaded = true
|
13
14
|
self
|
14
15
|
end
|
15
16
|
|
17
|
+
def original
|
18
|
+
refresh unless @loaded
|
19
|
+
@original
|
20
|
+
end
|
21
|
+
|
16
22
|
def removed?
|
17
|
-
|
23
|
+
original.nil?
|
18
24
|
end
|
19
25
|
|
20
|
-
def
|
21
|
-
|
26
|
+
def mined?
|
27
|
+
original.present? && !original['blockNumber'].nil?
|
22
28
|
end
|
23
29
|
|
24
|
-
def
|
25
|
-
|
26
|
-
status = @receipt['status']
|
27
|
-
status.is_a?(String) ? Utils.hex_to_uint(status) : status
|
30
|
+
def gas
|
31
|
+
original && Utils.hex_to_uint(original['gas'])
|
28
32
|
end
|
29
33
|
|
30
|
-
def
|
31
|
-
|
34
|
+
def gas_price
|
35
|
+
original && Utils.hex_to_uint(original['gasPrice'])
|
36
|
+
end
|
37
|
+
|
38
|
+
def value
|
39
|
+
original && Utils.hex_to_uint(original['value'])
|
40
|
+
end
|
41
|
+
|
42
|
+
def block_number
|
43
|
+
return nil unless mined?
|
44
|
+
|
45
|
+
Utils.hex_to_uint(original['blockNumber'])
|
32
46
|
end
|
33
47
|
|
34
48
|
def confirmations
|
35
49
|
return 0 unless mined?
|
36
50
|
|
37
|
-
@connection.eth_block_number - block_number
|
51
|
+
(@connection.eth_block_number - block_number) + 1
|
38
52
|
end
|
39
53
|
|
40
|
-
|
41
|
-
|
54
|
+
# receipt attributes
|
55
|
+
|
56
|
+
def receipt
|
57
|
+
return nil unless mined?
|
58
|
+
|
59
|
+
@receipt ||= @connection.eth_get_transaction_receipt(@tx_hash)
|
42
60
|
end
|
43
61
|
|
44
|
-
def
|
45
|
-
|
62
|
+
def status
|
63
|
+
return nil if receipt.nil?
|
64
|
+
|
65
|
+
receipt['status'].is_a?(String) ? Utils.hex_to_uint(receipt['status']) : receipt['status']
|
46
66
|
end
|
47
67
|
|
48
|
-
def
|
49
|
-
|
68
|
+
def succeeded?
|
69
|
+
status == 1
|
50
70
|
end
|
51
71
|
|
52
|
-
def
|
53
|
-
|
72
|
+
def failed?
|
73
|
+
status == 0
|
54
74
|
end
|
55
75
|
|
56
|
-
def
|
57
|
-
|
76
|
+
def gas_used
|
77
|
+
receipt && Utils.hex_to_uint(receipt['gasUsed'])
|
58
78
|
end
|
59
79
|
|
60
|
-
def
|
61
|
-
|
80
|
+
def logs
|
81
|
+
receipt && (receipt['logs'] || [])
|
62
82
|
end
|
63
83
|
|
64
|
-
def
|
65
|
-
|
84
|
+
def events
|
85
|
+
receipt && ::Etherlite::EventProvider.parse_raw_logs(@connection, logs)
|
66
86
|
end
|
67
87
|
|
68
88
|
def contract_address
|
69
|
-
|
89
|
+
receipt && receipt['contractAddress']
|
70
90
|
end
|
71
91
|
|
72
92
|
def wait_for_block(timeout: 120)
|
@@ -79,11 +99,5 @@ module Etherlite
|
|
79
99
|
|
80
100
|
true
|
81
101
|
end
|
82
|
-
|
83
|
-
private
|
84
|
-
|
85
|
-
def original
|
86
|
-
@original ||= @connection.eth_get_transaction_by_hash(@tx_hash)
|
87
|
-
end
|
88
102
|
end
|
89
103
|
end
|
data/lib/etherlite/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: etherlite
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.2
|
4
|
+
version: 0.4.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Ignacio Baixas
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2021-06-08 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: digest-sha3
|
@@ -72,14 +72,14 @@ dependencies:
|
|
72
72
|
requirements:
|
73
73
|
- - "~>"
|
74
74
|
- !ruby/object:Gem::Version
|
75
|
-
version:
|
75
|
+
version: 2.1.4
|
76
76
|
type: :development
|
77
77
|
prerelease: false
|
78
78
|
version_requirements: !ruby/object:Gem::Requirement
|
79
79
|
requirements:
|
80
80
|
- - "~>"
|
81
81
|
- !ruby/object:Gem::Version
|
82
|
-
version:
|
82
|
+
version: 2.1.4
|
83
83
|
- !ruby/object:Gem::Dependency
|
84
84
|
name: rake
|
85
85
|
requirement: !ruby/object:Gem::Requirement
|
@@ -142,14 +142,14 @@ dependencies:
|
|
142
142
|
requirements:
|
143
143
|
- - "~>"
|
144
144
|
- !ruby/object:Gem::Version
|
145
|
-
version: 3.
|
145
|
+
version: 3.7.5
|
146
146
|
type: :development
|
147
147
|
prerelease: false
|
148
148
|
version_requirements: !ruby/object:Gem::Requirement
|
149
149
|
requirements:
|
150
150
|
- - "~>"
|
151
151
|
- !ruby/object:Gem::Version
|
152
|
-
version: 3.
|
152
|
+
version: 3.7.5
|
153
153
|
- !ruby/object:Gem::Dependency
|
154
154
|
name: pry
|
155
155
|
requirement: !ruby/object:Gem::Requirement
|
@@ -248,8 +248,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
248
248
|
- !ruby/object:Gem::Version
|
249
249
|
version: '0'
|
250
250
|
requirements: []
|
251
|
-
|
252
|
-
rubygems_version: 2.6.14.1
|
251
|
+
rubygems_version: 3.0.3
|
253
252
|
signing_key:
|
254
253
|
specification_version: 4
|
255
254
|
summary: Ethereum integration for ruby on rails
|