casper_network 0.2.1 → 1.0.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 (135) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +15 -4
  3. data/lib/casper_network.rb +62 -8
  4. data/lib/crypto/00_asymmetric_key.rb +95 -0
  5. data/lib/crypto/01_ed25519.rb +67 -0
  6. data/lib/crypto/asymmetric_key.rb +87 -0
  7. data/lib/crypto/ed25519_key.rb +44 -0
  8. data/lib/crypto/key_pair.rb +40 -0
  9. data/lib/crypto/keys.rb +7 -0
  10. data/lib/crypto/secp256k1_key.rb +0 -0
  11. data/lib/crypto/test_ed25519_key.rb +44 -0
  12. data/lib/entity/account.rb +45 -0
  13. data/lib/entity/action_thresholds.rb +25 -0
  14. data/lib/entity/associated_key.rb +24 -0
  15. data/lib/entity/auction_state.rb +1 -0
  16. data/lib/entity/bid.rb +1 -0
  17. data/lib/entity/bid_info.rb +1 -0
  18. data/lib/entity/contract.rb +47 -0
  19. data/lib/entity/contract_package.rb +41 -0
  20. data/lib/entity/contract_version.rb +33 -0
  21. data/lib/entity/delegator.rb +1 -0
  22. data/lib/entity/deploy.rb +1 -0
  23. data/lib/entity/deploy_approval.rb +8 -6
  24. data/lib/entity/deploy_executable.rb +155 -1
  25. data/lib/entity/deploy_executable_item_internal.rb +27 -0
  26. data/lib/entity/deploy_executable_transfer.rb +51 -0
  27. data/lib/entity/deploy_hash.rb +1 -0
  28. data/lib/entity/deploy_header.rb +18 -15
  29. data/lib/entity/deploy_info.rb +45 -0
  30. data/lib/entity/deploy_named_argument.rb +20 -0
  31. data/lib/entity/deploy_transfer.rb +11 -0
  32. data/lib/entity/disabled_version.rb +26 -0
  33. data/lib/entity/era_info.rb +18 -0
  34. data/lib/entity/era_summary.rb +1 -0
  35. data/lib/entity/era_validator.rb +1 -0
  36. data/lib/entity/executable_deploy_item.rb +11 -0
  37. data/lib/entity/group.rb +25 -0
  38. data/lib/entity/module_bytes.rb +51 -0
  39. data/lib/entity/peer.rb +1 -0
  40. data/lib/entity/seigniorage_allocation.rb +18 -0
  41. data/lib/entity/stored_contract_by_hash.rb +51 -0
  42. data/lib/entity/stored_contract_by_name.rb +52 -0
  43. data/lib/entity/stored_value.rb +57 -0
  44. data/lib/entity/stored_versioned_contract_by_hash.rb +63 -0
  45. data/lib/entity/stored_versioned_contract_by_name.rb +63 -0
  46. data/lib/entity/transfer.rb +66 -0
  47. data/lib/entity/validator_weight.rb +1 -0
  48. data/lib/entity/vesting_schedule.rb +22 -0
  49. data/lib/include.rb +18 -0
  50. data/lib/rpc/rpc.rb +227 -0
  51. data/lib/rpc/rpc_client.rb +45 -39
  52. data/lib/rpc/rpc_error.rb +1 -0
  53. data/lib/serialization/cl_type_serializer.rb +77 -0
  54. data/lib/serialization/cl_value_bytes_parsers.rb +498 -0
  55. data/lib/serialization/cl_value_serializer.rb +260 -0
  56. data/lib/serialization/deploy_approval_serializer.rb +16 -0
  57. data/lib/serialization/deploy_executable_serializer.rb +27 -0
  58. data/lib/serialization/deploy_header_serializer.rb +49 -0
  59. data/lib/serialization/deploy_named_arg_serializer.rb +20 -0
  60. data/lib/serialization/deploy_serializer.rb +269 -0
  61. data/lib/serialization/test.rb +431 -0
  62. data/lib/types/cl_account_hash.rb +24 -0
  63. data/lib/types/cl_account_hash_type.rb +22 -0
  64. data/lib/types/cl_any.rb +25 -0
  65. data/lib/types/cl_any_type.rb +22 -0
  66. data/lib/types/cl_bool.rb +32 -0
  67. data/lib/types/cl_bool_type.rb +35 -0
  68. data/lib/types/cl_byte_array.rb +25 -0
  69. data/lib/types/cl_byte_array_type.rb +27 -0
  70. data/lib/types/cl_i32.rb +26 -0
  71. data/lib/types/cl_i32_type.rb +26 -0
  72. data/lib/types/cl_i64.rb +26 -0
  73. data/lib/types/cl_i64_type.rb +27 -0
  74. data/lib/types/cl_key.rb +39 -0
  75. data/lib/types/cl_key_type.rb +27 -0
  76. data/lib/types/cl_list.rb +25 -0
  77. data/lib/types/cl_list_type.rb +26 -0
  78. data/lib/types/cl_map.rb +25 -0
  79. data/lib/types/cl_map_type.rb +26 -0
  80. data/lib/types/cl_option.rb +33 -0
  81. data/lib/types/cl_option_type.rb +52 -0
  82. data/lib/types/cl_public_key.rb +152 -0
  83. data/lib/types/cl_public_key_type.rb +26 -0
  84. data/lib/types/cl_result.rb +25 -0
  85. data/lib/types/cl_result_type.rb +26 -0
  86. data/lib/types/cl_string.rb +39 -0
  87. data/lib/types/cl_string_type.rb +32 -0
  88. data/lib/types/cl_tuple.rb +151 -0
  89. data/lib/types/cl_tuple_type.rb +108 -0
  90. data/lib/types/cl_type.rb +96 -0
  91. data/lib/types/cl_type_tag.rb +51 -0
  92. data/lib/types/cl_u128.rb +26 -0
  93. data/lib/types/cl_u128_type.rb +26 -0
  94. data/lib/types/cl_u256.rb +26 -0
  95. data/lib/types/cl_u256_type.rb +26 -0
  96. data/lib/types/cl_u32.rb +26 -0
  97. data/lib/types/cl_u32_type.rb +26 -0
  98. data/lib/types/cl_u512.rb +26 -0
  99. data/lib/types/cl_u512_type.rb +26 -0
  100. data/lib/types/cl_u64.rb +26 -0
  101. data/lib/types/cl_u64_type.rb +27 -0
  102. data/lib/types/cl_u8.rb +26 -0
  103. data/lib/types/cl_u8_type.rb +26 -0
  104. data/lib/types/cl_unit.rb +38 -0
  105. data/lib/types/cl_unit_type.rb +22 -0
  106. data/lib/types/cl_uref.rb +120 -0
  107. data/lib/types/cl_uref_type.rb +46 -0
  108. data/lib/types/cl_value.rb +11 -0
  109. data/lib/types/constants.rb +50 -0
  110. data/lib/types/error.rb +7 -0
  111. data/lib/utils/base_16.rb +18 -0
  112. data/lib/utils/byte_utils.rb +107 -0
  113. data/lib/utils/find_byte_parser_by_cl_type.rb +53 -0
  114. data/lib/utils/hash_utils.rb +19 -0
  115. data/lib/utils/hex_utils.rb +12 -0
  116. data/lib/utils/time_utils.rb +85 -0
  117. data/lib/utils/utils.rb +2 -0
  118. data/lib/version.rb +3 -0
  119. data/spec/a_spec.rb +697 -0
  120. data/spec/byte_utils_spec.rb +72 -0
  121. data/spec/cl_public_spec.rb +169 -0
  122. data/spec/cl_types_spec.rb +715 -0
  123. data/spec/cl_value_serializer_spec.rb +140 -0
  124. data/spec/crypto_spec.rb +42 -0
  125. data/spec/deploy_approval_serializer_spec.rb +26 -0
  126. data/spec/deploy_executable_serializer_spec.rb +0 -0
  127. data/spec/deploy_header_serializer_spec.rb +21 -0
  128. data/spec/deploy_named_arg_serializer_spec.rb +49 -0
  129. data/spec/deploy_serializer_spec.rb +77 -0
  130. data/spec/deploy_serializer_test_spec.rb +225 -0
  131. data/spec/mainnet_spec.rb +8 -8
  132. data/spec/string_spec.rb +68 -0
  133. data/spec/testnet_spec.rb +11 -11
  134. data/spec/time_utils_spec.rb +87 -0
  135. metadata +130 -2
