casper_network 0.2.0 → 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.
Files changed (140) hide show
  1. checksums.yaml +4 -4
  2. data/CONTRIBUTING.md +1 -0
  3. data/LICENSE +201 -0
  4. data/README.md +165 -0
  5. data/SECURITY.md +12 -0
  6. data/lib/casper_network.rb +253 -178
  7. data/lib/crypto/00_asymmetric_key.rb +95 -0
  8. data/lib/crypto/01_ed25519.rb +67 -0
  9. data/lib/crypto/asymmetric_key.rb +87 -0
  10. data/lib/crypto/ed25519_key.rb +44 -0
  11. data/lib/crypto/key_pair.rb +40 -0
  12. data/lib/crypto/keys.rb +7 -0
  13. data/lib/crypto/secp256k1_key.rb +0 -0
  14. data/lib/crypto/test_ed25519_key.rb +44 -0
  15. data/lib/entity/account.rb +45 -0
  16. data/lib/entity/action_thresholds.rb +25 -0
  17. data/lib/entity/associated_key.rb +24 -0
  18. data/lib/entity/auction_state.rb +36 -0
  19. data/lib/entity/bid.rb +24 -0
  20. data/lib/entity/bid_info.rb +51 -0
  21. data/lib/entity/contract.rb +47 -0
  22. data/lib/entity/contract_package.rb +41 -0
  23. data/lib/entity/contract_version.rb +33 -0
  24. data/lib/entity/delegator.rb +37 -0
  25. data/lib/entity/deploy.rb +44 -0
  26. data/lib/entity/deploy_approval.rb +24 -0
  27. data/lib/entity/deploy_executable.rb +162 -0
  28. data/lib/entity/deploy_executable_item_internal.rb +26 -0
  29. data/lib/entity/deploy_executable_transfer.rb +50 -0
  30. data/lib/entity/deploy_hash.rb +16 -0
  31. data/lib/entity/deploy_header.rb +60 -0
  32. data/lib/entity/deploy_info.rb +44 -0
  33. data/lib/entity/deploy_named_argument.rb +19 -0
  34. data/lib/entity/deploy_transfer.rb +10 -0
  35. data/lib/entity/disabled_version.rb +26 -0
  36. data/lib/entity/era_info.rb +18 -0
  37. data/lib/entity/era_summary.rb +44 -0
  38. data/lib/entity/era_validator.rb +23 -0
  39. data/lib/entity/executable_deploy_item.rb +11 -0
  40. data/lib/entity/group.rb +25 -0
  41. data/lib/entity/module_bytes.rb +50 -0
  42. data/lib/entity/peer.rb +25 -0
  43. data/lib/entity/seigniorage_allocation.rb +18 -0
  44. data/lib/entity/stored_contract_by_hash.rb +50 -0
  45. data/lib/entity/stored_contract_by_name.rb +50 -0
  46. data/lib/entity/stored_value.rb +57 -0
  47. data/lib/entity/stored_versioned_contract_by_hash.rb +61 -0
  48. data/lib/entity/stored_versioned_contract_by_name.rb +61 -0
  49. data/lib/entity/transfer.rb +65 -0
  50. data/lib/entity/validator_weight.rb +23 -0
  51. data/lib/entity/vesting_schedule.rb +22 -0
  52. data/lib/include.rb +18 -0
  53. data/lib/rpc/rpc.rb +227 -0
  54. data/lib/rpc/rpc_client.rb +233 -0
  55. data/lib/rpc/rpc_error.rb +79 -0
  56. data/lib/serialization/cl_type_serializer.rb +76 -0
  57. data/lib/serialization/cl_value_bytes_parsers.rb +498 -0
  58. data/lib/serialization/cl_value_serializer.rb +259 -0
  59. data/lib/serialization/deploy_approval_serializer.rb +15 -0
  60. data/lib/serialization/deploy_executable_serializer.rb +26 -0
  61. data/lib/serialization/deploy_header_serializer.rb +49 -0
  62. data/lib/serialization/deploy_named_arg_serializer.rb +19 -0
  63. data/lib/serialization/deploy_serializer.rb +268 -0
  64. data/lib/serialization/test.rb +431 -0
  65. data/lib/types/cl_account_hash.rb +24 -0
  66. data/lib/types/cl_account_hash_type.rb +22 -0
  67. data/lib/types/cl_any.rb +25 -0
  68. data/lib/types/cl_any_type.rb +22 -0
  69. data/lib/types/cl_bool.rb +32 -0
  70. data/lib/types/cl_bool_type.rb +35 -0
  71. data/lib/types/cl_byte_array.rb +25 -0
  72. data/lib/types/cl_byte_array_type.rb +27 -0
  73. data/lib/types/cl_i32.rb +26 -0
  74. data/lib/types/cl_i32_type.rb +26 -0
  75. data/lib/types/cl_i64.rb +26 -0
  76. data/lib/types/cl_i64_type.rb +27 -0
  77. data/lib/types/cl_key.rb +39 -0
  78. data/lib/types/cl_key_type.rb +27 -0
  79. data/lib/types/cl_list.rb +25 -0
  80. data/lib/types/cl_list_type.rb +26 -0
  81. data/lib/types/cl_map.rb +25 -0
  82. data/lib/types/cl_map_type.rb +26 -0
  83. data/lib/types/cl_option.rb +33 -0
  84. data/lib/types/cl_option_type.rb +52 -0
  85. data/lib/types/cl_public_key.rb +152 -0
  86. data/lib/types/cl_public_key_type.rb +26 -0
  87. data/lib/types/cl_result.rb +25 -0
  88. data/lib/types/cl_result_type.rb +26 -0
  89. data/lib/types/cl_string.rb +39 -0
  90. data/lib/types/cl_string_type.rb +32 -0
  91. data/lib/types/cl_tuple.rb +151 -0
  92. data/lib/types/cl_tuple_type.rb +108 -0
  93. data/lib/types/cl_type.rb +94 -0
  94. data/lib/types/cl_type_tag.rb +51 -0
  95. data/lib/types/cl_u128.rb +26 -0
  96. data/lib/types/cl_u128_type.rb +26 -0
  97. data/lib/types/cl_u256.rb +26 -0
  98. data/lib/types/cl_u256_type.rb +26 -0
  99. data/lib/types/cl_u32.rb +26 -0
  100. data/lib/types/cl_u32_type.rb +26 -0
  101. data/lib/types/cl_u512.rb +26 -0
  102. data/lib/types/cl_u512_type.rb +26 -0
  103. data/lib/types/cl_u64.rb +26 -0
  104. data/lib/types/cl_u64_type.rb +27 -0
  105. data/lib/types/cl_u8.rb +26 -0
  106. data/lib/types/cl_u8_type.rb +26 -0
  107. data/lib/types/cl_unit.rb +38 -0
  108. data/lib/types/cl_unit_type.rb +22 -0
  109. data/lib/types/cl_uref.rb +119 -0
  110. data/lib/types/cl_uref_type.rb +46 -0
  111. data/lib/types/cl_value.rb +10 -0
  112. data/lib/types/constants.rb +50 -0
  113. data/lib/types/error.rb +7 -0
  114. data/lib/utils/base_16.rb +18 -0
  115. data/lib/utils/byte_utils.rb +107 -0
  116. data/lib/utils/find_byte_parser_by_cl_type.rb +53 -0
  117. data/lib/utils/hash_utils.rb +19 -0
  118. data/lib/utils/hex_utils.rb +12 -0
  119. data/lib/utils/time_utils.rb +85 -0
  120. data/lib/utils/utils.rb +2 -0
  121. data/lib/version.rb +3 -0
  122. data/spec/a_spec.rb +697 -0
  123. data/spec/byte_utils_spec.rb +72 -0
  124. data/spec/cl_public_spec.rb +169 -0
  125. data/spec/cl_types_spec.rb +715 -0
  126. data/spec/cl_value_serializer_spec.rb +140 -0
  127. data/spec/client_spec.rb +25 -0
  128. data/spec/crypto_spec.rb +42 -0
  129. data/spec/deploy_approval_serializer_spec.rb +26 -0
  130. data/spec/deploy_executable_serializer_spec.rb +0 -0
  131. data/spec/deploy_header_serializer_spec.rb +21 -0
  132. data/spec/deploy_named_arg_serializer_spec.rb +49 -0
  133. data/spec/deploy_serializer_spec.rb +77 -0
  134. data/spec/deploy_serializer_test_spec.rb +225 -0
  135. data/spec/mainnet_spec.rb +452 -0
  136. data/spec/spec_helper.rb +100 -0
  137. data/spec/string_spec.rb +68 -0
  138. data/spec/testnet_spec.rb +498 -0
  139. data/spec/time_utils_spec.rb +87 -0
  140. metadata +162 -7
