test_sdk1 1.0.2 → 1.1.3

Sign up to get free protection for your applications and to get access to all the features.
Files changed (62) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +495 -76
  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/group.rb +1 -1
  22. data/lib/entity/module_bytes.rb +16 -2
  23. data/lib/entity/status.rb +80 -0
  24. data/lib/entity/stored_contract_by_name.rb +2 -1
  25. data/lib/entity/stored_value.rb +86 -11
  26. data/lib/entity/stored_versioned_contract_by_hash.rb +2 -1
  27. data/lib/entity/stored_versioned_contract_by_name.rb +1 -1
  28. data/lib/entity/transfer.rb +7 -7
  29. data/lib/include.rb +2 -0
  30. data/lib/rpc/rpc_client.rb +1 -2
  31. data/lib/serialization/cl_type_serializer.rb +1 -0
  32. data/lib/serialization/cl_value_serializer.rb +70 -12
  33. data/lib/serialization/cl_value_serializer1.rb +314 -0
  34. data/lib/serialization/cl_value_serializer_update.rb +320 -0
  35. data/lib/serialization/deploy_approval_serializer.rb +1 -0
  36. data/lib/serialization/deploy_executable_serializer.rb +1 -1
  37. data/lib/serialization/deploy_header_serializer.rb +2 -1
  38. data/lib/serialization/deploy_named_arg_serializer.rb +2 -0
  39. data/lib/serialization/deploy_serializer.rb +145 -10
  40. data/lib/serialization/deploy_serializer1.rb +392 -0
  41. data/lib/serialization/deploy_serializer_update.rb +397 -0
  42. data/lib/serialization/test.rb +33 -13
  43. data/lib/test_sdk1.rb +30 -13
  44. data/lib/types/cl_option.rb +8 -2
  45. data/lib/types/cl_public_key.rb +2 -0
  46. data/lib/types/cl_type.rb +1 -0
  47. data/lib/types/cl_value.rb +8 -0
  48. data/lib/utils/byte_utils.rb +28 -0
  49. data/lib/utils/helpers.rb +10 -0
  50. data/lib/version.rb +1 -1
  51. data/spec/cl_value_serializer_spec.rb +16 -1
  52. data/spec/client_spec.rb +20 -20
  53. data/spec/dene_spec.rb +186 -0
  54. data/spec/deploy_executable_spec.rb +90 -0
  55. data/spec/deploy_executable_test_spec.rb +117 -0
  56. data/spec/deploy_serializer_spec.rb +5 -3
  57. data/spec/deploy_serializer_test_spec.rb +7 -1
  58. data/spec/testnet_spec.rb +3 -1
  59. data/spec/time_utils_spec.rb +3 -0
  60. metadata +20 -5
  61. data/lib/crypto/key_pair.rb +0 -40
  62. data/spec/deploy_executable_serializer_spec.rb +0 -0
data/lib/include.rb CHANGED
@@ -7,6 +7,8 @@ Dir[File.join(
7
7
  File.dirname(File.dirname(File.absolute_path(__FILE__))), "/lib/rpc/*.rb")].each {|file| require file }
8
8
  Dir[File.join(
9
9
  File.dirname(File.dirname(File.absolute_path(__FILE__))), "/lib/utils/*.rb")].each {|file| require file }
10
+ # Dir[File.join(
11
+ # File.dirname(File.dirname(File.absolute_path(__FILE__))), "/lib/crypto/*.rb")].each {|file| require file }
10
12
  # path = File.join(
11
13
  # File.dirname(File.dirname(File.absolute_path(__FILE__))),
12
14
  # '/lib/types/cl_bool'
@@ -8,9 +8,8 @@ require 'active_support/core_ext/hash/keys'
8
8
  require 'timeout'
9
9
  require 'net/http'
10
10
  require_relative './rpc_error.rb'
11
-
12
11
  module Casper
13
- # Class for interacting with the network via RPC
12
+ # Interacting with the network via RPC
14
13
  class RpcClient
