zold 0.19.2 → 0.20.0

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: 32709fc443bc01bdd90a978c9cc7204fd8d6758466a46dbecb5c811bd2a40a12
4
- data.tar.gz: cd4fe030458935e3ec27db1673289d3b1dbdf63989b027ea50bf8f336fcab49f
3
+ metadata.gz: 3cf98ca9682d1320a73b1abcd73b8d7b05e38e36104cf7b9aa70d5c74f182537
4
+ data.tar.gz: 1c63b8e0ce591b4b2082e84a2858ceac34b85c1310f4cd52a209555e8ed55443
5
5
  SHA512:
6
- metadata.gz: c7b3009e694c98f2dd296d888191b2060cd222e19d621bda1cb457941b5167257149d6c9e7c1ea9645cb221b1c8014fc8d7f44574fcbcecd9a731a204ec5c4ba
7
- data.tar.gz: 30a9c25381547e573a6908412465311c7477314d085100d17fe3ca4baa4289e42196fc62bfdd6565998b36b6d773f3c17bd074c9e0dd2d74e4be83f1590ca9a9
6
+ metadata.gz: 17d3f4eaa73d06fc4afa419e7acb6cb5a3570150d877cf185c446b5dc75eae9f339a446a3359ccdbcb96e43cf96f18bc55ad66b972bac21b0d511d4e939e2723
7
+ data.tar.gz: a4167a3fa33a6d64b3a390d11c4fde7aa645e37f60027e0bb27c73ed4a9385fe0b9240ff0525e8ed511613d8f4383e7170bce2272b53ff52401d45dfbb176bf3
data/.rubocop.yml CHANGED
@@ -8,13 +8,15 @@ AllCops:
8
8
  Layout/EmptyLineAfterGuardClause:
9
9
  Enabled: false
10
10
  Metrics/CyclomaticComplexity:
11
- Max: 25
11
+ Max: 30
12
12
  Metrics/MethodLength:
13
13
  Enabled: false
14
14
  Layout/MultilineMethodCallIndentation:
15
15
  Enabled: false
16
16
  Metrics/AbcSize:
17
17
  Enabled: false
18
+ Metrics/BlockNesting:
19
+ Max: 4
18
20
  Metrics/BlockLength:
19
21
  Max: 120
20
22
  Metrics/ClassLength:
@@ -26,7 +28,7 @@ Metrics/ParameterLists:
26
28
  Layout/AlignParameters:
27
29
  Enabled: false
28
30
  Metrics/PerceivedComplexity:
29
- Max: 25
31
+ Max: 30
30
32
  Metrics/LineLength:
31
33
  Max: 120
32
34
  Style/MultilineBlockChain:
data/bin/zold CHANGED
@@ -222,7 +222,7 @@ cmd = lambda do
222
222
  Zold::Diff.new(wallets: wallets, copies: copies, log: log).run(args)
223
223
  when 'merge'
224
224
  require_relative '../lib/zold/commands/merge'
225
- Zold::Merge.new(wallets: wallets, copies: copies, log: log).run(args)
225
+ Zold::Merge.new(wallets: wallets, remotes: remotes, copies: copies, log: log).run(args)
226
226
  when 'propagate'
227
227
  require_relative '../lib/zold/commands/propagate'
228
228
  Zold::Propagate.new(wallets: wallets, log: log).run(args)
data/heroku-run.sh CHANGED
@@ -1,5 +1,5 @@
1
1
  #!/bin/sh
2
2
 
3
- ./bin/zold node --no-colors --trace --dump-errors --skip-oom \
3
+ ./bin/zold node --no-colors --trace --dump-errors \
4
4
  --bind-port=$PORT --port=80 --host=b1.zold.io --threads=0 \
5
5
  --invoice=ML5Ern7m@912ecc24b32dbe74 --never-reboot
@@ -25,6 +25,7 @@ require 'rainbow'
25
25
  require 'backtrace'
26
26
  require_relative 'thread_badge'
27
27
  require_relative 'args'
28
+ require_relative 'pull'
28
29
  require_relative '../age'
29
30
  require_relative '../log'