@@ -1,4 +1,3 @@
1
- # casper_network.rb
2
1
  require 'jimson'
3
2
  require 'json'
4
3
  require 'rdoc/rdoc'
@@ -7,10 +6,11 @@ require 'resolv'
7
6
  require 'rest-client'
8
7
  require 'active_support/core_ext/hash/keys'
9
8
  require 'timeout'
10
- require_relative '../entity/peer.rb'
9
+ require 'net/http'
10
+ require_relative './rpc_error.rb'
11
11
  module Casper
12
- # Class for interacting with the network via RPC
13
- class RpcClient
12
+ # Interacting with the network via RPC
13
+ class RpcClient
14
14
  attr_accessor :ip_address, :port, :url, :state_root_hash
15
15
 
16
16
  # Constructor
@@ -28,27 +28,26 @@ module Casper
28
28
  @era_summary = {}
29
29
  @balance_value = ""
30
30
  @auction_state = {}
31
+
32
+ @rpc_error = Casper::RpcError::ErrorHandle.new
33
+ @err = @rpc_error.error_handling(@url)
31
34
 
32
- @peers = []
35
+ end
36
+
37
+ def get_error
38
+ @err
33
39
  end
34
40
 
35
41
  # @return [Array<Hash>] peers array
36
42
  def info_get_peers
