casper_network 0.2.1 → 1.0.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 +4 -4
- data/README.md +15 -4
- data/lib/casper_network.rb +62 -7
- data/lib/crypto/00_asymmetric_key.rb +95 -0
- data/lib/crypto/01_ed25519.rb +67 -0
- data/lib/crypto/asymmetric_key.rb +87 -0
- data/lib/crypto/ed25519_key.rb +44 -0
- data/lib/crypto/key_pair.rb +40 -0
- data/lib/crypto/keys.rb +7 -0
- data/lib/crypto/secp256k1_key.rb +0 -0
- data/lib/crypto/test_ed25519_key.rb +44 -0
- data/lib/entity/account.rb +45 -0
- data/lib/entity/action_thresholds.rb +25 -0
- data/lib/entity/associated_key.rb +24 -0
- data/lib/entity/contract.rb +47 -0
- data/lib/entity/contract_package.rb +41 -0
- data/lib/entity/contract_version.rb +33 -0
- data/lib/entity/deploy_approval.rb +7 -6
- data/lib/entity/deploy_executable.rb +154 -1
- data/lib/entity/deploy_executable_item_internal.rb +26 -0
- data/lib/entity/deploy_executable_transfer.rb +50 -0
- data/lib/entity/deploy_header.rb +17 -15
- data/lib/entity/deploy_info.rb +44 -0
- data/lib/entity/deploy_named_argument.rb +19 -0
- data/lib/entity/deploy_transfer.rb +10 -0
- data/lib/entity/disabled_version.rb +26 -0
- data/lib/entity/era_info.rb +18 -0
- data/lib/entity/executable_deploy_item.rb +11 -0
- data/lib/entity/group.rb +25 -0
- data/lib/entity/module_bytes.rb +50 -0
- data/lib/entity/seigniorage_allocation.rb +18 -0
- data/lib/entity/stored_contract_by_hash.rb +50 -0
- data/lib/entity/stored_contract_by_name.rb +50 -0
- data/lib/entity/stored_value.rb +57 -0
- data/lib/entity/stored_versioned_contract_by_hash.rb +61 -0
- data/lib/entity/stored_versioned_contract_by_name.rb +61 -0
- data/lib/entity/transfer.rb +65 -0
- data/lib/entity/vesting_schedule.rb +22 -0
- data/lib/include.rb +18 -0
- data/lib/rpc/rpc.rb +227 -0
- data/lib/rpc/rpc_client.rb +45 -39
- data/lib/serialization/cl_type_serializer.rb +76 -0
- data/lib/serialization/cl_value_bytes_parsers.rb +498 -0
- data/lib/serialization/cl_value_serializer.rb +259 -0
- data/lib/serialization/deploy_approval_serializer.rb +15 -0
- data/lib/serialization/deploy_executable_serializer.rb +26 -0
- data/lib/serialization/deploy_header_serializer.rb +49 -0
- data/lib/serialization/deploy_named_arg_serializer.rb +19 -0
- data/lib/serialization/deploy_serializer.rb +268 -0
- data/lib/serialization/test.rb +431 -0
- data/lib/types/cl_account_hash.rb +24 -0
- data/lib/types/cl_account_hash_type.rb +22 -0
- data/lib/types/cl_any.rb +25 -0
- data/lib/types/cl_any_type.rb +22 -0
- data/lib/types/cl_bool.rb +32 -0
- data/lib/types/cl_bool_type.rb +35 -0
- data/lib/types/cl_byte_array.rb +25 -0
- data/lib/types/cl_byte_array_type.rb +27 -0
- data/lib/types/cl_i32.rb +26 -0
- data/lib/types/cl_i32_type.rb +26 -0
- data/lib/types/cl_i64.rb +26 -0
- data/lib/types/cl_i64_type.rb +27 -0
- data/lib/types/cl_key.rb +39 -0
- data/lib/types/cl_key_type.rb +27 -0
- data/lib/types/cl_list.rb +25 -0
- data/lib/types/cl_list_type.rb +26 -0
- data/lib/types/cl_map.rb +25 -0
- data/lib/types/cl_map_type.rb +26 -0
- data/lib/types/cl_option.rb +33 -0
- data/lib/types/cl_option_type.rb +52 -0
- data/lib/types/cl_public_key.rb +152 -0
- data/lib/types/cl_public_key_type.rb +26 -0
- data/lib/types/cl_result.rb +25 -0
- data/lib/types/cl_result_type.rb +26 -0
- data/lib/types/cl_string.rb +39 -0
- data/lib/types/cl_string_type.rb +32 -0
- data/lib/types/cl_tuple.rb +151 -0
- data/lib/types/cl_tuple_type.rb +108 -0
- data/lib/types/cl_type.rb +94 -0
- data/lib/types/cl_type_tag.rb +51 -0
- data/lib/types/cl_u128.rb +26 -0
- data/lib/types/cl_u128_type.rb +26 -0
- data/lib/types/cl_u256.rb +26 -0
- data/lib/types/cl_u256_type.rb +26 -0
- data/lib/types/cl_u32.rb +26 -0
- data/lib/types/cl_u32_type.rb +26 -0
- data/lib/types/cl_u512.rb +26 -0
- data/lib/types/cl_u512_type.rb +26 -0
- data/lib/types/cl_u64.rb +26 -0
- data/lib/types/cl_u64_type.rb +27 -0
- data/lib/types/cl_u8.rb +26 -0
- data/lib/types/cl_u8_type.rb +26 -0
- data/lib/types/cl_unit.rb +38 -0
- data/lib/types/cl_unit_type.rb +22 -0
- data/lib/types/cl_uref.rb +119 -0
- data/lib/types/cl_uref_type.rb +46 -0
- data/lib/types/cl_value.rb +10 -0
- data/lib/types/constants.rb +50 -0
- data/lib/types/error.rb +7 -0
- data/lib/utils/base_16.rb +18 -0
- data/lib/utils/byte_utils.rb +107 -0
- data/lib/utils/find_byte_parser_by_cl_type.rb +53 -0
- data/lib/utils/hash_utils.rb +19 -0
- data/lib/utils/hex_utils.rb +12 -0
- data/lib/utils/time_utils.rb +85 -0
- data/lib/utils/utils.rb +2 -0
- data/lib/version.rb +3 -0
- data/spec/a_spec.rb +697 -0
- data/spec/byte_utils_spec.rb +72 -0
- data/spec/cl_public_spec.rb +169 -0
- data/spec/cl_types_spec.rb +715 -0
- data/spec/cl_value_serializer_spec.rb +140 -0
- data/spec/client_spec.rb +20 -20
- data/spec/crypto_spec.rb +42 -0
- data/spec/deploy_approval_serializer_spec.rb +26 -0
- data/spec/deploy_executable_serializer_spec.rb +0 -0
- data/spec/deploy_header_serializer_spec.rb +21 -0
- data/spec/deploy_named_arg_serializer_spec.rb +49 -0
- data/spec/deploy_serializer_spec.rb +77 -0
- data/spec/deploy_serializer_test_spec.rb +225 -0
- data/spec/mainnet_spec.rb +8 -8
- data/spec/string_spec.rb +68 -0
- data/spec/testnet_spec.rb +11 -11
- data/spec/time_utils_spec.rb +87 -0
- metadata +130 -2
data/lib/rpc/rpc_client.rb
CHANGED
@@ -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
|
-
|
9
|
+
require 'net/http'
|
10
|
+
require_relative './rpc_error.rb'
|
11
|
+
# Class for interacting with the network via RPC
|
11
12
|
module Casper
|
12
|
-
|
13
|
-
class RpcClient
|
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
|
-
|
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
|
-
|
38
|
-
status = Timeout::timeout(20) {
|
43
|
+
begin
|
39
44
|
client = Jimson::Client.new(@url)
|
40
45
|
response = client.info_get_peers
|
41
|
-
response
|
42
|
-
|
43
|
-
@
|
44
|
-
|
45
|
-
|
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
|
-
|
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(
|
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
|
-
|
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
|
-
|
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
|
-
|
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
|
-
|
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(
|
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
|
-
|
148
|
+
|
149
|
+
if @era_summary == nil
|
150
|
+
Casper::RpcError::InvalidParameter.error
|
151
|
+
else
|
152
|
+
@era_summary
|
153
|
+
end
|
148
154
|
}
|
149
155
|
rescue
|
150
|
-
|
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
|
-
|
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(
|
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
|
-
|
186
|
-
|
191
|
+
@stored_value = response["stored_value"]
|
192
|
+
@stored_value
|
187
193
|
}
|
188
194
|
rescue
|
189
|
-
|
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
|
-
|
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
|
-
|
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
|
@@ -0,0 +1,76 @@
|
|
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
|
+
class CLTypeSerizalizer
|
24
|
+
|
25
|
+
def self.serialize_cl_type(cl_type)
|
26
|
+
if cl_type.to_string == "Bool"
|
27
|
+
[0].pack("C*").unpack1("H*")
|
28
|
+
elsif cl_type.to_string == "I32"
|
29
|
+
[1].pack("C*").unpack1("H*")
|
30
|
+
elsif cl_type.to_string == "I64"
|
31
|
+
[2].pack("C*").unpack1("H*")
|
32
|
+
elsif cl_type.to_string == "U8"
|
33
|
+
[3].pack("C*").unpack1("H*")
|
34
|
+
elsif cl_type.to_string == "U32"
|
35
|
+
[4].pack("C*").unpack1("H*")
|
36
|
+
elsif cl_type.to_string == "U64"
|
37
|
+
[5].pack("C*").unpack1("H*")
|
38
|
+
elsif cl_type.to_string == "U128"
|
39
|
+
[6].pack("C*").unpack1("H*")
|
40
|
+
elsif cl_type.to_string == "U256"
|
41
|
+
[7].pack("C*").unpack1("H*")
|
42
|
+
elsif cl_type.to_string == "U512"
|
43
|
+
[8].pack("C*").unpack1("H*")
|
44
|
+
elsif cl_type.to_string == "Unit"
|
45
|
+
[9].pack("C*").unpack1("H*")
|
46
|
+
elsif cl_type.to_string == "String"
|
47
|
+
[10].pack("C*").unpack1("H*")
|
48
|
+
elsif cl_type.to_string == "Key"
|
49
|
+
[11].pack("C*").unpack1("H*")
|
50
|
+
elsif cl_type.to_string == "URef"
|
51
|
+
[12].pack("C*").unpack1("H*")
|
52
|
+
elsif cl_type.to_string == "Option"
|
53
|
+
[13].pack("C*").unpack1("H*") + serialize_cl_type(cl_type.get_inner_type)
|
54
|
+
elsif cl_type.to_string == "List"
|
55
|
+
[14].pack("C*").unpack1("H*")
|
56
|
+
elsif cl_type.to_string == "ByteArray"
|
57
|
+
[15].pack("C*").unpack1("H*")
|
58
|
+
elsif cl_type.to_string == "Result"
|
59
|
+
[16].pack("C*").unpack1("H*")
|
60
|
+
elsif cl_type.to_string == "Map"
|
61
|
+
[17].pack("C*").unpack1("H*")
|
62
|
+
elsif cl_type.to_string == "Tuple1"
|
63
|
+
[18].pack("C*").unpack1("H*") + cl_type.get_data[0].to_bytes
|
64
|
+
elsif cl_type.to_string == "Tuple2"
|
65
|
+
[19].pack("C*").unpack1("H*") + cl_type.get_data[0].to_bytes + cl_type.get_data[1].to_bytes
|
66
|
+
elsif cl_type.to_string == "Tuple3"
|
67
|
+
[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
|
68
|
+
elsif cl_type.to_string == "Any"
|
69
|
+
[21].pack("C*").unpack1("H*")
|
70
|
+
elsif cl_type.to_string == "PublicKey"
|
71
|
+
[22].pack("C*").unpack1("H*")
|
72
|
+
else
|
73
|
+
"Undefined"
|
74
|
+
end
|
75
|
+
end
|
76
|
+
end
|