zold 0.26.7 → 0.26.8
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/fixtures/merge/missed_wallets/0000000000000000.z +6 -0
- data/fixtures/merge/missed_wallets/0123456789abcdef.z +6 -0
- data/fixtures/merge/missed_wallets/assert.rb +25 -0
- data/fixtures/merge/missed_wallets/copies/0123456789abcdef/1.zc +8 -0
- data/fixtures/merge/missed_wallets/copies/0123456789abcdef/scores.zc +1 -0
- data/fixtures/merge/missed_wallets/opts +1 -0
- data/lib/zold/commands/fetch.rb +6 -3
- data/lib/zold/commands/merge.rb +8 -2
- data/lib/zold/commands/pay.rb +10 -2
- data/lib/zold/commands/taxes.rb +9 -1
- data/lib/zold/patch.rb +5 -0
- data/lib/zold/remotes.rb +6 -2
- data/lib/zold/version.rb +1 -1
- data/test/commands/test_pay.rb +19 -0
- metadata +9 -3
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 6ac37397e5ff256409bed9549fa390687d9948ece326adb44df42e4e56663341
|
|
4
|
+
data.tar.gz: 7783a1cb0a6ca7c98262f233980de0ecf77d2b5fb97a8f5f187c7a62f7be559e
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 34f7840aca58aa3f88b851df2da34de671d47028168e5bf3b2999fefc0c0cf8136d449ea93861f1e95444cb91a8d465a1c3708522395f1014037640d266b59c3
|
|
7
|
+
data.tar.gz: a3a6af3bb00938418bacb448f0de1a7e8ab91574a93779608ce57640947174a474ee4f4fef9fa999eb891e72ca61df1b76bc1ca8340f4632599455821121aa3b
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
test
|
|
2
|
+
1
|
|
3
|
+
0000000000000000
|
|
4
|
+
MIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAnppnkzrCreiKaHF09XKS6bO+2274+wSGo+F8KHvVrNbqear/e09r9PB/P6bFdLoMh4Xc7p/7+NSEZLeu2Eg/dBkQLEb8M/zgkT4gBDGyETW/zusYHIznX/lgf0f8qleIQIIB/3Y7QpDztkamWYTKWlnmlrcQvCVB0uRRPm4ZMcMJouKR9n7E2DpL9eolKyOwr/JY08iJOuK3HuW6tRdvE+0x7I+wDprM65OH/PoArlfO5qnIGbeXwsEGRXt0w6a/ubPpeadFjPXotE7cT1SA4YSD1tWTIVm1ZWppOE967XoDIum6tzt5KfzDNRfs9GbCfO0BL235HxbO8I9rTlVLTKcNAiEe0CWolY9HR5pMaosOgZ6PB54InJEZJs4L2b10c+IlVUX1RSnwfFYg0vy5oqrYyqt7gnipl/06YW4PKIYc7TljogsEHf9Cz/kpEKzqDtsH2LrmjMNsbWiousvNHM+MPgcuMg8ZnwLKwDy9NWdI4XLTpg6hVRJNH9erZdfAO5tg/3ub3JLeJbyNo4Bd5f/Bnr5YN/9ahZ87kSpI7v0Qk94dR4hDPjstEcghyZ9RVUoN52+h1g83cd3cIqksJd0kifMCoBmObD013RSPQqNwr9GGU2JaJEm25Vq35dy2DHAkOQpUZVT8GNg9IM4qUDV0yagTN3bZyvuLWIgufb0CAwEAAQ==
|
|
5
|
+
|
|
6
|
+
0001;2018-06-22T07:38:23Z;fffffe0000000000;g6hVRJNH;0123456789abcdef;To help you;IFQvo0PN3JkpkuZRjPyQ6BywuM9aSRFI6GdNOevSQxWJMwSesYp6b25KIi78TcIV9b84f0Qr96d8TgvkTjLqczvZZzyYIJ+e2w8qQhbxSiCgFxfThm6U8NnrXNprMBRHg4amV40dAjgW2lfVDDRk+RtCYEUEZDX5xPhiCHC8lhtoJm/atgJfgOIAfeLTy6ZWwC+teMtHUt6/uHH9z9giYnWHLBpYFyjYSSlrf4K/0e86Kzy/8Bwmk9Q/I6Yvo7IWL7TNN5vCGiz74R2wUTHVfmlY/YdXD15JnPmmZGjoR+BCjxbpjPqYWGm2bTxSuDHCFg0oTKAHIPqC57hKzGQUNzmoSqMHxTBDTvdLHjf0Uo9oaWhdT+BTpnGzFJxgz7d9oJOsIFqrLzPZ6VjOqKtl+ptbFkrjpq9ZdfpbzzBxHhLU8quxmBihodxBZAI6f2rpDGgnwS/D2v+Ncdcmqpdin1GkU0lAeAzWhenKBqu2t9C5UeZbjw6diiKyrGPHWLS9X9BGX9j6STMyI93f81Y6+j798gqv+XZtsohxL/sHDNJK0m81S6QWnAD//bZbNqW85y8ZMFwHmn3GXsSDupaQGpe6wpvFknWxho4vM8A/nAk20rWur5PF1S4RpFwpOr/4RmBA06yWnPxdB6x9lonPKmYC5Pck0fwxXDOEcjMTdWo=
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
test
|
|
2
|
+
1
|
|
3
|
+
0123456789abcdef
|
|
4
|
+
MIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAnppnkzrCreiKaHF09XKS6bO+2274+wSGo+F8KHvVrNbqear/e09r9PB/P6bFdLoMh4Xc7p/7+NSEZLeu2Eg/dBkQLEb8M/zgkT4gBDGyETW/zusYHIznX/lgf0f8qleIQIIB/3Y7QpDztkamWYTKWlnmlrcQvCVB0uRRPm4ZMcMJouKR9n7E2DpL9eolKyOwr/JY08iJOuK3HuW6tRdvE+0x7I+wDprM65OH/PoArlfO5qnIGbeXwsEGRXt0w6a/ubPpeadFjPXotE7cT1SA4YSD1tWTIVm1ZWppOE967XoDIum6tzt5KfzDNRfs9GbCfO0BL235HxbO8I9rTlVLTKcNAiEe0CWolY9HR5pMaosOgZ6PB54InJEZJs4L2b10c+IlVUX1RSnwfFYg0vy5oqrYyqt7gnipl/06YW4PKIYc7TljogsEHf9Cz/kpEKzqDtsH2LrmjMNsbWiousvNHM+MPgcuMg8ZnwLKwDy9NWdI4XLTpg6hVRJNH9erZdfAO5tg/3ub3JLeJbyNo4Bd5f/Bnr5YN/9ahZ87kSpI7v0Qk94dR4hDPjstEcghyZ9RVUoN52+h1g83cd3cIqksJd0kifMCoBmObD013RSPQqNwr9GGU2JaJEm25Vq35dy2DHAkOQpUZVT8GNg9IM4qUDV0yagTN3bZyvuLWIgufb0CAwEAAQ==
|
|
5
|
+
|
|
6
|
+
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
# Copyright (c) 2018-2019 Zerocracy, Inc.
|
|
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_relative 'asserts.rb'
|
|
24
|
+
wallet = Zold::Wallet.new('0123456789abcdef.z')
|
|
25
|
+
assert_equal(Zold::Amount.new(zld: 496.0), wallet.balance)
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
test
|
|
2
|
+
1
|
|
3
|
+
0123456789abcdef
|
|
4
|
+
MIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAnppnkzrCreiKaHF09XKS6bO+2274+wSGo+F8KHvVrNbqear/e09r9PB/P6bFdLoMh4Xc7p/7+NSEZLeu2Eg/dBkQLEb8M/zgkT4gBDGyETW/zusYHIznX/lgf0f8qleIQIIB/3Y7QpDztkamWYTKWlnmlrcQvCVB0uRRPm4ZMcMJouKR9n7E2DpL9eolKyOwr/JY08iJOuK3HuW6tRdvE+0x7I+wDprM65OH/PoArlfO5qnIGbeXwsEGRXt0w6a/ubPpeadFjPXotE7cT1SA4YSD1tWTIVm1ZWppOE967XoDIum6tzt5KfzDNRfs9GbCfO0BL235HxbO8I9rTlVLTKcNAiEe0CWolY9HR5pMaosOgZ6PB54InJEZJs4L2b10c+IlVUX1RSnwfFYg0vy5oqrYyqt7gnipl/06YW4PKIYc7TljogsEHf9Cz/kpEKzqDtsH2LrmjMNsbWiousvNHM+MPgcuMg8ZnwLKwDy9NWdI4XLTpg6hVRJNH9erZdfAO5tg/3ub3JLeJbyNo4Bd5f/Bnr5YN/9ahZ87kSpI7v0Qk94dR4hDPjstEcghyZ9RVUoN52+h1g83cd3cIqksJd0kifMCoBmObD013RSPQqNwr9GGU2JaJEm25Vq35dy2DHAkOQpUZVT8GNg9IM4qUDV0yagTN3bZyvuLWIgufb0CAwEAAQ==
|
|
5
|
+
|
|
6
|
+
0001;2018-06-22T07:38:23Z;0000020000000000;g6hVRJNH;0000000000000000;To help you;
|
|
7
|
+
0001;2018-06-22T07:38:23Z;0000020000000000;g6hVRJNH;0000000000000001;From a missing wallet;
|
|
8
|
+
0001;2018-06-22T08:26:19Z;fffffff000000000;TESTPREFIX;ffffffffffffffff;For pizza;L1MFiKqM8O6Eg/v54TD7M48gI/oq7iYYmjM7cKgUpMUk7dx48K+9DRQ2as+d2SrMMH/TKdJ/It8v8DJN6RV3kVtpdZo7CsUrUisive5rpJduO68+nJFr3TB3vQrCPm8N3Cz9vfmM68WrmskPHOABETyIC9cSQrSIvaCWhchwru7sO0625y2aYiMVoW2jmKFTtflGr6M9n7rqTkaYG/EftrNMrJS7PaG19T1HOQupAcKQ4DzBujEnbm3KQQc9Rp5GR8cb49Y38IAr9lENkDB1zmMaVJeZNEyX0ne6S1ZB7Ys9L0jUIJA+SRzNHDEdWC6lcOifcCuanU4kBPFtOiuAjghJX09l8Ue1pyE478+Sy8BgApqKu1l4+p+qUSXOTx7yKwT9ahZaA9DgVHEinz6MqhiozDddw24fXRK956pQ+jUPzNJXVeH4UrDcUDAaCIX8jCaaqGQUqhJXH2KF0Z1PtWBfHYB7OxXEpiVVtScMQ+68iB40p71f7j4YrVW50G89NrCJbOamdai+3dmwiIZzSOsSahB8kXrkaF+lrDZiwNPfL2ixs3F2xW34aKHvA/UCCo7PVfUVDLC8VHiDtAKTSyoqhPP4ocomszfRaRGxSjDIh3ceCrPH9BIW2zfUzkU63+dJ5adS+XSXzO3L3gfwiLM6XPr2jlJbPy1OSMkDK7s=
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
1,0.0.0.0,4096,10,NOW,M
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
--verbose
|
data/lib/zold/commands/fetch.rb
CHANGED
|
@@ -109,7 +109,10 @@ Available options:"
|
|
|
109
109
|
private
|
|
110
110
|
|
|
111
111
|
def fetch(id, cps, opts)
|
|
112
|
-
|
|
112
|
+
if @remotes.all.empty?
|
|
113
|
+
return if opts['quiet-if-absent']
|
|
114
|
+
raise "There are no remote nodes, run 'zold remote reset'"
|
|
115
|
+
end
|
|
113
116
|
start = Time.now
|
|
114
117
|
total = Concurrent::AtomicFixnum.new
|
|
115
118
|
nodes = Concurrent::AtomicFixnum.new
|
|
@@ -190,7 +193,7 @@ as copy ##{copy}/#{cps.all.count} in #{Age.new(start, limit: 4)}: \
|
|
|
190
193
|
begin
|
|
191
194
|
uri = "/wallet/#{id}"
|
|
192
195
|
head = r.http(uri).get
|
|
193
|
-
raise "The wallet #{id} doesn't exist at #{r}" if head.status == 404
|
|
196
|
+
raise Fetch::Error, "The wallet #{id} doesn't exist at #{r}" if head.status == 404
|
|
194
197
|
r.assert_code(200, head)
|
|
195
198
|
json = JsonPage.new(head.body, uri).to_hash
|
|
196
199
|
score = Score.parse_json(json['score'])
|
|
@@ -198,7 +201,7 @@ as copy ##{copy}/#{cps.all.count} in #{Age.new(start, limit: 4)}: \
|
|
|
198
201
|
rescue JsonPage::CantParse, Score::CantParse, RemoteNode::CantAssert => e
|
|
199
202
|
attempt += 1
|
|
200
203
|
if attempt < opts['retry']
|
|
201
|
-
@log.
|
|
204
|
+
@log.debug("#{r} failed to fetch #{id}, trying again (attempt no.#{attempt}): #{e.message}")
|
|
202
205
|
retry
|
|
203
206
|
end
|
|
204
207
|
raise e
|
data/lib/zold/commands/merge.rb
CHANGED
|
@@ -59,6 +59,9 @@ Available options:"
|
|
|
59
59
|
o.bool '--skip-legacy',
|
|
60
60
|
'Don\'t make legacy transactions (older than 24 hours) immutable',
|
|
61
61
|
default: false
|
|
62
|
+
o.bool '--quiet-if-absent',
|
|
63
|
+
'Don\'t fail if the wallet is absent',
|
|
64
|
+
default: false
|
|
62
65
|
o.bool '--shallow',
|
|
63
66
|
'Don\'t try to pull other wallets if their confirmations are required',
|
|
64
67
|
default: false
|
|
@@ -116,7 +119,10 @@ Available options:"
|
|
|
116
119
|
@log.debug("Local copy of #{id} is absent, nothing to merge")
|
|
117
120
|
end
|
|
118
121
|
end
|
|
119
|
-
|
|
122
|
+
if patch.empty?
|
|
123
|
+
return if opts['quiet-if-absent']
|
|
124
|
+
raise "There are no copies of #{id}, nothing to merge"
|
|
125
|
+
end
|
|
120
126
|
modified = @wallets.acq(id, exclusive: true) { |w| patch.save(w.path, overwrite: true) }
|
|
121
127
|
if modified
|
|
122
128
|
@log.info("#{cps.count} copies with the total score of #{score} successfully merged \
|
|
@@ -138,7 +144,7 @@ into #{@wallets.acq(id, &:mnemo)} in #{Age.new(start, limit: 0.1 + cps.count * 0
|
|
|
138
144
|
else
|
|
139
145
|
patch.join(wallet, ledger: opts['ledger']) do |txn|
|
|
140
146
|
Pull.new(wallets: @wallets, remotes: @remotes, copies: @copies, log: @log).run(
|
|
141
|
-
['pull', txn.bnf.to_s, "--network=#{opts['network']}", '--shallow']
|
|
147
|
+
['pull', txn.bnf.to_s, "--network=#{opts['network']}", '--shallow', '--quiet-if-absent']
|
|
142
148
|
)
|
|
143
149
|
true
|
|
144
150
|
end
|
data/lib/zold/commands/pay.rb
CHANGED
|
@@ -66,6 +66,9 @@ Available options:"
|
|
|
66
66
|
o.string '--time',
|
|
67
67
|
"Time of transaction (default: #{Time.now.utc.iso8601})",
|
|
68
68
|
default: Time.now.utc.iso8601
|
|
69
|
+
o.string '--keygap',
|
|
70
|
+
'Keygap, if the private RSA key is not complete',
|
|
71
|
+
default: ''
|
|
69
72
|
o.bool '--tolerate-edges',
|
|
70
73
|
'Don\'t fail if only "edge" (not "master" ones) nodes have the wallet',
|
|
71
74
|
default: false
|
|
@@ -120,7 +123,7 @@ Available options:"
|
|
|
120
123
|
return unless debt
|
|
121
124
|
require_relative 'taxes'
|
|
122
125
|
Taxes.new(wallets: @wallets, remotes: @remotes, log: @log).run(
|
|
123
|
-
['taxes', 'pay', "--private-key=#{opts['private-key']}", id.to_s]
|
|
126
|
+
['taxes', 'pay', "--private-key=#{opts['private-key']}", id.to_s, "--keygap=#{opts['keygap']}"]
|
|
124
127
|
)
|
|
125
128
|
end
|
|
126
129
|
|
|
@@ -133,7 +136,12 @@ Available options:"
|
|
|
133
136
|
the difference is #{(amount - from.balance).to_i} zents"
|
|
134
137
|
end
|
|
135
138
|
end
|
|
136
|
-
|
|
139
|
+
pem = IO.read(opts['private-key'])
|
|
140
|
+
unless opts['keygap'].empty?
|
|
141
|
+
pem = pem.sub('*' * opts['keygap'].length, opts['keygap'])
|
|
142
|
+
@log.debug("Keygap \"#{'*' * opts['keygap'].length}\" injected into the RSA private key")
|
|
143
|
+
end
|
|
144
|
+
key = Zold::Key.new(text: pem)
|
|
137
145
|
txn = from.sub(amount, invoice, key, details, time: Txn.parse_time(opts['time']))
|
|
138
146
|
@log.debug("#{amount} sent from #{from} to #{txn.bnf}: #{details}")
|
|
139
147
|
@log.debug("Don't forget to do 'zold push #{from}'")
|
data/lib/zold/commands/taxes.rb
CHANGED
|
@@ -78,6 +78,9 @@ Available options:"
|
|
|
78
78
|
o.bool '--ignore-score-weakness',
|
|
79
79
|
'Don\'t complain when their score is too weak',
|
|
80
80
|
default: false
|
|
81
|
+
o.string '--keygap',
|
|
82
|
+
'Keygap, if the private RSA key is not complete',
|
|
83
|
+
default: ''
|
|
81
84
|
o.bool '--ignore-nodes-absence',
|
|
82
85
|
'Don\'t complain if there are not enough nodes in the network to pay taxes',
|
|
83
86
|
default: false
|
|
@@ -145,7 +148,12 @@ the balance is #{wallet.balance}: #{tax.to_text}")
|
|
|
145
148
|
@log.debug("The score has already been taxed: #{best}")
|
|
146
149
|
next
|
|
147
150
|
end
|
|
148
|
-
|
|
151
|
+
pem = IO.read(opts['private-key'])
|
|
152
|
+
unless opts['keygap'].empty?
|
|
153
|
+
pem = pem.sub('*' * opts['keygap'].length, opts['keygap'])
|
|
154
|
+
@log.debug("Keygap \"#{'*' * opts['keygap'].length}\" injected into the RSA private key")
|
|
155
|
+
end
|
|
156
|
+
txn = tax.pay(Zold::Key.new(text: pem), best)
|
|
149
157
|
debt += txn.amount
|
|
150
158
|
paid += 1
|
|
151
159
|
@log.info("#{txn.amount * -1} of taxes paid from #{wallet.id} to #{txn.bnf} \
|
data/lib/zold/patch.rb
CHANGED
|
@@ -83,8 +83,11 @@ module Zold
|
|
|
83
83
|
@log.error("Wallet ID mismatch, ours is #{@id}, theirs is #{wallet.id}")
|
|
84
84
|
return
|
|
85
85
|
end
|
|
86
|
+
seen = 0
|
|
87
|
+
added = 0
|
|
86
88
|
wallet.txns.each do |txn|
|
|
87
89
|
next if @txns.find { |t| t == txn }
|
|
90
|
+
seen += 1
|
|
88
91
|
if txn.amount.negative?
|
|
89
92
|
dup = @txns.find { |t| t.id == txn.id && t.amount.negative? }
|
|
90
93
|
if dup
|
|
@@ -129,6 +132,7 @@ doesn't have this transaction: \"#{txn.to_text}\"")
|
|
|
129
132
|
end
|
|
130
133
|
end
|
|
131
134
|
@txns << txn
|
|
135
|
+
added += 1
|
|
132
136
|
if txn.amount.negative?
|
|
133
137
|
File.open(ledger, 'a') do |f|
|
|
134
138
|
f.puts(
|
|
@@ -147,6 +151,7 @@ doesn't have this transaction: \"#{txn.to_text}\"")
|
|
|
147
151
|
end
|
|
148
152
|
@log.debug("Merged on top, balance is #{@txns.map(&:amount).inject(&:+)}: #{txn.to_text}")
|
|
149
153
|
end
|
|
154
|
+
@log.debug("#{seen} new txns arrived from #{wallet.mnemo}, #{added} of them added to the patch")
|
|
150
155
|
end
|
|
151
156
|
|
|
152
157
|
def empty?
|
data/lib/zold/remotes.rb
CHANGED
|
@@ -215,8 +215,12 @@ at #{response.headers['X-Zold-Path']}"
|
|
|
215
215
|
unerror(r[:host], r[:port]) if node.touched
|
|
216
216
|
rescue StandardError => e
|
|
217
217
|
error(r[:host], r[:port])
|
|
218
|
-
|
|
219
|
-
|
|
218
|
+
if e.is_a?(RemoteNode::CantAssert) || e.is_a?(Fetch::Error)
|
|
219
|
+
log.debug("#{Rainbow(node).red}: \"#{e.message.strip}\" in #{Age.new(start)}")
|
|
220
|
+
else
|
|
221
|
+
log.info("#{Rainbow(node).red}: \"#{e.message.strip}\" in #{Age.new(start)}")
|
|
222
|
+
log.debug(Backtrace.new(e).to_s)
|
|
223
|
+
end
|
|
220
224
|
remove(r[:host], r[:port]) if r[:errors] > TOLERANCE
|
|
221
225
|
end
|
|
222
226
|
end
|
data/lib/zold/version.rb
CHANGED
data/test/commands/test_pay.rb
CHANGED
|
@@ -82,6 +82,25 @@ class TestPay < Zold::Test
|
|
|
82
82
|
end
|
|
83
83
|
end
|
|
84
84
|
|
|
85
|
+
def test_pay_with_keygap
|
|
86
|
+
FakeHome.new(log: test_log).run do |home|
|
|
87
|
+
wallet = home.create_wallet
|
|
88
|
+
amount = Zold::Amount.new(zld: 2.0)
|
|
89
|
+
Tempfile.open do |f|
|
|
90
|
+
pem = IO.read('fixtures/id_rsa')
|
|
91
|
+
keygap = pem[100..120]
|
|
92
|
+
IO.write(f, pem.gsub(keygap, '*' * keygap.length))
|
|
93
|
+
Zold::Pay.new(wallets: home.wallets, copies: home.dir, remotes: home.remotes, log: test_log).run(
|
|
94
|
+
[
|
|
95
|
+
'pay', '--force', "--private-key=#{f.path}", "--keygap=#{keygap}",
|
|
96
|
+
wallet.id.to_s, 'NOPREFIX@dddd0000dddd0000', amount.to_zld, '-'
|
|
97
|
+
]
|
|
98
|
+
)
|
|
99
|
+
end
|
|
100
|
+
assert_equal(amount * -1, wallet.balance)
|
|
101
|
+
end
|
|
102
|
+
end
|
|
103
|
+
|
|
85
104
|
def test_pay_in_many_threads
|
|
86
105
|
FakeHome.new(log: test_log).run do |home|
|
|
87
106
|
wallet = home.create_wallet
|
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.26.
|
|
4
|
+
version: 0.26.8
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Yegor Bugayenko
|
|
8
8
|
autorequire:
|
|
9
9
|
bindir: bin
|
|
10
10
|
cert_chain: []
|
|
11
|
-
date: 2019-03-
|
|
11
|
+
date: 2019-03-08 00:00:00.000000000 Z
|
|
12
12
|
dependencies:
|
|
13
13
|
- !ruby/object:Gem::Dependency
|
|
14
14
|
name: backtrace
|
|
@@ -580,6 +580,12 @@ files:
|
|
|
580
580
|
- fixtures/merge/legacy_negatives_stay/copies/0123456789abcdef/1.zc
|
|
581
581
|
- fixtures/merge/legacy_negatives_stay/copies/0123456789abcdef/scores.zc
|
|
582
582
|
- fixtures/merge/legacy_negatives_stay/opts
|
|
583
|
+
- fixtures/merge/missed_wallets/0000000000000000.z
|
|
584
|
+
- fixtures/merge/missed_wallets/0123456789abcdef.z
|
|
585
|
+
- fixtures/merge/missed_wallets/assert.rb
|
|
586
|
+
- fixtures/merge/missed_wallets/copies/0123456789abcdef/1.zc
|
|
587
|
+
- fixtures/merge/missed_wallets/copies/0123456789abcdef/scores.zc
|
|
588
|
+
- fixtures/merge/missed_wallets/opts
|
|
583
589
|
- fixtures/merge/random_expenses/0000000000000000.z
|
|
584
590
|
- fixtures/merge/random_expenses/0123456789abcdef.z
|
|
585
591
|
- fixtures/merge/random_expenses/assert.rb
|
|
@@ -764,7 +770,7 @@ licenses:
|
|
|
764
770
|
- MIT
|
|
765
771
|
metadata: {}
|
|
766
772
|
post_install_message: |-
|
|
767
|
-
Thanks for installing Zold 0.26.
|
|
773
|
+
Thanks for installing Zold 0.26.8!
|
|
768
774
|
Study our White Paper: https://papers.zold.io/wp.pdf
|
|
769
775
|
Read our blog posts: https://blog.zold.io
|
|
770
776
|
Try ZLD online wallet at: https://wts.zold.io
|