15
14
  attr_accessor :ip_address, :port, :url, :state_root_hash
16
15
 
@@ -20,6 +20,7 @@ require_relative '../types/cl_tuple_type.rb'
20
20
  require_relative '../types/cl_any_type.rb'
21
21
  require_relative '../types/cl_public_key_type.rb'
22
22
 
23
+ # Byte serializer for CLType
23
24
  class CLTypeSerizalizer
24
25
 
25
26
  def self.serialize_cl_type(cl_type)
@@ -18,19 +18,26 @@ require_relative '../types/cl_uref.rb'
18
18
  require_relative '../types/cl_tuple.rb'
19
19
  require_relative '../types/cl_public_key.rb'
20
20
  require_relative '../types/constants.rb'
21
- require_relative '../serialization/cl_value_bytes_parsers.rb'
21
+ require_relative './cl_value_bytes_parsers.rb'
22
+ require_relative '../utils/byte_utils.rb'
22
23
 
24
+ # Byte serializer for CLValue
23
25
  class CLValueSerializer
26
+ def to_byte_array(num)
27
+ result = []
28
+ begin
29
+ result << (num & 0xff)
30
+ num >>= 8
31
+ end until (num == 0 || num == -1) && (result.last[7] == num[7])
32
+ # result.reverse
33
+ result
34
+ end
24
35
 
25
36
  def to_bytes(clvalue)
26
37
  type = clvalue.get_cl_type
27
38
  value = clvalue.get_value
28
39
  tag = CLType::TAGS[type.to_sym]
29
- # puts type
30
- # puts value
31
- # puts CLType::TAGS[type.to_sym]
32
- # puts tag
33
- [1].pack("L<*").unpack1("H*")
40
+
34
41
  serialized = ""
35
42
  if type == "Bool"
36
43
  [1].pack("L<*").unpack1("H*") + [value.to_i].pack("C*").unpack1("H*") + [tag].pack("C*").unpack1("H*")
@@ -49,7 +56,9 @@ class CLValueSerializer
49
56
  elsif type == "U256"
50
57
  [8].pack("L<*").unpack1("H*")
51
58
  elsif type == "U512"
52
- [8].pack("L<*").unpack1("H*")
59
+ bytes = Utils::ByteUtils.byte_array_to_hex(to_byte_array(value))[0...-2]
60
+ num_of_bytes = bytes.length/2
61
+ [num_of_bytes+1].pack("L<*").unpack1("H*") + [num_of_bytes].pack("C*").unpack1("H*") + bytes + [tag].pack("C*").unpack1("H*")
53
62
  elsif type == "Unit"
54
63
  [0].pack("L<*").unpack1("H*") + [tag].pack("C*").unpack1("H*")
55
64
  elsif type == "String"
@@ -62,7 +71,31 @@ class CLValueSerializer
62
71
  size = clvalue.to_bytes(uref).length/2
63
72
  [size].pack("L<*").unpack1("H*") + clvalue.to_bytes(uref) + [tag].pack("C*").unpack1("H*")
64
73
  elsif type == "Option"
65
- [0].pack("L<*").unpack1("H*")
74
+ =begin
75
+ # Solution 1, If we choose
76
+ # CLOption.new(data, inner_type) = CLOption.new({ "cl_type": inner_type, "bytes": bytes, "parsed": parsed), "U64")
77
+ inner_type = value[:cl_type]
78
+ bytes = value[:bytes]
79
+ parsed = value[:parsed]
80
+ data = { "cl_type": inner_type, "bytes": bytes, "parsed": parsed}
81
+ serialize_option_cl_value(data)
82
+ =end
83
+ inner_clvalue = value # => CLu64.new(1)
84
+ inner_value = value.get_value
85
+ inner_type = value.get_cl_type
86
+ # or
87
+ # inner_type = clvalue.get_inner_type
88
+
89
+ # puts "inner_clvalue #{inner_clvalue}"
90
+ inner_type = clvalue.get_inner_type # => or
91
+ inner_type = value.get_cl_type
92
+ # puts "inner_type = #{inner_type}"
93
+ # puts inner_value
94
+ bytes = Utils::ByteUtils.to_u64(inner_value)
95
+ bytes = "01" + bytes
96
+ length = bytes.size/2
97
+ tag = CLType::TAGS[inner_type.to_sym]
98
+ [length].pack("L<*").unpack1("H*") + bytes + "0d" + [tag].pack("C*").unpack1("H*")
66
99
  elsif type == "List"