30
31
  require_relative '../id'
@@ -40,8 +41,9 @@ module Zold
40
41
  class Merge
41
42
  prepend ThreadBadge
42
43
 
43
- def initialize(wallets:, copies:, log: Log::NULL)
44
+ def initialize(wallets:, remotes:, copies:, log: Log::NULL)
44
45
  @wallets = wallets
46
+ @remotes = remotes
45
47
  @copies = copies
46
48
  @log = log
47
49
  end
@@ -57,6 +59,15 @@ Available options:"
57
59
  o.bool '--skip-propagate',
58
60
  'Don\'t propagate after merge',
59
61
  default: false
62
+ o.bool '--skip-legacy',
63
+ 'Don\'t make legacy transactions (older than 24 hours) immutable',
64
+ default: false
65
+ o.bool '--shallow',
66
+ 'Don\'t try to pull other wallets if their confirmations are required',
67
+ default: false
68
+ o.string '--network',
69
+ 'The name of the network we work in',
70
+ default: 'test'
60
71
  o.bool '--help', 'Print instructions'
61
72
  end
62
73
  mine = Args.new(opts, @log).take || return
@@ -78,6 +89,15 @@ Available options:"
78
89
  cps = cps.all.sort_by { |c| c[:score] }.reverse
79
90
  patch = Patch.new(@wallets, log: @log)
80
91
  score = 0
92
+ unless opts['skip-legacy']
93
+ @wallets.acq(id) do |w|
94
+ if w.exists?
95
+ s = Time.now
96
+ merge_one(opts, patch, w, 'localhost', legacy: true)
97
+ @log.debug("Local legacy copy of #{id} merged in #{Age.new(s)}: #{patch}")
98
+ end
99
+ end
100
+ end
81
101
  cps.each_with_index do |c, idx|
82
102
  wallet = Wallet.new(c[:path])
83
103
  name = "#{c[:name]}/#{idx}/#{c[:score]}"
@@ -86,8 +106,9 @@ Available options:"
86
106
  end
87
107
  @wallets.acq(id) do |w|
88
108
  if w.exists?
109
+ s = Time.now
89
110
  merge_one(opts, patch, w, 'localhost')
90
- @log.debug("Local copy of #{id} merged in #{Age.new(start)}: #{patch}")
111
+ @log.debug("Local copy of #{id} merged in #{Age.new(s)}: #{patch}")
91
112
  else
92
113
  @log.debug("Local copy of #{id} is absent, nothing to merge")
93
114
  end
@@ -103,11 +124,17 @@ into #{@wallets.acq(id, &:mnemo)} in #{Age.new(start, limit: 0.1 + cps.count * 0
103
124
  modified
104
125
  end
105
126
 
106
- def merge_one(opts, patch, wallet, name)
127
+ def merge_one(opts, patch, wallet, name, legacy: false)
107
128
  start = Time.now
108
- @log.debug("Building a patch for #{wallet.id} from remote copy #{name}...")
109
- patch.join(wallet, !opts['no-baseline'])
110
- @log.debug("Copy #{name} of #{wallet.id} merged in #{Age.new(start)}: #{patch}")
129
+ @log.debug("Building a patch for #{wallet.id} from remote copy ##{name} with #{wallet.mnemo}...")
130
+ patch.join(wallet, baseline: !opts['no-baseline'], legacy: legacy) do |id|
131
+ unless opts['shallow']
132
+ Pull.new(wallets: @wallets, remotes: @remotes, copies: @copies, log: @log).run(
133
+ ['pull', id.to_s, "--network=#{opts['network']}", '--shallow']
134
+ )
135
+ end
136
+ end
137
+ @log.debug("Copy ##{name} of #{wallet.id} merged in #{Age.new(start)}: #{patch}")
111
138
  rescue StandardError => e
112
139
  @log.error("Can't merge copy #{name}: #{e.message}")
113
140
  @log.debug(Backtrace.new(e).to_s)
@@ -223,7 +223,7 @@ module Zold
223
223
  end
224
224
  hungry = Zold::ThreadPool.new('hungry', log: @log)
