zold 0.0.5 → 0.0.6
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/.rultor.yml +14 -1
- data/Gemfile +1 -0
- data/Procfile +1 -0
- data/bin/zold +6 -0
- data/deploy.sh +13 -0
- data/lib/zold/commands/pull.rb +9 -2
- data/lib/zold/commands/push.rb +10 -1
- data/lib/zold/node/front.rb +112 -0
- data/lib/zold/version.rb +1 -1
- data/lib/zold/wallet.rb +17 -7
- data/lib/zold/wallets.rb +4 -0
- data/test/node/test_front.rb +86 -0
- data/test/test_wallet.rb +2 -0
- data/test/test_wallets.rb +42 -0
- data/views/index.haml +6 -0
- data/views/layout.haml +26 -0
- data/views/not_found.haml +3 -0
- data/zold.gemspec +7 -5
- metadata +87 -49
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: e31ddf85f51ef24b3ca8bb69bab3142e78499d01
|
4
|
+
data.tar.gz: 2ad719e700e8a691bd56a9fad9558baaafcfe49f
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 0fef444d304c65a3af45b222fe6def9c74601e622a31e6dd772484d0ce1b1748068c84fc420448157186b32635000b79f0ea87f99735b79a78f6f09192d7baf1
|
7
|
+
data.tar.gz: 01e70165f45a89d4aa336410374d15d8da8ad560152f23d3dc8907547669cae09fe25928933d7197ada4fadb9596f47706e3486063e0e42131265d6a176e03f6
|
data/.rultor.yml
CHANGED
@@ -1,6 +1,7 @@
|
|
1
1
|
assets:
|
2
2
|
rubygems.yml: zerocracy/home#assets/rubygems.yml
|
3
|
-
|
3
|
+
id_rsa: zerocracy/home#assets/heroku-key
|
4
|
+
id_rsa.pub: zerocracy/home#assets/heroku-key.pub
|
4
5
|
install: |
|
5
6
|
sudo apt-get -y update
|
6
7
|
sudo gem install pdd
|
@@ -15,6 +16,18 @@ release:
|
|
15
16
|
gem build zold.gemspec
|
16
17
|
chmod 0600 ../rubygems.yml
|
17
18
|
gem push *.gem --config-file ../rubygems.yml
|
19
|
+
git remote add heroku git@heroku.com:zold.git
|
20
|
+
rm -rf ~/.ssh
|
21
|
+
mkdir ~/.ssh
|
22
|
+
mv ../id_rsa ../id_rsa.pub ~/.ssh
|
23
|
+
chmod -R 600 ~/.ssh/*
|
24
|
+
echo -e "Host *\n StrictHostKeyChecking no\n UserKnownHostsFile=/dev/null" > ~/.ssh/config
|
25
|
+
sed -i -s 's|Gemfile.lock||g' .gitignore
|
26
|
+
git add Gemfile.lock
|
27
|
+
git add .gitignore
|
28
|
+
git fetch
|
29
|
+
git commit -m 'ignores' && git push -f heroku $(git symbolic-ref --short HEAD):master && git reset HEAD~1
|
30
|
+
curl -f --connect-timeout 15 --retry 5 --retry-delay 30 http://b1.zold.io > /dev/null
|
18
31
|
commanders:
|
19
32
|
- yegor256
|
20
33
|
architect:
|
data/Gemfile
CHANGED
data/Procfile
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
web: LC_ALL=UTF-8 ./bin/zold node $PORT
|
data/bin/zold
CHANGED
@@ -38,6 +38,7 @@ require_relative '../lib/zold/commands/balance'
|
|
38
38
|
require_relative '../lib/zold/commands/check'
|
39
39
|
require_relative '../lib/zold/commands/pull'
|
40
40
|
require_relative '../lib/zold/commands/push'
|
41
|
+
require_relative '../lib/zold/node/front'
|
41
42
|
|
42
43
|
Encoding.default_external = Encoding::UTF_8
|
43
44
|
Encoding.default_internal = Encoding::UTF_8
|
@@ -60,6 +61,8 @@ Available commands:
|
|
60
61
|
Send ZOLD from one wallet to another
|
61
62
|
#{Rainbow('push').green} [id...]
|
62
63
|
Push all local wallets or the ones required
|
64
|
+
#{Rainbow('node').green} port
|
65
|
+
Run node at the given TCP port
|
63
66
|
Available options:"
|
64
67
|
o.string '-d', '--dir',
|
65
68
|
'The directory where wallets are stored (default: current directory)',
|
@@ -93,6 +96,9 @@ Available options:"
|
|
93
96
|
wallets = Zold::Wallets.new(opts['dir'])
|
94
97
|
|
95
98
|
case command
|
99
|
+
when 'node'
|
100
|
+
raise 'TCP port is required' if opts.arguments[1].nil?
|
101
|
+
Zold::Front.run!(port: opts.arguments[1].to_i)
|
96
102
|
when 'create'
|
97
103
|
Zold::Create.new(
|
98
104
|
wallets: wallets,
|
data/deploy.sh
ADDED
@@ -0,0 +1,13 @@
|
|
1
|
+
#!/bin/bash
|
2
|
+
set -e
|
3
|
+
|
4
|
+
cd $(dirname $0)
|
5
|
+
bundle update
|
6
|
+
rake
|
7
|
+
trap 'git reset HEAD~1 && git checkout -- .gitignore' EXIT
|
8
|
+
sed -i -s 's|Gemfile.lock||g' .gitignore
|
9
|
+
git add Gemfile.lock
|
10
|
+
git add .gitignore
|
11
|
+
git commit -m 'configs for heroku'
|
12
|
+
git push heroku master -f
|
13
|
+
|
data/lib/zold/commands/pull.rb
CHANGED
@@ -33,8 +33,15 @@ module Zold
|
|
33
33
|
end
|
34
34
|
|
35
35
|
def run
|
36
|
-
|
37
|
-
|
36
|
+
request = Net::HTTP::Get.new("/wallets/#{@wallet.id}")
|
37
|
+
response = Net::HTTP.new('b1.zold.io', 80).start do |http|
|
38
|
+
http.request(request)
|
39
|
+
end
|
40
|
+
unless response.code.to_i == 200
|
41
|
+
raise "Failed to pull from the the node, code=#{response.code}"
|
42
|
+
end
|
43
|
+
File.write(@wallet.path, response.body)
|
44
|
+
@log.info("The #{@wallet} pulled from the server")
|
38
45
|
@wallet
|
39
46
|
end
|
40
47
|
end
|
data/lib/zold/commands/push.rb
CHANGED
@@ -18,6 +18,7 @@
|
|
18
18
|
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
19
19
|
# SOFTWARE.
|
20
20
|
|
21
|
+
require 'net/http'
|
21
22
|
require_relative '../log.rb'
|
22
23
|
|
23
24
|
# PUSH command.
|
@@ -34,7 +35,15 @@ module Zold
|
|
34
35
|
|
35
36
|
def run
|
36
37
|
raise 'The wallet is absent' unless @wallet.exists?
|
37
|
-
|
38
|
+
request = Net::HTTP::Put.new("/wallets/#{@wallet.id}")
|
39
|
+
request.body = File.read(@wallet.path)
|
40
|
+
response = Net::HTTP.new('b1.zold.io', 80).start do |http|
|
41
|
+
http.request(request)
|
42
|
+
end
|
43
|
+
unless response.code.to_i == 200
|
44
|
+
raise "Failed to push to the node, code=#{response.code}"
|
45
|
+
end
|
46
|
+
@log.info("The #{@wallet.id} pushed to the server")
|
38
47
|
end
|
39
48
|
end
|
40
49
|
end
|
@@ -0,0 +1,112 @@
|
|
1
|
+
# Copyright (c) 2018 Zerocracy, Inc.
|
2
|
+
#
|
3
|
+
# Permission is hereby granted, free of charge, to any person obtaining a copy
|
4
|
+
# of this software and associated documentation files (the 'Software'), to deal
|
5
|
+
# in the Software without restriction, including without limitation the rights
|
6
|
+
# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
7
|
+
# copies of the Software, and to permit persons to whom the Software is
|
8
|
+
# furnished to do so, subject to the following conditions:
|
9
|
+
#
|
10
|
+
# The above copyright notice and this permission notice shall be included in all
|
11
|
+
# copies or substantial portions of the Software.
|
12
|
+
#
|
13
|
+
# THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
14
|
+
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
15
|
+
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFINGEMENT. IN NO EVENT SHALL THE
|
16
|
+
# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
17
|
+
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
18
|
+
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
19
|
+
# SOFTWARE.
|
20
|
+
|
21
|
+
STDOUT.sync = true
|
22
|
+
|
23
|
+
require 'haml'
|
24
|
+
require 'json'
|
25
|
+
require 'sinatra/base'
|
26
|
+
|
27
|
+
require_relative '../version'
|
28
|
+
require_relative '../wallet'
|
29
|
+
require_relative '../wallets'
|
30
|
+
require_relative '../id'
|
31
|
+
require_relative '../commands/check'
|
32
|
+
|
33
|
+
# The web front of the node.
|
34
|
+
# Author:: Yegor Bugayenko (yegor256@gmail.com)
|
35
|
+
# Copyright:: Copyright (c) 2018 Zerocracy, Inc.
|
36
|
+
# License:: MIT
|
37
|
+
module Zold
|
38
|
+
# Web front
|
39
|
+
class Front < Sinatra::Base
|
40
|
+
configure do
|
41
|
+
Haml::Options.defaults[:format] = :xhtml
|
42
|
+
set :lock, Mutex.new
|
43
|
+
set :views, (proc { File.join(root, '../../../views') })
|
44
|
+
set :show_exceptions, false
|
45
|
+
set :wallets, Wallets.new(Dir.mktmpdir('zold-', '/tmp'))
|
46
|
+
end
|
47
|
+
|
48
|
+
get '/' do
|
49
|
+
haml :index, layout: :layout, locals: {
|
50
|
+
title: 'zold',
|
51
|
+
total: settings.wallets.total
|
52
|
+
}
|
53
|
+
end
|
54
|
+
|
55
|
+
get '/robots.txt' do
|
56
|
+
'User-agent: *'
|
57
|
+
end
|
58
|
+
|
59
|
+
get '/version' do
|
60
|
+
VERSION
|
61
|
+
end
|
62
|
+
|
63
|
+
get %r{/wallets/(?<id>[a-f0-9]{16})/?} do
|
64
|
+
id = Id.new(params[:id])
|
65
|
+
wallet = settings.wallets.find(id)
|
66
|
+
error 404 unless wallet.exists?
|
67
|
+
File.read(wallet.path)
|
68
|
+
end
|
69
|
+
|
70
|
+
put %r{/wallets/(?<id>[a-f0-9]{16})/?} do
|
71
|
+
settings.lock.synchronize do
|
72
|
+
id = Id.new(params[:id])
|
73
|
+
wallet = settings.wallets.find(id)
|
74
|
+
temp = before = nil
|
75
|
+
if wallet.exists?
|
76
|
+
before = wallet.version
|
77
|
+
temp = Tempfile.new('z')
|
78
|
+
FileUtils.cp(wallet.path, temp)
|
79
|
+
end
|
80
|
+
begin
|
81
|
+
request.body.rewind
|
82
|
+
File.write(wallet.path, request.body.read)
|
83
|
+
unless before.nil?
|
84
|
+
after = wallet.version
|
85
|
+
error 403 if after < before
|
86
|
+
end
|
87
|
+
unless Check.new(wallet: wallet, wallets: settings.wallets).run
|
88
|
+
error 403
|
89
|
+
end
|
90
|
+
ensure
|
91
|
+
unless temp.nil?
|
92
|
+
FileUtils.cp(temp, wallet.path)
|
93
|
+
temp.unlink
|
94
|
+
end
|
95
|
+
end
|
96
|
+
end
|
97
|
+
end
|
98
|
+
|
99
|
+
not_found do
|
100
|
+
status 404
|
101
|
+
haml :not_found, layout: :layout, locals: {
|
102
|
+
title: 'Page not found'
|
103
|
+
}
|
104
|
+
end
|
105
|
+
|
106
|
+
error do
|
107
|
+
status 503
|
108
|
+
e = env['sinatra.error']
|
109
|
+
"#{e.message}\n\t#{e.backtrace.join("\n\t")}"
|
110
|
+
end
|
111
|
+
end
|
112
|
+
end
|
data/lib/zold/version.rb
CHANGED
data/lib/zold/wallet.rb
CHANGED
@@ -40,6 +40,10 @@ module Zold
|
|
40
40
|
File.exist?(@file)
|
41
41
|
end
|
42
42
|
|
43
|
+
def path
|
44
|
+
@file
|
45
|
+
end
|
46
|
+
|
43
47
|
def init(id, pubkey)
|
44
48
|
raise "File '#{@file}' already exists" if File.exist?(@file)
|
45
49
|
File.write(
|
@@ -56,6 +60,18 @@ module Zold
|
|
56
60
|
)
|
57
61
|
end
|
58
62
|
|
63
|
+
def version
|
64
|
+
xml = load
|
65
|
+
ver = 0
|
66
|
+
unless xml.xpath('/wallet/ledger[txn]').empty?
|
67
|
+
ver = xml.xpath('/wallet/ledger/txn/@id')
|
68
|
+
.map(&:to_s)
|
69
|
+
.map(&:to_i)
|
70
|
+
.max
|
71
|
+
end
|
72
|
+
ver
|
73
|
+
end
|
74
|
+
|
59
75
|
def id
|
60
76
|
load.xpath('/wallet/id/text()').to_s
|
61
77
|
end
|
@@ -71,14 +87,8 @@ module Zold
|
|
71
87
|
|
72
88
|
def sub(amount, target, pvtkey)
|
73
89
|
xml = load
|
74
|
-
txn = 1
|
75
|
-
unless xml.xpath('/wallet/ledger[txn]').empty?
|
76
|
-
txn = xml.xpath('/wallet/ledger/txn/@id')
|
77
|
-
.map(&:to_s)
|
78
|
-
.map(&:to_i)
|
79
|
-
.max + 1
|
80
|
-
end
|
81
90
|
date = Time.now
|
91
|
+
txn = version + 1
|
82
92
|
t = xml.xpath('/wallet/ledger')[0].add_child('<txn/>')[0]
|
83
93
|
t['id'] = txn
|
84
94
|
t.add_child('<date/>')[0].content = date.iso8601
|
data/lib/zold/wallets.rb
CHANGED
@@ -0,0 +1,86 @@
|
|
1
|
+
# Copyright (c) 2018 Zerocracy, Inc.
|
2
|
+
#
|
3
|
+
# Permission is hereby granted, free of charge, to any person obtaining a copy
|
4
|
+
# of this software and associated documentation files (the 'Software'), to deal
|
5
|
+
# in the Software without restriction, including without limitation the rights
|
6
|
+
# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
7
|
+
# copies of the Software, and to permit persons to whom the Software is
|
8
|
+
# furnished to do so, subject to the following conditions:
|
9
|
+
#
|
10
|
+
# The above copyright notice and this permission notice shall be included in all
|
11
|
+
# copies or substantial portions of the Software.
|
12
|
+
#
|
13
|
+
# THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
14
|
+
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
15
|
+
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFINGEMENT. IN NO EVENT SHALL THE
|
16
|
+
# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
17
|
+
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
18
|
+
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
19
|
+
# SOFTWARE.
|
20
|
+
|
21
|
+
require 'minitest/autorun'
|
22
|
+
require 'rack/test'
|
23
|
+
require_relative '../../lib/zold/key.rb'
|
24
|
+
require_relative '../../lib/zold/id.rb'
|
25
|
+
require_relative '../../lib/zold/amount.rb'
|
26
|
+
require_relative '../../lib/zold/wallet.rb'
|
27
|
+
require_relative '../../lib/zold/node/front.rb'
|
28
|
+
|
29
|
+
class FrontTest < Minitest::Test
|
30
|
+
include Rack::Test::Methods
|
31
|
+
|
32
|
+
def app
|
33
|
+
Zold::Front.new
|
34
|
+
end
|
35
|
+
|
36
|
+
def test_renders_version
|
37
|
+
get('/version')
|
38
|
+
assert(last_response.ok?)
|
39
|
+
end
|
40
|
+
|
41
|
+
def test_robots_txt
|
42
|
+
get('/robots.txt')
|
43
|
+
assert(last_response.ok?)
|
44
|
+
end
|
45
|
+
|
46
|
+
def test_it_renders_home_page
|
47
|
+
get('/')
|
48
|
+
assert(last_response.ok?)
|
49
|
+
assert(last_response.body.include?('zold'))
|
50
|
+
end
|
51
|
+
|
52
|
+
def test_pushes_a_wallet
|
53
|
+
Dir.mktmpdir 'test' do |dir|
|
54
|
+
id = Zold::Id.new
|
55
|
+
file = File.join(dir, "#{id}.xml")
|
56
|
+
wallet = Zold::Wallet.new(file)
|
57
|
+
wallet.init(id, Zold::Key.new(file: 'fixtures/id_rsa.pub'))
|
58
|
+
put("/wallets/#{id}", File.read(file))
|
59
|
+
assert(last_response.ok?, last_response.body)
|
60
|
+
key = Zold::Key.new(file: 'fixtures/id_rsa')
|
61
|
+
wallet.sub(Zold::Amount.new(zld: 39.99), Zold::Id.new, key)
|
62
|
+
put("/wallets/#{id}", File.read(file))
|
63
|
+
assert(last_response.ok?, last_response.body)
|
64
|
+
end
|
65
|
+
end
|
66
|
+
|
67
|
+
def test_pulls_a_wallet
|
68
|
+
Dir.mktmpdir 'test' do |dir|
|
69
|
+
id = Zold::Id.new
|
70
|
+
file = File.join(dir, "#{id}.xml")
|
71
|
+
wallet = Zold::Wallet.new(file)
|
72
|
+
wallet.init(id, Zold::Key.new(file: 'fixtures/id_rsa.pub'))
|
73
|
+
put("/wallets/#{id}", File.read(file))
|
74
|
+
assert(last_response.ok?, last_response.body)
|
75
|
+
get("/wallets/#{id}")
|
76
|
+
assert(last_response.ok?, last_response.body)
|
77
|
+
File.write(file, last_response.body)
|
78
|
+
assert wallet.balance.zero?
|
79
|
+
end
|
80
|
+
end
|
81
|
+
|
82
|
+
def test_pulls_an_absent_wallet
|
83
|
+
get('/wallets/ffffeeeeddddcccc')
|
84
|
+
assert(last_response.status == 404)
|
85
|
+
end
|
86
|
+
end
|
data/test/test_wallet.rb
CHANGED
@@ -36,8 +36,10 @@ class TestWallet < Minitest::Test
|
|
36
36
|
wallet = wallet(dir)
|
37
37
|
amount = Zold::Amount.new(zld: 39.99)
|
38
38
|
key = Zold::Key.new(file: 'fixtures/id_rsa')
|
39
|
+
assert wallet.version.zero?
|
39
40
|
wallet.sub(amount, Zold::Id.new, key)
|
40
41
|
wallet.sub(amount, Zold::Id.new, key)
|
42
|
+
assert wallet.version == 2
|
41
43
|
assert(
|
42
44
|
wallet.balance == amount.mul(-2),
|
43
45
|
"#{wallet.balance} is not equal to #{amount.mul(-2)}"
|
@@ -0,0 +1,42 @@
|
|
1
|
+
# Copyright (c) 2018 Zerocracy, Inc.
|
2
|
+
#
|
3
|
+
# Permission is hereby granted, free of charge, to any person obtaining a copy
|
4
|
+
# of this software and associated documentation files (the 'Software'), to deal
|
5
|
+
# in the Software without restriction, including without limitation the rights
|
6
|
+
# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
7
|
+
# copies of the Software, and to permit persons to whom the Software is
|
8
|
+
# furnished to do so, subject to the following conditions:
|
9
|
+
#
|
10
|
+
# The above copyright notice and this permission notice shall be included in all
|
11
|
+
# copies or substantial portions of the Software.
|
12
|
+
#
|
13
|
+
# THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
14
|
+
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
15
|
+
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFINGEMENT. IN NO EVENT SHALL THE
|
16
|
+
# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
17
|
+
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
18
|
+
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
19
|
+
# SOFTWARE.
|
20
|
+
|
21
|
+
require 'minitest/autorun'
|
22
|
+
require 'tmpdir'
|
23
|
+
require_relative '../lib/zold/key.rb'
|
24
|
+
require_relative '../lib/zold/id.rb'
|
25
|
+
require_relative '../lib/zold/wallets.rb'
|
26
|
+
require_relative '../lib/zold/amount.rb'
|
27
|
+
|
28
|
+
# Wallets test.
|
29
|
+
# Author:: Yegor Bugayenko (yegor256@gmail.com)
|
30
|
+
# Copyright:: Copyright (c) 2018 Zerocracy, Inc.
|
31
|
+
# License:: MIT
|
32
|
+
class TestWallets < Minitest::Test
|
33
|
+
def test_adds_wallet
|
34
|
+
Dir.mktmpdir 'test' do |dir|
|
35
|
+
wallets = Zold::Wallets.new(dir)
|
36
|
+
id = Zold::Id.new
|
37
|
+
wallet = wallets.find(id)
|
38
|
+
wallet.init(id, Zold::Key.new(file: 'fixtures/id_rsa.pub'))
|
39
|
+
assert(wallets.total == 1, "#{wallets.total} is not equal to 1")
|
40
|
+
end
|
41
|
+
end
|
42
|
+
end
|
data/views/index.haml
ADDED
data/views/layout.haml
ADDED
@@ -0,0 +1,26 @@
|
|
1
|
+
%html
|
2
|
+
%head
|
3
|
+
%title
|
4
|
+
=title
|
5
|
+
%meta{charset:'UTF-8'}
|
6
|
+
%meta{name:'viewport', content:'width=device-width, initial-scale=1.0'}
|
7
|
+
%meta{name:'keywords', content:'cryptocurrency, zold'}
|
8
|
+
%meta{name:'description', content:'Non-Blockchain Decentralized Cryptocurrency'}
|
9
|
+
%link{type:'text/css', href:url('http://cdn.rawgit.com/yegor256/tacit/gh-pages/tacit-css-1.2.8.min.css'), rel:'stylesheet'}
|
10
|
+
%body
|
11
|
+
%header
|
12
|
+
%nav
|
13
|
+
%ul
|
14
|
+
%li
|
15
|
+
%a{href: 'http://www.zold.io'}
|
16
|
+
%img{src: 'http://www.zold.io/logo.svg', style: 'width:64px;height:64px;'}
|
17
|
+
%section
|
18
|
+
= yield
|
19
|
+
%footer{style: 'font-size:80%; color:gray;'}
|
20
|
+
%nav
|
21
|
+
%ul
|
22
|
+
%li
|
23
|
+
=Zold::VERSION
|
24
|
+
%li
|
25
|
+
%a{href: 'https://github.com/zerocracy/zold'}
|
26
|
+
GitHub
|
data/zold.gemspec
CHANGED
@@ -44,16 +44,18 @@ Gem::Specification.new do |s|
|
|
44
44
|
s.test_files = s.files.grep(%r{^(test|spec|features)/})
|
45
45
|
s.rdoc_options = ['--charset=UTF-8']
|
46
46
|
s.extra_rdoc_files = ['README.md', 'LICENSE.txt']
|
47
|
+
s.add_runtime_dependency 'cucumber', '1.3.17'
|
48
|
+
s.add_runtime_dependency 'haml', '5.0.3'
|
47
49
|
s.add_runtime_dependency 'nokogiri', '~>1.8'
|
48
50
|
s.add_runtime_dependency 'rainbow', '~>3.0'
|
51
|
+
s.add_runtime_dependency 'rake', '12.0.0'
|
52
|
+
s.add_runtime_dependency 'rubocop', '~>0.52.0'
|
53
|
+
s.add_runtime_dependency 'rubocop-rspec', '1.5.1'
|
54
|
+
s.add_runtime_dependency 'sinatra', '2.0.0'
|
49
55
|
s.add_runtime_dependency 'slop', '~>4.4'
|
56
|
+
s.add_runtime_dependency 'xcop', '~>0.5'
|
50
57
|
s.add_development_dependency 'codecov', '0.1.10'
|
51
|
-
s.add_development_dependency 'cucumber', '1.3.17'
|
52
58
|
s.add_development_dependency 'minitest', '5.5.0'
|
53
|
-
s.add_development_dependency 'rake', '12.0.0'
|
54
59
|
s.add_development_dependency 'rdoc', '4.2.0'
|
55
60
|
s.add_development_dependency 'rspec-rails', '3.1.0'
|
56
|
-
s.add_development_dependency 'rubocop', '~>0.52.0'
|
57
|
-
s.add_development_dependency 'rubocop-rspec', '1.5.1'
|
58
|
-
s.add_development_dependency 'xcop', '~>0.5'
|
59
61
|
end
|
metadata
CHANGED
@@ -1,15 +1,43 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: zold
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.6
|
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-02-
|
11
|
+
date: 2018-02-05 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: cucumber
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - '='
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: 1.3.17
|
20
|
+
type: :runtime
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - '='
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: 1.3.17
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: haml
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - '='
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: 5.0.3
|
34
|
+
type: :runtime
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - '='
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: 5.0.3
|
13
41
|
- !ruby/object:Gem::Dependency
|
14
42
|
name: nokogiri
|
15
43
|
requirement: !ruby/object:Gem::Requirement
|
@@ -39,145 +67,145 @@ dependencies:
|
|
39
67
|
- !ruby/object:Gem::Version
|
40
68
|
version: '3.0'
|
41
69
|
- !ruby/object:Gem::Dependency
|
42
|
-
name:
|
70
|
+
name: rake
|
43
71
|
requirement: !ruby/object:Gem::Requirement
|
44
72
|
requirements:
|
45
|
-
- -
|
73
|
+
- - '='
|
46
74
|
- !ruby/object:Gem::Version
|
47
|
-
version:
|
75
|
+
version: 12.0.0
|
48
76
|
type: :runtime
|
49
77
|
prerelease: false
|
50
78
|
version_requirements: !ruby/object:Gem::Requirement
|
51
79
|
requirements:
|
52
|
-
- -
|
80
|
+
- - '='
|
53
81
|
- !ruby/object:Gem::Version
|
54
|
-
version:
|
82
|
+
version: 12.0.0
|
55
83
|
- !ruby/object:Gem::Dependency
|
56
|
-
name:
|
84
|
+
name: rubocop
|
57
85
|
requirement: !ruby/object:Gem::Requirement
|
58
86
|
requirements:
|
59
|
-
- -
|
87
|
+
- - "~>"
|
60
88
|
- !ruby/object:Gem::Version
|
61
|
-
version: 0.
|
62
|
-
type: :
|
89
|
+
version: 0.52.0
|
90
|
+
type: :runtime
|
63
91
|
prerelease: false
|
64
92
|
version_requirements: !ruby/object:Gem::Requirement
|
65
93
|
requirements:
|
66
|
-
- -
|
94
|
+
- - "~>"
|
67
95
|
- !ruby/object:Gem::Version
|
68
|
-
version: 0.
|
96
|
+
version: 0.52.0
|
69
97
|
- !ruby/object:Gem::Dependency
|
70
|
-
name:
|
98
|
+
name: rubocop-rspec
|
71
99
|
requirement: !ruby/object:Gem::Requirement
|
72
100
|
requirements:
|
73
101
|
- - '='
|
74
102
|
- !ruby/object:Gem::Version
|
75
|
-
version: 1.
|
76
|
-
type: :
|
103
|
+
version: 1.5.1
|
104
|
+
type: :runtime
|
77
105
|
prerelease: false
|
78
106
|
version_requirements: !ruby/object:Gem::Requirement
|
79
107
|
requirements:
|
80
108
|
- - '='
|
81
109
|
- !ruby/object:Gem::Version
|
82
|
-
version: 1.
|
110
|
+
version: 1.5.1
|
83
111
|
- !ruby/object:Gem::Dependency
|
84
|
-
name:
|
112
|
+
name: sinatra
|
85
113
|
requirement: !ruby/object:Gem::Requirement
|
86
114
|
requirements:
|
87
115
|
- - '='
|
88
116
|
- !ruby/object:Gem::Version
|
89
|
-
version:
|
90
|
-
type: :
|
117
|
+
version: 2.0.0
|
118
|
+
type: :runtime
|
91
119
|
prerelease: false
|
92
120
|
version_requirements: !ruby/object:Gem::Requirement
|
93
121
|
requirements:
|
94
122
|
- - '='
|
95
123
|
- !ruby/object:Gem::Version
|
96
|
-
version:
|
124
|
+
version: 2.0.0
|
97
125
|
- !ruby/object:Gem::Dependency
|
98
|
-
name:
|
126
|
+
name: slop
|
99
127
|
requirement: !ruby/object:Gem::Requirement
|
100
128
|
requirements:
|
101
|
-
- -
|
129
|
+
- - "~>"
|
102
130
|
- !ruby/object:Gem::Version
|
103
|
-
version:
|
104
|
-
type: :
|
131
|
+
version: '4.4'
|
132
|
+
type: :runtime
|
105
133
|
prerelease: false
|
106
134
|
version_requirements: !ruby/object:Gem::Requirement
|
107
135
|
requirements:
|
108
|
-
- -
|
136
|
+
- - "~>"
|
109
137
|
- !ruby/object:Gem::Version
|
110
|
-
version:
|
138
|
+
version: '4.4'
|
111
139
|
- !ruby/object:Gem::Dependency
|
112
|
-
name:
|
140
|
+
name: xcop
|
113
141
|
requirement: !ruby/object:Gem::Requirement
|
114
142
|
requirements:
|
115
|
-
- -
|
143
|
+
- - "~>"
|
116
144
|
- !ruby/object:Gem::Version
|
117
|
-
version:
|
118
|
-
type: :
|
145
|
+
version: '0.5'
|
146
|
+
type: :runtime
|
119
147
|
prerelease: false
|
120
148
|
version_requirements: !ruby/object:Gem::Requirement
|
121
149
|
requirements:
|
122
|
-
- -
|
150
|
+
- - "~>"
|
123
151
|
- !ruby/object:Gem::Version
|
124
|
-
version:
|
152
|
+
version: '0.5'
|
125
153
|
- !ruby/object:Gem::Dependency
|
126
|
-
name:
|
154
|
+
name: codecov
|
127
155
|
requirement: !ruby/object:Gem::Requirement
|
128
156
|
requirements:
|
129
157
|
- - '='
|
130
158
|
- !ruby/object:Gem::Version
|
131
|
-
version:
|
159
|
+
version: 0.1.10
|
132
160
|
type: :development
|
133
161
|
prerelease: false
|
134
162
|
version_requirements: !ruby/object:Gem::Requirement
|
135
163
|
requirements:
|
136
164
|
- - '='
|
137
165
|
- !ruby/object:Gem::Version
|
138
|
-
version:
|
166
|
+
version: 0.1.10
|
139
167
|
- !ruby/object:Gem::Dependency
|
140
|
-
name:
|
168
|
+
name: minitest
|
141
169
|
requirement: !ruby/object:Gem::Requirement
|
142
170
|
requirements:
|
143
|
-
- -
|
171
|
+
- - '='
|
144
172
|
- !ruby/object:Gem::Version
|
145
|
-
version:
|
173
|
+
version: 5.5.0
|
146
174
|
type: :development
|
147
175
|
prerelease: false
|
148
176
|
version_requirements: !ruby/object:Gem::Requirement
|
149
177
|
requirements:
|
150
|
-
- -
|
178
|
+
- - '='
|
151
179
|
- !ruby/object:Gem::Version
|
152
|
-
version:
|
180
|
+
version: 5.5.0
|
153
181
|
- !ruby/object:Gem::Dependency
|
154
|
-
name:
|
182
|
+
name: rdoc
|
155
183
|
requirement: !ruby/object:Gem::Requirement
|
156
184
|
requirements:
|
157
185
|
- - '='
|
158
186
|
- !ruby/object:Gem::Version
|
159
|
-
version:
|
187
|
+
version: 4.2.0
|
160
188
|
type: :development
|
161
189
|
prerelease: false
|
162
190
|
version_requirements: !ruby/object:Gem::Requirement
|
163
191
|
requirements:
|
164
192
|
- - '='
|
165
193
|
- !ruby/object:Gem::Version
|
166
|
-
version:
|
194
|
+
version: 4.2.0
|
167
195
|
- !ruby/object:Gem::Dependency
|
168
|
-
name:
|
196
|
+
name: rspec-rails
|
169
197
|
requirement: !ruby/object:Gem::Requirement
|
170
198
|
requirements:
|
171
|
-
- -
|
199
|
+
- - '='
|
172
200
|
- !ruby/object:Gem::Version
|
173
|
-
version:
|
201
|
+
version: 3.1.0
|
174
202
|
type: :development
|
175
203
|
prerelease: false
|
176
204
|
version_requirements: !ruby/object:Gem::Requirement
|
177
205
|
requirements:
|
178
|
-
- -
|
206
|
+
- - '='
|
179
207
|
- !ruby/object:Gem::Version
|
180
|
-
version:
|
208
|
+
version: 3.1.0
|
181
209
|
description: Non-blockchain cryptocurrency
|
182
210
|
email: yegor256@gmail.com
|
183
211
|
executables:
|
@@ -198,12 +226,14 @@ files:
|
|
198
226
|
- CONTRIBUTING.md
|
199
227
|
- Gemfile
|
200
228
|
- LICENSE.txt
|
229
|
+
- Procfile
|
201
230
|
- README.md
|
202
231
|
- Rakefile
|
203
232
|
- appveyor.yml
|
204
233
|
- assets/wallet.xsd
|
205
234
|
- bin/zold
|
206
235
|
- cucumber.yml
|
236
|
+
- deploy.sh
|
207
237
|
- features/cli.feature
|
208
238
|
- features/gem_package.feature
|
209
239
|
- features/step_definitions/steps.rb
|
@@ -221,18 +251,24 @@ files:
|
|
221
251
|
- lib/zold/id.rb
|
222
252
|
- lib/zold/key.rb
|
223
253
|
- lib/zold/log.rb
|
254
|
+
- lib/zold/node/front.rb
|
224
255
|
- lib/zold/version.rb
|
225
256
|
- lib/zold/wallet.rb
|
226
257
|
- lib/zold/wallets.rb
|
227
258
|
- test/commands/test_balance.rb
|
228
259
|
- test/commands/test_create.rb
|
229
260
|
- test/commands/test_send.rb
|
261
|
+
- test/node/test_front.rb
|
230
262
|
- test/test__helper.rb
|
231
263
|
- test/test_amount.rb
|
232
264
|
- test/test_id.rb
|
233
265
|
- test/test_key.rb
|
234
266
|
- test/test_wallet.rb
|
267
|
+
- test/test_wallets.rb
|
235
268
|
- test/test_zold.rb
|
269
|
+
- views/index.haml
|
270
|
+
- views/layout.haml
|
271
|
+
- views/not_found.haml
|
236
272
|
- zold.gemspec
|
237
273
|
homepage: http://github.com/zerocracy/zold
|
238
274
|
licenses:
|
@@ -267,9 +303,11 @@ test_files:
|
|
267
303
|
- test/commands/test_balance.rb
|
268
304
|
- test/commands/test_create.rb
|
269
305
|
- test/commands/test_send.rb
|
306
|
+
- test/node/test_front.rb
|
270
307
|
- test/test__helper.rb
|
271
308
|
- test/test_amount.rb
|
272
309
|
- test/test_id.rb
|
273
310
|
- test/test_key.rb
|
274
311
|
- test/test_wallet.rb
|
312
|
+
- test/test_wallets.rb
|
275
313
|
- test/test_zold.rb
|