test_sdk1 1.0.3 → 1.1.3

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 (52) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +478 -89
  3. data/lib/crypto/asymmetric_key.rb +19 -18
  4. data/lib/crypto/ed25519_key.rb +99 -10
  5. data/lib/crypto/keys.rb +1 -2
  6. data/lib/crypto/keys_util.rb +20 -0
  7. data/lib/entity/auction_state.rb +56 -8
  8. data/lib/entity/bid.rb +1 -1
  9. data/lib/entity/bid_info.rb +1 -1
  10. data/lib/entity/block.rb +39 -0
  11. data/lib/entity/block_body.rb +35 -0
  12. data/lib/entity/block_header.rb +81 -0
  13. data/lib/entity/block_info.rb +56 -0
  14. data/lib/entity/block_proof.rb +24 -0
  15. data/lib/entity/deploy.rb +154 -1
  16. data/lib/entity/deploy_executable.rb +108 -6
  17. data/lib/entity/deploy_executable_item_internal.rb +1 -1
  18. data/lib/entity/deploy_header.rb +17 -0
  19. data/lib/entity/deploy_named_argument.rb +69 -2
  20. data/lib/entity/era_summary.rb +13 -12
  21. data/lib/entity/module_bytes.rb +16 -2
  22. data/lib/entity/status.rb +80 -0
  23. data/lib/entity/stored_value.rb +86 -11
  24. data/lib/entity/transfer.rb +7 -7
  25. data/lib/include.rb +2 -0
  26. data/lib/serialization/cl_value_serializer.rb +69 -12
  27. data/lib/serialization/cl_value_serializer1.rb +314 -0
  28. data/lib/serialization/cl_value_serializer_update.rb +320 -0
  29. data/lib/serialization/deploy_header_serializer.rb +1 -0
  30. data/lib/serialization/deploy_named_arg_serializer.rb +1 -0
  31. data/lib/serialization/deploy_serializer.rb +144 -10
  32. data/lib/serialization/deploy_serializer1.rb +392 -0
  33. data/lib/serialization/deploy_serializer_update.rb +397 -0
  34. data/lib/serialization/test.rb +33 -13
  35. data/lib/test_sdk1.rb +29 -10
  36. data/lib/types/cl_option.rb +8 -2
  37. data/lib/types/cl_public_key.rb +2 -0
  38. data/lib/types/cl_value.rb +8 -0
  39. data/lib/utils/byte_utils.rb +28 -0
  40. data/lib/utils/helpers.rb +10 -0
  41. data/lib/version.rb +1 -1
  42. data/spec/cl_value_serializer_spec.rb +16 -1
  43. data/spec/dene_spec.rb +186 -0
  44. data/spec/deploy_executable_spec.rb +90 -0
  45. data/spec/deploy_executable_test_spec.rb +117 -0
  46. data/spec/deploy_serializer_spec.rb +5 -3
  47. data/spec/deploy_serializer_test_spec.rb +7 -1
  48. data/spec/testnet_spec.rb +3 -1
  49. data/spec/time_utils_spec.rb +3 -0
  50. metadata +20 -5
  51. data/lib/crypto/key_pair.rb +0 -40
  52. data/spec/deploy_executable_serializer_spec.rb +0 -0
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 5b89def3f15a842a7ddc8c15b72f04e2cddf49b781fb8d838addcd7854e5dfc4
4
- data.tar.gz: 980521ad36c1ea8acc77e573ff24cd961d3de5f55e12e3a609d2a64b2ec5e074
3
+ metadata.gz: 19df95113627970cd416e5bd602df39ec2d0791714803544df62302b6f0f490b
4
+ data.tar.gz: bedf1c745ccdaca73523d2c93885f3a15a6136adb8ed3ff01a8d3caa4afa7e38
5
5
  SHA512:
