monero 0.0.0.1 → 0.0.0.2

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: dd84009849fb3291334b23b153374a56390dac55
4
- data.tar.gz: e772a95b40ea13a21aa82ac9bfc037837404ba45
3
+ metadata.gz: 8b0549acfa68f3efdc2d4a1a141a460ed180a699
4
+ data.tar.gz: a554fde5c534e43c9e019ae008630f8c792c9b05
5
5
  SHA512:
6
- metadata.gz: 45c2b677f3a24f406d8cd8366c8ac724e3ea675a4e9dd4b4b5664a2f4200de3ec2fe11a258384f4782e1da96810bf52e98024a3c1148a8acc2b7533ee6a79466
7
- data.tar.gz: e560bc30710f1cd45745f529f992fb5b490aebde01c8ae199348b3681d0f07b1fa5e21145a9f29ac9d97a3011db417e1019547ad9b2f4fb7989d75462d0e4065
6
+ metadata.gz: c756cdb2a4b451692e704219ad76b768f9ea3e183618fa1de2fe4207d0b111ebcd7e9e448e5fdca044aa3f149ddabb1fca919cdd9c415e80fed53fbc25e1ef12
7
+ data.tar.gz: dd78a9e2f341d2665ee4e7cb7277bde30e851914f44787723a163c9bc26cd9cc81eb9c8e8ea6c444d2675f50920af4a92ac1057b96fd94ca2c6317a4bc616684
@@ -0,0 +1 @@
1
+ monero-*.gem
data/README.md CHANGED
@@ -1,18 +1,117 @@
1
1
  # Monero Ruby Client
2
2
 
