tezos_client 1.3.2 → 1.4.1

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.
Files changed (32) hide show
  1. checksums.yaml +4 -4
  2. data/.travis.yml +2 -5
  3. data/Gemfile.lock +84 -74
  4. data/README.md +15 -37
  5. data/lib/tezos_client.rb +5 -3
  6. data/lib/tezos_client/crypto.rb +1 -1
  7. data/lib/tezos_client/logger.rb +1 -1
  8. data/lib/tezos_client/smartpy_interface.rb +39 -7
  9. data/lib/tezos_client/tools/annots_to_type.rb +31 -8
  10. data/lib/tezos_client/tools/convert_to_hash.rb +2 -2
  11. data/lib/tezos_client/tools/convert_to_hash/base.rb +1 -1
  12. data/lib/tezos_client/tools/convert_to_hash/big_map.rb +13 -6
  13. data/lib/tezos_client/tools/convert_to_hash/key.rb +11 -11
  14. data/lib/tezos_client/tools/convert_to_hash/timestamp.rb +2 -0
  15. data/lib/tezos_client/tools/hash_to_micheline.rb +12 -60
  16. data/lib/tezos_client/tools/hash_to_micheline/address.rb +14 -0
  17. data/lib/tezos_client/tools/hash_to_micheline/base.rb +52 -0
  18. data/lib/tezos_client/tools/hash_to_micheline/bytes.rb +14 -0
  19. data/lib/tezos_client/tools/hash_to_micheline/contract.rb +14 -0
  20. data/lib/tezos_client/tools/hash_to_micheline/int.rb +13 -0
  21. data/lib/tezos_client/tools/hash_to_micheline/key.rb +14 -0
  22. data/lib/tezos_client/tools/hash_to_micheline/nat.rb +13 -0
  23. data/lib/tezos_client/tools/hash_to_micheline/option.rb +23 -0
  24. data/lib/tezos_client/tools/hash_to_micheline/pair.rb +45 -0
  25. data/lib/tezos_client/tools/hash_to_micheline/signature.rb +14 -0
  26. data/lib/tezos_client/tools/hash_to_micheline/string.rb +14 -0
  27. data/lib/tezos_client/tools/hash_to_micheline/timestamp.rb +14 -0
  28. data/lib/tezos_client/version.rb +1 -1
  29. data/tezos_client.gemspec +5 -5
  30. data/travis-scripts/prepare-ubuntu.sh +6 -1
  31. metadata +25 -10
  32. data/lib/tezos_client/smartpy_inteface/micheline_serializer_wrapper.rb +0 -17
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: a4767efa7b67fc781a2bee7f46beefc6a40f649fc4d3639fd279f1a0fcf76ed4
4
- data.tar.gz: 4fef498bf7d952d82202ee4323efa107f7456b2d2f4aabfaabc5fb20cd451a9d
3
+ metadata.gz: 92a3126df9c366800e22df7dceda0ac25f30ea97d53dd98aa9497d208047d428
4
+ data.tar.gz: 8eebd23077fe8aa0d6f79ed4620c40554aad2ce1ca7d9d0ffc63fb0b963c2559
5
5
  SHA512:
6
- metadata.gz: 4fcdbd1fca67c85791fd3259c29d140417f2712d458cb61d57136fe035a3aacbecfd89a1de8f47db0772481251fc6b670696044c3e424042b80afd59265530ab
7
- data.tar.gz: 3a6eeff8a54d35eddaf62da354b420718805f110e2996838aab6b6a564f1e44a57bd5572a1b5a3717cec311234820e5ebbd51fb18d908064eaff861862b0f0ad
6
+ metadata.gz: c1d9dcffed8b093bbac4973667441caf9c665c4228f8119f72fe7e3593bc50422d9b11198a907521e911401ca464d9dd0dff975be2d77dc57e7cd8ee5639d7be
7
+ data.tar.gz: 68ffadaed7188bf5927e844213134de291e55230817c6340c4492b37181dbc520b460522a938faafa6a6eeeee759446bc858e19ffe4011b040eeddbae24b2db6
data/.travis.yml CHANGED
@@ -13,11 +13,8 @@ rvm:
13
13
  before_install:
14
14
  - sh travis-scripts/prepare-ubuntu.sh
15
15
  - mkdir -p $HOME/bin
16
- - curl -s https://smartpy.io/dev-20200912-bbb4b34cb579f3d52320c3d2aed8ebcef04429b0/cli/SmartPy.sh > SmartPy.sh
17
- - chmod +x ./SmartPy.sh
18
- - ./SmartPy.sh local-install-auto $HOME/bin/smartpy/cli
19
- - rm ./SmartPy.sh
20
- - export PATH="$PATH:$HOME/bin/:$HOME/bin/smartpy/cli/"
16
+ - curl -s https://smartpy.io/cli/install.sh > SmartPyInstaller.sh && yes | sh SmartPyInstaller.sh
17
+ - export PATH="$PATH:$HOME/bin/:$HOME/smartpy-cli/"
21
18
  - npm link michelson-to-micheline
22
19
  - gem install bundler -v 1.16.3
23
20
  script:
data/Gemfile.lock CHANGED
@@ -1,8 +1,8 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- tezos_client (1.3.2)
5
- active_interaction (~> 3.7)
4
+ tezos_client (1.4.1)
5
+ active_interaction (>= 3.8)
6
6
  activesupport (~> 6.0.0)
7
7
  base58 (~> 0.2.3)
8
8
  bip_mnemonic (~> 0.0.2)
@@ -14,24 +14,24 @@ PATH
14
14
  GEM
15
15
  remote: https://rubygems.org/
16
16
  specs:
17
- actionpack (6.0.3.3)
18
- actionview (= 6.0.3.3)
19
- activesupport (= 6.0.3.3)
17
+ actionpack (6.0.3.7)
18
+ actionview (= 6.0.3.7)
19
+ activesupport (= 6.0.3.7)
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.3.3)
25
- activesupport (= 6.0.3.3)
24
+ actionview (6.0.3.7)
25
+ activesupport (= 6.0.3.7)
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.3)
31
- activemodel (>= 4, < 7)
32
- activemodel (6.0.3.3)
33
- activesupport (= 6.0.3.3)
34
- activesupport (6.0.3.3)
30
+ active_interaction (4.0.1)
31
+ activemodel (>= 5, < 7)
32
+ activemodel (6.0.3.7)
33
+ activesupport (= 6.0.3.7)
34
+ activesupport (6.0.3.7)
35
35
  concurrent-ruby (~> 1.0, >= 1.0.2)
