zold 0.29.22 → 0.29.23

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 5b4542141ab23f1369c77e16a27e14999b91d20fc7d9a44e15951cdae5cefa41
4
- data.tar.gz: ff130bde3e777a600141445f1367cc3f0738d870887591f890e49b8171e14846
3
+ metadata.gz: 889105e0d182da51bc1e5f1404ac8a89e761ccbe3a01c2d8927093d5cbbea4b7
4
+ data.tar.gz: da4dc45dd27825ea6f36d361f9d8e0617bac70f3d8d333a1471b477987498b75
5
5
  SHA512:
6
- metadata.gz: 17f943b32fd7d8d2a9140cd4a2212573e2f90afd9a7b59a539d3550f5861f1c7fd0addf89f2eac16b493d78049bddc1e382b342d65b0375e2e6648750b17ceb4
7
- data.tar.gz: 961b59b291f64b5d4369f5191a07809528198d47a502212b8461c7c87bd4f849e60f71e1944aa6279a5f5d3085f02ef9dead8324b979f569adce40bed2a132ab
6
+ metadata.gz: 4378c9164cde07bc3d52df96df215632ef29c871c95cb9e6838550bd4e6b72761d3f3a8e7a73cce3e4f7825b38eb4f2d939d9ffbf49cd05edc15514c8ad32ff0
7
+ data.tar.gz: 39a8d2951f30122c8abe0da442800c1bac410cc0daeafc8000ac1b7ee5dedbfa179301778c2d44692fefcc50f69effd4b6aa7a42ef64e72d3771070d5994c43d
@@ -1 +1 @@
1
- --shallow
1
+ --verbose
@@ -1 +1,3 @@
1
- --verbose
1
+ --verbose
2
+ --deep
3
+ --no-baseline
@@ -1 +1,3 @@
1
- --verbose
1
+ --verbose
2
+ --deep
3
+ --no-baseline
@@ -63,15 +63,15 @@ Available options:"
63
63
  o.bool '--quiet-if-absent',
64
64
  'Don\'t fail if the wallet is absent',
65
65
  default: false
66
- o.bool '--shallow',
67
- 'Don\'t try to pull other wallets if their confirmations are required',
68
- default: false
69
66
  o.bool '--deep',
70
67
  'Try to pull other wallets if their confirmations are required, as deep as possible',
71
68
  default: false
72
69
  o.bool '--allow-negative-balance',
73
70
  'Don\'t check for the negative balance of the wallet after the merge',
74
71
  default: false
72
+ o.bool '--no-baseline',
73
+ 'Don\'t treat the highest score master copy as trustable baseline',
74
+ default: false
75
75
  o.string '--ledger',
76
76
  'The name of the file where all new negative transactions will be recorded (default: /dev/null)',
77
77
  default: '/dev/null'
@@ -80,7 +80,7 @@ Available options:"
80
80
  default: '/dev/null'
81
81
  o.integer '--trusted-max',
82
82
  'The maximum amount of trusted wallets we can see in the list',
83
- default: 32
83
+ default: 128
84
84
  o.string '--network',
85
85
  'The name of the network we work in',
86
86
  default: 'test'
@@ -120,7 +120,7 @@ Available options:"
120
120
  cps.each_with_index do |c, idx|
121
121
  wallet = Wallet.new(c[:path])
122
122
  name = "#{c[:name]}/#{idx}/#{c[:score]}"
123
- merge_one(opts, patch, wallet, name)
123
+ merge_one(opts, patch, wallet, name, baseline: idx.zero? && c[:master] && !opts['no-baseline'])
124
124
  score += c[:score]
125
125
  end
126
126
  @wallets.acq(id) do |w|
@@ -148,16 +148,11 @@ into #{@wallets.acq(id, &:mnemo)} in #{Age.new(start, limit: 0.1 + cps.count * 0
148
148
  modified
149
149
  end
150
150
 
151
- def merge_one(opts, patch, wallet, name)
151
+ def merge_one(opts, patch, wallet, name, baseline: false)
152
152
  start = Time.now
153
153
  @log.debug("Building a patch for #{wallet.id} from remote copy ##{name} with #{wallet.mnemo}...")
