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
@@ -0,0 +1,392 @@
1
+ require_relative './deploy_header_serializer'
2
+ require_relative './deploy_approval_serializer'
3
+ require_relative './deploy_executable_serializer'
4
+ require_relative './deploy_named_arg_serializer'
5
+ require_relative '../utils/byte_utils.rb'
6
+ require_relative '../types/cl_option.rb'
7
+ # Byte serializer for Deploy object
8
+ class DeploySerializer
9
+ attr_accessor :payment_session_serializer, :transfer_serializer, :payment_serializer
10
+ def initialize
11
+ end
12
+
13
+ def to_bytes(deploy)
14
+ @payment_session_serializer = ""
15
+ @amount_serializer = ""
16
+ @target_serializer = ""
17
+ @id_serializer = ""
18
+ @transfer_serializer = ""
19
+ @payment_serializer = ""
20
+ result = ""
21
+ deploy_header = Casper::Entity::DeployHeader.new(deploy.get_header)
22
+ result += DeployHeaderSerializer.new().to_bytes(deploy_header)
23
+
24
+ deploy_hash = Casper::Entity::DeployHash.new(deploy.get_hash)
25
+ result += deploy_hash.get_hash
26
+ payment = deploy.get_payment
27
+ session = deploy.get_session
28
+ if payment.keys[0] == :ModuleBytes
29
+ temp_args = []
30
+ module_bytes = payment[:ModuleBytes][:module_bytes]
31
+ args = payment[:ModuleBytes][:args]
32
+ # module_bytes = Casper::Entity::ModuleBytes.new(module_bytes, args)
33
+ args.each do |arg|
34
+ name1 = arg[0]
35
+ clvalue_hash = arg[1]
36
+ clvalue = build_cl_value(arg[1])
37
+ # puts clvalue
38
+ temp_args << [Casper::Entity::DeployNamedArgument.new(name1, clvalue)]
39
+ end
40
+ temp = Utils::ByteUtils.byte_array_to_hex(Casper::Entity::ModuleBytes.new(module_bytes, temp_args).to_bytes)
41
+ result += temp
42
+ @payment_serializer += temp
43
+ @payment_session_serializer += temp
44
+ temp = nil
45
+ elsif payment.keys[0] == :StoredContractByHash
46
+ temp_args = []
47
+ hash = payment[:StoredContractByHash][:hash]
48
+ entry_point = payment[:StoredContractByHash][:entry_point]
49
+ args = payment[:StoredContractByHash][:args]
50
+ stored_contract_by_hash = Casper::Entity::StoredContractByHash.new(hash, entry_point, args)
51
+
52
+ args.each do |arg|
53
+ name1 = arg[0] # => "quantity"
54
+ clvalue_hash = arg[1] # => {:cl_type=>"I32", :bytes=>"e8030000", :parsed=>1000}
55
+ clvalue = build_cl_value(arg[1])
56
+ # puts clvalue
57
+ temp_args << [Casper::Entity::DeployNamedArgument.new(name1, clvalue)]
58
+ end
59
+ temp = Utils::ByteUtils.byte_array_to_hex(Casper::Entity::StoredContractByHash.new(name, entry_point, temp_args).to_bytes)
60
+ result += temp
61
+ @payment_session_serializer += temp
62
+ temp = nil
63
+ elsif payment.keys[0] == :StoredContractByName
64
+ temp_args = []
65
+ name = payment[:StoredContractByName][:name]
66
+ entry_point = payment[:StoredContractByName][:entry_point]
67
+ args = payment[:StoredContractByName][:args]
68
+
69
+ stored_contract_by_name = Casper::Entity::StoredContractByName.new(name, entry_point, args)
70
+ args.each do |arg|
71
+ name1 = arg[0] # => "quantity"
72
+ clvalue_hash = arg[1] # => {:cl_type=>"I32", :bytes=>"e8030000", :parsed=>1000}
73
+ clvalue = build_cl_value(arg[1])
74
+ temp_args << [Casper::Entity::DeployNamedArgument.new(name1, clvalue)]
75
+ end
76
+ temp = Utils::ByteUtils.byte_array_to_hex(Casper::Entity::StoredContractByName.new(name, entry_point, temp_args).to_bytes)
77
+ result += temp
78
+ @payment_session_serializer += temp
79
+ temp = nil
80
+ elsif payment.keys[0] == :StoredVersionedContractByHash
81
+ temp_args = []
82
+ hash = payment[:StoredVersionedContractByHash][:name]
83
+ version = payment[:StoredVersionedContractByHash][:version]
84
+ entry_point = payment[:StoredVersionedContractByHash][:entry_point]
85
+ args = payment[:StoredVersionedContractByHash][:args]
86
+
87
+ stored_versioned_contract_by_hash = Casper::Entity::StoredVersionedContractByHash.new(hash, version, entry_point, args)
88
+ args.each do |arg|
89
+ name1 = arg[0]
90
+ clvalue_hash = arg[1]
91
+ clvalue = build_cl_value(arg[1])
92
+ temp_args << [Casper::Entity::DeployNamedArgument.new(name1, clvalue)]
93
+ end
94
+ temp = Utils::ByteUtils.byte_array_to_hex(Casper::Entity::StoredVersionedContractByHash.new(name, version,entry_point, temp_args).to_bytes)
95
+ result += temp
96
+ @payment_session_serializer += temp
97
+ temp = nil
98
+ elsif payment.keys[0] == :StoredVersionedContractByName
99
+ temp_args = []
100
+ name = payment[:StoredVersionedContractByName][:name]
101
+ version = payment[:StoredVersionedContractByName][:version]
102
+ entry_point = payment[:StoredVersionedContractByName][:entry_point]
103
+ args = payment[:StoredVersionedContractByName][:args]
104
+
105
+ stored_versioned_contract_by_name = Casper::Entity::StoredVersionedContractByName.new(name, version, entry_point, args)
106
+ args.each do |arg|
107
+ name1 = arg[0]
108
+ clvalue_hash = arg[1]
109
+ clvalue = build_cl_value(arg[1])
110
+ temp_args << [Casper::Entity::DeployNamedArgument.new(name1, clvalue)]
111
+ end
112
+ temp = Utils::ByteUtils.byte_array_to_hex(Casper::Entity::StoredVersionedContractByName.new(name, version,entry_point, temp_args).to_bytes)
113
+ result += temp
114
+ @payment_session_serializer += temp
115
+ temp = nil
116
+ elsif payment.keys[0] == :Transfer
117
+ temp_args = []
118
+ args = payment[:Transfer][:args]
119
+
120
+ transfer = Casper::Entity::DeployExecutableTransfer.new(args)
121
+ args.each do |arg|
122
+ name1 = arg[0] # => "amount"
123
+ clvalue_hash = arg[1] # => {:cl_type=>"I32", :bytes=>"e8030000", :parsed=>1000}
124
+ clvalue = build_cl_value(arg[1])
125
+ # puts clvalue
126
+ temp_args << [Casper::Entity::DeployNamedArgument.new(name1, clvalue)]
127
+ end
128
+ temp = Utils::ByteUtils.byte_array_to_hex(Casper::Entity::DeployExecutableTransfer.new(temp_args).to_bytes)
129
+ result += temp
130
+ @payment_session_serializer += temp
131
+ temp = nil
132
+ end
133
+
134
+ if session.keys[0] == :ModuleBytes
135
+ temp_args = []
136
+ module_bytes = session[:ModuleBytes][:module_bytes]
137
+ args = session[:ModuleBytes][:args]
138
+ # module_bytes = Casper::Entity::ModuleBytes.new(module_bytes, args)
139
+ args.each do |arg|
140
+ name1 = arg[0]
141
+ clvalue_hash = arg[1]
142
+ clvalue = build_cl_value(arg[1])
143
+ temp_args << [Casper::Entity::DeployNamedArgument.new(name1, clvalue)]
144
+ end
145
+ temp = Utils::ByteUtils.byte_array_to_hex(Casper::Entity::ModuleBytes.new(module_bytes, temp_args).to_bytes)
146
+ result += temp
147
+ @payment_session_serializer += temp
148
+ temp = nil
149
+ elsif session.keys[0] == :StoredContractByHash
150
+ temp_args = []
151
+ hash = session[:StoredContractByHash][:hash]
152
+ entry_point = session[:StoredContractByHash][:entry_point]
153
+ args = session[:StoredContractByHash][:args]
154
+ stored_contract_by_hash = Casper::Entity::StoredContractByHash.new(hash, entry_point, args)
155
+
156
+ args.each do |arg|
157
+ name1 = arg[0] # => "quantity"
158
+ clvalue_hash = arg[1] # => {:cl_type=>"I32", :bytes=>"e8030000", :parsed=>1000}
159
+ clvalue = build_cl_value(arg[1])
160
+ # puts clvalue
161
+ temp_args << [Casper::Entity::DeployNamedArgument.new(name1, clvalue)]
162
+ end
163
+ temp = Utils::ByteUtils.byte_array_to_hex(Casper::Entity::StoredContractByHash.new(name, entry_point, temp_args).to_bytes)
164
+ result += temp
165
+ @payment_session_serializer += temp
166
+ temp = nil
167
+ elsif session.keys[0] == :StoredContractByName
168
+ temp_args = []
169
+ name = session[:StoredContractByName][:name]
170
+ entry_point = session[:StoredContractByName][:entry_point]
171
+ args = session[:StoredContractByName][:args]
172
+
173
+ stored_contract_by_name = Casper::Entity::StoredContractByName.new(name, entry_point, args)
174
+ args.each do |arg|
175
+ name1 = arg[0] # => "quantity"
176
+ clvalue_hash = arg[1] # => {:cl_type=>"I32", :bytes=>"e8030000", :parsed=>1000}
177
+ clvalue = build_cl_value(arg[1])
178
+ temp_args << [Casper::Entity::DeployNamedArgument.new(name1, clvalue)]
179
+ end
180
+ temp = Utils::ByteUtils.byte_array_to_hex(Casper::Entity::StoredContractByName.new(name, entry_point, temp_args).to_bytes)
181
+ result += temp
182
+ @payment_session_serializer += temp
183
+ temp = nil
184
+ elsif session.keys[0] == :StoredVersionedContractByHash
185
+ temp_args = []
186
+ hash = session[:StoredVersionedContractByHash][:name]
187
+ version = session[:StoredVersionedContractByHash][:version]
188
+ entry_point = session[:StoredVersionedContractByHash][:entry_point]
189
+ args = session[:StoredVersionedContractByHash][:args]
190
+
191
+ stored_versioned_contract_by_hash = Casper::Entity::StoredVersionedContractByHash.new(hash, version, entry_point, args)
192
+ args.each do |arg|
193
+ name1 = arg[0]
194
+ clvalue_hash = arg[1]
195
+ clvalue = build_cl_value(arg[1])
196
+ temp_args << [Casper::Entity::DeployNamedArgument.new(name1, clvalue)]
197
+ end
198
+ temp = Utils::ByteUtils.byte_array_to_hex(Casper::Entity::StoredVersionedContractByHash.new(name, version,entry_point, temp_args).to_bytes)
199
+ result += temp
200
+ @payment_session_serializer += temp
201
+ temp = nil
202
+ elsif session.keys[0] == :StoredVersionedContractByName
203
+ temp_args = []
204
+ name = session[:StoredVersionedContractByName][:name]
205
+ version = session[:StoredVersionedContractByName][:version]
206
+ entry_point = session[:StoredVersionedContractByName][:entry_point]
207
+ args = session[:StoredVersionedContractByName][:args]
208
+
209
+ stored_versioned_contract_by_name = Casper::Entity::StoredVersionedContractByName.new(name, version, entry_point, args)
210
+ args.each do |arg|
211
+ name1 = arg[0]
212
+ clvalue_hash = arg[1]
213
+ clvalue = build_cl_value(arg[1])
214
+ temp_args << [Casper::Entity::DeployNamedArgument.new(name1, clvalue)]
215
+ end
216
+ temp = Utils::ByteUtils.byte_array_to_hex(Casper::Entity::StoredVersionedContractByName.new(name, version,entry_point, temp_args).to_bytes)
217
+ result += temp
218
+ @payment_session_serializer += temp
219
+ temp = nil
220
+
221
+ elsif session.keys[0] == :Transfer
222
+ temp_args = []
223
+ args = session[:Transfer][:args]
224
+
225
+ transfer = Casper::Entity::DeployExecutableTransfer.new(args)
226
+ # args.each do |arg|
227
+ # name1 = arg[0] # => "amount"
228
+ # clvalue_hash = arg[1] # => {:cl_type=>"I32", :bytes=>"e8030000", :parsed=>1000}
229
+ # clvalue = build_cl_value(arg[1])
230
+ # # puts clvalue
231
+ # temp_args << [Casper::Entity::DeployNamedArgument.new(name1, clvalue)]
232
+ # end
233
+
234
+ args.each do |arg|
235
+ name1 = arg[0]
236
+ if name1 == "amount" || name1 == "target"
237
+ clvalue_hash = arg[1]
238
+ clvalue = build_cl_value(arg[1])
239
+ puts "clvalue.get_value: #{clvalue.get_value}"
240
+ temp_args << [Casper::Entity::DeployNamedArgument.new(name1, clvalue)]
241
+ elsif name1 == "id"
242
+ bytes = arg[1][:bytes]
243
+ parsed = arg[1][:parsed]
244
+ h = arg[1][:cl_type]
245
+ key, value = h.first
246
+ cl_type = h.keys[0]
247
+ # puts key, value
248
+ inner_type = value
249
+ data = { "cl_type": inner_type, "bytes": bytes, "parsed": parsed}
250
+ clvalue = CLOption.new(data, inner_type)
251
+ # type = clvalue.get_cl_type
252
+ # puts type
253
+ # value = clvalue.get_value
254
+ # puts value
255
+ # tag = CLType::TAGS[type.to_sym]
256
+ # puts tag
257
+ # cl_value = { "cl_type": cl_type, "bytes": bytes, "parsed": parsed}
258
+ # clvalue = build_cl_value(cloption)
259
+ # puts cloption.get_value
260
+ temp_args << [Casper::Entity::DeployNamedArgument.new(name1, clvalue)]
261
+ end
262
+ end
263
+ temp = Utils::ByteUtils.byte_array_to_hex(Casper::Entity::DeployExecutableTransfer.new(temp_args).to_bytes)
264
+ @target_serializer = temp
265
+ # puts @target_serializer
266
+ result += temp
267
+ @transfer_serializer += temp
268
+ @payment_session_serializer += temp
269
+ temp = nil
270
+ end
271
+
272
+ approvals = deploy.get_approvals
273
+ num_of_approvals = approvals.size
274
+ puts "num_of_approvals: #{num_of_approvals}"
275
+ approval_serializer = ""
276
+ deploy_approval_serializer = DeployApprovalSerializer.new
277
+ result += Utils::ByteUtils.to_u32(num_of_approvals)
278
+ approval_serializer += Utils::ByteUtils.to_u32(num_of_approvals)
279
+ # @payment_session_serializer += Utils::ByteUtils.to_u32(num_of_approvals)
280
+ for approval in approvals
281
+ deploy_approval = Casper::Entity::DeployApproval.new(approval)
282
+ # @payment_session_serializer += deploy_approval_serializer.to_bytes(deploy_approval)
283
+ result += deploy_approval_serializer.to_bytes(deploy_approval)
284
+ approval_serializer += deploy_approval_serializer.to_bytes(deploy_approval)
285
+ end
286
+ puts "approval_serializer: #{approval_serializer}"
287
+ # result
288
+ Utils::ByteUtils.hex_to_byte_array(result)
289
+ end
290
+
291
+ def build_cl_value(h = {})
292
+ cl_type = h[:cl_type]
293
+ bytes = h[:bytes]
294
+ # puts bytes
295
+ parsed = h[:parsed]
296
+ if cl_type == "Bool"
297
+ CLValueBytesParsers::CLBoolBytesParser.from_bytes([bytes])
298
+ elsif cl_type == "I32"
299
+ value = Utils::ByteUtils.hex_to_integer(bytes)
300
+ CLi32.new(value)
301
+ elsif cl_type == "I64"
302
+ value = Utils::ByteUtils.hex_to_i64_value(bytes)
303
+ CLi64.new(value)
304
+ elsif cl_type == "U8"
305
+ value = Utils::ByteUtils.hex_to_u8_value(bytes)
306
+ CLu8.new(value)
307
+ elsif cl_type == "U32"
308
+ value = Utils::ByteUtils.hex_to_u32_value(bytes)
309
+ CLu32.new(value)
310
+ elsif cl_type == "U64"
311
+ value = Utils::ByteUtils.hex_to_u64_value(bytes)
312
+ CLu32.new(value)
313
+ elsif cl_type == "U512"
314
+ bytes = h[:bytes] # => 0400e1f505
315
+ num_of_bytes = bytes[0..1] # => 04
316
+ bytes = bytes[2..] # => "00e1f505"
317
+ puts "bytes: #{bytes}"
318
+ value = [bytes].pack("H*").unpack("L*").first
319
+ puts "build_cl_value --> value: #{value}"
320
+ # CLu512.new(value)
321
+ CLu512.new(parsed.to_i)
322
+ # value = Utils::ByteUtils.hex_to_u64_value(bytes)
323
+ # CLu512.new(value)
324
+ # value = Utils::ByteUtils.hex_to_u512_value(bytes)
325
+ # CLu512.new(value)
326
+ elsif cl_type == "Unit"
327
+ # value = CLValueBytesParsers::CLUnitBytesParser.from_bytes(bytes)
328
+ if bytes == ""
329
+ value = nil
330
+ CLUnit.new(value)
331
+ end
332
+ elsif cl_type == "String"
333
+ value = CLValueBytesParsers::CLStringBytesParser.from_bytes(bytes)
334
+ CLString.new(value)
335
+ elsif cl_type == "URef"
336
+ value = Utils::ByteUtils.hex_to_byte_array(bytes)
337
+ CLValueBytesParsers::CLURefBytesParser.from_bytes(value)
338
+ # elsif cl_type = "Option"
339
+
340
+ elsif cl_type == "PublicKey"
341
+ CLPublicKey.from_hex(bytes)
342
+ end
343
+ end
344
+
345
+ def build_cl_value_with_option(h = {})
346
+ cl_type = h[:cl_type]
347
+ bytes = h[:bytes]
348
+ # puts bytes
349
+ parsed = h[:parsed]
350
+ if cl_type == "Bool"
351
+ CLValueBytesParsers::CLBoolBytesParser.from_bytes([bytes])
352
+ elsif cl_type == "I32"
353
+ value = Utils::ByteUtils.hex_to_integer(bytes)
354
+ CLi32.new(value)
355
+ elsif cl_type == "I64"
356
+ value = Utils::ByteUtils.hex_to_i64_value(bytes)
357
+ CLi64.new(value)
358
+ elsif cl_type == "U8"
359
+ value = Utils::ByteUtils.hex_to_u8_value(bytes)
360
+ CLu8.new(value)
361
+ elsif cl_type == "U32"
362
+ value = Utils::ByteUtils.hex_to_u32_value(bytes)
363
+ CLu32.new(value)
364
+ elsif cl_type == "U64"
365
+ value = Utils::ByteUtils.hex_to_u64_value(bytes)
366
+ CLu32.new(value)
367
+ elsif cl_type == "U512"
368
+ value = Utils::ByteUtils.hex_to_u64_value(bytes)
369
+ CLu512.new(value)
370
+ # value = Utils::ByteUtils.hex_to_u512_value(bytes)
371
+ # CLu512.new(value)
372
+ elsif cl_type == "Unit"
373
+ # value = CLValueBytesParsers::CLUnitBytesParser.from_bytes(bytes)
374
+ if bytes == ""
375
+ value = nil
376
+ CLUnit.new(value)
377
+ end
378
+ elsif cl_type == "String"
379
+ value = CLValueBytesParsers::CLStringBytesParser.from_bytes(bytes)
380
+ CLString.new(value)
381
+ elsif cl_type == "URef"
382
+ value = Utils::ByteUtils.hex_to_byte_array(bytes)
383
+ CLValueBytesParsers::CLURefBytesParser.from_bytes(value)
384
+ # elsif cl_type = "Option"
385
+
386
+ elsif cl_type == "PublicKey"
387
+ CLPublicKey.from_hex(bytes)
388
+ end
389
+
390
+
391
+ end
392
+ end