RecordsKeeperRubyLib 0.1.0
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 +7 -0
- data/.gitignore +11 -0
- data/.rspec +3 -0
- data/.travis.yml +5 -0
- data/CODE_OF_CONDUCT.md +74 -0
- data/Gemfile +12 -0
- data/Gemfile.lock +114 -0
- data/LICENSE.txt +8 -0
- data/README.md +1 -0
- data/Rakefile +6 -0
- data/RecordsKeeperRuby.gemspec +34 -0
- data/bin/console +14 -0
- data/bin/setup +8 -0
- data/docs/addressdoc.rb +116 -0
- data/docs/assetsdoc.rb +65 -0
- data/docs/blockchaindoc.rb +77 -0
- data/docs/blockdoc.rb +76 -0
- data/docs/permissionsdoc.rb +65 -0
- data/docs/streamdoc.rb +84 -0
- data/docs/transactiondoc.rb +121 -0
- data/docs/walletdoc.rb +133 -0
- data/lib/RecordsKeeperRuby/address.rb +186 -0
- data/lib/RecordsKeeperRuby/assets.rb +87 -0
- data/lib/RecordsKeeperRuby/block.rb +89 -0
- data/lib/RecordsKeeperRuby/blockchain.rb +135 -0
- data/lib/RecordsKeeperRuby/permissions.rb +77 -0
- data/lib/RecordsKeeperRuby/sample_config.yaml +60 -0
- data/lib/RecordsKeeperRuby/stream.rb +169 -0
- data/lib/RecordsKeeperRuby/transaction.rb +182 -0
- data/lib/RecordsKeeperRuby/version.rb +3 -0
- data/lib/RecordsKeeperRuby/wallet.rb +252 -0
- data/lib/RecordsKeeperRuby.rb +9 -0
- data/lib/sample_config.yaml +60 -0
- data/sample_config.yaml +60 -0
- metadata +203 -0
@@ -0,0 +1,89 @@
|
|
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
|
@@ -0,0 +1,135 @@
|
|
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
|
@@ -0,0 +1,77 @@
|
|
1
|
+
# Library to work with RecordsKeeper Blockchain permissions.
|
2
|
+
|
3
|
+
# You can grant and revoke permissions to any node on Recordskeeper Blockchain by using permissions class.
|
4
|
+
# You just have to pass parameters to invoke the pre-defined functions.
|
5
|
+
|
6
|
+
require 'rubygems'
|
7
|
+
require 'httparty'
|
8
|
+
require 'json'
|
9
|
+
require 'binary_parser'
|
10
|
+
require 'yaml'
|
11
|
+
require 'hex_string'
|
12
|
+
|
13
|
+
module RecordsKeeperRuby
|
14
|
+
|
15
|
+
class Permissions
|
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
|
+
# Function to grant permissions on RecordsKeeper Blockchain
|
39
|
+
def self.grantPermission address, permissions
|
40
|
+
auth = {:username => @user, :password => @password}
|
41
|
+
options = {
|
42
|
+
:headers => headers= {"Content-Type"=> "application/json","Cache-Control" => "no-cache"},
|
43
|
+
:basic_auth => auth,
|
44
|
+
:body => [ {"method":"grant","params":[address, permissions],"jsonrpc":2.0,"id":"curltext","chain_name":@chain}].to_json
|
45
|
+
}
|
46
|
+
response = HTTParty.get(@url, options)
|
47
|
+
out = response.parsed_response
|
48
|
+
result = out[0]['result']
|
49
|
+
if result.nil?
|
50
|
+
res = out[0]['error']['message']
|
51
|
+
else
|
52
|
+
res = out[0]['result']
|
53
|
+
end
|
54
|
+
return res; #returns permissions tx id
|
55
|
+
end
|
56
|
+
|
57
|
+
# Function to revoke permissions on RecordsKeeper Blockchain
|
58
|
+
def self.revokePermission address, permissions
|
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":"revoke","params":[address, permissions],"jsonrpc":2.0,"id":"curltext","chain_name":@chain}].to_json
|
64
|
+
}
|
65
|
+
response = HTTParty.get(@url, options)
|
66
|
+
out = response.parsed_response
|
67
|
+
result = out[0]['result']
|
68
|
+
if result.nil?
|
69
|
+
res = out[0]['error']['message']
|
70
|
+
else
|
71
|
+
res = out[0]['result']
|
72
|
+
end
|
73
|
+
return res; #returns revoke permissions tx id
|
74
|
+
end
|
75
|
+
end
|
76
|
+
|
77
|
+
end
|
@@ -0,0 +1,60 @@
|
|
1
|
+
# config.yaml
|
2
|
+
testnet:
|
3
|
+
url: testurl
|
4
|
+
rkuser: rkuser
|
5
|
+
passwd: rkpwd
|
6
|
+
chain: test-chain
|
7
|
+
port: testport
|
8
|
+
stream: streamname
|
9
|
+
testdata: test_data
|
10
|
+
amount: test_amount
|
11
|
+
dumptxid: test_txid
|
12
|
+
privatekey: test_privkey
|
13
|
+
validaddress: valid_address
|
14
|
+
invalidaddress: invalid_address
|
15
|
+
miningaddress: mining_address
|
16
|
+
nonminingaddress: nonmining_address
|
17
|
+
multisigaddress: multisig_address
|
18
|
+
wrongimportaddress: wrongimport_address
|
19
|
+
mainaddress: main_address
|
20
|
+
permissionaddress: permission_address
|
21
|
+
dumptxhex: dump_txhex
|
22
|
+
dumpsignedtxhex: dump_signedtxhex
|
23
|
+
samplegetmultisigaddress: sample_multisigaddress
|
24
|
+
samplemerkleroot: sample_merkleroot
|
25
|
+
sampleblockhash: sample_blockhash
|
26
|
+
sampledata: sample_data
|
27
|
+
sampletransac: sample_transaction_id
|
28
|
+
transactionid: transaction_id
|
29
|
+
sampletxid: sample_txid
|
30
|
+
|
31
|
+
|
32
|
+
|
33
|
+
mainnet:
|
34
|
+
url: mainurl
|
35
|
+
rkuser: rkuser
|
36
|
+
passwd: rkpwd
|
37
|
+
chain: main-chain
|
38
|
+
port: mainport
|
39
|
+
stream: streamname
|
40
|
+
testdata: main_data
|
41
|
+
amount: main_amount
|
42
|
+
dumptxid: main_txid
|
43
|
+
privatekey: main_privkey
|
44
|
+
validaddress: valid_address
|
45
|
+
invalidaddress: invalid_address
|
46
|
+
miningaddress: mining_address
|
47
|
+
nonminingaddress: nonmining_address
|
48
|
+
multisigaddress: multisig_address
|
49
|
+
wrongimportaddress: wrongimport_address
|
50
|
+
mainaddress: main_address
|
51
|
+
permissionaddress: permission_address
|
52
|
+
dumptxhex: dump_txhex
|
53
|
+
dumpsignedtxhex: dump_signedtxhex
|
54
|
+
samplegetmultisigaddress: sample_multisigaddress
|
55
|
+
samplemerkleroot: sample_merkleroot
|
56
|
+
sampleblockhash: sample_blockhash
|
57
|
+
sampledata: sample_data
|
58
|
+
sampletransac: sample_transaction_id
|
59
|
+
transactionid: transaction_id
|
60
|
+
sampletxid: sample_txid
|
@@ -0,0 +1,169 @@
|
|
1
|
+
# Library to work with RecordsKeeper streams.
|
2
|
+
|
3
|
+
# You can publish, retrieve and verify stream data by using stream class.
|
4
|
+
# You just have to pass parameters to invoke the pre-defined functions.
|
5
|
+
|
6
|
+
require 'rubygems'
|
7
|
+
require 'httparty'
|
8
|
+
require 'json'
|
9
|
+
require 'binary_parser'
|
10
|
+
require 'yaml'
|
11
|
+
require 'hex_string'
|
12
|
+
|
13
|
+
module RecordsKeeperRuby
|
14
|
+
|
15
|
+
class Stream
|
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
|
+
# Function to publish data into the stream
|
39
|
+
def self.publish address, stream, key, data
|
40
|
+
datahex1 = data.to_hex_string
|
41
|
+
datahex = datahex1.delete(' ')
|
42
|
+
auth = {:username => @user, :password => @password}
|
43
|
+
options = {
|
44
|
+
:headers => headers= {"Content-Type"=> "application/json","Cache-Control" => "no-cache"},
|
45
|
+
:basic_auth => auth,
|
46
|
+
:body => [ {"method":"publishfrom","params":[address, stream, key, datahex],"jsonrpc":2.0,"id":"curltext","chain_name":@chain}].to_json
|
47
|
+
}
|
48
|
+
response = HTTParty.get(@url, options)
|
49
|
+
out = response.parsed_response
|
50
|
+
txid = out[0]['result']
|
51
|
+
return txid;
|
52
|
+
end
|
53
|
+
|
54
|
+
# Function to retrieve data against transaction id from the stream
|
55
|
+
def self.retrieve stream, txid
|
56
|
+
auth = {:username => @user, :password => @password}
|
57
|
+
options = {
|
58
|
+
:headers => headers= {"Content-Type"=> "application/json","Cache-Control" => "no-cache"},
|
59
|
+
:basic_auth => auth,
|
60
|
+
:body => [ {"method":"getstreamitem","params":[stream, txid],"jsonrpc":2.0,"id":"curltext","chain_name":@chain}].to_json
|
61
|
+
}
|
62
|
+
response = HTTParty.get(@url, options)
|
63
|
+
out = response.parsed_response
|
64
|
+
data = out[0]['result']['data']
|
65
|
+
raw_data = data.to_byte_string
|
66
|
+
return raw_data;
|
67
|
+
end
|
68
|
+
|
69
|
+
# Function to retrieve data against a particular publisher address
|
70
|
+
def self.retrieveWithAddress stream, address, count
|
71
|
+
auth = {:username => @user, :password => @password}
|
72
|
+
options = {
|
73
|
+
:headers => headers= {"Content-Type"=> "application/json","Cache-Control" => "no-cache"},
|
74
|
+
:basic_auth => auth,
|
75
|
+
:body => [ {"method":"liststreampublisheritems","params":[stream, address, false, count],"jsonrpc":2.0,"id":"curltext","chain_name":@chain}].to_json
|
76
|
+
}
|
77
|
+
response = HTTParty.get(@url, options)
|
78
|
+
out = response.parsed_response
|
79
|
+
key = []
|
80
|
+
raw_data = []
|
81
|
+
txid = []
|
82
|
+
i = 0
|
83
|
+
begin
|
84
|
+
key.push(out[0]['result'][i]['key']) #returns key value of the published data
|
85
|
+
data = out[0]['result'][i]['data'] #returns hex data
|
86
|
+
raw_data.push(data.to_byte_string) #returns raw data
|
87
|
+
txid.push(out[0]['result'][i]['txid']) #returns tx id
|
88
|
+
end until i <count
|
89
|
+
return key, raw_data, txid;
|
90
|
+
end
|
91
|
+
|
92
|
+
# Function to retrieve data against a particular key value
|
93
|
+
def self.retrieveWithKey stream, key, count
|
94
|
+
auth = {:username => @user, :password => @password}
|
95
|
+
options = {
|
96
|
+
:headers => headers= {"Content-Type"=> "application/json","Cache-Control" => "no-cache"},
|
97
|
+
:basic_auth => auth,
|
98
|
+
:body => [ {"method":"liststreamkeyitems","params":[stream, key, false, count],"jsonrpc":2.0,"id":"curltext","chain_name":@chain}].to_json
|
99
|
+
}
|
100
|
+
response = HTTParty.get(@url, options)
|
101
|
+
out = response.parsed_response
|
102
|
+
publisher = []
|
103
|
+
raw_data = []
|
104
|
+
txid = []
|
105
|
+
i = 0
|
106
|
+
begin
|
107
|
+
publisher.push(out[0]['result'][i]['publishers'][0]) #returns publisher's address of published data
|
108
|
+
data = out[0]['result'][i]['data'] #returns published hex data
|
109
|
+
raw_data.push(data.to_byte_string) #returns data published
|
110
|
+
txid.push(out[0]['result'][i]['txid']) #returns transaction id of published data
|
111
|
+
end until i <count
|
112
|
+
return publisher, raw_data, txid;
|
113
|
+
end
|
114
|
+
|
115
|
+
# Function to verify data on RecordsKeeper Blockchain
|
116
|
+
def self.verifyData stream, data, count
|
117
|
+
auth = {:username => @user, :password => @password}
|
118
|
+
options = {
|
119
|
+
:headers => headers= {"Content-Type"=> "application/json","Cache-Control" => "no-cache"},
|
120
|
+
:basic_auth => auth,
|
121
|
+
:body => [ {"method":"liststreamitems","params":[stream,false ,count],"jsonrpc":2.0,"id":"curltext","chain_name":@chain}].to_json
|
122
|
+
}
|
123
|
+
response = HTTParty.get(@url, options)
|
124
|
+
out = response.parsed_response
|
125
|
+
raw_data = []
|
126
|
+
i = 0
|
127
|
+
begin
|
128
|
+
result_data = out[0]['result'][i]['data'] # returns hex data
|
129
|
+
end until i <count
|
130
|
+
if result_data.unicode_normalized?
|
131
|
+
raw_data.push(result_data.to_byte_string) # returns raw data
|
132
|
+
else
|
133
|
+
raw_data.push("No data found")
|
134
|
+
end
|
135
|
+
if raw_data.include?data
|
136
|
+
result = "Data is successfully verified."
|
137
|
+
else
|
138
|
+
result = "Data not found."
|
139
|
+
end
|
140
|
+
return result;
|
141
|
+
end
|
142
|
+
|
143
|
+
# Function to list stream items on RecordsKeeper Blockchain
|
144
|
+
def self.retrieveItems stream, count
|
145
|
+
auth = {:username => @user, :password => @password}
|
146
|
+
options = {
|
147
|
+
:headers => headers= {"Content-Type"=> "application/json","Cache-Control" => "no-cache"},
|
148
|
+
:basic_auth => auth,
|
149
|
+
:body => [ {"method":"liststreamitems","params":[stream, false ,count],"jsonrpc":2.0,"id":"curltext","chain_name":@chain}].to_json
|
150
|
+
}
|
151
|
+
response = HTTParty.get(@url, options)
|
152
|
+
out = response.parsed_response
|
153
|
+
address =[]
|
154
|
+
key_value = []
|
155
|
+
raw_data = []
|
156
|
+
txid = []
|
157
|
+
i = 0
|
158
|
+
begin
|
159
|
+
address.push(out[0]['result'][i]['publishers']) # returns publisher address
|
160
|
+
key_value.push(out[0]['result'][i]['key']) # returns key value of data
|
161
|
+
data = out[0]['result'][i]['data'] # returns hex data
|
162
|
+
raw_data.push(data.to_byte_string) # returns raw data
|
163
|
+
txid.push(out[0]['result'][i]['txid']) # returns tx id
|
164
|
+
end until i <count
|
165
|
+
return address, key_value, raw_data, txid;
|
166
|
+
end
|
167
|
+
end
|
168
|
+
|
169
|
+
end
|