225
225
  wts = Zold::HungryWallets.new(@wallets, @remotes, @copies, hungry, log: @log, network: opts['network'])
226
- Front.set(:zache, Zache.new)
226
+ Front.set(:zache, Zache.new(dirty: true))
227
227
  Front.set(:wallets, wts)
228
228
  Front.set(:remotes, @remotes)
229
229
  Front.set(:copies, @copies)
@@ -45,7 +45,7 @@ module Zold
45
45
  def run(args = [])
46
46
  Zold::Clean.new(wallets: @wallets, copies: @copies, log: @log).run(args)
47
47
  Zold::Fetch.new(wallets: @wallets, remotes: @remotes, copies: @copies, log: @log).run(args)
48
- Zold::Merge.new(wallets: @wallets, copies: @copies, log: @log).run(args)
48
+ Zold::Merge.new(wallets: @wallets, remotes: @remotes, copies: @copies, log: @log).run(args)
49
49
  end
50
50
  end
51
51
  end
@@ -163,7 +163,13 @@ Available options:"
163
163
  def show
164
164
  @remotes.all.each do |r|
165
165
  score = Rainbow("/#{r[:score]}").color(r[:score].positive? ? :green : :red)
166
- @log.info("#{r[:host]}:#{r[:port]}#{score} #{r[:errors]} errors#{r[:default] ? ' default' : ''}")
166
+ @log.info(
167
+ [
168
+ "#{r[:host]}:#{r[:port]}#{score}",
169
+ r[:errors].positive? ? " #{r[:errors]} errors" : '',
170
+ r[:master] ? ' [master]' : ''
171
+ ].join
172
+ )
167
173
  end
168
174
  end
169
175
 
@@ -77,6 +77,7 @@ Available options:"
77
77
  end
78
78
  @log.info(
79
79
  [
80
+ '',
80
81
  "The balance of #{wallet}: #{balance} (#{balance.to_i} zents)",
81
82
  "Network: #{wallet.network}",
82
83
  "Transactions: #{wallet.txns.count}",
@@ -86,6 +87,11 @@ Available options:"
86
87
  "Digest: #{wallet.digest}"
87
88
  ].join("\n")
88
89
  )
90
+ @log.info(
91
+ "\n" + Copies.new(File.join(@copies, wallet.id)).all.map do |c|
92
+ "##{c[:name]}: #{c[:score]} #{Wallet.new(c[:path]).mnemo}"
93
+ end.join("\n")
94
+ )
89
95
  balance
90
96
  end
91
97
  end
@@ -29,6 +29,9 @@ require 'json'
29
29
  module Zold
30
30
  # JSON page
31
31
  class JsonPage
32
+ # When can't parse the JSON page.
33
+ class CantParse < StandardError; end
34
+
32
35
  def initialize(text, uri = '')
33
36
  raise 'JSON text can\'t be nil' if text.nil?
34
37
  raise 'JSON must be of type String' unless text.is_a?(String)
@@ -37,11 +40,16 @@ module Zold
37
40
  end
38
41
 
39
42
  def to_hash
40
- raise 'JSON is empty, can\'t parse' + (@uri.empty? ? '' : " at #{@uri}") if @text.empty?
43
+ raise CantParse, 'JSON is empty, can\'t parse' + (@uri.empty? ? '' : " at #{@uri}") if @text.empty?
41
44
  JSON.parse(@text)
42
45
  rescue JSON::ParserError => e
43
- raise "Failed to parse JSON #{@uri.empty? ? '' : "at #{@uri}"} (#{e.message}): \
44
- #{@text.inspect.gsub(/^.{200,}$/, '\1...')}"
46
+ raise CantParse, "Failed to parse JSON #{@uri.empty? ? '' : "at #{@uri}"} (#{short(e.message)}): #{short(@text)}"
47
+ end
48
+
49
+ private
50
+
51
+ def short(txt)
52
+ txt.gsub(/^.{128,}$/, '\1...').inspect
45
53
  end
46
54
  end
47
55
  end
@@ -78,7 +78,7 @@ module Zold
78
78
  ).run(['fetch', id.to_s, "--ignore-node=#{@address}", "--network=#{@network}", '--quiet-if-absent'])