67
100
  [0].pack("L<*").unpack1("H*")
68
101
  elsif type == "ByteArray"
@@ -77,7 +110,6 @@ class CLValueSerializer
77
110
  value1 = clvalue1.get_value
78
111
  tag1 = CLType::TAGS[type1.to_sym]
79
112
  serialized += helper(clvalue.get_value[0]) + [tag].pack("C*").unpack1("H*") + [tag1].pack("C*").unpack1("H*")
80
- # [18].pack("C*").unpack1("H*") + cl_type.get_data[0].to_bytes
81
113
  elsif type == "Tuple2"
82
114
  clvalue1 = clvalue.get_value[0]
83
115
  type1 = clvalue1.get_cl_type
@@ -133,7 +165,8 @@ class CLValueSerializer
133
165
  elsif type == "U8"
134
166
  [1].pack("L<*").unpack1("H*") + [value].pack("C*").unpack1("H*")
135
167
  elsif type == "U32"
136
- serialized += [4].pack("L<*").unpack1("H*") + [value].pack("L<*").unpack1("H*")
168
+ # serialized += [4].pack("L<*").unpack1("H*") + [value].pack("L<*").unpack1("H*")
169
+ [4].pack("L<*").unpack1("H*") + [value].pack("L<*").unpack1("H*")
137
170
  elsif type == "U64"
138
171
  [8].pack("L<*").unpack1("H*") + [value].pack("Q<*").unpack1("H*")
139
172
  elsif type == "U128"
@@ -141,7 +174,9 @@ class CLValueSerializer
141
174
  elsif type == "U256"
142
175
  [8].pack("L<*").unpack1("H*")
143
176
  elsif type == "U512"
144
- [8].pack("L<*").unpack1("H*")
177
+ bytes = [value].pack("Q<*").unpack1("H*")
178
+ bytes = bytes[0, 8]
179
+ [8].pack("Q<*").unpack1("H*")
145
180
  elsif type == "Unit"
146
181
  [9].pack("C*").unpack1("H*")
147
182
  elsif type == "String"
@@ -256,4 +291,27 @@ class CLValueSerializer
256
291
  "Undefined"
257
292
  end
258
293
  end
