zold 0.13.10 → 0.13.11

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
  SHA1:
3
- metadata.gz: 38c2642514a0b37287ede3586753488614dcfe42
4
- data.tar.gz: f05390379244ccc99dc1954518ba049645f8d125
3
+ metadata.gz: 9c81c7772e47855ebd6af3e85ea2f182c509ba60
4
+ data.tar.gz: 9ca2681e2924bec9f15b151c983607a1b6371c09
5
5
  SHA512:
6
- metadata.gz: ed304d194952468d46e5a2c903c76219d179c988d1bb47c99705c6faf249c1781d326eb561e14a80118309cde2878f7e5f2631fd6b4e23fedf63db4749585a71
7
- data.tar.gz: 57a78853dd1b5e7302022fbc3574e69dcd48b97abdd0938bce00f8b93cd872df0f6c731f6b3a2b32689f13ae63ad7972ffd1e9e683daac6988b88d693e649790
6
+ metadata.gz: be840135594a5a105bf2a14a7ea46651f69ab500217e78414c90f4db5b9b2d96078227cf4f7d0d0e636f6ed7bffbd40a3cd1807bc02e4c065ef68348214e1ef0
7
+ data.tar.gz: 253ef4deebb11727c2bacc5ec92e22efb2ff92fc44b42a5c3a37a8e85e39ec4aac9616a4570f5323225be9f96100e018c2d901d318fcd3dbb6fb1d810af87e7c
data/.rultor.yml CHANGED
@@ -9,10 +9,10 @@ install: |
9
9
  release:
10
10
  script: |-
11
11
  [[ "${tag}" =~ ^[0-9]+\.[0-9]+\.[0-9]+$ ]] || exit -1
12
- bundle install
13
- rake
14
12
  rm -rf *.gem
15
13
  sed -i "s/0\.0\.0/${tag}/g" lib/zold/version.rb
14
+ bundle install
15
+ rake
16
16
  git add lib/zold/version.rb
17
17
  git commit -m "version set to ${tag}"
18
18
  gem build zold.gemspec
