ton-client-ruby 1.0.0

Sign up to get free protection for your applications and to get access to all the features.
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: []