79
79
  end
80
80
  modified = Merge.new(
81
- wallets: @wallets, copies: copies.root, log: @log
81
+ wallets: @wallets, remotes: @remotes, copies: copies.root, log: @log
82
82
  ).run(['merge', id.to_s, '--no-baseline'])
83
83
  Clean.new(wallets: @wallets, copies: copies.root, log: @log).run(['clean', id.to_s])
84
84
  copies.remove(localhost, Remotes::PORT)
@@ -210,7 +210,8 @@ from #{request.ip} in #{Age.new(@start, limit: 1)}")
210
210
  end,
211
211
  memory: settings.zache.get(:memory, lifetime: 5 * 60) do
212
212
  mem = GetProcessMem.new.bytes.to_i
213
- if mem > settings.opts['oom-limit'] * 1024 * 1024 && !settings.opts['skip-oom']
213
+ if mem > settings.opts['oom-limit'] * 1024 * 1024 &&
214
+ !settings.opts['skip-oom'] && !settings.opts['never-reboot']
214
215
  settings.log.error("We are too big in memory (#{Size.new(mem)}), quitting; use --skip-oom to never quit")
215
216
  Front.stop!
216
217
  end
data/lib/zold/patch.rb CHANGED
@@ -43,7 +43,7 @@ module Zold
43
43
  "#{@txns.count} txns"
44
44
  end
45
45
 
46
- def join(wallet, baseline = true)
46
+ def join(wallet, baseline: true, legacy: false)
47
47
  if @id.nil?
48
48
  @id = wallet.id
49
49
  @key = wallet.key
@@ -68,21 +68,23 @@ module Zold
68
68
  return
69
69
  end
70
70
  wallet.txns.each do |txn|
71
+ next if legacy && (txn.amount.positive? || txn.date > Time.now - 24 * 60 * 60)
71
72
  next if @txns.find { |t| t == txn }
72
73
  if txn.amount.negative?
73
74
  dup = @txns.find { |t| t.id == txn.id && t.amount.negative? }
74
75
  if dup
75
- @log.error("An attempt to overwrite \"#{dup.to_text}\" with \"#{txn.to_text}\" from #{wallet.mnemo}")
76
+ @log.error("An attempt to overwrite existing transaction \"#{dup.to_text}\" \
77
+ with a new one \"#{txn.to_text}\" from #{wallet.mnemo}")
76
78
  next
77
79
  end
78
80
  balance = @txns.map(&:amount).map(&:to_i).inject(&:+).to_i
79
81
  if balance < txn.amount.to_i * -1 && !wallet.root?