data/INSTALL.md CHANGED
@@ -10,6 +10,10 @@ install [Ruby 2.3+](https://www.ruby-lang.org/en/documentation/installation/),
10
10
  [Rubygems](https://rubygems.org/pages/download), and
11
11
  then the [gem](https://rubygems.org/gems/zold).
12
12
 
13
+ We recommend to host nodes at
14
+ [AWS](https://aws.amazon.com/) or
15
+ [DigitalOcean](https://www.digitalocean.com/).
16
+
13
17
  ## Debian 9.4
14
18
 
15
19
  ```bash
@@ -28,9 +32,9 @@ $ gem install --no-ri --no-rdoc zold
28
32
 
29
33
  ## OSX
30
34
 
31
- With homebrew:
35
+ With [Homebrew](https://brew.sh/) (recommended):
32
36
 
33
- ```
37
+ ```bash
34
38
  $ brew install rbenv ruby-build
35
39
  $ rbenv install 2.5.1
36
40
  $ rbenv global 2.5.1
@@ -40,23 +44,32 @@ $ gem install --no-ri --no-rdoc zold
40
44
 
41
45
  Without homebrew:
42
46
 
43
- ... no idea ...
47
+ ... please contribute ...
44
48
 
45
49
  ## Windows
46
50
 
47
51
  ... please contribute ...
48
52
 
49
- ## CentOS
53
+ ## CentOS 7.5
50
54
 
51
- ... please contribute ...
55
+ As a `root` user:
56
+
57
+ ```bash
58
+ $ sudo yum install zlib-devel gcc gcc-c++ ruby-devel rubygems ruby
59
+ $ gpg --keyserver hkp://keys.gnupg.net --recv-keys 409B6B1796C275462A1703113804BB82D39DC0E3 7D2BAF1CF37B13E2069D6956105BD0E739499BDB
60
+ $ curl -sSL https://get.rvm.io | bash -s stable
61
+ $ source /etc/profile.d/rvm.sh
62
+ $ rvm install 2.5.1
63
+ $ gem install --no-ri --no-rdoc zold
64
+ ```
52
65
 
53
66
  ## Amazon Linux (AWS EC2 default image)
54
67
 
55
68
  ```
56
- sudo yum install zlib-devel gcc gcc-c++ ruby-devel rubygems ruby
57
- gpg --keyserver hkp://keys.gnupg.net --recv-keys 409B6B1796C275462A1703113804BB82D39DC0E3 7D2BAF1CF37B13E2069D6956105BD0E739499BDB
58
- curl -sSL https://get.rvm.io | bash -s stable
59
- source $HOME/.rvm/scripts/rvm
60
- rvm install 2.5.1
61
- gem install zold
69
+ $ sudo yum install zlib-devel gcc gcc-c++ ruby-devel rubygems ruby
70
+ $ gpg --keyserver hkp://keys.gnupg.net --recv-keys 409B6B1796C275462A1703113804BB82D39DC0E3 7D2BAF1CF37B13E2069D6956105BD0E739499BDB
71
+ $ curl -sSL https://get.rvm.io | bash -s stable
72
+ $ source $HOME/.rvm/scripts/rvm
73
+ $ rvm install 2.5.1
74
+ $ gem install --no-ri --no-rdoc zold
62
75
  ```
@@ -57,7 +57,7 @@ Available options:"
57
57
  o.bool '--dont-pay-taxes',
58
58
  'Don\'t pay taxes even if the wallet is in debt',
59
59
  default: false
60
- o.bool '--dont-propagate',
60
+ o.bool '--skip-propagate',
61
61
  'Don\'t propagate the paying wallet after successful pay',
62
62
  default: false
63
63
  o.bool '--help', 'Print instructions'
@@ -82,11 +82,10 @@ Available options:"
82
82
  ['taxes', "--private-key=#{opts['private-key']}", id.to_s]
83
83
  )
84
84
  end
85
- unless opts['dont-propagate']
86
- require_relative 'propagate'
87
- Propagate.new(wallets: @wallets, log: @log).run(['propagate', id.to_s])
88
- end
89
85
  pay(from, invoice, amount, details, opts)
86
+ return if opts['skip-propagate']
87
+ require_relative 'propagate'
88
+ Propagate.new(wallets: @wallets, log: @log).run(['propagate', from.id.to_s])
90
89
  end
91
90
 
92
91
  private
@@ -218,11 +218,6 @@ it's recommended to reboot, but I don't do it because of --never-reboot")
218
218
 
219
219
  def terminate
220
220
  @log.info("All threads before exit: #{Thread.list.map { |t| "#{t.name}/#{t.status}" }.join(', ')}")
221
- Kernel.at_exit do
222
- @log.info("About to terminate #{Thread.list.count} threads...")
223
- Thread.each(&:exit)
224
- @log.info("#{Thread.list.count} threads terminated")
225
- end
226
221
  Kernel.exit(0)
227
222
  end
228
223
  end
@@ -47,17 +47,18 @@ module Zold
47
47
  raise '--bonus-wallet is required to pay bonuses' unless @opts['bonus-wallet']
48
48
  raise '--bonus-amount is required to pay bonuses' unless @opts['bonus-amount']
49
49
  winners = Remote.new(remotes: @remotes, log: @log, farm: @farm).run(
50
- ['remote', 'elect', @opts['bonus-wallet'], '--private-key', @opts['private-key']]
50
+ ['remote', 'elect', @opts['bonus-wallet'], '--private-key', @opts['private-key']] +
51
+ (@opts['ignore-score-weakness'] ? ['--ignore-score-weakness'] : [])
51
52
  )
52
53
  return if winners.empty?
53
54
  winners.each do |score|
54
55
  Pull.new(wallets: @wallets, remotes: @remotes, copies: @copies, log: @log).run(
55
- ['pull', opts['bonus-wallet']]
56
+ ['pull', @opts['bonus-wallet']]
56
57
  )
57
58
  Pay.new(wallets: @wallets, remotes: @remotes, log: @log).run(
58
59
  [
59
- 'pay', @opts['bonus-wallet'], score.invoice, @opts['bonus-amount'],
60
- "Hosting bonus for #{score.host}:#{score.port} #{score.value}",
60
+ 'pay', @opts['bonus-wallet'], score.invoice, @opts['bonus-amount'].to_s,
61
+ "Hosting bonus for #{score.host} #{score.port} #{score.value}",
61
62
  '--private-key', @opts['private-key']
62
63
  ]
63
64
  )
@@ -129,7 +129,7 @@ module Zold
129
129
  remotes: settings.remotes.all.count,
130
130
  farm: settings.farm.to_json,
131
131
  entrance: settings.entrance.to_json,
132
- date: `date --iso-8601=seconds -u`.strip,
132
+ date: Time.now.utc.iso8601,
133
133
  hours_alive: ((Time.now - settings.start) / (60 * 60)).round(2),
134
134
  home: 'https://www.zold.io'
135
135
  )
data/lib/zold/score.rb CHANGED
@@ -138,6 +138,8 @@ module Zold
138
138
  suffixes: @suffixes,
139
139
  strength: @strength,
140
140
  hash: value.zero? ? nil : hash,
141
+ expired: expired?,
142
+ valid: valid?,
141
143
  minutes: ((Time.now - @time) / 60).to_i
142
144
  }
143
145
  end
@@ -159,6 +161,7 @@ module Zold
159
161
  strength: @strength
160
162
  )
161
163
  return score if score.valid?
164
+ return Score.new(Time.now, @host, @port, @invoice, [], strength: @strength) if score.expired?
162
165
  idx += 1
163
166
  end
164
167
  end
data/lib/zold/version.rb CHANGED
@@ -23,5 +23,5 @@
23
23
  # Copyright:: Copyright (c) 2018 Yegor Bugayenko
24
24
  # License:: MIT
25
25
  module Zold
26
- VERSION = '0.13.10'.freeze
26
+ VERSION = '0.13.11'.freeze
27
27
  end
@@ -19,9 +19,13 @@
19
19
  # SOFTWARE.
20
20
 
21
21
  require 'minitest/autorun'
22
+ require 'webmock/minitest'
22
23
  require_relative '../../test__helper'
23
24
  require_relative '../../fake_home'
25
+ require_relative '../../node/fake_node'
24
26
  require_relative '../../../lib/zold/node/farm.rb'
27
+ require_relative '../../../lib/zold/commands/push'
28
+ require_relative '../../../lib/zold/commands/pay'
25
29
  require_relative '../../../lib/zold/commands/routines/bonuses.rb'
26
30
 
27
31
  # Bonuses test.
@@ -30,19 +34,38 @@ require_relative '../../../lib/zold/commands/routines/bonuses.rb'
30
34
  # License:: MIT
31
35
  class TestBonuses < Minitest::Test
32
36
  def test_pays_bonuses
33
- FakeHome.new.run do |home|
34
- wallet = home.create_wallet
35
- opts = {
36
- 'routine-immediately' => true,
37
- 'private-key' => 'fixtures/id_rsa',
38
- 'bonus-wallet' => wallet.id.to_s,
39
- 'bonus-amount' => 1
40
- }
41
- routine = Zold::Routines::Bonuses.new(
42
- opts, home.wallets, home.remotes, home.copies(wallet).root,
43
- Zold::Farm::Empty.new, log: test_log
44
- )
45
- routine.exec
37
+ FakeNode.new(log: test_log).run(['--ignore-score-weakness']) do |port|
38
+ FakeHome.new.run do |home|
39
+ bank = home.create_wallet
40
+ Zold::Pay.new(wallets: home.wallets, remotes: home.remotes, log: test_log).run(
41
+ ['pay', home.create_wallet.id.to_s, bank.id.to_s, '100', '--force', '--private-key=id_rsa']
42
+ )
43
+ assert_equal(Zold::Amount.new(zld: 100.0), bank.balance)
44
+ opts = {
45
+ 'ignore-score-weakness' => true,
46
+ 'routine-immediately' => true,
47
+ 'private-key' => 'id_rsa',
48
+ 'bonus-wallet' => bank.id.to_s,
49
+ 'bonus-amount' => 1
50
+ }
51
+ score = Zold::Score.new(Time.now, 'fake-node.local', 999, 'NOPREFIX@ffffffffffffffff', strength: 1)
52
+ 16.times { score = score.next }
53
+ remotes = home.remotes
54
+ remotes.add('localhost', port)
55
+ remotes.add(score.host, score.port)
56
+ stub_request(:get, "http://#{score.host}:#{score.port}/").to_return(
57
+ status: 200,
58
+ body: {
59
+ version: Zold::VERSION,
60
+ score: score.to_h
61
+ }.to_json
62
+ )
63
+ Zold::Routines::Bonuses.new(
64
+ opts, home.wallets, remotes, home.copies(bank).root,
65
+ Zold::Farm::Empty.new, log: test_log
66
+ ).exec
67
+ assert_equal(Zold::Amount.new(zld: 99.0), bank.balance)
68
+ end
46
69
  end
47
70
  end
48
71
  end
data/test/test_score.rb CHANGED
@@ -38,6 +38,17 @@ class TestScore < Minitest::Test
38
38
  assert_equal(64, score.hash.length)
39
39
  end
40
40
 
41
+ def test_drops_to_zero_when_expired
42
+ score = Zold::Score.new(
43
+ Time.now - 24 * 60 * 60,
44
+ 'some-host', 9999, 'NOPREFIX@ffffffffffffffff',
45
+ strength: 50
46
+ ).next
47
+ assert(score.valid?)
48
+ assert(!score.expired?)
49
+ assert_equal(0, score.value)
50
+ end
51
+
41
52
  def test_validates_wrong_score
42
53
  score = Zold::Score.new(
43
54
  Time.parse('2017-07-19T21:24:51Z'),
@@ -108,14 +119,6 @@ class TestScore < Minitest::Test
108
119
  assert(!score.expired?)
109
120
  end
110
121
 
111
- def test_expires_correctly
112
- score = Zold::Score.new(
113
- Time.now - 100 * 60 * 60, 'localhost', 443,
114
- 'NOPREFIX@ffffffffffffffff', strength: 2
115
- ).next.next.next
116
- assert(score.expired?)
117
- end
118
-
119
122
  def test_dont_expire_correctly
120
123
  score = Zold::Score.new(
121
124
  Time.now - 10 * 60 * 60, 'localhost', 443,
data/test/test_zold.rb CHANGED
@@ -22,6 +22,7 @@ require 'minitest/autorun'
22
22
  require 'tmpdir'
23
23
  require 'English'
24
24
  require_relative 'test__helper'
25
+ require_relative '../lib/zold/version'
25
26
 
26
27
  # Zold main module test.
27
28
  # Author:: Yegor Bugayenko (yegor256@gmail.com)
@@ -52,7 +53,7 @@ class TestZold < Minitest::Test
52
53
 
53
54
  def test_show_version
54
55
  stdout = exec('--version')
55
- assert(stdout.include?('0.0.0'))
56
+ assert(stdout.include?(Zold::VERSION))
56
57
  end
57
58
 
58
59
  def test_create_new_wallet
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.13.10
4
+ version: 0.13.11
5
5
  platform: ruby
6
6
  authors:
7
7
  - Yegor Bugayenko