tezos_client 1.1.4 → 1.2.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: ee3c68e5d6cffc2ac7406a7c4084e3552c47cbd68c03570e4ca1df7bc390514a
4
- data.tar.gz: ec225c29031adde39b24b28a8b8f16188284da34c3afc0aafd788a95300f2b52
3
+ metadata.gz: b34f7593bef70d5be1219dd4beba9e00f6114da81783148585312cd32eeb82e8
4
+ data.tar.gz: 862385f6e2fbf82ac12ab9ce912939b9a9499a10a856d447da5d9878afc08ce5
5
5
  SHA512:
6
- metadata.gz: baf64e4c19c600a270cc0fe653e5825113557f32368db57d10e449b5458a75c1c5931de4e6e1b123cdc7d183b977ae15085150de2a57458b1a477c18344d7321
7
- data.tar.gz: d41ef55a2ca3cf47615fea6860dff285bef062f86553ca558934b11717b545b21068ee33bedf8192e50596805b49e39a0ebf32644078f669275ac95dd0d572cd
6
+ metadata.gz: fbf5f33ee51bc2a45edaed55c67bfa7d58addbcc5668eb87198765cdfd50e387bda96769ef238f63011c78e66f802efc89ef293cdd2fb57d9f50de8e0ad2fa45
7
+ data.tar.gz: 83682fe26418295979576a1a88d66d5b1af082ca2e4195b47286ccaf1a1cc3c24470a4b5ded42b0062bf17d97ad9ded3d5e1768f645c2985c9c683f9395b5c80
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- tezos_client (1.1.4)
4
+ tezos_client (1.2.0)
5
5
  active_interaction (~> 3.7)
6
6
  activesupport (~> 6.0.0)
7
7
  base58 (~> 0.2.3)
@@ -22,6 +22,9 @@ class TezosClient
22
22
  :pending_operations,
23
23
  :pack_data,
24
24
  :big_map_value,
25
- :list_big_map_by_contract
25
+ :contract_big_maps,
26
+ :block_operations,
27
+ :contract_storage_type,
28
+ :entrypoint
26
29
  end
27
30
  end
@@ -28,20 +28,28 @@ class TezosClient
28
28
  get "#{contract_link(contract_id)}/manager_key"
29
29
  end
30
30
 
31
+ def contract_storage_type(contract_id)
32
+ contract = contract_detail(contract_id)
33
+ contract[:script][:code].find { |elem| elem[:prim] == "storage" }[:args].first
34
+ end
35
+
31
36
  def contract_storage(contract_id)
32
37
  get "#{contract_link(contract_id)}/storage"
33
38
  end
34
39
 
40
+ def entrypoint(contract_id, entrypoint)
41
+ get("#{contract_link(contract_id)}/entrypoints/#{entrypoint}")
42
+ end
43
+
35
44
  def big_map_value(big_map_id:, key:, key_type:)
36
45
  expr_key = encode_script_expr(data: key, type: key_type)
37
46
 
38
47
  get "/chains/main/blocks/head/context/big_maps/#{big_map_id}/#{expr_key}"
39
48
  end
40
49
 
41
- def list_big_map_by_contract(contract_address:)
50
+ def contract_big_maps(contract_address)
42
51
  contract_storage = contract_storage(contract_address)
43
- contract = contract_detail(contract_address)
44
- storage_type = contract[:script][:code].find { |elem| elem[:prim] == "storage" }[:args].first
52
+ storage_type = contract_storage_type(contract_address)
45
53
 