3
- Ruby client to connect and use Monero via monero-wallet-rpc.
3
+ Ruby client to connect and use [Monero Wallet RPC](https://getmonero.org/resources/developer-guides/wallet-rpc.html).
4
4
 
5
5
 
6
- Set your rpc details
6
+ ___
7
+ #### Disclaimer - before you start - *important notice!*
8
+ To try out please make sure that you run your **monerod** and your **monero-wallet-rpc** with the `--testnet` option. Always use the Testchain to play around. Be careful with your wallet, you might lose coins if you try out on the real chain.
7
9
 
8
- Monero.config.host = "192.168.1.226"
10
+ - Testnet Faucet: https://dis.gratis/
11
+ - Testnet Blockexplorer: https://testnet.xmrchain.com
12
+ ---
13
+
14
+
15
+
16
+
17
+ ## Installation
18
+ For easy installation add `gem 'monero'` to your Gemfile or run `gem install monero`
19
+
20
+
21
+ ## Preparation
22
+
23
+ Start your daemon `./monerod --testnet`
24
+
25
+ Start your RPC Client `./monero-wallet-rpc --testnet --rpc-bind-port 18081 --rpc-bind-ip 127.0.0.1 --rpc-login username:password --log-level 4 --wallet-dir ./`
26
+
27
+ - To open a wallet at start use `--wallet-file filename` and `--password pass`
28
+ - In case you need to access the client from another machine, you need to set `--confirm-external-bind`.
29
+ - To be able to create/open other wallets you need to specify `--wallet-file /path/to/wallets/on/your/machine`
30
+ - if you don't specify `--rpc-login` a file will be created that stores the login data (`cat monero-wallet-rpc.18081.login`)
31
+
32
+ ## Getting started
33
+
34
+ ### Configuration
35
+ Monero.config.host = "127.0.0.1"
9
36
  Monero.config.port = "18081"
10
37
  Monero.config.username = "username"
11
38
  Monero.config.password = "password"
12
39
 
13
40
 
14
- usage:
15
41
 
16
- Monero::Wallet.balance
42
+ ### Usage
43
+
44
+ Monero Ruby Client is very easy to use. Full documentation of RPC Client: https://getmonero.org/resources/developer-guides/wallet-rpc.html#transfer
45
+
46
+ ___
47
+
48
+
49
+ Get the current address
50
+
51
+ Monero::Wallet.address
52
+ => "9wm6oNA5nP3LnugTKRSwGJhW4vnYv8RAVdRvYyvbistbHUnojyTHyHcYpbZvbTZHDsi4rF1EK5TiYgnCN6FWM9HjTDpKXAE"
53
+ ___
54
+
55
+ Create a new address for a payment (integrated address)
56
+
57
+ Monero::Wallet.make_integrated_address
58
+ => {"integrated_address"=>"A7TmpAyaPeZLnugTKRSwGJhW4vnYv8RAVdRvYyvbistbHUnojyTHyHcYpbZvbTZHDsi4rF1EK5TiYgnCN6FWM9HjfufSYUchQ8hH2R272H",
59
+ "payment_id"=>"9d985c985ce58a8e"}
60
+ ___
61
+ To get the balance of the current wallet (we use the gem 'money')
62
+
63
+ Monero::Wallet.balance
64
+ # returns an ::XMR object which is just a shortcut for ::Money(amount, :xmr)
65
+ => #<Money fractional:9980629640000 currency:XMR>
66
+
67
+ Monero::Wallet.balance.format
68
+ => "9.980629640000 XMR"
69
+
70
+ ___
71
+ To get the current block height
72
+
73
+ Monero::Wallet.getheight
74
+ => 1008032
75
+
76
+
77
+ ___
78
+
79
+ Send XMR to an address via `Monero::Transfer.create`. If successfull you will get the transaction details. If not succesfull you'll get returned nil.
80
+
81
+ amount= 20075 #in atomic units. 1000000000000 == 1.0 XMR
82
+ Monero::Transfer.create("A7TmpAyaPeZLnugTKRSwGJhW4vnYv8RAVdRvYyvbistbHUnojyTHyHcYpbZvbTZHDsi4rF1EK5TiYgnCN6FWM9HjfwGRvbCHYCZAaKSzDx", amount)
83
+ => {"fee"=>19415760000,
84
+ "tx_blob"=>"020001020005bbcf0896e3.......
85
+
86
+
87
+ To send payments you can also specify the following options:
88
+
89
+ options = { fee: fee, mixin: 5, unlock_time: unlock_time, payment_id: "c7e7146b3335aa54", get_tx_key: true, priority: 0, do_not_relay: false, get_tx_hex: true}
90
+ Please note that `fee` is currently ignored by the chain.
91
+
92
+
93
+ To send payments to multiple recipients simply use an array of `[:recipient, :amount]`. For example:
94
+
95
+ recipients = [
96
+ {address:A7TmpAyaPeZLnugTKRSwGJhW4vnYv8RAVdRvYyvbistbHUnojyTHyHcYpbZvbTZHDsi4rF1EK5TiYgnCN6FWM9HjfwGRvbCHYCZAaKSzDx amount: 1599999},
97
+ {address:A7TmpAyaPeZLnugTKRSwGJhW4vnYv8RAVdRvYyvbistbHUnojyTHyHcYpbZvbTZHDsi4rF1EK5TiYgnCN6FWM9Hjftr1RgJ6RM4BMMPLUc amount: 130000},
98
+ {address:A7TmpAyaPeZLnugTKRSwGJhW4vnYv8RAVdRvYyvbistbHUnojyTHyHcYpbZvbTZHDsi4rF1EK5TiYgnCN6FWM9HjfrgPgAEasYGSVhUdwe amount: 442130000}
99
+ ]
100
+
101
+ Monero::Transfer.send_bulk(recipients, options)
102
+
103
+ ___
104
+
105
+
106
+ ## Donations
107
+ If this was useful you might consider a small donation:
108
+
109
+ - XMR: 4H19KAdSw1pL2v1iaEx31ngQCQcEGobUpevqtzSzKPTAEAt1Ay7NZrQgU6mnN2mVyWi7yk2ig68KsU8bfXQ45ainLTZFWU7m94yT3D9qUX
110
+ - BTC:
111
+ - LTC:
112
+
113
+
114
+
17
115
 
18
- ...
116
+ ## LICENSE
117
+ MIT
@@ -4,6 +4,7 @@ require 'monero/payment'
4
4
  require 'monero/client'
5
5
  require 'monero/version'
6
6
  require 'monero/wallet'
7
+ require 'monero/transfer'
7
8
 
8
9
  module Monero
9
10
  def self.config
@@ -1,20 +1,21 @@
1
1
  module Monero
2
2
  class Client
3
3
 
4
- def self.request(method, params=nil)
5
- params_string = ""
6
- if params
7
- # TODO multi params looping
8
- k,v = params.first
9
- params_string = '"'+k.to_s+'": "'+v.to_s+'"'
10
- end
11
-
12
- data = '{"jsonrpc":"2.0","id":"0","method": "'+method+'", "params": { '+params_string+' } }'
4
+ def self.close!
5
+ request("stop_wallet")
6
+ end
7
+
8
+ def self.request(method, params="")
9
+ data = '{"jsonrpc":"2.0","id":"0","method": "'+method+'", "params": '+params.to_json+' }'
10
+
13
11
  args = " -s"
14
12
  args << " -u #{Monero.config.username}:#{Monero.config.password} --digest"
15
13
  args << " -X POST #{base_uri}/json_rpc"
16
14
  args << " -d '#{data}'"
17
15
  args << " -H 'Content-Type: application/json'"
16
+
17
+ p "curl #{args}" if Monero.config.debug
18
+
18
19
  json = JSON.parse(`curl #{args}`)
19
20
  json["result"]
20
21
  end
@@ -26,5 +27,5 @@ module Monero
26
27
  end
27
28
 
28
29
  end
29
-
30
+
30
31
  end
@@ -1,9 +1,7 @@
1
1
  require 'singleton'
2
-
3
2
  module Monero
4
3
  class Config
5
4
  include Singleton
6
- attr_accessor :host, :port, :username, :password
7
-
5
+ attr_accessor :host, :port, :username, :password, :debug
8
6
  end
9
7
  end
@@ -0,0 +1,55 @@
1
+ # transfer
2
+ # Send monero to a number of recipients.
3
+ # Inputs:
4
+ # destinations - array of destinations to receive XMR:
5
+ # amount - unsigned int; Amount to send to each destination, in atomic units.
6
+ # address - string; Destination public address.
7
+
8
+ # fee - unsigned int; Ignored, will be automatically calculated.
9
+
10
+ # mixin - unsigned int; Number of outpouts from the blockchain to mix with (0 means no mixing).
11
+
12
+ # unlock_time - unsigned int; Number of blocks before the monero can be spent (0 to not add a lock).
13
+
14
+ # payment_id - string; (Optional) Random 32-byte/64-character hex string to identify a transaction.
15
+
16
+ # get_tx_key - boolean; (Optional) Return the transaction key after sending.
17
+
18
+ # priority - unsigned int; Set a priority for the transaction. Accepted Values are: 0-3 for: default, unimportant, normal, elevated, priority.
19
+
20
+ # do_not_relay - boolean; (Optional) If true, the newly created transaction will not be relayed to the monero network. (Defaults to false)
21
+
22
+ # get_tx_hex - boolean; Return the transaction as hex string after sending
23
+
24
+
25
+ module Monero
26
+ # => {"integrated_address"=>"A7TmpAyaPeZLnugTKRSwGJhW4vnYv8RAVdRvYyvbistbHUnojyTHyHcYpbZvbTZHDsi4rF1EK5TiYgnCN6FWM9HjfwGRvbCHYCZAaKSzDx", "payment_id"=>"c7e7146b3335aa54"}
27
+
28
+ class Transfer
29
+
30
+ def self.create(address, amount, args={})
31
+ send_bulk([address: address, amount: amount], args)
32
+ end
33
+
34
+ def self.send_bulk(destinations, args={})
35
+
36
+ mixin = args.fetch(:mixin, 4)
37
+ fee = args.fetch(:fee, 1) # ignored anyways
38
+ unlock_time = args.fetch(:unlock_time, 0)
39
+ payment_id = args.fetch(:payment_id, nil)
40
+ get_tx_key = args.fetch(:get_tx_key, true)
41
+ priority = args.fetch(:priority, 0)
42
+ do_not_relay = args.fetch(:do_not_relay, false)
43
+ get_tx_hex = args.fetch(:get_tx_hex, false)
44
+
45
+
46
+ options = {
47
+ destinations: destinations, fee: fee, mixin: mixin, unlock_time: unlock_time,
48
+ payment_id: payment_id, get_tx_key: get_tx_key, priority: priority, do_not_relay: do_not_relay, get_tx_hex: get_tx_hex
49
+ }
50
+
51
+ Monero::Client.request("transfer", options)
52
+ end
53
+
54
+ end
55
+ end
@@ -1,3 +1,3 @@
1
1
  module Monero
2
- VERSION = "0.0.0.1"
2
+ VERSION = "0.0.0.2"
3
3
  end
@@ -31,6 +31,9 @@ module Monero
31
31
  raise ArgumentError unless ["mnemonic", "view_key"].include?(type.to_s)
32
32
  Monero::Client.request("query_key", {key_type: type})["key"]
33
33
  end
34
+ def self.view_key; query_key(:view_key); end
35
+ def self.mnemonic_seed; query_key(:mnemonic); end
36
+
34
37
 
35
38
  def self.make_integrated_address(payment_id = "")
36
39
  # TODO
@@ -51,10 +54,63 @@ module Monero
51
54
  payments.map{|x| Payment.from_raw(x) }
52
55
  end
53
56
 
57
+
58
+ # in - boolean;
59
+ # out - boolean;
60
+ # pending - boolean;
61
+ # failed - boolean;
62
+ # pool - boolean;
63
+ # filter_by_height - boolean;
64
+ # min_height - unsigned int;
65
+ # max_height - unsigned int;
66
+ def self.get_transfers(args={})
67
+ f_in = args.fetch(:in, true)
68
+ out = args.fetch(:out, false)
69
+ pending = args.fetch(:pending, true)
70
+ failed = args.fetch(:failed, false)
71
+ pool = args.fetch(:pool, true)
72
+ filter_by_height = args.fetch(:filter_by_height, false)
73
+ min_height = args.fetch(:min_height, 0)
74
+ max_height = args.fetch(:max_height, 0)
75
+
76
+ options = {in: f_in, out: out, pending: pending, failed: failed, pool: pool, filter_by_height: filter_by_height, min_height: min_height, max_height: max_height}
77
+
78
+ Monero::Client.request("get_transfers", options)
79
+ end
80
+
54
81
  def self.get_transfer_by_txid(txid)
55
82
  Monero::Client.request("get_transfer_by_txid", {txid: txid })
56
83
  end
57
84
 
85
+ # creates a wallet and uses it
86
+ # if wallet exists, will automatically uses it!
87
+ def self.create_wallet(filename, password, language="English")
88
+ # TODO
89
+ # language correct format?
90
+ options = { filename: filename, password: password, language: language }
91
+ !! Monero::Client.request("create_wallet", options)
92
+ end
93
+ singleton_class.send(:alias_method, :create, :create_wallet)
94
+
95
+ # returns current balance if open successfull
96
+ def self.open_wallet(filename, password)
97
+ options = { filename: filename, password: password}
98
+ if Monero::Client.request("open_wallet", options)
99
+ balance
100
+ else
101
+ false
102
+ end
103
+ end
104
+ singleton_class.send(:alias_method, :open, :open_wallet)
105
+
106
+ # stops current wallet
107
+ def self.stop_wallet
108
+ Monero::Client.close!
109
+ end
110
+ singleton_class.send(:alias_method, :close, :stop_wallet)
111
+
112
+
113
+
58
114
  end
59
115
 
60
116
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: monero
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.0.1
4
+ version: 0.0.0.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Tim Kretschmer
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2017-09-27 00:00:00.000000000 Z
11
+ date: 2017-09-29 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -73,11 +73,13 @@ executables: []
73
73
  extensions: []
74
74
  extra_rdoc_files: []
75
75
  files:
76
+ - ".gitignore"
76
77
  - README.md
77
78
  - lib/monero.rb
78
79
  - lib/monero/client.rb
79
80
  - lib/monero/config.rb
80
81
  - lib/monero/payment.rb
82
+ - lib/monero/transfer.rb
81
83
  - lib/monero/version.rb
82
84
  - lib/monero/wallet.rb
83
85
  - lib/xmr.rb