test_sdk1 1.0.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/CONTRIBUTING.md +1 -0
- data/LICENSE +201 -0
- data/README.md +147 -0
- data/SECURITY.md +12 -0
- 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/auction_state.rb +36 -0
- data/lib/entity/bid.rb +24 -0
- data/lib/entity/bid_info.rb +51 -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/delegator.rb +37 -0
- data/lib/entity/deploy.rb +44 -0
- data/lib/entity/deploy_approval.rb +24 -0
- data/lib/entity/deploy_executable.rb +162 -0
- data/lib/entity/deploy_executable_item_internal.rb +26 -0
- data/lib/entity/deploy_executable_transfer.rb +50 -0
- data/lib/entity/deploy_hash.rb +16 -0
- data/lib/entity/deploy_header.rb +60 -0
- 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/era_summary.rb +44 -0
- data/lib/entity/era_validator.rb +23 -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/peer.rb +25 -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/validator_weight.rb +23 -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 +233 -0
- data/lib/rpc/rpc_error.rb +79 -0
- 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 +27 -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/test_sdk1.rb +289 -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 +120 -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 +25 -0
- 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 +452 -0
- data/spec/spec_helper.rb +100 -0
- data/spec/string_spec.rb +68 -0
- data/spec/testnet_spec.rb +498 -0
- data/spec/time_utils_spec.rb +87 -0
- metadata +198 -0
@@ -0,0 +1,120 @@
|
|
1
|
+
require_relative './cl_uref_type.rb'
|
2
|
+
require_relative './cl_value.rb'
|
3
|
+
require_relative '../serialization/cl_value_bytes_parsers.rb'
|
4
|
+
require 'json'
|
5
|
+
|
6
|
+
|
7
|
+
# Access Rights
|
8
|
+
# https://docs.casperlabs.io/design/serialization-standard/#clvalue-uref
|
9
|
+
|
10
|
+
|
11
|
+
class CLURef < CLValue
|
12
|
+
include CLValueBytesParsers::CLURefBytesParser
|
13
|
+
attr_accessor :err
|
14
|
+
# @param [Array<Integer>] value
|
15
|
+
# @param [AccessRights] access_rights
|
16
|
+
# value is an uint8array
|
17
|
+
def initialize(value = nil, access_rights = nil)
|
18
|
+
super()
|
19
|
+
# raise ArgumentError.new('The length of URefAddr should be 32') unless value.length == 32
|
20
|
+
# rescue ArgumentError => e
|
21
|
+
# p e.message
|
22
|
+
begin
|
23
|
+
raise ArgumentError.new('The length of URefAddr should be 32') unless value.length == 32
|
24
|
+
rescue ArgumentError => e
|
25
|
+
e.message
|
26
|
+
end
|
27
|
+
begin
|
28
|
+
raise ArgumentError.new('Unsupported AccessRights') unless AccessRights.has_value?(access_rights)
|
29
|
+
rescue ArgumentError => e
|
30
|
+
e.message
|
31
|
+
end
|
32
|
+
# if value.length != 32
|
33
|
+
# raise ArgumentError.new('The length of URefAddr should be 32')
|
34
|
+
# end
|
35
|
+
# raise ArgumentError.new("Unsupported AccessRights") unless AccessRights.has_value?(access_rights)
|
36
|
+
# if value.length != 32
|
37
|
+
# begin
|
38
|
+
# raise Error.new('The length of URefAddr should be 32')
|
39
|
+
# rescue StandardError => e
|
40
|
+
# puts e
|
41
|
+
# end
|
42
|
+
# end
|
43
|
+
# if !(AccessRights.has_value?(access_rights))
|
44
|
+
# raise Error.new('Unsupported AccessRights')
|
45
|
+
# end
|
46
|
+
@value = value
|
47
|
+
@access_rights = access_rights
|
48
|
+
|
49
|
+
end
|
50
|
+
|
51
|
+
def get_cl_type
|
52
|
+
@cl_type = CLURefType.new
|
53
|
+
@cl_type.to_string
|
54
|
+
end
|
55
|
+
|
56
|
+
def get_value
|
57
|
+
@value
|
58
|
+
end
|
59
|
+
|
60
|
+
def get_access_rights
|
61
|
+
@access_rights
|
62
|
+
end
|
63
|
+
|
64
|
+
def get_size
|
65
|
+
@value.size
|
66
|
+
end
|
67
|
+
|
68
|
+
def self.parse_uref_address(str)
|
69
|
+
raise ArgumentError.new("Expected a string value of \'uref-\' ") unless str.start_with?("uref-")
|
70
|
+
raise ArgumentError.new("Expected a value of 3") unless str[0..str.length-1].split('-', 3).size == 3
|
71
|
+
raise ArgumentError.new("Expected a value of 32") unless str[0..str.length-1].split('-', 3)[1].length/2 == 32
|
72
|
+
|
73
|
+
arr = str[0..str.length-1].split('-', 3)
|
74
|
+
prefix = arr[0]
|
75
|
+
uref_addr = arr[1]
|
76
|
+
suffix = arr[2]
|
77
|
+
uref_byte_length = uref_addr.length / 2
|
78
|
+
decoded_addr = CLValueBytesParsers::CLURefBytesParser.decode_base_16(uref_addr)
|
79
|
+
access_rights = suffix.to_i(8)
|
80
|
+
# puts decoded_addr.inspect
|
81
|
+
# puts access_rights
|
82
|
+
raise ArgumentError.new("The value of \'access_rights\' is out of range. It must be >= 0 and <= 7. Received #{access_rights}") unless suffix.to_i(10).between?(0, 7)
|
83
|
+
CLURef.new(decoded_addr, access_rights)
|
84
|
+
end
|
85
|
+
|
86
|
+
# Example: str = "uref-000102030405060708090a0b0c0d0e0f000102030405060708090a0b0c0d0e0f-007";
|
87
|
+
def to_bytes(str)
|
88
|
+
raise ArgumentError.new("Expected a string value of \'uref-\' ") unless str.start_with?("uref-")
|
89
|
+
raise ArgumentError.new("Expected a value of 3") unless str[0..str.length-1].split('-', 3).size == 3
|
90
|
+
raise ArgumentError.new("Expected a value of 32") unless str[0..str.length-1].split('-', 3)[1].length/2 == 32
|
91
|
+
|
92
|
+
arr = str[0..str.length-1].split('-', 3)
|
93
|
+
prefix = arr[0]
|
94
|
+
uref_addr = arr[1]
|
95
|
+
suffix = arr[2]
|
96
|
+
uref_byte_length = uref_addr.length / 2
|
97
|
+
access_rights = suffix.to_i(8)
|
98
|
+
raise ArgumentError.new("The value of \'access_rights\' is out of range. It must be >= 0 and <= 7. Received #{access_rights}") unless suffix.to_i(10).between?(0, 7)
|
99
|
+
uref_addr + [access_rights].pack("C*").unpack1("H*")
|
100
|
+
end
|
101
|
+
|
102
|
+
def self.to_json(uref)
|
103
|
+
decoded_addr = uref.get_value
|
104
|
+
# p decoded_addr
|
105
|
+
access_rights = uref.get_access_rights
|
106
|
+
decoded_addr_with_access_rights = CLValueBytesParsers::CLURefBytesParser.to_bytes(uref)
|
107
|
+
# p decoded_addr_with_access_rights
|
108
|
+
encoded_addr_with_access_rights = CLValueBytesParsers::CLURefBytesParser.encode_base_16(decoded_addr_with_access_rights)
|
109
|
+
# p encoded_addr_with_access_rights
|
110
|
+
json = {"bytes": encoded_addr_with_access_rights, "cl_type": uref.get_cl_type}.to_json
|
111
|
+
end
|
112
|
+
|
113
|
+
def self.from_json(json)
|
114
|
+
parsed = JSON.parse(json).deep_symbolize_keys
|
115
|
+
bytes = CLValueBytesParsers::CLURefBytesParser.decode_base_16(parsed[:bytes])
|
116
|
+
decoded = bytes[0...-1]
|
117
|
+
access_rights = bytes.pop
|
118
|
+
CLURef.new(decoded, access_rights)
|
119
|
+
end
|
120
|
+
end
|
@@ -0,0 +1,46 @@
|
|
1
|
+
require_relative './cl_type.rb'
|
2
|
+
require_relative './constants.rb'
|
3
|
+
|
4
|
+
|
5
|
+
|
6
|
+
class CLURefType < CLType
|
7
|
+
def initialize(value = nil)
|
8
|
+
super(value)
|
9
|
+
@value = value
|
10
|
+
end
|
11
|
+
|
12
|
+
def to_string
|
13
|
+
TAGS.key(12).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
|
+
[12].pack("C*").unpack1("H*")
|
26
|
+
end
|
27
|
+
end
|
28
|
+
|
29
|
+
AccessRights = {
|
30
|
+
# No permissions
|
31
|
+
None: 0b00000000,
|
32
|
+
# Permission to read the value under the associated [[URef]].
|
33
|
+
READ: 0b00000001,
|
34
|
+
# Permission to write a value under the associated [[URef]].
|
35
|
+
WRITE: 0b00000010,
|
36
|
+
# Permission to read or write the value under the associated [[URef]].
|
37
|
+
READ_WRITE: 0b00000011,
|
38
|
+
# Permission to add to the value under the associated [[URef]].
|
39
|
+
ADD: 0b00000100,
|
40
|
+
# # Permission to read or add to the value under the associated [[URef]].
|
41
|
+
READ_ADD: 0b00000101,
|
42
|
+
# # Permission to add to, or write the value under the associated [[URef]].
|
43
|
+
ADD_WRITE: 0b00000110,
|
44
|
+
# # Permission to read, add to, or write the value under the associated [[URef]].
|
45
|
+
READ_ADD_WRITE: 0b00000111
|
46
|
+
}
|
@@ -0,0 +1,50 @@
|
|
1
|
+
MIN_I32 = -2147483648
|
2
|
+
MAX_I32 = 2147483647
|
3
|
+
|
4
|
+
MIN_I64 = -9223372036854775808
|
5
|
+
MAX_I64 = 9223372036854775807
|
6
|
+
|
7
|
+
MIN_U8 = 0
|
8
|
+
MAX_U8 = 255
|
9
|
+
|
10
|
+
MIN_U32 = 0
|
11
|
+
MAX_U32 = 2.pow(32) - 1
|
12
|
+
|
13
|
+
MIN_U64 = 0
|
14
|
+
MAX_U64 = 2.pow(64) - 1
|
15
|
+
|
16
|
+
MIN_U128 = 0
|
17
|
+
MAX_U128 = 2.pow(128) - 1
|
18
|
+
|
19
|
+
MIN_U256 = 0
|
20
|
+
MAX_U256 = 2.pow(256) - 1
|
21
|
+
|
22
|
+
MIN_U512 = 0
|
23
|
+
MAX_U512 = 2.pow(512) - 1
|
24
|
+
|
25
|
+
|
26
|
+
BOOL_ID = 'Bool';
|
27
|
+
KEY_ID = 'Key';
|
28
|
+
PUBLIC_KEY_ID = 'PublicKey';
|
29
|
+
STRING_ID = 'String';
|
30
|
+
UREF_ID = 'URef';
|
31
|
+
UNIT_ID = 'Unit';
|
32
|
+
I32_ID = 'I32';
|
33
|
+
I64_ID = 'I64';
|
34
|
+
U8_ID = 'U8';
|
35
|
+
U32_ID = 'U32';
|
36
|
+
U64_ID = 'U64';
|
37
|
+
U128_ID = 'U128';
|
38
|
+
U256_ID = 'U256';
|
39
|
+
U512_ID = 'U512';
|
40
|
+
|
41
|
+
BYTE_ARRAY_ID = 'ByteArray';
|
42
|
+
LIST_ID = 'List';
|
43
|
+
MAP_ID = 'Map';
|
44
|
+
OPTION_ID = 'Option';
|
45
|
+
RESULT_ID = 'Result';
|
46
|
+
TUPLE1_ID = 'Tuple1';
|
47
|
+
TUPLE2_ID = 'Tuple2';
|
48
|
+
TUPLE3_ID = 'Tuple3';
|
49
|
+
|
50
|
+
ACCOUNT_HASH_ID = 'AccountHash';
|
data/lib/types/error.rb
ADDED
@@ -0,0 +1,18 @@
|
|
1
|
+
module Utils
|
2
|
+
module Base16
|
3
|
+
module_function
|
4
|
+
|
5
|
+
# @param [Array<Integer>] byte_array
|
6
|
+
# @return [String] encoded
|
7
|
+
def encode16(byte_array)
|
8
|
+
encoded = byte_array.pack("C*").unpack("H*").first
|
9
|
+
end
|
10
|
+
|
11
|
+
# @param [String] str
|
12
|
+
# @return [Array<Integer>] decoded
|
13
|
+
def decode16(str)
|
14
|
+
decoded = [str].pack('H*').unpack("C*")
|
15
|
+
end
|
16
|
+
end
|
17
|
+
|
18
|
+
end
|
@@ -0,0 +1,107 @@
|
|
1
|
+
module Utils
|
2
|
+
module ByteUtils
|
3
|
+
extend self
|
4
|
+
|
5
|
+
# @param [String] str
|
6
|
+
# @return [String]
|
7
|
+
def string_to_hex(str)
|
8
|
+
# str.unpack1("H*")
|
9
|
+
str.unpack("H*").first
|
10
|
+
end
|
11
|
+
|
12
|
+
# @param [String] hex_str
|
13
|
+
# @return [String]
|
14
|
+
def hex_to_string(hex_str)
|
15
|
+
[hex_str].pack("H*")
|
16
|
+
end
|
17
|
+
|
18
|
+
# @param [String] hex_str
|
19
|
+
# @return [Array]
|
20
|
+
def hex_to_byte_array(hex_str)
|
21
|
+
[hex_str].pack("H*").unpack("C*")
|
22
|
+
end
|
23
|
+
|
24
|
+
# @param [Array] byte_array
|
25
|
+
# @return [String]
|
26
|
+
def byte_array_to_hex(byte_array)
|
27
|
+
# byte_array.pack("C*").unpack1("H*")
|
28
|
+
byte_array.pack("C*").unpack("H*").first
|
29
|
+
end
|
30
|
+
|
31
|
+
# @param [String] str
|
32
|
+
# @return [Array]
|
33
|
+
def string_to_byte_array(str)
|
34
|
+
str.unpack("C*")
|
35
|
+
end
|
36
|
+
|
37
|
+
# @param [Array] byte_array
|
38
|
+
# @return [String]
|
39
|
+
def byte_array_to_string(byte_array)
|
40
|
+
byte_array.pack("C*")
|
41
|
+
end
|
42
|
+
|
43
|
+
# @param [Integer] n
|
44
|
+
# @return [String]
|
45
|
+
def integer_to_hex(n)
|
46
|
+
[n].pack("l<*").unpack("H*").first
|
47
|
+
end
|
48
|
+
|
49
|
+
# @param [String] hex_str
|
50
|
+
# @return [Integer]
|
51
|
+
def hex_to_integer(hex_str)
|
52
|
+
[hex_str].pack("H*").unpack("l").first
|
53
|
+
end
|
54
|
+
|
55
|
+
def to_i32(n)
|
56
|
+
# [value].pack("l<*").unpack("C*")
|
57
|
+
[n].pack("l<*").unpack("H*").first
|
58
|
+
# [n].pack("l<*").unpack1("H*")
|
59
|
+
end
|
60
|
+
|
61
|
+
def to_i64(n)
|
62
|
+
# [value].pack("l<*").unpack("C*")
|
63
|
+
[n].pack("q<*").unpack("H*").first
|
64
|
+
# [n].pack("l<*").unpack1("H*")
|
65
|
+
end
|
66
|
+
|
67
|
+
def to_u8(n)
|
68
|
+
[n].pack("C").unpack1("H*")
|
69
|
+
end
|
70
|
+
def to_u32(n)
|
71
|
+
[n].pack("L<*").unpack("H*").first
|
72
|
+
# [n].pack("L<*").unpack1("H*")
|
73
|
+
end
|
74
|
+
# @param [Integer] n
|
75
|
+
# @return [String]
|
76
|
+
def to_u64(n)
|
77
|
+
[n].pack("Q<*").unpack("H*").first
|
78
|
+
end
|
79
|
+
|
80
|
+
# @param [String] hex_str
|
81
|
+
# @return [String]
|
82
|
+
def hex_from_little_endian_to_big_endian(hex_str)
|
83
|
+
# [hex_str].pack("H*").unpack('N*').pack('V*').unpack1('H*')
|
84
|
+
[hex_str].pack("H*").unpack('N*').pack('V*').unpack('H*').first
|
85
|
+
end
|
86
|
+
|
87
|
+
def hex_to_i32_value(hex_str)
|
88
|
+
[hex_str].pack("H*").unpack("l*").first
|
89
|
+
end
|
90
|
+
|
91
|
+
def hex_to_i64_value(hex_str)
|
92
|
+
[hex_str].pack("H*").unpack("q*").first
|
93
|
+
end
|
94
|
+
|
95
|
+
def hex_to_u8_value(hex_str)
|
96
|
+
[hex_str].pack("H*").unpack("C*").first
|
97
|
+
end
|
98
|
+
|
99
|
+
def hex_to_u32_value(hex_str)
|
100
|
+
[hex_str].pack("H*").unpack("L*").first
|
101
|
+
end
|
102
|
+
|
103
|
+
def hex_to_u64_value(hex_str)
|
104
|
+
[hex_str].pack("H*").unpack("Q*").first
|
105
|
+
end
|
106
|
+
end
|
107
|
+
end
|
@@ -0,0 +1,53 @@
|
|
1
|
+
require_relative '../serialization/cl_value_bytes_parsers.rb'
|
2
|
+
|
3
|
+
def find_byte_parser_by_cl_type(type, value)
|
4
|
+
if type == "Bool"
|
5
|
+
CLValueBytesParsers::CLBoolBytesParser.to_bytes(value)
|
6
|
+
elsif type == "I32"
|
7
|
+
CLValueBytesParsers::CLI32BytesParser.to_bytes(value)
|
8
|
+
elsif type == "I64"
|
9
|
+
CLValueBytesParsers::CLI64BytesParser.to_bytes(value)
|
10
|
+
elsif type == "U8"
|
11
|
+
CLValueBytesParsers::CLU8BytesParser.to_bytes(value)
|
12
|
+
elsif type == "U32"
|
13
|
+
CLValueBytesParsers::CLU32BytesParser.to_bytes(value)
|
14
|
+
elsif type == "U64"
|
15
|
+
CLValueBytesParsers::CLU64BytesParser.to_bytes(value)
|
16
|
+
elsif type == "U128"
|
17
|
+
CLValueBytesParsers::CLU128BytesParser.to_bytes(value)
|
18
|
+
elsif type == "U256"
|
19
|
+
CLValueBytesParsers::CLU256BytesParser.to_bytes(value)
|
20
|
+
elsif type == "U512"
|
21
|
+
CLValueBytesParsers::CLU512BytesParser.to_bytes(value)
|
22
|
+
elsif type == "Unit"
|
23
|
+
CLValueBytesParsers::CLUnitBytesParser.to_bytes(value)
|
24
|
+
elsif type == "String"
|
25
|
+
CLValueBytesParsers::CLStringBytesParser.to_bytes(value)
|
26
|
+
elsif type == "Key"
|
27
|
+
CLValueBytesParsers::CLKeyBytesParser.to_bytes(value)
|
28
|
+
elsif type == "URef"
|
29
|
+
CLValueBytesParsers::CLURefBytesParser.to_bytes(value)
|
30
|
+
elsif type == "Option"
|
31
|
+
CLValueBytesParsers::CLOptionBytesParser.to_bytes(value)
|
32
|
+
elsif type == "List"
|
33
|
+
CLValueBytesParsers::CLListBytesParser.to_bytes(value)
|
34
|
+
elsif type == "ByteArray"
|
35
|
+
CLValueBytesParsers::CLByteArrayBytesParser.to_bytes(value)
|
36
|
+
elsif type == "Result"
|
37
|
+
CLValueBytesParsers::CLResultBytesParser.to_bytes(value)
|
38
|
+
elsif type == "Map"
|
39
|
+
CLValueBytesParsers::CLMapBytesParser.to_bytes(value)
|
40
|
+
elsif type == "Tuple1"
|
41
|
+
CLValueBytesParsers::CLTupleBytesParser.to_bytes(value)
|
42
|
+
elsif type == "Tuple2"
|
43
|
+
CLValueBytesParsers::CLTupleBytesParser.to_bytes(value)
|
44
|
+
elsif type == "Tuple3"
|
45
|
+
CLValueBytesParsers::CLTupleBytesParser.to_bytes(value)
|
46
|
+
elsif type == "Any"
|
47
|
+
CLValueBytesParsers::CLAnyBytesParser.to_bytes(value)
|
48
|
+
elsif type == "PublicKey"
|
49
|
+
CLValueBytesParsers::CLPublicKeyBytesParser.to_bytes(value)
|
50
|
+
else
|
51
|
+
"Undefined type"
|
52
|
+
end
|
53
|
+
end
|
@@ -0,0 +1,19 @@
|
|
1
|
+
require 'blake2'
|
2
|
+
|
3
|
+
module Utils
|
4
|
+
module HashUtils
|
5
|
+
module_function
|
6
|
+
|
7
|
+
def byte_hash(arr)
|
8
|
+
str = arr.pack("C*").unpack("H*").first
|
9
|
+
key = Blake2::Key.none
|
10
|
+
Blake2.bytes(str, key, 32)
|
11
|
+
end
|
12
|
+
|
13
|
+
def account_hash_from_byte_to_hex(account_hash_byte_array)
|
14
|
+
prefix = "account-hash-"
|
15
|
+
hash_hex = account_hash_byte_array.pack("C*").unpack("H*").first
|
16
|
+
prefix + hash_hex
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
@@ -0,0 +1,12 @@
|
|
1
|
+
module Utils
|
2
|
+
module HexUtils
|
3
|
+
module_function
|
4
|
+
|
5
|
+
# @param [String] public_key_hex
|
6
|
+
# @return [Boolean]
|
7
|
+
def valid_public_key_format?(public_key_hex)
|
8
|
+
# !!"01f9235ff9c46c990e1e2eee0d531e488101fab48c05b75b8ea9983658e228f06b".match(/^0(1[0-9a-fA-F]{64}|2[0-9a-fA-F]{66})$/)
|
9
|
+
!!public_key_hex.match(/^0(1[0-9a-fA-F]{64}|2[0-9a-fA-F]{66})$/)
|
10
|
+
end
|
11
|
+
end
|
12
|
+
end
|
@@ -0,0 +1,85 @@
|
|
1
|
+
require 'date'
|
2
|
+
require 'time'
|
3
|
+
|
4
|
+
module Utils
|
5
|
+
module TimeUtils
|
6
|
+
extend self
|
7
|
+
|
8
|
+
# Convert iso datetime to ms from unix epoch
|
9
|
+
#
|
10
|
+
# @param [String] timestamp
|
11
|
+
# @return [Integer]
|
12
|
+
def to_epoc_ms(timestamp)
|
13
|
+
DateTime.parse( ).strftime("%Q")
|
14
|
+
DateTime.parse(timestamp).strftime("%Q").to_i
|
15
|
+
end
|
16
|
+
|
17
|
+
# Converts milliseconds to timestamp
|
18
|
+
def to_iso_string(milliseconds)
|
19
|
+
milliseconds -= 3 * 60 * 60 * 1000
|
20
|
+
Time.at(milliseconds/1000.0).strftime('%Y-%m-%dT%H:%M:%S.%3NZ')
|
21
|
+
end
|
22
|
+
|
23
|
+
# Convert ttl into milliseconds
|
24
|
+
# @param [String] ttl
|
25
|
+
# @return [Integer]
|
26
|
+
def ttl_to_milliseconds(ttl)
|
27
|
+
arr = ttl.split(' ')
|
28
|
+
total_time = 0
|
29
|
+
n = 1
|
30
|
+
for item in arr do
|
31
|
+
if item.include?("h")
|
32
|
+
n = 60 * 60 * 1000
|
33
|
+
elsif item.include?("m") && !item.include?("ms")
|
34
|
+
n = 60 * 1000
|
35
|
+
elsif item.include?("s") && !item.include?("ms")
|
36
|
+
n = 1000
|
37
|
+
elsif item.include?("ms")
|
38
|
+
n = 1
|
39
|
+
elsif item.include?("d")
|
40
|
+
n = 24 * 60 * 60 * 1000
|
41
|
+
elsif item.include?("day")
|
42
|
+
n = 24 * 60 * 60 * 1000
|
43
|
+
end
|
44
|
+
value = item.gsub(/[^0-9,.]/, "").to_i
|
45
|
+
value *= n
|
46
|
+
total_time += value
|
47
|
+
n = 1
|
48
|
+
end
|
49
|
+
total_time
|
50
|
+
end
|
51
|
+
|
52
|
+
# Milliseconds to String TTL
|
53
|
+
#
|
54
|
+
# @param [Integer] milliseconds
|
55
|
+
# @return [String]
|
56
|
+
def milliseconds_to_ttl(milliseconds)
|
57
|
+
return '' unless milliseconds
|
58
|
+
days, milliseconds = milliseconds.divmod(1000 * 60 * 60 * 24)
|
59
|
+
hours, milliseconds = milliseconds.divmod(1000 * 60 * 60)
|
60
|
+
minutes, milliseconds = milliseconds.divmod(1000 * 60)
|
61
|
+
seconds, milliseconds = milliseconds.divmod(1000)
|
62
|
+
str = "#{days}d #{hours}h #{minutes}m #{seconds}s #{milliseconds}ms"
|
63
|
+
arr = str.split(" ")
|
64
|
+
new_str = ""
|
65
|
+
for item in arr do
|
66
|
+
if item[0] != '0'
|
67
|
+
new_str += item + " "
|
68
|
+
end
|
69
|
+
end
|
70
|
+
new_str.rstrip
|
71
|
+
end
|
72
|
+
|
73
|
+
def get_duration_hrs_mins_secs_ms(milliseconds)
|
74
|
+
return '' unless milliseconds
|
75
|
+
hours, milliseconds = milliseconds.divmod(1000 * 60 * 60)
|
76
|
+
minutes, milliseconds = milliseconds.divmod(1000 * 60)
|
77
|
+
seconds, milliseconds = milliseconds.divmod(1000)
|
78
|
+
"#{hours}h #{minutes}m #{seconds}s #{milliseconds}ms"
|
79
|
+
rescue
|
80
|
+
""
|
81
|
+
end
|
82
|
+
|
83
|
+
end
|
84
|
+
end
|
85
|
+
|
data/lib/utils/utils.rb
ADDED
data/lib/version.rb
ADDED