tezos_client 1.2.1 → 1.2.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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 37c983e5bf0b57cb2d3758165076d7c17e091214c61401b5107989fab6b3e09f
4
- data.tar.gz: 301462a20464486d1ad37bf0708aa00d1e2db30105f1944eacc4dbd67074d6a8
3
+ metadata.gz: a1459f7dd534e408bd13520b14789b9f719a6cec9b004f5ab3ca00c151da1ac4
4
+ data.tar.gz: 2aa7c36fc10c82537de03593e592703274daedcff36edec84130c98cc385098f
5
5
  SHA512:
6
- metadata.gz: ec1a70b4066f70964182d811877cc6a2cad18ae95403a4a86e3e3758a35413922c85115fcf7e3c26edaf9e34f1d27f00f5a109c4050dfa9cc001479a3916b570
7
- data.tar.gz: 3e2d3c82e9b811990f2682f7d4ce8992c1399850f43dfa587d0fe9f5f2c88f3307235792677210d8c71348ae0d9f083844e7617b194c851e6bbbf2b1c86a2bc3
6
+ metadata.gz: fa9dc95f337c4bbbda410392c03d6305c93ee8f4dfec1810f629c0143a4beb3ce88789f5c4eaa809ae572bb4871ad44b0e87d35071727f9800cc9167f290492f
7
+ data.tar.gz: e625840ea65befc0adc6ece5e334d8e869daabbaa2e6a9fc51881dda0ba3971dcec2f0d3274968e07a7e9268e1af93469c1f70f1395fa3d773119e871ab55f2a
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- tezos_client (1.2.1)
4
+ tezos_client (1.2.2)
5
5
  active_interaction (~> 3.7)
6
6
  activesupport (~> 6.0.0)
7
7
  base58 (~> 0.2.3)
@@ -14,29 +14,29 @@ PATH
14
14
  GEM
15
15
  remote: https://rubygems.org/
16
16
  specs:
17
- actionpack (6.0.2.2)
18
- actionview (= 6.0.2.2)
19
- activesupport (= 6.0.2.2)
17
+ actionpack (6.0.3.2)
18
+ actionview (= 6.0.3.2)
19
+ activesupport (= 6.0.3.2)
20
20
  rack (~> 2.0, >= 2.0.8)
21
21
  rack-test (>= 0.6.3)
22
22
  rails-dom-testing (~> 2.0)
23
23
  rails-html-sanitizer (~> 1.0, >= 1.2.0)
24
- actionview (6.0.2.2)
25
- activesupport (= 6.0.2.2)
24
+ actionview (6.0.3.2)
25
+ activesupport (= 6.0.3.2)
26
26
  builder (~> 3.1)
27
27
  erubi (~> 1.4)
28
28
  rails-dom-testing (~> 2.0)
29
29
  rails-html-sanitizer (~> 1.1, >= 1.2.0)
30
- active_interaction (3.8.0)
30
+ active_interaction (3.8.2)
31
31
  activemodel (>= 4, < 7)
32
- activemodel (6.0.2.2)
33
- activesupport (= 6.0.2.2)
34
- activesupport (6.0.2.2)
32
+ activemodel (6.0.3.2)
33
+ activesupport (= 6.0.3.2)
34
+ activesupport (6.0.3.2)
35
35
  concurrent-ruby (~> 1.0, >= 1.0.2)
36
36
  i18n (>= 0.7, < 2)
37
37
  minitest (~> 5.1)
38
38
  tzinfo (~> 1.1)
39
- zeitwerk (~> 2.2)
39
+ zeitwerk (~> 2.2, >= 2.2.2)
40
40
  addressable (2.7.0)
41
41
  public_suffix (>= 2.0.2, < 5.0)
42
42
  ast (2.4.0)
@@ -52,25 +52,25 @@ GEM
52
52
  domain_name (0.5.20190701)
53
53
  unf (>= 0.0.5, < 1.0.0)
54
54
  erubi (1.9.0)
55
- ffi (1.12.2)
55
+ ffi (1.13.1)
56
56
  hashdiff (1.0.0)
57
57
  http-cookie (1.0.3)
58
58
  domain_name (~> 0.5)
59
59
  httparty (0.17.3)
60
60
  mime-types (~> 3.0)
61
61
  multi_xml (>= 0.5.2)
62
- i18n (1.8.2)
62
+ i18n (1.8.3)
63
63
  concurrent-ruby (~> 1.0)
64
64
  jaro_winkler (1.5.3)
65
- loofah (2.4.0)
65
+ loofah (2.6.0)
66
66
  crass (~> 1.0.2)
67
67
  nokogiri (>= 1.5.9)
68
68
  method_source (0.9.2)
69
69
  mime-types (3.3.1)
