dogecoin-client 0.0.3

Sign up to get free protection for your applications and to get access to all the features.
Files changed (47) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +5 -0
  3. data/.travis.yml +18 -0
  4. data/Gemfile +13 -0
  5. data/README.rdoc +71 -0
  6. data/Rakefile +8 -0
  7. data/dogecoin-client.gemspec +28 -0
  8. data/lib/dogecoin/api.rb +33 -0
  9. data/lib/dogecoin/client.rb +279 -0
  10. data/lib/dogecoin/dsl.rb +270 -0
  11. data/lib/dogecoin/errors.rb +4 -0
  12. data/lib/dogecoin/request.rb +35 -0
  13. data/lib/dogecoin/rpc.rb +51 -0
  14. data/lib/dogecoin/version.rb +12 -0
  15. data/lib/dogecoin-client.rb +1 -0
  16. data/lib/dogecoin.rb +19 -0
  17. data/spec/fixtures/backupwallet_without_params.json +8 -0
  18. data/spec/fixtures/build_fixture.rb +19 -0
  19. data/spec/fixtures/getbalance.json +8 -0
  20. data/spec/fixtures/getbestblockhash.json +8 -0
  21. data/spec/fixtures/getblock.json +8 -0
  22. data/spec/fixtures/getblockcount.json +8 -0
  23. data/spec/fixtures/getblockhash.json +8 -0
  24. data/spec/fixtures/getblocknumber.json +8 -0
  25. data/spec/fixtures/getconnectioncount.json +8 -0
  26. data/spec/fixtures/getdifficulty.json +8 -0
  27. data/spec/fixtures/getgenerate.json +8 -0
  28. data/spec/fixtures/gethashespersec.json +8 -0
  29. data/spec/fixtures/getinfo.json +8 -0
  30. data/spec/fixtures/getmininginfo.json +8 -0
  31. data/spec/fixtures/help.json +8 -0
  32. data/spec/fixtures/listreceivedbyaddress_with_minconf_0.json +8 -0
  33. data/spec/fixtures/listreceivedbyaddress_with_minconf_0_and_includeempty_true.json +7 -0
  34. data/spec/fixtures/listreceivedbyaddress_without_params.json +7 -0
  35. data/spec/fixtures/setaccount.json +8 -0
  36. data/spec/fixtures/signmessage_invalid_address.json +8 -0
  37. data/spec/fixtures/signmessage_success.json +8 -0
  38. data/spec/fixtures/verifymessage_failure.json +8 -0
  39. data/spec/fixtures/verifymessage_success.json +8 -0
  40. data/spec/lib/dogecoin/api_spec.rb +28 -0
  41. data/spec/lib/dogecoin/client_spec.rb +196 -0
  42. data/spec/lib/dogecoin/request_spec.rb +19 -0
  43. data/spec/lib/dogecoin_spec.rb +34 -0
  44. data/spec/spec_helper.rb +18 -0
  45. data/spec/support/fixtures_helper.rb +5 -0
  46. data/spec/support/rpc_service_helper.rb +34 -0
  47. metadata +173 -0
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: ed8a191e38c223a2ad66b5743b0a436ce9686775
4
+ data.tar.gz: b07d1916800f7c3b8c3b342bc0346b1b5a88fcb6
5
+ SHA512:
6
+ metadata.gz: 8c00236aa985180ee251ad90d5588f2a2e2452bd1eeeefda522b792ef77403ea56a60cf79231394b30e1a2ba5ce2a08fb06f9460a7a73516691393af4894b355
7
+ data.tar.gz: 37f5fedd23d786e170d018c01026feeb772c3979b2b065f59712b38042441631c544e7f1996f39875068ca64383e7a85762f16fd32f4a91936a2326fa5890c62
data/.gitignore ADDED
@@ -0,0 +1,5 @@
1
+ *.gem
2
+ .bundle
3
+ Gemfile.lock
4
+ pkg/*
5
+ coverage
data/.travis.yml ADDED
@@ -0,0 +1,18 @@
1
+ rvm:
2
+ - 1.8.7
3
+ - 1.9.2
4
+ - 1.9.3
5
+ - 2.0.0
6
+ - ree
7
+ - jruby
8
+ - ruby-head
9
+ - rbx-2.0
10
+
11
+ matrix:
12
+ allow_failures:
13
+ - rvm: rbx-2.0
14
+ - rvm: jruby
15
+ - rvm: ruby-head
16
+ - rvm: 1.8.7
17
+ - rvm: ree
18
+ - rvm: 1.9.2
data/Gemfile ADDED
@@ -0,0 +1,13 @@
1
+ source "http://rubygems.org"
2
+
3
+ # Specify your gem's dependencies in dogecoin-client.gemspec
4
+ gemspec
5
+
6
+ platforms :ruby_18 do
7
+ gem 'json'
8
+ end
9
+
10
+ platforms :jruby do
11
+ gem 'json'
12
+ gem 'jruby-openssl'
13
+ end
data/README.rdoc ADDED
@@ -0,0 +1,71 @@
1
+ == dogecoin-ruby
2
+
3
+ Provides a Ruby library to the complete Dogecoin JSON-RPC API.
4
+
5
+ == Installation
6
+
7
+ On Ruby 1.9, you can just install the gem and start using it. On 1.8, the 'json' gem is also required, so you'll need to install that first:
8
+
9
+ gem install json
10
+
11
+ == Usage
12
+
13
+ As with most Ruby gems, you first need to require the library into your project:
14
+
15
+ require 'dogecoin'
16
+
17
+ After doing this, the simplest possible usage looks like this:
18
+
19
+ Dogecoin('username', 'password').balance
20
+ # => 0.001
21
+
22
+ Or, if you prefer a somewhat more explicit representation, the following code performs the exact
23
+ same task:
24
+
25
+ client = Dogecoin::Client.new('username', 'password')
26
+ client.balance
27
+ # => 0.001
28
+
29
+ The third and final way to use the library is by taking advantage of a simple DSL:
30
+
31
+ include Dogecoin
32
+
33
+ # set up credentials
34
+ username 'username'
35
+ password 'password'
36
+
37
+ balance
38
+ # => 0.001
39
+
40
+ accounts
41
+ # => {"account" => 0.001}
42
+
43
+ == Host, Port and SSL
44
+
45
+ Here are several examples of how you can change the host information:
46
+
47
+
48
+ Dogecoin('username', 'password', :host => 'example.com', :port => 22555, :ssl => true)
49
+ client = Dogecoin::Client.new('username', 'password', :host => 'example.com')
50
+ client.port = 22555
51
+ port 22555
52
+ ssl?
53
+ # => false
54
+ ssl true
55
+ ssl?
56
+ # => true
57
+
58
+ You should see the Dogecoin::Client class documentation if you'd like to see the other options and methods
59
+ that are made available.
60
+
61
+
62
+ == Donations
63
+
64
+ If you found this library useful and feel inclined to compensate me for my trouble, I'm certainly not going to turn you down!
65
+
66
+ Dogecoin donations can be sent to:
67
+
68
+ DNjbbUqsNipNkPeoEit5maYryxAJdLCWz8
69
+
70
+ Thanks!
71
+
data/Rakefile ADDED
@@ -0,0 +1,8 @@
1
+ require "bundler/gem_tasks"
2
+ require 'rspec/core/rake_task'
3
+
4
+ desc 'Default: run specs.'
5
+ task :default => :spec
6
+
7
+ desc "Run specs"
8
+ RSpec::Core::RakeTask.new
@@ -0,0 +1,28 @@
1
+ # -*- encoding: utf-8 -*-
2
+ $:.push File.expand_path("../lib", __FILE__)
3
+ require "dogecoin/version"
4
+
5
+ Gem::Specification.new do |s|
6
+ s.licenses = [ 'MIT' ]
7
+ s.name = "dogecoin-client"
8
+ s.version = Dogecoin::VERSION
9
+ s.authors = ["Anthony Eufemio"]
10
+ s.email = ["tymat@pris.im"]
11
+ s.homepage = "http://github.com/tymat/dogecoin-client"
12
+ s.summary = %q{Provides a Ruby library to the complete Dogecoin JSON-RPC API.}
13
+ s.description = "Provides a Ruby library to the complete Dogecoin JSON-RPC API. "
14
+
15
+ s.rubyforge_project = "dogecoin-client"
16
+
17
+ s.files = `git ls-files`.split("\n")
18
+ s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
19
+ s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
20
+ s.require_paths = ["lib"]
21
+
22
+ s.add_development_dependency "rake", '~> 0.9'
23
+ s.add_development_dependency "bundler"
24
+ s.add_development_dependency "rspec", '~> 2.6'
25
+ s.add_development_dependency "fakeweb", '~> 1.3'
26
+ s.add_development_dependency "coveralls"
27
+ s.add_runtime_dependency "rest-client"
28
+ end
@@ -0,0 +1,33 @@
1
+ class Dogecoin::API
2
+ attr_reader :options
3
+ attr_reader :params
4
+
5
+ def user; options[:user]; end
6
+ def pass; options[:pass]; end
7
+ def host; options[:host]; end
8
+ def port; options[:port]; end
9
+ def ssl; options[:ssl]; end
10
+ def ssl?; options[:ssl]; end
11
+ def user=(a); options[:user] = a; end
12
+ def pass=(a); options[:pass] = a; end
13
+ def host=(a); options[:host] = a; end
14
+ def port=(a); options[:port] = a; end
15
+ def ssl=(a); options[:ssl] = a; end
16
+
17
+ def initialize(options = {})
18
+ @options = {
19
+ :host => 'localhost',
20
+ :port => 22555,
21
+ :ssl => false
22
+ }.merge(options)
23
+ end
24
+
25
+ def to_hash
26
+ @options.dup
27
+ end
28
+
29
+ def request(service_name, *params)
30
+ req = Dogecoin::Request.new(service_name, params)
31
+ Dogecoin::RPC.new(to_hash).dispatch(req)
32
+ end
33
+ end
@@ -0,0 +1,279 @@
1
+ class Dogecoin::Client
2
+ attr_reader :api
3
+ def user; api.user; end
4
+ def pass; api.pass; end
5
+ def host; api.host; end
6
+ def port; api.port; end
7
+ def ssl; api.ssl; end
8
+ def ssl?; api.ssl?; end
9
+ def user=(a); api.user = a; end
10
+ def pass=(a); api.pass = a; end
11
+ def host=(a); api.host = a; end
12
+ def port=(a); api.port = a; end
13
+ def ssl=(a); api.ssl = a; end
14
+
15
+ def options
16
+ api.options
17
+ end
18
+
19
+ def initialize(user, pass, options = {})
20
+ @api = Dogecoin::API.new({ :user => user, :pass => pass }.merge(options))
21
+ end
22
+
23
+ # Safely copies wallet.dat to destination, which can be a directory or a path with filename.
24
+ def backupwallet(destination)
25
+ @api.request 'backupwallet', destination
26
+ end
27
+
28
+ # Returns the account associated with the given address.
29
+ def getaccount(dogecoinaddress)
30
+ @api.request 'getaccount', dogecoinaddress
31
+ end
32
+
33
+ # Returns the current dogecoin address for receiving payments to this account.
34
+ def getaccountaddress(account)
35
+ @api.request 'getaccountaddress', account
36
+ end
37
+
38
+ # Returns the list of addresses for the given account.
39
+ def getaddressesbyaccount(account)
40
+ @api.request 'getaddressesbyaccount', account
41
+ end
42
+
43
+ # If +account+ is not specified, returns the server's total available balance.
44
+ # If +account+ is specified, returns the balance in the account.
45
+ def getbalance(account = nil, minconf = 1)
46
+ @api.request 'getbalance', account, minconf
47
+ end
48
+
49
+ # Dumps the block existing at specified height.
50
+ # Note: this is not available in the official release
51
+ def getblockbycount(height)
52
+ @api.request 'getblockbycount', height
53
+ end
54
+
55
+ # Dumps the block existing with specified hash.
56
+ def getblock(hash)
57
+ block = @api.request 'getblock', hash
58
+ block["time"] = Time.at(block["time"]).utc
59
+ block
60
+ end
61
+
62
+ # Returns the number of blocks in the longest block chain.
63
+ def getblockcount
64
+ @api.request 'getblockcount'
65
+ end
66
+
67
+ # Returns the block number of the latest block in the longest block chain.
68
+ def getblocknumber
69
+ @api.request 'getblocknumber'
70
+ end
71
+
72
+ # Returns the number of connections to other nodes.
73
+ def getconnectioncount
74
+ @api.request 'getconnectioncount'
75
+ end
76
+
77
+ # Returns the proof-of-work difficulty as a multiple of the minimum difficulty.
78
+ def getdifficulty
79
+ @api.request 'getdifficulty'
80
+ end
81
+
82
+ # Returns true or false whether dogecoind is currently generating hashes
83
+ def getgenerate
84
+ @api.request 'getgenerate'
85
+ end
86
+
87
+ # Returns a recent hashes per second performance measurement while generating.
88
+ def gethashespersec
89
+ @api.request 'gethashespersec'
90
+ end
91
+
92
+ # Returns the hash given a block id
93
+ def getblockhash(idx)
94
+ @api.request 'getblockhash', idx
95
+ end
96
+
97
+ # Returns the hash of the best (tip) block in the longest block chain.
98
+ def getbestblockhash
99
+ @api.request 'getbestblockhash'
100
+ end
101
+
102
+ # Returns an object containing various state info.
103
+ def getinfo
104
+ @api.request 'getinfo'
105
+ end
106
+
107
+ # Returns an object containing mining info.
108
+ def getmininginfo
109
+ @api.request 'getmininginfo'
110
+ end
111
+
112
+ # Returns a new dogecoin address for receiving payments. If +account+ is specified (recommended),
113
+ # it is added to the address book so payments received with the address will be credited to +account+.
114
+ def getnewaddress(account = nil)
115
+ @api.request 'getnewaddress', account
116
+ end
117
+
118
+ # Returns the total amount received by addresses with +account+ in transactions
119
+ # with at least +minconf+ confirmations.
120
+ def getreceivedbyaccount(account, minconf = 1)
121
+ @api.request 'getreceivedbyaccount', account, minconf
122
+ end
123
+
124
+ # Returns the total amount received by +dogecoinaddress+ in transactions with at least +minconf+ confirmations.
125
+ def getreceivedbyaddress(dogecoinaddress, minconf = 1)
126
+ @api.request 'getreceivedbyaddress', dogecoinaddress, minconf
127
+ end
128
+
129
+ # Get detailed information about +txid+
130
+ def gettransaction(txid)
131
+ @api.request 'gettransaction', txid
132
+ end
133
+
134
+ # If +data+ is not specified, returns formatted hash data to work on:
135
+ #
136
+ # :midstate => precomputed hash state after hashing the first half of the data
137
+ # :data => block data
138
+ # :hash1 => formatted hash buffer for second hash
139
+ # :target => little endian hash target
140
+ #
141
+ # If +data+ is specified, tries to solve the block and returns true if it was successful.
142
+ def getwork(data = nil)
143
+ @api.request 'getwork', data
144
+ end
145
+
146
+ # List commands, or get help for a command.
147
+ def help(command = nil)
148
+ @api.request 'help', command
149
+ end
150
+
151
+ # Returns Object that has account names as keys, account balances as values.
152
+ def listaccounts(minconf = 1)
153
+ @api.request 'listaccounts', minconf
154
+ end
155
+
156
+ # Returns an array of objects containing:
157
+ #
158
+ # :account => the account of the receiving addresses
159
+ # :amount => total amount received by addresses with this account
160
+ # :confirmations => number of confirmations of the most recent transaction included
161
+ #
162
+ def listreceivedbyaccount(minconf = 1, includeempty = false)
163
+ @api.request 'listreceivedbyaccount', minconf, includeempty
164
+ end
165
+
166
+ # Returns an array of objects containing:
167
+ #
168
+ # :address => receiving address
169
+ # :account => the account of the receiving address
170
+ # :amount => total amount received by the address
171
+ # :confirmations => number of confirmations of the most recent transaction included
172
+ #
173
+ # To get a list of accounts on the system, execute dogecoind listreceivedbyaddress 0 true
174
+ def listreceivedbyaddress(minconf = 1, includeempty = false)
175
+ @api.request 'listreceivedbyaddress', minconf, includeempty
176
+ end
177
+
178
+ # Returns up to +count+ most recent transactions for account +account+.
179
+ def listtransactions(account, count = 10)
180
+ @api.request 'listtransactions', account, count
181
+ end
182
+
183
+ # Move from one account in your wallet to another.
184
+ def move(fromaccount, toaccount, amount, minconf = 1, comment = nil)
185
+ @api.request 'move', fromaccount, toaccount, amount, minconf, comment
186
+ end
187
+
188
+ # +amount+ is a real and is rounded to 8 decimal places. Returns the transaction ID if successful.
189
+ def sendfrom(fromaccount, todogecoinaddress, amount, minconf = 1, comment = nil, comment_to = nil)
190
+ @api.request 'sendfrom', fromaccount, todogecoinaddress, amount, minconf, comment, comment_to
191
+ end
192
+
193
+ # +amount+ is a real and is rounded to 8 decimal places
194
+ def sendtoaddress(dogecoinaddress, amount, comment = nil, comment_to = nil)
195
+ @api.request 'sendtoaddress', dogecoinaddress, amount, comment, comment_to
196
+ end
197
+
198
+ def sendmany(fromaccount, addresses_amounts, minconf = 1, comment = nil)
199
+ @api.request 'sendmany', fromaccount, addresses_amounts, minconf, comment
200
+ end
201
+
202
+ # Sets the account associated with the given address.
203
+ def setaccount(dogecoinaddress, account)
204
+ @api.request 'setaccount', dogecoinaddress, account
205
+ end
206
+
207
+ # +generate+ is true or false to turn generation on or off.
208
+ # Generation is limited to +genproclimit+ processors, -1 is unlimited.
209
+ def setgenerate(generate, genproclimit = -1)
210
+ @api.request 'setgenerate', generate, genproclimit
211
+ end
212
+
213
+ # Stop dogecoin server.
214
+ def stop
215
+ @api.request 'stop'
216
+ end
217
+
218
+ # Return information about +dogecoinaddress+.
219
+ def validateaddress(dogecoinaddress)
220
+ @api.request 'validateaddress', dogecoinaddress
221
+ end
222
+
223
+ # Sign a message using +dogecoinaddress+.
224
+ def signmessage(dogecoinaddress, message)
225
+ @api.request 'signmessage', dogecoinaddress, message
226
+ end
227
+
228
+ # Verify signature made by +dogecoinaddress+.
229
+ def verifymessage(dogecoinaddress, signature, message)
230
+ @api.request 'verifymessage', dogecoinaddress, signature, message
231
+ end
232
+
233
+ # Stores the wallet decryption key in memory for +timeout+ seconds.
234
+ def walletpassphrase(passphrase, timeout)
235
+ @api.request 'walletpassphrase', passphrase, timeout
236
+ end
237
+
238
+ # Removes the wallet encryption key from memory, locking the wallet.
239
+ # After calling this method, you will need to call walletpassphrase again
240
+ # before being able to call any methods which require the wallet to be
241
+ # unlocked.
242
+ def walletlock
243
+ @api.request 'walletlock'
244
+ end
245
+
246
+ alias account getaccount
247
+ alias account_address getaccountaddress
248
+ alias addresses_by_account getaddressesbyaccount
249
+ alias balance getbalance
250
+ alias block_by_count getblockbycount
251
+ alias block_count getblockcount
252
+ alias block_number getblocknumber
253
+ alias connection_count getconnectioncount
254
+ alias difficulty getdifficulty
255
+ alias generate? getgenerate
256
+ alias hashes_per_sec gethashespersec
257
+ alias info getinfo
258
+ alias new_address getnewaddress
259
+ alias received_by_account getreceivedbyaccount
260
+ alias received_by_address getreceivedbyaddress
261
+ alias transaction gettransaction
262
+ alias work getwork
263
+ alias get_work getwork
264
+ alias accounts listaccounts
265
+ alias list_received_by_account listreceivedbyaccount
266
+ alias list_received_by_address listreceivedbyaddress
267
+ alias transactions listtransactions
268
+ alias list_transactions listtransactions
269
+ alias send_from sendfrom
270
+ alias send_to_address sendtoaddress
271
+ alias send_many sendmany
272
+ alias account= setaccount
273
+ alias set_account setaccount
274
+ alias generate= setgenerate
275
+ alias set_generate setgenerate
276
+ alias validate_address validateaddress
277
+ alias sign_message signmessage
278
+ alias verify_message verifymessage
279
+ end