154
- if opts['shallow']
155
- patch.join(wallet, ledger: opts['ledger']) do |txn|
156
- @log.debug("Paying wallet #{txn.bnf} file is in question but it's a \"shallow\" MERGE: #{txn.to_text}")
157
- false
158
- end
159
- else
160
- patch.join(wallet, ledger: opts['ledger']) do |txn|
154
+ if opts['deep']
155
+ patch.join(wallet, ledger: opts['ledger'], baseline: baseline) do |txn|
161
156
  trusted = IO.read(opts['trusted']).split(',')
162
157
  if trusted.include?(txn.bnf.to_s)
163
158
  @log.debug("Won't PULL #{txn.bnf} since it is already trusted, among #{trusted.count} others")
@@ -168,12 +163,18 @@ into #{@wallets.acq(id, &:mnemo)} in #{Age.new(start, limit: 0.1 + cps.count * 0
168
163
  IO.write(opts['trusted'], (trusted + [txn.bnf.to_s]).sort.uniq.join(','))
169
164
  Pull.new(wallets: @wallets, remotes: @remotes, copies: @copies, log: @log).run(
170
165
  ['pull', txn.bnf.to_s, "--network=#{Shellwords.escape(opts['network'])}", '--quiet-if-absent'] +
171
- (opts['deep'] ? ['--deep'] : ['--shallow']) +
166
+ (opts['deep'] ? ['--deep'] : []) +
167
+ (opts['no-baseline'] ? ['--no-baseline'] : []) +
172
168
  ["--trusted=#{Shellwords.escape(opts['trusted'])}"]
173
169
  )
174
170
  end
175
171
  true
176
172
  end
173
+ else
174
+ patch.join(wallet, ledger: opts['ledger'], baseline: baseline) do |txn|
175
+ @log.debug("Paying wallet #{txn.bnf} file is in question but it's not a deep MERGE: #{txn.to_text}")
176
+ false
177
+ end
177
178
  end
178
179
  @log.debug("Copy ##{name} of #{wallet.id} merged in #{Age.new(start)}: #{patch}")
179
180
  rescue StandardError => e
@@ -87,10 +87,13 @@ module Zold
87
87
  def merge(id, copies, wallets, log)
88
88
  Tempfile.open do |f|
89
89
  modified = Tempfile.open do |t|
90
+ # host, port = @address.split(':')
90
91
  Merge.new(wallets: wallets, remotes: @remotes, copies: copies.root, log: log).run(
91
92
  ['merge', id.to_s, "--ledger=#{Shellwords.escape(f.path)}"] +
92
- ["--trusted=#{Shellwords.escape(t.path)}", '--deep', '--trusted-max=256'] +
93
+ ["--trusted=#{Shellwords.escape(t.path)}"] +
93
94
  ["--network=#{Shellwords.escape(@network)}"]
95
+ # Uncomment this line ASAP:
96
+ # (@remotes.master?(host, port.to_i) ? ['--no-baseline', '--deep'] : [])
94
97
  )
95
98
  end
96
99
  @mutex.synchronize do
data/lib/zold/patch.rb CHANGED
@@ -65,7 +65,11 @@ module Zold
65
65
  # not present, it's a failure, don't accept the transaction. FALSE will mean
66
66
  # that the transaction should be accepted, even if the paying wallet is
67
67
  # absent.
68
- def join(wallet, ledger: '/dev/null')
68
+ #
69
+ # The "baseline" flag, when set to TRUE, means that we should NOT validate
70
+ # the presence of positive incoming transactions in their correspondent
71
+ # wallets. We shall just trust them.
72
+ def join(wallet, ledger: '/dev/null', baseline: false)
69
73
  if @id.nil?
70
74
  @id = wallet.id
71
75
  @key = wallet.key
@@ -115,25 +119,35 @@ with a new one \"#{txn.to_text}\" from #{wallet.mnemo}")
115
119
  next
116
120
  end
117
121
  unless @wallets.acq(txn.bnf, &:exists?)