37
- begin
38
- status = Timeout::timeout(20) {
43
+ begin
39
44
  client = Jimson::Client.new(@url)
40
45
  response = client.info_get_peers
41
- response.deep_symbolize_keys!
42
- @peer_array = response[:peers]
43
- @peer_array.map { |item| @peers << Casper::Entity::Peer.new(item) }
44
- # @peers[0].get_node_id
45
- # @peers[0].get_node_id
46
- # @peers[0].get_address
47
- @peer_array
48
- }
49
- rescue Timeout::Error
50
- 'Timeout expired to retrieve peers!'
51
- end
46
+ @peer_array = response["peers"]
47
+ rescue
48
+ @rpc_error = Casper::RpcError::ErrorHandle.new
49
+ @error = @rpc_error.error_handling(@url)
50
+ end
52
51
  end
53
52
 
54
53
  # @return [String] state_root_hash value
@@ -60,7 +59,8 @@ module Casper
60
59
  @state_root_hash = result["state_root_hash"]
61
60
  }
62
61
  rescue
63
- 'Timeout expired to retrieve state_root_hash value!'
62
+ @rpc_error = Casper::RpcError::ErrorHandle.new
63
+ @error = @rpc_error.error_handling(@url)
64
64
  end
65
65
  end
66
66
 
@@ -69,12 +69,12 @@ module Casper
69
69
  # @return [Hash] Deploy
70
70
  def info_get_deploy(deploy_hash)
71
71
  begin
72
- status = Timeout::timeout(20) {
73
- if (deploy_hash == "" || deploy_hash == nil)
74
- return "Server error -32602: Invalid params"
75
- end
72
+ status = Timeout::timeout(10) {
76
73
  client = Jimson::Client.new(@url)
77
74
  response = client.info_get_deploy({"deploy_hash"=> deploy_hash })
75
+ if (deploy_hash == "" || deploy_hash == nil)
76
+ Casper::RpcError::InvalidParameter.error
77
+ end
78
78
  @deploy = response["deploy"]
79
79
  # @deploy.keys.each do |key|
80
80
  # @deploy[(key.to_sym rescue key) || key] = @deploy.delete(key)
@@ -82,7 +82,7 @@ module Casper
82
82
  @deploy
83
83
  }
84
84
  rescue
85
- 'Timeout expired to retrieve Deploy!'
85
+ Casper::RpcError::InvalidParameter.error
86
86
  end
87
87
  end
88
88
 
@@ -96,7 +96,8 @@ module Casper
96
96
  @node_status = client.info_get_status
97
97
  }
