test_sdk1 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 +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