ton-client-ruby 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +7 -0
- data/lib/ton-client-ruby.rb +42 -0
- data/lib/ton-client-ruby/Binding/binding.rb +212 -0
- data/lib/ton-client-ruby/Binding/struct.rb +21 -0
- data/lib/ton-client-ruby/Client/Abi.rb +52 -0
- data/lib/ton-client-ruby/Client/Boc.rb +68 -0
- data/lib/ton-client-ruby/Client/Client.rb +63 -0
- data/lib/ton-client-ruby/Client/Context.rb +29 -0
- data/lib/ton-client-ruby/Client/Crypto.rb +189 -0
- data/lib/ton-client-ruby/Client/Debot.rb +44 -0
- data/lib/ton-client-ruby/Client/Net.rb +72 -0
- data/lib/ton-client-ruby/Client/Processing.rb +32 -0
- data/lib/ton-client-ruby/Client/Tvm.rb +32 -0
- data/lib/ton-client-ruby/Client/Utils.rb +36 -0
- data/lib/ton-client-ruby/Helpers/CommonHelpers.rb +35 -0
- data/lib/ton-client-ruby/version.rb +3 -0
- metadata +142 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: 0321af077acd0b4c971b583f6448bbb0c9633abfd72be60a9a442bd595f74bc2
|
4
|
+
data.tar.gz: 3e2bca8f73c5dd23dc5c60be5655d2f777d58a5870d1176d3633ef69d0eb52b4
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 242a9a7821f494ef4165d3c3b25d680c194b9be860a766fab753d44b05332a1c5a14e5674347a0af31f52af34e751a980352070000c1cadd67b4949e88faba11
|
7
|
+
data.tar.gz: fdca0400955e2d5010bde1ed0ca3b938f43a9198c315e8bed2cca7d9518bca57ee02f1447576a5dd52b6a1c03b26601fbd641d2c3d3b099ae68beec2ffacef1c
|
@@ -0,0 +1,42 @@
|
|
1
|
+
require 'ffi'
|
2
|
+
require "base64"
|
3
|
+
require 'json'
|
4
|
+
require 'byebug'
|
5
|
+
require 'dotenv'
|
6
|
+
require 'ton-client-ruby/Helpers/CommonHelpers.rb'
|
7
|
+
require 'ton-client-ruby/Binding/struct.rb'
|
8
|
+
require 'ton-client-ruby/Binding/binding.rb'
|
9
|
+
require 'ton-client-ruby/Client/Context.rb'
|
10
|
+
require 'ton-client-ruby/Client/Client.rb'
|
11
|
+
require 'ton-client-ruby/Client/Crypto.rb'
|
12
|
+
require 'ton-client-ruby/Client/Abi.rb'
|
13
|
+
require 'ton-client-ruby/Client/Boc.rb'
|
14
|
+
require 'ton-client-ruby/Client/Net.rb'
|
15
|
+
require 'ton-client-ruby/Client/Processing.rb'
|
16
|
+
require 'ton-client-ruby/Client/Tvm.rb'
|
17
|
+
require 'ton-client-ruby/Client/Utils.rb'
|
18
|
+
require 'ton-client-ruby/version'
|
19
|
+
|
20
|
+
module TonClient
|
21
|
+
|
22
|
+
@@configured = false
|
23
|
+
|
24
|
+
def self.check_configuration
|
25
|
+
raise "Not configured! Please configure TonClient: call ffi_lib(dylib_path)" unless !!@@configured
|
26
|
+
end
|
27
|
+
|
28
|
+
def self.configure
|
29
|
+
yield self
|
30
|
+
end
|
31
|
+
|
32
|
+
def self.ffi_lib(dylib_path = nil)
|
33
|
+
TonBinding.ffi_lib(dylib_path)
|
34
|
+
TonBinding.setup_bindings()
|
35
|
+
@@configured = true
|
36
|
+
end
|
37
|
+
|
38
|
+
def self.create(config: {})
|
39
|
+
check_configuration
|
40
|
+
Client.new(context: Context.new(config: config))
|
41
|
+
end
|
42
|
+
end
|
@@ -0,0 +1,212 @@
|
|
1
|
+
module TonClient
|
2
|
+
module TonBinding
|
3
|
+
@@request_id = 0
|
4
|
+
@@requests = {}
|
5
|
+
|
6
|
+
class Response
|
7
|
+
attr_reader :core
|
8
|
+
attr_accessor :result, :error, :custom_response, :finished, :request_id, :current_response
|
9
|
+
|
10
|
+
def initialize(core: TonClient::TonBinding)
|
11
|
+
@core = core
|
12
|
+
end
|
13
|
+
|
14
|
+
def update(request_id, string_data, response_type, finished)
|
15
|
+
response_hash = core.read_string_to_hash(string_data)
|
16
|
+
self.finished = finished
|
17
|
+
self.request_id = request_id
|
18
|
+
self.current_response = response_hash
|
19
|
+
case response_type
|
20
|
+
when 0
|
21
|
+
# result
|
22
|
+
self.result = response_hash
|
23
|
+
when 1
|
24
|
+
# error
|
25
|
+
self.error = response_hash
|
26
|
+
else
|
27
|
+
# another
|
28
|
+
if response_type >= 100
|
29
|
+
self.custom_responses = response_hash
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
34
|
+
|
35
|
+
def self.generate_request_id
|
36
|
+
@@request_id = 0 if @@request_id == 4294967295
|
37
|
+
@@request_id += 1
|
38
|
+
end
|
39
|
+
|
40
|
+
def self.get_request(id)
|
41
|
+
@@requests[id]
|
42
|
+
end
|
43
|
+
|
44
|
+
def self.delete_request(id)
|
45
|
+
@@requests[id] = nil
|
46
|
+
end
|
47
|
+
|
48
|
+
def self.set_request(id, &request_block)
|
49
|
+
@@requests[id] = request_block
|
50
|
+
end
|
51
|
+
end
|
52
|
+
end
|
53
|
+
|
54
|
+
|
55
|
+
module TonClient
|
56
|
+
|
57
|
+
module TonBinding
|
58
|
+
extend FFI::Library
|
59
|
+
ffi_lib FFI::Library::LIBC
|
60
|
+
|
61
|
+
# memory allocators
|
62
|
+
attach_function :malloc, [:size_t], :pointer
|
63
|
+
attach_function :calloc, [:size_t], :pointer
|
64
|
+
attach_function :valloc, [:size_t], :pointer
|
65
|
+
attach_function :realloc, [:pointer, :size_t], :pointer
|
66
|
+
attach_function :free, [:pointer], :void
|
67
|
+
|
68
|
+
# memory movers
|
69
|
+
attach_function :memcpy, [:pointer, :pointer, :size_t], :pointer
|
70
|
+
attach_function :bcopy, [:pointer, :pointer, :size_t], :void
|
71
|
+
|
72
|
+
def self.setup_bindings
|
73
|
+
|
74
|
+
# tc_string_handle_t* tc_create_context(tc_string_data_t config);
|
75
|
+
# attach_function :tc_create_context, [TcStringDataT.by_value], TcStringHandleT.by_ref
|
76
|
+
attach_function :tc_create_context, [TcStringDataT.by_value], :pointer
|
77
|
+
|
78
|
+
# fn tc_destroy_context(context: InteropContext)
|
79
|
+
attach_function :tc_destroy_context, [:uint32], :void
|
80
|
+
|
81
|
+
# tc_string_handle_t* tc_request_sync(
|
82
|
+
# uint32_t context,
|
83
|
+
# tc_string_data_t function_name,
|
84
|
+
# tc_string_data_t function_params_json);
|
85
|
+
# attach_function :tc_request_sync, [:uint32, TcStringDataT.by_value, TcStringDataT.by_value], TcStringHandleT.by_ref
|
86
|
+
attach_function :tc_request_sync, [:uint32, TcStringDataT.by_value, TcStringDataT.by_value], :pointer
|
87
|
+
|
88
|
+
# enum tc_response_types_t {
|
89
|
+
# tc_response_success = 0,
|
90
|
+
# tc_response_error = 1,
|
91
|
+
# tc_response_nop = 2,
|
92
|
+
# tc_response_custom = 100,
|
93
|
+
# };
|
94
|
+
# typedef void (*tc_response_handler_t)(
|
95
|
+
# uint32_t request_id,
|
96
|
+
# tc_string_data_t params_json,
|
97
|
+
# uint32_t response_type,
|
98
|
+
# bool finished);
|
99
|
+
callback :tc_response_handler_t, [:uint32, TcStringDataT.by_value, :uint32, :bool], :void
|
100
|
+
|
101
|
+
# void tc_request(
|
102
|
+
# uint32_t context,
|
103
|
+
# tc_string_data_t function_name,
|
104
|
+
# tc_string_data_t function_params_json,
|
105
|
+
# uint32_t request_id,
|
106
|
+
# tc_response_handler_t response_handler);
|
107
|
+
attach_function :tc_request, [:uint32, TcStringDataT.by_value, TcStringDataT.by_value, :uint32, :tc_response_handler_t], :void
|
108
|
+
|
109
|
+
# tc_string_data_t tc_read_string(const tc_string_handle_t* handle);
|
110
|
+
# attach_function :tc_read_string, [TcStringHandleT.by_ref], TcStringDataT.by_value
|
111
|
+
attach_function :tc_read_string, [:pointer], TcStringDataT.by_value
|
112
|
+
|
113
|
+
# void tc_destroy_string(const tc_string_handle_t* handle)
|
114
|
+
# attach_function :tc_destroy_string, [TcStringHandleT.by_ref], :void
|
115
|
+
attach_function :tc_destroy_string, [:pointer], :void
|
116
|
+
end
|
117
|
+
|
118
|
+
def self.make_string(string)
|
119
|
+
result = TonBinding::TcStringDataT.new
|
120
|
+
result[:content] = FFI::MemoryPointer.from_string(string)
|
121
|
+
result[:len] = string.bytesize
|
122
|
+
result
|
123
|
+
end
|
124
|
+
|
125
|
+
# def self.read_string(tc_string_handle)
|
126
|
+
# is_ref = tc_string_handle.class == TonClient::TonBinding::TcStringHandleT
|
127
|
+
# if is_ref
|
128
|
+
# string = tc_read_string(tc_string_handle)
|
129
|
+
# else
|
130
|
+
# string = tc_string_handle
|
131
|
+
# end
|
132
|
+
|
133
|
+
# if string[:content].address > 1
|
134
|
+
# string = string[:content].read_string(string[:len]).force_encoding('UTF-8') + ''
|
135
|
+
# tc_destroy_string(tc_string_handle) if is_ref
|
136
|
+
# return string
|
137
|
+
# end
|
138
|
+
# nil
|
139
|
+
# end
|
140
|
+
|
141
|
+
def self.read_string(tc_string_handle)
|
142
|
+
is_ref = tc_string_handle.class == FFI::Pointer
|
143
|
+
if is_ref
|
144
|
+
string = tc_read_string(tc_string_handle)
|
145
|
+
else
|
146
|
+
string = tc_string_handle
|
147
|
+
end
|
148
|
+
|
149
|
+
if string[:content].address > 1
|
150
|
+
# string = string[:content].read_string(string[:len]).force_encoding('UTF-8') + ''
|
151
|
+
# tc_destroy_string(tc_string_handle) if is_ref
|
152
|
+
# return string
|
153
|
+
return string[:content].read_string(string[:len]).force_encoding('UTF-8') + ''
|
154
|
+
end
|
155
|
+
nil
|
156
|
+
ensure
|
157
|
+
tc_destroy_string(tc_string_handle) if is_ref
|
158
|
+
end
|
159
|
+
|
160
|
+
def self.read_string_to_hash(tc_string_handle_t_ref)
|
161
|
+
json_string = read_string(tc_string_handle_t_ref)
|
162
|
+
JSON.parse(json_string, {max_nesting: false}) if json_string
|
163
|
+
end
|
164
|
+
|
165
|
+
def self.send_request_sync(context: 1, method_name: '', payload: {})
|
166
|
+
raise 'context not found' unless context
|
167
|
+
raise 'method_name is empty' if method_name.empty?
|
168
|
+
|
169
|
+
method_name_string = make_string(method_name)
|
170
|
+
payload_string = make_string(payload.to_json)
|
171
|
+
|
172
|
+
sdk_json_response = tc_request_sync(context, method_name_string, payload_string)
|
173
|
+
response = read_string_to_hash(sdk_json_response)
|
174
|
+
|
175
|
+
return response['result'] if response['result']
|
176
|
+
return response['error'] if response['error']
|
177
|
+
end
|
178
|
+
|
179
|
+
def self.send_request(context: 1, method_name: '', payload: {}, request_id: 1, &block)
|
180
|
+
raise 'context not found' unless context
|
181
|
+
raise 'method_name is empty' if method_name.empty?
|
182
|
+
|
183
|
+
if block
|
184
|
+
method_name_string = make_string(method_name)
|
185
|
+
payload_string = make_string(payload.to_json)
|
186
|
+
tc_request(context, method_name_string, payload_string, request_id, &block)
|
187
|
+
end
|
188
|
+
end
|
189
|
+
|
190
|
+
# block = { |response| }
|
191
|
+
def self.requestLibrary(context: 1, method_name: '', payload: {}, &block)
|
192
|
+
request_id = generate_request_id
|
193
|
+
set_request(request_id, &block)
|
194
|
+
send_request(context: context, method_name: method_name, payload: payload, request_id: request_id) do |request_id, string_data, response_type, finished|
|
195
|
+
if get_request(request_id)
|
196
|
+
response = Response.new
|
197
|
+
response.update(request_id, string_data, response_type, finished)
|
198
|
+
get_request(request_id).call(response)
|
199
|
+
delete_request(request_id) if finished
|
200
|
+
end
|
201
|
+
end
|
202
|
+
end
|
203
|
+
|
204
|
+
end
|
205
|
+
end
|
206
|
+
|
207
|
+
|
208
|
+
|
209
|
+
|
210
|
+
|
211
|
+
|
212
|
+
|
@@ -0,0 +1,21 @@
|
|
1
|
+
module TonClient
|
2
|
+
module TonBinding
|
3
|
+
|
4
|
+
# typedef struct {
|
5
|
+
# const char* content;
|
6
|
+
# uint32_t len;
|
7
|
+
# } tc_string_data_t;
|
8
|
+
class TcStringDataT < FFI::Struct
|
9
|
+
layout :content, :pointer,
|
10
|
+
:len, :uint32
|
11
|
+
end
|
12
|
+
|
13
|
+
|
14
|
+
# typedef struct {
|
15
|
+
# } tc_string_handle_t;
|
16
|
+
class TcStringHandleT < FFI::Struct
|
17
|
+
layout :content, :pointer,
|
18
|
+
:len, :uint32
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
@@ -0,0 +1,52 @@
|
|
1
|
+
module TonClient
|
2
|
+
|
3
|
+
class Abi
|
4
|
+
include CommonInstanceHelpers
|
5
|
+
|
6
|
+
attr_reader :core, :context
|
7
|
+
MODULE = self.to_s.downcase.gsub(/^(.+::|)(\w+)$/, '\2').freeze
|
8
|
+
|
9
|
+
def initialize(context: Context.new, core: TonClient::TonBinding)
|
10
|
+
@context = context
|
11
|
+
@core = core
|
12
|
+
end
|
13
|
+
|
14
|
+
def encode_message_body(payload, &block)
|
15
|
+
core.requestLibrary(context: context.id, method_name: full_method_name(MODULE, __method__.to_s), payload: payload, &block)
|
16
|
+
end
|
17
|
+
|
18
|
+
def attach_signature_to_message_body(payload, &block)
|
19
|
+
core.requestLibrary(context: context.id, method_name: full_method_name(MODULE, __method__.to_s), payload: payload, &block)
|
20
|
+
end
|
21
|
+
|
22
|
+
def encode_message(payload, &block)
|
23
|
+
core.requestLibrary(context: context.id, method_name: full_method_name(MODULE, __method__.to_s), payload: payload, &block)
|
24
|
+
end
|
25
|
+
|
26
|
+
def encode_internal_message(payload, &block)
|
27
|
+
core.requestLibrary(context: context.id, method_name: full_method_name(MODULE, __method__.to_s), payload: payload, &block)
|
28
|
+
end
|
29
|
+
|
30
|
+
def attach_signature(payload, &block)
|
31
|
+
core.requestLibrary(context: context.id, method_name: full_method_name(MODULE, __method__.to_s), payload: payload, &block)
|
32
|
+
end
|
33
|
+
|
34
|
+
def decode_message(payload, &block)
|
35
|
+
core.requestLibrary(context: context.id, method_name: full_method_name(MODULE, __method__.to_s), payload: payload, &block)
|
36
|
+
end
|
37
|
+
|
38
|
+
def decode_message_body(payload, &block)
|
39
|
+
core.requestLibrary(context: context.id, method_name: full_method_name(MODULE, __method__.to_s), payload: payload, &block)
|
40
|
+
end
|
41
|
+
|
42
|
+
def encode_account(payload, &block)
|
43
|
+
core.requestLibrary(context: context.id, method_name: full_method_name(MODULE, __method__.to_s), payload: payload, &block)
|
44
|
+
end
|
45
|
+
end
|
46
|
+
end
|
47
|
+
|
48
|
+
|
49
|
+
|
50
|
+
|
51
|
+
|
52
|
+
|
@@ -0,0 +1,68 @@
|
|
1
|
+
module TonClient
|
2
|
+
|
3
|
+
class Boc
|
4
|
+
include CommonInstanceHelpers
|
5
|
+
|
6
|
+
attr_reader :core, :context
|
7
|
+
MODULE = self.to_s.downcase.gsub(/^(.+::|)(\w+)$/, '\2').freeze
|
8
|
+
|
9
|
+
def initialize(context: Context.new, core: TonClient::TonBinding)
|
10
|
+
@context = context
|
11
|
+
@core = core
|
12
|
+
end
|
13
|
+
|
14
|
+
def parse_message(payload, &block)
|
15
|
+
core.requestLibrary(context: context.id, method_name: full_method_name(MODULE, __method__.to_s), payload: payload, &block)
|
16
|
+
end
|
17
|
+
|
18
|
+
def parse_transaction(payload, &block)
|
19
|
+
core.requestLibrary(context: context.id, method_name: full_method_name(MODULE, __method__.to_s), payload: payload, &block)
|
20
|
+
end
|
21
|
+
|
22
|
+
def parse_account(payload, &block)
|
23
|
+
core.requestLibrary(context: context.id, method_name: full_method_name(MODULE, __method__.to_s), payload: payload, &block)
|
24
|
+
end
|
25
|
+
|
26
|
+
def parse_block(payload, &block)
|
27
|
+
core.requestLibrary(context: context.id, method_name: full_method_name(MODULE, __method__.to_s), payload: payload, &block)
|
28
|
+
end
|
29
|
+
|
30
|
+
def parse_shardstate(payload, &block)
|
31
|
+
core.requestLibrary(context: context.id, method_name: full_method_name(MODULE, __method__.to_s), payload: payload, &block)
|
32
|
+
end
|
33
|
+
|
34
|
+
def get_blockchain_config(payload, &block)
|
35
|
+
core.requestLibrary(context: context.id, method_name: full_method_name(MODULE, __method__.to_s), payload: payload, &block)
|
36
|
+
end
|
37
|
+
|
38
|
+
def get_boc_hash(payload, &block)
|
39
|
+
core.requestLibrary(context: context.id, method_name: full_method_name(MODULE, __method__.to_s), payload: payload, &block)
|
40
|
+
end
|
41
|
+
|
42
|
+
def get_code_from_tvc(payload, &block)
|
43
|
+
core.requestLibrary(context: context.id, method_name: full_method_name(MODULE, __method__.to_s), payload: payload, &block)
|
44
|
+
end
|
45
|
+
|
46
|
+
def cache_get(payload, &block)
|
47
|
+
core.requestLibrary(context: context.id, method_name: full_method_name(MODULE, __method__.to_s), payload: payload, &block)
|
48
|
+
end
|
49
|
+
|
50
|
+
def cache_set(payload, &block)
|
51
|
+
core.requestLibrary(context: context.id, method_name: full_method_name(MODULE, __method__.to_s), payload: payload, &block)
|
52
|
+
end
|
53
|
+
|
54
|
+
def cache_unpin(payload, &block)
|
55
|
+
core.requestLibrary(context: context.id, method_name: full_method_name(MODULE, __method__.to_s), payload: payload, &block)
|
56
|
+
end
|
57
|
+
|
58
|
+
def encode_boc(payload, &block)
|
59
|
+
core.requestLibrary(context: context.id, method_name: full_method_name(MODULE, __method__.to_s), payload: payload, &block)
|
60
|
+
end
|
61
|
+
end
|
62
|
+
end
|
63
|
+
|
64
|
+
|
65
|
+
|
66
|
+
|
67
|
+
|
68
|
+
|
@@ -0,0 +1,63 @@
|
|
1
|
+
module TonClient
|
2
|
+
|
3
|
+
class Client
|
4
|
+
include CommonInstanceHelpers
|
5
|
+
|
6
|
+
attr_reader :core, :context
|
7
|
+
private_accessor :_crypto, :_abi, :_boc, :_net, :_processing, :_tvm, :_utils
|
8
|
+
MODULE = self.to_s.downcase.gsub(/^(.+::|)(\w+)$/, '\2').freeze
|
9
|
+
|
10
|
+
def initialize(context: Context.new, core: TonClient::TonBinding)
|
11
|
+
@context = context
|
12
|
+
@core = core
|
13
|
+
end
|
14
|
+
|
15
|
+
def version(&block)
|
16
|
+
core.requestLibrary(context: context.id, method_name: full_method_name(MODULE, __method__.to_s), payload: {}, &block)
|
17
|
+
end
|
18
|
+
|
19
|
+
def get_api_reference(&block)
|
20
|
+
core.requestLibrary(context: context.id, method_name: full_method_name(MODULE, __method__.to_s), payload: {}, &block)
|
21
|
+
end
|
22
|
+
|
23
|
+
def build_info(&block)
|
24
|
+
core.requestLibrary(context: context.id, method_name: full_method_name(MODULE, __method__.to_s), payload: {}, &block)
|
25
|
+
end
|
26
|
+
|
27
|
+
def resolve_app_request(&block)
|
28
|
+
core.requestLibrary(context: context.id, method_name: full_method_name(MODULE, __method__.to_s), payload: {}, &block)
|
29
|
+
end
|
30
|
+
|
31
|
+
def destroy_context
|
32
|
+
core.tc_destroy_context(context.id)
|
33
|
+
end
|
34
|
+
|
35
|
+
def crypto
|
36
|
+
_crypto ||= Crypto.new(context: context)
|
37
|
+
end
|
38
|
+
|
39
|
+
def abi
|
40
|
+
_abi ||= Abi.new(context: context)
|
41
|
+
end
|
42
|
+
|
43
|
+
def boc
|
44
|
+
_boc ||= Boc.new(context: context)
|
45
|
+
end
|
46
|
+
|
47
|
+
def net
|
48
|
+
_net ||= Net.new(context: context)
|
49
|
+
end
|
50
|
+
|
51
|
+
def processing
|
52
|
+
_processing ||= Processing.new(context: context)
|
53
|
+
end
|
54
|
+
|
55
|
+
def tvm
|
56
|
+
_tvm ||= Tvm.new(context: context)
|
57
|
+
end
|
58
|
+
|
59
|
+
def utils
|
60
|
+
_utils ||= Utils.new(context: context)
|
61
|
+
end
|
62
|
+
end
|
63
|
+
end
|
@@ -0,0 +1,29 @@
|
|
1
|
+
module TonClient
|
2
|
+
class Context
|
3
|
+
|
4
|
+
attr_reader :id
|
5
|
+
|
6
|
+
def initialize(config: {})
|
7
|
+
TonClient.check_configuration
|
8
|
+
@config = TonBinding.make_string(config.to_json)
|
9
|
+
context = TonBinding.tc_create_context(@config)
|
10
|
+
@id = TonBinding.read_string_to_hash(context)['result']
|
11
|
+
end
|
12
|
+
|
13
|
+
def config=(value = {})
|
14
|
+
@config = TonBinding.make_string(value.to_json)
|
15
|
+
end
|
16
|
+
|
17
|
+
def config
|
18
|
+
TonBinding.read_string_to_hash(@config)
|
19
|
+
end
|
20
|
+
|
21
|
+
def destroy
|
22
|
+
TonBinding.tc_destroy_context(id)
|
23
|
+
end
|
24
|
+
|
25
|
+
def self.finalize
|
26
|
+
TonBinding.tc_destroy_context(id)
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
@@ -0,0 +1,189 @@
|
|
1
|
+
module TonClient
|
2
|
+
|
3
|
+
class Crypto
|
4
|
+
|
5
|
+
include CommonInstanceHelpers
|
6
|
+
MODULE = self.to_s.downcase.gsub(/^(.+::|)(\w+)$/, '\2').freeze
|
7
|
+
|
8
|
+
attr_reader :context, :core
|
9
|
+
|
10
|
+
def initialize(context: Context.new, core: TonClient::TonBinding)
|
11
|
+
@context = context
|
12
|
+
@core = core
|
13
|
+
end
|
14
|
+
|
15
|
+
def factorize(payload, &block)
|
16
|
+
core.requestLibrary(context: context.id, method_name: full_method_name(MODULE, __method__.to_s), payload: payload, &block)
|
17
|
+
end
|
18
|
+
|
19
|
+
def modular_power(payload, &block)
|
20
|
+
core.requestLibrary(context: context.id, method_name: full_method_name(MODULE, __method__.to_s), payload: payload, &block)
|
21
|
+
end
|
22
|
+
|
23
|
+
def ton_crc16(payload, &block)
|
24
|
+
core.requestLibrary(context: context.id, method_name: full_method_name(MODULE, __method__.to_s), payload: payload, &block)
|
25
|
+
end
|
26
|
+
|
27
|
+
def generate_random_bytes(payload, &block)
|
28
|
+
core.requestLibrary(context: context.id, method_name: full_method_name(MODULE, __method__.to_s), payload: payload, &block)
|
29
|
+
end
|
30
|
+
|
31
|
+
def convert_public_key_to_ton_safe_format(payload, &block)
|
32
|
+
core.requestLibrary(context: context.id, method_name: full_method_name(MODULE, __method__.to_s), payload: payload, &block)
|
33
|
+
end
|
34
|
+
|
35
|
+
def generate_random_sign_keys(&block)
|
36
|
+
core.requestLibrary(context: context.id, method_name: full_method_name(MODULE, __method__.to_s), &block)
|
37
|
+
end
|
38
|
+
|
39
|
+
def sign(payload, &block)
|
40
|
+
core.requestLibrary(context: context.id, method_name: full_method_name(MODULE, __method__.to_s), payload: payload, &block)
|
41
|
+
end
|
42
|
+
|
43
|
+
def verify_signature(payload, &block)
|
44
|
+
core.requestLibrary(context: context.id, method_name: full_method_name(MODULE, __method__.to_s), payload: payload, &block)
|
45
|
+
end
|
46
|
+
|
47
|
+
def sha256(payload, &block)
|
48
|
+
core.requestLibrary(context: context.id, method_name: full_method_name(MODULE, __method__.to_s), payload: payload, &block)
|
49
|
+
end
|
50
|
+
|
51
|
+
def sha512(payload, &block)
|
52
|
+
payload[:data] = encode_to_base64(payload[:data])
|
53
|
+
core.requestLibrary(context: context.id, method_name: full_method_name(MODULE, __method__.to_s), payload: payload, &block)
|
54
|
+
end
|
55
|
+
|
56
|
+
def scrypt(payload, &block)
|
57
|
+
core.requestLibrary(context: context.id, method_name: full_method_name(MODULE, __method__.to_s), payload: payload, &block)
|
58
|
+
end
|
59
|
+
|
60
|
+
def nacl_sign_keypair_from_secret_key(payload, &block)
|
61
|
+
core.requestLibrary(context: context.id, method_name: full_method_name(MODULE, __method__.to_s), payload: payload, &block)
|
62
|
+
end
|
63
|
+
|
64
|
+
def nacl_sign(payload, &block)
|
65
|
+
core.requestLibrary(context: context.id, method_name: full_method_name(MODULE, __method__.to_s), payload: payload, &block)
|
66
|
+
end
|
67
|
+
|
68
|
+
def nacl_sign_open(payload, &block)
|
69
|
+
core.requestLibrary(context: context.id, method_name: full_method_name(MODULE, __method__.to_s), payload: payload, &block)
|
70
|
+
end
|
71
|
+
|
72
|
+
def nacl_sign_detached(payload, &block)
|
73
|
+
core.requestLibrary(context: context.id, method_name: full_method_name(MODULE, __method__.to_s), payload: payload, &block)
|
74
|
+
end
|
75
|
+
|
76
|
+
def nacl_sign_detached_verify(payload, &block)
|
77
|
+
core.requestLibrary(context: context.id, method_name: full_method_name(MODULE, __method__.to_s), payload: payload, &block)
|
78
|
+
end
|
79
|
+
|
80
|
+
def nacl_box_keypair(&block)
|
81
|
+
core.requestLibrary(context: context.id, method_name: full_method_name(MODULE, __method__.to_s), &block)
|
82
|
+
end
|
83
|
+
|
84
|
+
def nacl_box_keypair_from_secret_key(payload, &block)
|
85
|
+
core.requestLibrary(context: context.id, method_name: full_method_name(MODULE, __method__.to_s), payload: payload, &block)
|
86
|
+
end
|
87
|
+
|
88
|
+
def nacl_box(payload, &block)
|
89
|
+
core.requestLibrary(context: context.id, method_name: full_method_name(MODULE, __method__.to_s), payload: payload, &block)
|
90
|
+
end
|
91
|
+
|
92
|
+
def nacl_box_open(payload, &block)
|
93
|
+
core.requestLibrary(context: context.id, method_name: full_method_name(MODULE, __method__.to_s), payload: payload, &block)
|
94
|
+
end
|
95
|
+
|
96
|
+
def nacl_secret_box(payload, &block)
|
97
|
+
core.requestLibrary(context: context.id, method_name: full_method_name(MODULE, __method__.to_s), payload: payload, &block)
|
98
|
+
end
|
99
|
+
|
100
|
+
def nacl_secret_box_open(payload, &block)
|
101
|
+
core.requestLibrary(context: context.id, method_name: full_method_name(MODULE, __method__.to_s), payload: payload, &block)
|
102
|
+
end
|
103
|
+
|
104
|
+
def mnemonic_words(&block)
|
105
|
+
core.requestLibrary(context: context.id, method_name: full_method_name(MODULE, __method__.to_s), &block)
|
106
|
+
end
|
107
|
+
|
108
|
+
def mnemonic_from_random(payload, &block)
|
109
|
+
core.requestLibrary(context: context.id, method_name: full_method_name(MODULE, __method__.to_s), payload: payload, &block)
|
110
|
+
end
|
111
|
+
|
112
|
+
def mnemonic_from_entropy(payload, &block)
|
113
|
+
core.requestLibrary(context: context.id, method_name: full_method_name(MODULE, __method__.to_s), payload: payload, &block)
|
114
|
+
end
|
115
|
+
|
116
|
+
def mnemonic_verify(payload, &block)
|
117
|
+
core.requestLibrary(context: context.id, method_name: full_method_name(MODULE, __method__.to_s), payload: payload, &block)
|
118
|
+
end
|
119
|
+
|
120
|
+
def mnemonic_derive_sign_keys(payload, &block)
|
121
|
+
core.requestLibrary(context: context.id, method_name: full_method_name(MODULE, __method__.to_s), payload: payload, &block)
|
122
|
+
end
|
123
|
+
|
124
|
+
def hdkey_xprv_from_mnemonic(payload, &block)
|
125
|
+
core.requestLibrary(context: context.id, method_name: full_method_name(MODULE, __method__.to_s), payload: payload, &block)
|
126
|
+
end
|
127
|
+
|
128
|
+
def hdkey_derive_from_xprv(payload, &block)
|
129
|
+
core.requestLibrary(context: context.id, method_name: full_method_name(MODULE, __method__.to_s), payload: payload, &block)
|
130
|
+
end
|
131
|
+
|
132
|
+
def hdkey_derive_from_xprv_path(payload, &block)
|
133
|
+
core.requestLibrary(context: context.id, method_name: full_method_name(MODULE, __method__.to_s), payload: payload, &block)
|
134
|
+
end
|
135
|
+
|
136
|
+
def hdkey_secret_from_xprv(payload, &block)
|
137
|
+
core.requestLibrary(context: context.id, method_name: full_method_name(MODULE, __method__.to_s), payload: payload, &block)
|
138
|
+
end
|
139
|
+
|
140
|
+
def hdkey_public_from_xprv(payload, &block)
|
141
|
+
core.requestLibrary(context: context.id, method_name: full_method_name(MODULE, __method__.to_s), payload: payload, &block)
|
142
|
+
end
|
143
|
+
|
144
|
+
def chacha20(payload, &block)
|
145
|
+
core.requestLibrary(context: context.id, method_name: full_method_name(MODULE, __method__.to_s), payload: payload, &block)
|
146
|
+
end
|
147
|
+
|
148
|
+
def register_signing_box(payload, &block)
|
149
|
+
core.requestLibrary(context: context.id, method_name: full_method_name(MODULE, __method__.to_s), payload: payload, &block)
|
150
|
+
end
|
151
|
+
|
152
|
+
def get_signing_box(payload, &block)
|
153
|
+
core.requestLibrary(context: context.id, method_name: full_method_name(MODULE, __method__.to_s), payload: payload, &block)
|
154
|
+
end
|
155
|
+
|
156
|
+
def signing_box_get_public_key(payload, &block)
|
157
|
+
core.requestLibrary(context: context.id, method_name: full_method_name(MODULE, __method__.to_s), payload: payload, &block)
|
158
|
+
end
|
159
|
+
|
160
|
+
def signing_box_sign(payload, &block)
|
161
|
+
core.requestLibrary(context: context.id, method_name: full_method_name(MODULE, __method__.to_s), payload: payload, &block)
|
162
|
+
end
|
163
|
+
|
164
|
+
def remove_signing_box(payload, &block)
|
165
|
+
core.requestLibrary(context: context.id, method_name: full_method_name(MODULE, __method__.to_s), payload: payload, &block)
|
166
|
+
end
|
167
|
+
|
168
|
+
private
|
169
|
+
|
170
|
+
def base64?(value)
|
171
|
+
value.is_a?(String) && (Base64.encode64(Base64.decode64(value)).strip == value)
|
172
|
+
end
|
173
|
+
|
174
|
+
def encode_to_base64(message)
|
175
|
+
return message if base64?(message)
|
176
|
+
Base64.encode64(message.force_encoding('UTF-8')).strip
|
177
|
+
end
|
178
|
+
|
179
|
+
end
|
180
|
+
end
|
181
|
+
|
182
|
+
|
183
|
+
|
184
|
+
|
185
|
+
|
186
|
+
|
187
|
+
|
188
|
+
|
189
|
+
|
@@ -0,0 +1,44 @@
|
|
1
|
+
module TonClient
|
2
|
+
|
3
|
+
class Debot
|
4
|
+
include CommonInstanceHelpers
|
5
|
+
|
6
|
+
attr_reader :core, :context
|
7
|
+
MODULE = self.to_s.downcase.gsub(/^(.+::|)(\w+)$/, '\2').freeze
|
8
|
+
|
9
|
+
def initialize(context: Context.new, core: TonClient::TonBinding)
|
10
|
+
@context = context
|
11
|
+
@core = core
|
12
|
+
end
|
13
|
+
|
14
|
+
def init(payload, &block)
|
15
|
+
core.requestLibrary(context: context.id, method_name: full_method_name(MODULE, __method__.to_s), payload: payload, &block)
|
16
|
+
end
|
17
|
+
|
18
|
+
def start(payload, &block)
|
19
|
+
core.requestLibrary(context: context.id, method_name: full_method_name(MODULE, __method__.to_s), payload: payload, &block)
|
20
|
+
end
|
21
|
+
|
22
|
+
def fetch(payload, &block)
|
23
|
+
core.requestLibrary(context: context.id, method_name: full_method_name(MODULE, __method__.to_s), payload: payload, &block)
|
24
|
+
end
|
25
|
+
|
26
|
+
def execute(payload, &block)
|
27
|
+
core.requestLibrary(context: context.id, method_name: full_method_name(MODULE, __method__.to_s), payload: payload, &block)
|
28
|
+
end
|
29
|
+
|
30
|
+
def send(payload, &block)
|
31
|
+
core.requestLibrary(context: context.id, method_name: full_method_name(MODULE, __method__.to_s), payload: payload, &block)
|
32
|
+
end
|
33
|
+
|
34
|
+
def remove(payload, &block)
|
35
|
+
core.requestLibrary(context: context.id, method_name: full_method_name(MODULE, __method__.to_s), payload: payload, &block)
|
36
|
+
end
|
37
|
+
end
|
38
|
+
end
|
39
|
+
|
40
|
+
|
41
|
+
|
42
|
+
|
43
|
+
|
44
|
+
|
@@ -0,0 +1,72 @@
|
|
1
|
+
module TonClient
|
2
|
+
|
3
|
+
class Net
|
4
|
+
include CommonInstanceHelpers
|
5
|
+
|
6
|
+
attr_reader :core, :context
|
7
|
+
MODULE = self.to_s.downcase.gsub(/^(.+::|)(\w+)$/, '\2').freeze
|
8
|
+
|
9
|
+
def initialize(context: Context.new, core: TonClient::TonBinding)
|
10
|
+
@context = context
|
11
|
+
@core = core
|
12
|
+
end
|
13
|
+
|
14
|
+
def query(payload, &block)
|
15
|
+
core.requestLibrary(context: context.id, method_name: full_method_name(MODULE, __method__.to_s), payload: payload, &block)
|
16
|
+
end
|
17
|
+
|
18
|
+
def batch_query(payload, &block)
|
19
|
+
core.requestLibrary(context: context.id, method_name: full_method_name(MODULE, __method__.to_s), payload: payload, &block)
|
20
|
+
end
|
21
|
+
|
22
|
+
def query_collection(payload, &block)
|
23
|
+
core.requestLibrary(context: context.id, method_name: full_method_name(MODULE, __method__.to_s), payload: payload, &block)
|
24
|
+
end
|
25
|
+
|
26
|
+
def aggregate_collection(payload, &block)
|
27
|
+
core.requestLibrary(context: context.id, method_name: full_method_name(MODULE, __method__.to_s), payload: payload, &block)
|
28
|
+
end
|
29
|
+
|
30
|
+
def wait_for_collection(payload, &block)
|
31
|
+
core.requestLibrary(context: context.id, method_name: full_method_name(MODULE, __method__.to_s), payload: payload, &block)
|
32
|
+
end
|
33
|
+
|
34
|
+
def unsubscribe(payload, &block)
|
35
|
+
core.requestLibrary(context: context.id, method_name: full_method_name(MODULE, __method__.to_s), payload: payload, &block)
|
36
|
+
end
|
37
|
+
|
38
|
+
def subscribe_collection(payload, &block)
|
39
|
+
core.requestLibrary(context: context.id, method_name: full_method_name(MODULE, __method__.to_s), payload: payload, &block)
|
40
|
+
end
|
41
|
+
|
42
|
+
def suspend(payload, &block)
|
43
|
+
core.requestLibrary(context: context.id, method_name: full_method_name(MODULE, __method__.to_s), payload: payload, &block)
|
44
|
+
end
|
45
|
+
|
46
|
+
def resume(payload, &block)
|
47
|
+
core.requestLibrary(context: context.id, method_name: full_method_name(MODULE, __method__.to_s), payload: payload, &block)
|
48
|
+
end
|
49
|
+
|
50
|
+
def find_last_shard_block(payload, &block)
|
51
|
+
core.requestLibrary(context: context.id, method_name: full_method_name(MODULE, __method__.to_s), payload: payload, &block)
|
52
|
+
end
|
53
|
+
|
54
|
+
def fetch_endpoints(payload, &block)
|
55
|
+
core.requestLibrary(context: context.id, method_name: full_method_name(MODULE, __method__.to_s), payload: payload, &block)
|
56
|
+
end
|
57
|
+
|
58
|
+
def set_endpoints(payload, &block)
|
59
|
+
core.requestLibrary(context: context.id, method_name: full_method_name(MODULE, __method__.to_s), payload: payload, &block)
|
60
|
+
end
|
61
|
+
|
62
|
+
def query_counterparties(payload, &block)
|
63
|
+
core.requestLibrary(context: context.id, method_name: full_method_name(MODULE, __method__.to_s), payload: payload, &block)
|
64
|
+
end
|
65
|
+
end
|
66
|
+
end
|
67
|
+
|
68
|
+
|
69
|
+
|
70
|
+
|
71
|
+
|
72
|
+
|
@@ -0,0 +1,32 @@
|
|
1
|
+
module TonClient
|
2
|
+
|
3
|
+
class Processing
|
4
|
+
include CommonInstanceHelpers
|
5
|
+
|
6
|
+
attr_reader :core, :context
|
7
|
+
MODULE = self.to_s.downcase.gsub(/^(.+::|)(\w+)$/, '\2').freeze
|
8
|
+
|
9
|
+
def initialize(context: Context.new, core: TonClient::TonBinding)
|
10
|
+
@context = context
|
11
|
+
@core = core
|
12
|
+
end
|
13
|
+
|
14
|
+
def send_message(payload, &block)
|
15
|
+
core.requestLibrary(context: context.id, method_name: full_method_name(MODULE, __method__.to_s), payload: payload, &block)
|
16
|
+
end
|
17
|
+
|
18
|
+
def wait_for_transaction(payload, &block)
|
19
|
+
core.requestLibrary(context: context.id, method_name: full_method_name(MODULE, __method__.to_s), payload: payload, &block)
|
20
|
+
end
|
21
|
+
|
22
|
+
def process_message(payload, &block)
|
23
|
+
core.requestLibrary(context: context.id, method_name: full_method_name(MODULE, __method__.to_s), payload: payload, &block)
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
27
|
+
|
28
|
+
|
29
|
+
|
30
|
+
|
31
|
+
|
32
|
+
|
@@ -0,0 +1,32 @@
|
|
1
|
+
module TonClient
|
2
|
+
|
3
|
+
class Tvm
|
4
|
+
include CommonInstanceHelpers
|
5
|
+
|
6
|
+
attr_reader :core, :context
|
7
|
+
MODULE = self.to_s.downcase.gsub(/^(.+::|)(\w+)$/, '\2').freeze
|
8
|
+
|
9
|
+
def initialize(context: Context.new, core: TonClient::TonBinding)
|
10
|
+
@context = context
|
11
|
+
@core = core
|
12
|
+
end
|
13
|
+
|
14
|
+
def run_executor(payload, &block)
|
15
|
+
core.requestLibrary(context: context.id, method_name: full_method_name(MODULE, __method__.to_s), payload: payload, &block)
|
16
|
+
end
|
17
|
+
|
18
|
+
def run_tvm(payload, &block)
|
19
|
+
core.requestLibrary(context: context.id, method_name: full_method_name(MODULE, __method__.to_s), payload: payload, &block)
|
20
|
+
end
|
21
|
+
|
22
|
+
def run_get(payload, &block)
|
23
|
+
core.requestLibrary(context: context.id, method_name: full_method_name(MODULE, __method__.to_s), payload: payload, &block)
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
27
|
+
|
28
|
+
|
29
|
+
|
30
|
+
|
31
|
+
|
32
|
+
|
@@ -0,0 +1,36 @@
|
|
1
|
+
module TonClient
|
2
|
+
|
3
|
+
class Utils
|
4
|
+
include CommonInstanceHelpers
|
5
|
+
|
6
|
+
attr_reader :core, :context
|
7
|
+
MODULE = self.to_s.downcase.gsub(/^(.+::|)(\w+)$/, '\2').freeze
|
8
|
+
|
9
|
+
def initialize(context: Context.new, core: TonClient::TonBinding)
|
10
|
+
@context = context
|
11
|
+
@core = core
|
12
|
+
end
|
13
|
+
|
14
|
+
def convert_address(payload, &block)
|
15
|
+
core.requestLibrary(context: context.id, method_name: full_method_name(MODULE, __method__.to_s), payload: payload, &block)
|
16
|
+
end
|
17
|
+
|
18
|
+
def calc_storage_fee(payload, &block)
|
19
|
+
core.requestLibrary(context: context.id, method_name: full_method_name(MODULE, __method__.to_s), payload: payload, &block)
|
20
|
+
end
|
21
|
+
|
22
|
+
def compress_zstd(payload, &block)
|
23
|
+
core.requestLibrary(context: context.id, method_name: full_method_name(MODULE, __method__.to_s), payload: payload, &block)
|
24
|
+
end
|
25
|
+
|
26
|
+
def decompress_zstd(payload, &block)
|
27
|
+
core.requestLibrary(context: context.id, method_name: full_method_name(MODULE, __method__.to_s), payload: payload, &block)
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
31
|
+
|
32
|
+
|
33
|
+
|
34
|
+
|
35
|
+
|
36
|
+
|
@@ -0,0 +1,35 @@
|
|
1
|
+
|
2
|
+
module CommonClassHelpers
|
3
|
+
|
4
|
+
def class_attr_accessor(*names)
|
5
|
+
names.each do |name|
|
6
|
+
class_variable_set("@@#{name.to_s}", nil)
|
7
|
+
|
8
|
+
define_singleton_method("#{name.to_s}=".to_sym) do |attr|
|
9
|
+
class_variable_set("@@#{name.to_s}", attr)
|
10
|
+
end
|
11
|
+
|
12
|
+
define_singleton_method(name.to_sym) do
|
13
|
+
class_variable_get("@@#{name.to_s}")
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
17
|
+
|
18
|
+
end
|
19
|
+
|
20
|
+
|
21
|
+
module CommonInstanceHelpers
|
22
|
+
|
23
|
+
def full_method_name(module_name, method_name)
|
24
|
+
"#{module_name}.#{method_name}"
|
25
|
+
end
|
26
|
+
end
|
27
|
+
|
28
|
+
class << Object
|
29
|
+
def private_accessor(*names)
|
30
|
+
names.each do |name|
|
31
|
+
attr_accessor name
|
32
|
+
private "#{name}="
|
33
|
+
end
|
34
|
+
end
|
35
|
+
end
|
metadata
ADDED
@@ -0,0 +1,142 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: ton-client-ruby
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 1.0.0
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- nerzh
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
date: 2021-05-10 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: ffi
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - "~>"
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: 1.13.1
|
20
|
+
type: :runtime
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - "~>"
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: 1.13.1
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: dotenv
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - "~>"
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: 2.7.6
|
34
|
+
type: :runtime
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - "~>"
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: 2.7.6
|
41
|
+
- !ruby/object:Gem::Dependency
|
42
|
+
name: ruby-enum
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
44
|
+
requirements:
|
45
|
+
- - "~>"
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: 0.9.0
|
48
|
+
type: :runtime
|
49
|
+
prerelease: false
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
51
|
+
requirements:
|
52
|
+
- - "~>"
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: 0.9.0
|
55
|
+
- !ruby/object:Gem::Dependency
|
56
|
+
name: bundler
|
57
|
+
requirement: !ruby/object:Gem::Requirement
|
58
|
+
requirements:
|
59
|
+
- - "~>"
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: '2.0'
|
62
|
+
type: :development
|
63
|
+
prerelease: false
|
64
|
+
version_requirements: !ruby/object:Gem::Requirement
|
65
|
+
requirements:
|
66
|
+
- - "~>"
|
67
|
+
- !ruby/object:Gem::Version
|
68
|
+
version: '2.0'
|
69
|
+
- !ruby/object:Gem::Dependency
|
70
|
+
name: byebug
|
71
|
+
requirement: !ruby/object:Gem::Requirement
|
72
|
+
requirements:
|
73
|
+
- - ">="
|
74
|
+
- !ruby/object:Gem::Version
|
75
|
+
version: '0'
|
76
|
+
type: :development
|
77
|
+
prerelease: false
|
78
|
+
version_requirements: !ruby/object:Gem::Requirement
|
79
|
+
requirements:
|
80
|
+
- - ">="
|
81
|
+
- !ruby/object:Gem::Version
|
82
|
+
version: '0'
|
83
|
+
- !ruby/object:Gem::Dependency
|
84
|
+
name: rspec
|
85
|
+
requirement: !ruby/object:Gem::Requirement
|
86
|
+
requirements:
|
87
|
+
- - ">="
|
88
|
+
- !ruby/object:Gem::Version
|
89
|
+
version: '0'
|
90
|
+
type: :development
|
91
|
+
prerelease: false
|
92
|
+
version_requirements: !ruby/object:Gem::Requirement
|
93
|
+
requirements:
|
94
|
+
- - ">="
|
95
|
+
- !ruby/object:Gem::Version
|
96
|
+
version: '0'
|
97
|
+
description: Gem Ton Client Ruby for all ruby projects
|
98
|
+
email:
|
99
|
+
- emptystamp@gmail.com
|
100
|
+
executables: []
|
101
|
+
extensions: []
|
102
|
+
extra_rdoc_files: []
|
103
|
+
files:
|
104
|
+
- lib/ton-client-ruby.rb
|
105
|
+
- lib/ton-client-ruby/Binding/binding.rb
|
106
|
+
- lib/ton-client-ruby/Binding/struct.rb
|
107
|
+
- lib/ton-client-ruby/Client/Abi.rb
|
108
|
+
- lib/ton-client-ruby/Client/Boc.rb
|
109
|
+
- lib/ton-client-ruby/Client/Client.rb
|
110
|
+
- lib/ton-client-ruby/Client/Context.rb
|
111
|
+
- lib/ton-client-ruby/Client/Crypto.rb
|
112
|
+
- lib/ton-client-ruby/Client/Debot.rb
|
113
|
+
- lib/ton-client-ruby/Client/Net.rb
|
114
|
+
- lib/ton-client-ruby/Client/Processing.rb
|
115
|
+
- lib/ton-client-ruby/Client/Tvm.rb
|
116
|
+
- lib/ton-client-ruby/Client/Utils.rb
|
117
|
+
- lib/ton-client-ruby/Helpers/CommonHelpers.rb
|
118
|
+
- lib/ton-client-ruby/version.rb
|
119
|
+
homepage: https://github.com/nerzh/ton-client-ruby
|
120
|
+
licenses:
|
121
|
+
- MIT
|
122
|
+
metadata: {}
|
123
|
+
post_install_message:
|
124
|
+
rdoc_options: []
|
125
|
+
require_paths:
|
126
|
+
- lib
|
127
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
128
|
+
requirements:
|
129
|
+
- - ">="
|
130
|
+
- !ruby/object:Gem::Version
|
131
|
+
version: '0'
|
132
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
133
|
+
requirements:
|
134
|
+
- - ">="
|
135
|
+
- !ruby/object:Gem::Version
|
136
|
+
version: '0'
|
137
|
+
requirements: []
|
138
|
+
rubygems_version: 3.0.9
|
139
|
+
signing_key:
|
140
|
+
specification_version: 4
|
141
|
+
summary: This is gem ton-client-ruby
|
142
|
+
test_files: []
|