118
- next if pulled.include?(txn.bnf)
119
- pulled << txn.bnf
120
- if yield(txn) && !@wallets.acq(txn.bnf, &:exists?)
121
- @log.error("Paying wallet #{txn.bnf} file is absent even after PULL: \"#{txn.to_text}\"")
122
- next
122
+ if baseline
123
+ @log.debug("Paying wallet #{txn.bnf} is absent, but the txn in in the baseline: \"#{txn.to_text}\"")
124
+ else
125
+ next if pulled.include?(txn.bnf)
126
+ pulled << txn.bnf
127
+ if yield(txn) && !@wallets.acq(txn.bnf, &:exists?)
128
+ @log.error("Paying wallet #{txn.bnf} file is absent even after PULL: \"#{txn.to_text}\"")
129
+ next
130
+ end
123
131
  end
124
132
  end
125
- if @wallets.acq(txn.bnf, &:exists?) && !@wallets.acq(txn.bnf) { |p| p.includes_negative?(txn.id, wallet.id) }
126
- if pulled.include?(txn.bnf)
133
+ if @wallets.acq(txn.bnf, &:exists?) &&
134
+ !@wallets.acq(txn.bnf) { |p| p.includes_negative?(txn.id, wallet.id) }
135
+ if baseline
127
136
  @log.debug("The beneficiary #{@wallets.acq(txn.bnf, &:mnemo)} of #{@id} \
137
+ doesn't have this transaction, but we trust it, since it's a baseline: \"#{txn.to_text}\"")
138
+ else
139
+ if pulled.include?(txn.bnf)
140
+ @log.debug("The beneficiary #{@wallets.acq(txn.bnf, &:mnemo)} of #{@id} \
128
141
  doesn't have this transaction: \"#{txn.to_text}\"")
129
- next
130
- end
131
- pulled << txn.bnf
132
- yield(txn)
133
- unless @wallets.acq(txn.bnf) { |p| p.includes_negative?(txn.id, wallet.id) }
134
- @log.debug("The beneficiary #{@wallets.acq(txn.bnf, &:mnemo)} of #{@id} \
142
+ next
143
+ end
144
+ pulled << txn.bnf
145
+ yield(txn)
146
+ unless @wallets.acq(txn.bnf) { |p| p.includes_negative?(txn.id, wallet.id) }
147
+ @log.debug("The beneficiary #{@wallets.acq(txn.bnf, &:mnemo)} of #{@id} \
135
148
  doesn't have this transaction: \"#{txn.to_text}\"")
136
- next
149
+ next
150
+ end
137
151
  end
138
152
  end
139
153
  end
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.29.22'
28
+ VERSION = '0.29.23'
29
29
  PROTOCOL = 2
30
30
  REPO = 'zold-io/zold'
31
31
  end
data/test/test_copies.rb CHANGED
@@ -73,8 +73,10 @@ class TestCopies < Zold::Test
73
73
  def test_master_first
74
74
  Dir.mktmpdir do |dir|
75
75
  copies = Zold::Copies.new(File.join(dir, 'my/a/copies-2'), log: test_log)
76
- copies.add(content('z1'), 'master', 80, 100, master: false)
77
- copies.add(content('z2'), 'edge', 80, 1, master: true)
76
+ copies.add(content('z1'), 'edge-1', 80, 100, master: false)
77
+ copies.add(content('z2'), 'master', 80, 1, master: true)
78
+ copies.add(content('z1'), 'edge-2', 80, 50, master: false)
79
+ copies.add(content('z1'), 'edge-3', 80, 400, master: false)
78
80
  assert(copies.all[0][:master])
79
81
  end
80
82
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: zold
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.29.22
4
+ version: 0.29.23
5
5
  platform: ruby
6
6
  authors:
7
7
  - Yegor Bugayenko
@@ -798,7 +798,7 @@ licenses:
798
798
  - MIT
799
799
  metadata: {}
800
800
  post_install_message: |-
801
- Thanks for installing Zold 0.29.22!
801
+ Thanks for installing Zold 0.29.23!
802
802
  Study our White Paper: https://papers.zold.io/wp.pdf
803
803
  Read our blog posts: https://blog.zold.io
804
804
  Try ZLD online wallet at: https://wts.zold.io