casper_network 1.0.2 → 1.1.2
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 +4 -4
- data/README.md +221 -78
- data/lib/casper_network.rb +7 -4
- data/lib/crypto/asymmetric_key.rb +19 -18
- data/lib/crypto/ed25519.rb +114 -0
- data/lib/crypto/ed25519_key.rb +111 -10
- data/lib/crypto/keys.rb +1 -2
- data/lib/crypto/keys_util.rb +20 -0
- data/lib/entity/deploy.rb +154 -1
- data/lib/entity/deploy_executable.rb +50 -7
- data/lib/entity/deploy_executable_item_internal.rb +1 -1
- data/lib/entity/deploy_header.rb +17 -0
- data/lib/entity/deploy_named_argument.rb +61 -2
- data/lib/entity/module_bytes.rb +9 -2
- data/lib/include.rb +2 -0
- data/lib/serialization/cl_value_serializer.rb +69 -12
- data/lib/serialization/deploy_serializer.rb +129 -15
- data/lib/types/cl_option.rb +9 -1
- data/lib/types/cl_public_key.rb +2 -0
- data/lib/types/cl_value.rb +8 -0
- data/lib/utils/byte_utils.rb +28 -0
- data/lib/utils/helpers.rb +10 -0
- data/lib/version.rb +1 -1
- data/spec/cl_value_serializer_spec.rb +15 -1
- data/spec/deploy_executable_spec.rb +90 -0
- data/spec/testnet_spec.rb +5 -3
- metadata +7 -24
- data/lib/crypto/00_asymmetric_key.rb +0 -95
- data/lib/crypto/01_ed25519.rb +0 -67
- data/lib/crypto/key_pair.rb +0 -40
- data/lib/crypto/secp256k1_key.rb +0 -0
- data/lib/crypto/test_ed25519_key.rb +0 -44
- data/lib/entity/executable_deploy_item.rb +0 -11
- data/lib/serialization/test.rb +0 -431
- data/lib/types/cl_account_hash.rb +0 -24
- data/lib/types/cl_account_hash_type.rb +0 -22
- data/lib/utils/utils.rb +0 -2
- data/spec/a_spec.rb +0 -697
- data/spec/cl_public_spec.rb +0 -169
- data/spec/crypto_spec.rb +0 -42
- data/spec/deploy_executable_serializer_spec.rb +0 -0
- data/spec/deploy_serializer_test_spec.rb +0 -225
- data/spec/string_spec.rb +0 -68
@@ -1,95 +0,0 @@
|
|
1
|
-
require_relative '../utils/base_16.rb'
|
2
|
-
require_relative '../types/cl_public_key.rb'
|
3
|
-
require_relative '../utils/hex_utils.rb'
|
4
|
-
require_relative '../utils/hash_utils.rb'
|
5
|
-
|
6
|
-
CLPublicKeyTag = {
|
7
|
-
ED25519: 1,
|
8
|
-
SECP256K1: 2
|
9
|
-
}
|
10
|
-
|
11
|
-
SignatureAlgorithm = {
|
12
|
-
Ed25519: 'ed25519',
|
13
|
-
Secp256K1: 'secp256k1'
|
14
|
-
}
|
15
|
-
|
16
|
-
class AsymmetricKey
|
17
|
-
attr_reader :public_key, :private_key, :signature_algorithm
|
18
|
-
include Utils::HashUtils
|
19
|
-
# @param [CLPublicKey] public_key
|
20
|
-
# @param [Array] private_key
|
21
|
-
# @param [SignatureAlgorithm] signature_algorithm
|
22
|
-
def initialize(public_key, private_key, signature_algorithm)
|
23
|
-
@public_key = public_key
|
24
|
-
@private_key = private_key
|
25
|
-
@signature_algorithm = signature_algorithm
|
26
|
-
@tag = @public_key.get_cl_public_key_tag
|
27
|
-
end
|
28
|
-
|
29
|
-
# @return [CLPublicKey]
|
30
|
-
def get_public_key
|
31
|
-
@public_key
|
32
|
-
end
|
33
|
-
|
34
|
-
def get_signature_algorithm
|
35
|
-
@signature_algorithm
|
36
|
-
end
|
37
|
-
|
38
|
-
# Get public hex-encoded string
|
39
|
-
#
|
40
|
-
# @return [String]
|
41
|
-
def get_public_key_hex
|
42
|
-
"0#{@tag}" + Utils::Base16.encode16(@public_key.get_value)
|
43
|
-
end
|
44
|
-
|
45
|
-
# @param [CLPublicKey] public_key
|
46
|
-
# @return [String] account_hex
|
47
|
-
def account_hex(public_key)
|
48
|
-
account_hex = @public_key.to_hex
|
49
|
-
end
|
50
|
-
|
51
|
-
# @return [Array<Integer>]
|
52
|
-
def account_hash
|
53
|
-
@tag = @public_key.get_cl_public_key_tag
|
54
|
-
key_name = CLPublicKeyTag.key(@tag).to_s
|
55
|
-
prefix = key_name.downcase.unpack("C*") + [0]
|
56
|
-
bytes = prefix + @public_key.get_value
|
57
|
-
result_array = Utils::HashUtils.byte_hash(bytes)
|
58
|
-
@public_key.get_value.length == 0 ? [] : result_array
|
59
|
-
#** @public_key.to_account_hash_byte_array
|
60
|
-
end
|
61
|
-
|
62
|
-
# @param [String] path_to_private_key
|
63
|
-
def create_from_private_key_file(path_to_private_key)
|
64
|
-
puts "AsymmetricKey::create_from_private_key_file is called!"
|
65
|
-
end
|
66
|
-
|
67
|
-
# Get public key which is stored in pem
|
68
|
-
def export_public_key_in_pem
|
69
|
-
puts "AsymmetricKey::export_public_key_in_pem is called!"
|
70
|
-
end
|
71
|
-
|
72
|
-
# @param [String] message
|
73
|
-
# @return [String]
|
74
|
-
def sign(message)
|
75
|
-
puts "AsymmetricKey:sign is called!"
|
76
|
-
end
|
77
|
-
|
78
|
-
|
79
|
-
# @param [String] signature
|
80
|
-
# @param [String] message
|
81
|
-
# @return [Boolean]
|
82
|
-
def verify(signature, message)
|
83
|
-
puts "AsymmetricKey::verify is called!"
|
84
|
-
end
|
85
|
-
|
86
|
-
protected
|
87
|
-
attr_accessor :private_key
|
88
|
-
|
89
|
-
def to_pem(tag, content)
|
90
|
-
line1 = "-----BEGIN #{tag}-----\n"
|
91
|
-
line2 = "#{content}"
|
92
|
-
line3 = "-----END #{tag}-----\n"
|
93
|
-
line1 + line2 + line3
|
94
|
-
end
|
95
|
-
end
|
data/lib/crypto/01_ed25519.rb
DELETED
@@ -1,67 +0,0 @@
|
|
1
|
-
require 'openssl'
|
2
|
-
require 'ed25519'
|
3
|
-
require_relative './asymmetric_key.rb'
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
class Ed25519Key < AsymmetricKey
|
8
|
-
|
9
|
-
def initialize(public_key, private_key)
|
10
|
-
super(public_key, private_key, SignatureAlgorithm[:Ed25519])
|
11
|
-
end
|
12
|
-
|
13
|
-
# @param [Array] public_key
|
14
|
-
# @return [String]
|
15
|
-
# def self.account_hex(public_key)
|
16
|
-
# '01' + Utils::Base16.encode16(public_key)
|
17
|
-
# end
|
18
|
-
|
19
|
-
|
20
|
-
def create_from_private_key_file(path_to_private_key)
|
21
|
-
|
22
|
-
end
|
23
|
-
|
24
|
-
|
25
|
-
def parse_private_key_file(path)
|
26
|
-
end
|
27
|
-
|
28
|
-
def parse_public_key_file(path)
|
29
|
-
end
|
30
|
-
|
31
|
-
def parse_private_key(bytes)
|
32
|
-
end
|
33
|
-
|
34
|
-
def parse_public_key(bytes)
|
35
|
-
end
|
36
|
-
|
37
|
-
def read_base_64_with_pem(content)
|
38
|
-
end
|
39
|
-
|
40
|
-
# private method
|
41
|
-
def read_base_64_file(path)
|
42
|
-
end
|
43
|
-
|
44
|
-
# private
|
45
|
-
def parse_key(bytes, from, to)
|
46
|
-
end
|
47
|
-
|
48
|
-
def export_private_key_in_pem
|
49
|
-
end
|
50
|
-
|
51
|
-
def export_public_key_in_pem
|
52
|
-
end
|
53
|
-
|
54
|
-
def sign(msg)
|
55
|
-
end
|
56
|
-
|
57
|
-
def verify(signature, msg)
|
58
|
-
end
|
59
|
-
|
60
|
-
def private_to_public(private_key)
|
61
|
-
end
|
62
|
-
|
63
|
-
def load_keypair_from_private_file(private_key_path)
|
64
|
-
end
|
65
|
-
|
66
|
-
end
|
67
|
-
|
data/lib/crypto/key_pair.rb
DELETED
@@ -1,40 +0,0 @@
|
|
1
|
-
require 'ed25519'
|
2
|
-
|
3
|
-
|
4
|
-
signing_key = Ed25519::SigningKey.generate
|
5
|
-
puts "signing_key:\t #{signing_key}"
|
6
|
-
|
7
|
-
message = "hello"
|
8
|
-
signature = signing_key.sign(message)
|
9
|
-
puts "signature:\t #{signature}"
|
10
|
-
|
11
|
-
verify_key = signing_key.verify_key
|
12
|
-
puts "verify_key:\t #{verify_key}"
|
13
|
-
|
14
|
-
check_validity_of_signature = verify_key.verify(signature, message)
|
15
|
-
puts "check_validity_of_signature:\t #{check_validity_of_signature}"
|
16
|
-
|
17
|
-
# Serializing Keys
|
18
|
-
signature_key_bytes = signing_key.to_bytes
|
19
|
-
puts "signature_key_bytes:\t #{signature_key_bytes}"
|
20
|
-
verify_key_bytes = verify_key.to_bytes
|
21
|
-
puts "verify_key_bytes:\t #{verify_key_bytes}"
|
22
|
-
|
23
|
-
signing_key = Ed25519::SigningKey.new(signature_key_bytes)
|
24
|
-
puts "signing_key:\t #{signing_key}"
|
25
|
-
verify_key = Ed25519::VerifyKey.new(verify_key_bytes)
|
26
|
-
puts "verify_key:\t #{verify_key}"
|
27
|
-
|
28
|
-
|
29
|
-
require "ssh_data"
|
30
|
-
|
31
|
-
# key_data = File.read("/home/mehmet/Desktop/casper-ruby-sdk/lib/crypto/id_ed25519")
|
32
|
-
# key = SSHData::PrivateKey.parse_openssh(key_data)
|
33
|
-
#=> <SSHData::PrivateKey::ED25519>
|
34
|
-
|
35
|
-
# SSHData::PrivateKey::ED25519.generate
|
36
|
-
#=> raises SSHData::AlgorithmError
|
37
|
-
|
38
|
-
|
39
|
-
# SSHData::PrivateKey::ED25519.generate
|
40
|
-
#=> <SSHData::PrivateKey::ED25519>
|
data/lib/crypto/secp256k1_key.rb
DELETED
File without changes
|
@@ -1,44 +0,0 @@
|
|
1
|
-
require 'openssl'
|
2
|
-
require 'ed25519'
|
3
|
-
require_relative './asymmetric_key.rb'
|
4
|
-
|
5
|
-
# SignatureAlgorithm = {
|
6
|
-
# Ed25519: 'ed25519',
|
7
|
-
# Secp256K1: 'secp256k1'
|
8
|
-
# }
|
9
|
-
public_key = [
|
10
|
-
72, 211, 174, 85, 36, 108, 106, 103,
|
11
|
-
8, 124, 245, 68, 60, 206, 180, 170,
|
12
|
-
17, 175, 158, 175, 142, 32, 64, 61,
|
13
|
-
195, 38, 169, 191, 55, 231, 249, 39
|
14
|
-
]
|
15
|
-
|
16
|
-
private_key = [
|
17
|
-
236, 126, 0, 243, 8, 76, 9, 186, 180, 175, 7,
|
18
|
-
155, 21, 92, 86, 47, 12, 70, 89, 171, 48, 87,
|
19
|
-
37, 172, 174, 34, 140, 219, 24, 190, 42, 192, 72,
|
20
|
-
211, 174, 85, 36, 108, 106, 103, 8, 124, 245, 68,
|
21
|
-
60, 206, 180, 170, 17, 175, 158, 175, 142, 32, 64,
|
22
|
-
61, 195, 38, 169, 191, 55, 231, 249, 39
|
23
|
-
]
|
24
|
-
class Ed25519Key < AsymmetricKey
|
25
|
-
|
26
|
-
def initialize(public_key, private_key)
|
27
|
-
# super(keypair.public_key, keypair.secret_key, SignatureAlgorithm[:Ed25519])
|
28
|
-
super(public_key, private_key, SignatureAlgorithm[:Ed25519])
|
29
|
-
end
|
30
|
-
|
31
|
-
# Generate the account_hex for the Ed25519 public key
|
32
|
-
#
|
33
|
-
# @param [Array] public_key
|
34
|
-
# @return [String]
|
35
|
-
def account_hex(public_key)
|
36
|
-
'01' + Utils::Base16.encode16(public_key)
|
37
|
-
end
|
38
|
-
end
|
39
|
-
|
40
|
-
ed25519 = Ed25519Key.new(public_key, private_key)
|
41
|
-
|
42
|
-
puts ed25519.account_hash(public_key)
|
43
|
-
puts ed25519.get_signature_algorithm
|
44
|
-
puts ed25519.get_public_key
|
data/lib/serialization/test.rb
DELETED
@@ -1,431 +0,0 @@
|
|
1
|
-
require_relative '../types/cl_bool.rb'
|
2
|
-
require_relative '../types/cl_i32.rb'
|
3
|
-
require_relative '../types/cl_i64.rb'
|
4
|
-
require_relative '../types/cl_u8.rb'
|
5
|
-
require_relative '../types/cl_u32.rb'
|
6
|
-
require_relative '../types/cl_u64.rb'
|
7
|
-
require_relative '../types/cl_string.rb'
|
8
|
-
# require_relative '../types/cl_key.rb'
|
9
|
-
require_relative '../types/cl_uref.rb'
|
10
|
-
require_relative '../types/cl_tuple.rb'
|
11
|
-
require_relative '../types/cl_public_key.rb'
|
12
|
-
require_relative './cl_type_serializer.rb'
|
13
|
-
require_relative './cl_value_serializer.rb'
|
14
|
-
require_relative '../entity/deploy_named_argument.rb'
|
15
|
-
require_relative './deploy_named_arg_serializer.rb'
|
16
|
-
require_relative '../entity/deploy_executable_item_internal.rb'
|
17
|
-
require_relative '../entity/deploy_executable.rb'
|
18
|
-
require_relative '../entity/stored_contract_by_hash.rb'
|
19
|
-
require_relative '../entity/stored_contract_by_name.rb'
|
20
|
-
require_relative '../entity/stored_versioned_contract_by_hash.rb'
|
21
|
-
require_relative '../entity/stored_versioned_contract_by_name.rb'
|
22
|
-
require_relative './deploy_executable_serializer.rb'
|
23
|
-
require_relative '../entity/deploy.rb'
|
24
|
-
require_relative '../entity/deploy_hash.rb'
|
25
|
-
require_relative '../entity/deploy_header.rb'
|
26
|
-
require_relative '../entity/deploy_approval.rb'
|
27
|
-
require_relative '../entity/deploy_info.rb'
|
28
|
-
require_relative '../entity/deploy.rb'
|
29
|
-
require_relative './deploy_serializer.rb'
|
30
|
-
require 'blake2b'
|
31
|
-
|
32
|
-
# *************************** CLValueSerializer::Start *****************************************************#
|
33
|
-
|
34
|
-
# arg = Casper::Entity::DeployNamedArgument.new("casper-testnet", CLBool.new(true))
|
35
|
-
# arg = Casper::Entity::DeployNamedArgument.new("casper-testnet", CLString.new("Hello, Casper!"))
|
36
|
-
arg = Casper::Entity::DeployNamedArgument.new("casper-testnet", CLString.new("Hello, World!"))
|
37
|
-
deploy_named_arg_serializer = DeployNamedArgSerializer.new
|
38
|
-
serializer = CLValueSerializer.new
|
39
|
-
|
40
|
-
# puts deploy_named_arg_serializer.to_bytes(arg)
|
41
|
-
# puts serializer.to_bytes(CLString.new("Hello, Casper!"))
|
42
|
-
# clvalue = CLBool.new(true)
|
43
|
-
# puts serializer.to_bytes(clvalue)
|
44
|
-
|
45
|
-
# clvalue = CLi32.new(-10)
|
46
|
-
# puts serializer.to_bytes(clvalue)
|
47
|
-
|
48
|
-
# clvalue = CLi64.new(-16)
|
49
|
-
# puts serializer.to_bytes(clvalue)
|
50
|
-
|
51
|
-
clvalue = CLu8.new(0x07)
|
52
|
-
# puts serializer.to_bytes(clvalue)
|
53
|
-
clvalue = CLu32.new(2.pow(32) - 1)
|
54
|
-
clvalue = CLu64.new(2.pow(64) - 1)
|
55
|
-
|
56
|
-
pub_key_hex_ed25519 = "010af5a943bacd2a8e91792eb4e9a25e32d536ab103372f57f89ebcadfc59820d1"
|
57
|
-
pub_raw_ed25519 = [10, 245, 169, 67, 186, 205, 42, 142, 145, 121, 46, 180, 233, 162,
|
58
|
-
94, 50, 213, 54, 171, 16, 51, 114, 245, 127, 137, 235, 202, 223, 197, 152, 32, 209 ]
|
59
|
-
clvalue = CLPublicKey.new(pub_raw_ed25519, CLPublicKeyTag[:ED25519])
|
60
|
-
# puts serializer.to_bytes(clvalue)
|
61
|
-
|
62
|
-
clvalue = CLString.new("Hello, Casper!")
|
63
|
-
# puts serializer.to_bytes(clvalue)
|
64
|
-
|
65
|
-
uref = "uref-000102030405060708090a0b0c0d0e0f000102030405060708090a0b0c0d0e0f-007"
|
66
|
-
clvalue = CLURef.new(uref)
|
67
|
-
# puts CLURef.parse_uref_address(uref)
|
68
|
-
# puts clvalue.to_bytes(uref)
|
69
|
-
# puts serializer.to_bytes(clvalue)
|
70
|
-
|
71
|
-
# u32 = CLu32.new(17)
|
72
|
-
# clvalue = CLTuple1.new([u32])
|
73
|
-
str = CLString.new("ABCDE")
|
74
|
-
clvalue = CLTuple1.new([str])
|
75
|
-
# puts clvalue.get_value.class # => Array
|
76
|
-
# puts clvalue.get_value[0].get_value
|
77
|
-
# puts serializer.to_bytes(clvalue)
|
78
|
-
|
79
|
-
u32_1 = CLu32.new(17)
|
80
|
-
u32_2 = CLu32.new(127)
|
81
|
-
clvalue = CLTuple2.new([u32_1, u32_2])
|
82
|
-
clvalue = CLTuple2.new([u32_2, str])
|
83
|
-
# clval1 = clvalue.get_value[0]
|
84
|
-
# puts serializer.to_bytes(clval1)
|
85
|
-
# clval2 = clvalue.get_value[1]
|
86
|
-
# puts serializer.to_bytes(clval2)
|
87
|
-
# puts serializer.to_bytes(clvalue)
|
88
|
-
|
89
|
-
# clvalue = CLTuple2.new([u32_1, u32_2])
|
90
|
-
# puts clvalue.get_size
|
91
|
-
# puts serializer.tuple_values_length(clvalue)
|
92
|
-
|
93
|
-
clvalue = CLTuple3.new([u32_1, u32_2, u32_1])
|
94
|
-
clvalue = CLTuple3.new([u32_2, str, u32_2])
|
95
|
-
# puts clvalue.get_cl_type
|
96
|
-
# puts serializer.to_bytes(clvalue)
|
97
|
-
|
98
|
-
|
99
|
-
clvalue = CLOption.new(CLBool.new(false))
|
100
|
-
|
101
|
-
# puts clvalue.get_cl_type
|
102
|
-
|
103
|
-
temp = CLType.new(false)
|
104
|
-
# p temp.get_cl_type_tag(:Bool)
|
105
|
-
# p temp.get_cl_type_tag(:Option)
|
106
|
-
# p temp.get_tags
|
107
|
-
|
108
|
-
opt_type = CLOptionType.new( CLBoolType.new())
|
109
|
-
# p opt_type
|
110
|
-
# p opt_type.to_string
|
111
|
-
# p opt_type.get_inner_type
|
112
|
-
# p opt_type.to_json
|
113
|
-
# p opt_type.to_bytes
|
114
|
-
|
115
|
-
cl_opt = CLOption.new(CLBool.new(true))
|
116
|
-
# p cl_opt.get_value
|
117
|
-
# p cl_opt.get_cl_type
|
118
|
-
|
119
|
-
|
120
|
-
# serializer = CLValueSerializer.new
|
121
|
-
# puts serializer.to_bytes(cloption1)
|
122
|
-
|
123
|
-
|
124
|
-
# *************************** CLValueSerializer::End *****************************************************#
|
125
|
-
|
126
|
-
|
127
|
-
# StoredContractByName: {
|
128
|
-
# "name": "casper-example",
|
129
|
-
# "entry_point": "example-entry-point",
|
130
|
-
# "args": [
|
131
|
-
# [
|
132
|
-
# "quantity",
|
133
|
-
# {
|
134
|
-
# "cl_type": "I32",
|
135
|
-
# "bytes": "e8030000",
|
136
|
-
# "parsed": 1000
|
137
|
-
# }
|
138
|
-
# ]
|
139
|
-
# ]
|
140
|
-
# }
|
141
|
-
|
142
|
-
#********************** DeployExecutableItemInternal ************************************************************
|
143
|
-
deploy_executable_item_internal = Casper::Entity::DeployExecutableItemInternal.new()
|
144
|
-
deploy_executable_item_internal.set_arg(Casper::Entity::DeployNamedArgument.new("quantity", CLi32.new(1000)))
|
145
|
-
deploy_executable_item_internal.set_arg(Casper::Entity::DeployNamedArgument.new("amount", CLi32.new(1000)))
|
146
|
-
# puts deploy_executable_item_internal.set_arg(Casper::Entity::DeployNamedArgument.new("amount", CLi32.new(1000)))[1][1].get_value
|
147
|
-
# puts deploy_executable_item_internal.args[0][0].get_name
|
148
|
-
# puts deploy_executable_item_internal.args[0][0].get_value.get_value
|
149
|
-
# puts deploy_executable_item_internal.args[1][0].get_name
|
150
|
-
# puts deploy_executable_item_internal.args[1][0].get_value.get_value
|
151
|
-
|
152
|
-
|
153
|
-
# 0) ********************** ModuleBytes ************************************************************
|
154
|
-
|
155
|
-
|
156
|
-
|
157
|
-
|
158
|
-
# 1) *************** StoredContractByHash ***************************** Done!
|
159
|
-
arg1 = Casper::Entity::DeployNamedArgument.new("quantity", CLi32.new(1000))
|
160
|
-
args = []
|
161
|
-
args.push([arg1])
|
162
|
-
stored_contract_by_hash = Casper::Entity::StoredContractByHash.new("c4c411864f7b717c27839e56f6f1ebe5da3f35ec0043f437324325d65a22afa4", "pclphXwfYmCmdITj8hnh", args)
|
163
|
-
# puts stored_contract_by_hash.to_bytes
|
164
|
-
|
165
|
-
byte_array = stored_contract_by_hash.to_bytes
|
166
|
-
# puts byte_array.inspect
|
167
|
-
# puts Utils::ByteUtils.byte_array_to_hex(byte_array)
|
168
|
-
|
169
|
-
|
170
|
-
# 2) *************** StoredContractByName ***************************** Done!
|
171
|
-
arg1 = Casper::Entity::DeployNamedArgument.new("quantity", CLi32.new(1000))
|
172
|
-
args = []
|
173
|
-
args.push([arg1])
|
174
|
-
stored_contract_by_name = Casper::Entity::StoredContractByName.new("casper-example", "example-entry-point", args)
|
175
|
-
byte_array = stored_contract_by_name.to_bytes
|
176
|
-
# puts byte_array
|
177
|
-
# puts Utils::ByteUtils.byte_array_to_hex(byte_array)
|
178
|
-
|
179
|
-
|
180
|
-
# 3) *************** StoredVersionedContractByHash ***************************** # Done! (entry_point is not serialized in scala example but it is serialized in documentation)
|
181
|
-
arg1 = Casper::Entity::DeployNamedArgument.new("test", CLString.new("Hello, World!"))
|
182
|
-
args = []
|
183
|
-
args.push([arg1])
|
184
|
-
stored_versioned_contract_by_hash = Casper::Entity::StoredVersionedContractByHash.new("b348fdd0d0b3f66468687df93141b5924f6bb957d5893c08b60d5a78d0b9a423",nil, "PsLz5c7JsqT8BK8ll0kF", args)
|
185
|
-
byte_array = stored_versioned_contract_by_hash.to_bytes
|
186
|
-
# puts byte_array.inspect
|
187
|
-
# puts Utils::ByteUtils.byte_array_to_hex(byte_array)
|
188
|
-
|
189
|
-
|
190
|
-
# 4) *************** StoredVersionedContractByName ***************************** # Done! (entry_point is not serialized in scala example but it is serialized in documentation)
|
191
|
-
arg1 = Casper::Entity::DeployNamedArgument.new("test", CLString.new("Hello, World!"))
|
192
|
-
args = []
|
193
|
-
args.push([arg1])
|
194
|
-
stored_versioned_contract_by_hash = Casper::Entity::StoredVersionedContractByName.new("test-contract",nil, "PsLz5c7JsqT8BK8ll0kF", args)
|
195
|
-
byte_array = stored_versioned_contract_by_hash.to_bytes
|
196
|
-
# puts byte_array.inspect
|
197
|
-
# puts Utils::ByteUtils.byte_array_to_hex(byte_array)
|
198
|
-
|
199
|
-
|
200
|
-
# 5) *************** DeployExecutableTransfer *****************************
|
201
|
-
arg1 = Casper::Entity::DeployNamedArgument.new("amount", CLi32.new(1000))
|
202
|
-
args = []
|
203
|
-
args.push([arg1])
|
204
|
-
deploy_transfer = Casper::Entity::DeployExecutableTransfer.new(args)
|
205
|
-
byte_array = deploy_transfer.to_bytes
|
206
|
-
# puts byte_array.inspect
|
207
|
-
# puts Utils::ByteUtils.byte_array_to_hex(byte_array)
|
208
|
-
|
209
|
-
# puts Utils::ByteUtils.byte_array_to_hex(byte_array)
|
210
|
-
# puts deploy_transfer.get_args[0][0].get_name
|
211
|
-
# puts deploy_transfer.get_args[0][0].get_value.get_value
|
212
|
-
# puts deploy_transfer.get_args[0][0].get_value.get_cl_type
|
213
|
-
|
214
|
-
|
215
|
-
#********************** DeployExecutable ************************************************************
|
216
|
-
deploy_executable = Casper::Entity::DeployExecutable.new
|
217
|
-
|
218
|
-
# ***** @module_bytes.set_arg(arg) # => Add arg and return args
|
219
|
-
# args = deploy_executable.standard_payment(1000)
|
220
|
-
# puts args
|
221
|
-
# puts args[0][0].get_name
|
222
|
-
# puts args[0][0].get_value
|
223
|
-
|
224
|
-
# Return ModuleBytes object
|
225
|
-
# module_bytes = deploy_executable.standard_payment(1000)
|
226
|
-
# puts module_bytes.class
|
227
|
-
# puts module_bytes.get_args[0][0].get_name
|
228
|
-
# puts module_bytes.get_args[0][0].get_value.get_value
|
229
|
-
# puts module_bytes.get_args[0][0].get_value.get_cl_type
|
230
|
-
|
231
|
-
# puts module_bytes.module_bytes
|
232
|
-
account_key = "01e23d200eb0f3c8a3dacc8453644e6fcf4462585a68234ebb1c3d6cc8971148c2"
|
233
|
-
public_key = CLPublicKey.from_hex(account_key)
|
234
|
-
source_purse = "010af5a943bacd2a8e91792eb4e9a25e32d536ab103372f57f89ebcadfc59820d1"
|
235
|
-
transfer = deploy_executable.new_transfer(1, 1000, CLPublicKey.from_hex(account_key), CLPublicKey.from_hex(source_purse))
|
236
|
-
|
237
|
-
args = transfer.get_args
|
238
|
-
# puts args[0][0].get_name
|
239
|
-
# puts args[0][0].get_value
|
240
|
-
# puts args[1][0].get_name
|
241
|
-
# puts args[1][0].get_value
|
242
|
-
# puts args[2][0].get_name
|
243
|
-
# puts args[2][0].get_value
|
244
|
-
|
245
|
-
|
246
|
-
|
247
|
-
#********************** DeployExecutableSerializer ************************************************************
|
248
|
-
deploy_executable.set_stored_contract_by_hash(stored_contract_by_hash)
|
249
|
-
deploy_executable.set_stored_contract_by_name(stored_contract_by_name)
|
250
|
-
# puts deploy_executable.get_stored_contract_by_name
|
251
|
-
# puts deploy_executable.stored_contract_by_name
|
252
|
-
# puts deploy_executable.to_bytes
|
253
|
-
deploy_executable_serializer = DeployExecutableSerializer.new
|
254
|
-
executable_item = deploy_executable_serializer.to_bytes(deploy_executable)
|
255
|
-
# puts executable_item
|
256
|
-
# puts Utils::ByteUtils.byte_array_to_hex(executable_item)
|
257
|
-
|
258
|
-
h1 = {
|
259
|
-
"hash": "01da3c604f71e0e7df83ff1ab4ef15bb04de64ca02e3d2b78de6950e8b5ee187",
|
260
|
-
"header": {
|
261
|
-
"account": "01d9bf2148748a85c89da5aad8ee0b0fc2d105fd39d41a4c796536354f0ae2900c",
|
262
|
-
"timestamp": "2020-11-17T00:39:24.072Z",
|
263
|
-
"ttl": "1h",
|
264
|
-
"gas_price": 1,
|
265
|
-
"body_hash": "4811966d37fe5674a8af4001884ea0d9042d1c06668da0c963769c3a01ebd08f",
|
266
|
-
"dependencies": [
|
267
|
-
"0101010101010101010101010101010101010101010101010101010101010101"
|
268
|
-
],
|
269
|
-
"chain_name": "casper-example"
|
270
|
-
},
|
271
|
-
"payment": {
|
272
|
-
"StoredContractByName": {
|
273
|
-
"name": "casper-example",
|
274
|
-
"entry_point": "example-entry-point",
|
275
|
-
"args": [
|
276
|
-
[
|
277
|
-
"quantity",
|
278
|
-
{
|
279
|
-
"cl_type": "I32",
|
280
|
-
"bytes": "e8030000",
|
281
|
-
"parsed": 1000
|
282
|
-
}
|
283
|
-
]
|
284
|
-
]
|
285
|
-
}
|
286
|
-
# "ModuleBytes": {
|
287
|
-
# "args": [
|
288
|
-
# [
|
289
|
-
# "amount",
|
290
|
-
# {
|
291
|
-
# "bytes": "e8030000",
|
292
|
-
# "parsed": "1000",
|
293
|
-
# "cl_type": "I32"
|
294
|
-
# }
|
295
|
-
# ]
|
296
|
-
# ],
|
297
|
-
# "module_bytes": "sdsdssadsds"
|
298
|
-
# }
|
299
|
-
},
|
300
|
-
"session": {
|
301
|
-
"Transfer": {
|
302
|
-
"args": [
|
303
|
-
[
|
304
|
-
"amount",
|
305
|
-
{
|
306
|
-
"cl_type": "I32",
|
307
|
-
"bytes": "e8030000",
|
308
|
-
"parsed": 1000
|
309
|
-
}
|
310
|
-
]
|
311
|
-
]
|
312
|
-
}
|
313
|
-
# "ModuleBytes": {
|
314
|
-
# "args": [
|
315
|
-
# [
|
316
|
-
# "amount",
|
317
|
-
# {
|
318
|
-
# "bytes": "e8030000",
|
319
|
-
# "parsed": "1000",
|
320
|
-
# "cl_type": "I32"
|
321
|
-
# }
|
322
|
-
# ]
|
323
|
-
# ],
|
324
|
-
# "module_bytes": "sdsdssadsds"
|
325
|
-
# }
|
326
|
-
},
|
327
|
-
"approvals": [
|
328
|
-
{
|
329
|
-
"signer": "01d9bf2148748a85c89da5aad8ee0b0fc2d105fd39d41a4c796536354f0ae2900c",
|
330
|
-
"signature": "012dbf03817a51794a8e19e0724884075e6d1fbec326b766ecfa6658b41f81290da85e23b24e88b1c8d9761185c961daee1adab0649912a6477bcd2e69bd91bd08"
|
331
|
-
}
|
332
|
-
]
|
333
|
-
}
|
334
|
-
deploy = Casper::Entity::Deploy.new(h1[:hash], h1[:header], h1[:payment], h1[:session], h1[:approvals])
|
335
|
-
deploy_hash = Casper::Entity::DeployHash.new(deploy.get_hash)
|
336
|
-
header = Casper::Entity::DeployHeader.new(deploy.get_header)
|
337
|
-
payment = deploy.get_payment
|
338
|
-
key = payment.keys[0]
|
339
|
-
# puts key == :StoredContractByName
|
340
|
-
if key == :StoredContractByName
|
341
|
-
name = payment[:StoredContractByName][:name]
|
342
|
-
entry_point = payment[:StoredContractByName][:entry_point]
|
343
|
-
args = payment[:StoredContractByName][:args]
|
344
|
-
# deploy_named_arg
|
345
|
-
executable_payment = Casper::Entity::StoredContractByName.new(name, entry_point, args)
|
346
|
-
# puts executable_payment.get_args
|
347
|
-
end
|
348
|
-
# payment = StoredContractByName.new()
|
349
|
-
session = deploy.get_session
|
350
|
-
deploy_executable_payment = Casper::Entity::DeployExecutable.new
|
351
|
-
deploy_executable_session = Casper::Entity::DeployExecutable.new
|
352
|
-
|
353
|
-
deploy_serializer = DeploySerializer.new
|
354
|
-
# puts deploy_serializer.to_bytes(deploy)
|
355
|
-
|
356
|
-
# h = {"cl_type": "Bool", "bytes": "01", "parsed": ""}
|
357
|
-
# h = {"cl_type": "I32", "bytes": "e0ffffff", "parsed": ""} # => parsed = -32
|
358
|
-
# h = {"cl_type": "I64", "bytes": "c0ffffffffffffff", "parsed": ""} # => parsed = -64
|
359
|
-
# h = {"cl_type": "U8", "bytes": "08", "parsed": ""} # => parsed = 8
|
360
|
-
# h = {"cl_type": "U32", "bytes": "20000000", "parsed": ""} # => parsed = 32
|
361
|
-
# h = {"cl_type": "U64", "bytes": "4000000000000000", "parsed": ""} # => parsed = 64
|
362
|
-
# h = {"cl_type": "String", "bytes": "0b0000006361737065722d74657374", "parsed": ""} # => parsed = "casper-test"
|
363
|
-
h = {"cl_type": "Unit", "bytes": "", "parsed": ""} # => parsed = "casper-test"
|
364
|
-
h = {"cl_type": "URef", "bytes": "21000000000102030405060708090a0b0c0d0e0f000102030405060708090a0b0c0d0e0f07", "parsed": ""}
|
365
|
-
# => parsed = "uref-000102030405060708090a0b0c0d0e0f000102030405060708090a0b0c0d0e0f-007"
|
366
|
-
h = {"cl_type": "PublicKey", "bytes": "010af5a943bacd2a8e91792eb4e9a25e32d536ab103372f57f89ebcadfc59820d1", "parsed": ""}
|
367
|
-
# puts deploy_serializer.build_cl_value(h).to_hex
|
368
|
-
# puts deploy_serializer.build_cl_value(h)
|
369
|
-
|
370
|
-
|
371
|
-
deploy_bytes_array = deploy_serializer.to_bytes(deploy)
|
372
|
-
deploy_hex = Utils::ByteUtils.byte_array_to_hex(deploy_bytes_array)
|
373
|
-
# puts Blake2b.hex(deploy_hex)
|
374
|
-
|
375
|
-
input = "abc"
|
376
|
-
key = Blake2b::Key.none
|
377
|
-
out_len = 32
|
378
|
-
|
379
|
-
# puts Blake2b.hex(input)
|
380
|
-
# puts Blake2b.hex(input, key)
|
381
|
-
# puts Blake2b.hex(input, key, 32) # => Create a hash of 32 bytes length
|
382
|
-
# # puts Blake2b.hex(input, key, 64) # => create a hash of 64 bytes length
|
383
|
-
# bytes = Blake2b.bytes(input)
|
384
|
-
# puts bytes.inspect
|
385
|
-
# puts bytes.pack("C*").unpack("H*") # => Convert bytes to hex (hash version)
|
386
|
-
|
387
|
-
|
388
|
-
|
389
|
-
key = "01ccee19366eaf03487cb81197ae8edcb1b47f214cee00d6597380096b9f8463c1"
|
390
|
-
|
391
|
-
|
392
|
-
# puts Blake2b.hex(deploy_hex)
|
393
|
-
require 'openssl'
|
394
|
-
|
395
|
-
# k = OpenSSL::PKey::RSA.new(File.read("/home/mehmet/Documents/ed25519_secret_key.pem"))
|
396
|
-
# puts k.private?
|
397
|
-
require "ssh_data"
|
398
|
-
require "ed25519"
|
399
|
-
|
400
|
-
key_data = File.read("#{Dir.home}/.ssh/id_ed25519")
|
401
|
-
key = SSHData::PrivateKey.parse_openssh(key_data)
|
402
|
-
#=> <SSHData::PrivateKey::ED25519>
|
403
|
-
# puts key[0][0]
|
404
|
-
SSHData::PrivateKey::ED25519.generate
|
405
|
-
#=> raises SSHData::AlgorithmError
|
406
|
-
|
407
|
-
|
408
|
-
SSHData::PrivateKey::ED25519.generate
|
409
|
-
#=> <SSHData::PrivateKey::ED25519>
|
410
|
-
|
411
|
-
# OpenSSL::PKey::RSA.new File.read("#{Dir.home}/.ssh/id_rsa")
|
412
|
-
# cert = OpenSSL::X509::Certificate.new("#{Dir.home}/Document/ed25519_secret_key.pem")
|
413
|
-
|
414
|
-
# file = File.open("#{Dir.home}/Document/ed25519_secret_key.pem")
|
415
|
-
# file = File.open("#{Dir.home}/Desktop/casper-ruby-sdk/lib/serialization/test.txt")
|
416
|
-
# file_data = file.read
|
417
|
-
# puts file_data
|
418
|
-
# puts "/home/mehmet/Document/hetzner.txt"
|
419
|
-
# puts "#{Dir.home}"
|
420
|
-
require 'json'
|
421
|
-
path = File.join(
|
422
|
-
File.dirname(File.dirname(File.absolute_path(__FILE__))),
|
423
|
-
'serialization/ed25519.pem'
|
424
|
-
)
|
425
|
-
puts path
|
426
|
-
|
427
|
-
file = File.open(path)
|
428
|
-
puts file
|
429
|
-
file_data = file.readlines.map(&:chomp)
|
430
|
-
puts file_data.inspect
|
431
|
-
file.close
|