70
70
  mime-types-data (~> 3.2015)
71
- mime-types-data (3.2019.1009)
71
+ mime-types-data (3.2020.0512)
72
72
  mini_portile2 (2.4.0)
73
- minitest (5.14.0)
73
+ minitest (5.14.1)
74
74
  money-tree (0.10.0)
75
75
  ffi
76
76
  multi_xml (0.6.0)
@@ -84,7 +84,7 @@ GEM
84
84
  coderay (~> 1.1.0)
85
85
  method_source (~> 0.9.0)
86
86
  public_suffix (4.0.1)
87
- rack (2.2.2)
87
+ rack (2.2.3)
88
88
  rack-test (1.1.0)
89
89
  rack (>= 1.0, < 3)
90
90
  rails-dom-testing (2.0.3)
@@ -92,9 +92,9 @@ GEM
92
92
  nokogiri (>= 1.6)
93
93
  rails-html-sanitizer (1.3.0)
94
94
  loofah (~> 2.3)
95
- railties (6.0.2.2)
96
- actionpack (= 6.0.2.2)
97
- activesupport (= 6.0.2.2)
95
+ railties (6.0.3.2)
96
+ actionpack (= 6.0.3.2)
97
+ activesupport (= 6.0.3.2)
98
98
  method_source
99
99
  rake (>= 0.8.7)
100
100
  thor (>= 0.20.3, < 2.0)
@@ -140,11 +140,11 @@ GEM
140
140
  safe_yaml (1.0.5)
141
141
  thor (1.0.1)
142
142
  thread_safe (0.3.6)
143
- tzinfo (1.2.6)
143
+ tzinfo (1.2.7)
144
144
  thread_safe (~> 0.1)
145
145
  unf (0.1.4)
146
146
  unf_ext
147
- unf_ext (0.0.7.6)
147
+ unf_ext (0.0.7.7)
148
148
  unicode-display_width (1.6.0)
149
149
  vcr (4.0.0)
150
150
  webmock (3.7.6)
@@ -36,6 +36,8 @@ require "tezos_client/smartpy_interface"
36
36
 
37
37
  require "tezos_client/tools/convert_to_hash"
38
38
  require "tezos_client/tools/find_big_maps_in_storage"
39
+ require "tezos_client/tools/hash_to_micheline"
40
+ require "tezos_client/tools/annots_to_type"
39
41
 
40
42
  class TezosClient
41
43
  using CurrencyUtils