259
- end
294
+
295
+ def serialize_option_cl_value(data)
296
+
297
+ =begin
298
+ # Solution 1
299
+ # puts "\nOption:"
300
+ cl_type = data[:cl_type]
301
+ bytes = data[:bytes]
302
+ parsed = data[:parsed]
303
+
304
+ if cl_type == "U64"
305
+ length = bytes.length/2
306
+ # puts length
307
+ bytes = bytes[2..]
308
+ value = Utils::ByteUtils.hex_to_u64_value(bytes)
309
+ # puts value == 1650706686882
310
+ clvalue = CLu64.new(value)
311
+ tag = CLType::TAGS[cl_type.to_sym]
312
+ # puts "U64: " + [length].pack("L<*").unpack1("H*") + "01" + bytes + "0d" + [tag].pack("C*").unpack1("H*")
313
+ [length].pack("L<*").unpack1("H*") + "01" + bytes + "0d" + [tag].pack("C*").unpack1("H*")
314
+ end
315
+ =end
316
+ end
317
+ end
@@ -0,0 +1,314 @@
1
+ require_relative '../types/cl_type.rb'
2
+ require_relative '../types/cl_bool.rb'
3
+ require_relative '../types/cl_i32.rb'
4
+ require_relative '../types/cl_i64.rb'
5
+ require_relative '../types/cl_u8.rb'
6
+ require_relative '../types/cl_u32.rb'
7
+ require_relative '../types/cl_u64.rb'
8
+ require_relative '../types/cl_u128.rb'
9
+ require_relative '../types/cl_u256.rb'
10
+ require_relative '../types/cl_u512.rb'
11
+ require_relative '../types/cl_unit.rb'
12
+ require_relative '../types/cl_tuple.rb'
13
+ require_relative '../types/cl_uref.rb'
14
+ require_relative '../types/cl_option.rb'
15
+ require_relative '../types/cl_string.rb'
16
+ # require_relative '../types/cl_key.rb'
17
+ require_relative '../types/cl_uref.rb'
18
+ require_relative '../types/cl_tuple.rb'
19
+ require_relative '../types/cl_public_key.rb'
20
+ require_relative '../types/constants.rb'
21
+ require_relative './cl_value_bytes_parsers.rb'
22
+ require_relative '../utils/byte_utils.rb'
23
+
24
+ # Byte serializer for CLValue
25
+ class CLValueSerializer
26
+ def to_byte_array(num)
27
+ result = []
28
+ begin
29
+ result << (num & 0xff)
30
+ num >>= 8
31
+ end until (num == 0 || num == -1) && (result.last[7] == num[7])
32
+ # result.reverse
33
+ result
34
+ end
35
+
36
+ def to_bytes(clvalue)
37
+ type = clvalue.get_cl_type
38
+ value = clvalue.get_value
39
+ tag = CLType::TAGS[type.to_sym]
40
+ # puts type
41
+ # puts value
42
+ # puts CLType::TAGS[type.to_sym]
43
+ # puts tag
44
+ [1].pack("L<*").unpack1("H*")
45
+ serialized = ""
46
+ if type == "Bool"
47
+ [1].pack("L<*").unpack1("H*") + [value.to_i].pack("C*").unpack1("H*") + [tag].pack("C*").unpack1("H*")
48
+ elsif type == "I32"
49
+ [4].pack("L<*").unpack1("H*") + [value].pack("l<*").unpack1("H*") + [tag].pack("C*").unpack1("H*")
50
+ elsif type == "I64"
51
+ [8].pack("L<*").unpack1("H*") + [value].pack("q<*").unpack1("H*") + [tag].pack("C*").unpack1("H*")
52
+ elsif type == "U8"
53
+ [1].pack("L<*").unpack1("H*") + [value].pack("C*").unpack1("H*") + [tag].pack("C*").unpack1("H*")
54
+ elsif type == "U32"
55
+ serialized += [4].pack("L<*").unpack1("H*") + [value].pack("L<*").unpack1("H*") + [tag].pack("C*").unpack1("H*")
56
+ elsif type == "U64"
57
+ [8].pack("L<*").unpack1("H*") + [value].pack("Q<*").unpack1("H*") + [tag].pack("C*").unpack1("H*")
58
+ elsif type == "U128"
59
+ [8].pack("L<*").unpack1("H*")
60
+ elsif type == "U256"
61
+ [8].pack("L<*").unpack1("H*")
62
+ elsif type == "U512"
63
+ # puts "value : #{value}"
64
+ # bytes = Utils::ByteUtils.byte_array_to_hex(to_byte_array(value))
65
+ # puts bytes
66
+ # num_of_bytes = bytes.length/2
67
+ # puts num_of_bytes
68
+ # puts [num_of_bytes].pack("C*").unpack1("H*")
69
+ # puts [num_of_bytes+1].pack("L<*").unpack1("H*") + [num_of_bytes].pack("C*").unpack1("H*") + bytes + [tag].pack("C*").unpack1("H*")
70
+
71
+ bytes = Utils::ByteUtils.byte_array_to_hex(to_byte_array(value))
72
+ num_of_bytes = bytes.length/2
73
+ puts "U512: " + [num_of_bytes+1].pack("L<*").unpack1("H*") + [num_of_bytes].pack("C*").unpack1("H*") + bytes + [tag].pack("C*").unpack1("H*")
74
+ [num_of_bytes+1].pack("L<*").unpack1("H*") + [num_of_bytes].pack("C*").unpack1("H*") + bytes + [tag].pack("C*").unpack1("H*")
75
+ elsif type == "Unit"
76
+ [0].pack("L<*").unpack1("H*") + [tag].pack("C*").unpack1("H*")
77
+ elsif type == "String"
78
+ length = CLValueBytesParsers::CLStringBytesParser.to_bytes(value).length
79
+ [length/2].pack("L<*").unpack1("H*") + CLValueBytesParsers::CLStringBytesParser.to_bytes(value) + [tag].pack("C*").unpack1("H*")
80
+ elsif type == "Key"
81
+ [11].pack("C*").unpack1("H*")
82
+ elsif type == "URef"
83
+ uref = clvalue.get_value
84
+ size = clvalue.to_bytes(uref).length/2
85
+ [size].pack("L<*").unpack1("H*") + clvalue.to_bytes(uref) + [tag].pack("C*").unpack1("H*")
86
+ elsif type == "Option"
87
+ [0].pack("L<*").unpack1("H*")
88
+ inner_type = value[:cl_type]
89
+ bytes = value[:bytes]
90
+ parsed = value[:parsed]
91
+ # puts inner_type, bytes, parsed
92
+ # length = bytes.length/2
93
+ # inner_value_bytes = bytes[2..]
94
+ data = { "cl_type": inner_type, "bytes": bytes, "parsed": parsed}
95
+ # puts length
96
+ serialize_option_cl_value(data)
97
+ # "11111111111111111111111"
98
+ elsif type == "List"
99
+ [0].pack("L<*").unpack1("H*")
100
+ elsif type == "ByteArray"
101
+ [0].pack("L<*").unpack1("H*")
102
+ elsif type == "Result"
103
+ [0].pack("L<*").unpack1("H*")
104
+ elsif type == "Map"
105
+ [0].pack("L<*").unpack1("H*")
106
+ elsif type == "Tuple1"
107
+ clvalue1 = clvalue.get_value[0]
108
+ type1 = clvalue1.get_cl_type
109
+ value1 = clvalue1.get_value
110
+ tag1 = CLType::TAGS[type1.to_sym]
111
+ serialized += helper(clvalue.get_value[0]) + [tag].pack("C*").unpack1("H*") + [tag1].pack("C*").unpack1("H*")
112
+ # [18].pack("C*").unpack1("H*") + cl_type.get_data[0].to_bytes
113
+ elsif type == "Tuple2"
114
+ clvalue1 = clvalue.get_value[0]
115
+ type1 = clvalue1.get_cl_type
116
+ value1 = clvalue1.get_value
117
+ tag1 = CLType::TAGS[type1.to_sym]
118
+
119
+ clvalue2 = clvalue.get_value[1]
120
+ type2 = clvalue2.get_cl_type
121
+ value2 = clvalue2.get_value
122
+ tag2 = CLType::TAGS[type2.to_sym]
123
+
124
+ len = only_length(clvalue.get_value[0]) + only_length(clvalue.get_value[1])
125
+ [len].pack("L<*").unpack1("H*") + only_value(clvalue.get_value[0]) + only_value(clvalue.get_value[1]) +
126
+ [tag].pack("C*").unpack1("H*") + [tag1].pack("C*").unpack1("H*") + [tag2].pack("C*").unpack1("H*")
127
+ elsif type == "Tuple3"
128
+ clvalue1 = clvalue.get_value[0]
129
+ type1 = clvalue1.get_cl_type
130
+ value1 = clvalue1.get_value
131
+ tag1 = CLType::TAGS[type1.to_sym]
132
+
133
+ clvalue2 = clvalue.get_value[1]
134
+ type2 = clvalue2.get_cl_type
135
+ value2 = clvalue2.get_value
136
+ tag2 = CLType::TAGS[type2.to_sym]
137
+
138
+ clvalue3 = clvalue.get_value[2]
139
+ type3 = clvalue3.get_cl_type
140
+ value3 = clvalue3.get_value
141
+ tag3 = CLType::TAGS[type3.to_sym]
142
+
143
+ len = only_length(clvalue.get_value[0]) + only_length(clvalue.get_value[1]) + only_length(clvalue.get_value[2])
144
+ [len].pack("L<*").unpack1("H*") + only_value(clvalue.get_value[0]) + only_value(clvalue.get_value[1]) + only_value(clvalue.get_value[2]) +
145
+ [tag].pack("C*").unpack1("H*") + [tag1].pack("C*").unpack1("H*") + [tag2].pack("C*").unpack1("H*") + [tag3].pack("C*").unpack1("H*")
146
+ elsif type == "Any"
147
+ [0].pack("L<*").unpack1("H*")
148
+ elsif type == "PublicKey"
149
+ puts "?????????????: " + [tag].pack("C*").unpack1("H*")
150
+ [clvalue.to_hex.length/2].pack("L<*").unpack1("H*") + clvalue.to_hex + [tag].pack("C*").unpack1("H*")
151
+ # clvalue.to_hex + [tag].pack("C*").unpack1("H*")
152
+ else
153
+ "Undefined"
154
+ end
155
+ end
156
+
157
+ def helper(clvalue)
158
+ type = clvalue.get_cl_type
159
+ value = clvalue.get_value
160
+ serialized = ""
161
+ if type == "Bool"
162
+ [1].pack("L<*").unpack1("H*") + [value.to_i].pack("C*").unpack1("H*")
163
+ elsif type == "I32"
164
+ [4].pack("L<*").unpack1("H*") + [value].pack("l<*").unpack1("H*")
165
+ elsif type == "I64"
166
+ [8].pack("L<*").unpack1("H*") + [value].pack("q<*").unpack1("H*")
167
+ elsif type == "U8"
168
+ [1].pack("L<*").unpack1("H*") + [value].pack("C*").unpack1("H*")
169
+ elsif type == "U32"
170
+ # serialized += [4].pack("L<*").unpack1("H*") + [value].pack("L<*").unpack1("H*")
171
+ [4].pack("L<*").unpack1("H*") + [value].pack("L<*").unpack1("H*")
172
+ elsif type == "U64"
173
+ [8].pack("L<*").unpack1("H*") + [value].pack("Q<*").unpack1("H*")
174
+ elsif type == "U128"
175
+ [8].pack("L<*").unpack1("H*")
176
+ elsif type == "U256"
177
+ [8].pack("L<*").unpack1("H*")
178
+ elsif type == "U512"
179
+ bytes = [value].pack("Q<*").unpack1("H*")
180
+ bytes = bytes[0, 8]
181
+ [8].pack("Q<*").unpack1("H*")
182
+ elsif type == "Unit"
183
+ [9].pack("C*").unpack1("H*")
184
+ elsif type == "String"
185
+ length = CLValueBytesParsers::CLStringBytesParser.to_bytes(value).length
186
+ [length/2].pack("L<*").unpack1("H*") + CLValueBytesParsers::CLStringBytesParser.to_bytes(value)
187
+ elsif type == "Key"
188
+ [11].pack("C*").unpack1("H*")
189
+ elsif type == "URef"
190
+ uref = clvalue.get_value
191
+ size = clvalue.to_bytes(uref).length/2
192
+ [size].pack("L<*").unpack1("H*") + clvalue.to_bytes(uref)
193
+ elsif type == "Option"
194
+ [0].pack("L<*").unpack1("H*")
195
+ elsif type == "List"
196
+ [0].pack("L<*").unpack1("H*")
197
+ elsif type == "ByteArray"
198
+ [0].pack("L<*").unpack1("H*")
199
+ elsif type == "Result"
200
+ [0].pack("L<*").unpack1("H*")
201
+ elsif type == "Map"
202
+ [0].pack("L<*").unpack1("H*")
203
+ else
204
+ "Undefined"
205
+ end
206
+ end
207
+
208
+ def only_length(clvalue)
209
+ type = clvalue.get_cl_type
210
+ value = clvalue.get_value
211
+ if type == "Bool"
212
+ 1
213
+ elsif type == "I32"
214
+ 4
215
+ elsif type == "I64"
216
+ 8
217
+ elsif type == "U8"
218
+ 1
219
+ elsif type == "U32"
220
+ 4
221
+ elsif type == "U64"
222
+ 8
223
+ elsif type == "U128"
224
+ 8
225
+ elsif type == "U256"
226
+ 8
227
+ elsif type == "U512"
228
+ 8
229
+ elsif type == "Unit"
230
+ 8
231
+ elsif type == "String"
232
+ 4 + value.length
233
+ elsif type == "Key"
234
+ 32
235
+ elsif type == "URef"
236
+ uref = clvalue.get_value
237
+ size = clvalue.to_bytes(uref).length/2
238
+ elsif type == "Option"
239
+ 8
240
+ elsif type == "List"
241
+ 8
242
+ elsif type == "ByteArray"
243
+ 8
244
+ elsif type == "Result"
245
+ 8
246
+ elsif type == "Map"
247
+ 8
248
+ else
249
+ 0
250
+ end
251
+ end
252
+ def only_value(clvalue)
253
+ type = clvalue.get_cl_type
254
+ value = clvalue.get_value
255
+ if type == "Bool"
256
+ [value.to_i].pack("C*").unpack1("H*")
257
+ elsif type == "I32"
258
+ [value].pack("l<*").unpack1("H*")
259
+ elsif type == "I64"
260
+ [value].pack("q<*").unpack1("H*")
261
+ elsif type == "U8"
262
+ [value].pack("C*").unpack1("H*")
263
+ elsif type == "U32"
264
+ [value].pack("L<*").unpack1("H*")
265
+ elsif type == "U64"
266
+ [value].pack("Q<*").unpack1("H*")
267
+ elsif type == "U128"
268
+ [value].pack("Q<*").unpack1("H*")
269
+ elsif type == "U256"
270
+ [value].pack("Q<*").unpack1("H*")
271
+ elsif type == "U512"
272
+ [value].pack("Q<*").unpack1("H*")
273
+ elsif type == "Unit"
274
+ [value].pack("C*").unpack1("H*")
275
+ elsif type == "String"
276
+ CLValueBytesParsers::CLStringBytesParser.to_bytes(value)
277
+ elsif type == "Key"
278
+ [value].pack("C*").unpack1("H*")
279
+ elsif type == "URef"
280
+ uref = clvalue.get_value
281
+ clvalue.to_bytes(uref)
282
+ elsif type == "Option"
283
+ [0].pack("L<*").unpack1("H*")
284
+ elsif type == "List"
285
+ [0].pack("L<*").unpack1("H*")
286
+ elsif type == "ByteArray"
287
+ [0].pack("L<*").unpack1("H*")
288
+ elsif type == "Result"
289
+ [0].pack("L<*").unpack1("H*")
290
+ elsif type == "Map"
291
+ [0].pack("L<*").unpack1("H*")
292
+ else
293
+ "Undefined"
294
+ end
295
+ end
296
+
297
+ def serialize_option_cl_value(data)
298
+ cl_type = data[:cl_type]
299
+ bytes = data[:bytes]
300
+ parsed = data[:parsed]
301
+
302
+ if cl_type == "U64"
303
+ length = bytes.length/2
304
+ puts length
305
+ bytes = bytes[2..]
306
+ value = Utils::ByteUtils.hex_to_u64_value(bytes)
307
+ puts value == 1650706686882
308
+ clvalue = CLu64.new(value)
309
+ tag = CLType::TAGS[cl_type.to_sym]
310
+ puts "U64: " + [length].pack("L<*").unpack1("H*") + "01" + bytes + "0d" + [tag].pack("C*").unpack1("H*")
311
+ [length].pack("L<*").unpack1("H*") + "01" + bytes + "0d" + [tag].pack("C*").unpack1("H*")
312
+ end
313
+ end
314
+ end