RecordsKeeperRubyLib 0.1.0 → 0.1.1

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.
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