46
54
  TezosClient::Tools::FindBigMapsInStorage.run!(
47
55
  storage: contract_storage,
@@ -1,99 +1,19 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- class TezosClient::Tools::ConvertToHash < ActiveInteraction::Base
4
- interface :data
5
- interface :type
3
+ require_relative "convert_to_hash/base"
6
4
 
7
- def execute
8
- decorated_value
9
- end
10
-
11
- private
12
- def value
13
- case type[:prim]
14
- when "pair"
15
- pair_type
16
- when "list"
17
- list_type
18
- when "int"
19
- int_type
20
- when "nat"
21
- int_type
22
- when "key"
23
- key_type
24
- when "timestamp"
25
- timestamp_type
26
- when "string"
27
- string_type
28
- when "address"
29
- address_type
30
- else
31
- raise "type '#{type[:prim]}' not implemented"
32
- end
33
- end
5
+ Dir[File.join(__dir__, "convert_to_hash", "*.rb")].each { |file| require file }
34
6
 
35
- def pair_type
36
- raise "Not a 'Pair' type" unless data[:prim] == "Pair"
37
- raise "Difference detected between data and type \nDATA: #{data} \nTYPE:#{type} " unless data[:args].size == type[:args].size
7
+ class TezosClient
8
+ module Tools
9
+ class ConvertToHash < ActiveInteraction::Base
10
+ interface :data
11
+ interface :type
38
12
 
39
- (data[:args]).zip(type[:args]).map do |data_n, type_n|
40
- compose(
41
- TezosClient::Tools::ConvertToHash,
42
- data: data_n,
43
- type: type_n
44
- )
45
- end.reduce({}, &:merge)
46
- end
47
-
48
- def list_type
49
- convert_list_element(data: data, element_type: type[:args].first)
50
- end
13
+ def execute
14
+ TezosClient::Tools::ConvertToHash::Base.new(data: data, type: type).value
15
+ end
51
16
 
52
- def convert_list_element(data:, element_type:)
53
- data.map do |elem|
54
- compose(
55
- TezosClient::Tools::ConvertToHash,
56
- data: elem,
57
- type: element_type
58
- )
59
17
  end
60
18
  end
61
-
62
- def int_type
63
- data[:int].to_i
64
- end
65
-
66
- def key_type
67
- data[:bytes] || data[:string]
68
- end
69
-
70
- def timestamp_type
71
- Time.zone.at(data[:int].to_i)
72
- end
73
-
74
- def string_type
75
- data[:string]
76
- end
77
-
78
- def address_type
79
- data[:bytes] || data[:string]
80
- end
81
-
82
- def decorated_value
83
- anonymous? ? value : { var_name => value }
84
- end
85
-
86
- def anonymous?
87
- !(type.key?(:annots) && type[:annots].any?)
88
- end
89
-
90
- def var_name_annot
91
- type[:annots].first
92
- end
93
-
94
- def var_name
95
- return nil if anonymous?
96
-
97
- "#{var_name_annot[1..-1]}".to_sym
98
- end
99
19
  end
@@ -0,0 +1,29 @@
1
+ # frozen_string_literal: true
2
+
3
+ class TezosClient
4
+ module Tools
5
+ class ConvertToHash < ActiveInteraction::Base
6
+ class Address < Base
7
+ include TezosClient::Crypto
8
+
9
+ def decode
10
+ if data.key?(:bytes)
11
+ if data[:bytes].start_with?("0000")
12
+ encode_tz(:tz1, data[:bytes][4..-1])
13
+ elsif data[:bytes].start_with?("0001")
14
+ encode_tz(:tz2, data[:bytes][4..-1])
15
+ elsif data[:bytes].start_with?("0002")
16
+ encode_tz(:tz3, data[:bytes][4..-1])
17
+ elsif data[:bytes].start_with?("01")
18
+ encode_tz(:KT, data[:bytes][2..-3])
19
+ else
20
+ data[:bytes]
21
+ end
22
+ else
23
+ data[:string]
24
+ end
25
+ end
26
+ end
27
+ end
28
+ end
29
+ end
@@ -0,0 +1,50 @@
1
+ # frozen_string_literal: true
2
+
3
+ class TezosClient
4
+ module Tools
5
+ class ConvertToHash < ActiveInteraction::Base
6
+
7
+ class Base
8
+ def initialize(data:, type:)
9
+ @data = data
10
+ @type = type
11
+ end
12
+
13
+ attr_accessor :data, :type
14
+
15
+ def value
16
+ anonymous? ? decode : { var_name => decode }
17
+ end
18
+
19
+ protected
20
+
21
+ def decode
22
+ klass.new(data: data, type: type).decode
23
+
24
+ rescue NameError
25
+ raise NotImplementedError, "type '#{type[:prim]}' not implemented"
26
+ end
27
+
28
+ def anonymous?
29
+ !(type.key?(:annots) && type[:annots].any?)
30
+ end
31
+
32
+ def var_name_annot
33
+ type[:annots].first
34
+ end
35
+
36
+ def var_name
37
+ return nil if anonymous?
38
+
39
+ "#{var_name_annot[1..-1]}".to_sym
40
+ end
41
+
42
+ private
43
+
44
+ def klass
45
+ "TezosClient::Tools::ConvertToHash::#{type[:prim].camelize}".constantize
46
+ end
47
+ end
48
+ end
49
+ end
50
+ end
@@ -0,0 +1,20 @@
1
+ # frozen_string_literal: true
2
+
3
+ class TezosClient
4
+ class BigMap < Struct.new(:name, :id, :value_type, :key_type); end
5
+
6
+ module Tools
7
+ class ConvertToHash < ActiveInteraction::Base
8
+ class BigMap < Base
9
+ def decode
10
+ ::TezosClient::BigMap.new(
11
+ var_name,
12
+ data[:int],
13
+ type[:args].second,
14
+ type[:args].first
15
+ )
16
+ end
17
+ end
18
+ end
19
+ end
20
+ end
@@ -0,0 +1,13 @@
1
+ # frozen_string_literal: true
2
+
3
+ class TezosClient
4
+ module Tools
5
+ class ConvertToHash < ActiveInteraction::Base
6
+ class Bytes < Base
7
+ def decode
8
+ data[:bytes] || data[:string]
9
+ end
10
+ end
11
+ end
12
+ end
13
+ end
@@ -0,0 +1,13 @@
1
+ # frozen_string_literal: true
2
+
3
+ class TezosClient
4
+ module Tools
5
+ class ConvertToHash < ActiveInteraction::Base
6
+ class Int < Base
7
+ def decode
8
+ data[:int].to_i
9
+ end
10
+ end
11
+ end
12
+ end
13
+ end
@@ -0,0 +1,27 @@
1
+ # frozen_string_literal: true
2
+
3
+ class TezosClient
4
+ module Tools
5
+ class ConvertToHash < ActiveInteraction::Base
6
+ class Key < Base
7
+ include TezosClient::Crypto
8
+
9
+ def decode
10
+ if data.key?(:bytes)
11
+ if data[:bytes].start_with?("00")
12
+ encode_tz(:edpk, data[:bytes][2..-1])
13
+ elsif data[:bytes].start_with?("01")
14
+ encode_tz(:sppk, data[:bytes][2..-1])
15
+ elsif data[:bytes].start_with?("02")
16
+ encode_tz(:p2pk, data[:bytes][2..-1])
17
+ else
18
+ data[:bytes]
19
+ end
20
+ else
21
+ data[:string]
22
+ end
23
+ end
24
+ end
25
+ end
26
+ end
27
+ end
@@ -0,0 +1,22 @@
1
+ # frozen_string_literal: true
2
+
3
+ class TezosClient
4
+ module Tools
5
+ class ConvertToHash < ActiveInteraction::Base
6
+ class List < Base
7
+ def decode
8
+ data.map do |elem|
9
+ TezosClient::Tools::ConvertToHash::Base.new(
10
+ data: elem,
11
+ type: elem_type
12
+ ).value
13
+ end
14
+ end
15
+
16
+ def elem_type
17
+ type[:args].first
18
+ end
19
+ end
20
+ end
21
+ end
22
+ end
@@ -0,0 +1,13 @@
1
+ # frozen_string_literal: true
2
+
3
+ class TezosClient
4
+ module Tools
5
+ class ConvertToHash < ActiveInteraction::Base
6
+ class Nat < Base
7
+ def decode
8
+ data[:int].to_i
9
+ end
10
+ end
11
+ end
12
+ end
13
+ end
@@ -0,0 +1,21 @@
1
+ # frozen_string_literal: true
2
+
3
+ class TezosClient
4
+ module Tools
5
+ class ConvertToHash < ActiveInteraction::Base
6
+ class Pair < Base
7
+ def decode
8
+ raise "Not a 'Pair' type" unless data[:prim] == "Pair"
9
+ raise "Difference detected between data and type \nDATA: #{data} \nTYPE:#{type} " unless data[:args].size == type[:args].size
10
+
11
+ (data[:args]).zip(type[:args]).map do |data_n, type_n|
12
+ TezosClient::Tools::ConvertToHash::Base.new(
13
+ data: data_n,
14
+ type: type_n
15
+ ).value
16
+ end.reduce({}, &:merge)
17
+ end
18
+ end
19
+ end
20
+ end
21
+ end
@@ -0,0 +1,19 @@
1
+ # frozen_string_literal: true
2
+
3
+ class TezosClient
4
+ module Tools
5
+ class ConvertToHash < ActiveInteraction::Base
6
+ class Signature < Base
7
+ include TezosClient::Crypto
8
+
9
+ def decode
10
+ if data.key?(:bytes)
11
+ encode_tz(:edsig, data[:bytes])
12
+ else
13
+ data[:string]
14
+ end
15
+ end
16
+ end
17
+ end
18
+ end
19
+ end
@@ -0,0 +1,13 @@
1
+ # frozen_string_literal: true
2
+
3
+ class TezosClient
4
+ module Tools
5
+ class ConvertToHash < ActiveInteraction::Base
6
+ class String < Base
7
+ def decode
8
+ data[:string]
9
+ end
10
+ end
11
+ end
12
+ end
13
+ end
@@ -0,0 +1,13 @@
1
+ # frozen_string_literal: true
2
+
3
+ class TezosClient
4
+ module Tools
5
+ class ConvertToHash < ActiveInteraction::Base
6
+ class Timestamp < Base
7
+ def decode
8
+ Time.zone.at(data[:int].to_i)
9
+ end
10
+ end
11
+ end
12
+ end
13
+ end
@@ -7,50 +7,19 @@ class TezosClient::Tools::FindBigMapsInStorage < ActiveInteraction::Base
7
7
  strip: false
8
8
 
9
9
  def execute
10
- case storage_type[:prim]
11
- when "pair"
12
- pair_type(data: storage, type: storage_type)
13
- when "list"
14
- list_type(data: storage, type: storage_type)
15
- when "big_map"
16
- big_map_type(data: storage, type: storage_type)
17
- end
18
- end
19
-
20
- def pair_type(data:, type:)
21
- raise "Not a 'Pair' type" unless data[:prim] == "Pair"
22
- raise "Difference detected between data and type \nDATA: #{data} \nTYPE:#{type} " unless data[:args].size == type[:args].size
23
-
24
- (0 .. data[:args].size - 1).map do |iter|
25
- compose(
26
- TezosClient::Tools::FindBigMapsInStorage,
27
- storage: data[:args][iter],
28
- storage_type: type[:args][iter]
29
- )
30
- end.compact.flatten
10
+ hash_storage
11
+ .map(&:last)
12
+ .select { |value| value.is_a? TezosClient::BigMap }
13
+ .map(&:to_h)
14
+ .map(&:with_indifferent_access)
31
15
  end
32
16
 
33
- def list_type(data:, type:)
34
- element_type = type[:args].first
35
- data.map do |elem|
17
+ private
18
+ def hash_storage
36
19
  compose(
37
20
  TezosClient::Tools::ConvertToHash,
38
- data: elem,
39
- type: element_type
21
+ data: storage,
22
+ type: storage_type
40
23
  )
41
24
  end
42
- end
43
-
44
- def big_map_type(data:, type:)
45
- {
46
- name: var_name(type),
47
- id: data[:int],
48
- value_type: type[:args].second,
49
- key_type: type[:args].first
50
- }.with_indifferent_access
51
- end
52
-
53
- def var_name(type)
54
- "#{type[:annots].first[1..-1]}".to_sym
55
- end
56
25
  end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  class TezosClient
4
- VERSION = "1.1.4"
4
+ VERSION = "1.2.0"
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.1.4
4
+ version: 1.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Pierre Michard
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2020-03-04 00:00:00.000000000 Z
11
+ date: 2020-03-09 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -275,6 +275,18 @@ files:
275
275
  - lib/tezos_client/smartpy_interface.rb
276
276
  - lib/tezos_client/string_utils.rb
277
277
  - lib/tezos_client/tools/convert_to_hash.rb
278
+ - lib/tezos_client/tools/convert_to_hash/address.rb
279
+ - lib/tezos_client/tools/convert_to_hash/base.rb
280
+ - lib/tezos_client/tools/convert_to_hash/big_map.rb
281
+ - lib/tezos_client/tools/convert_to_hash/bytes.rb
282
+ - lib/tezos_client/tools/convert_to_hash/int.rb
283
+ - lib/tezos_client/tools/convert_to_hash/key.rb
284
+ - lib/tezos_client/tools/convert_to_hash/list.rb
285
+ - lib/tezos_client/tools/convert_to_hash/nat.rb
286
+ - lib/tezos_client/tools/convert_to_hash/pair.rb
287
+ - lib/tezos_client/tools/convert_to_hash/signature.rb
288
+ - lib/tezos_client/tools/convert_to_hash/string.rb
289
+ - lib/tezos_client/tools/convert_to_hash/timestamp.rb
278
290
  - lib/tezos_client/tools/find_big_maps_in_storage.rb
279
291
  - lib/tezos_client/tools/system_call.rb
280
292
  - lib/tezos_client/tools/temporary_file.rb
@@ -301,7 +313,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
301
313
  - !ruby/object:Gem::Version
302
314
  version: '0'
303
315
  requirements: []
304
- rubygems_version: 3.0.6
316
+ rubyforge_project:
317
+ rubygems_version: 2.7.6
305
318
  signing_key:
306
319
  specification_version: 4
307
320
  summary: Wrapper to the tezos client.