36
36
  i18n (>= 0.7, < 2)
37
37
  minitest (~> 5.1)
@@ -39,51 +39,50 @@ GEM
39
39
  zeitwerk (~> 2.2, >= 2.2.2)
40
40
  addressable (2.7.0)
41
41
  public_suffix (>= 2.0.2, < 5.0)
42
- ast (2.4.0)
42
+ ast (2.4.2)
43
43
  base58 (0.2.3)
44
44
  bip_mnemonic (0.0.4)
45
45
  builder (3.2.4)
46
- coderay (1.1.2)
47
- concurrent-ruby (1.1.7)
48
- crack (0.4.3)
49
- safe_yaml (~> 1.0.0)
46
+ coderay (1.1.3)
47
+ concurrent-ruby (1.1.8)
48
+ crack (0.4.5)
49
+ rexml
50
50
  crass (1.0.6)
51
- diff-lcs (1.3)
51
+ diff-lcs (1.4.4)
52
52
  domain_name (0.5.20190701)
53
53
  unf (>= 0.0.5, < 1.0.0)
54
- erubi (1.9.0)
55
- ffi (1.13.1)
56
- hashdiff (1.0.0)
54
+ erubi (1.10.0)
55
+ ffi (1.15.1)
56
+ hashdiff (1.0.1)
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.5)
62
+ i18n (1.8.10)
63
63
  concurrent-ruby (~> 1.0)
64
- jaro_winkler (1.5.3)
65
- loofah (2.7.0)
64
+ loofah (2.9.1)
66
65
  crass (~> 1.0.2)
67
66
  nokogiri (>= 1.5.9)
68
- method_source (0.9.2)
67
+ method_source (1.0.0)
69
68
  mime-types (3.3.1)
70
69
  mime-types-data (~> 3.2015)
71
- mime-types-data (3.2020.0512)
72
- mini_portile2 (2.4.0)
73
- minitest (5.14.2)
70
+ mime-types-data (3.2021.0225)
71
+ minitest (5.14.4)
74
72
  money-tree (0.10.0)
75
73
  ffi
76
74
  multi_xml (0.6.0)
77
75
  netrc (0.11.0)
78
- nokogiri (1.10.10)
79
- mini_portile2 (~> 2.4.0)
80
- parallel (1.18.0)
81
- parser (2.6.5.0)
82
- ast (~> 2.4.0)
83
- pry (0.12.2)
84
- coderay (~> 1.1.0)
85
- method_source (~> 0.9.0)
86
- public_suffix (4.0.1)
76
+ nokogiri (1.11.6-x86_64-darwin)
77
+ racc (~> 1.4)
78
+ parallel (1.20.1)
79
+ parser (3.0.1.1)
80
+ ast (~> 2.4.1)
81
+ pry (0.14.1)
82
+ coderay (~> 1.1)
83
+ method_source (~> 1.0)
84
+ public_suffix (4.0.6)
85
+ racc (1.5.2)
87
86
  rack (2.2.3)
88
87
  rack-test (1.1.0)
89
88
  rack (>= 1.0, < 3)
@@ -92,72 +91,83 @@ GEM
92
91
  nokogiri (>= 1.6)
93
92
  rails-html-sanitizer (1.3.0)
94
93
  loofah (~> 2.3)
95
- railties (6.0.3.3)
96
- actionpack (= 6.0.3.3)
97
- activesupport (= 6.0.3.3)
94
+ railties (6.0.3.7)
95
+ actionpack (= 6.0.3.7)
96
+ activesupport (= 6.0.3.7)
98
97
  method_source
99
98
  rake (>= 0.8.7)
100
99
  thor (>= 0.20.3, < 2.0)
101
100
  rainbow (3.0.0)
102
- rake (13.0.1)
101
+ rake (13.0.3)
103
102
  rbnacl (5.0.0)
104
103
  ffi
104
+ regexp_parser (2.1.1)
105
105
  rest-client (2.0.2)
106
106
  http-cookie (>= 1.0.2, < 2.0)
107
107
  mime-types (>= 1.16, < 4.0)
108
108
  netrc (~> 0.8)
109
- rspec (3.9.0)
110
- rspec-core (~> 3.9.0)
111
- rspec-expectations (~> 3.9.0)
112
- rspec-mocks (~> 3.9.0)
113
- rspec-core (3.9.0)
114
- rspec-support (~> 3.9.0)
115
- rspec-expectations (3.9.0)
109
+ rexml (3.2.5)
110
+ rspec (3.10.0)
111
+ rspec-core (~> 3.10.0)
112
+ rspec-expectations (~> 3.10.0)
113
+ rspec-mocks (~> 3.10.0)
114
+ rspec-core (3.10.1)
115
+ rspec-support (~> 3.10.0)
116
+ rspec-expectations (3.10.1)
116
117
  diff-lcs (>= 1.2.0, < 2.0)
117
- rspec-support (~> 3.9.0)
118
- rspec-mocks (3.9.0)
118
+ rspec-support (~> 3.10.0)
119
+ rspec-mocks (3.10.2)
119
120
  diff-lcs (>= 1.2.0, < 2.0)
120
- rspec-support (~> 3.9.0)
121
- rspec-support (3.9.0)
122
- rubocop (0.75.1)
123
- jaro_winkler (~> 1.5.1)
121
+ rspec-support (~> 3.10.0)
122
+ rspec-support (3.10.2)
123
+ rubocop (1.15.0)
124
124
  parallel (~> 1.10)
125
- parser (>= 2.6)
125
+ parser (>= 3.0.0.0)
126
126
  rainbow (>= 2.2.2, < 4.0)
127
+ regexp_parser (>= 1.8, < 3.0)
128
+ rexml
129
+ rubocop-ast (>= 1.5.0, < 2.0)
127
130
  ruby-progressbar (~> 1.7)