80
- @log.error("Transaction ##{txn.id} attempts to make the balance of \
81
- #{wallet.id}/#{Amount.new(zents: balance).to_zld}/#{@txns.size} negative: #{txn.to_text}")
82
+ @log.error("The transaction ##{txn.id} attempts to make the balance of \
83
+ #{wallet.id}/#{Amount.new(zents: balance).to_zld}/#{@txns.size} negative: \"#{txn.to_text}\"")
82
84
  next
83
85
  end
84
86
  unless Signature.new(@network).valid?(@key, wallet.id, txn)
85
- @log.error("Invalid RSA signature at transaction ##{txn.id} of #{wallet.id}: #{txn.to_text}")
87
+ @log.error("Invalid RSA signature at the transaction ##{txn.id} of #{wallet.id}: \"#{txn.to_text}\"")
86
88
  next
87
89
  end
88
90
  else
@@ -100,8 +102,16 @@ module Zold
100
102
  next
101
103
  end
102
104
  unless @wallets.acq(txn.bnf, &:exists?)
103
- @log.error("Paying wallet file is absent: #{txn.to_text}")
104
- next
105
+ if block_given?
106
+ yield(txn.bnf)
107
+ unless @wallets.acq(txn.bnf, &:exists?)
108
+ @log.error("Paying wallet #{txn.bnf} file is absent even after PULL: \"#{txn.to_text}\"")
109
+ next
110
+ end
111
+ else
112
+ @log.error("Paying wallet #{txn.bnf} file is absent and it's a \"shallow\" MERGE: #{txn.to_text}")
113
+ next
114
+ end
105
115
  end
106
116
  unless @wallets.acq(txn.bnf) { |p| p.includes_negative?(txn.id, wallet.id) }
107
117
  @log.error("The beneficiary #{@wallets.acq(txn.bnf, &:mnemo)} of #{@id} \
data/lib/zold/version.rb CHANGED
@@ -25,7 +25,7 @@
25
25
  # Copyright:: Copyright (c) 2018 Yegor Bugayenko
26
26
  # License:: MIT
27
27
  module Zold
28
- VERSION = '0.19.2'
28
+ VERSION = '0.20.0'
29
29
  PROTOCOL = 2
30
30
  REPO = 'zold-io/zold'
31
31
  end
@@ -54,7 +54,7 @@ class TestMerge < Zold::Test
54
54
  copies = home.copies(wallet)
55
55
  copies.add(IO.read(first.path), 'host-1', 80, 5)
56
56
  copies.add(IO.read(second.path), 'host-2', 80, 5)
57
- modified = Zold::Merge.new(wallets: home.wallets, copies: copies.root, log: test_log).run(
57
+ modified = Zold::Merge.new(wallets: home.wallets, remotes: home.remotes, copies: copies.root, log: test_log).run(
58
58
  ['merge', wallet.id.to_s]
59
59
  )
60
60
  assert(1, modified.count)
@@ -75,7 +75,7 @@ class TestMerge < Zold::Test
75
75
  copies = home.copies(wallet)
76
76
  copies.add(IO.read(first.path), 'host-1', 80, 5)
77
77
  copies.add(IO.read(second.path), 'host-2', 80, 5)
78
- modified = Zold::Merge.new(wallets: home.wallets, copies: copies.root, log: test_log).run(
78
+ modified = Zold::Merge.new(wallets: home.wallets, remotes: home.remotes, copies: copies.root, log: test_log).run(
79
79
  ['merge', wallet.id.to_s]
80
80
  )
81
81
  assert(1, modified.count)
@@ -89,7 +89,7 @@ class TestMerge < Zold::Test
89
89
  copies = home.copies(wallet)
90
90
  copies.add(IO.read(wallet.path), 'good-host', 80, 5)
91
91
  copies.add('some garbage', 'bad-host', 80, 5)
92
- modified = Zold::Merge.new(wallets: home.wallets, copies: copies.root, log: test_log).run(
92
+ modified = Zold::Merge.new(wallets: home.wallets, remotes: home.remotes, copies: copies.root, log: test_log).run(
93
93
  ['merge', wallet.id.to_s]
94
94
  )
95
95
  assert(modified.empty?)
@@ -103,7 +103,7 @@ class TestMerge < Zold::Test
103
103
  copies.add(IO.read(wallet.path), 'good-host', 80, 5)
104
104
  key = Zold::Key.new(file: 'fixtures/id_rsa')
105
105
  wallet.sub(Zold::Amount.new(zld: 9.99), "NOPREFIX@#{Zold::Id.new}", key)
106
- Zold::Merge.new(wallets: home.wallets, copies: copies.root, log: test_log).run(
106
+ Zold::Merge.new(wallets: home.wallets, remotes: home.remotes, copies: copies.root, log: test_log).run(
107
107
  ['merge', wallet.id.to_s]
108
108
  )
109
109
  assert(!wallet.balance.zero?)
@@ -118,7 +118,7 @@ class TestMerge < Zold::Test
118
118
  remote.add(Zold::Txn.new(1, Time.now, Zold::Amount.new(zld: 11.0), 'NOPREFIX', Zold::Id.new, 'fake'))
119
119
  copies = home.copies(main)
120
120
  copies.add(IO.read(remote.path), 'fake-host', 80, 0)
121
- Zold::Merge.new(wallets: home.wallets, copies: copies.root, log: test_log).run(
121
+ Zold::Merge.new(wallets: home.wallets, remotes: home.remotes, copies: copies.root, log: test_log).run(
122
122
  ['merge', main.id.to_s, '--no-baseline']
123
123
  )
124
124
  assert_equal(Zold::Amount::ZERO, main.balance)
@@ -130,7 +130,7 @@ class TestMerge < Zold::Test
130
130
  wallet = home.create_wallet
131
131
  key = Zold::Key.new(file: 'fixtures/id_rsa')
132
132
  wallet.sub(Zold::Amount.new(zld: 9.99), "NOPREFIX@#{Zold::Id.new}", key)
133
- Zold::Merge.new(wallets: home.wallets, copies: home.copies.root, log: test_log).run(
133
+ Zold::Merge.new(wallets: home.wallets, remotes: home.remotes, copies: home.copies.root, log: test_log).run(
134
134
  ['merge', wallet.id.to_s, '--no-baseline']
135
135
  )
136
136
  assert_equal(Zold::Amount::ZERO, wallet.balance)
@@ -147,7 +147,8 @@ class TestMerge < Zold::Test
147
147
  FileUtils.cp('fixtures/merge/asserts.rb', dir)
148
148
  wallets = Zold::Wallets.new(dir)
149
149
  copies = File.join(dir, 'copies')
150
- Zold::Merge.new(wallets: wallets, copies: copies, log: test_log).run(
150
+ remotes = Zold::Remotes.new(file: File.join(dir, 'remotes'))
151
+ Zold::Merge.new(wallets: wallets, remotes: remotes, copies: copies, log: test_log).run(
151
152
  %w[merge 0123456789abcdef]
152
153
  )
153
154
  Dir.chdir(dir) do
@@ -34,8 +34,14 @@ class TestJsonPage < Zold::Test
34
34
  end
35
35
 
36
36
  def test_parses_broken_json_page
37
- assert_raises do
37
+ assert_raises Zold::JsonPage::CantParse do
38
38
  Zold::JsonPage.new('not json').to_hash
39
39
  end
40
40
  end
41
+
42
+ def test_parses_empty_page
43
+ assert_raises Zold::JsonPage::CantParse do
44
+ Zold::JsonPage.new('').to_hash
45
+ end
46
+ end
41
47
  end
data/zold.gemspec CHANGED
@@ -61,11 +61,11 @@ and suggests a different architecture for digital wallet maintenance.'
61
61
  s.test_files = s.files.grep(%r{^(test|features)/})
62
62
  s.rdoc_options = ['--charset=UTF-8']
63
63
  s.extra_rdoc_files = ['README.md', 'LICENSE.txt']
64
- s.add_runtime_dependency 'backtrace', '~>0'
64
+ s.add_runtime_dependency 'backtrace', '>=0.3'
65
65
  s.add_runtime_dependency 'concurrent-ruby', '1.1.3'
66
66
  s.add_runtime_dependency 'cucumber', '3.1.2' # has to stay here for Heroku
67
67
  s.add_runtime_dependency 'diffy', '3.2.1'
68
- s.add_runtime_dependency 'futex', '~>0'
68
+ s.add_runtime_dependency 'futex', '>=0.8.1'
69
69
  s.add_runtime_dependency 'get_process_mem', '~>0.2'
70
70
  s.add_runtime_dependency 'json', '2.1.0'
71
71
  s.add_runtime_dependency 'memory_profiler', '0.9.12'
@@ -79,11 +79,11 @@ and suggests a different architecture for digital wallet maintenance.'
79
79
  s.add_runtime_dependency 'slop', '4.6.2'
80
80
  s.add_runtime_dependency 'sys-proctable', '1.2.1'
81
81
  s.add_runtime_dependency 'thin', '1.7.2'
82
- s.add_runtime_dependency 'threads', '~>0'
82
+ s.add_runtime_dependency 'threads', '>=0.3'
83
83
  s.add_runtime_dependency 'typhoeus', '1.3.1'
84
84
  s.add_runtime_dependency 'usagewatch_ext', '0.2.1'
85
- s.add_runtime_dependency 'xcop', '~>0'
86
- s.add_runtime_dependency 'zache', '~>0'
85
+ s.add_runtime_dependency 'xcop', '>=0.6'
86
+ s.add_runtime_dependency 'zache', '>=0.5.3'
87
87
  s.add_runtime_dependency 'zold-score', '0.4.4'
88
88
  s.add_development_dependency 'codecov', '0.1.13'
89
89
  s.add_development_dependency 'minitest', '5.11.3'
metadata CHANGED
@@ -1,29 +1,29 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: zold
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.19.2
4
+ version: 0.20.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Yegor Bugayenko
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2018-12-18 00:00:00.000000000 Z
11
+ date: 2018-12-19 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: backtrace
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
- - - "~>"
17
+ - - ">="
18
18
  - !ruby/object:Gem::Version
19
- version: '0'
19
+ version: '0.3'
20
20
  type: :runtime
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
- - - "~>"
24
+ - - ">="
25
25
  - !ruby/object:Gem::Version
26
- version: '0'
26
+ version: '0.3'
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: concurrent-ruby
29
29
  requirement: !ruby/object:Gem::Requirement
@@ -70,16 +70,16 @@ dependencies:
70
70
  name: futex
71
71
  requirement: !ruby/object:Gem::Requirement
72
72
  requirements:
73
- - - "~>"
73
+ - - ">="
74
74
  - !ruby/object:Gem::Version
75
- version: '0'
75
+ version: 0.8.1
76
76
  type: :runtime
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: '0'
82
+ version: 0.8.1
83
83
  - !ruby/object:Gem::Dependency
84
84
  name: get_process_mem
85
85
  requirement: !ruby/object:Gem::Requirement
@@ -266,16 +266,16 @@ dependencies:
266
266
  name: threads
267
267
  requirement: !ruby/object:Gem::Requirement
268
268
  requirements:
269
- - - "~>"
269
+ - - ">="
270
270
  - !ruby/object:Gem::Version
271
- version: '0'
271
+ version: '0.3'
272
272
  type: :runtime
273
273
  prerelease: false
274
274
  version_requirements: !ruby/object:Gem::Requirement
275
275
  requirements:
276
- - - "~>"
276
+ - - ">="
277
277
  - !ruby/object:Gem::Version
278
- version: '0'
278
+ version: '0.3'
279
279
  - !ruby/object:Gem::Dependency
280
280
  name: typhoeus
281
281
  requirement: !ruby/object:Gem::Requirement
@@ -308,30 +308,30 @@ dependencies:
308
308
  name: xcop
309
309
  requirement: !ruby/object:Gem::Requirement
310
310
  requirements:
311
- - - "~>"
311
+ - - ">="
312
312
  - !ruby/object:Gem::Version
313
- version: '0'
313
+ version: '0.6'
314
314
  type: :runtime
315
315
  prerelease: false
316
316
  version_requirements: !ruby/object:Gem::Requirement
317
317
  requirements:
318
- - - "~>"
318
+ - - ">="
319
319
  - !ruby/object:Gem::Version
320
- version: '0'
320
+ version: '0.6'
321
321
  - !ruby/object:Gem::Dependency
322
322
  name: zache
323
323
  requirement: !ruby/object:Gem::Requirement
324
324
  requirements:
325
- - - "~>"
325
+ - - ">="
326
326
  - !ruby/object:Gem::Version
327
- version: '0'
327
+ version: 0.5.3
328
328
  type: :runtime
329
329
  prerelease: false
330
330
  version_requirements: !ruby/object:Gem::Requirement
331
331
  requirements:
332
- - - "~>"
332
+ - - ">="
333
333
  - !ruby/object:Gem::Version
334
- version: '0'
334
+ version: 0.5.3
335
335
  - !ruby/object:Gem::Dependency
336
336
  name: zold-score
337
337
  requirement: !ruby/object:Gem::Requirement
@@ -690,7 +690,7 @@ licenses:
690
690
  - MIT
691
691
  metadata: {}
692
692
  post_install_message: |-
693
- Thanks for installing Zold 0.19.2!
693
+ Thanks for installing Zold 0.20.0!
694
694
  Study our White Paper: https://papers.zold.io/wp.pdf
695
695
  Read our blog posts: https://blog.zold.io
696
696
  Try online wallet at: https://wts.zold.io