zold 0.14.36 → 0.14.37
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/bin/zold +16 -1
- data/fixtures/scripts/distribute-wallet.sh +1 -5
- data/fixtures/scripts/spread-wallets.sh +0 -4
- data/lib/zold/atomic_file.rb +1 -0
- data/lib/zold/node/async_entrance.rb +4 -1
- data/lib/zold/node/farm.rb +2 -1
- data/lib/zold/node/front.rb +2 -2
- data/lib/zold/sync_wallets.rb +2 -2
- data/lib/zold/tree_wallets.rb +63 -0
- data/lib/zold/version.rb +1 -1
- data/test/test__helper.rb +4 -0
- data/test/test_tree_wallets.rb +46 -0
- data/upgrades/move_wallets_into_tree.rb +46 -0
- data/zold.gemspec +2 -0
- metadata +34 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: e60384f0c0c624aa8351fbb37ba157ab55ecec6c
|
4
|
+
data.tar.gz: 45c724b470053a6d46787589ff8a8815f8bd2dc2
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: '08171d0370b3d30ae360159cc144fe7fb687110c09bad086b3c7ce37b984f49e76419dd864d55a22696e0a582a6b569b4ffb43ec04ec01c9dfdae30b144708b5'
|
7
|
+
data.tar.gz: cdd6f7908645858c273be17c94b3741aab8a5dd15fdfff65450a9d01ad79f34d97d290942c1529342eed4c31785fed78a650ad556b2dfe2036c25d8ba20e3514
|
data/bin/zold
CHANGED
@@ -31,10 +31,13 @@ end
|
|
31
31
|
|
32
32
|
require 'slop'
|
33
33
|
require 'rainbow'
|
34
|
+
require 'cachy'
|
35
|
+
require 'moneta'
|
34
36
|
require_relative '../lib/zold'
|
35
37
|
require_relative '../lib/zold/version'
|
36
38
|
require_relative '../lib/zold/wallet'
|
37
39
|
require_relative '../lib/zold/wallets'
|
40
|
+
require_relative '../lib/zold/tree_wallets'
|
38
41
|
require_relative '../lib/zold/sync_wallets'
|
39
42
|
require_relative '../lib/zold/log'
|
40
43
|
require_relative '../lib/zold/key'
|
@@ -46,6 +49,8 @@ require_relative '../lib/zold/version_file'
|
|
46
49
|
|
47
50
|
Thread.current.name = 'main'
|
48
51
|
|
52
|
+
Cachy.cache_store = Moneta.new(:Memory)
|
53
|
+
|
49
54
|
Encoding.default_external = Encoding::UTF_8
|
50
55
|
Encoding.default_internal = Encoding::UTF_8
|
51
56
|
|
@@ -158,9 +163,16 @@ Available options:"
|
|
158
163
|
Zold::ProtocolUp.new(Dir.pwd, log).exec
|
159
164
|
require_relative '../upgrades/rename_foreign_wallets'
|
160
165
|
Zold::RenameForeignWallets.new(Dir.pwd, opts['network'], log).exec
|
166
|
+
if command == 'node'
|
167
|
+
require_relative '../upgrades/move_wallets_into_tree'
|
168
|
+
Zold::MoveWalletsIntoTree.new(Dir.pwd, log).exec
|
169
|
+
end
|
161
170
|
end
|
162
171
|
|
163
|
-
wallets = Zold::SyncWallets.new(
|
172
|
+
wallets = Zold::SyncWallets.new(
|
173
|
+
command == 'node' ? Zold::TreeWallets.new('.') : Zold::Wallets.new('.'),
|
174
|
+
File.join(zoldata, 'locks'), log: log
|
175
|
+
)
|
164
176
|
remotes = Zold::Remotes.new(file: File.join(zoldata, 'remotes'), network: opts['network'])
|
165
177
|
copies = File.join(zoldata, 'copies')
|
166
178
|
|
@@ -183,6 +195,9 @@ Available options:"
|
|
183
195
|
when 'show'
|
184
196
|
require_relative '../lib/zold/commands/show'
|
185
197
|
Zold::Show.new(wallets: wallets, log: log).run(args)
|
198
|
+
when 'list'
|
199
|
+
require_relative '../lib/zold/commands/list'
|
200
|
+
Zold::List.new(wallets: wallets, log: log).run(args)
|
186
201
|
when 'fetch'
|
187
202
|
require_relative '../lib/zold/commands/fetch'
|
188
203
|
Zold::Fetch.new(wallets: wallets, remotes: remotes, copies: copies, log: log).run(args)
|
@@ -67,15 +67,11 @@ if [ $(echo ${json} | jq -r '.entrance.history_size') == "0" ]; then
|
|
67
67
|
echo "The history doesn't have a wallet, it's a bug"
|
68
68
|
exit 6
|
69
69
|
fi
|
70
|
-
if [ ! $(echo ${json} | jq -r '.wallets') == "1" ]; then
|
71
|
-
echo "The wallet is not there for some reason, it's a bug"
|
72
|
-
exit 7
|
73
|
-
fi
|
74
70
|
|
75
71
|
# Now, we remove the wallet from the second node and expect the first
|
76
72
|
# one to "spread" it again, almost immediately. The second node should
|
77
73
|
# have the wallet very soon.
|
78
|
-
rm -f ${second}
|
74
|
+
rm -f ${second}/**/*.z
|
79
75
|
i=0
|
80
76
|
until zold fetch 0000000000000000 --ignore-score-weakness; do
|
81
77
|
echo 'Failed to fetch, let us try again'
|
@@ -51,7 +51,3 @@ if [ ! $(echo ${json} | jq -r '.entrance.history_size') == "1" ]; then
|
|
51
51
|
echo "The history doesn't have a wallet, it's a bug"
|
52
52
|
exit -1
|
53
53
|
fi
|
54
|
-
if [ ! $(echo ${json} | jq -r '.wallets') == "1" ]; then
|
55
|
-
echo "The wallet is not there for some reason, it's a bug"
|
56
|
-
exit -1
|
57
|
-
fi
|
data/lib/zold/atomic_file.rb
CHANGED
@@ -35,6 +35,9 @@ module Zold
|
|
35
35
|
# How many threads to use for processing
|
36
36
|
THREADS = Concurrent.processor_count * 8
|
37
37
|
|
38
|
+
# Queue length
|
39
|
+
MAX_QUEUE = Concurrent.processor_count * 64
|
40
|
+
|
38
41
|
# Max items in the queue. If there will be more, push() requests
|
39
42
|
# will be rejected.
|
40
43
|
MAX_QUEUE = 128
|
@@ -65,7 +68,7 @@ module Zold
|
|
65
68
|
@entrance.start do
|
66
69
|
FileUtils.mkdir_p(@dir)
|
67
70
|
@pool = Concurrent::FixedThreadPool.new(
|
68
|
-
AsyncEntrance::THREADS, max_queue: AsyncEntrance::
|
71
|
+
AsyncEntrance::THREADS, max_queue: AsyncEntrance::MAX_QUEUE, fallback_policy: :abort
|
69
72
|
)
|
70
73
|
AsyncEntrance::THREADS.times do |t|
|
71
74
|
@pool.post do
|
data/lib/zold/node/farm.rb
CHANGED
@@ -57,7 +57,8 @@ module Zold
|
|
57
57
|
|
58
58
|
def to_text
|
59
59
|
@threads.map do |t|
|
60
|
-
|
60
|
+
trace = t.backtrace || []
|
61
|
+
"#{t.name}: status=#{t.status}; alive=#{t.alive?};\n #{trace.join("\n ")}"
|
61
62
|
end.join("\n")
|
62
63
|
end
|
63
64
|
|
data/lib/zold/node/front.rb
CHANGED
@@ -25,6 +25,7 @@ STDOUT.sync = true
|
|
25
25
|
require 'json'
|
26
26
|
require 'sinatra/base'
|
27
27
|
require 'webrick'
|
28
|
+
require 'cachy'
|
28
29
|
require 'get_process_mem'
|
29
30
|
require 'diffy'
|
30
31
|
require 'usagewatch_ext'
|
@@ -166,9 +167,8 @@ while #{settings.address} is in '#{settings.network}'"
|
|
166
167
|
memory: GetProcessMem.new.bytes.to_i,
|
167
168
|
platform: RUBY_PLATFORM,
|
168
169
|
load: Usagewatch.uw_load.to_f,
|
169
|
-
uptime: `uptime`.strip,
|
170
170
|
threads: "#{Thread.list.select { |t| t.status == 'run' }.count}/#{Thread.list.count}",
|
171
|
-
wallets: settings.wallets.all.count,
|
171
|
+
wallets: Cachy.cache(:a_key, expires_in: 5 * 60) { settings.wallets.all.count },
|
172
172
|
remotes: settings.remotes.all.count,
|
173
173
|
nscore: settings.remotes.all.map { |r| r[:score] }.inject(&:+) || 0,
|
174
174
|
farm: settings.farm.to_json,
|
data/lib/zold/sync_wallets.rb
CHANGED
@@ -59,10 +59,10 @@ module Zold
|
|
59
59
|
break if lock.flock(File::LOCK_EX | File::LOCK_NB)
|
60
60
|
sleep 0.1
|
61
61
|
cycles += 1
|
62
|
-
delay = Time.now - start
|
62
|
+
delay = (Time.now - start).round(2)
|
63
63
|
if delay > @timeout
|
64
64
|
raise "##{Process.pid}/#{Thread.current.name} can't get exclusive access to the wallet #{id} \
|
65
|
-
because of the lock at #{lock.path}: #{File.read(lock)}"
|
65
|
+
because of the lock at #{lock.path}, after #{delay}s of waiting: #{File.read(lock)}"
|
66
66
|
end
|
67
67
|
if (cycles % 20).zero? && delay > 10
|
68
68
|
@log.info("##{Process.pid}/#{Thread.current.name} still waiting for \
|
@@ -0,0 +1,63 @@
|
|
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
|
+
require 'pathname'
|
23
|
+
require_relative 'id'
|
24
|
+
require_relative 'wallet'
|
25
|
+
|
26
|
+
# The local collection of wallets.
|
27
|
+
# Author:: Yegor Bugayenko (yegor256@gmail.com)
|
28
|
+
# Copyright:: Copyright (c) 2018 Yegor Bugayenko
|
29
|
+
# License:: MIT
|
30
|
+
module Zold
|
31
|
+
# Collection of local wallets, in a tree of directories
|
32
|
+
class TreeWallets
|
33
|
+
def initialize(dir)
|
34
|
+
@dir = dir
|
35
|
+
end
|
36
|
+
|
37
|
+
def to_s
|
38
|
+
path
|
39
|
+
end
|
40
|
+
|
41
|
+
def path
|
42
|
+
FileUtils.mkdir_p(@dir)
|
43
|
+
File.expand_path(@dir)
|
44
|
+
end
|
45
|
+
|
46
|
+
# Returns the list of their IDs (as plain text)
|
47
|
+
def all
|
48
|
+
Dir.glob("#{path}/**/*#{Wallet::EXTENSION}").select do |f|
|
49
|
+
basename = File.basename(f, Wallet::EXTENSION)
|
50
|
+
File.file?(f) &&
|
51
|
+
!File.directory?(f) &&
|
52
|
+
basename =~ /^[0-9a-fA-F]{16}$/ &&
|
53
|
+
Id.new(basename).to_s == basename
|
54
|
+
end.map { |w| File.basename(w, Wallet::EXTENSION) }
|
55
|
+
end
|
56
|
+
|
57
|
+
def find(id)
|
58
|
+
raise 'Id can\'t be nil' if id.nil?
|
59
|
+
raise 'Id must be of type Id' unless id.is_a?(Id)
|
60
|
+
yield Zold::Wallet.new(File.join(path, (id.to_s.split('', 5).take(4) + [id.to_s]).join('/')))
|
61
|
+
end
|
62
|
+
end
|
63
|
+
end
|
data/lib/zold/version.rb
CHANGED
data/test/test__helper.rb
CHANGED
@@ -24,6 +24,8 @@ gem 'openssl'
|
|
24
24
|
require 'openssl'
|
25
25
|
require 'minitest/autorun'
|
26
26
|
require 'concurrent'
|
27
|
+
require 'cachy'
|
28
|
+
require 'moneta'
|
27
29
|
|
28
30
|
STDOUT.sync = true
|
29
31
|
|
@@ -36,6 +38,8 @@ if ENV['CI'] == 'true'
|
|
36
38
|
SimpleCov.formatter = SimpleCov::Formatter::Codecov
|
37
39
|
end
|
38
40
|
|
41
|
+
Cachy.cache_store = Moneta.new(:Memory)
|
42
|
+
|
39
43
|
module Minitest
|
40
44
|
class Test
|
41
45
|
def assert_wait(max: 30)
|
@@ -0,0 +1,46 @@
|
|
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 'tmpdir'
|
25
|
+
require_relative '../lib/zold/key'
|
26
|
+
require_relative '../lib/zold/id'
|
27
|
+
require_relative '../lib/zold/tree_wallets'
|
28
|
+
|
29
|
+
# TreeWallets test.
|
30
|
+
# Author:: Yegor Bugayenko (yegor256@gmail.com)
|
31
|
+
# Copyright:: Copyright (c) 2018 Yegor Bugayenko
|
32
|
+
# License:: MIT
|
33
|
+
class TestTreeWallets < Minitest::Test
|
34
|
+
def test_adds_wallet
|
35
|
+
Dir.mktmpdir do |dir|
|
36
|
+
wallets = Zold::TreeWallets.new(dir)
|
37
|
+
id = Zold::Id.new('abcd0123abcd0123')
|
38
|
+
wallets.find(id) do |wallet|
|
39
|
+
wallet.init(id, Zold::Key.new(file: 'fixtures/id_rsa.pub'))
|
40
|
+
assert_equal(1, wallets.all.count)
|
41
|
+
assert_equal(id.to_s, wallets.all[0])
|
42
|
+
assert(wallet.path.end_with?('/a/b/c/d/abcd0123abcd0123.z'), wallet.path)
|
43
|
+
end
|
44
|
+
end
|
45
|
+
end
|
46
|
+
end
|
@@ -0,0 +1,46 @@
|
|
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 'fileutils'
|
24
|
+
require_relative '../lib/zold/version'
|
25
|
+
require_relative '../lib/zold/wallet'
|
26
|
+
|
27
|
+
module Zold
|
28
|
+
# Move wallets into tree
|
29
|
+
class MoveWalletsIntoTree
|
30
|
+
def initialize(home, log)
|
31
|
+
@home = home
|
32
|
+
@log = log
|
33
|
+
end
|
34
|
+
|
35
|
+
def exec
|
36
|
+
Dir.new(@home).each do |path|
|
37
|
+
next unless path =~ /^[a-f0-9]{16}#{Wallet::EXTENSION}$/
|
38
|
+
f = File.join(@home, path)
|
39
|
+
target = File.join(@home, (path.split('', 5).take(4) + [path]).join('/'))
|
40
|
+
FileUtils.mkdir_p(File.dirname(target))
|
41
|
+
FileUtils.mv(f, target)
|
42
|
+
@log.info("Wallet #{path} moved to #{target}")
|
43
|
+
end
|
44
|
+
end
|
45
|
+
end
|
46
|
+
end
|
data/zold.gemspec
CHANGED
@@ -54,6 +54,7 @@ and suggests a different architecture for digital wallet maintenance.'
|
|
54
54
|
s.test_files = s.files.grep(%r{^(test|features)/})
|
55
55
|
s.rdoc_options = ['--charset=UTF-8']
|
56
56
|
s.extra_rdoc_files = ['README.md', 'LICENSE.txt']
|
57
|
+
s.add_runtime_dependency 'cachy', '0.4.2'
|
57
58
|
s.add_runtime_dependency 'concurrent-ruby', '~>1.0'
|
58
59
|
s.add_runtime_dependency 'cucumber', '~>3.1' # has to stay here for Heroku
|
59
60
|
s.add_runtime_dependency 'diffy', '~>3.2'
|
@@ -61,6 +62,7 @@ and suggests a different architecture for digital wallet maintenance.'
|
|
61
62
|
s.add_runtime_dependency 'dry-types', '~>0.13.2'
|
62
63
|
s.add_runtime_dependency 'get_process_mem', '0.2.2'
|
63
64
|
s.add_runtime_dependency 'json', '~>1.8'
|
65
|
+
s.add_runtime_dependency 'moneta', '1.0.0'
|
64
66
|
s.add_runtime_dependency 'openssl', '~>2.1'
|
65
67
|
s.add_runtime_dependency 'rainbow', '~>3.0'
|
66
68
|
s.add_runtime_dependency 'rake', '~>12.3' # has to stay here for Heroku
|
metadata
CHANGED
@@ -1,15 +1,29 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: zold
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.14.
|
4
|
+
version: 0.14.37
|
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-08-
|
11
|
+
date: 2018-08-17 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: cachy
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - '='
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: 0.4.2
|
20
|
+
type: :runtime
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - '='
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: 0.4.2
|
13
27
|
- !ruby/object:Gem::Dependency
|
14
28
|
name: concurrent-ruby
|
15
29
|
requirement: !ruby/object:Gem::Requirement
|
@@ -108,6 +122,20 @@ dependencies:
|
|
108
122
|
- - "~>"
|
109
123
|
- !ruby/object:Gem::Version
|
110
124
|
version: '1.8'
|
125
|
+
- !ruby/object:Gem::Dependency
|
126
|
+
name: moneta
|
127
|
+
requirement: !ruby/object:Gem::Requirement
|
128
|
+
requirements:
|
129
|
+
- - '='
|
130
|
+
- !ruby/object:Gem::Version
|
131
|
+
version: 1.0.0
|
132
|
+
type: :runtime
|
133
|
+
prerelease: false
|
134
|
+
version_requirements: !ruby/object:Gem::Requirement
|
135
|
+
requirements:
|
136
|
+
- - '='
|
137
|
+
- !ruby/object:Gem::Version
|
138
|
+
version: 1.0.0
|
111
139
|
- !ruby/object:Gem::Dependency
|
112
140
|
name: openssl
|
113
141
|
requirement: !ruby/object:Gem::Requirement
|
@@ -481,6 +509,7 @@ files:
|
|
481
509
|
- lib/zold/signature.rb
|
482
510
|
- lib/zold/sync_wallets.rb
|
483
511
|
- lib/zold/tax.rb
|
512
|
+
- lib/zold/tree_wallets.rb
|
484
513
|
- lib/zold/txn.rb
|
485
514
|
- lib/zold/type.rb
|
486
515
|
- lib/zold/upgrades.rb
|
@@ -539,6 +568,7 @@ files:
|
|
539
568
|
- test/test_signature.rb
|
540
569
|
- test/test_sync_wallets.rb
|
541
570
|
- test/test_tax.rb
|
571
|
+
- test/test_tree_wallets.rb
|
542
572
|
- test/test_txn.rb
|
543
573
|
- test/test_upgrades.rb
|
544
574
|
- test/test_verbose_thread.rb
|
@@ -548,6 +578,7 @@ files:
|
|
548
578
|
- test/test_zold.rb
|
549
579
|
- test/upgrades/test_protocol_up.rb
|
550
580
|
- upgrades/2.rb
|
581
|
+
- upgrades/move_wallets_into_tree.rb
|
551
582
|
- upgrades/protocol_up.rb
|
552
583
|
- upgrades/rename_foreign_wallets.rb
|
553
584
|
- zold.gemspec
|
@@ -630,6 +661,7 @@ test_files:
|
|
630
661
|
- test/test_signature.rb
|
631
662
|
- test/test_sync_wallets.rb
|
632
663
|
- test/test_tax.rb
|
664
|
+
- test/test_tree_wallets.rb
|
633
665
|
- test/test_txn.rb
|
634
666
|
- test/test_upgrades.rb
|
635
667
|
- test/test_verbose_thread.rb
|