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 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
@@ -0,0 +1,3 @@
1
+ module TonClient
2
+ VERSION = "1.0.0"
3
+ 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: []