128
- unicode-display_width (>= 1.4.0, < 1.7)
129
- rubocop-performance (1.5.0)
130
- rubocop (>= 0.71.0)
131
- rubocop-rails (2.3.2)
131
+ unicode-display_width (>= 1.4.0, < 3.0)
132
+ rubocop-ast (1.6.0)
133
+ parser (>= 3.0.1.1)
134
+ rubocop-packaging (0.5.1)
135
+ rubocop (>= 0.89, < 2.0)
136
+ rubocop-performance (1.11.3)
137
+ rubocop (>= 1.7.0, < 2.0)
138
+ rubocop-ast (>= 0.4.0)
139
+ rubocop-rails (2.10.1)
140
+ activesupport (>= 4.2.0)
132
141
  rack (>= 1.1)
133
- rubocop (>= 0.72.0)
134
- rubocop-rails_config (0.7.3)
135
- railties (>= 3.0)
136
- rubocop (~> 0.74)
137
- rubocop-performance (~> 1.3)
142
+ rubocop (>= 1.7.0, < 2.0)
143
+ rubocop-rails_config (1.5.3)
144
+ railties (>= 5.0)
145
+ rubocop (>= 1.13)
146
+ rubocop-ast (>= 1.0.1)
147
+ rubocop-packaging (~> 0.5)
148
+ rubocop-performance (~> 1.11)
138
149
  rubocop-rails (~> 2.0)
139
- ruby-progressbar (1.10.1)
140
- safe_yaml (1.0.5)
141
- thor (1.0.1)
150
+ ruby-progressbar (1.11.0)
151
+ thor (1.1.0)
142
152
  thread_safe (0.3.6)
143
- tzinfo (1.2.7)
153
+ tzinfo (1.2.9)
144
154
  thread_safe (~> 0.1)
145
155
  unf (0.1.4)
146
156
  unf_ext
147
157
  unf_ext (0.0.7.7)
148
- unicode-display_width (1.6.0)
158
+ unicode-display_width (2.0.0)
149
159
  vcr (4.0.0)
150
- webmock (3.7.6)
160
+ webmock (3.13.0)
151
161
  addressable (>= 2.3.6)
152
162
  crack (>= 0.3.2)
153
163
  hashdiff (>= 0.4.0, < 2.0.0)
154
- zeitwerk (2.4.0)
164
+ zeitwerk (2.4.2)
155
165
 
156
166
  PLATFORMS
157
- ruby
167
+ x86_64-darwin-19
158
168
 
159
169
  DEPENDENCIES
160
- bundler (~> 1.16)
170
+ bundler (~> 2.1)
161
171
  pry
162
172
  rake (~> 13.0)
163
173
  rspec (~> 3.0)
@@ -167,4 +177,4 @@ DEPENDENCIES
167
177
  webmock
168
178
 
169
179
  BUNDLED WITH
170
- 1.17.3
180
+ 2.2.18
data/README.md CHANGED
@@ -4,11 +4,12 @@
4
4
 
