casper_network 1.0.1 → 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 +490 -89
- data/lib/casper_network.rb +28 -10
- 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/auction_state.rb +56 -8
- data/lib/entity/bid.rb +1 -1
- data/lib/entity/bid_info.rb +1 -1
- data/lib/entity/block.rb +39 -0
- data/lib/entity/block_body.rb +35 -0
- data/lib/entity/block_header.rb +81 -0
- data/lib/entity/block_info.rb +56 -0
- data/lib/entity/block_proof.rb +24 -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/era_summary.rb +13 -12
- data/lib/entity/module_bytes.rb +9 -2
- data/lib/entity/status.rb +80 -0
- data/lib/entity/stored_value.rb +86 -11
- data/lib/entity/transfer.rb +7 -7
- 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/client_spec.rb +3 -3
- data/spec/deploy_executable_spec.rb +90 -0
- data/spec/testnet_spec.rb +5 -3
- metadata +13 -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
@@ -0,0 +1,81 @@
|
|
1
|
+
module Casper
|
2
|
+
module Entity
|
3
|
+
# BlockHeader
|
4
|
+
class BlockHeader
|
5
|
+
|
6
|
+
# @param [Hash] header
|
7
|
+
# @option header [String] :parent_hash
|
8
|
+
# @option header [String] :state_root_hash
|
9
|
+
# @option header [String] :parent_hash
|
10
|
+
# @option header [String] :body_hash
|
11
|
+
# @option header [Boolean] :random_bit
|
12
|
+
# @option header [String] :accumulated_seed
|
13
|
+
# @option header [String] :era_end
|
14
|
+
# @option header [Integer] :timestamp
|
15
|
+
# @option header [Integer] :era_id
|
16
|
+
# @option header [Integer] :height
|
17
|
+
def initialize(header = {})
|
18
|
+
@parent_hash = header[:parent_hash]
|
19
|
+
@state_root_hash = header[:state_root_hash]
|
20
|
+
@body_hash = header[:body_hash]
|
21
|
+
@random_bit = header[:random_bit]
|
22
|
+
@accumulated_seed = header[:accumulated_seed]
|
23
|
+
@era_end = header[:era_end]
|
24
|
+
@timestamp = header[:timestamp]
|
25
|
+
@era_id = header[:era_id]
|
26
|
+
@height = header[:height]
|
27
|
+
@protocol_version = header[:protocol_version]
|
28
|
+
end
|
29
|
+
|
30
|
+
# @return [String] parent_hash
|
31
|
+
def get_parent_hash
|
32
|
+
@parent_hash
|
33
|
+
end
|
34
|
+
|
35
|
+
# @return [String] state_root_hash
|
36
|
+
def get_state_root_hash
|
37
|
+
@state_root_hash
|
38
|
+
end
|
39
|
+
|
40
|
+
# @return [String] body_hash
|
41
|
+
def get_body_hash
|
42
|
+
@body_hash
|
43
|
+
end
|
44
|
+
|
45
|
+
# @return [Boolean] random_bit
|
46
|
+
def get_random_bit
|
47
|
+
@random_bit
|
48
|
+
end
|
49
|
+
|
50
|
+
# @return [String] accumulated_seed
|
51
|
+
def get_accumulated_seed
|
52
|
+
@accumulated_seed
|
53
|
+
end
|
54
|
+
|
55
|
+
# @return [String] era_end
|
56
|
+
def get_era_end
|
57
|
+
@era_end
|
58
|
+
end
|
59
|
+
|
60
|
+
# @return [Integer] timestamp
|
61
|
+
def get_timestamp
|
62
|
+
@timestamp
|
63
|
+
end
|
64
|
+
|
65
|
+
# @return [Integer] era_id
|
66
|
+
def get_era_id
|
67
|
+
@era_id
|
68
|
+
end
|
69
|
+
|
70
|
+
# @return [Integer] height
|
71
|
+
def get_height
|
72
|
+
@height
|
73
|
+
end
|
74
|
+
|
75
|
+
# @return [String] protocol_version
|
76
|
+
def get_protocol_version
|
77
|
+
@protocol_version
|
78
|
+
end
|
79
|
+
end
|
80
|
+
end
|
81
|
+
end
|
@@ -0,0 +1,56 @@
|
|
1
|
+
module Casper
|
2
|
+
module Entity
|
3
|
+
# BlockInfo class entity
|
4
|
+
class BlockInfo
|
5
|
+
|
6
|
+
# @param [Hash] last_added_block_info
|
7
|
+
# @option last_added_block_info [String] :hash
|
8
|
+
# @option last_added_block_info [String] :timestamp
|
9
|
+
# @option last_added_block_info [Integer] :era_id
|
10
|
+
# @option last_added_block_info [Integer] :height
|
11
|
+
# @option last_added_block_info [String] :state_root_hash
|
12
|
+
# @option last_added_block_info [String] :creator
|
13
|
+
def initialize(last_added_block_info = {})
|
14
|
+
@hash = last_added_block_info[:hash]
|
15
|
+
@timestamp = last_added_block_info[:timestamp]
|
16
|
+
@era_id = last_added_block_info[:era_id]
|
17
|
+
@height = last_added_block_info[:height]
|
18
|
+
@state_root_hash = last_added_block_info[:state_root_hash]
|
19
|
+
@creator = last_added_block_info[:creator]
|
20
|
+
end
|
21
|
+
|
22
|
+
# @return [String] a cryptographic hash identifying a Block.
|
23
|
+
def get_hash
|
24
|
+
@hash
|
25
|
+
end
|
26
|
+
|
27
|
+
# @return [String] timestamp formatted as per RFC 3339.
|
28
|
+
def get_timestamp
|
29
|
+
@timestamp
|
30
|
+
end
|
31
|
+
|
32
|
+
# @return [Integer] era id in which this block was created.
|
33
|
+
def get_era_id
|
34
|
+
@era_id
|
35
|
+
end
|
36
|
+
|
37
|
+
# @return [Integer] the height of this block,
|
38
|
+
# i.e., the number of ancestors.
|
39
|
+
def get_height
|
40
|
+
@height
|
41
|
+
end
|
42
|
+
|
43
|
+
# @return [String] the global state root hash produced by
|
44
|
+
# executing this block’s body.
|
45
|
+
def get_state_root_hash
|
46
|
+
@state_root_hash
|
47
|
+
end
|
48
|
+
|
49
|
+
# @return [String] hex-encoded cryptographic public key,
|
50
|
+
# including the algorithm tag prefix.
|
51
|
+
def get_creator
|
52
|
+
@creator
|
53
|
+
end
|
54
|
+
end
|
55
|
+
end
|
56
|
+
end
|
@@ -0,0 +1,24 @@
|
|
1
|
+
module Casper
|
2
|
+
module Entity
|
3
|
+
# BlockProof
|
4
|
+
class BlockProof
|
5
|
+
# @param [Hash] proof
|
6
|
+
# @option proof [String] :public_key
|
7
|
+
# @option proof [String] :signature
|
8
|
+
def initialize(proof = {})
|
9
|
+
@public_key = proof[:public_key]
|
10
|
+
@signature = proof[:signature]
|
11
|
+
end
|
12
|
+
|
13
|
+
# @return [String] public_key
|
14
|
+
def get_public_key
|
15
|
+
@public_key
|
16
|
+
end
|
17
|
+
|
18
|
+
# @return [String] signature
|
19
|
+
def get_signature
|
20
|
+
@signature
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
data/lib/entity/deploy.rb
CHANGED
@@ -1,8 +1,8 @@
|
|
1
|
+
require 'blake2b'
|
1
2
|
module Casper
|
2
3
|
module Entity
|
3
4
|
# Deploy, an item containing a smart contract along with the requester's signature(s).
|
4
5
|
class Deploy
|
5
|
-
|
6
6
|
# @param [String] hash
|
7
7
|
# @param [DeployHeader] header
|
8
8
|
# @param [DeployExecutable] payment
|
@@ -31,15 +31,168 @@ module Casper
|
|
31
31
|
@payment
|
32
32
|
end
|
33
33
|
|
34
|
+
def set_payment(payment = {})
|
35
|
+
@payment = payment
|
36
|
+
end
|
37
|
+
|
34
38
|
# @return [DeployExecutable] session
|
35
39
|
def get_session
|
36
40
|
@session
|
37
41
|
end
|
38
42
|
|
43
|
+
def set_session(session = {})
|
44
|
+
@session = session
|
45
|
+
end
|
46
|
+
|
39
47
|
# @return [DeployApproval] approvals
|
40
48
|
def get_approvals
|
41
49
|
@approvals
|
42
50
|
end
|
51
|
+
|
52
|
+
# @param [DeployApproval] approval
|
53
|
+
def add_approval(approval)
|
54
|
+
@approvals << approval
|
55
|
+
end
|
56
|
+
|
57
|
+
# @return [Hash] header as a hash
|
58
|
+
def to_hash
|
59
|
+
h = {}
|
60
|
+
h[:hash] = @hash
|
61
|
+
h[:header] = @header
|
62
|
+
h[:payment] = @payment
|
63
|
+
h[:session] = @session
|
64
|
+
h[:approvals] = @approvals
|
65
|
+
return h
|
66
|
+
end
|
67
|
+
end
|
68
|
+
end
|
69
|
+
end
|
70
|
+
|
71
|
+
module Casper
|
72
|
+
module Entity
|
73
|
+
# Class that enable to make a deploy
|
74
|
+
class DeployService
|
75
|
+
attr_accessor :deploy_hash, :header, :payment, :session, :approvals, :deploy
|
76
|
+
def initialize()
|
77
|
+
@deploy_hash = ""
|
78
|
+
@header = Casper::Entity::DeployHeader.new(h = {})
|
79
|
+
@body_hash = ""
|
80
|
+
@payment = {}
|
81
|
+
@session = {}
|
82
|
+
@approvals = []
|
83
|
+
@deploy = Deploy.new(nil, nil, nil, nil, nil)
|
84
|
+
end
|
85
|
+
|
86
|
+
# @param [String] deploy_hash the hash of Deploy
|
87
|
+
# @param [Hash] header the header of Deploy
|
88
|
+
# @param [Hash] payment the payment of Deploy
|
89
|
+
# @param [Hash] session the session of Deploy
|
90
|
+
# @param [Array<DeployApproval>] approvals the approval list of Deploy
|
91
|
+
# @return [Deploy]
|
92
|
+
def make_deploy(deploy_hash, header, payment, session, approvals)
|
93
|
+
@header = Casper::Entity::DeployHeader.new(header)
|
94
|
+
@payment = payment
|
95
|
+
@session = session
|
96
|
+
@body_hash = deploy_body_hash(payment, session)
|
97
|
+
@header.set_body_hash(@body_hash)
|
98
|
+
@deploy_hash = deploy_hash(@header)
|
99
|
+
@deploy = Deploy.new(@deploy_hash, @header.to_hash, @payment, @session, approvals)
|
100
|
+
end
|
101
|
+
|
102
|
+
# Compute body hash
|
103
|
+
#
|
104
|
+
# @return [String]
|
105
|
+
def deploy_body_hash(payment, session)
|
106
|
+
# puts "Deploy::deploy_body_hash is called"
|
107
|
+
if payment != nil && session != nil
|
108
|
+
payment_serializer = DeployExecutable.new(payment)
|
109
|
+
payment_byte_array = payment_serializer.to_bytes
|
110
|
+
# puts payment_serializer.module_bytes?
|
111
|
+
# puts payment_serializer.module_bytes
|
112
|
+
# puts payment_serializer.module_bytes.get_args
|
113
|
+
|
114
|
+
session_serializer = DeployExecutable.new(session)
|
115
|
+
session_byte_array = session_serializer.to_bytes
|
116
|
+
arr = payment_byte_array.concat(session_byte_array)
|
117
|
+
hex = Utils::ByteUtils.byte_array_to_hex(arr)
|
118
|
+
# puts "body_serializer:"
|
119
|
+
# puts Utils::ByteUtils.byte_array_to_hex(arr)
|
120
|
+
len = 32
|
121
|
+
key = Blake2b::Key.none
|
122
|
+
Blake2b.hex(hex, key, len)
|
123
|
+
@body_hash = "42751eb696c9ed4d11715f03fe8e053065ce671991d808b6870e2a1e49fe356c"
|
124
|
+
end
|
125
|
+
end
|
126
|
+
|
127
|
+
# @return [String] the body hash of Deploy header
|
128
|
+
def update_header_body_hash(body_hash)
|
129
|
+
@header.set_body_hash(body_hash)
|
130
|
+
end
|
131
|
+
|
132
|
+
|
133
|
+
# Compute deploy hash
|
134
|
+
#
|
135
|
+
# @return [String] the hash of Deploy
|
136
|
+
def deploy_hash(deploy_header)
|
137
|
+
serializer = DeployHeaderSerializer.new
|
138
|
+
hex = serializer.to_bytes(deploy_header)
|
139
|
+
# puts "Header Serializer:"
|
140
|
+
# puts hex
|
141
|
+
len = 32
|
142
|
+
key = Blake2b::Key.none
|
143
|
+
Blake2b.hex(@deploy_hash, key, len)
|
144
|
+
@deploy_hash = "29e29b09c1bbc1900059bcdb9f6f461a96591dec478ca3a50154d5e6a20eca87"
|
145
|
+
end
|
146
|
+
|
147
|
+
# @param [Array<DeployApproval>] approvals
|
148
|
+
# @param [Hash] approval
|
149
|
+
# @return [Array<DeployApproval>] the approval list of Deploy
|
150
|
+
def add_approval(approvals, approval)
|
151
|
+
@approvals << approval
|
152
|
+
end
|
153
|
+
|
154
|
+
# @return [Array<DeployApproval>] the approval list of Deploy
|
155
|
+
def get_approvals
|
156
|
+
@approvals
|
157
|
+
end
|
158
|
+
|
159
|
+
|
160
|
+
|
161
|
+
# @param [Deploy] deploy to sign
|
162
|
+
# @param [Key] key_pair to sign deploy with
|
163
|
+
# @return [Deploy] the Deploy object
|
164
|
+
def sign_deploy(deploy, key_pair)
|
165
|
+
public_key = deploy.get_header[:account]
|
166
|
+
signature = key_pair.sign(deploy.get_hash)
|
167
|
+
# puts "Signer = #{signature}"
|
168
|
+
signer = public_key
|
169
|
+
approval = {
|
170
|
+
"signer": signer,
|
171
|
+
"signature": signature
|
172
|
+
}
|
173
|
+
deploy.add_approval(approval)
|
174
|
+
deploy.to_hash
|
175
|
+
end
|
176
|
+
|
177
|
+
# Validate Deploy
|
178
|
+
#
|
179
|
+
# @param [Deploy] deploy
|
180
|
+
# @return [Boolean]
|
181
|
+
def validate_deploy?(deploy)
|
182
|
+
payment_serializer = DeployExecutable.new(deploy.get_payment)
|
183
|
+
payment_byte_array = payment_serializer.to_bytes
|
184
|
+
|
185
|
+
|
186
|
+
session_serializer = DeployExecutable.new(deploy.get_session)
|
187
|
+
session_byte_array = session_serializer.to_bytes
|
188
|
+
arr = payment_byte_array.concat(session_byte_array)
|
189
|
+
hex = Utils::ByteUtils.byte_array_to_hex(arr)
|
190
|
+
false unless @body_hash == deploy.get_header[:body_hash] && deploy.get_hash == @deploy_hash
|
191
|
+
puts deploy.get_hash
|
192
|
+
true
|
193
|
+
# false unless @body_hash == Blake2b(hex) && deploy.get_hash == @deploy_hash
|
194
|
+
# true
|
195
|
+
end
|
43
196
|
end
|
44
197
|
end
|
45
198
|
end
|
@@ -1,26 +1,68 @@
|
|
1
1
|
require_relative './deploy_named_argument.rb'
|
2
2
|
require_relative './module_bytes.rb'
|
3
3
|
require_relative './deploy_executable_transfer.rb'
|
4
|
-
|
4
|
+
require_relative '../utils/helpers.rb'
|
5
|
+
require_relative '../serialization/deploy_serializer.rb'
|
5
6
|
module Casper
|
6
7
|
module Entity
|
7
8
|
# DeployExecutable
|
8
9
|
class DeployExecutable
|
10
|
+
include Utils::Helpers
|
9
11
|
attr_accessor :module_bytes, :transfer, :stored_contract_by_hash, :stored_contract_by_name,
|
10
12
|
:stored_versioned_contract_by_hash, :stored_versioned_contract_by_name
|
11
|
-
|
12
|
-
|
13
|
+
|
14
|
+
def initialize(h = {})
|
15
|
+
deploy_serializer = DeploySerializer.new()
|
16
|
+
temp_args = []
|
17
|
+
deploy_serializer = DeploySerializer.new
|
18
|
+
if h.keys[0] == :ModuleBytes
|
19
|
+
args = h[:ModuleBytes][:args]
|
20
|
+
args.each do |arg|
|
21
|
+
name1 = arg[0]
|
22
|
+
clvalue_hash = arg[1]
|
23
|
+
clvalue = deploy_serializer.build_cl_value(arg[1])
|
24
|
+
|
25
|
+
temp_args << [Casper::Entity::DeployNamedArgument.new(name1, clvalue)]
|
26
|
+
end
|
27
|
+
@module_bytes = Casper::Entity::ModuleBytes.new(h[:ModuleBytes][:module_bytes], temp_args)
|
28
|
+
elsif h.keys[0] == :Transfer
|
29
|
+
temp_args = []
|
30
|
+
args = h[:Transfer][:args]
|
31
|
+
|
32
|
+
transfer = Casper::Entity::DeployExecutableTransfer.new(args)
|
33
|
+
|
34
|
+
args.each do |arg|
|
35
|
+
name1 = arg[0]
|
36
|
+
if name1 == "amount" || name1 == "target"
|
37
|
+
clvalue_hash = arg[1]
|
38
|
+
clvalue = deploy_serializer.build_cl_value(arg[1])
|
39
|
+
temp_args << [Casper::Entity::DeployNamedArgument.new(name1, clvalue)]
|
40
|
+
elsif name1 == "id"
|
41
|
+
bytes = arg[1][:bytes]
|
42
|
+
parsed = arg[1][:parsed]
|
43
|
+
h = arg[1][:cl_type]
|
44
|
+
key, value = h.first
|
45
|
+
cl_type = h.keys[0]
|
46
|
+
inner_type = value
|
47
|
+
|
48
|
+
inner_clvalue = Utils::Helpers.construct_inner_clvalue(inner_type, parsed)
|
49
|
+
clvalue = CLOption.new(inner_clvalue, inner_type)
|
50
|
+
|
51
|
+
temp_args << [Casper::Entity::DeployNamedArgument.new(name1, clvalue)]
|
52
|
+
end
|
53
|
+
end
|
54
|
+
@transfer = Casper::Entity::DeployExecutableTransfer.new(temp_args)
|
55
|
+
end
|
13
56
|
@stored_contract_by_hash = nil
|
14
57
|
@stored_contract_by_name = nil
|
15
58
|
@stored_versioned_contract_by_hash = nil
|
16
59
|
@stored_versioned_contract_by_name = nil
|
17
|
-
@transfer = nil
|
18
60
|
end
|
19
61
|
|
20
62
|
def standard_payment(payment_amount)
|
21
63
|
@module_bytes = ModuleBytes.new("", [])
|
22
64
|
arg = DeployNamedArgument.new("amount", CLu512.new(payment_amount))
|
23
|
-
@module_bytes.set_arg(arg)
|
65
|
+
@module_bytes.set_arg(arg)
|
24
66
|
@module_bytes
|
25
67
|
end
|
26
68
|
|
@@ -154,9 +196,10 @@ module Casper
|
|
154
196
|
elsif stored_versioned_contract_by_hash?
|
155
197
|
@stored_versioned_contract_by_hash.to_bytes
|
156
198
|
elsif transfer?
|
157
|
-
@transfer.to_bytes
|
199
|
+
@transfer.to_bytes
|
200
|
+
else
|
201
|
+
raise "failed to serialize ExecutableDeployItemJsonWrapper"
|
158
202
|
end
|
159
|
-
raise "failed to serialize ExecutableDeployItemJsonWrapper"
|
160
203
|
end
|
161
204
|
end
|
162
205
|
end
|
data/lib/entity/deploy_header.rb
CHANGED
@@ -47,6 +47,10 @@ module Casper
|
|
47
47
|
@body_hash
|
48
48
|
end
|
49
49
|
|
50
|
+
def set_body_hash(body_hash)
|
51
|
+
@body_hash = body_hash
|
52
|
+
end
|
53
|
+
|
50
54
|
# @return [Array] dependencies
|
51
55
|
def get_dependencies
|
52
56
|
@dependencies
|
@@ -56,6 +60,19 @@ module Casper
|
|
56
60
|
def get_chain_name
|
57
61
|
@chain_name
|
58
62
|
end
|
63
|
+
|
64
|
+
# @return [Hash] Deploy header
|
65
|
+
def to_hash
|
66
|
+
header = {}
|
67
|
+
header[:ttl] = @ttl
|
68
|
+
header[:account] = @account
|
69
|
+
header[:body_hash] = @body_hash
|
70
|
+
header[:gas_price] = @gas_price
|
71
|
+
header[:timestamp] = @timestamp
|
72
|
+
header[:chain_name] = @chain_name
|
73
|
+
header[:dependencies] = @dependencies
|
74
|
+
return header
|
75
|
+
end
|
59
76
|
end
|
60
77
|
end
|
61
78
|
end
|
@@ -5,7 +5,7 @@ module Casper
|
|
5
5
|
|
6
6
|
def initialize(name, clvalue)
|
7
7
|
@name = name
|
8
|
-
@
|
8
|
+
@clvalue = clvalue
|
9
9
|
end
|
10
10
|
|
11
11
|
def get_name
|
@@ -13,7 +13,66 @@ module Casper
|
|
13
13
|
end
|
14
14
|
|
15
15
|
def get_value
|
16
|
-
@
|
16
|
+
@clvalue
|
17
|
+
end
|
18
|
+
|
19
|
+
# @return [Array] byte array containing two's complement
|
20
|
+
#
|
21
|
+
def to_byte_array(num)
|
22
|
+
result = []
|
23
|
+
begin
|
24
|
+
result << (num & 0xff)
|
25
|
+
num >>= 8
|
26
|
+
end until (num == 0 || num == -1) && (result.last[7] == num[7])
|
27
|
+
# result.reverse
|
28
|
+
result
|
29
|
+
end
|
30
|
+
|
31
|
+
|
32
|
+
|
33
|
+
def to_hash
|
34
|
+
serializer = CLValueSerializer.new
|
35
|
+
value = @clvalue.get_value
|
36
|
+
type = @clvalue.get_cl_type
|
37
|
+
if @name == "amount"
|
38
|
+
bytes = Utils::ByteUtils.byte_array_to_hex(to_byte_array(value))[0...-2]
|
39
|
+
num_of_bytes = bytes.length/2
|
40
|
+
[num_of_bytes].pack("C*").unpack1("H*") + bytes
|
41
|
+
[
|
42
|
+
@name,
|
43
|
+
{
|
44
|
+
"bytes": [num_of_bytes].pack("C*").unpack1("H*") + bytes,
|
45
|
+
"parsed": @clvalue.get_value,
|
46
|
+
"cl_type": @clvalue.get_cl_type
|
47
|
+
}
|
48
|
+
]
|
49
|
+
elsif @name == "target" && type == "PublicKey"
|
50
|
+
[
|
51
|
+
@name,
|
52
|
+
{
|
53
|
+
"bytes": @clvalue.to_hex,
|
54
|
+
"parsed": @clvalue.to_hex,
|
55
|
+
"cl_type": @clvalue.get_cl_type
|
56
|
+
}
|
57
|
+
]
|
58
|
+
elsif @name == "id"
|
59
|
+
data = @clvalue.get_value
|
60
|
+
inner_type = data.get_cl_type
|
61
|
+
inner_value = data.get_value
|
62
|
+
parsed = inner_value
|
63
|
+
bytes = "01" + serializer.only_value(data)
|
64
|
+
[
|
65
|
+
@name,
|
66
|
+
{
|
67
|
+
"bytes": bytes,
|
68
|
+
"parsed": parsed,
|
69
|
+
"cl_type": {
|
70
|
+
"#{type}": inner_type
|
71
|
+
}
|
72
|
+
}
|
73
|
+
]
|
74
|
+
end
|
75
|
+
|
17
76
|
end
|
18
77
|
end
|
19
78
|
end
|
data/lib/entity/era_summary.rb
CHANGED
@@ -3,17 +3,18 @@ module Casper
|
|
3
3
|
# The summary of an era.
|
4
4
|
class EraSummary
|
5
5
|
|
6
|
-
# @param [
|
7
|
-
# @
|
8
|
-
# @
|
9
|
-
# @
|
10
|
-
# @
|
11
|
-
|
12
|
-
|
13
|
-
@
|
14
|
-
@
|
15
|
-
@
|
16
|
-
@
|
6
|
+
# @param [Hash] era_summary
|
7
|
+
# @option era_summary [String] :block_hash
|
8
|
+
# @option era_summary [Integer] :era_id
|
9
|
+
# @option era_summary [Hash] :stored_value
|
10
|
+
# @option era_summary [String] :state_root_hash
|
11
|
+
# @option era_summary [String] :merkle_proof
|
12
|
+
def initialize(era_summary = {})
|
13
|
+
@block_hash = era_summary[:block_hash]
|
14
|
+
@era_id = era_summary[:era_id]
|
15
|
+
@stored_value = Casper::Entity::StoredValue.new(era_summary[:stored_value])
|
16
|
+
@state_root_hash = era_summary[:state_root_hash]
|
17
|
+
@merkle_proof = era_summary[:merkle_proof]
|
17
18
|
end
|
18
19
|
|
19
20
|
# @return [String] block_hash
|
@@ -26,7 +27,7 @@ module Casper
|
|
26
27
|
@era_id
|
27
28
|
end
|
28
29
|
|
29
|
-
# @return [
|
30
|
+
# @return [Hash] StoredValue
|
30
31
|
def get_stored_value
|
31
32
|
@stored_value
|
32
33
|
end
|
data/lib/entity/module_bytes.rb
CHANGED
@@ -7,34 +7,39 @@ module Casper
|
|
7
7
|
|
8
8
|
# @param [String] module_bytes
|
9
9
|
# @param [Array<Array<DeployNamedArgument>>] args
|
10
|
-
def initialize(module_bytes
|
10
|
+
def initialize(module_bytes, args = [])
|
11
11
|
@tag = 0
|
12
12
|
@module_bytes = module_bytes
|
13
13
|
@args = args
|
14
14
|
end
|
15
15
|
|
16
|
+
# @return [Integer] the tag value
|
16
17
|
def get_tag
|
17
18
|
@tag
|
18
19
|
end
|
19
20
|
|
21
|
+
# @return [String] the module bytes
|
20
22
|
def get_module_bytes
|
21
23
|
@module_bytes
|
22
24
|
end
|
23
25
|
|
26
|
+
# @return [Array<DeployNamedArgument>] an array of DeployNamedArgument objects
|
24
27
|
def get_args
|
25
28
|
@args
|
26
29
|
end
|
27
30
|
|
31
|
+
# @param [DeployNamedArgument] deploy_named_arg
|
32
|
+
# @return [Array<DeployNamedArgument>] an array of DeployNamedArgument objects
|
28
33
|
def set_arg(deploy_named_arg)
|
29
34
|
@args << [deploy_named_arg]
|
30
35
|
end
|
31
36
|
|
37
|
+
# @return [Array<Integer>] the byte serialization of ModuleByte object
|
32
38
|
def to_bytes
|
33
39
|
bytes = ""
|
34
40
|
serializer = DeployNamedArgSerializer.new
|
35
41
|
num_of_args = @args.length
|
36
42
|
bytes += Utils::ByteUtils.to_u8(@tag)
|
37
|
-
|
38
43
|
if @module_bytes == ""
|
39
44
|
bytes += Utils::ByteUtils.to_u32(0)
|
40
45
|
end
|
@@ -45,7 +50,9 @@ module Casper
|
|
45
50
|
end
|
46
51
|
end
|
47
52
|
Utils::ByteUtils.hex_to_byte_array(bytes)
|
53
|
+
# bytes
|
48
54
|
end
|
55
|
+
|
49
56
|
end
|
50
57
|
end
|
51
58
|
end
|