@@ -0,0 +1,48 @@
1
+ # frozen_string_literal: true
2
+
3
+ class TezosClient::Tools::AnnotsToType < ActiveInteraction::Base
4
+ # example of typed_annots :
5
+ # {
6
+ # spending_ref: "string",
7
+ # remainder_amount: "nat",
8
+ # expires_at: "timestamp"
9
+ # }
10
+ hash :typed_annots, strip: false
11
+
12
+ validate :validate_types
13
+
14
+ def execute
15
+ return { "prim" => typed_annots.values.first } if typed_annots.size == 1
16
+
17
+ { "prim" => "pair", "args" => generate_type_args(ordered_annots) }
18
+ end
19
+
20
+ private
21
+ def generate_type_args(annots)
22
+ annot = annots.pop
23
+ annot_type = typed_annots[annot]
24
+
25
+ unless annots.size == 1
26
+ return [{ "prim" => "pair", "args" => generate_type_args(annots) },
27
+ { "prim" => annot_type, "annots" => ["%#{annot}"] }]
28
+ end
29
+
30
+ generated_args = [{ "prim" => annot_type, "annots" => ["%#{annot}"] }]
31
+ annot = annots.pop
32
+ annot_type = typed_annots[annot]
33
+ generated_args.unshift({ "prim" => annot_type, "annots" => ["%#{annot}"] })
34
+
35
+ generated_args
36
+ end
37
+
38
+ def ordered_annots
39
+ @ordered_annots ||= typed_annots.keys.sort
40
+ end
41
+
42
+ def validate_types
43
+ allowed_types = TezosClient::Tools::HashToMicheline::TYPES_MAPPING.keys
44
+ return if typed_annots.values.map(&:to_sym).all? { |type| type.in? allowed_types }
45
+
46
+ errors.add(:base, "The allowed types are: #{allowed_types.join(', ')}")
47
+ end
48
+ end
@@ -0,0 +1,78 @@
1
+ # frozen_string_literal: true
2
+
3
+ class TezosClient::Tools::HashToMicheline < ActiveInteraction::Base
4
+ # TODO: handle Arrays and Maps
5
+ TYPES_MAPPING = {
6
+ int: :int,
7
+ nat: :int,
8
+ string: :string,
9
+ signature: :string,
10
+ bytes: :bytes,
11
+ timestamp: :int,
12
+ key: :string,
13
+ address: :string
14
+ }.freeze
15
+
16
+ string :contract_address, default: nil
17
+ string :entrypoint, default: nil
18
+ # example of params:
19
+ # {
20
+ # spending_ref: "toto",
21
+ # expires_at: Time.now
22
+ # }
23
+ hash :params, strip: false
24
+ hash :storage_type, strip: false, default: {}
25
+ interface :blockchain_client, methods: [:entrypoint], default: -> { TezosClient.new }
26
+
27
+ # if storage_type is not received, it is fetched from the blockchain using
28
+ # contract_address and entrypoint (that are mandatory in this case)
29
+ validate :storage_type_or_contract_address_presence
30
+
31
+ def execute
32
+ return hash_type_to_hash_data(_storage_type.fetch(:prim), params.values.first) if params.size == 1
33
+
34
+ { prim: "Pair", args: generate_micheline(_storage_type[:args]) }
35
+ end
36
+
37
+ private
38
+ def generate_micheline(remaining_storage_type)
39
+ remaining_storage_type.each_with_object([]) do |h, acc|
40
+ next acc << { prim: "Pair", args: generate_micheline(h[:args]) } if h[:prim] == "pair"
41
+
42
+ annot = h[:annots].first.slice(1..-1).to_sym # remove '%'
43
+ acc << hash_type_to_hash_data(h[:prim], params.fetch(annot))
44
+ end
45
+ end
46
+
47
+ def convert_type(michelson_type)
48
+ TYPES_MAPPING.fetch(michelson_type.to_sym)
49
+ end
50
+
51
+ def hash_type_to_hash_data(michelson_type, value)
52
+ type = convert_type(michelson_type)
53
+
54
+ converted_value = case michelson_type.to_sym
55
+ when :nat, :int
56
+ value.to_s
57
+ when :timestamp
58
+ errors.add(:base, "timestamp input must be an instance of Time") unless value.is_a? Time
59
+
60
+ value.to_i.to_s
61
+ else
62
+ value
63
+ end
64
+
65
+ { type => converted_value }
66
+ end
67
+
68
+ def _storage_type
69
+ (storage_type.presence || blockchain_client.entrypoint(contract_address, entrypoint)).deep_symbolize_keys
70
+ end
71
+
72
+ def storage_type_or_contract_address_presence
73
+ return if storage_type.present? ^ (contract_address.present? && entrypoint.present?)
74
+
75
+ errors.add(:base,
76
+ "You should provide the contract_address and the entrypoint only if storage_type is not provided")
77
+ end
78
+ end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  class TezosClient
4
- VERSION = "1.2.1"
4
+ VERSION = "1.2.2"
5
5
  end
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: 1.2.1
4
+ version: 1.2.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Pierre Michard
8
- autorequire:
8
+ autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2020-04-29 00:00:00.000000000 Z
11
+ date: 2020-07-15 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -274,6 +274,7 @@ files:
274
274
  - lib/tezos_client/smartpy_inteface/smartpy_wrapper.rb
275
275
  - lib/tezos_client/smartpy_interface.rb
276
276
  - lib/tezos_client/string_utils.rb
277
+ - lib/tezos_client/tools/annots_to_type.rb
277
278
  - lib/tezos_client/tools/convert_to_hash.rb
278
279
  - lib/tezos_client/tools/convert_to_hash/address.rb
279
280
  - lib/tezos_client/tools/convert_to_hash/base.rb
@@ -289,6 +290,7 @@ files:
289
290
  - lib/tezos_client/tools/convert_to_hash/string.rb
290
291
  - lib/tezos_client/tools/convert_to_hash/timestamp.rb
291
292
  - lib/tezos_client/tools/find_big_maps_in_storage.rb
293
+ - lib/tezos_client/tools/hash_to_micheline.rb
292
294
  - lib/tezos_client/tools/system_call.rb
293
295
  - lib/tezos_client/tools/temporary_file.rb
294
296
  - lib/tezos_client/version.rb
@@ -299,7 +301,7 @@ licenses:
299
301
  - MIT
300
302
  metadata:
301
303
  allowed_push_host: https://rubygems.org
302
- post_install_message:
304
+ post_install_message:
303
305
  rdoc_options: []
304
306
  require_paths:
305
307
  - lib
@@ -314,8 +316,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
314
316
  - !ruby/object:Gem::Version
315
317
  version: '0'
316
318
  requirements: []
317
- rubygems_version: 3.0.6
318
- signing_key:
319
+ rubygems_version: 3.0.4
320
+ signing_key:
319
321
  specification_version: 4
320
322
  summary: Wrapper to the tezos client.
321
323
  test_files: []