5
5
  [![Build Status](https://travis-ci.org/moneytrackio/tezos_client.svg?branch=master)](https://travis-ci.org/moneytrackio/tezos_client)
6
6
 
7
- Tezos Client interracts with tezos nodes using RPC commands.
7
+ Tezos Client interacts with Tezos nodes using RPC commands.
8
8
 
9
- ## Requirements:
10
- Tezos client requires liquidity to be installed in order to work properly.
11
- For installing on linux, you can basically follow the steps coded in travis-script folder.
9
+ ## Requirements
10
+
11
+ Tezos client requires SmartPy to be installed in order to work properly.
12
+ To install it on Linux, you can basically follow the steps coded in travis-script folder.
12
13
 
13
14
  ## Dependency
14
15
 
@@ -18,16 +19,11 @@ sudo apt-get install nodejs
18
19
  npm i -g michelson-to-micheline
19
20
  ```
20
21
 
21
- ### liquidity
22
- [liquidity installation](http://www.liquidity-lang.org/doc/installation/index.html)
23
-
24
- need the tezos version (not Dune version)
25
-
26
22
  ### SmartPy
27
- [SmartPy](https://smartpy.io/)
23
+ [SmartPy](https://smartpy.io/releases/20210317-bc925bb73dc885ac2b4dde9689e805d9b0bc6125/)
28
24
 
29
25
  ```bash
30
- sh <(curl -s https://smartpy.io/dev-20200924-23b26494361d96abf034bdbb1ad1af396f95fd61/cli/SmartPy.sh) local-install-auto
26
+ sh <(curl -s https://smartpy.io/releases/20210317-bc925bb73dc885ac2b4dde9689e805d9b0bc6125/cli/install.sh)
31
27
  export PATH=$PATH:$HOME/smartpy-cli/
32
28
  ```
33
29
 
@@ -54,9 +50,10 @@ Or install it yourself as:
54
50
 
55
51
  ## Usage
56
52
 
57
- ### Generate Tezos key paris
53
+ ### Generate Tezos key pairs
54
+
55
+ Generate a perfectly random key pair:
58
56
 
59
- Generate a prefectly random key pair:
60
57
  ```ruby
61
58
  client = TezosClient.new
62
59
  key = subject.generate_key
@@ -69,6 +66,7 @@ key = subject.generate_key
69
66
  ```
70
67
 
71
68
  Generate a key pair from a seed and a BIP 44 Path:
69
+
72
70
  ```ruby
73
71
  key = subject.generate_key(wallet_seed:"000102030405060708090a0b0c0d0e0f", path: "m/44'/1729'/0'/0'/0'")
74
72
  expect(key[:address]).to eq "tz1RfnzRopJXH32SSDap2wMYGULBAnmHxdP1"
@@ -78,7 +76,8 @@ key = subject.generate_key(wallet_seed:"000102030405060708090a0b0c0d0e0f", path:
78
76
  # :address=>"tz1a97x7GAvMDyrwwKTLQo131CoidXyUef48"
79
77
  # }
80
78
  ```
81
- Generate a key pair from a BIP-39 mnemonic sentence and a BIP 44 Path:
79
+ Generate a key pair from a BIP-39 mnemonic sentence and a BIP 44 Path:
80
+
82
81
  ```ruby
83
82
  key = subject.generate_key(
84
83
  mnemonic: "below dove cushion divide future artefact orange congress maple fiscal flower enable",
@@ -118,28 +117,6 @@ client.transfer(
118
117
  )
119
118
  ```
120
119
 
121
- ### Originate a contract written in liquidity
122
-
123
- ```ruby
124
- script = File.expand_path("./spec/fixtures/demo.py")
125
- source = "tz1ZWiiPXowuhN1UqNGVTrgNyf5tdxp4XUUq"
126
- secret_key = "edsk4EcqupPmaebat5mP57ZQ3zo8NDkwv8vQmafdYZyeXxrSc72pjN"
127
- amount = 0
128
- init_params= "MyContract()"
129
- client = TezosClient.new
130
-
131
- res = client.originate_contract(
132
- from: source,
133
- amount: amount,
134
- script: script,
135
- secret_key: secret_key,
136
- init_params: init_params
137
- )
138
-
139
- puts "Origination operation: #{res[:operation_id]}"
140
- puts "Contract address: #{res[:originated_contract]}"
141
- ```
142
-
143
120
  ### Originate a contract written in SmartPy
144
121
 
145
122
  ```ruby
@@ -147,7 +124,7 @@ script = File.expand_path("./spec/fixtures/demo.py")
147
124
  source = "tz1ZWiiPXowuhN1UqNGVTrgNyf5tdxp4XUUq"
148
125
  secret_key = "edsk4EcqupPmaebat5mP57ZQ3zo8NDkwv8vQmafdYZyeXxrSc72pjN"
149
126
  amount = 0
150
- init_params = "MyContract(1, 1)"
127
+ init_params= "MyContract()"
151
128
  client = TezosClient.new
152
129
 
153
130
  res = client.originate_contract(
@@ -163,6 +140,7 @@ puts "Contract address: #{res[:originated_contract]}"
163
140
  ```
164
141
 
165
142
  ### Call a contract written in SmartPy
143
+
166
144
  ```ruby
167
145
  TezosClient.new.call_contract(
168
146
  from: "tz1ZWiiPXowuhN1UqNGVTrgNyf5tdxp4XUUq",
data/lib/tezos_client.rb CHANGED
@@ -4,6 +4,8 @@ require "pp"
4
4
  require "active_support/core_ext/hash/indifferent_access"
5
5
  require "active_support/core_ext/string/inflections"
6
6
  require "active_support/core_ext/module/delegation"
7
+ require "active_support/core_ext/time"
8
+ require "active_support/core_ext/array"
7
9
  require "timeout"
8
10
  require "benchmark"
9
11
  require "open3"
@@ -80,7 +82,7 @@ class TezosClient
80
82
  #
81
83
  # @return [Hash] result of the origination containing :operation_id, :operation_result and :originated_contract
82
84
  #
83
- def originate_contract(from:, amount:, secret_key: nil, script: nil, init_params: nil, dry_run: false, **args)
85
+ def originate_contract(from:, amount:, secret_key: nil, script: nil, init_params: [], dry_run: false, **args)
84
86
  origination_args = {
85
87
  rpc_interface: rpc_interface,
86
88
  from: from,
@@ -90,9 +92,9 @@ class TezosClient
90
92
  }
91
93
 
92
94
  origination_args[:script] = contract_interface(script).origination_script(
93
- from: from,
94
95
  script: script,
95
- init_params: init_params
96
+ init_params: init_params,
97
+ **args
96
98
  )
97
99
 
98
100
  operation = OriginationOperation.new(origination_args)
@@ -238,7 +238,7 @@ class TezosClient
238
238
  end
239
239
 
240
240
  def ignore_0x(payload)
241
- payload.starts_with?("0x") ? payload[2..-1] : payload
241
+ payload.start_with?("0x") ? payload[2..-1] : payload
242
242
  end
243
243
  end
244
244
  end
@@ -13,7 +13,7 @@ class TezosClient
13
13
  self.class.logger << out + "\n"
14
14
  end
15
15
 
16
- FILTERED_KEYS = [:code, :contractCode]
16
+ FILTERED_KEYS = [:code, :contractCode, :contract_code]
17
17
  def tezos_contents_log_filter(content)
18
18
  if content.is_a? Array
19
19
  content.map { |el| tezos_contents_log_filter(el) }
@@ -1,20 +1,18 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  require_relative "smartpy_inteface/smartpy_wrapper"
4
- require_relative "smartpy_inteface/micheline_serializer_wrapper"
5
4
 
6
5
  class TezosClient
7
6
  class SmartpyInterface
8
7
  include Logger
9
8
  include SmartpyWrapper
10
- include MichelineSerializerWrapper
11
9
 
12
10
  attr_reader :options
13
11
 
14
12
  def json_scripts(args)
15
13
  compile_to_michelson(args) do |contract_script_filename, init_script_filename|
16
14
  micheline_contract = File.read(contract_script_filename)
17
- micheline_storage = convert_michelson_to_micheline(File.read(init_script_filename))
15
+ micheline_storage = File.read(init_script_filename)
18
16
 
19
17
  [JSON.parse(micheline_storage), JSON.parse(micheline_contract)]
20
18
  end
@@ -34,12 +32,46 @@ class TezosClient
34
32
  Tools::TemporaryFile.with_file_copy(args[:script]) do |script_copy_path|
35
33
  script_basename = script_copy_path.split("/").last.sub(/.py$/, "")
36
34
  script_path = "/tmp/#{script_basename}/"
37
- init_script_filename = "#{script_basename}_storage_init.tz"
38
- contract_script_filename = "#{script_basename}_compiled.json"
39
- call_smartpy ["compile", script_copy_path, args[:init_params], script_path]
35
+ init_script_filename = "step_000_cont_0_storage.json"
36
+ contract_script_filename = "step_000_cont_0_contract.json"
40
37
 
41
- yield(script_path + contract_script_filename, script_path + init_script_filename)
38
+ cmd_line = ["compile", script_copy_path, script_path].concat(
39
+ optional_inputs(args[:smartpy_flags], args[:init_params])
40
+ )
41
+
42
+ call_smartpy cmd_line
43
+
44
+ yield(script_path + "default/" + contract_script_filename, script_path + "default/" + init_script_filename)
42
45
  end
43
46
  end
47
+
48
+ def optional_inputs(flags, init_params)
49
+ inputs = []
50
+
51
+ inputs.concat(optional_flags(flags))
52
+ inputs.concat(optional_args(init_params))
53
+
54
+ inputs
55
+ end
56
+
57
+ def optional_flags(flags)
58
+ (flags || {}).map do |key, value|
59
+ if value.is_a?(FalseClass) || value.is_a?(TrueClass)
60
+ "--#{key}"
61
+ else
62
+ ["--#{key}", value.to_s]
63
+ end
64
+ end.flatten
65
+ end
66
+
67
+ def optional_args(init_params = [])
68
+ return [] if init_params.count.zero?
69
+
70
+ ["--"].concat(
71
+ init_params.map do |init_param|
72
+ init_param.to_json
73
+ end
74
+ )
75
+ end
44
76
  end
45
77
  end
@@ -11,6 +11,17 @@ class TezosClient::Tools::AnnotsToType < ActiveInteraction::Base
11
11
 
12
12
  validate :validate_types
13
13
 
14
+ TYPES_MAPPING = {
15
+ int: :int,
16
+ nat: :int,
17
+ string: :string,
18
+ signature: :string,
19
+ bytes: :bytes,
20
+ timestamp: :int,
21
+ key: :string,
22
+ address: :string
23
+ }.freeze
24
+
14
25
  def execute
15
26
  return { "prim" => typed_annots.values.first } if typed_annots.size == 1
16
27
 
@@ -18,16 +29,28 @@ class TezosClient::Tools::AnnotsToType < ActiveInteraction::Base
18
29
  end
19
30
 
20
31
  private
32
+ def micheline_type(annot_type, annot)
33
+ if annot_type.to_s.start_with?("optional_")
34
+ {
35
+ "prim" => "option",
36
+ "args" => [{ "prim" => annot_type.to_s.delete_prefix("optional_") }],
37
+ "annots" => ["%#{annot}"]
38
+ }
39
+ else
40
+ {
41
+ "prim" => annot_type,
42
+ "annots" => ["%#{annot}"]
43
+ }
44
+ end
45
+ end
46
+
21
47
  def generate_type_args(annots)
22
48
  annot = annots.pop
23
49
  annot_type = typed_annots[annot]
24
50
 
25
51
  unless annots.size == 1
26
52
  return [
27
- {
28
- "prim" => annot_type,
29
- "annots" => ["%#{annot}"]
30
- },
53
+ micheline_type(annot_type, annot),
31
54
  {
32
55
  "prim" => "pair",
33
56
  "args" => generate_type_args(annots)
@@ -35,10 +58,10 @@ class TezosClient::Tools::AnnotsToType < ActiveInteraction::Base
35
58
  ]
36
59
  end
37
60
 
38
- generated_args = [{ "prim" => annot_type, "annots" => ["%#{annot}"] }]
61
+ generated_args = [micheline_type(annot_type, annot)]
39
62
  annot = annots.pop
40
63
  annot_type = typed_annots[annot]
41
- generated_args.append({ "prim" => annot_type, "annots" => ["%#{annot}"] })
64
+ generated_args.append(micheline_type(annot_type, annot))
42
65
 
43
66
  generated_args
44
67
  end
@@ -48,8 +71,8 @@ class TezosClient::Tools::AnnotsToType < ActiveInteraction::Base
48
71
  end
49
72
 
50
73
  def validate_types
51
- allowed_types = TezosClient::Tools::HashToMicheline::TYPES_MAPPING.keys
52
- return if typed_annots.values.map(&:to_sym).all? { |type| type.in? allowed_types }
74
+ allowed_types = TYPES_MAPPING.keys
75
+ return if typed_annots.values.map{|type| type.to_s.delete_prefix("optional_").to_sym}.all? { |type| allowed_types.include? type }
53
76
 
54
77
  errors.add(:base, "The allowed types are: #{allowed_types.join(', ')}")
55
78
  end
@@ -7,8 +7,8 @@ Dir[File.join(__dir__, "convert_to_hash", "*.rb")].each { |file| require file }
7
7
  class TezosClient
8
8
  module Tools
9
9
  class ConvertToHash < ActiveInteraction::Base
10
- interface :data
11
- interface :type
10
+ interface :data, methods: []
11
+ interface :type, methods: []
12
12
 
13
13
  def execute
14
14
  TezosClient::Tools::ConvertToHash::Base.new(data: data, type: type).value
@@ -42,7 +42,7 @@ class TezosClient
42
42
 
43
43
  private
44
44
  def klass
45
- "TezosClient::Tools::ConvertToHash::#{type[:prim].camelize}".constantize
45
+ "#{self.class.name.deconstantize}::#{type[:prim].camelize}".constantize
46
46
  end
47
47
  end
48
48
  end
@@ -7,12 +7,19 @@ class TezosClient
7
7
  class ConvertToHash < ActiveInteraction::Base
8
8
  class BigMap < Base
9
9
  def decode
10
- ::TezosClient::BigMap.new(
11
- var_name,
12
- data[:int],
13
- type[:args].second,
14
- type[:args].first
15
- )
10
+ if data.is_a? Hash
11
+ ::TezosClient::BigMap.new(
12
+ var_name,
13
+ data[:int],
14
+ type[:args].second,
15
+ type[:args].first
16
+ )
17
+ else
18
+ TezosClient::Tools::ConvertToHash::Map.new(
19
+ data: data,
20
+ type: type
21
+ ).value[var_name]
22
+ end
16
23
  end
17
24
  end
18
25
  end
@@ -7,20 +7,20 @@ class TezosClient
7
7
  include TezosClient::Crypto
8
8
 
9
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
10
+ if tmp_data.start_with?("00")
11
+ encode_tz(:edpk, tmp_data[2..-1])
12
+ elsif tmp_data.start_with?("01")
13
+ encode_tz(:sppk, tmp_data[2..-1])
14
+ elsif tmp_data.start_with?("02")
15
+ encode_tz(:p2pk, tmp_data[2..-1])
20
16
  else
21
- data[:string]
17
+ tmp_data
22
18
  end
23
19
  end
20
+
21
+ def tmp_data
22
+ @tmp_data ||= data[:bytes] || data[:string]
23
+ end
24
24
  end
25
25
  end
26
26
  end
@@ -8,6 +8,8 @@ class TezosClient
8
8
  if data.key? :int
9
9
  Time.zone.at(data[:int].to_i)
10
10
  elsif data.key? :string
11
+ return Time.zone.at(data[:string].to_i) if data[:string].match?(/\A\d+\z/)
12
+
11
13
  Time.zone.parse(data[:string])
12
14
  else
13
15
  raise "Can not convert timestamp: #{data}"
@@ -1,18 +1,11 @@
1
1
  # frozen_string_literal: true
2
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
3
+ require_relative "hash_to_micheline/base"
4
+
5
+ Dir[File.join(__dir__, "hash_to_micheline", "*.rb")].each { |file| require file }
15
6
 
7
+
8
+ class TezosClient::Tools::HashToMicheline < ActiveInteraction::Base
16
9
  string :contract_address, default: nil
17
10
  string :entrypoint, default: nil
18
11
  # example of params:
@@ -20,7 +13,7 @@ class TezosClient::Tools::HashToMicheline < ActiveInteraction::Base
20
13
  # spending_ref: "toto",
21
14
  # expires_at: Time.now
22
15
  # }
23
- hash :params, strip: false
16
+ interface :params, methods: []
24
17
  hash :storage_type, strip: false, default: {}
25
18
  interface :blockchain_client, methods: %i[entrypoint entrypoints select_entrypoint], default: -> { TezosClient.new }
26
19
 
@@ -29,59 +22,18 @@ class TezosClient::Tools::HashToMicheline < ActiveInteraction::Base
29
22
  validate :storage_type_or_contract_address_presence
30
23
 
31
24
  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]) }
25
+ TezosClient::Tools::HashToMicheline::Base.new(data: _params, type: _storage_type).value
35
26
  end
36
27
 
37
28
  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
-
44
- if h[:prim] == "option"
45
- value = params.fetch(annot)
46
- if value
47
- acc << {
48
- "prim": "Some",
49
- "args": [
50
- hash_type_to_hash_data(h[:args][0][:prim], params.fetch(annot))
51
- ]
52
- }
53
- else
54
- acc << {
55
- "prim": "None"
56
- }
57
- end
58
- else
59
- acc << hash_type_to_hash_data(h[:prim], params.fetch(annot))
60
- end
29
+ def _params
30
+ if params.respond_to?(:keys) && params.keys.size == 1 && !_storage_type.key?(:annots)
31
+ params.values.first
32
+ else
33
+ params
61
34
  end
62
35
  end
63
36
 
64
- def convert_type(michelson_type)
65
- TYPES_MAPPING.fetch(michelson_type.to_sym)
66
- end
67
-
68
- def hash_type_to_hash_data(michelson_type, value)
69
- type = convert_type(michelson_type)
70
-
71
- converted_value = case michelson_type.to_sym
72
- when :nat, :int
73
- value.to_s
74
- when :timestamp
75
- errors.add(:base, "timestamp input must be an instance of Time") unless value.is_a? Time
76
-
77
- value.to_i.to_s
78
- else
79
- value
80
- end
81
-
82
- { type => converted_value }
83
- end
84
-
85
37
  def _entrypoint
86
38
  @_entrypoint ||= blockchain_client.select_entrypoint(
87
39
  contract_address: contract_address,
@@ -0,0 +1,14 @@
1
+ # frozen_string_literal: true
2
+
3
+ class TezosClient
4
+ module Tools
5
+ class HashToMicheline < ActiveInteraction::Base
6
+ class Address < Base
7
+ def encode
8
+ raise "#{data} #{data.class} Not a 'String' type" unless data.is_a? ::String
9
+ { string: data }
10
+ end
11
+ end
12
+ end
13
+ end
14
+ end
@@ -0,0 +1,52 @@
1
+ # frozen_string_literal: true
2
+
3
+ class TezosClient
4
+ module Tools
5
+ class HashToMicheline < ActiveInteraction::Base
6
+ class Base
7
+ def initialize(data:, type:)
8
+ @data = data
9
+ @type = type
10
+ end
11
+
12
+ attr_accessor :data, :type
13
+
14
+ def value
15
+ @data = anonymous? ? @data : @data.fetch(var_name)
16
+ encode
17
+ end
18
+
19
+ protected
20
+ def encode
21
+ klass.new(
22
+ data: data,
23
+ type: type
24
+ ).encode
25
+
26
+ rescue NameError
27
+ raise
28
+ raise NotImplementedError, "type '#{type[:prim]}' not implemented"
29
+ end
30
+
31
+ def anonymous?
32
+ !(type.key?(:annots) && type[:annots].any?)
33
+ end
34
+
35
+ def var_name_annot
36
+ type[:annots].first
37
+ end
38
+
39
+ def var_name
40
+ return nil if anonymous?
41
+
42
+ "#{var_name_annot[1..-1]}".to_sym
43
+ end
44
+
45
+ private
46
+ def klass
47
+ "#{self.class.name.deconstantize}::#{type[:prim].to_s.camelize}".constantize
48
+ end
49
+ end
50
+ end
51
+ end
52
+ end
@@ -0,0 +1,14 @@
1
+ # frozen_string_literal: true
2
+
3
+ class TezosClient
4
+ module Tools
5
+ class HashToMicheline < ActiveInteraction::Base
6
+ class Bytes < Base
7
+ def encode
8
+ raise "#{data} #{data.class} Not a 'String' type" unless data.is_a? ::String
9
+ { bytes: data }
10
+ end
11
+ end
12
+ end
13
+ end
14
+ end
@@ -0,0 +1,14 @@
1
+ # frozen_string_literal: true
2
+
3
+ class TezosClient
4
+ module Tools
5
+ class HashToMicheline < ActiveInteraction::Base
6
+ class Contract < Base
7
+ def encode
8
+ raise "#{data} #{data.class} Not a 'String' type" unless data.is_a? ::String
9
+ { string: data }
10
+ end
11
+ end
12
+ end
13
+ end
14
+ end
@@ -0,0 +1,13 @@
1
+ # frozen_string_literal: true
2
+
3
+ class TezosClient
4
+ module Tools
5
+ class HashToMicheline < ActiveInteraction::Base
6
+ class Int < Base
7
+ def encode
8
+ { int: data.to_s }
9
+ end
10
+ end
11
+ end
12
+ end
13
+ end
@@ -0,0 +1,14 @@
1
+ # frozen_string_literal: true
2
+
3
+ class TezosClient
4
+ module Tools
5
+ class HashToMicheline < ActiveInteraction::Base
6
+ class Key < Base
7
+ def encode
8
+ raise "#{data} #{data.class} Not a 'String' type" unless data.is_a? ::String
9
+ { string: data }
10
+ end
11
+ end
12
+ end
13
+ end
14
+ end
@@ -0,0 +1,13 @@
1
+ # frozen_string_literal: true
2
+
3
+ class TezosClient
4
+ module Tools
5
+ class HashToMicheline < ActiveInteraction::Base
6
+ class Nat < Base
7
+ def encode
8
+ { int: data.to_s }
9
+ end
10
+ end
11
+ end
12
+ end
13
+ end
@@ -0,0 +1,23 @@
1
+ # frozen_string_literal: true
2
+
3
+ class TezosClient
4
+ module Tools
5
+ class HashToMicheline < ActiveInteraction::Base
6
+ class Option < Base
7
+ def encode
8
+ return { prim: "None" } if data.nil?
9
+
10
+ {
11
+ prim: "Some",
12
+ args: [
13
+ TezosClient::Tools::HashToMicheline::Base.new(
14
+ data: data,
15
+ type: type[:args][0]
16
+ ).value
17
+ ]
18
+ }
19
+ end
20
+ end
21
+ end
22
+ end
23
+ end
@@ -0,0 +1,45 @@
1
+ # frozen_string_literal: true
2
+
3
+ class TezosClient
4
+ module Tools
5
+ class HashToMicheline < ActiveInteraction::Base
6
+ class Pair < Base
7
+ def encode
8
+ {
9
+ prim: "Pair",
10
+ args: [
11
+ TezosClient::Tools::HashToMicheline::Base.new(
12
+ data: data_0,
13
+ type: type[:args][0]
14
+ ).value,
15
+ TezosClient::Tools::HashToMicheline::Base.new(
16
+ data: data_1,
17
+ type: type[:args][1]
18
+ ).value
19
+ ]
20
+ }
21
+ end
22
+
23
+ def data_0
24
+ if data.is_a? ::Array
25
+ data[0]
26
+ else
27
+ data
28
+ end
29
+ end
30
+
31
+ def data_1
32
+ if data.is_a? ::Array
33
+ if data.size > 2
34
+ data.drop(1)
35
+ else
36
+ data[1]
37
+ end
38
+ else
39
+ data
40
+ end
41
+ end
42
+ end
43
+ end
44
+ end
45
+ end
@@ -0,0 +1,14 @@
1
+ # frozen_string_literal: true
2
+
3
+ class TezosClient
4
+ module Tools
5
+ class HashToMicheline < ActiveInteraction::Base
6
+ class Signature < Base
7
+ def encode
8
+ raise "#{data} does not seem to be a signature" unless data.start_with?("edsig")
9
+ { string: data }
10
+ end
11
+ end
12
+ end
13
+ end
14
+ end
@@ -0,0 +1,14 @@
1
+ # frozen_string_literal: true
2
+
3
+ class TezosClient
4
+ module Tools
5
+ class HashToMicheline < ActiveInteraction::Base
6
+ class String < Base
7
+ def encode
8
+ raise "#{data} #{data.class} Not a 'String' type" unless data.is_a? ::String
9
+ { string: data }
10
+ end
11
+ end
12
+ end
13
+ end
14
+ end
@@ -0,0 +1,14 @@
1
+ # frozen_string_literal: true
2
+
3
+ class TezosClient
4
+ module Tools
5
+ class HashToMicheline < ActiveInteraction::Base
6
+ class Timestamp < Base
7
+ def encode
8
+ raise "timestamp input (#{data}) must be an instance of Time" unless data.is_a? Time
9
+ { int: data.to_i.to_s }
10
+ end
11
+ end
12
+ end
13
+ end
14
+ end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  class TezosClient
4
- VERSION = "1.3.2"
4
+ VERSION = "1.4.1"
5
5
  end
data/tezos_client.gemspec CHANGED
@@ -7,12 +7,12 @@ require "tezos_client/version"
7
7
  Gem::Specification.new do |spec|
8
8
  spec.name = "tezos_client"
9
9
  spec.version = TezosClient::VERSION
10
- spec.authors = ["Pierre Michard"]
11
- spec.email = ["pierre@moneytrack.io"]
10
+ spec.authors = ["Pierre Michard", "Sébastien Lauret", "Othmane El Kesri"]
11
+ spec.email = ["pierre@moneytrack.io", "sebastien@moneytrack.io", "othmane@moneytrack.io"]
12
12
 
13
13
  spec.summary = "Wrapper to the tezos client."
14
14
  spec.description = ""
15
- spec.homepage = "http://moneytrack.io"
15
+ spec.homepage = "https://moneytrack.io"
16
16
  spec.license = "MIT"
17
17
 
18
18
  # Prevent pushing this gem to RubyGems.org. To allow pushes either set the 'allowed_push_host'
@@ -33,7 +33,7 @@ Gem::Specification.new do |spec|
33
33
  spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
34
34
  spec.require_paths = ["lib"]
35
35
 
36
- spec.add_development_dependency "bundler", "~> 1.16"
36
+ spec.add_development_dependency "bundler", "~> 2.1"
37
37
  spec.add_development_dependency "rake", "~> 13.0"
38
38
  spec.add_development_dependency "rspec", "~> 3.0"
39
39
  spec.add_development_dependency "rubocop-rails_config"
@@ -41,7 +41,7 @@ Gem::Specification.new do |spec|
41
41
  spec.add_development_dependency "vcr", "~> 4.0.0"
42
42
  spec.add_development_dependency "pry"
43
43
 
44
- spec.add_dependency "active_interaction", "~> 3.7"
44
+ spec.add_dependency "active_interaction", ">= 3.8"
45
45
  spec.add_dependency "base58", "~> 0.2.3"
46
46
  spec.add_dependency "httparty", "~> 0.17.0"
47
47
  spec.add_dependency "rbnacl", "~> 5.0.0"
@@ -11,4 +11,9 @@ sudo add-apt-repository "deb http://fr.archive.ubuntu.com/ubuntu bionic main uni
11
11
  sudo apt-get update -qq
12
12
  sudo apt-get install -y -qq \
13
13
  libsecp256k1-dev libsecp256k1-0 libsodium-dev libssl-dev \
14
- bubblewrap libev-dev libhidapi-dev npm
14
+ bubblewrap libev-dev libhidapi-dev
15
+
16
+ wget -qO- https://deb.nodesource.com/setup_14.x | sudo -E bash -
17
+ sudo apt install -y nodejs
18
+ node --version
19
+ npm --version
metadata CHANGED
@@ -1,14 +1,16 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: tezos_client
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.3.2
4
+ version: 1.4.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Pierre Michard
8
+ - Sébastien Lauret
9
+ - Othmane El Kesri
8
10
  autorequire:
9
11
  bindir: exe
10
12
  cert_chain: []
11
- date: 2020-09-25 00:00:00.000000000 Z
13
+ date: 2021-05-31 00:00:00.000000000 Z
12
14
  dependencies:
13
15
  - !ruby/object:Gem::Dependency
14
16
  name: bundler
@@ -16,14 +18,14 @@ dependencies:
16
18
  requirements:
17
19
  - - "~>"
18
20
  - !ruby/object:Gem::Version
19
- version: '1.16'
21
+ version: '2.1'
20
22
  type: :development
21
23
  prerelease: false
22
24
  version_requirements: !ruby/object:Gem::Requirement
23
25
  requirements:
24
26
  - - "~>"
25
27
  - !ruby/object:Gem::Version
26
- version: '1.16'
28
+ version: '2.1'
27
29
  - !ruby/object:Gem::Dependency
28
30
  name: rake
29
31
  requirement: !ruby/object:Gem::Requirement
@@ -112,16 +114,16 @@ dependencies:
112
114
  name: active_interaction
113
115
  requirement: !ruby/object:Gem::Requirement
114
116
  requirements:
115
- - - "~>"
117
+ - - ">="
116
118
  - !ruby/object:Gem::Version
117
- version: '3.7'
119
+ version: '3.8'
118
120
  type: :runtime
119
121
  prerelease: false
120
122
  version_requirements: !ruby/object:Gem::Requirement
121
123
  requirements:
122
- - - "~>"
124
+ - - ">="
123
125
  - !ruby/object:Gem::Version
124
- version: '3.7'
126
+ version: '3.8'
125
127
  - !ruby/object:Gem::Dependency
126
128
  name: base58
127
129
  requirement: !ruby/object:Gem::Requirement
@@ -223,6 +225,8 @@ dependencies:
223
225
  description: ''
224
226
  email:
225
227
  - pierre@moneytrack.io
228
+ - sebastien@moneytrack.io
229
+ - othmane@moneytrack.io
226
230
  executables: []
227
231
  extensions: []
228
232
  extra_rdoc_files: []
@@ -270,7 +274,6 @@ files:
270
274
  - lib/tezos_client/rpc_interface/monitor.rb
271
275
  - lib/tezos_client/rpc_interface/operations.rb
272
276
  - lib/tezos_client/rpc_interface/request_manager.rb
273
- - lib/tezos_client/smartpy_inteface/micheline_serializer_wrapper.rb
274
277
  - lib/tezos_client/smartpy_inteface/smartpy_wrapper.rb
275
278
  - lib/tezos_client/smartpy_interface.rb
276
279
  - lib/tezos_client/string_utils.rb
@@ -292,12 +295,24 @@ files:
292
295
  - lib/tezos_client/tools/convert_to_hash/timestamp.rb
293
296
  - lib/tezos_client/tools/find_big_maps_in_storage.rb
294
297
  - lib/tezos_client/tools/hash_to_micheline.rb
298
+ - lib/tezos_client/tools/hash_to_micheline/address.rb
299
+ - lib/tezos_client/tools/hash_to_micheline/base.rb
300
+ - lib/tezos_client/tools/hash_to_micheline/bytes.rb
301
+ - lib/tezos_client/tools/hash_to_micheline/contract.rb
302
+ - lib/tezos_client/tools/hash_to_micheline/int.rb
303
+ - lib/tezos_client/tools/hash_to_micheline/key.rb
304
+ - lib/tezos_client/tools/hash_to_micheline/nat.rb
305
+ - lib/tezos_client/tools/hash_to_micheline/option.rb
306
+ - lib/tezos_client/tools/hash_to_micheline/pair.rb
307
+ - lib/tezos_client/tools/hash_to_micheline/signature.rb
308
+ - lib/tezos_client/tools/hash_to_micheline/string.rb
309
+ - lib/tezos_client/tools/hash_to_micheline/timestamp.rb
295
310
  - lib/tezos_client/tools/system_call.rb
296
311
  - lib/tezos_client/tools/temporary_file.rb
297
312
  - lib/tezos_client/version.rb
298
313
  - tezos_client.gemspec
299
314
  - travis-scripts/prepare-ubuntu.sh
300
- homepage: http://moneytrack.io
315
+ homepage: https://moneytrack.io
301
316
  licenses:
302
317
  - MIT
303
318
  metadata:
@@ -1,17 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- class TezosClient
4
- class SmartpyInterface
5
- module MichelineSerializerWrapper
6
- def convert_michelson_to_micheline(script)
7
- cmd = ["michelson-to-micheline", script]
8
-
9
- Tools::SystemCall.execute(cmd)
10
- end
11
-
12
- def actual_project_path
13
- TezosClient.root_path
14
- end
15
- end
16
- end
17
- end