ton_sdk_client 1.12.0 → 1.17.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 +4 -4
- data/CHANGELOG.md +22 -1
- data/README.md +1 -1
- data/lib/ton_sdk_client/abi.rb +114 -294
- data/lib/ton_sdk_client/boc.rb +32 -212
- data/lib/ton_sdk_client/client.rb +1 -2
- data/lib/ton_sdk_client/client_context.rb +2 -0
- data/lib/ton_sdk_client/config.rb +49 -90
- data/lib/ton_sdk_client/crypto.rb +156 -581
- data/lib/ton_sdk_client/debot.rb +118 -55
- data/lib/ton_sdk_client/interop.rb +2 -2
- data/lib/ton_sdk_client/net.rb +154 -169
- data/lib/ton_sdk_client/processing.rb +7 -36
- data/lib/ton_sdk_client/tvm.rb +58 -94
- data/lib/ton_sdk_client/utils.rb +12 -32
- data/lib/ton_sdk_client/version.rb +2 -2
- metadata +2 -2
data/lib/ton_sdk_client/boc.rb
CHANGED
@@ -5,140 +5,31 @@ module TonSdk
|
|
5
5
|
# types
|
6
6
|
#
|
7
7
|
|
8
|
-
|
9
|
-
|
8
|
+
ParamsOfParse = Struct.new(:boc)
|
9
|
+
ResultOfParse = Struct.new(:parsed)
|
10
|
+
ParamsOfParseShardstate = Struct.new(:boc, :id_, :workchain_id, keyword_init: true)
|
11
|
+
ParamsOfGetBlockchainConfig = Struct.new(:block_boc)
|
12
|
+
ResultOfGetBlockchainConfig = Struct.new(:config_boc)
|
10
13
|
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
end
|
17
|
-
|
18
|
-
class ResultOfParse
|
19
|
-
attr_reader :parsed
|
20
|
-
|
21
|
-
def initialize(a)
|
22
|
-
@parsed = a
|
23
|
-
end
|
24
|
-
end
|
25
|
-
|
26
|
-
class ParamsOfParseShardstate
|
27
|
-
attr_reader :boc, :id, :workchain_id
|
28
|
-
|
29
|
-
def initialize(boc:, id_:, workchain_id:)
|
30
|
-
@boc = boc
|
31
|
-
@id_ = id_
|
32
|
-
@workchain_id = workchain_id
|
33
|
-
end
|
34
|
-
|
35
|
-
def to_h
|
36
|
-
{
|
37
|
-
boc: @boc,
|
38
|
-
id: @id_,
|
39
|
-
workchain_id: @workchain_id
|
40
|
-
}
|
41
|
-
end
|
42
|
-
end
|
43
|
-
|
44
|
-
class ParamsOfGetBlockchainConfig
|
45
|
-
attr_reader :block_boc
|
46
|
-
|
47
|
-
def initialize(a)
|
48
|
-
@block_boc = a
|
49
|
-
end
|
50
|
-
|
51
|
-
def to_h
|
52
|
-
{
|
53
|
-
block_boc: @block_boc
|
54
|
-
}
|
55
|
-
end
|
56
|
-
end
|
57
|
-
|
58
|
-
class ResultOfGetBlockchainConfig
|
59
|
-
attr_reader :config_boc
|
60
|
-
|
61
|
-
def initialize(a)
|
62
|
-
@config_boc = a
|
63
|
-
end
|
64
|
-
end
|
65
|
-
|
66
|
-
class ParamsOfGetBocHash
|
67
|
-
attr_reader :boc
|
68
|
-
|
69
|
-
def initialize(a)
|
70
|
-
@boc = a
|
71
|
-
end
|
72
|
-
|
73
|
-
def to_h
|
74
|
-
{
|
75
|
-
boc: @boc
|
76
|
-
}
|
77
|
-
end
|
78
|
-
end
|
79
|
-
|
80
|
-
class ResultOfGetBocHash
|
81
|
-
attr_reader :hash
|
82
|
-
|
83
|
-
def initialize(a)
|
84
|
-
@hash = a
|
85
|
-
end
|
86
|
-
end
|
87
|
-
|
88
|
-
class ParamsOfGetCodeFromTvc
|
89
|
-
attr_reader :tvc
|
90
|
-
|
91
|
-
def initialize(a)
|
92
|
-
@tvc = a
|
93
|
-
end
|
94
|
-
|
95
|
-
def to_h
|
96
|
-
{
|
97
|
-
tvc: @tvc
|
98
|
-
}
|
99
|
-
end
|
100
|
-
end
|
101
|
-
|
102
|
-
class ResultOfGetCodeFromTvc
|
103
|
-
attr_reader :code
|
14
|
+
ParamsOfGetBocHash = Struct.new(:boc)
|
15
|
+
ResultOfGetBocHash = Struct.new(:hash)
|
16
|
+
ParamsOfGetCodeFromTvc = Struct.new(:hash)
|
17
|
+
ResultOfGetCodeFromTvc = Struct.new(:code)
|
18
|
+
ParamsOfBocCacheGet = Struct.new(:boc_ref)
|
104
19
|
|
105
|
-
|
106
|
-
@code = a
|
107
|
-
end
|
108
|
-
end
|
109
|
-
|
110
|
-
class ParamsOfBocCacheGet
|
111
|
-
attr_reader :boc_ref
|
112
|
-
|
113
|
-
def initialize(a)
|
114
|
-
@boc_ref = a
|
115
|
-
end
|
116
|
-
|
117
|
-
def to_h = { boc_ref: @boc_ref }
|
118
|
-
end
|
119
|
-
|
120
|
-
class ResultOfBocCacheGet
|
121
|
-
attr_reader :boc
|
122
|
-
|
123
|
-
def initialize(boc: nil)
|
124
|
-
@boc = boc
|
125
|
-
end
|
126
|
-
end
|
20
|
+
ResultOfBocCacheGet = Struct.new(:boc)
|
127
21
|
|
128
22
|
class BocCacheType
|
129
|
-
|
130
|
-
:pinned,
|
131
|
-
:unpinned
|
132
|
-
]
|
23
|
+
private_class_method :new
|
133
24
|
|
134
25
|
attr_reader :type_, :pin
|
135
26
|
|
136
|
-
def new_with_type_pinned(pin)
|
27
|
+
def self.new_with_type_pinned(pin)
|
137
28
|
@type_ = :pinned
|
138
29
|
@pin = pin
|
139
30
|
end
|
140
31
|
|
141
|
-
def new_with_type_unpinned
|
32
|
+
def self.new_with_type_unpinned
|
142
33
|
@type_ = :unpinned
|
143
34
|
end
|
144
35
|
|
@@ -159,14 +50,7 @@ module TonSdk
|
|
159
50
|
end
|
160
51
|
end
|
161
52
|
|
162
|
-
|
163
|
-
attr_reader :boc, :cache_type
|
164
|
-
|
165
|
-
def initialize(boc:, cache_type:)
|
166
|
-
@boc = boc
|
167
|
-
@cache_type = cache_type
|
168
|
-
end
|
169
|
-
|
53
|
+
ParamsOfBocCacheSet = Struct.new(:boc, :cache_type) do
|
170
54
|
def to_h
|
171
55
|
{
|
172
56
|
boc: @boc,
|
@@ -175,75 +59,11 @@ module TonSdk
|
|
175
59
|
end
|
176
60
|
end
|
177
61
|
|
178
|
-
|
179
|
-
|
180
|
-
|
181
|
-
|
182
|
-
@boc_ref = a
|
183
|
-
end
|
184
|
-
end
|
185
|
-
|
186
|
-
class ParamsOfBocCacheUnpin
|
187
|
-
attr_reader :boc, :boc_ref
|
188
|
-
|
189
|
-
def initialize(boc:, boc_ref: nil)
|
190
|
-
@boc = boc
|
191
|
-
@boc_ref = boc_ref
|
192
|
-
end
|
193
|
-
|
194
|
-
def to_h
|
195
|
-
{
|
196
|
-
boc: @boc,
|
197
|
-
boc_ref: @boc_ref
|
198
|
-
}
|
199
|
-
end
|
200
|
-
end
|
62
|
+
ResultOfBocCacheSet = Struct.new(:boc_ref)
|
63
|
+
ParamsOfBocCacheUnpin = Struct.new(:boc, :boc_ref)
|
64
|
+
ParamsOfEncodeBoc = Struct.new(:builder, :boc_cache)
|
65
|
+
ResultOfEncodeBoc = Struct.new(:boc)
|
201
66
|
|
202
|
-
class ParamsOfEncodeBoc
|
203
|
-
attr_reader :builder, :boc_cache
|
204
|
-
|
205
|
-
def initialize(builder:, boc_cache: nil)
|
206
|
-
@builder = builder
|
207
|
-
@boc_cache = boc_cache
|
208
|
-
end
|
209
|
-
|
210
|
-
def to_h
|
211
|
-
{
|
212
|
-
boc: @boc,
|
213
|
-
boc_ref: @boc_ref
|
214
|
-
}
|
215
|
-
end
|
216
|
-
end
|
217
|
-
|
218
|
-
class ResultOfEncodeBoc
|
219
|
-
attr_reader :boc
|
220
|
-
|
221
|
-
def initialize(a)
|
222
|
-
@boc = a
|
223
|
-
end
|
224
|
-
end
|
225
|
-
|
226
|
-
class ParamsOfGetBlockchainConfig
|
227
|
-
attr_reader :block_boc
|
228
|
-
|
229
|
-
def initialize(a)
|
230
|
-
@block_boc = a
|
231
|
-
end
|
232
|
-
|
233
|
-
def to_h
|
234
|
-
{
|
235
|
-
block_boc: @block_boc
|
236
|
-
}
|
237
|
-
end
|
238
|
-
end
|
239
|
-
|
240
|
-
class ResultOfGetBlockchainConfig
|
241
|
-
attr_reader :config_boc
|
242
|
-
|
243
|
-
def initialize(a)
|
244
|
-
@config_boc = a
|
245
|
-
end
|
246
|
-
end
|
247
67
|
|
248
68
|
|
249
69
|
#
|
@@ -251,7 +71,7 @@ module TonSdk
|
|
251
71
|
#
|
252
72
|
|
253
73
|
def self.parse_message(ctx, params)
|
254
|
-
Interop::request_to_native_lib(ctx, "boc.parse_message", params
|
74
|
+
Interop::request_to_native_lib(ctx, "boc.parse_message", params) do |resp|
|
255
75
|
if resp.success?
|
256
76
|
yield NativeLibResponsetResult.new(
|
257
77
|
result: ResultOfParse.new(resp.result["parsed"])
|
@@ -263,7 +83,7 @@ module TonSdk
|
|
263
83
|
end
|
264
84
|
|
265
85
|
def self.parse_transaction(ctx, params)
|
266
|
-
Interop::request_to_native_lib(ctx, "boc.parse_transaction", params
|
86
|
+
Interop::request_to_native_lib(ctx, "boc.parse_transaction", params) do |resp|
|
267
87
|
if resp.success?
|
268
88
|
yield NativeLibResponsetResult.new(
|
269
89
|
result: ResultOfParse.new(resp.result["parsed"])
|
@@ -275,7 +95,7 @@ module TonSdk
|
|
275
95
|
end
|
276
96
|
|
277
97
|
def self.parse_account(ctx, params)
|
278
|
-
Interop::request_to_native_lib(ctx, "boc.parse_account", params
|
98
|
+
Interop::request_to_native_lib(ctx, "boc.parse_account", params) do |resp|
|
279
99
|
if resp.success?
|
280
100
|
yield NativeLibResponsetResult.new(
|
281
101
|
result: ResultOfParse.new(resp.result["parsed"])
|
@@ -287,7 +107,7 @@ module TonSdk
|
|
287
107
|
end
|
288
108
|
|
289
109
|
def self.parse_block(ctx, params)
|
290
|
-
Interop::request_to_native_lib(ctx, "boc.parse_block", params
|
110
|
+
Interop::request_to_native_lib(ctx, "boc.parse_block", params) do |resp|
|
291
111
|
if resp.success?
|
292
112
|
yield NativeLibResponsetResult.new(
|
293
113
|
result: ResultOfParse.new(resp.result["parsed"])
|
@@ -299,7 +119,7 @@ module TonSdk
|
|
299
119
|
end
|
300
120
|
|
301
121
|
def self.parse_shardstate(ctx, params)
|
302
|
-
Interop::request_to_native_lib(ctx, "boc.parse_shardstate", params
|
122
|
+
Interop::request_to_native_lib(ctx, "boc.parse_shardstate", params) do |resp|
|
303
123
|
if resp.success?
|
304
124
|
yield NativeLibResponsetResult.new(
|
305
125
|
result: ResultOfParse.new(resp.result["parsed"])
|
@@ -311,7 +131,7 @@ module TonSdk
|
|
311
131
|
end
|
312
132
|
|
313
133
|
def self.get_blockchain_config(ctx, params)
|
314
|
-
Interop::request_to_native_lib(ctx, "boc.get_blockchain_config", params
|
134
|
+
Interop::request_to_native_lib(ctx, "boc.get_blockchain_config", params) do |resp|
|
315
135
|
if resp.success?
|
316
136
|
yield NativeLibResponsetResult.new(
|
317
137
|
result: ResultOfGetBlockchainConfig.new(resp.result["config_boc"])
|
@@ -323,7 +143,7 @@ module TonSdk
|
|
323
143
|
end
|
324
144
|
|
325
145
|
def self.get_boc_hash(ctx, params)
|
326
|
-
Interop::request_to_native_lib(ctx, "boc.get_boc_hash", params
|
146
|
+
Interop::request_to_native_lib(ctx, "boc.get_boc_hash", params) do |resp|
|
327
147
|
if resp.success?
|
328
148
|
yield NativeLibResponsetResult.new(
|
329
149
|
result: ResultOfGetBocHash.new(resp.result["hash"])
|
@@ -335,7 +155,7 @@ module TonSdk
|
|
335
155
|
end
|
336
156
|
|
337
157
|
def self.get_code_from_tvc(ctx, params)
|
338
|
-
Interop::request_to_native_lib(ctx, "boc.get_code_from_tvc", params
|
158
|
+
Interop::request_to_native_lib(ctx, "boc.get_code_from_tvc", params) do |resp|
|
339
159
|
if resp.success?
|
340
160
|
yield NativeLibResponsetResult.new(
|
341
161
|
result: ResultOfGetCodeFromTvc.new(resp.result["code"])
|
@@ -347,7 +167,7 @@ module TonSdk
|
|
347
167
|
end
|
348
168
|
|
349
169
|
def self.cache_get(ctx, params)
|
350
|
-
Interop::request_to_native_lib(ctx, "boc.cache_get", params
|
170
|
+
Interop::request_to_native_lib(ctx, "boc.cache_get", params) do |resp|
|
351
171
|
if resp.success?
|
352
172
|
yield NativeLibResponsetResult.new(
|
353
173
|
result: ResultOfBocCacheGet.new(
|
@@ -361,7 +181,7 @@ module TonSdk
|
|
361
181
|
end
|
362
182
|
|
363
183
|
def self.cache_set(ctx, params)
|
364
|
-
Interop::request_to_native_lib(ctx, "boc.cache_set", params
|
184
|
+
Interop::request_to_native_lib(ctx, "boc.cache_set", params) do |resp|
|
365
185
|
if resp.success?
|
366
186
|
yield NativeLibResponsetResult.new(
|
367
187
|
result: ResultOfBocCacheSet.new(
|
@@ -375,7 +195,7 @@ module TonSdk
|
|
375
195
|
end
|
376
196
|
|
377
197
|
def self.cache_unpin(ctx, params)
|
378
|
-
Interop::request_to_native_lib(ctx, "boc.cache_unpin", params
|
198
|
+
Interop::request_to_native_lib(ctx, "boc.cache_unpin", params) do |resp|
|
379
199
|
if resp.success?
|
380
200
|
yield NativeLibResponsetResult.new(
|
381
201
|
result: nil
|
@@ -387,7 +207,7 @@ module TonSdk
|
|
387
207
|
end
|
388
208
|
|
389
209
|
def self.encode_boc(ctx, params)
|
390
|
-
Interop::request_to_native_lib(ctx, "boc.encode_boc", params
|
210
|
+
Interop::request_to_native_lib(ctx, "boc.encode_boc", params) do |resp|
|
391
211
|
if resp.success?
|
392
212
|
yield NativeLibResponsetResult.new(
|
393
213
|
result: ResultOfEncodeBoc.new(
|
@@ -401,7 +221,7 @@ module TonSdk
|
|
401
221
|
end
|
402
222
|
|
403
223
|
def self.get_blockchain_config(ctx, params)
|
404
|
-
Interop::request_to_native_lib(ctx, "boc.get_blockchain_config", params
|
224
|
+
Interop::request_to_native_lib(ctx, "boc.get_blockchain_config", params) do |resp|
|
405
225
|
if resp.success?
|
406
226
|
yield NativeLibResponsetResult.new(
|
407
227
|
result: ResultOfGetBlockchainConfig.new(
|
@@ -45,7 +45,6 @@ module TonSdk
|
|
45
45
|
end
|
46
46
|
|
47
47
|
ResultOfVersion = Struct.new(:version)
|
48
|
-
|
49
48
|
ResultOfGetApiReference = Struct.new(:api)
|
50
49
|
|
51
50
|
BuildInfoDependency = Struct.new(:name, :git_commit, keyword_init: true) do
|
@@ -153,7 +152,7 @@ module TonSdk
|
|
153
152
|
end
|
154
153
|
|
155
154
|
def self.resolve_app_request(ctx, params)
|
156
|
-
Interop::request_to_native_lib(ctx, "client.resolve_app_request", params
|
155
|
+
Interop::request_to_native_lib(ctx, "client.resolve_app_request", params) do |resp|
|
157
156
|
if resp.success?
|
158
157
|
yield NativeLibResponsetResult.new(
|
159
158
|
result: ""
|
@@ -1,4 +1,5 @@
|
|
1
1
|
require 'json'
|
2
|
+
|
2
3
|
require_relative './interop.rb'
|
3
4
|
require_relative './types.rb'
|
4
5
|
require_relative './helper.rb'
|
@@ -14,6 +15,7 @@ require_relative './tvm.rb'
|
|
14
15
|
require_relative './processing.rb'
|
15
16
|
require_relative './debot.rb'
|
16
17
|
|
18
|
+
|
17
19
|
module TonSdk
|
18
20
|
class ClientContext
|
19
21
|
attr_reader :context
|
@@ -1,108 +1,67 @@
|
|
1
1
|
module TonSdk
|
2
|
-
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
}
|
21
|
-
end
|
22
|
-
end
|
23
|
-
|
24
|
-
class NetworkConfig
|
25
|
-
DEFAULT_RETRIES_COUNT = 5
|
26
|
-
DEFAULT_PROCESSING_TIMEOUT = 40000
|
27
|
-
DEFAULT_WAIT_TIMEOUT = 40000
|
28
|
-
DEFAULT_OUT_OF_SYNC_THRESHOLD = 15000
|
29
|
-
DEFAULT_NETWORK_RETRIES_COUNT = 5
|
30
|
-
DEFAULT_MAX_RECONNECT_TIMEOUT = 2
|
31
|
-
|
32
|
-
attr_reader :server_address, :endpoints, :network_retries_count,
|
33
|
-
:message_retries_count, :message_processing_timeout,
|
34
|
-
:wait_for_timeout, :out_of_sync_threshold, :reconnect_timeout,
|
35
|
-
:access_key, :max_reconnect_timeout
|
36
|
-
|
2
|
+
CryptoConfig = Struct.new(:mnemonic_dictionary, :mnemonic_word_count, :hdkey_derivation_path, keyword_init: true)
|
3
|
+
BocConfig = Struct.new(:cache_max_size)
|
4
|
+
NetworkConfig = Struct.new(
|
5
|
+
:server_address,
|
6
|
+
:endpoints,
|
7
|
+
:network_retries_count,
|
8
|
+
:message_retries_count,
|
9
|
+
:message_processing_timeout,
|
10
|
+
:wait_for_timeout,
|
11
|
+
:out_of_sync_threshold,
|
12
|
+
:reconnect_timeout,
|
13
|
+
:max_reconnect_timeout,
|
14
|
+
:sending_endpoint_count,
|
15
|
+
:latency_detection_interval,
|
16
|
+
:max_latency,
|
17
|
+
:access_key,
|
18
|
+
keyword_init: true
|
19
|
+
) do
|
37
20
|
def initialize(
|
38
21
|
server_address: "",
|
39
22
|
endpoints: [],
|
40
|
-
network_retries_count:
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
23
|
+
network_retries_count: 5,
|
24
|
+
max_reconnect_timeout: 120000,
|
25
|
+
reconnect_timeout: 1000,
|
26
|
+
message_retries_count: 5,
|
27
|
+
message_processing_timeout: 40000,
|
28
|
+
wait_for_timeout: 40000,
|
29
|
+
out_of_sync_threshold: 15000,
|
30
|
+
sending_endpoint_count: 2,
|
31
|
+
latency_detection_interval: 60000,
|
32
|
+
max_latency: 60000,
|
33
|
+
access_key: nil
|
48
34
|
)
|
49
|
-
|
50
|
-
@endpoints = endpoints
|
51
|
-
@network_retries_count = network_retries_count
|
52
|
-
@message_retries_count = message_retries_count
|
53
|
-
@message_processing_timeout = message_processing_timeout
|
54
|
-
@wait_for_timeout = wait_for_timeout
|
55
|
-
@out_of_sync_threshold = out_of_sync_threshold
|
56
|
-
@reconnect_timeout = reconnect_timeout
|
57
|
-
@access_key = access_key
|
58
|
-
@max_reconnect_timeout = max_reconnect_timeout
|
59
|
-
end
|
60
|
-
|
61
|
-
def to_h
|
62
|
-
{
|
63
|
-
server_address: @server_address,
|
64
|
-
endpoints: @endpoints,
|
65
|
-
network_retries_count: @network_retries_count,
|
66
|
-
message_retries_count: @message_retries_count,
|
67
|
-
message_processing_timeout: @message_processing_timeout,
|
68
|
-
wait_for_timeout: @wait_for_timeout,
|
69
|
-
out_of_sync_threshold: @out_of_sync_threshold,
|
70
|
-
reconnect_timeout: @reconnect_timeout,
|
71
|
-
access_key: @access_key,
|
72
|
-
max_reconnect_timeout: @max_reconnect_timeout
|
73
|
-
}
|
35
|
+
super
|
74
36
|
end
|
75
37
|
end
|
76
38
|
|
77
|
-
|
78
|
-
|
79
|
-
|
80
|
-
|
81
|
-
|
82
|
-
|
83
|
-
|
84
|
-
def to_h = { fish_param: @fish_param }
|
85
|
-
end
|
86
|
-
|
87
|
-
class AbiConfig
|
88
|
-
DEFAULT_EXPIRATION_TIMEOUT = 40000
|
89
|
-
DEFAULT_TIMEOUT_GROW_FACTOR = 1.5
|
90
|
-
|
91
|
-
attr_reader :message_expiration_timeout, :message_expiration_timeout_grow_factor
|
92
|
-
|
39
|
+
AbiConfig = Struct.new(
|
40
|
+
:workchain,
|
41
|
+
:message_expiration_timeout,
|
42
|
+
:message_expiration_timeout_grow_factor,
|
43
|
+
keyword_init: true
|
44
|
+
) do
|
93
45
|
def initialize(
|
94
|
-
|
95
|
-
|
46
|
+
workchain: nil,
|
47
|
+
message_expiration_timeout: 40000,
|
48
|
+
message_expiration_timeout_grow_factor: 1.5
|
96
49
|
)
|
97
|
-
|
98
|
-
@message_expiration_timeout_grow_factor = message_expiration_timeout_grow_factor
|
50
|
+
super
|
99
51
|
end
|
52
|
+
end
|
100
53
|
|
54
|
+
ClientConfig = Struct.new(:network, :crypto, :abi, :boc, keyword_init: true) do
|
101
55
|
def to_h
|
56
|
+
res = super.to_h
|
57
|
+
|
102
58
|
{
|
103
|
-
|
104
|
-
|
59
|
+
network: res[:network]&.to_h,
|
60
|
+
crypto: res[:crypto]&.to_h,
|
61
|
+
abi: res[:abi]&.to_h,
|
62
|
+
boc: res[:boc]&.to_h
|
105
63
|
}
|
106
64
|
end
|
107
65
|
end
|
66
|
+
|
108
67
|
end
|