98
98
  rescue
99
- 'Timeout expired to retrieve node status information'
99
+ @rpc_error = Casper::RpcError::ErrorHandle.new
100
+ @error = @rpc_error.error_handling(@url)
100
101
  end
101
102
  end
102
103
 
@@ -113,7 +114,7 @@ module Casper
113
114
  @block_transfers
114
115
  }
115
116
  rescue
116
- 'Timeout expired to retrieve block_transfers'
117
+ Casper::RpcError::InvalidParameter.error
117
118
  end
118
119
  end
119
120
 
@@ -132,7 +133,7 @@ module Casper
132
133
  end
133
134
  }
134
135
  rescue
135
- 'Timeout expired to retrieve block_info'
136
+ Casper::RpcError::InvalidParameter.error
136
137
  end
137
138
  end
138
139
 
@@ -140,14 +141,19 @@ module Casper
140
141
  # @return [Hash] era_summary
141
142
  def chain_get_eraInfo_by_SwitchBlock(block_hash)
142
143
  begin
143
- state = Timeout::timeout(60) {
144
+ state = Timeout::timeout(10) {
144
145
  client = Jimson::Client.new(@url)
145
146
  response = client.chain_get_era_info_by_switch_block("block_identifier" => {"Hash" => block_hash})
146
147
  @era_summary = response["era_summary"]
147
- @era_summary
148
+
149
+ if @era_summary == nil
150
+ Casper::RpcError::InvalidParameter.error
151
+ else
152
+ @era_summary
153
+ end
148
154
  }
149
155
  rescue
150
- 'Timeout expired to retrieve era_summary'
156
+ Casper::RpcError::InvalidParameter.error
151
157
  end
152
158
  end
153
159
 
@@ -167,7 +173,7 @@ module Casper
167
173
  @stored_value
168
174
  }
169
175
  rescue
170
- 'Timeout expired to retrieve stored_value'
176
+ Casper::RpcError::InvalidParameter.error
171
177
  end
172
178
  end
173
179
 
@@ -176,17 +182,17 @@ module Casper
176
182
  # @param [String] uref
177
183
  def state_get_dictionary_item(state_root_hash, item_key, uref)
178
184
  begin
179
- state = Timeout::timeout(5) {
185
+ state = Timeout::timeout(10) {
180
186
  client = Jimson::Client.new(@url)
181
187
  response = client.state_get_dictionary_item({
182
188
  "state_root_hash" => state_root_hash,
183
189
  "dictionary_identifier" => {'URef' =>
184
190
  {'seed_uref' => uref, 'dictionary_item_key' => item_key} }})
185
- @stored_value = response["stored_value"]
186
- @stored_value
191
+ @stored_value = response["stored_value"]
192
+ @stored_value
187
193
  }
188
194
  rescue
189
- 'Timeout expired to retrieve stored_value'
195
+ Casper::RpcError::InvalidParameter.error
190
196
  end
191
197
  end
192
198
 
@@ -204,7 +210,7 @@ module Casper
204
210
  @balance_value
205
211
  }
206
212
  rescue
207
- 'Timeout expired to retrieve balance_value'
213
+ Casper::RpcError::InvalidParameter.error
208
214
  end
209
215
  end
210
216
 
@@ -219,9 +225,9 @@ module Casper
219
225
  @auction_state
220
226
  }
221
227
  rescue
222
- 'Timeout expired to retrieve auction_state information!'
228
+ @rpc_error = Casper::RpcError::ErrorHandle.new
229
+ @error = @rpc_error.error_handling(@url)
223
230
  end
224
231
  end
225
232
  end
226
- end
227
-
233
+ end
data/lib/rpc/rpc_error.rb CHANGED
@@ -1,6 +1,7 @@
1
1
 
2
2
  module Casper
3
3
  module RpcError
4
+ # Exception handling
4
5
  class ErrorHandle
5
6
  # @param [Integer] code
6
7
  # @param [String] message
