everscale-client-ruby 1.1.47 → 1.1.49
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/lib/code_generator/code_generator.rb +18 -8
- data/lib/everscale-client-ruby/Binding/binding.rb +43 -41
- data/lib/everscale-client-ruby/Client/Abi.rb +19 -17
- data/lib/everscale-client-ruby/Client/Boc.rb +23 -21
- data/lib/everscale-client-ruby/Client/Client.rb +24 -17
- data/lib/everscale-client-ruby/Client/Crypto.rb +55 -53
- data/lib/everscale-client-ruby/Client/Debot.rb +10 -8
- data/lib/everscale-client-ruby/Client/Net.rb +26 -24
- data/lib/everscale-client-ruby/Client/Processing.rb +7 -5
- data/lib/everscale-client-ruby/Client/Proofs.rb +7 -5
- data/lib/everscale-client-ruby/Client/Tvm.rb +7 -5
- data/lib/everscale-client-ruby/Client/Utils.rb +9 -7
- data/lib/everscale-client-ruby/version.rb +1 -1
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: fd5555c9c9abe1ebd8114686f13a1e9899c1c93c063df2d5cd6aa3eb187e760a
|
4
|
+
data.tar.gz: 479f9a3ddabc09d16e5b1087f318bab9ac397ef4820c8dd99a95fa3a67e10e4a
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 2b584f384a498c2fb6656c7ddb43c5538f878ce1c14f1cafd95e457d60cf748c2f21114efc6f65d19eef438b8e46fe204c5cf33ca8c7882dcf25481f8a6e13c9
|
7
|
+
data.tar.gz: c2fcb5bb3e0b7a4b33e1cc4cf90887a521af7d0ba0db58fe39d6af958a79564f999cad7a4e3f03886e6e92b796fc23c9028a8bdbc348256e78ce507bb9a0177b
|
@@ -234,7 +234,7 @@ cd everscale-client-ruby\n
|
|
234
234
|
|
235
235
|
private def generateClientModule(mod, modules)
|
236
236
|
content = "module TonClient\n\n#{TAB}class #{mod.name.capitalize}\n#{TAB}#{TAB}include CommonInstanceHelpers\n\n"
|
237
|
-
content << "#{TAB}#{TAB}attr_reader :context, :context_config\n"
|
237
|
+
content << "#{TAB}#{TAB}attr_reader :context, :context_config, :request_id, :requests\n"
|
238
238
|
content << "#{TAB}#{TAB}private_accessor "
|
239
239
|
modules.each_with_index do |m, i|
|
240
240
|
next if m.name.downcase == 'client'
|
@@ -243,16 +243,24 @@ cd everscale-client-ruby\n
|
|
243
243
|
content << "#{TAB}#{TAB}MODULE = self.to_s.downcase.gsub(/^(.+::|)(\\w+)$/, '\\2').freeze\n\n"
|
244
244
|
content << "#{TAB}#{TAB}def initialize(context_config: {})\n"
|
245
245
|
content << "#{TAB}#{TAB}#{TAB}@context_config = context_config\n"
|
246
|
+
content << "#{TAB}#{TAB}#{TAB}@request_id = Concurrent::AtomicFixnum.new(1)\n"
|
247
|
+
content << "#{TAB}#{TAB}#{TAB}@requests = Concurrent::Hash.new()\n"
|
246
248
|
content << "#{TAB}#{TAB}#{TAB}config = TonBinding.make_string(context_config.to_json)\n"
|
247
249
|
content << "#{TAB}#{TAB}#{TAB}context_ptr = TonBinding.tc_create_context(config)\n"
|
248
250
|
content << "#{TAB}#{TAB}#{TAB}@context = TonBinding.read_string_to_hash(context_ptr)['result']\n"
|
251
|
+
content << "#{TAB}#{TAB}#{TAB}ObjectSpace.define_finalizer(self, self.class.finalize(@context))\n"
|
252
|
+
content << "#{TAB}#{TAB}end\n\n"
|
253
|
+
content << "#{TAB}#{TAB}def self.finalize(ctx)\n"
|
254
|
+
content << "#{TAB}#{TAB}#{TAB}Proc.new do\n"
|
255
|
+
content << "#{TAB}#{TAB}#{TAB}#{TAB}if (ctx != nil) && (ctx > 0)\n"
|
256
|
+
content << "#{TAB}#{TAB}#{TAB}#{TAB}#{TAB}TonBinding.tc_destroy_context(ctx)\n"
|
257
|
+
content << "#{TAB}#{TAB}#{TAB}#{TAB}end\n"
|
258
|
+
content << "#{TAB}#{TAB}#{TAB}end\n"
|
249
259
|
content << "#{TAB}#{TAB}end\n\n"
|
250
|
-
content << "#{TAB}#{TAB}def destroy_context\n"
|
251
|
-
content << "#{TAB}#{TAB}#{TAB}TonBinding.tc_destroy_context(context)\n#{TAB}#{TAB}end\n\n"
|
252
260
|
modules.each_with_index do |m, i|
|
253
261
|
next if m.name.downcase == 'client'
|
254
262
|
content << "#{TAB}#{TAB}def #{m.name}\n"
|
255
|
-
content << "#{TAB}#{TAB}#{TAB}_#{m.name} ||= #{m.name.capitalize}.new(context: context)\n"
|
263
|
+
content << "#{TAB}#{TAB}#{TAB}_#{m.name} ||= #{m.name.capitalize}.new(context: context, request_id: request_id, requests: requests)\n"
|
256
264
|
content << "#{TAB}#{TAB}end\n\n"
|
257
265
|
end
|
258
266
|
|
@@ -268,10 +276,12 @@ cd everscale-client-ruby\n
|
|
268
276
|
|
269
277
|
private def generateModule(mod)
|
270
278
|
content = "module TonClient\n\n#{TAB}class #{mod.name.capitalize}\n#{TAB}#{TAB}include CommonInstanceHelpers\n\n"
|
271
|
-
content << "#{TAB}#{TAB}attr_reader :context\n"
|
279
|
+
content << "#{TAB}#{TAB}attr_reader :context, :request_id, :requests\n"
|
272
280
|
content << "#{TAB}#{TAB}MODULE = self.to_s.downcase.gsub(/^(.+::|)(\\w+)$/, '\\2').freeze\n\n"
|
273
|
-
content << "#{TAB}#{TAB}def initialize(context: nil)\n"
|
281
|
+
content << "#{TAB}#{TAB}def initialize(context: nil, request_id: nil, requests: nil)\n"
|
274
282
|
content << "#{TAB}#{TAB}#{TAB}@context = context\n"
|
283
|
+
content << "#{TAB}#{TAB}#{TAB}@request_id = request_id\n"
|
284
|
+
content << "#{TAB}#{TAB}#{TAB}@requests = requests\n"
|
275
285
|
content << "#{TAB}#{TAB}end\n\n"
|
276
286
|
|
277
287
|
mod.functions.each do |func|
|
@@ -289,10 +299,10 @@ cd everscale-client-ruby\n
|
|
289
299
|
content << "#{TAB}#{TAB}def #{function.name}"
|
290
300
|
if function.arguments.empty?
|
291
301
|
content << "(&block)\n"
|
292
|
-
content << "#{TAB}#{TAB}#{TAB}TonBinding.requestLibrary(context: context, method_name: full_method_name(MODULE, __method__.to_s), payload: {}, &block)\n"
|
302
|
+
content << "#{TAB}#{TAB}#{TAB}TonBinding.requestLibrary(context: context, request_id: request_id, requests: requests, method_name: full_method_name(MODULE, __method__.to_s), payload: {}, &block)\n"
|
293
303
|
else
|
294
304
|
content << "(payload, &block)\n"
|
295
|
-
content << "#{TAB}#{TAB}#{TAB}TonBinding.requestLibrary(context: context, method_name: full_method_name(MODULE, __method__.to_s), payload: payload, &block)\n"
|
305
|
+
content << "#{TAB}#{TAB}#{TAB}TonBinding.requestLibrary(context: context, request_id: request_id, requests: requests, method_name: full_method_name(MODULE, __method__.to_s), payload: payload, &block)\n"
|
296
306
|
end
|
297
307
|
content << "#{TAB}#{TAB}end\n\n"
|
298
308
|
|
@@ -2,11 +2,8 @@ require 'byebug'
|
|
2
2
|
|
3
3
|
module TonClient
|
4
4
|
module TonBinding
|
5
|
-
@@request_id = Concurrent::AtomicFixnum.new(1)
|
6
|
-
@@requests = Concurrent::Hash.new()
|
7
|
-
|
8
5
|
class Response
|
9
|
-
attr_accessor :result, :error, :custom_response, :finished, :request_id, :
|
6
|
+
attr_accessor :result, :error, :custom_response, :finished, :request_id, :response_type
|
10
7
|
|
11
8
|
def initialize(request_id, string_data, response_type, finished)
|
12
9
|
update(request_id, string_data, response_type, finished)
|
@@ -14,45 +11,36 @@ module TonClient
|
|
14
11
|
|
15
12
|
private
|
16
13
|
def update(request_id, string_data, response_type, finished)
|
14
|
+
if response_type == -1
|
15
|
+
@finished = true
|
16
|
+
@request_id = request_id
|
17
|
+
@response_type = response_type
|
18
|
+
@error = string_data || "Client deallocated"
|
19
|
+
return self
|
20
|
+
end
|
21
|
+
|
17
22
|
response_hash = TonBinding.read_string_to_hash(string_data)
|
18
|
-
|
19
|
-
|
20
|
-
|
23
|
+
@finished = finished
|
24
|
+
@request_id = request_id
|
25
|
+
@response_type = response_type
|
21
26
|
|
22
27
|
case response_type
|
23
28
|
when 0
|
24
29
|
# result
|
25
|
-
|
30
|
+
@result = response_hash
|
26
31
|
when 1
|
27
32
|
# error
|
28
|
-
|
33
|
+
@error = response_hash
|
29
34
|
else
|
30
|
-
# another
|
31
|
-
if response_type >= 100
|
32
|
-
|
33
|
-
end
|
35
|
+
# # another
|
36
|
+
# if response_type >= 100
|
37
|
+
@custom_response = response_hash
|
38
|
+
# end
|
34
39
|
end
|
35
40
|
|
36
41
|
self
|
37
42
|
end
|
38
43
|
end
|
39
|
-
|
40
|
-
def self.generate_request_id
|
41
|
-
@@request_id.increment()
|
42
|
-
@@request_id.value
|
43
|
-
end
|
44
|
-
|
45
|
-
def self.get_request(id)
|
46
|
-
@@requests[id]
|
47
|
-
end
|
48
|
-
|
49
|
-
def self.set_request(id, &request_block)
|
50
|
-
@@requests[id] = request_block
|
51
|
-
end
|
52
|
-
|
53
|
-
def self.delete_request(id)
|
54
|
-
@@requests[id] = nil
|
55
|
-
end
|
56
44
|
end
|
57
45
|
end
|
58
46
|
|
@@ -146,14 +134,15 @@ module TonClient
|
|
146
134
|
end
|
147
135
|
|
148
136
|
if string[:content].address > 1
|
149
|
-
|
137
|
+
result = string[:content].read_string(string[:len])
|
150
138
|
if is_ref
|
151
139
|
tc_destroy_string(tc_string_handle)
|
152
140
|
# free(tc_string_handle)
|
153
141
|
end
|
154
|
-
|
142
|
+
result
|
143
|
+
else
|
144
|
+
nil
|
155
145
|
end
|
156
|
-
nil
|
157
146
|
end
|
158
147
|
|
159
148
|
def self.read_string_to_hash(tc_string_handle_t_ref)
|
@@ -176,21 +165,34 @@ module TonClient
|
|
176
165
|
end
|
177
166
|
|
178
167
|
# block = { |response| }
|
179
|
-
def self.requestLibrary(context:
|
168
|
+
def self.requestLibrary(context: nil, request_id: nil, requests: nil, sm: nil, method_name: '', payload: {}, &block)
|
180
169
|
raise 'context not found' unless context
|
181
170
|
raise 'method_name is empty' if method_name.empty?
|
182
|
-
|
183
|
-
request_id
|
171
|
+
# raise "context: #{context}. request_id not is nil. Client dealloc." unless request_id
|
172
|
+
unless request_id
|
173
|
+
# p "context: #{context}. request_id is nil. Client deallocated."
|
174
|
+
block.call(Response.new(request_id, "Client deallocated", -1, true)) if block
|
175
|
+
return
|
176
|
+
end
|
184
177
|
method_name_string = make_string(method_name)
|
185
178
|
payload_string = make_string(payload.to_json)
|
186
|
-
|
179
|
+
|
180
|
+
request_id = request_id.increment
|
181
|
+
requests[request_id] = block
|
182
|
+
|
187
183
|
tc_request(context, method_name_string, payload_string, request_id) do |request_id, string_data, response_type, finished|
|
188
|
-
|
189
|
-
|
190
|
-
request
|
191
|
-
|
184
|
+
begin
|
185
|
+
request = requests[request_id]
|
186
|
+
if request
|
187
|
+
request.call(Response.new(request_id, string_data, response_type, finished))
|
188
|
+
requests.delete(request_id) if finished
|
189
|
+
end
|
190
|
+
rescue => ex
|
191
|
+
block.call(Response.new(request_id, ex.message, -1, true)) if block
|
192
192
|
end
|
193
193
|
end
|
194
|
+
rescue => ex
|
195
|
+
block.call(Response.new(request_id, ex.message, -1, true)) if block
|
194
196
|
end
|
195
197
|
|
196
198
|
end
|
@@ -3,11 +3,13 @@ module TonClient
|
|
3
3
|
class Abi
|
4
4
|
include CommonInstanceHelpers
|
5
5
|
|
6
|
-
attr_reader :context
|
6
|
+
attr_reader :context, :request_id, :requests
|
7
7
|
MODULE = self.to_s.downcase.gsub(/^(.+::|)(\w+)$/, '\2').freeze
|
8
8
|
|
9
|
-
def initialize(context: nil)
|
9
|
+
def initialize(context: nil, request_id: nil, requests: nil)
|
10
10
|
@context = context
|
11
|
+
@request_id = request_id
|
12
|
+
@requests = requests
|
11
13
|
end
|
12
14
|
|
13
15
|
# INPUT: ParamsOfEncodeMessageBody
|
@@ -26,7 +28,7 @@ module TonClient
|
|
26
28
|
# data_to_sign: String<Optional> - # # Optional data to sign. # # Encoded with `base64`.
|
27
29
|
# # Presents when `message` is unsigned. Can be used for externalmessage signing. Is this case you need to sing this data andproduce signed message using `abi.attach_signature`.
|
28
30
|
def encode_message_body(payload, &block)
|
29
|
-
TonBinding.requestLibrary(context: context, method_name: full_method_name(MODULE, __method__.to_s), payload: payload, &block)
|
31
|
+
TonBinding.requestLibrary(context: context, request_id: request_id, requests: requests, method_name: full_method_name(MODULE, __method__.to_s), payload: payload, &block)
|
30
32
|
end
|
31
33
|
|
32
34
|
# INPUT: ParamsOfAttachSignatureToMessageBody
|
@@ -37,7 +39,7 @@ module TonClient
|
|
37
39
|
# RESPONSE: ResultOfAttachSignatureToMessageBody
|
38
40
|
# body: String -
|
39
41
|
def attach_signature_to_message_body(payload, &block)
|
40
|
-
TonBinding.requestLibrary(context: context, method_name: full_method_name(MODULE, __method__.to_s), payload: payload, &block)
|
42
|
+
TonBinding.requestLibrary(context: context, request_id: request_id, requests: requests, method_name: full_method_name(MODULE, __method__.to_s), payload: payload, &block)
|
41
43
|
end
|
42
44
|
|
43
45
|
# INPUT: ParamsOfEncodeMessage
|
@@ -58,7 +60,7 @@ module TonClient
|
|
58
60
|
# address: String - # # Destination address.
|
59
61
|
# message_id: String - # # Message id.
|
60
62
|
def encode_message(payload, &block)
|
61
|
-
TonBinding.requestLibrary(context: context, method_name: full_method_name(MODULE, __method__.to_s), payload: payload, &block)
|
63
|
+
TonBinding.requestLibrary(context: context, request_id: request_id, requests: requests, method_name: full_method_name(MODULE, __method__.to_s), payload: payload, &block)
|
62
64
|
end
|
63
65
|
|
64
66
|
# INPUT: ParamsOfEncodeInternalMessage
|
@@ -76,7 +78,7 @@ module TonClient
|
|
76
78
|
# address: String - # # Destination address.
|
77
79
|
# message_id: String - # # Message id.
|
78
80
|
def encode_internal_message(payload, &block)
|
79
|
-
TonBinding.requestLibrary(context: context, method_name: full_method_name(MODULE, __method__.to_s), payload: payload, &block)
|
81
|
+
TonBinding.requestLibrary(context: context, request_id: request_id, requests: requests, method_name: full_method_name(MODULE, __method__.to_s), payload: payload, &block)
|
80
82
|
end
|
81
83
|
|
82
84
|
# INPUT: ParamsOfAttachSignature
|
@@ -88,7 +90,7 @@ module TonClient
|
|
88
90
|
# message: String - # # Signed message BOC
|
89
91
|
# message_id: String - # # Message ID
|
90
92
|
def attach_signature(payload, &block)
|
91
|
-
TonBinding.requestLibrary(context: context, method_name: full_method_name(MODULE, __method__.to_s), payload: payload, &block)
|
93
|
+
TonBinding.requestLibrary(context: context, request_id: request_id, requests: requests, method_name: full_method_name(MODULE, __method__.to_s), payload: payload, &block)
|
92
94
|
end
|
93
95
|
|
94
96
|
# INPUT: ParamsOfDecodeMessage
|
@@ -101,7 +103,7 @@ module TonClient
|
|
101
103
|
# value: Value<Optional> - # # Parameters or result value.
|
102
104
|
# header: FunctionHeader<Optional> - # # Function header.
|
103
105
|
def decode_message(payload, &block)
|
104
|
-
TonBinding.requestLibrary(context: context, method_name: full_method_name(MODULE, __method__.to_s), payload: payload, &block)
|
106
|
+
TonBinding.requestLibrary(context: context, request_id: request_id, requests: requests, method_name: full_method_name(MODULE, __method__.to_s), payload: payload, &block)
|
105
107
|
end
|
106
108
|
|
107
109
|
# INPUT: ParamsOfDecodeMessageBody
|
@@ -115,7 +117,7 @@ module TonClient
|
|
115
117
|
# value: Value<Optional> - # # Parameters or result value.
|
116
118
|
# header: FunctionHeader<Optional> - # # Function header.
|
117
119
|
def decode_message_body(payload, &block)
|
118
|
-
TonBinding.requestLibrary(context: context, method_name: full_method_name(MODULE, __method__.to_s), payload: payload, &block)
|
120
|
+
TonBinding.requestLibrary(context: context, request_id: request_id, requests: requests, method_name: full_method_name(MODULE, __method__.to_s), payload: payload, &block)
|
119
121
|
end
|
120
122
|
|
121
123
|
# INPUT: ParamsOfEncodeAccount
|
@@ -128,7 +130,7 @@ module TonClient
|
|
128
130
|
# account: String - # # Account BOC encoded in `base64`.
|
129
131
|
# id: String - # # Account ID encoded in `hex`.
|
130
132
|
def encode_account(payload, &block)
|
131
|
-
TonBinding.requestLibrary(context: context, method_name: full_method_name(MODULE, __method__.to_s), payload: payload, &block)
|
133
|
+
TonBinding.requestLibrary(context: context, request_id: request_id, requests: requests, method_name: full_method_name(MODULE, __method__.to_s), payload: payload, &block)
|
132
134
|
end
|
133
135
|
|
134
136
|
# INPUT: ParamsOfDecodeAccountData
|
@@ -138,7 +140,7 @@ module TonClient
|
|
138
140
|
# RESPONSE: ResultOfDecodeAccountData
|
139
141
|
# data: Value - # # Decoded data as a JSON structure.
|
140
142
|
def decode_account_data(payload, &block)
|
141
|
-
TonBinding.requestLibrary(context: context, method_name: full_method_name(MODULE, __method__.to_s), payload: payload, &block)
|
143
|
+
TonBinding.requestLibrary(context: context, request_id: request_id, requests: requests, method_name: full_method_name(MODULE, __method__.to_s), payload: payload, &block)
|
142
144
|
end
|
143
145
|
|
144
146
|
# INPUT: ParamsOfUpdateInitialData
|
@@ -150,7 +152,7 @@ module TonClient
|
|
150
152
|
# RESPONSE: ResultOfUpdateInitialData
|
151
153
|
# data: String - # # Updated data BOC or BOC handle
|
152
154
|
def update_initial_data(payload, &block)
|
153
|
-
TonBinding.requestLibrary(context: context, method_name: full_method_name(MODULE, __method__.to_s), payload: payload, &block)
|
155
|
+
TonBinding.requestLibrary(context: context, request_id: request_id, requests: requests, method_name: full_method_name(MODULE, __method__.to_s), payload: payload, &block)
|
154
156
|
end
|
155
157
|
|
156
158
|
# INPUT: ParamsOfEncodeInitialData
|
@@ -161,7 +163,7 @@ module TonClient
|
|
161
163
|
# RESPONSE: ResultOfEncodeInitialData
|
162
164
|
# data: String - # # Updated data BOC or BOC handle
|
163
165
|
def encode_initial_data(payload, &block)
|
164
|
-
TonBinding.requestLibrary(context: context, method_name: full_method_name(MODULE, __method__.to_s), payload: payload, &block)
|
166
|
+
TonBinding.requestLibrary(context: context, request_id: request_id, requests: requests, method_name: full_method_name(MODULE, __method__.to_s), payload: payload, &block)
|
165
167
|
end
|
166
168
|
|
167
169
|
# INPUT: ParamsOfDecodeInitialData
|
@@ -172,7 +174,7 @@ module TonClient
|
|
172
174
|
# initial_data: Value<Optional> - # # List of initial values of contract's public variables. # # Initial data is decoded if `abi` input parameter is provided
|
173
175
|
# initial_pubkey: String - # # Initial account owner's public key
|
174
176
|
def decode_initial_data(payload, &block)
|
175
|
-
TonBinding.requestLibrary(context: context, method_name: full_method_name(MODULE, __method__.to_s), payload: payload, &block)
|
177
|
+
TonBinding.requestLibrary(context: context, request_id: request_id, requests: requests, method_name: full_method_name(MODULE, __method__.to_s), payload: payload, &block)
|
176
178
|
end
|
177
179
|
|
178
180
|
# INPUT: ParamsOfDecodeBoc
|
@@ -182,7 +184,7 @@ module TonClient
|
|
182
184
|
# RESPONSE: ResultOfDecodeBoc
|
183
185
|
# data: Value - # # Decoded data as a JSON structure.
|
184
186
|
def decode_boc(payload, &block)
|
185
|
-
TonBinding.requestLibrary(context: context, method_name: full_method_name(MODULE, __method__.to_s), payload: payload, &block)
|
187
|
+
TonBinding.requestLibrary(context: context, request_id: request_id, requests: requests, method_name: full_method_name(MODULE, __method__.to_s), payload: payload, &block)
|
186
188
|
end
|
187
189
|
|
188
190
|
# INPUT: ParamsOfAbiEncodeBoc
|
@@ -192,7 +194,7 @@ module TonClient
|
|
192
194
|
# RESPONSE: ResultOfAbiEncodeBoc
|
193
195
|
# boc: String - # # BOC encoded as base64
|
194
196
|
def encode_boc(payload, &block)
|
195
|
-
TonBinding.requestLibrary(context: context, method_name: full_method_name(MODULE, __method__.to_s), payload: payload, &block)
|
197
|
+
TonBinding.requestLibrary(context: context, request_id: request_id, requests: requests, method_name: full_method_name(MODULE, __method__.to_s), payload: payload, &block)
|
196
198
|
end
|
197
199
|
|
198
200
|
# INPUT: ParamsOfCalcFunctionId
|
@@ -202,7 +204,7 @@ module TonClient
|
|
202
204
|
# RESPONSE: ResultOfCalcFunctionId
|
203
205
|
# function_id: Number - # # Contract function ID
|
204
206
|
def calc_function_id(payload, &block)
|
205
|
-
TonBinding.requestLibrary(context: context, method_name: full_method_name(MODULE, __method__.to_s), payload: payload, &block)
|
207
|
+
TonBinding.requestLibrary(context: context, request_id: request_id, requests: requests, method_name: full_method_name(MODULE, __method__.to_s), payload: payload, &block)
|
206
208
|
end
|
207
209
|
|
208
210
|
end
|
@@ -3,11 +3,13 @@ module TonClient
|
|
3
3
|
class Boc
|
4
4
|
include CommonInstanceHelpers
|
5
5
|
|
6
|
-
attr_reader :context
|
6
|
+
attr_reader :context, :request_id, :requests
|
7
7
|
MODULE = self.to_s.downcase.gsub(/^(.+::|)(\w+)$/, '\2').freeze
|
8
8
|
|
9
|
-
def initialize(context: nil)
|
9
|
+
def initialize(context: nil, request_id: nil, requests: nil)
|
10
10
|
@context = context
|
11
|
+
@request_id = request_id
|
12
|
+
@requests = requests
|
11
13
|
end
|
12
14
|
|
13
15
|
# INPUT: ParamsOfParse
|
@@ -15,7 +17,7 @@ module TonClient
|
|
15
17
|
# RESPONSE: ResultOfParse
|
16
18
|
# parsed: Value - # # JSON containing parsed BOC
|
17
19
|
def parse_message(payload, &block)
|
18
|
-
TonBinding.requestLibrary(context: context, method_name: full_method_name(MODULE, __method__.to_s), payload: payload, &block)
|
20
|
+
TonBinding.requestLibrary(context: context, request_id: request_id, requests: requests, method_name: full_method_name(MODULE, __method__.to_s), payload: payload, &block)
|
19
21
|
end
|
20
22
|
|
21
23
|
# INPUT: ParamsOfParse
|
@@ -23,7 +25,7 @@ module TonClient
|
|
23
25
|
# RESPONSE: ResultOfParse
|
24
26
|
# parsed: Value - # # JSON containing parsed BOC
|
25
27
|
def parse_transaction(payload, &block)
|
26
|
-
TonBinding.requestLibrary(context: context, method_name: full_method_name(MODULE, __method__.to_s), payload: payload, &block)
|
28
|
+
TonBinding.requestLibrary(context: context, request_id: request_id, requests: requests, method_name: full_method_name(MODULE, __method__.to_s), payload: payload, &block)
|
27
29
|
end
|
28
30
|
|
29
31
|
# INPUT: ParamsOfParse
|
@@ -31,7 +33,7 @@ module TonClient
|
|
31
33
|
# RESPONSE: ResultOfParse
|
32
34
|
# parsed: Value - # # JSON containing parsed BOC
|
33
35
|
def parse_account(payload, &block)
|
34
|
-
TonBinding.requestLibrary(context: context, method_name: full_method_name(MODULE, __method__.to_s), payload: payload, &block)
|
36
|
+
TonBinding.requestLibrary(context: context, request_id: request_id, requests: requests, method_name: full_method_name(MODULE, __method__.to_s), payload: payload, &block)
|
35
37
|
end
|
36
38
|
|
37
39
|
# INPUT: ParamsOfParse
|
@@ -39,7 +41,7 @@ module TonClient
|
|
39
41
|
# RESPONSE: ResultOfParse
|
40
42
|
# parsed: Value - # # JSON containing parsed BOC
|
41
43
|
def parse_block(payload, &block)
|
42
|
-
TonBinding.requestLibrary(context: context, method_name: full_method_name(MODULE, __method__.to_s), payload: payload, &block)
|
44
|
+
TonBinding.requestLibrary(context: context, request_id: request_id, requests: requests, method_name: full_method_name(MODULE, __method__.to_s), payload: payload, &block)
|
43
45
|
end
|
44
46
|
|
45
47
|
# INPUT: ParamsOfParseShardstate
|
@@ -49,7 +51,7 @@ module TonClient
|
|
49
51
|
# RESPONSE: ResultOfParse
|
50
52
|
# parsed: Value - # # JSON containing parsed BOC
|
51
53
|
def parse_shardstate(payload, &block)
|
52
|
-
TonBinding.requestLibrary(context: context, method_name: full_method_name(MODULE, __method__.to_s), payload: payload, &block)
|
54
|
+
TonBinding.requestLibrary(context: context, request_id: request_id, requests: requests, method_name: full_method_name(MODULE, __method__.to_s), payload: payload, &block)
|
53
55
|
end
|
54
56
|
|
55
57
|
# INPUT: ParamsOfGetBlockchainConfig
|
@@ -57,7 +59,7 @@ module TonClient
|
|
57
59
|
# RESPONSE: ResultOfGetBlockchainConfig
|
58
60
|
# config_boc: String - # # Blockchain config BOC encoded as base64
|
59
61
|
def get_blockchain_config(payload, &block)
|
60
|
-
TonBinding.requestLibrary(context: context, method_name: full_method_name(MODULE, __method__.to_s), payload: payload, &block)
|
62
|
+
TonBinding.requestLibrary(context: context, request_id: request_id, requests: requests, method_name: full_method_name(MODULE, __method__.to_s), payload: payload, &block)
|
61
63
|
end
|
62
64
|
|
63
65
|
# INPUT: ParamsOfGetBocHash
|
@@ -65,7 +67,7 @@ module TonClient
|
|
65
67
|
# RESPONSE: ResultOfGetBocHash
|
66
68
|
# hash: String - # # BOC root hash encoded with hex
|
67
69
|
def get_boc_hash(payload, &block)
|
68
|
-
TonBinding.requestLibrary(context: context, method_name: full_method_name(MODULE, __method__.to_s), payload: payload, &block)
|
70
|
+
TonBinding.requestLibrary(context: context, request_id: request_id, requests: requests, method_name: full_method_name(MODULE, __method__.to_s), payload: payload, &block)
|
69
71
|
end
|
70
72
|
|
71
73
|
# INPUT: ParamsOfGetBocDepth
|
@@ -73,7 +75,7 @@ module TonClient
|
|
73
75
|
# RESPONSE: ResultOfGetBocDepth
|
74
76
|
# depth: Number - # # BOC root cell depth
|
75
77
|
def get_boc_depth(payload, &block)
|
76
|
-
TonBinding.requestLibrary(context: context, method_name: full_method_name(MODULE, __method__.to_s), payload: payload, &block)
|
78
|
+
TonBinding.requestLibrary(context: context, request_id: request_id, requests: requests, method_name: full_method_name(MODULE, __method__.to_s), payload: payload, &block)
|
77
79
|
end
|
78
80
|
|
79
81
|
# INPUT: ParamsOfGetCodeFromTvc
|
@@ -81,7 +83,7 @@ module TonClient
|
|
81
83
|
# RESPONSE: ResultOfGetCodeFromTvc
|
82
84
|
# code: String - # # Contract code encoded as base64
|
83
85
|
def get_code_from_tvc(payload, &block)
|
84
|
-
TonBinding.requestLibrary(context: context, method_name: full_method_name(MODULE, __method__.to_s), payload: payload, &block)
|
86
|
+
TonBinding.requestLibrary(context: context, request_id: request_id, requests: requests, method_name: full_method_name(MODULE, __method__.to_s), payload: payload, &block)
|
85
87
|
end
|
86
88
|
|
87
89
|
# INPUT: ParamsOfBocCacheGet
|
@@ -89,7 +91,7 @@ module TonClient
|
|
89
91
|
# RESPONSE: ResultOfBocCacheGet
|
90
92
|
# boc: String<Optional> - # # BOC encoded as base64.
|
91
93
|
def cache_get(payload, &block)
|
92
|
-
TonBinding.requestLibrary(context: context, method_name: full_method_name(MODULE, __method__.to_s), payload: payload, &block)
|
94
|
+
TonBinding.requestLibrary(context: context, request_id: request_id, requests: requests, method_name: full_method_name(MODULE, __method__.to_s), payload: payload, &block)
|
93
95
|
end
|
94
96
|
|
95
97
|
# INPUT: ParamsOfBocCacheSet
|
@@ -98,14 +100,14 @@ module TonClient
|
|
98
100
|
# RESPONSE: ResultOfBocCacheSet
|
99
101
|
# boc_ref: String - # # Reference to the cached BOC
|
100
102
|
def cache_set(payload, &block)
|
101
|
-
TonBinding.requestLibrary(context: context, method_name: full_method_name(MODULE, __method__.to_s), payload: payload, &block)
|
103
|
+
TonBinding.requestLibrary(context: context, request_id: request_id, requests: requests, method_name: full_method_name(MODULE, __method__.to_s), payload: payload, &block)
|
102
104
|
end
|
103
105
|
|
104
106
|
# INPUT: ParamsOfBocCacheUnpin
|
105
107
|
# pin: String - # # Pinned name
|
106
108
|
# boc_ref: String<Optional> - # # Reference to the cached BOC. # # If it is provided then only referenced BOC is unpinned
|
107
109
|
def cache_unpin(payload, &block)
|
108
|
-
TonBinding.requestLibrary(context: context, method_name: full_method_name(MODULE, __method__.to_s), payload: payload, &block)
|
110
|
+
TonBinding.requestLibrary(context: context, request_id: request_id, requests: requests, method_name: full_method_name(MODULE, __method__.to_s), payload: payload, &block)
|
109
111
|
end
|
110
112
|
|
111
113
|
# INPUT: ParamsOfEncodeBoc
|
@@ -114,7 +116,7 @@ module TonClient
|
|
114
116
|
# RESPONSE: ResultOfEncodeBoc
|
115
117
|
# boc: String - # # Encoded cell BOC or BOC cache key.
|
116
118
|
def encode_boc(payload, &block)
|
117
|
-
TonBinding.requestLibrary(context: context, method_name: full_method_name(MODULE, __method__.to_s), payload: payload, &block)
|
119
|
+
TonBinding.requestLibrary(context: context, request_id: request_id, requests: requests, method_name: full_method_name(MODULE, __method__.to_s), payload: payload, &block)
|
118
120
|
end
|
119
121
|
|
120
122
|
# INPUT: ParamsOfGetCodeSalt
|
@@ -123,7 +125,7 @@ module TonClient
|
|
123
125
|
# RESPONSE: ResultOfGetCodeSalt
|
124
126
|
# salt: String<Optional> - # # Contract code salt if present. # # BOC encoded as base64 or BOC handle
|
125
127
|
def get_code_salt(payload, &block)
|
126
|
-
TonBinding.requestLibrary(context: context, method_name: full_method_name(MODULE, __method__.to_s), payload: payload, &block)
|
128
|
+
TonBinding.requestLibrary(context: context, request_id: request_id, requests: requests, method_name: full_method_name(MODULE, __method__.to_s), payload: payload, &block)
|
127
129
|
end
|
128
130
|
|
129
131
|
# INPUT: ParamsOfSetCodeSalt
|
@@ -133,7 +135,7 @@ module TonClient
|
|
133
135
|
# RESPONSE: ResultOfSetCodeSalt
|
134
136
|
# code: String - # # Contract code with salt set. # # BOC encoded as base64 or BOC handle
|
135
137
|
def set_code_salt(payload, &block)
|
136
|
-
TonBinding.requestLibrary(context: context, method_name: full_method_name(MODULE, __method__.to_s), payload: payload, &block)
|
138
|
+
TonBinding.requestLibrary(context: context, request_id: request_id, requests: requests, method_name: full_method_name(MODULE, __method__.to_s), payload: payload, &block)
|
137
139
|
end
|
138
140
|
|
139
141
|
# INPUT: ParamsOfDecodeTvc
|
@@ -152,7 +154,7 @@ module TonClient
|
|
152
154
|
# split_depth: Number<Optional> - # # Is present and non-zero only in instances of large smart contracts
|
153
155
|
# compiler_version: String<Optional> - # # Compiler version, for example 'sol 0.49.0'
|
154
156
|
def decode_tvc(payload, &block)
|
155
|
-
TonBinding.requestLibrary(context: context, method_name: full_method_name(MODULE, __method__.to_s), payload: payload, &block)
|
157
|
+
TonBinding.requestLibrary(context: context, request_id: request_id, requests: requests, method_name: full_method_name(MODULE, __method__.to_s), payload: payload, &block)
|
156
158
|
end
|
157
159
|
|
158
160
|
# INPUT: ParamsOfEncodeTvc
|
@@ -166,7 +168,7 @@ module TonClient
|
|
166
168
|
# RESPONSE: ResultOfEncodeTvc
|
167
169
|
# tvc: String - # # Contract TVC image BOC encoded as base64 or BOC handle of boc_cache parameter was specified
|
168
170
|
def encode_tvc(payload, &block)
|
169
|
-
TonBinding.requestLibrary(context: context, method_name: full_method_name(MODULE, __method__.to_s), payload: payload, &block)
|
171
|
+
TonBinding.requestLibrary(context: context, request_id: request_id, requests: requests, method_name: full_method_name(MODULE, __method__.to_s), payload: payload, &block)
|
170
172
|
end
|
171
173
|
|
172
174
|
# INPUT: ParamsOfEncodeExternalInMessage
|
@@ -179,7 +181,7 @@ module TonClient
|
|
179
181
|
# message: String - # # Message BOC encoded with `base64`.
|
180
182
|
# message_id: String - # # Message id.
|
181
183
|
def encode_external_in_message(payload, &block)
|
182
|
-
TonBinding.requestLibrary(context: context, method_name: full_method_name(MODULE, __method__.to_s), payload: payload, &block)
|
184
|
+
TonBinding.requestLibrary(context: context, request_id: request_id, requests: requests, method_name: full_method_name(MODULE, __method__.to_s), payload: payload, &block)
|
183
185
|
end
|
184
186
|
|
185
187
|
# INPUT: ParamsOfGetCompilerVersion
|
@@ -187,7 +189,7 @@ module TonClient
|
|
187
189
|
# RESPONSE: ResultOfGetCompilerVersion
|
188
190
|
# version: String<Optional> - # # Compiler version, for example 'sol 0.49.0'
|
189
191
|
def get_compiler_version(payload, &block)
|
190
|
-
TonBinding.requestLibrary(context: context, method_name: full_method_name(MODULE, __method__.to_s), payload: payload, &block)
|
192
|
+
TonBinding.requestLibrary(context: context, request_id: request_id, requests: requests, method_name: full_method_name(MODULE, __method__.to_s), payload: payload, &block)
|
191
193
|
end
|
192
194
|
|
193
195
|
end
|
@@ -3,67 +3,74 @@ module TonClient
|
|
3
3
|
class Client
|
4
4
|
include CommonInstanceHelpers
|
5
5
|
|
6
|
-
attr_reader :context, :context_config
|
6
|
+
attr_reader :context, :context_config, :request_id, :requests
|
7
7
|
private_accessor :_crypto, :_abi, :_boc, :_processing, :_utils, :_tvm, :_net, :_debot, :_proofs
|
8
8
|
MODULE = self.to_s.downcase.gsub(/^(.+::|)(\w+)$/, '\2').freeze
|
9
9
|
|
10
10
|
def initialize(context_config: {})
|
11
11
|
@context_config = context_config
|
12
|
+
@request_id = Concurrent::AtomicFixnum.new(1)
|
13
|
+
@requests = Concurrent::Hash.new()
|
12
14
|
config = TonBinding.make_string(context_config.to_json)
|
13
15
|
context_ptr = TonBinding.tc_create_context(config)
|
14
16
|
@context = TonBinding.read_string_to_hash(context_ptr)['result']
|
17
|
+
ObjectSpace.define_finalizer(self, self.class.finalize(@context))
|
15
18
|
end
|
16
19
|
|
17
|
-
def
|
18
|
-
|
20
|
+
def self.finalize(ctx)
|
21
|
+
Proc.new do
|
22
|
+
if (ctx != nil) && (ctx > 0)
|
23
|
+
TonBinding.tc_destroy_context(ctx)
|
24
|
+
end
|
25
|
+
end
|
19
26
|
end
|
20
27
|
|
21
28
|
def crypto
|
22
|
-
_crypto ||= Crypto.new(context: context)
|
29
|
+
_crypto ||= Crypto.new(context: context, request_id: request_id, requests: requests)
|
23
30
|
end
|
24
31
|
|
25
32
|
def abi
|
26
|
-
_abi ||= Abi.new(context: context)
|
33
|
+
_abi ||= Abi.new(context: context, request_id: request_id, requests: requests)
|
27
34
|
end
|
28
35
|
|
29
36
|
def boc
|
30
|
-
_boc ||= Boc.new(context: context)
|
37
|
+
_boc ||= Boc.new(context: context, request_id: request_id, requests: requests)
|
31
38
|
end
|
32
39
|
|
33
40
|
def processing
|
34
|
-
_processing ||= Processing.new(context: context)
|
41
|
+
_processing ||= Processing.new(context: context, request_id: request_id, requests: requests)
|
35
42
|
end
|
36
43
|
|
37
44
|
def utils
|
38
|
-
_utils ||= Utils.new(context: context)
|
45
|
+
_utils ||= Utils.new(context: context, request_id: request_id, requests: requests)
|
39
46
|
end
|
40
47
|
|
41
48
|
def tvm
|
42
|
-
_tvm ||= Tvm.new(context: context)
|
49
|
+
_tvm ||= Tvm.new(context: context, request_id: request_id, requests: requests)
|
43
50
|
end
|
44
51
|
|
45
52
|
def net
|
46
|
-
_net ||= Net.new(context: context)
|
53
|
+
_net ||= Net.new(context: context, request_id: request_id, requests: requests)
|
47
54
|
end
|
48
55
|
|
49
56
|
def debot
|
50
|
-
_debot ||= Debot.new(context: context)
|
57
|
+
_debot ||= Debot.new(context: context, request_id: request_id, requests: requests)
|
51
58
|
end
|
52
59
|
|
53
60
|
def proofs
|
54
|
-
_proofs ||= Proofs.new(context: context)
|
61
|
+
_proofs ||= Proofs.new(context: context, request_id: request_id, requests: requests)
|
55
62
|
end
|
56
63
|
|
57
64
|
# RESPONSE: ResultOfGetApiReference
|
58
65
|
# api: Value -
|
59
66
|
def get_api_reference(&block)
|
60
|
-
TonBinding.requestLibrary(context: context, method_name: full_method_name(MODULE, __method__.to_s), payload: {}, &block)
|
67
|
+
TonBinding.requestLibrary(context: context, request_id: request_id, requests: requests, method_name: full_method_name(MODULE, __method__.to_s), payload: {}, &block)
|
61
68
|
end
|
62
69
|
|
63
70
|
# RESPONSE: ResultOfVersion
|
64
71
|
# version: String - # # Core Library version
|
65
72
|
def version(&block)
|
66
|
-
TonBinding.requestLibrary(context: context, method_name: full_method_name(MODULE, __method__.to_s), payload: {}, &block)
|
73
|
+
TonBinding.requestLibrary(context: context, request_id: request_id, requests: requests, method_name: full_method_name(MODULE, __method__.to_s), payload: {}, &block)
|
67
74
|
end
|
68
75
|
|
69
76
|
# RESPONSE: ClientConfig
|
@@ -74,21 +81,21 @@ module TonClient
|
|
74
81
|
# proofs: ProofsConfig<Optional> -
|
75
82
|
# local_storage_path: String<Optional> - # # For file based storage is a folder name where SDK will store its data. For browser based is a browser async storage key prefix. Default (recommended) value is "~/.tonclient" for native environments and ".tonclient" for web-browser.
|
76
83
|
def config(&block)
|
77
|
-
TonBinding.requestLibrary(context: context, method_name: full_method_name(MODULE, __method__.to_s), payload: {}, &block)
|
84
|
+
TonBinding.requestLibrary(context: context, request_id: request_id, requests: requests, method_name: full_method_name(MODULE, __method__.to_s), payload: {}, &block)
|
78
85
|
end
|
79
86
|
|
80
87
|
# RESPONSE: ResultOfBuildInfo
|
81
88
|
# build_number: Number - # # Build number assigned to this build by the CI.
|
82
89
|
# dependencies: Array - # # Fingerprint of the most important dependencies.
|
83
90
|
def build_info(&block)
|
84
|
-
TonBinding.requestLibrary(context: context, method_name: full_method_name(MODULE, __method__.to_s), payload: {}, &block)
|
91
|
+
TonBinding.requestLibrary(context: context, request_id: request_id, requests: requests, method_name: full_method_name(MODULE, __method__.to_s), payload: {}, &block)
|
85
92
|
end
|
86
93
|
|
87
94
|
# INPUT: ParamsOfResolveAppRequest
|
88
95
|
# app_request_id: Number - # # Request ID received from SDK
|
89
96
|
# result: AppRequestResult - # # Result of request processing
|
90
97
|
def resolve_app_request(payload, &block)
|
91
|
-
TonBinding.requestLibrary(context: context, method_name: full_method_name(MODULE, __method__.to_s), payload: payload, &block)
|
98
|
+
TonBinding.requestLibrary(context: context, request_id: request_id, requests: requests, method_name: full_method_name(MODULE, __method__.to_s), payload: payload, &block)
|
92
99
|
end
|
93
100
|
|
94
101
|
end
|