@@ -0,0 +1,26 @@
1
+ require_relative './cl_type.rb'
2
+ require_relative './constants.rb'
3
+
4
+
5
+ class CLI32Type < CLType
6
+ def initialize(value = nil)
7
+ super(value)
8
+ @value = value
9
+ end
10
+
11
+ def to_string
12
+ TAGS.key(1).to_s
13
+ end
14
+
15
+ def get_value
16
+ @value
17
+ end
18
+
19
+ def to_json
20
+ to_string
21
+ end
22
+
23
+ def to_bytes
24
+ [1].pack("C*").unpack1("H*")
25
+ end
26
+ end
@@ -0,0 +1,26 @@
1
+ require_relative './cl_i64_type.rb'
2
+ require_relative './cl_value.rb'
3
+ require_relative '../serialization/cl_value_bytes_parsers.rb'
4
+
5
+
6
+
7
+ class CLi64 < CLValue
8
+ include CLValueBytesParsers::CLI64BytesParser
9
+
10
+ def initialize(value = nil)
11
+ raise "error" unless value.instance_of? Integer
12
+ super
13
+ @value = value
14
+ end
15
+
16
+ def get_cl_type
17
+ @cl_type = CLI64Type.new
18
+ @cl_type.to_string
19
+ end
20
+
21
+ def get_value
22
+ @value
23
+ end
24
+
25
+ end
26
+
@@ -0,0 +1,27 @@
1
+ require_relative './cl_type.rb'
2
+ require_relative './constants.rb'
3
+
4
+
5
+ class CLI64Type < CLType
6
+ def initialize(value = nil)
7
+ super(value)
8
+ @value = value
9
+ end
10
+
11
+ def to_string
12
+ TAGS.key(2).to_s
13
+ end
14
+
15
+ def get_value
16
+ @value
17
+ end
18
+
19
+ def to_json
20
+ to_string
21
+ end
22
+
23
+ def to_bytes
24
+ [2].pack("C*").unpack1("H*")
25
+ end
26
+
27
+ end
@@ -0,0 +1,39 @@
1
+ require_relative './cl_key_type.rb'
2
+ require_relative './cl_value.rb'
3
+ require_relative '../serialization/cl_value_bytes_parsers.rb'
4
+ =begin
5
+ Key values serialize as a single byte tag representing the variant, followed by the serialization of the data that variant contains.
6
+ For most variants, this is simply a fixed-length 32-byte array.
7
+ The exception is Key::URef, which contains a URef; so its data serializes per the description above.
8
+ The tags are as follows: Key::Account serializes as 0, Key::Hash as 1, Key::URef as 2.
9
+ =end
10
+
11
+
12
+ KEY_TYPE_ACCOUNT = 0
13
+ KEY_TYPE_HASH = 1
14
+ KEY_TYPE_UREF = 2
15
+
16
+ # ACCOUNT_HASH_ID = 'AccountHash'
17
+ ACCOUNT_HASH_LENGTH = 32
18
+
19
+ # UREF_ID = 'URef'
20
+
21
+ class CLKey < CLValue
22
+ include CLValueBytesParsers::CLKeyBytesParser
23
+
24
+ def initialize(value)
25
+ super
26
+ @value = value
27
+ end
28
+
29
+ def get_cl_type
30
+ @cl_type = CLKeyType.new
31
+ @cl_type.to_string
32
+ end
33
+
34
+ def get_value
35
+ @value
36
+ end
37
+
38
+ end
39
+
@@ -0,0 +1,27 @@
1
+ require_relative './cl_type.rb'
2
+ require_relative './constants.rb'
3
+
4
+
5
+ class CLKeyType < CLType
6
+ def initialize(value = nil)
7
+ super(value)
8
+ @value = value
9
+ end
10
+
11
+ def to_string
12
+ TAGS.key(11).to_s
13
+ end
14
+
15
+ def get_value
16
+ @value
17
+ end
18
+
19
+ def to_json
20
+ to_string
21
+ end
22
+
23
+ def to_bytes
24
+ [11].pack("C*").unpack1("H*")
25
+ end
26
+
27
+ end
@@ -0,0 +1,25 @@
1
+ require_relative './cl_list_type.rb'
2
+ require_relative './cl_value.rb'
3
+ require_relative '../serialization/cl_value_bytes_parsers.rb'
4
+
5
+
6
+
7
+ class CLList < CLValue
8
+ include CLValueBytesParsers::CLListBytesParser
9
+
10
+ def initialize(value = nil)
11
+ super
12
+ @value = value
13
+ end
14
+
15
+ def get_cl_type
16
+ @cl_type = CLListType.new
17
+ @cl_type.to_string
18
+ end
19
+
20
+ def get_value
21
+ @value
22
+ end
23
+
24
+ end
25
+
@@ -0,0 +1,26 @@
1
+ require_relative './cl_type.rb'
2
+ require_relative './constants.rb'
3
+
4
+
5
+ class CLListType < CLType
6
+ def initialize(value = nil)
7
+ super(value)
8
+ @value = value
9
+ end
10
+
11
+ def to_string
12
+ TAGS.key(14).to_s
13
+ end
14
+
15
+ def get_value
16
+ @value
17
+ end
18
+
19
+ def to_json
20
+ to_string
21
+ end
22
+
23
+ def to_bytes
24
+ [14].pack("C*").unpack1("H*")
25
+ end
26
+ end
@@ -0,0 +1,25 @@
1
+ require_relative './cl_map_type.rb'
2
+ require_relative './cl_value.rb'
3
+ require_relative '../serialization/cl_value_bytes_parsers.rb'
4
+
5
+
6
+
7
+ class CLMap < CLValue
8
+ include CLValueBytesParsers::CLMapBytesParser
9
+
10
+ def initialize(value = nil)
11
+ super
12
+ @value = value
13
+ end
14
+
15
+ def get_cl_type
16
+ @cl_type = CLMapType.new
17
+ @cl_type.to_string
18
+ end
19
+
20
+ def get_value
21
+ @value
22
+ end
23
+
24
+ end
25
+
@@ -0,0 +1,26 @@
1
+ require_relative './cl_type.rb'
2
+ require_relative './constants.rb'
3
+
4
+
5
+ class CLMapType < CLType
6
+ def initialize(value = nil)
7
+ super(value)
8
+ @value = value
9
+ end
10
+
11
+ def to_string
12
+ TAGS.key(17).to_s
13
+ end
14
+
15
+ def get_value
16
+ @value
17
+ end
18
+
19
+ def to_json
20
+ to_string
21
+ end
22
+
23
+ def to_bytes
24
+ [17].pack("C*").unpack1("H*")
25
+ end
26
+ end
@@ -0,0 +1,33 @@
1
+ require_relative './cl_option_type.rb'
2
+ require_relative './cl_value.rb'
3
+ require_relative '../serialization/cl_value_bytes_parsers.rb'
4
+
5
+ =begin
6
+ https://doc.rust-lang.org/stable/std/option/
7
+ =end
8
+
9
+ class CLOption < CLValue
10
+ include CLValueBytesParsers::CLOptionBytesParser
11
+
12
+ def initialize(data = nil, inner_type = nil)
13
+ super
14
+ @data = data
15
+ @inner_type = inner_type
16
+ if data == nil && inner_type == nil
17
+ raise ArgumentError.new("You had to assign innerType for None")
18
+ elsif data == nil && inner_type != nil
19
+ @inner_type = inner_type
20
+ else
21
+ @inner_type = data.get_cl_type
22
+ end
23
+ end
24
+
25
+ def get_value
26
+ @data
27
+ end
28
+
29
+ def get_cl_type
30
+ CLOptionType.new(@inner_type)
31
+ @inner_type
32
+ end
33
+ end
@@ -0,0 +1,52 @@
1
+ require_relative './cl_type.rb'
2
+ require_relative './cl_bool.rb'
3
+ require_relative './cl_bool_type.rb'
4
+ require_relative './constants.rb'
5
+
6
+ optionTags = {
7
+ NONE: 0,
8
+ SOME: 1
9
+ }
10
+
11
+ class CLOptionType < CLType
12
+
13
+ def initialize(inner = nil)
14
+ @tag = TAGS[:Option]
15
+ @inner = inner
16
+ # p @inner.to_string
17
+ # p @inner.to_json
18
+ # p @inner.get_tag
19
+ end
20
+
21
+ # @return [String]
22
+ def to_string
23
+ @inner == nil ? TAGS.key(13).to_s + " (None)" : TAGS.key(13).to_s + " (#{@inner.to_string})"
24
+ end
25
+
26
+ def to_json
27
+ jsoned = { "#{TAGS.key(13)}": @inner.to_string }.to_json
28
+ # h = JSON.parse(jsoned)
29
+ # h
30
+ end
31
+
32
+ def get_type
33
+ TAGS.key(13).to_s
34
+ end
35
+
36
+ def get_inner_type
37
+ @inner
38
+ end
39
+
40
+ def to_bytes
41
+ arr = []
42
+ arr << @tag << @inner.get_tag
43
+ end
44
+
45
+ def self.to_string
46
+ TAGS.key(13).to_s
47
+ end
48
+
49
+ def to_bytes
50
+ [13].pack("C*").unpack1("H*")
51
+ end
52
+ end
@@ -0,0 +1,152 @@
1
+ require_relative './cl_public_key_type.rb'
2
+ require_relative './cl_value.rb'
3
+ require_relative '../serialization/cl_value_bytes_parsers.rb'
4
+ require_relative '../utils/base_16.rb'
5
+ require_relative '../utils/hex_utils.rb'
6
+ require_relative '../utils/hash_utils.rb'
7
+ require 'blake2'
8
+ =begin
9
+ PublicKey serializes as a single byte tag representing the algorithm followed by 32 bytes of the PublicKey itself:
10
+ If the PublicKey is an Ed25519 key, the single tag byte is 1 followed by the individual bytes of the serialized key.
11
+ If the PublicKey is a Secp256k1 key, the single tag byte is a 2 followed by the individual bytes of the serialized key.
12
+ =end
13
+ ED25519_LENGTH = 32
14
+ SECP256K1_LENGTH = 33
15
+
16
+
17
+ CLPublicKeyTag = {
18
+ ED25519: 1,
19
+ SECP256K1: 2
20
+ }
21
+
22
+ SignatureAlgorithm = {
23
+ Ed25519: 'ed25519',
24
+ Secp256K1: 'secp256k1'
25
+ }
26
+
27
+
28
+
29
+
30
+ class CLPublicKey < CLValue
31
+ include CLValueBytesParsers::CLPublicKeyBytesParser
32
+ include Utils::HashUtils
33
+ # @param [Array<Integer>] raw_public_key
34
+ # @param [Integer] tag
35
+ def initialize(raw_public_key, tag)
36
+ super()
37
+ raw_public_key_length_valid?(raw_public_key, tag)
38
+ end
39
+
40
+ def raw_public_key_length_valid?(raw_public_key, tag)
41
+ if tag == CLPublicKeyTag[:ED25519] || tag == SignatureAlgorithm[:Ed25519]
42
+ if raw_public_key.length != ED25519_LENGTH
43
+ raise ArgumentError.new("Wrong length of ED25519 key. Expected #{ED25519_LENGTH}, but got #{raw_public_key.length}")
44
+ end
45
+ @raw_public_key = raw_public_key
46
+ @tag = tag
47
+ elsif tag == CLPublicKeyTag[:SECP256K1] || tag == SignatureAlgorithm[:Secp256K1]
48
+ if raw_public_key.length != SECP256K1_LENGTH
49
+ raise ArgumentError.new("Wrong length of SECP256K1 key. Expected #{SECP256K1_LENGTH}, but got #{raw_public_key.length}")
50
+ end
51
+ @raw_public_key = raw_public_key
52
+ @tag = tag
53
+ else
54
+ raise ArgumentError.new("Unsupported type of public key")
55
+ end
56
+ end
57
+
58
+ def get_cl_type
59
+ @cl_type = CLPublicKeyType.new
60
+ @cl_type.to_string
61
+ end
62
+
63
+
64
+ def get_value
65
+ @raw_public_key
66
+ end
67
+
68
+ def get_cl_public_key_tag
69
+ if @tag == CLPublicKeyTag[:ED25519] || @tag == SignatureAlgorithm[:Ed25519]
70
+ CLPublicKeyTag[:ED25519]
71
+ else
72
+ CLPublicKeyTag[:SECP256K1]
73
+ end
74
+ end
75
+
76
+ def get_signature_algorithm
77
+ if @tag == CLPublicKeyTag[:ED25519] || @tag == SignatureAlgorithm[:Ed25519]
78
+ SignatureAlgorithm[:Ed25519]
79
+ else
80
+ SignatureAlgorithm[:Secp256K1]
81
+ end
82
+ end
83
+
84
+ def ed25519?
85
+ @tag == CLPublicKeyTag[:ED25519]
86
+ end
87
+
88
+ def secp256k1?
89
+ @tag == CLPublicKeyTag[:SECP256K1]
90
+ end
91
+
92
+ # @return [Array<Integer>]
93
+ def to_account_hash_byte_array
94
+ key_name = CLPublicKeyTag.key(@tag).to_s
95
+ prefix = key_name.downcase.unpack("C*") + [0]
96
+ bytes = prefix + @raw_public_key
97
+ result_array = Utils::HashUtils.byte_hash(bytes)
98
+ @raw_public_key.length == 0 ? [] : result_array
99
+ end
100
+
101
+ # @return [String] hex
102
+ def to_account_hash_hex
103
+ bytes = to_account_hash_byte_array
104
+ hex = Utils::HashUtils.account_hash_from_byte_to_hex(bytes)
105
+ end
106
+
107
+ def from_ed25519(public_key)
108
+ CLPublicKey.new(public_key, CLPublicKeyTag[:ED25519])
109
+ end
110
+
111
+ def self.from_ed25519(public_key)
112
+ CLPublicKey.new(public_key, CLPublicKeyTag[:ED25519])
113
+ end
114
+
115
+ def from_secp256k1(public_key)
116
+ CLPublicKey.new(public_key, CLPublicKeyTag[:SECP256K1])
117
+ end
118
+
119
+ def self.from_secp256k1(public_key)
120
+ CLPublicKey.new(public_key, CLPublicKeyTag[:SECP256K1])
121
+ end
122
+
123
+ def to_hex
124
+ # "0#{@tag}#{Utils::Base16.encode16(@raw_public_key)}"
125
+ "0#{@tag}#{CLValueBytesParsers::CLPublicKeyBytesParser.encode_base_16(@raw_public_key)}"
126
+ end
127
+
128
+ def from_hex(public_key_hex)
129
+ raise ArgumentError.new("Invalid public key") unless Utils::HexUtils.valid_public_key_format?(public_key_hex)
130
+ public_key_hex_bytes = Utils::Base16.decode16(public_key_hex)
131
+ CLPublicKey.new(public_key_hex_bytes.drop(1), public_key_hex_bytes[0])
132
+ end
133
+
134
+ def self.from_hex(public_key_hex)
135
+ raise ArgumentError.new("Invalid public key") unless Utils::HexUtils.valid_public_key_format?(public_key_hex)
136
+ public_key_hex_bytes = Utils::Base16.decode16(public_key_hex)
137
+ CLPublicKey.new(public_key_hex_bytes.drop(1), public_key_hex_bytes[0])
138
+ end
139
+
140
+ def self.to_json(public_key)
141
+ json = {"bytes": public_key.to_hex, "cl_type": public_key.get_cl_type}.to_json
142
+ end
143
+
144
+ def self.from_json(json)
145
+ parsed = JSON.parse(json).deep_symbolize_keys
146
+ bytes = Utils::Base16.decode16(parsed[:bytes])
147
+ tag = bytes[0]
148
+ raw_public_key = bytes[1..]
149
+ CLPublicKey.new(raw_public_key, tag)
150
+ end
151
+
152
+ end
@@ -0,0 +1,26 @@
1
+ require_relative './cl_type.rb'
2
+ require_relative './constants.rb'
3
+
4
+
5
+ class CLPublicKeyType < CLType
6
+ def initialize(value = nil)
7
+ super(value)
8
+ @value = value
9
+ end
10
+
11
+ def to_string
12
+ TAGS.key(22).to_s
13
+ end
14
+
15
+ def get_value
16
+ @value
17
+ end
18
+
19
+ def to_json
20
+ to_string
21
+ end
22
+
23
+ def to_bytes
24
+ [22].pack("C*").unpack1("H*")
25
+ end
26
+ end
@@ -0,0 +1,25 @@
1
+ require_relative './cl_result_type.rb'
2
+ require_relative './cl_value.rb'
3
+ require_relative '../serialization/cl_value_bytes_parsers.rb'
4
+
5
+
6
+
7
+ class CLResult < CLValue
8
+ include CLValueBytesParsers::CLResultBytesParser
9
+
10
+ def initialize(value = nil)
11
+ super
12
+ @value = value
13
+ end
14
+
15
+ def get_cl_type
16
+ @cl_type = CLResultType.new
17
+ @cl_type.to_string
18
+ end
19
+
20
+ def get_value
21
+ @value
22
+ end
23
+
24
+ end
25
+
@@ -0,0 +1,26 @@
1
+ require_relative './cl_type.rb'
2
+ require_relative './constants.rb'
3
+
4
+
5
+ class CLResultType < CLType
6
+ def initialize(value = nil)
7
+ super(value)
8
+ @value = value
9
+ end
10
+
11
+ def to_string
12
+ TAGS.key(16).to_s
13
+ end
14
+
15
+ def get_value
16
+ @value
17
+ end
18
+
19
+ def to_json
20
+ to_string
21
+ end
22
+
23
+ def to_bytes
24
+ [16].pack("C*").unpack1("H*")
25
+ end
26
+ end
@@ -0,0 +1,39 @@
1
+ require_relative './cl_string_type.rb'
2
+ require_relative './cl_value.rb'
3
+ require_relative '../serialization/cl_value_bytes_parsers.rb'
4
+
5
+
6
+ class CLString < CLValue
7
+ attr_accessor :cl_value
8
+ alias_method :clvalue?, :cl_value
9
+ include CLValueBytesParsers::CLStringBytesParser
10
+
11
+ def initialize(value)
12
+ super()
13
+ # raise "error" unless value.is_a?(String)
14
+ raise "error" unless value.instance_of? String
15
+ @value = value
16
+ end
17
+
18
+ def get_cl_type
19
+ @cl_string_type = CLStringType.new
20
+ @cl_string_type.to_string
21
+ end
22
+
23
+ def get_value
24
+ @value
25
+ end
26
+
27
+ def get_size
28
+ @value.length
29
+ end
30
+
31
+ def self.to_bytes(clvalue)
32
+ value = clvalue.get_value
33
+ len = value.length
34
+ hex1 = len.to_s(16).rjust(8, '0').scan(/../).reverse.join('')
35
+ hex2 = value.unpack("H*").first
36
+ hex1 + hex2
37
+ end
38
+ end
39
+
@@ -0,0 +1,32 @@
1
+ require_relative './cl_type.rb'
2
+ require_relative './constants.rb'
3
+
4
+
5
+ class CLStringType < CLType
6
+
7
+ def initialize(value = nil)
8
+ super(value)
9
+ @value = value
10
+ end
11
+
12
+ def to_string
13
+ TAGS.key(10).to_s
14
+ end
15
+
16
+ def get_value
17
+ @value
18
+ end
19
+
20
+ def to_json
21
+ to_string
22
+ end
23
+
24
+ def to_bytes
25
+ [10].pack("C*").unpack1("H*")
26
+ end
27
+ end
28
+
29
+
30
+
31
+
32
+