bitcoin 0.1.0 → 0.1.2
Sign up to get free protection for your applications and to get access to all the features.
- data/.rvmrc +1 -1
- data/Gemfile.lock +56 -4
- data/Guardfile +38 -0
- data/README.markdown +21 -2
- data/bin/rbcoin +8 -1
- data/bitcoin.gemspec +17 -5
- data/config/cucumber.yml +3 -3
- data/config/darcs.boring +121 -0
- data/doc/DEFINITION_OF_DONE.markdown +12 -0
- data/doc/HISTORY.markdown +19 -0
- data/{LICENCE.markdown → doc/LICENCE.markdown} +1 -1
- data/doc/TODO.markdown +31 -0
- data/doc/UBIQUITOUS_LANGUAGE.markdown +15 -0
- data/features/descriptions/command_help.feature +31 -0
- data/features/descriptions/satoshi_wallet/add_address.feature +49 -0
- data/features/descriptions/satoshi_wallet/show_addresses.feature +18 -0
- data/features/descriptions/satoshi_wallet/show_version.feature +17 -0
- data/features/descriptions/satoshi_wallet/subcommand_help.feature +20 -0
- data/features/fixtures/ABOUT_FIXTURES.markdown +6 -0
- data/features/fixtures/addressbook_wallet.dat +0 -0
- data/features/fixtures/new_wallet.dat +0 -0
- data/features/step_definitions/command_steps.rb +3 -0
- data/features/step_definitions/wallet_steps.rb +11 -0
- data/features/support/env.rb +8 -1
- data/lib/bitcoin/cli.rb +35 -0
- data/lib/bitcoin/commands.rb +3 -0
- data/lib/bitcoin/commands/help_command.rb +32 -0
- data/lib/bitcoin/commands/satoshi_wallet.rb +11 -0
- data/lib/bitcoin/commands/satoshi_wallet/add_address_command.rb +61 -0
- data/lib/bitcoin/commands/satoshi_wallet/show_addresses_command.rb +16 -0
- data/lib/bitcoin/commands/satoshi_wallet/show_version_command.rb +15 -0
- data/lib/bitcoin/commands/satoshi_wallet_command.rb +37 -0
- data/lib/bitcoin/commands/satoshi_wallet_command_environment.rb +28 -0
- data/lib/bitcoin/console/capturing_stream_bundle.rb +42 -0
- data/lib/bitcoin/console/stream_bundle.rb +21 -0
- data/lib/bitcoin/data_access/satoshi/bdb_satoshi_wallet_repository.rb +155 -0
- data/lib/bitcoin/data_access/satoshi/satoshi_version.rb +58 -0
- data/lib/bitcoin/data_access/satoshi/satoshi_wallet.rb +39 -0
- data/lib/bitcoin/domain/address_book.rb +19 -0
- data/lib/bitcoin/domain/bitcoin_address.rb +33 -0
- data/lib/bitcoin/filesystem/empty_temp_dir.rb +74 -0
- data/lib/bitcoin/rspec/argument_matchers.rb +1 -0
- data/lib/bitcoin/rspec/argument_matchers/block_evaluating_to_matcher.rb +23 -0
- data/lib/bitcoin/rspec/directory_helpers.rb +22 -0
- data/lib/bitcoin/version.rb +1 -1
- data/spec/bitcoin/cli_spec.rb +128 -0
- data/spec/bitcoin/commands/help_command_spec.rb +53 -0
- data/spec/bitcoin/commands/satoshi_wallet/add_address_command_spec.rb +149 -0
- data/spec/bitcoin/commands/satoshi_wallet/show_addresses_command_spec.rb +26 -0
- data/spec/bitcoin/commands/satoshi_wallet/show_version_command_spec.rb +26 -0
- data/spec/bitcoin/commands/satoshi_wallet_command_environment_spec.rb +76 -0
- data/spec/bitcoin/commands/satoshi_wallet_command_spec.rb +73 -0
- data/spec/bitcoin/console/_contracts/stream_bundle_contract.rb +29 -0
- data/spec/bitcoin/console/capturing_stream_bundle_spec.rb +74 -0
- data/spec/bitcoin/console/stream_bundle_spec.rb +13 -0
- data/spec/bitcoin/data_access/satoshi/bdb_satoshi_wallet_repository_spec.rb +78 -0
- data/spec/bitcoin/data_access/satoshi/satoshi_version_spec.rb +112 -0
- data/spec/bitcoin/data_access/satoshi/satoshi_wallet_spec.rb +102 -0
- data/spec/bitcoin/domain/address_book_spec.rb +63 -0
- data/spec/bitcoin/domain/bitcoin_address_spec.rb +52 -0
- data/spec/bitcoin/filesystem/empty_temp_dir_spec.rb +170 -0
- data/spec/bitcoin/rspec/argument_matchers/block_evaluating_to_matcher_spec.rb +36 -0
- data/spec/spec_helper.rb +29 -1
- metadata +221 -18
data/.rvmrc
CHANGED
@@ -1 +1 @@
|
|
1
|
-
rvm use 1.9.2@bitcoin
|
1
|
+
rvm use 1.9.2@bitcoin --create
|
data/Gemfile.lock
CHANGED
@@ -1,12 +1,27 @@
|
|
1
1
|
PATH
|
2
2
|
remote: .
|
3
3
|
specs:
|
4
|
-
bitcoin (0.
|
4
|
+
bitcoin (0.1.1)
|
5
|
+
lstrip-on-steroids (>= 1.0.0)
|
6
|
+
sbdb (>= 0.0.12.2)
|
5
7
|
|
6
8
|
GEM
|
7
9
|
remote: http://rubygems.org/
|
8
10
|
specs:
|
11
|
+
aruba (0.4.6)
|
12
|
+
bcat (>= 0.6.1)
|
13
|
+
childprocess (>= 0.2.0)
|
14
|
+
cucumber (>= 1.0.2)
|
15
|
+
rdiscount (>= 1.6.8)
|
16
|
+
rspec (>= 2.6.0)
|
17
|
+
awesome_print (0.4.0)
|
18
|
+
bcat (0.6.1)
|
19
|
+
rack (~> 1.0)
|
20
|
+
bdb (0.2.6.5)
|
21
|
+
tuple (>= 0.1.2)
|
9
22
|
builder (3.0.0)
|
23
|
+
childprocess (0.2.1)
|
24
|
+
ffi (~> 1.0.6)
|
10
25
|
cucumber (1.0.2)
|
11
26
|
builder (>= 2.1.2)
|
12
27
|
diff-lcs (>= 1.1.2)
|
@@ -14,14 +29,36 @@ GEM
|
|
14
29
|
json (>= 1.4.6)
|
15
30
|
term-ansicolor (>= 1.0.5)
|
16
31
|
diff-lcs (1.1.2)
|
17
|
-
|
32
|
+
fakefs (0.3.2)
|
33
|
+
ffi (1.0.9)
|
34
|
+
fuubar (0.0.6)
|
35
|
+
rspec (~> 2.0)
|
36
|
+
rspec-instafail (~> 0.1.8)
|
37
|
+
ruby-progressbar (~> 0.0.10)
|
38
|
+
gherkin (2.4.14)
|
18
39
|
json (>= 1.4.6)
|
19
40
|
growl (1.0.3)
|
20
|
-
|
41
|
+
growl_notify (0.0.1)
|
42
|
+
rb-appscript
|
43
|
+
guard (0.6.2)
|
21
44
|
thor (~> 0.14.6)
|
45
|
+
guard-bundler (0.1.3)
|
46
|
+
bundler (>= 1.0.0)
|
47
|
+
guard (>= 0.2.2)
|
48
|
+
guard-cucumber (0.6.1)
|
49
|
+
cucumber (>= 0.10)
|
50
|
+
guard (>= 0.4.0)
|
51
|
+
guard-rspec (0.4.2)
|
52
|
+
guard (>= 0.4.0)
|
22
53
|
json (1.5.3)
|
54
|
+
looksee (1.0.2)
|
55
|
+
lstrip-on-steroids (1.0.0)
|
56
|
+
rack (1.3.2)
|
23
57
|
rake (0.9.2)
|
24
|
-
rb-
|
58
|
+
rb-appscript (0.6.1)
|
59
|
+
rb-fsevent (0.4.3.1)
|
60
|
+
rdiscount (1.6.8)
|
61
|
+
ref (1.0.0)
|
25
62
|
rspec (2.6.0)
|
26
63
|
rspec-core (~> 2.6.0)
|
27
64
|
rspec-expectations (~> 2.6.0)
|
@@ -29,18 +66,33 @@ GEM
|
|
29
66
|
rspec-core (2.6.4)
|
30
67
|
rspec-expectations (2.6.0)
|
31
68
|
diff-lcs (~> 1.1.2)
|
69
|
+
rspec-instafail (0.1.8)
|
32
70
|
rspec-mocks (2.6.0)
|
71
|
+
ruby-progressbar (0.0.10)
|
72
|
+
sbdb (0.0.12.2)
|
73
|
+
bdb (>= 0.2.6.5)
|
74
|
+
ref
|
33
75
|
term-ansicolor (1.0.6)
|
34
76
|
thor (0.14.6)
|
77
|
+
tuple (0.1.2)
|
35
78
|
|
36
79
|
PLATFORMS
|
37
80
|
ruby
|
38
81
|
|
39
82
|
DEPENDENCIES
|
83
|
+
aruba
|
84
|
+
awesome_print
|
40
85
|
bitcoin!
|
41
86
|
cucumber
|
87
|
+
fakefs
|
88
|
+
fuubar
|
42
89
|
growl
|
90
|
+
growl_notify
|
43
91
|
guard
|
92
|
+
guard-bundler
|
93
|
+
guard-cucumber
|
94
|
+
guard-rspec
|
95
|
+
looksee
|
44
96
|
rake
|
45
97
|
rb-fsevent
|
46
98
|
rspec
|
data/Guardfile
ADDED
@@ -0,0 +1,38 @@
|
|
1
|
+
# Signal to interested subprocesses that they are being run from Guard
|
2
|
+
ENV["GUARD"] = "fast"
|
3
|
+
|
4
|
+
guard 'bundler' do
|
5
|
+
watch('Gemfile')
|
6
|
+
# Uncomment next line if Gemfile contain `gemspec' command
|
7
|
+
watch(/^.+\.gemspec/)
|
8
|
+
end
|
9
|
+
|
10
|
+
guard 'rspec', version: 2, cli: "--color --format Fuubar" do
|
11
|
+
watch(%r{^spec/.+_spec\.rb})
|
12
|
+
watch(%r{^lib/(.+)\.rb}) { |m| "spec/lib/#{m[1]}_spec.rb" }
|
13
|
+
watch('spec/spec_helper.rb') { "spec" }
|
14
|
+
end
|
15
|
+
|
16
|
+
# Only run this once to stop Guardfile re-evaluation making a hash of things
|
17
|
+
unless ::Guard::RSpec.instance_methods.include?(:run_on_change_orig)
|
18
|
+
# There's a "hook" branch of Guard that will make this class patch
|
19
|
+
# unnecessary: https://github.com/guard/guard/tree/hook
|
20
|
+
class ::Guard::RSpec
|
21
|
+
# Monkey-patch to indicate to RSpec that it can run slow tests if
|
22
|
+
# only one file was changed
|
23
|
+
alias_method :run_on_change_orig, :run_on_change
|
24
|
+
def run_on_change(paths)
|
25
|
+
if paths.length == 1 && File.read(paths.first).include?("adapter: :slow")
|
26
|
+
ENV["GUARD"] = "all"
|
27
|
+
end
|
28
|
+
run_on_change_orig(paths)
|
29
|
+
ensure
|
30
|
+
ENV["GUARD"] = "fast"
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
34
|
+
|
35
|
+
guard 'cucumber' do
|
36
|
+
watch(%r{^features/.+\.feature$})
|
37
|
+
watch(%r{^features/support/.+$}) { 'features' }
|
38
|
+
end
|
data/README.markdown
CHANGED
@@ -1,5 +1,24 @@
|
|
1
1
|
# Bitcoin
|
2
2
|
|
3
|
-
A Bitcoin client written in Ruby
|
3
|
+
A [Bitcoin][bitcoin] client written in Ruby
|
4
4
|
|
5
|
-
This is
|
5
|
+
This is very early stages - I haven't yet spent much time on it, but I
|
6
|
+
have explored the Bitcoin Berkeley DB database format to some extent,
|
7
|
+
and the first phase is to be able to read (and write) enough from standard
|
8
|
+
wallets to be a useful management tool.
|
9
|
+
|
10
|
+
For licence and other documentation, see the "doc" folder
|
11
|
+
|
12
|
+
## Installation
|
13
|
+
|
14
|
+
You need Berkeley DB 4.7 installed. To get this through MacPorts:
|
15
|
+
|
16
|
+
sudo port install db47
|
17
|
+
|
18
|
+
The BDB gem dependency should then compile.
|
19
|
+
|
20
|
+
## Contact
|
21
|
+
|
22
|
+
I can be reached by email at <ash.moran@patchspace.co.uk>
|
23
|
+
|
24
|
+
[bitcoin]: http://www.bitcoin.org/
|
data/bin/rbcoin
CHANGED
@@ -1 +1,8 @@
|
|
1
|
-
#!/usr/bin/env ruby
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
|
3
|
+
$:.unshift(File.dirname(__FILE__) + '/../lib') unless $:.include?(File.dirname(__FILE__) + '/../lib')
|
4
|
+
|
5
|
+
require 'bitcoin/cli'
|
6
|
+
require 'bitcoin/console/stream_bundle'
|
7
|
+
|
8
|
+
exit Bitcoin::CLI.new(Bitcoin::Console::StreamBundle.new(STDIN, STDOUT, STDERR)).run(ARGV.dup)
|
data/bitcoin.gemspec
CHANGED
@@ -5,22 +5,34 @@ require "bitcoin/version"
|
|
5
5
|
Gem::Specification.new do |s|
|
6
6
|
s.name = "bitcoin"
|
7
7
|
s.version = Bitcoin::VERSION
|
8
|
-
s.authors = ["Ash Moran"]
|
9
|
-
s.email = [
|
10
|
-
s.homepage = "http://
|
11
|
-
s.summary = "
|
8
|
+
s.authors = [ "Ash Moran", "Andy Shipman" ]
|
9
|
+
s.email = %w[ ash.moran@patchspace.co.uk andy@cllearview.com ]
|
10
|
+
s.homepage = "http://rbcoin.org/"
|
11
|
+
s.summary = "bitcoin-#{Bitcoin::VERSION}"
|
12
12
|
s.description = "Bitcoin client"
|
13
13
|
|
14
14
|
# s.rubyforge_project = "bitcoin"
|
15
15
|
|
16
|
+
s.add_dependency("sbdb", ">= 0.0.12.2")
|
17
|
+
s.add_dependency("lstrip-on-steroids", ">= 1.0.0")
|
18
|
+
|
16
19
|
s.add_development_dependency("rake")
|
17
20
|
s.add_development_dependency("cucumber")
|
21
|
+
s.add_development_dependency("aruba")
|
18
22
|
s.add_development_dependency("rspec")
|
23
|
+
s.add_development_dependency("fuubar")
|
19
24
|
s.add_development_dependency("guard")
|
25
|
+
s.add_development_dependency("guard-rspec")
|
26
|
+
s.add_development_dependency("guard-cucumber")
|
27
|
+
s.add_development_dependency("guard-bundler")
|
20
28
|
s.add_development_dependency("rb-fsevent")
|
21
29
|
s.add_development_dependency("growl")
|
30
|
+
s.add_development_dependency("fakefs")
|
31
|
+
s.add_development_dependency("awesome_print")
|
32
|
+
s.add_development_dependency("looksee")
|
33
|
+
s.add_development_dependency("growl_notify")
|
22
34
|
|
23
|
-
# `darcs show files` lists directories unlike `git ls-files`, so we exclude them here
|
35
|
+
# `darcs show files` lists directories unlike `git ls-files`, so we exclude them here
|
24
36
|
s.files = `darcs show files`.split("\n").select { |file| File.file?(file) }
|
25
37
|
s.test_files = `darcs show files {features,spec}/*`.split("\n").select { |file| File.file?(file) }
|
26
38
|
s.executables = `darcs show files bin/*`.split("\n").select { |file| File.file?(file) }.map { |file| File.basename(file) }
|
data/config/cucumber.yml
CHANGED
@@ -1,5 +1,5 @@
|
|
1
1
|
<%
|
2
|
-
std_opts = "--format #{ENV['CUCUMBER_FORMAT'] || 'pretty'}
|
2
|
+
std_opts = "--require features/support/env.rb --require features/step_definitions --format #{ENV['CUCUMBER_FORMAT'] || 'pretty'}"
|
3
3
|
%>
|
4
|
-
default: <%= std_opts %>
|
5
|
-
wip: --tags @wip:3 --wip
|
4
|
+
default: <%= std_opts %> --tags ~@wip --strict
|
5
|
+
wip: <%= std_opts %> --tags @wip:3 --wip
|
data/config/darcs.boring
ADDED
@@ -0,0 +1,121 @@
|
|
1
|
+
# Boring file regexps:
|
2
|
+
|
3
|
+
### compiler and interpreter intermediate files
|
4
|
+
# haskell (ghc) interfaces
|
5
|
+
\.hi$
|
6
|
+
\.hi-boot$
|
7
|
+
\.o-boot$
|
8
|
+
# object files
|
9
|
+
\.o$
|
10
|
+
\.o\.cmd$
|
11
|
+
# profiling haskell
|
12
|
+
\.p_hi$
|
13
|
+
\.p_o$
|
14
|
+
# haskell program coverage resp. profiling info
|
15
|
+
\.tix$
|
16
|
+
\.prof$
|
17
|
+
# fortran module files
|
18
|
+
\.mod$
|
19
|
+
# linux kernel
|
20
|
+
\.ko\.cmd$
|
21
|
+
\.mod\.c$
|
22
|
+
(^|/)\.tmp_versions($|/)
|
23
|
+
# *.ko files aren't boring by default because they might
|
24
|
+
# be Korean translations rather than kernel modules
|
25
|
+
# \.ko$
|
26
|
+
# python, emacs, java byte code
|
27
|
+
\.py[co]$
|
28
|
+
\.elc$
|
29
|
+
\.class$
|
30
|
+
# objects and libraries; lo and la are libtool things
|
31
|
+
\.(obj|a|exe|so|lo|la)$
|
32
|
+
# compiled zsh configuration files
|
33
|
+
\.zwc$
|
34
|
+
# Common LISP output files for CLISP and CMUCL
|
35
|
+
\.(fas|fasl|sparcf|x86f)$
|
36
|
+
|
37
|
+
### build and packaging systems
|
38
|
+
# cabal intermediates
|
39
|
+
\.installed-pkg-config
|
40
|
+
\.setup-config
|
41
|
+
# standard cabal build dir, might not be boring for everybody
|
42
|
+
# ^dist(/|$)
|
43
|
+
# autotools
|
44
|
+
(^|/)autom4te\.cache($|/)
|
45
|
+
(^|/)config\.(log|status)$
|
46
|
+
# microsoft web expression, visual studio metadata directories
|
47
|
+
\_vti_cnf$
|
48
|
+
\_vti_pvt$
|
49
|
+
# gentoo tools
|
50
|
+
\.revdep-rebuild.*
|
51
|
+
# generated dependencies
|
52
|
+
^\.depend$
|
53
|
+
|
54
|
+
### version control systems
|
55
|
+
# cvs
|
56
|
+
(^|/)CVS($|/)
|
57
|
+
\.cvsignore$
|
58
|
+
# cvs, emacs locks
|
59
|
+
^\.#
|
60
|
+
# rcs
|
61
|
+
(^|/)RCS($|/)
|
62
|
+
,v$
|
63
|
+
# subversion
|
64
|
+
(^|/)\.svn($|/)
|
65
|
+
# mercurial
|
66
|
+
(^|/)\.hg($|/)
|
67
|
+
# git
|
68
|
+
(^|/)\.git($|/)
|
69
|
+
# bzr
|
70
|
+
\.bzr$
|
71
|
+
# sccs
|
72
|
+
(^|/)SCCS($|/)
|
73
|
+
# darcs
|
74
|
+
(^|/)_darcs($|/)
|
75
|
+
(^|/)\.darcsrepo($|/)
|
76
|
+
^\.darcs-temp-mail$
|
77
|
+
-darcs-backup[[:digit:]]+$
|
78
|
+
# gnu arch
|
79
|
+
(^|/)(\+|,)
|
80
|
+
(^|/)vssver\.scc$
|
81
|
+
\.swp$
|
82
|
+
(^|/)MT($|/)
|
83
|
+
(^|/)\{arch\}($|/)
|
84
|
+
(^|/).arch-ids($|/)
|
85
|
+
# bitkeeper
|
86
|
+
(^|/)BitKeeper($|/)
|
87
|
+
(^|/)ChangeSet($|/)
|
88
|
+
|
89
|
+
### miscellaneous
|
90
|
+
# backup files
|
91
|
+
~$
|
92
|
+
\.bak$
|
93
|
+
\.BAK$
|
94
|
+
# patch originals and rejects
|
95
|
+
\.orig$
|
96
|
+
\.rej$
|
97
|
+
# X server
|
98
|
+
\..serverauth.*
|
99
|
+
# image spam
|
100
|
+
\#
|
101
|
+
(^|/)Thumbs\.db$
|
102
|
+
# vi, emacs tags
|
103
|
+
(^|/)(tags|TAGS)$
|
104
|
+
#(^|/)\.[^/]
|
105
|
+
# core dumps
|
106
|
+
(^|/|\.)core$
|
107
|
+
# partial broken files (KIO copy operations)
|
108
|
+
\.part$
|
109
|
+
# waf files, see http://code.google.com/p/waf/
|
110
|
+
(^|/)\.waf-[[:digit:].]+-[[:digit:]]+($|/)
|
111
|
+
(^|/)\.lock-wscript$
|
112
|
+
# mac os finder
|
113
|
+
(^|/)\.DS_Store$
|
114
|
+
|
115
|
+
### Bitcoin gem additions
|
116
|
+
pkg$
|
117
|
+
^tmp/.*
|
118
|
+
^bitcoinrb_db_tmp$
|
119
|
+
^scratch\.rb$
|
120
|
+
^features/fixtures/real_wallet.dat$
|
121
|
+
^.*\.gem$
|
@@ -0,0 +1,12 @@
|
|
1
|
+
# Bitcoin Definition of Done
|
2
|
+
|
3
|
+
A feature in the Bitcoin client will be considered done under normal
|
4
|
+
circumstances if it meets the following criteria:
|
5
|
+
|
6
|
+
* There is a Cucumber feature describing it
|
7
|
+
* The feature covers the command line interface
|
8
|
+
* There is a command-line interface for it
|
9
|
+
* The command-line interface is documented in the internal help
|
10
|
+
* All realistic input-related error conditions are handled
|
11
|
+
* All realistic runtime errors are handled
|
12
|
+
* The feature behaves in a suitably similar way to the Satoshi client
|
@@ -0,0 +1,19 @@
|
|
1
|
+
# Bitcoin gem history
|
2
|
+
|
3
|
+
## 0.1.2 (2011-08-29)
|
4
|
+
|
5
|
+
### New features
|
6
|
+
|
7
|
+
* `rbcoin satoshi-wallet add-address` command
|
8
|
+
* `rbcoin satoshi-wallet show-addresses` command
|
9
|
+
|
10
|
+
## 0.1.1 (2011-08-22)
|
11
|
+
|
12
|
+
### New features
|
13
|
+
|
14
|
+
* `rbcoin satoshi-wallet show-version` command
|
15
|
+
* `rbcoin help` command shows WIP help, not everything described is implemented
|
16
|
+
|
17
|
+
## 0.1.0 (2011-07-21)
|
18
|
+
|
19
|
+
Initial "release". Doesn't actually do anything yet :-)
|
@@ -1,4 +1,4 @@
|
|
1
|
-
Copyright 2011 Ash Moran
|
1
|
+
Copyright 2011 Ash Moran <ash.moran@patchspace.co.uk>. All rights reserved.
|
2
2
|
|
3
3
|
Redistribution and use in source and binary forms, with or without modification, are
|
4
4
|
permitted provided that the following conditions are met:
|
data/doc/TODO.markdown
ADDED
@@ -0,0 +1,31 @@
|
|
1
|
+
# TODO
|
2
|
+
|
3
|
+
## Satoshi code
|
4
|
+
|
5
|
+
* Investigate `read_compact_size`
|
6
|
+
|
7
|
+
## Features
|
8
|
+
|
9
|
+
* Flags to `rbcoin satoshi-wallet show-addresses`: --all, --sending --receiving
|
10
|
+
|
11
|
+
## Usability
|
12
|
+
|
13
|
+
* Berkeley DB error handling
|
14
|
+
* Character encoding (assuming UTF8 everywhere)
|
15
|
+
* Zsh command completion
|
16
|
+
* Handle mismatched wallet versions
|
17
|
+
* Offer a read-only mode for satoshi-wallet commands
|
18
|
+
* Subcommand help for `rbcoin satoshi-wallet`
|
19
|
+
|
20
|
+
## Design
|
21
|
+
|
22
|
+
* OCP-compliant command system
|
23
|
+
|
24
|
+
## Specs
|
25
|
+
|
26
|
+
* A contract that commands return 0/1 on success/failure
|
27
|
+
* A contract that commands terminate with a newline
|
28
|
+
|
29
|
+
## Security
|
30
|
+
|
31
|
+
* Prevent data being written to swap
|
@@ -0,0 +1,15 @@
|
|
1
|
+
# RbCoin Ubiquitous Language
|
2
|
+
|
3
|
+
## Bitcoin
|
4
|
+
|
5
|
+
Terms defined here should be used consistently throughout the application user
|
6
|
+
interface, documentation and code
|
7
|
+
|
8
|
+
* Satoshi Client: The original Bitcoin client, referred to as the "Satoshi client" for clarity
|
9
|
+
* Satoshi Wallet: The wallet.dat file used by the Satoshi Client (a Berkeley DB file)
|
10
|
+
* Address: A Bitcoin address
|
11
|
+
* Tip Jar: A Bitcoin address published onymously, usually to collect anonymous tips
|
12
|
+
|
13
|
+
## Technical
|
14
|
+
|
15
|
+
* Value Object: an immutable object (Domain Driven Design sense)
|
@@ -0,0 +1,31 @@
|
|
1
|
+
Feature: Command help
|
2
|
+
In order to avoid being frustrated by being unable to interact with the application
|
3
|
+
As a user
|
4
|
+
I want to be told when I make a mistake
|
5
|
+
|
6
|
+
Scenario: `rbcoin`
|
7
|
+
When I successfully run `rbcoin`
|
8
|
+
Then the output should contain:
|
9
|
+
"""
|
10
|
+
Usage: rbcoin COMMAND ...
|
11
|
+
|
12
|
+
Commands:
|
13
|
+
help Display help about rbcoin and rbcoin commands
|
14
|
+
satoshi-wallet Manipulate the wallet.dat file of the original client
|
15
|
+
|
16
|
+
Use "rbcoin COMMAND --help" or "rbcoin help COMMAND" for help on a single command
|
17
|
+
Use "rbcoin --version" to see the rbcoin version number
|
18
|
+
Use "rbcoin --exact-version" to see the all version details (with dependencies)
|
19
|
+
"""
|
20
|
+
|
21
|
+
Scenario: `rbcoin help`
|
22
|
+
When I successfully run `rbcoin help`
|
23
|
+
Then the output should contain "Usage: rbcoin COMMAND ..."
|
24
|
+
|
25
|
+
Scenario: Invalid command
|
26
|
+
When I run `rbcoin thiscommanddoesnotexist`
|
27
|
+
Then it should fail with:
|
28
|
+
"""
|
29
|
+
rbcoin failed: No such command "thiscommanddoesnotexist"
|
30
|
+
Try: `rbcoin help`
|
31
|
+
"""
|