RecordsKeeperRubyLib 0.1.0 → 0.1.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (39) hide show
  1. checksums.yaml +5 -5
  2. data/.gitignore +2 -1
  3. data/CODE_OF_CONDUCT.md +0 -8
  4. data/Gemfile +0 -1
  5. data/Gemfile.lock +4 -62
  6. data/LICENSE.txt +2 -2
  7. data/README.md +92 -1
  8. data/{RecordsKeeperRuby.gemspec → RecordsKeeperRubyLib.gemspec} +4 -5
  9. data/bin/console +1 -1
  10. data/config.yaml +8 -0
  11. data/docs/{addressdoc.rb → address_doc.rb} +105 -116
  12. data/docs/{assetsdoc.rb → asset_doc.rb} +54 -65
  13. data/docs/block_doc.rb +63 -0
  14. data/docs/blockchain_doc.rb +77 -0
  15. data/docs/{permissionsdoc.rb → permissions_doc.rb} +54 -65
  16. data/docs/{streamdoc.rb → stream_doc.rb} +79 -84
  17. data/docs/{transactiondoc.rb → transaction_doc.rb} +110 -121
  18. data/docs/{walletdoc.rb → wallet_doc.rb} +122 -133
  19. data/lib/RecordsKeeperRubyLib.rb +9 -0
  20. data/lib/{RecordsKeeperRuby → RecordsKeeperRubyLib}/address.rb +198 -186
  21. data/lib/{RecordsKeeperRuby → RecordsKeeperRubyLib}/assets.rb +99 -87
  22. data/lib/{RecordsKeeperRuby → RecordsKeeperRubyLib}/block.rb +94 -89
  23. data/lib/{RecordsKeeperRuby → RecordsKeeperRubyLib}/blockchain.rb +148 -135
  24. data/lib/RecordsKeeperRubyLib/config.yaml +8 -0
  25. data/lib/{RecordsKeeperRuby → RecordsKeeperRubyLib}/permissions.rb +77 -77
  26. data/lib/RecordsKeeperRubyLib/stream.rb +220 -0
  27. data/lib/{RecordsKeeperRuby → RecordsKeeperRubyLib}/transaction.rb +213 -182
  28. data/lib/RecordsKeeperRubyLib/version.rb +3 -0
  29. data/lib/{RecordsKeeperRuby → RecordsKeeperRubyLib}/wallet.rb +263 -252
  30. data/lib/config.yaml +8 -0
  31. metadata +27 -41
  32. data/docs/blockchaindoc.rb +0 -77
  33. data/docs/blockdoc.rb +0 -76
  34. data/lib/RecordsKeeperRuby.rb +0 -9
  35. data/lib/RecordsKeeperRuby/sample_config.yaml +0 -60
  36. data/lib/RecordsKeeperRuby/stream.rb +0 -169
  37. data/lib/RecordsKeeperRuby/version.rb +0 -3
  38. data/lib/sample_config.yaml +0 -60
  39. data/sample_config.yaml +0 -60
