zold 0.17.4 → 0.17.5
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/lib/zold/commands/node.rb +25 -16
- data/lib/zold/dir_items.rb +1 -7
- data/lib/zold/node/farmers.rb +0 -62
- data/lib/zold/node/front.rb +2 -6
- data/lib/zold/node/nodup_entrance.rb +3 -3
- data/lib/zold/node/nospam_entrance.rb +70 -0
- data/lib/zold/version.rb +1 -1
- data/test/node/fake_node.rb +1 -0
- data/test/node/test_farmers.rb +9 -31
- data/test/node/test_nodup_entrance.rb +1 -1
- data/test/node/test_nospam_entrance.rb +49 -0
- data/zold.gemspec +1 -2
- metadata +8 -19
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: c06af13af0d59a21c9855dc36c17c13cfe838286f7aadcb1ac3b130ed934d65d
|
4
|
+
data.tar.gz: 4349ebaee96c42a6224b92a4fc9a398f28d0f7c07352a34fd965d63bbf00b706
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 69b146cdf8bcc399e5213e1c8af4faa2aba937fd93a96ee845a0c9552ffbfe24fcb34d37c724298319aeddfde91ab2b30546f9afcb517232959000893ef40b4b
|
7
|
+
data.tar.gz: 82943553b346434e975041142b6ac21ffe301bae24695dc509613ef9b8fd8c0a625003f1b060360550b3eab1076f3cd42ad02a7f5de7b7d405f09534f36a3c10
|
data/lib/zold/commands/node.rb
CHANGED
@@ -41,6 +41,7 @@ require_relative '../node/spread_entrance'
|
|
41
41
|
require_relative '../node/async_entrance'
|
42
42
|
require_relative '../node/sync_entrance'
|
43
43
|
require_relative '../node/nodup_entrance'
|
44
|
+
require_relative '../node/nospam_entrance'
|
44
45
|
require_relative '../node/front'
|
45
46
|
require_relative '../node/trace'
|
46
47
|
require_relative '../node/farm'
|
@@ -123,6 +124,9 @@ module Zold
|
|
123
124
|
o.bool '--no-cache',
|
124
125
|
'Skip caching of front JSON pages (will seriously slow down, mostly useful for testing)',
|
125
126
|
default: false
|
127
|
+
o.bool '--allow-spam',
|
128
|
+
'Don\'t filter the incoming spam via PUT requests (duplicate wallets)',
|
129
|
+
default: false
|
126
130
|
o.bool '--skip-oom',
|
127
131
|
'Skip Out Of Memory check and never exit, no matter how much RAM is consumed',
|
128
132
|
default: false
|
@@ -225,27 +229,32 @@ module Zold
|
|
225
229
|
).run(['invoice', invoice, "--network=#{opts['network']}"])
|
226
230
|
end
|
227
231
|
SafeEntrance.new(
|
228
|
-
|
229
|
-
|
230
|
-
|
231
|
-
|
232
|
-
|
233
|
-
|
234
|
-
|
235
|
-
|
232
|
+
NoSpamEntrance.new(
|
233
|
+
NoDupEntrance.new(
|
234
|
+
AsyncEntrance.new(
|
235
|
+
SpreadEntrance.new(
|
236
|
+
SyncEntrance.new(
|
237
|
+
Entrance.new(
|
238
|
+
@wallets,
|
239
|
+
@remotes, @copies, address,
|
240
|
+
log: @log, network: opts['network']
|
241
|
+
),
|
242
|
+
File.join(home, '.zoldata/sync-entrance'),
|
243
|
+
log: @log
|
236
244
|
),
|
237
|
-
|
238
|
-
log: @log
|
245
|
+
@wallets, @remotes, address,
|
246
|
+
log: @log,
|
247
|
+
ignore_score_weakeness: opts['ignore-score-weakness']
|
239
248
|
),
|
240
|
-
|
249
|
+
File.join(home, '.zoldata/async-entrance'),
|
241
250
|
log: @log,
|
242
|
-
|
251
|
+
queue_limit: opts['queue-limit']
|
243
252
|
),
|
244
|
-
|
245
|
-
log: @log
|
246
|
-
queue_limit: opts['queue-limit']
|
253
|
+
@wallets,
|
254
|
+
log: @log
|
247
255
|
),
|
248
|
-
|
256
|
+
period: opts['allow-spam'] ? 0 : 60 * 60,
|
257
|
+
log: @log
|
249
258
|
),
|
250
259
|
network: opts['network']
|
251
260
|
).start do |entrance|
|
data/lib/zold/dir_items.rb
CHANGED
@@ -21,7 +21,6 @@
|
|
21
21
|
# SOFTWARE.
|
22
22
|
|
23
23
|
require 'shellwords'
|
24
|
-
require 'posix/spawn'
|
25
24
|
|
26
25
|
# Items in a directory.
|
27
26
|
#
|
@@ -40,12 +39,7 @@ module Zold
|
|
40
39
|
end
|
41
40
|
|
42
41
|
def fetch(recursive: true)
|
43
|
-
|
44
|
-
'find',
|
45
|
-
*([@dir, '-type', 'f', '-print'] + (recursive ? [] : ['-maxdepth', '1']))
|
46
|
-
)
|
47
|
-
raise spawn.err unless spawn.status.success?
|
48
|
-
spawn.out
|
42
|
+
`find #{([@dir, '-type', 'f', '-print'] + (recursive ? [] : ['-maxdepth', '1'])).join(' ')}`
|
49
43
|
.strip
|
50
44
|
.split(' ')
|
51
45
|
.select { |f| f.start_with?(@dir) && f.length > @dir.length }
|
data/lib/zold/node/farmers.rb
CHANGED
@@ -24,7 +24,6 @@ require 'open3'
|
|
24
24
|
require 'backtrace'
|
25
25
|
require 'zold/score'
|
26
26
|
require 'shellwords'
|
27
|
-
require 'posix/spawn'
|
28
27
|
require_relative '../log'
|
29
28
|
require_relative '../age'
|
30
29
|
|
@@ -54,67 +53,6 @@ module Zold
|
|
54
53
|
end
|
55
54
|
end
|
56
55
|
|
57
|
-
# In a child process
|
58
|
-
class Spawn
|
59
|
-
def initialize(log: Log::NULL)
|
60
|
-
@log = log
|
61
|
-
end
|
62
|
-
|
63
|
-
def up(score)
|
64
|
-
raise "We are farming the score already: #{score}" if
|
65
|
-
POSIX::Spawn::Child.new('ps', 'ax').out.include?(score.to_s.split(' ').take(4).join(' '))
|
66
|
-
start = Time.now
|
67
|
-
bin = File.expand_path(File.join(File.dirname(__FILE__), '../../../bin/zold'))
|
68
|
-
raise "Zold binary not found at #{bin}" unless File.exist?(bin)
|
69
|
-
cmd = [
|
70
|
-
'ruby',
|
71
|
-
Shellwords.escape(bin),
|
72
|
-
'--skip-upgrades',
|
73
|
-
"--info-tid=#{Thread.current.thread_variable_get(:tid)}",
|
74
|
-
"--info-thread=#{Shellwords.escape(Thread.current.name)}",
|
75
|
-
"--info-start=#{Time.now.utc.iso8601}",
|
76
|
-
'--low-priority',
|
77
|
-
'next',
|
78
|
-
Shellwords.escape(score)
|
79
|
-
].join(' ')
|
80
|
-
Open3.popen2e(cmd) do |stdin, stdout, thr|
|
81
|
-
Thread.current.thread_variable_set(:pid, thr.pid.to_s)
|
82
|
-
at_exit { Farmers.kill(@log, thr.pid, start) }
|
83
|
-
@log.debug("Scoring started in proc ##{thr.pid} \
|
84
|
-
for #{score.value}/#{score.strength} at #{score.host}:#{score.port}")
|
85
|
-
begin
|
86
|
-
stdin.close
|
87
|
-
buffer = +''
|
88
|
-
loop do
|
89
|
-
begin
|
90
|
-
buffer << stdout.read_nonblock(16 * 1024)
|
91
|
-
# rubocop:disable Lint/HandleExceptions
|
92
|
-
rescue IO::WaitReadable => _
|
93
|
-
# rubocop:enable Lint/HandleExceptions
|
94
|
-
# nothing to do here
|
95
|
-
rescue StandardError => e
|
96
|
-
@log.error(buffer)
|
97
|
-
raise e
|
98
|
-
end
|
99
|
-
break if buffer.end_with?("\n") && thr.value.to_i.zero?
|
100
|
-
if stdout.closed?
|
101
|
-
raise "Failed to calculate the score (##{thr.value}): #{buffer}" unless thr.value.to_i.zero?
|
102
|
-
break
|
103
|
-
end
|
104
|
-
sleep(1)
|
105
|
-
Thread.current.thread_variable_set(:buffer, buffer.length.to_s)
|
106
|
-
end
|
107
|
-
after = Score.parse(buffer.strip)
|
108
|
-
@log.debug("Next score #{after.value}/#{after.strength} found in proc ##{thr.pid} \
|
109
|
-
for #{after.host}:#{after.port} in #{Age.new(start)}: #{after.suffixes}")
|
110
|
-
after
|
111
|
-
ensure
|
112
|
-
Farmers.kill(@log, thr.pid, start)
|
113
|
-
end
|
114
|
-
end
|
115
|
-
end
|
116
|
-
end
|
117
|
-
|
118
56
|
# In a child process using fork
|
119
57
|
class Fork
|
120
58
|
def initialize(log: Log::NULL)
|
data/lib/zold/node/front.rb
CHANGED
@@ -29,7 +29,6 @@ require 'sinatra/base'
|
|
29
29
|
require 'concurrent'
|
30
30
|
require 'backtrace'
|
31
31
|
require 'zache'
|
32
|
-
require 'posix/spawn'
|
33
32
|
require_relative '../version'
|
34
33
|
require_relative '../size'
|
35
34
|
require_relative '../wallet'
|
@@ -313,7 +312,7 @@ in #{Age.new(@start, limit: 1)}")
|
|
313
312
|
"Balance: #{wallet.balance.to_zld(8)} ZLD (#{wallet.balance.to_i} zents)",
|
314
313
|
"Transactions: #{wallet.txns.count}",
|
315
314
|
"Taxes: #{Tax.new(wallet).paid} paid, the debt is #{Tax.new(wallet).debt}",
|
316
|
-
"File size: #{wallet.size}
|
315
|
+
"File size: #{Size.new(wallet.size)}, #{Copies.new(File.join(settings.copies, wallet.id)).all.count} copies",
|
317
316
|
"Modified: #{wallet.mtime.utc.iso8601} (#{Age.new(wallet.mtime.utc.iso8601)} ago)",
|
318
317
|
"Digest: #{wallet.digest}"
|
319
318
|
].join("\n")
|
@@ -458,10 +457,7 @@ in #{Age.new(@start, limit: 1)}")
|
|
458
457
|
end
|
459
458
|
|
460
459
|
def processes
|
461
|
-
|
462
|
-
# This is temporarily disabled. We suspect that this line causes
|
463
|
-
# memory leakage.
|
464
|
-
# POSIX::Spawn::Child.new('ps', 'ax').out.split("\n").select { |t| t.include?('zold') }
|
460
|
+
`ps ax`.split("\n").select { |t| t.include?('zold') }
|
465
461
|
end
|
466
462
|
|
467
463
|
def pretty(json)
|
@@ -31,7 +31,7 @@ require_relative '../wallet'
|
|
31
31
|
# Copyright:: Copyright (c) 2018 Yegor Bugayenko
|
32
32
|
# License:: MIT
|
33
33
|
module Zold
|
34
|
-
# The
|
34
|
+
# The entrance that ignores dups
|
35
35
|
class NoDupEntrance
|
36
36
|
def initialize(entrance, wallets, log: Log::NULL)
|
37
37
|
@entrance = entrance
|
@@ -53,10 +53,10 @@ module Zold
|
|
53
53
|
before = @wallets.acq(id) { |w| w.exists? ? w.digest : '' }
|
54
54
|
after = OpenSSL::Digest::SHA256.new(body).hexdigest
|
55
55
|
if before == after
|
56
|
-
@log.debug("Duplicate of #{id} ignored
|
56
|
+
@log.debug("Duplicate of #{id} ignored #{Size.new(body.length)}")
|
57
57
|
return []
|
58
58
|
end
|
59
|
-
@log.debug("New content for #{id} arrived
|
59
|
+
@log.debug("New content for #{id} arrived #{Size.new(body.length)}")
|
60
60
|
@entrance.push(id, body)
|
61
61
|
end
|
62
62
|
end
|
@@ -0,0 +1,70 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
# Copyright (c) 2018 Yegor Bugayenko
|
4
|
+
#
|
5
|
+
# Permission is hereby granted, free of charge, to any person obtaining a copy
|
6
|
+
# of this software and associated documentation files (the 'Software'), to deal
|
7
|
+
# in the Software without restriction, including without limitation the rights
|
8
|
+
# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
9
|
+
# copies of the Software, and to permit persons to whom the Software is
|
10
|
+
# furnished to do so, subject to the following conditions:
|
11
|
+
#
|
12
|
+
# The above copyright notice and this permission notice shall be included in all
|
13
|
+
# copies or substantial portions of the Software.
|
14
|
+
#
|
15
|
+
# THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
16
|
+
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
17
|
+
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFINGEMENT. IN NO EVENT SHALL THE
|
18
|
+
# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
19
|
+
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
20
|
+
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
21
|
+
# SOFTWARE.
|
22
|
+
|
23
|
+
require 'tempfile'
|
24
|
+
require 'openssl'
|
25
|
+
require 'zache'
|
26
|
+
require_relative '../log'
|
27
|
+
require_relative '../size'
|
28
|
+
|
29
|
+
# The entrance that ignores something we've seen already.
|
30
|
+
# Author:: Yegor Bugayenko (yegor256@gmail.com)
|
31
|
+
# Copyright:: Copyright (c) 2018 Yegor Bugayenko
|
32
|
+
# License:: MIT
|
33
|
+
module Zold
|
34
|
+
# The no-spam entrance
|
35
|
+
class NoSpamEntrance
|
36
|
+
def initialize(entrance, period: 60 * 60, log: Log::NULL)
|
37
|
+
@entrance = entrance
|
38
|
+
@log = log
|
39
|
+
@period = period
|
40
|
+
@zache = Zache.new
|
41
|
+
end
|
42
|
+
|
43
|
+
def start
|
44
|
+
raise 'Block must be given to start()' unless block_given?
|
45
|
+
@entrance.start { yield(self) }
|
46
|
+
end
|
47
|
+
|
48
|
+
def to_json
|
49
|
+
@entrance.to_json
|
50
|
+
end
|
51
|
+
|
52
|
+
# Returns a list of modifed wallets (as Zold::Id)
|
53
|
+
def push(id, body)
|
54
|
+
before = @zache.get(id.to_s, lifetime: @period) { '' }
|
55
|
+
after = hash(id, body)
|
56
|
+
if before == after
|
57
|
+
@log.debug("Spam of #{id} ignored #{Size.new(body.length)}")
|
58
|
+
return []
|
59
|
+
end
|
60
|
+
@zache.put(id.to_s, after)
|
61
|
+
@entrance.push(id, body)
|
62
|
+
end
|
63
|
+
|
64
|
+
private
|
65
|
+
|
66
|
+
def hash(id, body)
|
67
|
+
OpenSSL::Digest::SHA256.new(id.to_s + ' ' + body).hexdigest
|
68
|
+
end
|
69
|
+
end
|
70
|
+
end
|
data/lib/zold/version.rb
CHANGED
data/test/node/fake_node.rb
CHANGED
data/test/node/test_farmers.rb
CHANGED
@@ -30,7 +30,7 @@ require_relative '../../lib/zold/verbose_thread'
|
|
30
30
|
class FarmersTest < Zold::Test
|
31
31
|
def test_calculates_next_score
|
32
32
|
before = Zold::Score.new(host: 'some-host', port: 9999, invoice: 'NOPREFIX4@ffffffffffffffff', strength: 3)
|
33
|
-
[Zold::Farmers::Plain, Zold::Farmers::
|
33
|
+
[Zold::Farmers::Plain, Zold::Farmers::Fork].each do |farmer_class|
|
34
34
|
farmer = farmer_class.new(log: test_log)
|
35
35
|
after = farmer.up(before)
|
36
36
|
assert_equal(1, after.value)
|
@@ -41,21 +41,20 @@ class FarmersTest < Zold::Test
|
|
41
41
|
end
|
42
42
|
|
43
43
|
def test_calculates_large_score
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
farmer =
|
44
|
+
[Zold::Farmers::Plain, Zold::Farmers::Fork].each do |type|
|
45
|
+
log = TestLogger.new(test_log)
|
46
|
+
thread = Thread.start do
|
47
|
+
farmer = type.new(log: log)
|
48
48
|
farmer.up(Zold::Score.new(host: 'a', port: 1, invoice: 'NOPREFIX4@ffffffffffffffff', strength: 20))
|
49
49
|
end
|
50
|
+
sleep(0.1)
|
51
|
+
thread.kill
|
52
|
+
thread.join
|
50
53
|
end
|
51
|
-
assert_wait { !log.msgs.find { |m| m.include?('Scoring started') }.nil? }
|
52
|
-
thread.kill
|
53
|
-
thread.join
|
54
|
-
assert(log.msgs.find { |m| m.include?('killed') })
|
55
54
|
end
|
56
55
|
|
57
56
|
def test_kills_farmer
|
58
|
-
[Zold::Farmers::Plain, Zold::Farmers::
|
57
|
+
[Zold::Farmers::Plain, Zold::Farmers::Fork].each do |type|
|
59
58
|
farmer = type.new(log: test_log)
|
60
59
|
thread = Thread.start do
|
61
60
|
Zold::VerboseThread.new(test_log).run do
|
@@ -67,25 +66,4 @@ class FarmersTest < Zold::Test
|
|
67
66
|
thread.join
|
68
67
|
end
|
69
68
|
end
|
70
|
-
|
71
|
-
def test_avoid_duplicate_processes
|
72
|
-
log = TestLogger.new(test_log)
|
73
|
-
time = Time.now
|
74
|
-
thread = Thread.start do
|
75
|
-
[Zold::Farmers::Spawn, Zold::Farmers::Fork].each do |farmer_class|
|
76
|
-
farmer = farmer_class.new(log: log)
|
77
|
-
farmer.up(Zold::Score.new(time: time, host: 'a', port: 1, invoice: 'prefixone@ffffffffffffffff', strength: 20))
|
78
|
-
end
|
79
|
-
end
|
80
|
-
assert_wait { !log.msgs.find { |m| m.include?('Scoring started') }.nil? }
|
81
|
-
assert_raises do
|
82
|
-
[Zold::Farmers::Spawn, Zold::Farmers::Fork].each do |farmer_class|
|
83
|
-
farmer_class.new(log: log).up(
|
84
|
-
Zold::Score.new(time: time, host: 'a', port: 1, invoice: 'prefixtwo@ffffffffffffffff', strength: 20)
|
85
|
-
)
|
86
|
-
end
|
87
|
-
end
|
88
|
-
thread.kill
|
89
|
-
thread.join
|
90
|
-
end
|
91
69
|
end
|
@@ -31,7 +31,7 @@ require_relative 'fake_entrance'
|
|
31
31
|
# Author:: Yegor Bugayenko (yegor256@gmail.com)
|
32
32
|
# Copyright:: Copyright (c) 2018 Yegor Bugayenko
|
33
33
|
# License:: MIT
|
34
|
-
class
|
34
|
+
class TestNoDupEntrance < Zold::Test
|
35
35
|
def test_ignores_dup
|
36
36
|
FakeHome.new(log: test_log).run do |home|
|
37
37
|
wallet = home.create_wallet
|
@@ -0,0 +1,49 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
# Copyright (c) 2018 Yegor Bugayenko
|
4
|
+
#
|
5
|
+
# Permission is hereby granted, free of charge, to any person obtaining a copy
|
6
|
+
# of this software and associated documentation files (the 'Software'), to deal
|
7
|
+
# in the Software without restriction, including without limitation the rights
|
8
|
+
# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
9
|
+
# copies of the Software, and to permit persons to whom the Software is
|
10
|
+
# furnished to do so, subject to the following conditions:
|
11
|
+
#
|
12
|
+
# The above copyright notice and this permission notice shall be included in all
|
13
|
+
# copies or substantial portions of the Software.
|
14
|
+
#
|
15
|
+
# THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
16
|
+
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
17
|
+
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFINGEMENT. IN NO EVENT SHALL THE
|
18
|
+
# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
19
|
+
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
20
|
+
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
21
|
+
# SOFTWARE.
|
22
|
+
|
23
|
+
require 'minitest/autorun'
|
24
|
+
require_relative '../test__helper'
|
25
|
+
require_relative '../../lib/zold/id'
|
26
|
+
require_relative '../../lib/zold/node/nospam_entrance'
|
27
|
+
require_relative 'fake_entrance'
|
28
|
+
|
29
|
+
# NoSpamEntrance test.
|
30
|
+
# Author:: Yegor Bugayenko (yegor256@gmail.com)
|
31
|
+
# Copyright:: Copyright (c) 2018 Yegor Bugayenko
|
32
|
+
# License:: MIT
|
33
|
+
class TestNoSpamEntrance < Zold::Test
|
34
|
+
def test_ignores_spam
|
35
|
+
Zold::NoSpamEntrance.new(RealEntrance.new, log: test_log).start do |e|
|
36
|
+
id = Zold::Id.new
|
37
|
+
content = 'hello'
|
38
|
+
assert(!e.push(id, content).empty?)
|
39
|
+
assert(e.push(id, content).empty?)
|
40
|
+
assert(e.push(id, content).empty?)
|
41
|
+
end
|
42
|
+
end
|
43
|
+
|
44
|
+
class RealEntrance < FakeEntrance
|
45
|
+
def push(id, _)
|
46
|
+
[id]
|
47
|
+
end
|
48
|
+
end
|
49
|
+
end
|
data/zold.gemspec
CHANGED
@@ -71,7 +71,6 @@ and suggests a different architecture for digital wallet maintenance.'
|
|
71
71
|
s.add_runtime_dependency 'memory_profiler', '0.9.12'
|
72
72
|
s.add_runtime_dependency 'openssl', '2.1.2'
|
73
73
|
s.add_runtime_dependency 'parallel', '1.12.1'
|
74
|
-
s.add_runtime_dependency 'posix-spawn', '0.3.13'
|
75
74
|
s.add_runtime_dependency 'rainbow', '3.0.0'
|
76
75
|
s.add_runtime_dependency 'rake', '12.3.1' # has to stay here for Heroku
|
77
76
|
s.add_runtime_dependency 'rubocop', '0.60.0' # has to stay here for Heroku
|
@@ -85,7 +84,7 @@ and suggests a different architecture for digital wallet maintenance.'
|
|
85
84
|
s.add_runtime_dependency 'typhoeus', '1.3.1'
|
86
85
|
s.add_runtime_dependency 'usagewatch_ext', '0.2.1'
|
87
86
|
s.add_runtime_dependency 'xcop', '0.6'
|
88
|
-
s.add_runtime_dependency 'zache', '0.
|
87
|
+
s.add_runtime_dependency 'zache', '0.4.0'
|
89
88
|
s.add_runtime_dependency 'zold-score', '0.3.4'
|
90
89
|
s.add_development_dependency 'codecov', '0.1.13'
|
91
90
|
s.add_development_dependency 'minitest', '5.11.3'
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: zold
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.17.
|
4
|
+
version: 0.17.5
|
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-
|
11
|
+
date: 2018-12-01 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: backtrace
|
@@ -150,20 +150,6 @@ dependencies:
|
|
150
150
|
- - '='
|
151
151
|
- !ruby/object:Gem::Version
|
152
152
|
version: 1.12.1
|
153
|
-
- !ruby/object:Gem::Dependency
|
154
|
-
name: posix-spawn
|
155
|
-
requirement: !ruby/object:Gem::Requirement
|
156
|
-
requirements:
|
157
|
-
- - '='
|
158
|
-
- !ruby/object:Gem::Version
|
159
|
-
version: 0.3.13
|
160
|
-
type: :runtime
|
161
|
-
prerelease: false
|
162
|
-
version_requirements: !ruby/object:Gem::Requirement
|
163
|
-
requirements:
|
164
|
-
- - '='
|
165
|
-
- !ruby/object:Gem::Version
|
166
|
-
version: 0.3.13
|
167
153
|
- !ruby/object:Gem::Dependency
|
168
154
|
name: rainbow
|
169
155
|
requirement: !ruby/object:Gem::Requirement
|
@@ -352,14 +338,14 @@ dependencies:
|
|
352
338
|
requirements:
|
353
339
|
- - '='
|
354
340
|
- !ruby/object:Gem::Version
|
355
|
-
version: 0.
|
341
|
+
version: 0.4.0
|
356
342
|
type: :runtime
|
357
343
|
prerelease: false
|
358
344
|
version_requirements: !ruby/object:Gem::Requirement
|
359
345
|
requirements:
|
360
346
|
- - '='
|
361
347
|
- !ruby/object:Gem::Version
|
362
|
-
version: 0.
|
348
|
+
version: 0.4.0
|
363
349
|
- !ruby/object:Gem::Dependency
|
364
350
|
name: zold-score
|
365
351
|
requirement: !ruby/object:Gem::Requirement
|
@@ -615,6 +601,7 @@ files:
|
|
615
601
|
- lib/zold/node/farmers.rb
|
616
602
|
- lib/zold/node/front.rb
|
617
603
|
- lib/zold/node/nodup_entrance.rb
|
604
|
+
- lib/zold/node/nospam_entrance.rb
|
618
605
|
- lib/zold/node/safe_entrance.rb
|
619
606
|
- lib/zold/node/spread_entrance.rb
|
620
607
|
- lib/zold/node/sync_entrance.rb
|
@@ -667,6 +654,7 @@ files:
|
|
667
654
|
- test/node/test_farmers.rb
|
668
655
|
- test/node/test_front.rb
|
669
656
|
- test/node/test_nodup_entrance.rb
|
657
|
+
- test/node/test_nospam_entrance.rb
|
670
658
|
- test/node/test_safe_entrance.rb
|
671
659
|
- test/node/test_spread_entrance.rb
|
672
660
|
- test/node/test_sync_entrance.rb
|
@@ -711,7 +699,7 @@ licenses:
|
|
711
699
|
- MIT
|
712
700
|
metadata: {}
|
713
701
|
post_install_message: |-
|
714
|
-
Thanks for installing Zold 0.17.
|
702
|
+
Thanks for installing Zold 0.17.5!
|
715
703
|
Study our White Paper: https://papers.zold.io/wp.pdf
|
716
704
|
Read our blog posts: https://blog.zold.io
|
717
705
|
Try online wallet at: https://wts.zold.io
|
@@ -773,6 +761,7 @@ test_files:
|
|
773
761
|
- test/node/test_farmers.rb
|
774
762
|
- test/node/test_front.rb
|
775
763
|
- test/node/test_nodup_entrance.rb
|
764
|
+
- test/node/test_nospam_entrance.rb
|
776
765
|
- test/node/test_safe_entrance.rb
|
777
766
|
- test/node/test_spread_entrance.rb
|
778
767
|
- test/node/test_sync_entrance.rb
|