@@ -0,0 +1,77 @@
1
+ require_relative '../types/cl_bool_type.rb'
2
+ require_relative '../types/cl_bool.rb'
3
+ require_relative '../types/cl_i32_type.rb'
4
+ require_relative '../types/cl_i64_type.rb'
5
+ require_relative '../types/cl_u8_type.rb'
6
+ require_relative '../types/cl_u32_type.rb'
7
+ require_relative '../types/cl_u64_type.rb'
8
+ require_relative '../types/cl_u128_type.rb'
9
+ require_relative '../types/cl_u256_type.rb'
10
+ require_relative '../types/cl_u512_type.rb'
11
+ require_relative '../types/cl_unit_type.rb'
12
+ require_relative '../types/cl_string_type.rb'
13
+ require_relative '../types/cl_key_type.rb'
14
+ require_relative '../types/cl_option_type.rb'
15
+ require_relative '../types/cl_list_type.rb'
16
+ require_relative '../types/cl_byte_array_type.rb'
17
+ require_relative '../types/cl_result_type.rb'
18
+ require_relative '../types/cl_map_type.rb'
19
+ require_relative '../types/cl_tuple_type.rb'
20
+ require_relative '../types/cl_any_type.rb'
21
+ require_relative '../types/cl_public_key_type.rb'
22
+
23
+ # Byte serializer for CLType
24
+ class CLTypeSerizalizer
25
+
26
+ def self.serialize_cl_type(cl_type)
27
+ if cl_type.to_string == "Bool"
28
+ [0].pack("C*").unpack1("H*")
29
+ elsif cl_type.to_string == "I32"
30
+ [1].pack("C*").unpack1("H*")
31
+ elsif cl_type.to_string == "I64"
32
+ [2].pack("C*").unpack1("H*")
33
+ elsif cl_type.to_string == "U8"
34
+ [3].pack("C*").unpack1("H*")
35
+ elsif cl_type.to_string == "U32"
36
+ [4].pack("C*").unpack1("H*")
37
+ elsif cl_type.to_string == "U64"
38
+ [5].pack("C*").unpack1("H*")
39
+ elsif cl_type.to_string == "U128"
40
+ [6].pack("C*").unpack1("H*")
41
+ elsif cl_type.to_string == "U256"
42
+ [7].pack("C*").unpack1("H*")
43
+ elsif cl_type.to_string == "U512"
44
+ [8].pack("C*").unpack1("H*")
45
+ elsif cl_type.to_string == "Unit"
46
+ [9].pack("C*").unpack1("H*")
47
+ elsif cl_type.to_string == "String"
48
+ [10].pack("C*").unpack1("H*")
49
+ elsif cl_type.to_string == "Key"
50
+ [11].pack("C*").unpack1("H*")
51
+ elsif cl_type.to_string == "URef"
52
+ [12].pack("C*").unpack1("H*")
53
+ elsif cl_type.to_string == "Option"
54
+ [13].pack("C*").unpack1("H*") + serialize_cl_type(cl_type.get_inner_type)
55
+ elsif cl_type.to_string == "List"
56
+ [14].pack("C*").unpack1("H*")
57
+ elsif cl_type.to_string == "ByteArray"
58
+ [15].pack("C*").unpack1("H*")
59
+ elsif cl_type.to_string == "Result"
60
+ [16].pack("C*").unpack1("H*")
61
+ elsif cl_type.to_string == "Map"
62
+ [17].pack("C*").unpack1("H*")
63
+ elsif cl_type.to_string == "Tuple1"
64
+ [18].pack("C*").unpack1("H*") + cl_type.get_data[0].to_bytes
65
+ elsif cl_type.to_string == "Tuple2"
66
+ [19].pack("C*").unpack1("H*") + cl_type.get_data[0].to_bytes + cl_type.get_data[1].to_bytes
67
+ elsif cl_type.to_string == "Tuple3"
68
+ [20].pack("C*").unpack1("H*") + cl_type.get_data[0].to_bytes + cl_type.get_data[1].to_bytes + cl_type.get_data[2].to_bytes
69
+ elsif cl_type.to_string == "Any"
70
+ [21].pack("C*").unpack1("H*")
71
+ elsif cl_type.to_string == "PublicKey"
72
+ [22].pack("C*").unpack1("H*")
73
+ else
74
+ "Undefined"
75
+ end
76
+ end
77
+ end