@@ -1,89 +1,94 @@
1
- # Library to work with RecordsKeeper blocks.
2
-
3
- # You can retrieve complete block information by using block class.
4
- # You just have to pass parameters to invoke the pre-defined functions.
5
-
6
- # Import the following libraries
7
-
8
- require 'rubygems'
9
- require 'httparty'
10
- require 'json'
11
- require 'binary_parser'
12
- require 'yaml'
13
-
14
- module RecordsKeeperRuby
15
- class Block
16
-
17
- #Entry point for accessing Block class resources.
18
- #Import values from config file.
19
- cfg = YAML::load(File.open('config.yaml','r'))
20
- @network = cfg['testnet'] # Network variable to store the networrk that you want to access
21
- if @network==cfg['testnet']
22
- @url = cfg['testnet']['url']
23
- @user = cfg['testnet']['rkuser']
24
- @password = cfg['testnet']['passwd']
25
- @chain = cfg['testnet']['chain']
26
- else
27
- @url = cfg['mainnet']['url']
28
- @user = cfg['mainnet']['rkuser']
29
- @password = cfg['mainnet']['passwd']
30
- @chain = cfg['mainnet']['chain']
31
- end
32
-
33
- def self.variable
34
- net = @network
35
- return net
36
- end
37
-
38
- def self.blockinfo block_height
39
- auth = {:username => @user, :password => @password}
40
- options = {
41
- :headers => headers= {"Content-Type"=> "application/json","Cache-Control" => "no-cache"},
42
- :basic_auth => auth,
43
- :body => [ {"method":"getblock","params":[block_height],"jsonrpc":2.0,"id":"curltext","chain_name":@chain}].to_json
44
- }
45
- response = HTTParty.get(@url, options)
46
- out = response.parsed_response
47
- tx_count_number = out[0]['result']['tx']
48
- tx_count = tx_count_number.length # variable returns block's transaction count
49
- miner = out[0]['result']['miner'] # variable returns block's miner
50
- size = out[0]['result']['size'] # variable returns block's size
51
- nonce = out[0]['result']['nonce'] # variable returns block's nonce
52
- blockHash = out[0]['result']['hash'] # variable returns blockhash
53
- prevblock = out[0]['result']['previousblockhash'] # variable returns prevblockhash
54
- nextblock = out[0]['result']['nextblockhash'] # variable returns nextblockhash
55
- merkleroot = out[0]['result']['merkleroot'] # variable returns merkleroot
56
- blocktime = out[0]['result']['time'] # variable returns blocktime
57
- difficulty = out[0]['result']['difficulty'] # variable returns difficulty
58
- tx = [] # list to store transaction ids
59
- for i in 0...tx_count
60
- tx.push(out[0]['result']['tx'][i]) # pushes transaction ids onto tx list
61
- end
62
- return tx_count, tx, miner, size, nonce, blockHash, prevblock, nextblock, merkleroot, blocktime, difficulty;
63
- end
64
-
65
- def self.retrieveBlocks block_range
66
- blockhash = []
67
- miner = []
68
- blocktime = []
69
- tx_count = []
70
- auth = {:username => @user, :password => @password}
71
- options = {
72
- :headers => headers= {"Content-Type"=> "application/json","Cache-Control" => "no-cache"},
73
- :basic_auth => auth,
74
- :body => [ {"method":"listblocks","params":[block_range],"jsonrpc":2.0,"id":"curltext","chain_name":@chain}].to_json
75
- }
76
- response = HTTParty.get(@url, options)
77
- out = response.parsed_response
78
- block_count_len = out[0]['result']
79
- block_count = block_count_len.length
80
- for i in 0...block_count
81
- blockhash.push(out[0]['result'][i]['hash'])
82
- miner.push(out[0]['result'][i]['miner'])
83
- blocktime.push(out[0]['result'][i]['time'])
84
- tx_count.push(out[0]['result'][i]['txcount'])
85
- end
86
- return blockhash, miner, blocktime, tx_count;
87
- end
88
- end
89
- end
1
+ # Library to work with RecordsKeeper blocks.
2
+
3
+ # You can retrieve complete block information by using block class.
4
+ # You just have to pass parameters to invoke the pre-defined functions.
5
+
6
+ # Import the following libraries
7
+
8
+ require 'rubygems'
9
+ require 'httparty'
10
+ require 'json'
11
+ require 'binary_parser'
12
+ require 'yaml'
13
+
14
+ module RecordsKeeperRubyLib
15
+ class Block
16
+ # # Entry point for accessing Block class functions
17
+ if File.exist?('config.yaml')
18
+ # Import values from configuration file.
19
+ cfg = YAML::load(File.open('config.yaml','r'))
20
+
21
+ @url = cfg['url']
22
+ @user = cfg['rkuser']
23
+ @password = cfg['passwd']
24
+ @chain = cfg['chain']
25
+
26
+ else
27
+ #Import using ENV variables
28
+
29
+ @url = ENV['url']
30
+ @user = ENV['rkuser']
31
+ @password = ENV['passwd']
32
+ @chain = ENV['chain']
33
+ end
34
+
35
+ # function to retrieve data of a particular block no.
36
+ def self.blockinfo block_height
37
+ height = block_height.to_s
38
+ auth = {:username => @user, :password => @password}
39
+ options = {
40
+ :headers => headers= {"Content-Type"=> "application/json","Cache-Control" => "no-cache"},
41
+ :basic_auth => auth,
42
+ :body => [ {"method":"getblock","params":[height],"jsonrpc":2.0,"id":"curltext","chain_name":@chain}].to_json
43
+ }
44
+ response = HTTParty.get(@url, options)
45
+ out = response.parsed_response
46
+ tx_count_number = out[0]['result']['tx']
47
+ tx_count = tx_count_number.length # variable returns block's transaction count
48
+ miner = out[0]['result']['miner'] # variable returns block's miner
49
+ size = out[0]['result']['size'] # variable returns block's size
50
+ nonce = out[0]['result']['nonce'] # variable returns block's nonce
51
+ blockHash = out[0]['result']['hash'] # variable returns blockhash
52
+ prevblock = out[0]['result']['previousblockhash'] # variable returns prevblockhash
53
+ nextblock = out[0]['result']['nextblockhash'] # variable returns nextblockhash
54
+ merkleroot = out[0]['result']['merkleroot'] # variable returns merkleroot
55
+ blocktime = out[0]['result']['time'] # variable returns blocktime
56
+ difficulty = out[0]['result']['difficulty'] # variable returns difficulty
57
+ tx = [] # list to store transaction ids
58
+ for i in 0...tx_count
59
+ tx.push(out[0]['result']['tx'][i]) # pushes transaction ids onto tx list
60
+ end
61
+ retrieved = { :tx_count => tx_count,:miner => miner,:size => size,:nonce => nonce,:blockHash => blockHash,:prevblock => prevblock, :nextblock => nextblock,:merkleroot => merkleroot,:blocktime => blocktime,:difficulty => difficulty,:tx => tx}
62
+ retrievedinfo = JSON.generate retrieved
63
+ return retrievedinfo
64
+ end
65
+
66
+ # function to retrieve data of blocks in a particular range
67
+ def self.retrieveBlocks block_range
68
+ blockhash = []
69
+ miner = []
70
+ blocktime = []
71
+ tx_count = []
72
+ auth = {:username => @user, :password => @password}
73
+ options = {
74
+ :headers => headers= {"Content-Type"=> "application/json","Cache-Control" => "no-cache"},
75
+ :basic_auth => auth,
76
+ :body => [ {"method":"listblocks","params":[block_range],"jsonrpc":2.0,"id":"curltext","chain_name":@chain}].to_json
77
+ }
78
+ response = HTTParty.get(@url, options)
79
+ out = response.parsed_response
80
+ block_count_len = out[0]['result']
81
+ block_count = block_count_len.length
82
+ for i in 0...block_count
83
+ blockhash.push(out[0]['result'][i]['hash'])
84
+ miner.push(out[0]['result'][i]['miner'])
85
+ blocktime.push(out[0]['result'][i]['time'])
86
+ tx_count.push(out[0]['result'][i]['txcount'])
87
+ end
88
+ retrieved = { :blockhash => blockhash,:miner => miner,:blocktime => blocktime,:tx_count => tx_count}
89
+ retrievedinfo = JSON.generate retrieved
90
+ return retrievedinfo
91
+ end
92
+
93
+ end
94
+ end
@@ -1,135 +1,148 @@
1
- # Library to work with RecordsKeeper Blockchain.
2
-
3
- # You can retrieve blockchain information, node's information, node's balance, node's permissions, pending transaction details
4
- # by using Blockchain class.
5
- # You just have to pass parameters to invoke the pre-defined functions."""
6
-
7
- require 'rubygems'
8
- require 'httparty'
9
- require 'json'
10
- require 'binary_parser'
11
- require 'yaml'
12
-
13
- module RecordsKeeperRuby
14
- class Blockchain
15
-
16
- cfg = YAML::load(File.open('config.yaml','r'))
17
- @network = cfg['testnet']
18
- if @network==cfg['testnet']
19
- @url = cfg['testnet']['url']
20
- @user = cfg['testnet']['rkuser']
21
- @password = cfg['testnet']['passwd']
22
- @chain = cfg['testnet']['chain']
23
- else
24
- @url = cfg['mainnet']['url']
25
- @user = cfg['mainnet']['rkuser']
26
- @password = cfg['mainnet']['passwd']
27
- @chain = cfg['mainnet']['chain']
28
- end
29
-
30
- def self.variable
31
- net = @network
32
- return net
33
- end
34
-
35
- # Function to retrieve RecordsKeeper Blockchain parameters
36
- def self.getChainInfo
37
- auth = {:username => @user, :password => @password}
38
- options = {
39
- :headers => headers= {"Content-Type"=> "application/json","Cache-Control" => "no-cache"},
40
- :basic_auth => auth,
41
- :body => [ {"method":"getblockchainparams","params":[],"jsonrpc":2.0,"id":"curltext","chain_name":@chain}].to_json
42
- }
43
- response = HTTParty.get(@url, options)
44
- out = response.parsed_response
45
- result = out[0]['result']
46
- chain_protocol = result['chain-protocol']
47
- chain_description = result['chain-description']
48
- root_stream = result['root-stream-name']
49
- max_blocksize = result['maximum-block-size']
50
- default_networkport = result['default-network-port']
51
- default_rpcport = result['default-rpc-port']
52
- mining_diversity = result['mining-diversity']
53
- chain_name = result['chain-name']
54
- return chain_protocol, chain_description, root_stream, max_blocksize, default_networkport, default_rpcport, mining_diversity, chain_name; #returns chain parameters
55
- end
56
-
57
- # Function to retrieve node's information on RecordsKeeper Blockchain
58
- def self.getNodeInfo
59
- auth = {:username => @user, :password => @password}
60
- options = {
61
- :headers => headers= {"Content-Type"=> "application/json","Cache-Control" => "no-cache"},
62
- :basic_auth => auth,
63
- :body => [ {"method":"getinfo","params":[],"jsonrpc":2.0,"id":"curltext","chain_name":@chain}].to_json
64
- }
65
- response = HTTParty.get(@url, options)
66
- out = response.parsed_response
67
- node_balance = out[0]['result']['balance']
68
- synced_blocks = out[0]['result']['blocks']
69
- node_address = out[0]['result']['nodeaddress']
70
- difficulty = out[0]['result']['difficulty']
71
- return node_balance, synced_blocks, node_address, difficulty; # Returns node's details
72
- end
73
-
74
- # Function to retrieve node's permissions on RecordsKeeper Blockchain
75
- def self.permissions
76
- auth = {:username => @user, :password => @password}
77
- options = {
78
- :headers => headers= {"Content-Type"=> "application/json","Cache-Control" => "no-cache"},
79
- :basic_auth => auth,
80
- :body => [ {"method":"listpermissions","params":[],"jsonrpc":2.0,"id":"curltext","chain_name":@chain}].to_json
81
- }
82
- response = HTTParty.get(@url, options)
83
- out = response.parsed_response
84
- pms_count_len = out[0]['result']
85
- pms_count = pms_count_len.length
86
- permissions = []
87
- for i in 0...pms_count
88
- permissions.push(out[0]['result'][i]['type'])
89
- end
90
- return permissions; # Returns list of permissions
91
- end
92
-
93
- # Function to retrieve pending transactions information on RecordsKeeper Blockchain
94
- def self.getpendingTransactions
95
- auth = {:username => @user, :password => @password}
96
- options = {
97
- :headers => headers= {"Content-Type"=> "application/json","Cache-Control" => "no-cache"},
98
- :basic_auth => auth,
99
- :body => [ {"method":"getmempoolinfo","params":[],"jsonrpc":2.0,"id":"curltext","chain_name":@chain}].to_json
100
- }
101
- response = HTTParty.get(@url, options)
102
- out = response.parsed_response
103
- tx_count = out[0]['result']['size'] # Stores pending tx count
104
- auth = {:username => @user, :password => @password}
105
- options = {
106
- :headers => headers= {"Content-Type"=> "application/json","Cache-Control" => "no-cache"},
107
- :basic_auth => auth,
108
- :body => [ {"method":"getrawmempool","params":[],"jsonrpc":2.0,"id":"curltext","chain_name":@chain}].to_json
109
- }
110
- response2 = HTTParty.get(@url, options)
111
- out2 = response2.parsed_response
112
- tx = []
113
- x = 0
114
- begin
115
- tx.push(out2[0]['result'])
116
- end until x <tx_count
117
- return tx_count, tx; # Returns pending tx and tx count
118
- end
119
-
120
- # Function to check node's total balance
121
- def self.checkNodeBalance
122
- auth = {:username => @user, :password => @password}
123
- options = {
124
- :headers => headers= {"Content-Type"=> "application/json","Cache-Control" => "no-cache"},
125
- :basic_auth => auth,
126
- :body => [ {"method":"getmultibalances","params":[],"jsonrpc":2.0,"id":"curltext","chain_name":@chain}].to_json
127
- }
128
- response = HTTParty.get(@url, options)
129
- out = response.parsed_response
130
- balance = out[0]['result']['total'][0]['qty']
131
- return balance; # Returns balance of node
132
- end
133
- end
134
-
135
- end
1
+ # Library to work with RecordsKeeper Blockchain.
2
+
3
+ # You can retrieve blockchain information, node's information, node's balance, node's permissions, pending transaction details
4
+ # by using Blockchain class.
5
+ # You just have to pass parameters to invoke the pre-defined functions."""
6
+
7
+ require 'rubygems'
8
+ require 'httparty'
9
+ require 'json'
10
+ require 'binary_parser'
11
+ require 'yaml'
12
+
13
+ module RecordsKeeperRubyLib
14
+ class Blockchain
15
+
16
+ # # Entry point for accessing Blockchain class functions
17
+ if File.exist?('config.yaml')
18
+ # Import values from configuration file.
19
+ cfg = YAML::load(File.open('config.yaml','r'))
20
+
21
+ @url = cfg['url']
22
+ @user = cfg['rkuser']
23
+ @password = cfg['passwd']
24
+ @chain = cfg['chain']
25
+
26
+ else
27
+ #Import using ENV variables
28
+
29
+ @url = ENV['url']
30
+ @user = ENV['rkuser']
31
+ @password = ENV['passwd']
32
+ @chain = ENV['chain']
33
+ end
34
+
35
+ # Function to retrieve RecordsKeeper Blockchain parameters
36
+ def self.getChainInfo
37
+ auth = {:username => @user, :password => @password}
38
+ options = {
39
+ :headers => headers= {"Content-Type"=> "application/json","Cache-Control" => "no-cache"},
40
+ :basic_auth => auth,
41
+ :body => [ {"method":"getblockchainparams","params":[],"jsonrpc":2.0,"id":"curltext","chain_name":@chain}].to_json
42
+ }
43
+ response = HTTParty.get(@url, options)
44
+ out = response.parsed_response
45
+ result = out[0]['result']
46
+ chain_protocol = result['chain-protocol']
47
+ chain_description = result['chain-description']
48
+ root_stream = result['root-stream-name']
49
+ max_blocksize = result['maximum-block-size']
50
+ default_networkport = result['default-network-port']
51
+ default_rpcport = result['default-rpc-port']
52
+ mining_diversity = result['mining-diversity']
53
+ chain_name = result['chain-name']
54
+ info = {:chain_protocol => chain_protocol, :chain_description => chain_description, :root_stream => root_stream, :max_blocksize => max_blocksize, :default_networkport => default_networkport, :default_rpcport => default_rpcport, :mining_diversity => mining_diversity, :chain_name => chain_name} #returns chain parameters
55
+ retrieved = JSON.generate info
56
+ return retrieved
57
+ end
58
+
59
+ # Function to retrieve node's information on RecordsKeeper Blockchain
60
+ def self.getNodeInfo
61
+ auth = {:username => @user, :password => @password}
62
+ options = {
63
+ :headers => headers= {"Content-Type"=> "application/json","Cache-Control" => "no-cache"},
64
+ :basic_auth => auth,
65
+ :body => [ {"method":"getinfo","params":[],"jsonrpc":2.0,"id":"curltext","chain_name":@chain}].to_json
66
+ }
67
+ response = HTTParty.get(@url, options)
68
+ out = response.parsed_response
69
+ node_balance = out[0]['result']['balance']
70
+ synced_blocks = out[0]['result']['blocks']
71
+ node_address = out[0]['result']['nodeaddress']
72
+ difficulty = out[0]['result']['difficulty']
73
+ info = {:node_balance => node_balance, :synced_blocks => synced_blocks,:node_address => node_address,:difficulty => difficulty} # Returns node's details
74
+ retrieved = JSON.generate info
75
+ return retrieved
76
+ end
77
+
78
+ # Function to retrieve node's permissions on RecordsKeeper Blockchain
79
+ def self.permissions
80
+ auth = {:username => @user, :password => @password}
81
+ options = {
82
+ :headers => headers= {"Content-Type"=> "application/json","Cache-Control" => "no-cache"},
83
+ :basic_auth => auth,
84
+ :body => [ {"method":"listpermissions","params":[],"jsonrpc":2.0,"id":"curltext","chain_name":@chain}].to_json
85
+ }
86
+ response = HTTParty.get(@url, options)
87
+ out = response.parsed_response
88
+ pms_count_len = out[0]['result']
89
+ pms_count = pms_count_len.length
90
+ permissions = []
91
+ for i in 0...pms_count
92
+ permissions.push(out[0]['result'][i]['type'])
93
+ end
94
+
95
+ permissions_list = permissions.uniq
96
+ return permissions_list; # Returns list of permissions
97
+ end
98
+
99
+ # Function to retrieve pending transactions information on RecordsKeeper Blockchain
100
+ def self.getpendingTransactions
101
+ auth = {:username => @user, :password => @password}
102
+ options = {
103
+ :headers => headers= {"Content-Type"=> "application/json","Cache-Control" => "no-cache"},
104
+ :basic_auth => auth,
105
+ :body => [ {"method":"getmempoolinfo","params":[],"jsonrpc":2.0,"id":"curltext","chain_name":@chain}].to_json
106
+ }
107
+ response = HTTParty.get(@url, options)
108
+ out = response.parsed_response
109
+ tx_count = out[0]['result']['size'] # Stores pending tx count
110
+
111
+ if tx_count==0
112
+ tx = "No pending transactions"
113
+ else
114
+ auth = {:username => @user, :password => @password}
115
+ options = {
116
+ :headers => headers= {"Content-Type"=> "application/json","Cache-Control" => "no-cache"},
117
+ :basic_auth => auth,
118
+ :body => [ {"method":"getrawmempool","params":[],"jsonrpc":2.0,"id":"curltext","chain_name":@chain}].to_json
119
+ }
120
+ response2 = HTTParty.get(@url, options)
121
+ out2 = response2.parsed_response
122
+ tx = []
123
+ for i in 0...tx_count
124
+ tx.push(out2[0]['result'])
125
+ end
126
+ end
127
+ pending = {:tx_count => tx_count,:tx => tx}
128
+ pendingtransaction = JSON.generate pending # Returns pending tx and tx count
129
+ return pendingtransaction
130
+ end
131
+
132
+ # Function to check node's total balance
133
+ def self.checkNodeBalance
134
+ auth = {:username => @user, :password => @password}
135
+ options = {
136
+ :headers => headers= {"Content-Type"=> "application/json","Cache-Control" => "no-cache"},
137
+ :basic_auth => auth,
138
+ :body => [ {"method":"getmultibalances","params":[],"jsonrpc":2.0,"id":"curltext","chain_name":@chain}].to_json
139
+ }
140
+ response = HTTParty.get(@url, options)
141
+ out = response.parsed_response
142
+
143
+ balance = out[0]['result']['total'][-1]['qty']
144
+ return balance; # Returns balance of node
145
+ end
146
+ end
147
+
148
+ end