6
- metadata.gz: 15907f268c7f6e4fb4f30ca4bb42518c545d8c01f6803db931381ac76a22c360771a788e435062d862302ba3b4e7da320f2a0069dba9c984b2cbe4bad7907757
7
- data.tar.gz: fce9046fe2e0f2978f949b8c2ae09585a5936225b50137a622f48f0c87ac101c1b92d11bb4b89d90030e89ed3d6d4ea51794a21908bbb8061c7c486be4f106fd
6
+ metadata.gz: da16ea0326db013e89e67e62903b7be37fb2fb6d91108e0045e4fb88f19f32fed30c1ec6d2b3d7ae9a36ec5125535100271acd8eec3e183a3e7fcf4fe25f7f3d
7
+ data.tar.gz: cf129cf4821b1f60a2b0a86f8751565ebe463736c92b1479f9f114cdb0e9fd01dced89510ac325c57db59e0581adb53e67bc6afa7ac311fa8be9848f56aa613d
data/README.md CHANGED
@@ -70,108 +70,497 @@ yardoc lib/**/*.rb lib/*.rb - README.md LICENSE CONTRIBUTING.md SECURITY.md
70
70
  yardoc --help
71
71
  ```
72
72
 
73
- ## Documentation:
73
+ ## Documentation
74
+
75
+ The SDK documentation can be found [here](https://www.rubydoc.info/gems/casper_network/1.0.2) in detail.
76
+
77
+ ### Serialization
78
+ Casper provides a custom implementation to serialize data structures used by the Casper node to their byte representation.
79
+ More information on this custom implementation can be found [here](https://caspernetwork.readthedocs.io/en/latest/implementation/serialization-standard.html).
80
+
81
+ * [Serialization](https://github.com/saitgulmez/testing/blob/main/docs/serialization.md#serialization)
82
+ * [Examples](https://github.com/saitgulmez/testing/blob/main/docs/serialization.md#examples)
83
+
84
+ ### Key Management
85
+ * [CLPublicKey](https://github.com/saitgulmez/testing/blob/main/docs/keys.md#public-keys)
86
+
74
87
  ### Casper-Ruby-Sdk RPC
75
- * [info_get_peers](https://github.com/saitgulmez/testing/blob/main/docs/rpc.md#info_get_peers)
76
- * [chain_get_StateRootHash](https://github.com/saitgulmez/testing/blob/main/docs/rpc.md#get-state_root_hash)
77
- * [info_get_deploy](https://github.com/saitgulmez/testing/blob/main/docs/rpc.md#get-deploy)
78
- * [info_get_status](https://github.com/saitgulmez/testing/blob/main/docs/rpc.md#get-status)
79
- * [chain_get_block_transfers](https://github.com/saitgulmez/testing/blob/main/docs/rpc.md#get-block-transfers)
80
- * [chain_get_block](https://github.com/saitgulmez/testing/blob/main/docs/rpc.md#get-block-by-hash)
81
- * [chain_get_eraInfo_by_SwitchBlock](https://github.com/saitgulmez/testing/blob/main/docs/rpc.md#get-era-summary-by-switch-block-hash)
82
- * [state_get_item](https://github.com/saitgulmez/testing/blob/main/docs/rpc.md#get--state-item)
83
- * [state_get_dictionary_item](https://github.com/saitgulmez/testing/blob/main/docs/rpc.md#get-dictionary-item)
84
- * [state_get_balance](https://github.com/saitgulmez/testing/blob/main/docs/rpc.md#get-account-balance)
85
- * [state_get_AuctionInfo](https://github.com/saitgulmez/testing/blob/main/docs/rpc.md#get-auction-state)
86
- * [put_deploy](https://github.com/saitgulmez/testing/blob/main/docs/rpc.md#put-deploy)
88
+ * [info_get_peers](https://github.com/saitgulmez/casper-ruby-sdk/blob/main/docs/rpc.md#info_get_peers)
89
+ * [chain_get_StateRootHash](https://github.com/saitgulmez/casper-ruby-sdk/blob/main/docs/rpc.md#get-state_root_hash)
90
+ * [info_get_deploy](https://github.com/saitgulmez/casper-ruby-sdk/blob/main/docs/rpc.md#get-deploy)
91
+ * [info_get_status](https://github.com/saitgulmez/casper-ruby-sdk/blob/main/docs/rpc.md#get-status)
92
+ * [chain_get_block_transfers](https://github.com/saitgulmez/casper-ruby-sdk/blob/main/docs/rpc.md#get-block-transfers)
93
+ * [chain_get_block](https://github.com/saitgulmez/casper-ruby-sdk/blob/main/docs/rpc.md#get-block-by-hash)
94
+ * [chain_get_eraInfo_by_SwitchBlock](https://github.com/saitgulmez/casper-ruby-sdk/blob/main/docs/rpc.md#get-era-summary-by-switch-block-hash)
95
+ * [state_get_item](https://github.com/saitgulmez/casper-ruby-sdk/blob/main/docs/rpc.md#get--state-item)
96
+ * [state_get_dictionary_item](https://github.com/saitgulmez/casper-ruby-sdk/blob/main/docs/rpc.md#get-dictionary-item)
97
+ * [state_get_balance](https://github.com/saitgulmez/casper-ruby-sdk/blob/main/docs/rpc.md#get-account-balance)
98
+ * [state_get_AuctionInfo](https://github.com/saitgulmez/casper-ruby-sdk/blob/main/docs/rpc.md#get-auction-state)
99
+ * [put_deploy](https://github.com/saitgulmez/casper-ruby-sdk/blob/main/docs/rpc.md#put-deploy)
87
100
 
88
101
 
89
102
  ## Usage examples
90
- ### Get 5 peer IP addresses randomly
103
+
104
+ ## Include 'casper_network' gem into the source file
105
+
91
106
  ```ruby
92
107
  require 'casper_network'
108
+ ```
109
+ ## Create a Client
110
+
111
+ Pass the node ip address to constructor
112
+
113
+ ```ruby
114
+ node_ip_address = "5.9.23.55" # IP is taken from "testnet"
115
+ client = Casper::CasperClient.new(node_ip_address)
116
+ ```
117
+ ## RPC Calls
118
+
119
+ ### Get network peers list
120
+
121
+ Retrieves the list of connected peers.
122
+
123
+ ```ruby
124
+ peers = client.info_get_peers
125
+ # Retrieve to the first peer object
126
+ peer = peers[0]
127
+ # Retrieve to info of the first peer object
128
+ node_id = peer[0].get_node_id
129
+ address = peer[0].get_address
130
+ ```
131
+
132
+ ### Get State Root Hash
133
+
134
+ Retrieves the state root hash String.
135
+
136
+ ```ruby
137
+ state_root_hash = client.chain_get_StateRootHash
138
+ ```
139
+
140
+ ### Get Deploy
141
+
142
+ Retrieves a Deploy object from the network.
143
+
144
+ call parameters :
145
+ - deploy hash
146
+
147
+ ```ruby
148
+ deploy_hash = "0806cc477a5282574bc5302d7598cd33a09875704c5fef9264d984535c945e31"
149
+ deploy = client.info_get_deploy(deploy_hash)
150
+ # Deploy members
151
+ hash = Casper::Entity::DeployHash.new(deploy.get_hash)
152
+ header = Casper::Entity::DeployHeader.new(deploy.get_header)
153
+ payment = deploy.get_payment
154
+ session = deploy.get_session
155
+ ```
156
+
157
+ ### Get Node Status
93
158
 
94
- # In order to interact with casper network we should give a valid ip address to the constructor
159
+ Retrieves the current status of the node.
95
160
 
96
- # if it does not work, please choose another node ip address from the Testnet
97
- # IP is taken from "Testnet"
98
- node_ip_address = "85.114.132.129"
161
+ ```ruby
162
+ node_status = client.info_get_status
163
+ # Examples of retrieving and printing the members of node status
164
+ puts node_status.get_api_version
165
+ puts node_status.get_chainspec_name
166
+ puts node_status.get_starting_state_root_hash
167
+ puts node_status.get_peers
168
+ puts node_status.get_last_added_block_info
169
+ puts node_status.get_our_public_signing_key
170
+ puts node_status.get_round_length
171
+ puts node_status.get_next_upgrade
172
+ puts node_status.get_build_version
173
+ puts node_status.get_uptime
174
+ ```
175
+
176
+ ### Get BlockTransfers
177
+
178
+ Retrieve all transfers for a Block from the network
179
+
180
+ ```ruby
99
181
  # block_Hash taken from Testnet
100
- block_hash = "71e19e2e9629c716dc9578066cfeceace559d32fe51b08245ddd4d218f8c18da"
101
- # deploy_Hash taken from Testnet
102
- deploy_hash = "d3e0a1bd85ee74916e096cf4b18df391ada414d0915aeb865eff0ba75f04c3d8"
103
- state_root_hash = "2a62440a1e1e57bff71344aac8a7de169f6dd08d29cffe83b2fb5d6648971855"
182
+ block_hash = "ff2ad232c3efc22a385fce44df844fc696e904ce8ba78599a576aa68c76889c4"
183
+ transfers = client.chain_get_block_transfers(block_hash)
184
+ # Examples of accessing and printing the members of each transfer object
185
+ transfers.each do |transfer|
186
+ puts transfer.get_deploy_hash
187
+ puts transfer.get_from
188
+ puts transfer.get_to
189
+ puts transfer.get_source
190
+ puts transfer.get_target
191
+ puts transfer.get_amount
192
+ puts transfer.get_gas
193
+ puts transfer.get_id
194
+ end
195
+ ```
196
+
197
+ ### Get Block
198
+
199
+ Retrieve a Block object from the network
200
+
201
+ ```ruby
202
+ block_hash = "ff2ad232c3efc22a385fce44df844fc696e904ce8ba78599a576aa68c76889c4"
203
+ block = client.chain_get_block(block_hash)
204
+ puts block # => It is an instance of Block
205
+ # To retrieve BlockHeader object
206
+ block_header = block.get_header
207
+ puts block_header
208
+ # To access and print members of the block_header object (block_header is an instance of BlockHeader )
209
+ puts block_header.get_parent_hash
210
+ puts block_header.get_state_root_hash
211
+ puts block_header.get_body_hash
212
+ puts block_header.get_random_bit
213
+ puts block_header.get_accumulated_seed
214
+ puts block_header.get_era_end
215
+ puts block_header.get_timestamp
216
+ puts block_header.get_era_id
217
+ puts block_header.get_height
218
+ puts block_header.get_protocol_version
219
+
220
+ # To retrieve BlockBody object
221
+ block_body = block.get_body
222
+ # To access and print members of the block_body object (block_body is an instance of BlockBody )
223
+ puts block_body
224
+ puts block_body.get_proposer
225
+ puts block_body.get_deploy_hashes
226
+ puts block_body.get_transfer_hashes
227
+
228
+ # To retrieve an array of BlockProof objects
229
+ proofs = block.get_proofs
230
+ # To access and print members of the block_proof objects (block_proof is an instance of BlockProof )
231
+ puts proofs
232
+ # To access and print each proof object and its members
233
+ i = 0
234
+ proofs.each do |proof|
235
+ puts "proofs[#{i}]: #{proof}"
236
+ puts "public_key: " + proof.get_public_key
237
+ puts "signature: " + proof.get_signature
238
+ i += 1
239
+ end
240
+ ```
241
+
242
+ ### Get EraInfo By Switch Block
243
+
244
+ Retrieves an EraSummury object.
245
+
246
+ ```ruby
247
+ block_hash = "d2077716e5b8796723c5720237239720f54e6ada54e3357f2c4896f2a51a6d8f"
248
+ era_summary = client.chain_get_eraInfo_by_SwitchBlock(block_hash)
249
+ puts era_summary # => It is an instance of EraSummary
250
+ puts era_summary.get_block_hash
251
+ puts era_summary.get_era_id
252
+ puts era_summary.get_stored_value # => Retrieve and print the instance of StoredValue
253
+ puts era_summary.get_stored_value.get_stored_value
254
+ puts era_summary.get_state_root_hash
255
+ puts era_summary.get_merkle_proof
256
+ ```
257
+
258
+ ### Get StateItem
259
+
260
+ Retrieves a StoredValue object.
261
+
262
+ ```ruby
263
+ node_ip_address = "65.108.78.120" # => Taken from the Mainnet
264
+ client = Casper::CasperClient.new(node_ip_address)
265
+ # Retrieve the stored_value object which is an instance of StoredValue
266
+ stored_value = client.state_get_item("647C28545316E913969B032Cf506d5D242e0F857061E70Fb3DF55980611ace86", "bid-24b6D5Aabb8F0AC17D272763A405E9CECa9166B75B745Cf200695E172857c2dD", [])
267
+ puts stored_value # => #<Casper::Entity::StoredValue:0x0000000003767a48>
268
+ puts stored_value.get_key # => Bid
269
+ puts stored_value.get_bid # => Retrieve and print Bid object related data
270
+ # or
271
+ puts stored_value.get_stored_value # => Retrieve and print Bid object related data
272
+ ```
273
+
274
+ ### Get DictionaryItem
275
+
276
+ Retrieves a CLValue object.
277
+
278
+ ```ruby
279
+ node_ip_address = "65.108.78.120" # => Taken from Mainnet
280
+ client = Casper::CasperClient.new(node_ip_address)
281
+ state_root_hash = "7b605ad991c949832fd966495afc3f97a2b8122a1a6afc2610b545a8c07e3456"
104
282
  item_key = "f870e3cadfde21d7d7686fdf3d1a8413838274d363ca7b27ae71fc9125eb6743"
105
- uref = "uref-9199d08ff4ca4d52cd7a05ba0d2694204b7ebff963fec1c216f81bf654e0e59f-007"
106
- switch_block_hash = "9e30104581a492f5c6faad4cdfb098311e3bf0e93897ebbfb47c3df62f5e6375"
283
+ uref = "uref-0d689e987db7ee5be246282c3a7badf0411e34baeeab8e9d73c1223ae4ad02e5-007"
284
+ # Retrieve folowing data from the network and convert it into its proper CLValue
285
+ # {"CLValue"=>{"cl_type"=>"String", "bytes"=>"1a00000068747470733a2f2f636173706572636f6d6d756e6974792e696f", "parsed"=>"https://caspercommunity.io"}}
286
+ stored_value = client.state_get_dictionary_item(state_root_hash, item_key, uref)
287
+ puts stored_value # => #<CLString:0x0000000002b3c8e0>
288
+ puts stored_value.get_cl_type # => String
289
+ puts stored_value.get_value # => https://caspercommunity.io
290
+ puts CLValueBytesParsers::CLStringBytesParser.to_bytes(stored_value.get_value) # => 1a00000068747470733a2f2f636173706572636f6d6d756e6974792e696f
291
+ ```
292
+
293
+ ### Get Balance
294
+
295
+ Retrieves the balances(in motes) of an account
296
+
297
+ Parameters :
298
+
299
+ - state root hash
300
+ - account uref hash
107
301
 
302
+ ```ruby
303
+ node_ip_address = "65.108.78.120" # => Taken from Mainnet
304
+ client = Casper::CasperClient.new(node_ip_address)
305
+ state_root_hash = "610e932aef10d3e1fa04940c79a4a2789ee79c17046f1a9b45a2919f3600f3d5"
306
+ uref = "uref-7de5e973b7d70bc2b328814411f2009aafd8dba901cfc2c588ba65088dcd22bb-007"
307
+ balance = client.state_get_balance(state_root_hash, uref)
308
+ puts balance # => 29269647684075 (current balance 9/24/2022)
309
+ ```
310
+
311
+ ### Get current auction state
312
+
313
+ Retrieves an AutionState object.
108
314
 
109
- # Uncomment following lines to test on Mainnet
110
- # if it does not work, please choose another node ip address from the Mainnet
111
- # IP is taken from "Mainnet"
112
- # node_ip_address = "65.108.78.12"
315
+ call parameters :
316
+ - block hash
317
+
318
+ ```ruby
113
319
  # block_Hash taken from MainNet
114
- # block_hash = "5fdbdf3fa70d37821aa2d1752743e9653befc15e65e40c2655e1ce93a807260f"
115
- # # deploy_Hash taken from MainNet
116
- # deploy_hash = "52a40996a88523c475c12e5370ff90b0ae4ec051cfaa57cd048c136b1a83319d"
117
- # state_root_hash = "7b605ad991c949832fd966495afc3f97a2b8122a1a6afc2610b545a8c07e3456"
118
- # item_key = "f870e3cadfde21d7d7686fdf3d1a8413838274d363ca7b27ae71fc9125eb6743"
119
- # uref = "uref-0d689e987db7ee5be246282c3a7badf0411e34baeeab8e9d73c1223ae4ad02e5-007"
120
- # switch_block_hash = "4696285db1ca6572f425cada612257f85a58a6a4034c09846afe360ba40e5df0"
121
-
122
- if (IPAddress.valid? node_ip_address)
123
- client = Casper::CasperClient.new(node_ip_address)
124
- peers = client.info_get_peers.sample(5)
125
- puts "node_id and address of five randomly selected 5 peers:"
126
- puts peers
127
-
128
- # Store ip addresses of these peers into an array
129
- ips = []
130
- peers.select do |item|
131
- ip = item["address"]
132
- ips << ip[0, ip.index(':')]
133
- end
134
-
135
- clients = []
136
- puts "Randomly selected 5 peers ip addresses:"
137
- ips.each do |ip_address|
138
- # Create a client object for each iteration
139
- puts ip_address
140
- client = CasperClient.new(ip_address)
141
- clients.push(client)
142
- end
143
-
144
-
145
- clients.each do |client|
146
- puts client.info_get_peers
147
- puts client.chain_get_StateRootHash(block_hash)
148
- puts client.chain_get_StateRootHash
149
- puts client.info_get_deploy(deploy_hash)
150
- puts client.info_get_status
151
- puts client.chain_get_block_transfers(block_hash)
152
- puts client.chain_get_block_transfers
153
- puts client.chain_get_block(block_hash)
154
- puts client.chain_get_eraInfo_by_SwitchBlock(switch_block_hash)
155
- puts client.state_get_item("647C28545316E913969B032Cf506d5D242e0F857061E70Fb3DF55980611ace86", "bid-24b6D5Aabb8F0AC17D272763A405E9CECa9166B75B745Cf200695E172857c2dD", [])
156
- puts client.state_get_dictionary_item(state_root_hash, item_key, uref)
157
- state_root_hash = "610e932aef10d3e1fa04940c79a4a2789ee79c17046f1a9b45a2919f3600f3d5"
158
- uref = "uref-7de5e973b7d70bc2b328814411f2009aafd8dba901cfc2c588ba65088dcd22bb-007"
159
- puts client.state_get_balance(state_root_hash, uref)
160
- puts client.state_get_AuctionInfo
161
-
162
- end
163
- else
164
- puts "Invalid IP address"
165
- end
320
+ block_hash = "5fdbdf3fa70d37821aa2d1752743e9653befc15e65e40c2655e1ce93a807260f"
321
+ node_ip_address = "65.108.78.120" # => Taken from Mainnet
322
+ client = Casper::CasperClient.new(node_ip_address)
323
+ auction = client.state_get_AuctionInfo
324
+ # Retrieve and print an instance of AuctionState entity
325
+ puts auction # => #<Casper::Entity::AuctionState:0x0000000003306bc0>
326
+ # Retrieve and print state root hash as a String value
327
+ puts auction.get_state_root_hash # => "6448b55f1dd7c9ad337f4fd4c77586d7ae30da146e0b340932aba7e7efa9cbcb"
328
+ # Retrieve and print block height as an Integer value
329
+ puts auction.get_block_height # => 1128800
330
+ # Retrieve and print an array of instances of EraValidor entity
331
+ puts auction.get_era_validators # => [#<Casper::Entity::EraValidator:0x0000000002b69980>, #<Casper::Entity::EraValidator:0x0000000002b68940>]
332
+ # Retrieve and print an array of instances of Bid entity
333
+ puts auction.get_bids # => [#<Casper::Entity::Bid:0x000000000430bcf0>, #<Casper::Entity::Bid:0x000000000430b6d8>....]
334
+
335
+ # Retrieve and print an instance of BidInfo, which is also the member of bid object
336
+ bids = auction.get_bids
337
+ bid = bids[0] # => #<Casper::Entity::Bid:0x0000000003773dc0>
338
+ bid_info = bid.get_bid_info # => #<Casper::Entity::BidInfo:0x00000000042cffc0>
339
+ # Retrieve and print an array of delegator objects, which are instance of Delegator entity
340
+ delegators = bid_info.get_delegators
341
+ puts delegators # => [#<Casper::Entity::Delegator:0x000000000396c550>, #<Casper::Entity::Delegator:0x000000000396c500>.....]
342
+ # How to access members of one of the above delegator instances
343
+ # For instance, access to stake amount at first delegator
344
+ delegator = delegators[0]
345
+ stake_amount = delegator.get_staked_amount # => 27871095039894
166
346
  ```
167
- - [Testnet](https://testnet.cspr.live/tools/peers), [Mainnet](https://cspr.live/tools/peers)
168
- - [doc](https://www.rubydoc.info/gems/casper_network/0.2.1)
169
347
 
170
348
 
171
- ## TODO
172
- - [ ] Ruby version of CLType primitives
173
- - [ ] Ruby version for Casper domain-specific objects
174
- - [ ] Serialization of Casper domain-specific objects
175
- - [ ] ED25519/SECP256K1 key pairs Wrappers implemented
176
- - [ ] PutDeploy call implemented and tested
177
- - [ ] SDK calls will return Casper domain-specific objects
349
+ ### Example
350
+ ```bash
351
+ # example.rb
352
+ # how to execute example.rb
353
+ $ ruby example.rb
354
+ ```
355
+
356
+ ```ruby
357
+ # example.rb
358
+ require 'casper_network'
359
+ # Class-Object Level
360
+ # Casper::CasperClient
361
+ node_ip_address = "5.9.23.55" # IP is taken from "testnet"
362
+ client = Casper::CasperClient.new(node_ip_address)
363
+
364
+ #********** info_get_peers *********************************#
365
+
366
+ # Uncomment following lines to see the outputs
367
+ # puts client.info_get_peers
368
+ # puts client.info_get_peers[0].get_node_id
369
+ # puts client.info_get_peers[0].get_address
370
+
371
+
372
+ #********** chain_get_StateRootHash *********************************#
373
+ # Uncomment following line to see the outputs
374
+ # puts client.chain_get_StateRootHash
375
+
376
+
377
+ #********** info_get_deploy(deploy_hash) *********************************#
378
+ deploy_hash = "0806cc477a5282574bc5302d7598cd33a09875704c5fef9264d984535c945e31"
379
+ deploy = client.info_get_deploy(deploy_hash)
380
+ # Uncomment following lines to see the outputs
381
+ # puts deploy
382
+ # hash = Casper::Entity::DeployHash.new(deploy.get_hash)
383
+ # puts hash
384
+ # header = Casper::Entity::DeployHeader.new(deploy.get_header)
385
+ # puts header
386
+ # payment = deploy.get_payment
387
+ # puts payment
388
+ # session = deploy.get_session
389
+ # puts session
390
+
391
+ # approvals = []
392
+ # num_of_approvals = deploy.get_approvals.size
393
+ # num_of_approvals.times do |i|
394
+ # approvals.push(Casper::Entity::DeployApproval.new(deploy.get_approvals[i]))
395
+ # end
396
+ # puts approvals[0].get_signer
397
+ # puts hash, header, payment, session, approvals
398
+
399
+ #********** info_get_status *********************************#
400
+ node_status = client.info_get_status
401
+ # Uncomment following lines to see the outputs
402
+ # puts node_status
403
+ # puts node_status.get_api_version
404
+ # puts node_status.get_chainspec_name
405
+ # puts node_status.get_starting_state_root_hash
406
+ # puts node_status.get_peers
407
+ # puts node_status.get_last_added_block_info
408
+ # puts node_status.get_our_public_signing_key
409
+ # puts node_status.get_round_length
410
+ # puts node_status.get_next_upgrade
411
+ # puts node_status.get_build_version
412
+ # puts node_status.get_uptime
413
+
414
+ #********** chain_get_block_transfers(block_hash = "") *********************************#
415
+ # block_Hash taken from Testnet
416
+ block_hash = "ff2ad232c3efc22a385fce44df844fc696e904ce8ba78599a576aa68c76889c4"
417
+ transfers = client.chain_get_block_transfers(block_hash)
418
+ # Uncomment following lines to see the outputs
419
+ # puts transfers
420
+ # transfers.each do |transfer|
421
+ # puts transfer.get_deploy_hash
422
+ # puts transfer.get_from
423
+ # puts transfer.get_to
424
+ # puts transfer.get_source
425
+ # puts transfer.get_target
426
+ # puts transfer.get_amount
427
+ # puts transfer.get_gas
428
+ # puts transfer.get_id
429
+ # end
430
+
431
+
432
+
433
+ #********** chain_get_block(block_hash) *********************************#
434
+ block_hash = "ff2ad232c3efc22a385fce44df844fc696e904ce8ba78599a576aa68c76889c4"
435
+ block = client.chain_get_block(block_hash)
436
+ # Uncomment following lines to see the outputs
437
+ # puts block
438
+ # To retrieve BlockHeader object
439
+ # block_header = block.get_header
440
+ # puts block_header
441
+ # To access and print members of the block_header object (block_header is an instance of BlockHeader )
442
+ # puts block_header.get_parent_hash
443
+ # puts block_header.get_state_root_hash
444
+ # puts block_header.get_body_hash
445
+ # puts block_header.get_random_bit
446
+ # puts block_header.get_accumulated_seed
447
+ # puts block_header.get_era_end
448
+ # puts block_header.get_timestamp
449
+ # puts block_header.get_era_id
450
+ # puts block_header.get_height
451
+ # puts block_header.get_protocol_version
452
+
453
+ # To retrieve BlockBody object
454
+ # block_body = block.get_body
455
+ # To access and print members of the block_body object (block_body is an instance of BlockBody )
456
+ # puts block_body
457
+ # puts block_body.get_proposer
458
+ # puts block_body.get_deploy_hashes
459
+ # puts block_body.get_transfer_hashes
460
+
461
+ # To retrieve an array of BlockProof objects
462
+ # proofs = block.get_proofs
463
+ # To access and print members of the block_proof objects (block_proof is an instance of BlockProof )
464
+ # puts proofs
465
+ # To access and print each proof object and its members
466
+ # i = 0
467
+ # proofs.each do |proof|
468
+ # puts "proofs[#{i}]: #{proof}"
469
+ # puts "public_key: " + proof.get_public_key
470
+ # puts "signature: " + proof.get_signature
471
+ # i += 1
472
+ # end
473
+
474
+
475
+
476
+ #********** chain_get_eraInfo_by_SwitchBlock(block_hash) *********************************#
477
+ block_hash = "d2077716e5b8796723c5720237239720f54e6ada54e3357f2c4896f2a51a6d8f"
478
+ era_summary = client.chain_get_eraInfo_by_SwitchBlock(block_hash)
479
+ # Uncomment following lines to see the outputs
480
+ # puts era_summary
481
+ # puts era_summary.get_block_hash
482
+ # puts era_summary.get_era_id
483
+ # puts era_summary.get_stored_value
484
+ # puts era_summary.get_stored_value.get_stored_value
485
+ # puts era_summary.get_state_root_hash
486
+ # puts era_summary.get_merkle_proof
487
+ # era_summary.map { |k, v| puts "#{k}" }
488
+ #
489
+
490
+
491
+
492
+ #********** state_get_item(state_root_hash, key, path) *********************************#
493
+ node_ip_address = "65.108.78.120" # => Taken from Mainnet
494
+ client = Casper::CasperClient.new(node_ip_address)
495
+ # Retrieve the stored_value object which is an instance of StoredValue
496
+ # Uncomment following lines to see the outputs
497
+ stored_value = client.state_get_item("647C28545316E913969B032Cf506d5D242e0F857061E70Fb3DF55980611ace86", "bid-24b6D5Aabb8F0AC17D272763A405E9CECa9166B75B745Cf200695E172857c2dD", [])
498
+ # puts stored_value # => #<Casper::Entity::StoredValue:0x0000000003767a48>
499
+ # puts stored_value.get_key # => Bid
500
+ # puts stored_value.get_bid # => Retrieve and print Bid object related data
501
+ # # or
502
+ # puts stored_value.get_stored_value # => Retrieve and print Bid object related data
503
+
504
+
505
+
506
+
507
+ #********** state_get_dictionary_item(state_root_hash, item_key, uref) *********************************#
508
+ node_ip_address = "65.108.78.120" # => Taken from Mainnet
509
+ client = Casper::CasperClient.new(node_ip_address)
510
+ state_root_hash = "7b605ad991c949832fd966495afc3f97a2b8122a1a6afc2610b545a8c07e3456"
511
+ item_key = "f870e3cadfde21d7d7686fdf3d1a8413838274d363ca7b27ae71fc9125eb6743"
512
+ uref = "uref-0d689e987db7ee5be246282c3a7badf0411e34baeeab8e9d73c1223ae4ad02e5-007"
513
+ # # Retrieve folowing data from the network and convert it into its proper CLValue
514
+ # # {"CLValue"=>{"cl_type"=>"String", "bytes"=>"1a00000068747470733a2f2f636173706572636f6d6d756e6974792e696f", "parsed"=>"https://caspercommunity.io"}}
515
+
516
+ # Uncomment following lines to see the outputs
517
+ # stored_value = client.state_get_dictionary_item(state_root_hash, item_key, uref)
518
+ # puts stored_value # => #<CLString:0x0000000002b3c8e0>
519
+ # puts stored_value.get_cl_type # => String
520
+ # puts stored_value.get_value # => https://caspercommunity.io
521
+ # puts CLValueBytesParsers::CLStringBytesParser.to_bytes(stored_value.get_value) # => 1a00000068747470733a2f2f636173706572636f6d6d756e6974792e696f
522
+
523
+
524
+
525
+ #********** state_get_balance(state_root_hash, balance_uref) *********************************#
526
+ node_ip_address = "65.108.78.120" # => Taken from Mainnet
527
+ client = Casper::CasperClient.new(node_ip_address)
528
+ state_root_hash = "610e932aef10d3e1fa04940c79a4a2789ee79c17046f1a9b45a2919f3600f3d5"
529
+ uref = "uref-7de5e973b7d70bc2b328814411f2009aafd8dba901cfc2c588ba65088dcd22bb-007"
530
+
531
+ # Uncomment following lines to see the outputs
532
+ # balance = client.state_get_balance(state_root_hash, uref)
533
+ # puts balance # => 29269647684075 (current balance 9/24/2022)
534
+
535
+
536
+ #********** state_get_AuctionInfo *********************************#
537
+ # block_Hash taken from MainNet
538
+ block_hash = "5fdbdf3fa70d37821aa2d1752743e9653befc15e65e40c2655e1ce93a807260f"
539
+ node_ip_address = "65.108.78.120" # => Taken from Mainnet
540
+ client = Casper::CasperClient.new(node_ip_address)
541
+
542
+ # Uncomment following lines to see the outputs
543
+ # auction = client.state_get_AuctionInfo
544
+ # Retrieve and print an instance of AuctionState entity
545
+ # puts auction # => #<Casper::Entity::AuctionState:0x0000000003306bc0>
546
+ # Retrieve and print state root hash as a String value
547
+ # puts auction.get_state_root_hash # => "6448b55f1dd7c9ad337f4fd4c77586d7ae30da146e0b340932aba7e7efa9cbcb"
548
+ # Retrieve and print block height as an Integer value
549
+ # puts auction.get_block_height # => 1128800
550
+ # Retrieve and print an array of instances of EraValidor entity
551
+ # puts auction.get_era_validators # => [#<Casper::Entity::EraValidator:0x0000000002b69980>, #<Casper::Entity::EraValidator:0x0000000002b68940>]
552
+ # Retrieve and print an array of instances of Bid entity
553
+ # puts auction.get_bids # => [#<Casper::Entity::Bid:0x000000000430bcf0>, #<Casper::Entity::Bid:0x000000000430b6d8>....]
554
+
555
+ # Retrieve and print an instance of BidInfo, which is also the member of bid object
556
+ # bids = auction.get_bids
557
+ # bid = bids[0] # => #<Casper::Entity::Bid:0x0000000003773dc0>
558
+ # bid_info = bid.get_bid_info # => #<Casper::Entity::BidInfo:0x00000000042cffc0>
559
+ # Retrieve and print an array of delegator objects, which are instance of Delegator entity
560
+ # delegators = bid_info.get_delegators
561
+ # puts delegators # => [#<Casper::Entity::Delegator:0x000000000396c550>, #<Casper::Entity::Delegator:0x000000000396c500>.....]
562
+ # How to access members of one of the above delegator instances
563
+ # For instance, access to stake amount at first delegator
564
+ # delegator = delegators[0]
565
+ # stake_amount = delegator.get_staked_amount # => 27871095039894
566
+ ```
@@ -3,15 +3,15 @@ require_relative '../types/cl_public_key.rb'
3
3
  require_relative '../utils/hex_utils.rb'
4
4
  require_relative '../utils/hash_utils.rb'
5
5
 
6
- CLPublicKeyTag = {
7
- ED25519: 1,
8
- SECP256K1: 2
9
- }
6
+ # CLPublicKeyTag = {
7
+ # ED25519: 1,
8
+ # SECP256K1: 2
9
+ # }
10
10
 
11
- SignatureAlgorithm = {
12
- Ed25519: 'ed25519',
13
- Secp256K1: 'secp256k1'
14
- }
11
+ # SignatureAlgorithm = {
12
+ # Ed25519: 'ed25519',
13
+ # Secp256K1: 'secp256k1'
14
+ # }
15
15
 
16
16
  class AsymmetricKey
17
17
  attr_reader :public_key, :private_key, :signature_algorithm
@@ -19,7 +19,8 @@ class AsymmetricKey
19
19
  # @param [CLPublicKey] public_key
20
20
  # @param [Array] private_key
21
21
  # @param [SignatureAlgorithm] signature_algorithm
22
- def initialize(public_key, private_key, signature_algorithm)
22
+ def initialize(public_key = CLPublicKey.new([204, 238, 25, 54, 110, 175, 3, 72, 124, 184, 17, 151, 174, 142, 220,
23
+ 177, 180, 127, 33, 76, 238, 0, 214, 89, 115, 128, 9, 107, 159, 132, 99, 193], 1), private_key = nil, signature_algorithm = nil)
23
24
  @public_key = public_key
24
25
  @private_key = private_key
25
26
  @signature_algorithm = signature_algorithm
@@ -49,15 +50,15 @@ class AsymmetricKey
49
50
  end
50
51
 
51
52
  # @return [Array<Integer>]
52
- def account_hash
53
- @tag = @public_key.get_cl_public_key_tag
54
- key_name = CLPublicKeyTag.key(@tag).to_s
55
- prefix = key_name.downcase.unpack("C*") + [0]
56
- bytes = prefix + @public_key.get_value
57
- result_array = Utils::HashUtils.byte_hash(bytes)
58
- @public_key.get_value.length == 0 ? [] : result_array
59
- #*** @public_key.to_account_hash_byte_array
60
- end
53
+ # def account_hash
54
+ # @tag = @public_key.get_cl_public_key_tag
55
+ # key_name = CLPublicKeyTag.key(@tag).to_s
56
+ # prefix = key_name.downcase.unpack("C*") + [0]
57
+ # bytes = prefix + @public_key.get_value
58
+ # result_array = Utils::HashUtils.byte_hash(bytes)
59
+ # @public_key.get_value.length == 0 ? [] : result_array
60
+ # #*** @public_key.to_account_hash_byte_array
61
+ # end
61
62
 
62
63
  # @param [String] path_to_private_key
63
64
  def create_from_private_key_file(path_to_private_key)