tezos_client 0.4.9 → 0.4.11
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 +4 -4
- data/.gitignore +4 -1
- data/Gemfile.lock +6 -1
- data/lib/tezos_client/compute_operation_args_counters.rb +39 -0
- data/lib/tezos_client/operation_mgr.rb +17 -5
- data/lib/tezos_client/operations/operation.rb +3 -3
- data/lib/tezos_client/version.rb +1 -1
- data/lib/tezos_client.rb +0 -1
- data/tezos_client.gemspec +1 -0
- metadata +17 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: c0a4f06598c871a6a091162764772e2314c0e066f3a802cf272bd123010c99a8
|
4
|
+
data.tar.gz: 379749cd74ba26165beda45f4379c84bd48ab1cd1380d142f7a1c298b8c41c97
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: f9dba5d7b1d7ed4189fd19f798e6a0d472f81d216e6809323187a5b3328aac9c4b5d2c06145486762c1f80b8a9f2658901f57f811b1ab2c90606d852cdd15b18
|
7
|
+
data.tar.gz: 653e578e0b6593fc9186e449cc5af8646ee3b331e9f31000ad316ce6c078d1aba7282a39d8d2f42f709abade18ad4791d4866cce44d8de1b59c411c14646ee29
|
data/.gitignore
CHANGED
data/Gemfile.lock
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
PATH
|
2
2
|
remote: .
|
3
3
|
specs:
|
4
|
-
tezos_client (0.4.
|
4
|
+
tezos_client (0.4.11)
|
5
5
|
activesupport (~> 5.2.3)
|
6
6
|
base58 (~> 0.2.3)
|
7
7
|
bip_mnemonic (~> 0.0.2)
|
@@ -37,6 +37,7 @@ GEM
|
|
37
37
|
base58 (0.2.3)
|
38
38
|
bip_mnemonic (0.0.4)
|
39
39
|
builder (3.2.3)
|
40
|
+
coderay (1.1.2)
|
40
41
|
concurrent-ruby (1.1.5)
|
41
42
|
crack (0.4.3)
|
42
43
|
safe_yaml (~> 1.0.0)
|
@@ -73,6 +74,9 @@ GEM
|
|
73
74
|
parallel (1.17.0)
|
74
75
|
parser (2.6.4.0)
|
75
76
|
ast (~> 2.4.0)
|
77
|
+
pry (0.12.2)
|
78
|
+
coderay (~> 1.1.0)
|
79
|
+
method_source (~> 0.9.0)
|
76
80
|
public_suffix (4.0.1)
|
77
81
|
rack (2.0.7)
|
78
82
|
rack-test (1.1.0)
|
@@ -147,6 +151,7 @@ PLATFORMS
|
|
147
151
|
|
148
152
|
DEPENDENCIES
|
149
153
|
bundler (~> 1.16)
|
154
|
+
pry
|
150
155
|
rake (~> 10.0)
|
151
156
|
rspec (~> 3.0)
|
152
157
|
rubocop-rails_config
|
@@ -0,0 +1,39 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
class TezosClient
|
4
|
+
class ComputeOperationArgsCounters
|
5
|
+
def initialize(pending_operations:, operation_args:)
|
6
|
+
@pending_operations = pending_operations
|
7
|
+
@operation_args = Marshal.load(Marshal.dump(operation_args)) # deep copy of the object
|
8
|
+
end
|
9
|
+
|
10
|
+
def call
|
11
|
+
max_counter_by_source = group_by_max_counter(
|
12
|
+
@pending_operations["applied"].map { |operation| operation["contents"] }
|
13
|
+
.flatten
|
14
|
+
.select { |content| content.has_key?("source") }
|
15
|
+
)
|
16
|
+
|
17
|
+
@operation_args.each do |operation|
|
18
|
+
source = operation[:source]
|
19
|
+
# do not update the counter of an operation not present in the mempool
|
20
|
+
next unless max_counter_by_source[source]
|
21
|
+
|
22
|
+
operation[:counter] = (max_counter_by_source[source].to_i + 1).to_s
|
23
|
+
# update max_counter_by_source as if the current operation was added to the mempool
|
24
|
+
max_counter_by_source[source] = operation[:counter]
|
25
|
+
end
|
26
|
+
|
27
|
+
@operation_args
|
28
|
+
end
|
29
|
+
|
30
|
+
private
|
31
|
+
def group_by_max_counter(arr)
|
32
|
+
arr.map(&:with_indifferent_access)
|
33
|
+
.group_by { |hsh| hsh[:source] }
|
34
|
+
.each_with_object({}) do |(source, contents), acc|
|
35
|
+
acc[source] = contents.max_by { |content| content[:counter].to_i }[:counter]
|
36
|
+
end
|
37
|
+
end
|
38
|
+
end
|
39
|
+
end
|
@@ -1,6 +1,6 @@
|
|
1
|
+
require "tezos_client/compute_operation_args_counters"
|
1
2
|
|
2
3
|
class TezosClient
|
3
|
-
|
4
4
|
class OperationMgr
|
5
5
|
include Crypto
|
6
6
|
using CurrencyUtils
|
@@ -16,12 +16,17 @@ class TezosClient
|
|
16
16
|
@signed_operation_args_h = nil
|
17
17
|
@branch = args[:branch]
|
18
18
|
@protocol = args[:protocol]
|
19
|
+
@ignore_counter_error = args[:ignore_counter_error]
|
19
20
|
end
|
20
21
|
|
21
22
|
def multiple_operations?
|
22
23
|
@multiple_operations
|
23
24
|
end
|
24
25
|
|
26
|
+
def ignore_counter_error?
|
27
|
+
!!@ignore_counter_error
|
28
|
+
end
|
29
|
+
|
25
30
|
def single_operation?
|
26
31
|
!multiple_operations?
|
27
32
|
end
|
@@ -86,9 +91,8 @@ class TezosClient
|
|
86
91
|
|
87
92
|
def test_and_broadcast
|
88
93
|
simulate_res = simulate
|
89
|
-
|
90
|
-
|
91
94
|
op_id = broadcast
|
95
|
+
|
92
96
|
{
|
93
97
|
operation_id: op_id,
|
94
98
|
operation_results: simulate_res[:operation_results],
|
@@ -108,9 +112,12 @@ class TezosClient
|
|
108
112
|
|
109
113
|
operation_results = rpc_responses.map do |rpc_response|
|
110
114
|
metadata = rpc_response[:metadata]
|
115
|
+
|
111
116
|
total_consumed_storage += compute_consumed_storage(metadata)
|
112
117
|
consumed_gas = compute_consumed_gas(metadata)
|
113
118
|
total_consumed_gas += consumed_gas
|
119
|
+
|
120
|
+
metadata[:operation_result][:consumed_gas] = consumed_gas if metadata.key? :operation_result
|
114
121
|
metadata[:operation_result]
|
115
122
|
end
|
116
123
|
|
@@ -123,11 +130,11 @@ class TezosClient
|
|
123
130
|
end
|
124
131
|
|
125
132
|
def compute_consumed_gas(metadata)
|
126
|
-
consumed_gas = (metadata.dig(:operation_result, :consumed_gas) || "0").to_i
|
133
|
+
consumed_gas = (metadata.dig(:operation_result, :consumed_gas) || "0").to_i
|
127
134
|
|
128
135
|
if metadata.key?(:internal_operation_results)
|
129
136
|
metadata[:internal_operation_results].each do |internal_operation_result|
|
130
|
-
consumed_gas += (internal_operation_result[:result][:consumed_gas] || "0").to_i
|
137
|
+
consumed_gas += (internal_operation_result[:result][:consumed_gas] || "0").to_i
|
131
138
|
end
|
132
139
|
end
|
133
140
|
consumed_gas
|
@@ -149,6 +156,11 @@ class TezosClient
|
|
149
156
|
end
|
150
157
|
|
151
158
|
def broadcast
|
159
|
+
self.rpc_operation_args = ::TezosClient::ComputeOperationArgsCounters.new(
|
160
|
+
pending_operations: rpc_interface.pending_operations,
|
161
|
+
operation_args: rpc_operation_args
|
162
|
+
).call if ignore_counter_error?
|
163
|
+
|
152
164
|
rpc_interface.broadcast_operation(signed_hex)
|
153
165
|
end
|
154
166
|
|
@@ -1,6 +1,6 @@
|
|
1
1
|
class TezosClient
|
2
2
|
class Operation
|
3
|
-
delegate :run, :preapply, :test_and_broadcast, :simulate, :signed_hex, to: :operation_mgr
|
3
|
+
delegate :run, :preapply, :test_and_broadcast, :broadcast, :simulate, :signed_hex, to: :operation_mgr
|
4
4
|
|
5
5
|
def initialize(rpc_interface:, **args)
|
6
6
|
@rpc_interface = rpc_interface
|
@@ -27,7 +27,7 @@ class TezosClient
|
|
27
27
|
end
|
28
28
|
|
29
29
|
def operation_options
|
30
|
-
@args.slice(:secret_key, :protocol, :branch)
|
30
|
+
@args.slice(:secret_key, :protocol, :branch, :ignore_counter_error)
|
31
31
|
end
|
32
32
|
end
|
33
|
-
end
|
33
|
+
end
|
data/lib/tezos_client/version.rb
CHANGED
data/lib/tezos_client.rb
CHANGED
data/tezos_client.gemspec
CHANGED
@@ -39,6 +39,7 @@ Gem::Specification.new do |spec|
|
|
39
39
|
spec.add_development_dependency "rubocop-rails_config"
|
40
40
|
spec.add_development_dependency "webmock"
|
41
41
|
spec.add_development_dependency "vcr", "~> 4.0.0"
|
42
|
+
spec.add_development_dependency "pry"
|
42
43
|
|
43
44
|
spec.add_dependency "base58", "~> 0.2.3"
|
44
45
|
spec.add_dependency "httparty", "~> 0.17.0"
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: tezos_client
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.4.
|
4
|
+
version: 0.4.11
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Pierre Michard
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2019-
|
11
|
+
date: 2019-10-07 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -94,6 +94,20 @@ dependencies:
|
|
94
94
|
- - "~>"
|
95
95
|
- !ruby/object:Gem::Version
|
96
96
|
version: 4.0.0
|
97
|
+
- !ruby/object:Gem::Dependency
|
98
|
+
name: pry
|
99
|
+
requirement: !ruby/object:Gem::Requirement
|
100
|
+
requirements:
|
101
|
+
- - ">="
|
102
|
+
- !ruby/object:Gem::Version
|
103
|
+
version: '0'
|
104
|
+
type: :development
|
105
|
+
prerelease: false
|
106
|
+
version_requirements: !ruby/object:Gem::Requirement
|
107
|
+
requirements:
|
108
|
+
- - ">="
|
109
|
+
- !ruby/object:Gem::Version
|
110
|
+
version: '0'
|
97
111
|
- !ruby/object:Gem::Dependency
|
98
112
|
name: base58
|
99
113
|
requirement: !ruby/object:Gem::Requirement
|
@@ -220,6 +234,7 @@ files:
|
|
220
234
|
- lib/tezos_client/client_interface/key.rb
|
221
235
|
- lib/tezos_client/client_interface/misc.rb
|
222
236
|
- lib/tezos_client/commands.rb
|
237
|
+
- lib/tezos_client/compute_operation_args_counters.rb
|
223
238
|
- lib/tezos_client/crypto.rb
|
224
239
|
- lib/tezos_client/currency_utils.rb
|
225
240
|
- lib/tezos_client/encode_utils.rb
|