ton_sdk_client 1.26.0 → 1.34.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/CHANGELOG.md +16 -3
- data/README.md +24 -64
- data/lib/ton_sdk_client/abi.rb +75 -10
- data/lib/ton_sdk_client/boc.rb +29 -0
- data/lib/ton_sdk_client/client.rb +17 -0
- data/lib/ton_sdk_client/config.rb +11 -1
- data/lib/ton_sdk_client/crypto.rb +295 -61
- data/lib/ton_sdk_client/debot.rb +106 -105
- data/lib/ton_sdk_client/helper.rb +1 -1
- data/lib/ton_sdk_client/interop.rb +1 -1
- data/lib/ton_sdk_client/net.rb +25 -5
- data/lib/ton_sdk_client/processing.rb +95 -55
- data/lib/ton_sdk_client/tvm.rb +8 -2
- data/lib/ton_sdk_client/version.rb +2 -2
- metadata +2 -2
@@ -5,24 +5,24 @@ module TonSdk
|
|
5
5
|
# types
|
6
6
|
#
|
7
7
|
module ErrorCode
|
8
|
-
|
9
|
-
|
8
|
+
INVALID_PUBLIC_KEY = 100
|
9
|
+
INVALID_SECRET_KEY = 101
|
10
10
|
INVALID_KEY = 102
|
11
11
|
INVALID_FACTORIZE_CHALLENGE = 106
|
12
|
-
|
12
|
+
INVALID_BIG_INT = 107
|
13
13
|
SCRYPT_FAILED = 108
|
14
|
-
|
14
|
+
INVALID_KEY_SIZE = 109
|
15
15
|
NACL_SECRET_BOX_FAILED = 110
|
16
16
|
NACL_BOX_FAILED = 111
|
17
17
|
NACL_SIGN_FAILED = 112
|
18
18
|
BIP39_INVALID_ENTROPY = 113
|
19
19
|
BIP39_INVALID_PHRASE = 114
|
20
20
|
BIP32_INVALID_KEY = 115
|
21
|
-
|
21
|
+
BIP32_INVALID_DERIVE_PATH = 116
|
22
22
|
BIP39_INVALID_DICTIONARY = 117
|
23
|
-
|
23
|
+
BIP39_INVALID_WORD_COUNT = 118
|
24
24
|
MNEMONIC_GENERATION_FAILED = 119
|
25
|
-
|
25
|
+
MNEMONIC_FROM_ENTROPY_FAILED = 120
|
26
26
|
SIGNING_BOX_NOT_REGISTERED = 121
|
27
27
|
INVALID_SIGNATURE = 122
|
28
28
|
ENCRYPTION_BOX_NOT_REGISTERED = 123
|
@@ -32,6 +32,11 @@ module TonSdk
|
|
32
32
|
ENCRYPT_DATA_ERROR = 127
|
33
33
|
DECRYPT_DATA_ERROR = 128
|
34
34
|
IV_REQUIRED = 129
|
35
|
+
CRYPTO_BOX_NOT_REGISTERED = 130
|
36
|
+
INVALID_CRYPTO_BOX_TYPE = 131
|
37
|
+
CRYPTO_BOX_SECRET_SERIALIZATION_ERROR = 132
|
38
|
+
CRYPTO_BOX_SECRET_DESERIALIZATION_ERROR = 133
|
39
|
+
INVALID_NONCE_SIZE = 134
|
35
40
|
end
|
36
41
|
|
37
42
|
ParamsOfFactorize = KwStruct.new(:composite)
|
@@ -178,7 +183,9 @@ module TonSdk
|
|
178
183
|
ParamsOfSigningBoxSign = KwStruct.new(:signing_box, :unsigned)
|
179
184
|
|
180
185
|
ResultOfSigningBoxSign = KwStruct.new(:signature)
|
186
|
+
|
181
187
|
RegisteredSigningBox = KwStruct.new(:handle)
|
188
|
+
|
182
189
|
ResultOfSigningBoxGetPublicKey = KwStruct.new(:pubkey)
|
183
190
|
|
184
191
|
ParamsOfNaclSignDetachedVerify = KwStruct.new(:unsigned, :signature, :public_) do
|
@@ -194,10 +201,7 @@ module TonSdk
|
|
194
201
|
ResultOfNaclSignDetachedVerify = KwStruct.new(:succeeded)
|
195
202
|
|
196
203
|
class ParamsOfAppSigningBox
|
197
|
-
TYPES = [
|
198
|
-
:get_public_key,
|
199
|
-
:sign
|
200
|
-
]
|
204
|
+
TYPES = [:get_public_key, :sign]
|
201
205
|
|
202
206
|
attr_reader :type_, :unsigned
|
203
207
|
|
@@ -218,11 +222,150 @@ module TonSdk
|
|
218
222
|
end
|
219
223
|
|
220
224
|
EncryptionBoxInfo = KwStruct.new(:hdpath, :algorithm, :options, :public)
|
225
|
+
|
221
226
|
ParamsOfEncryptionBoxGetInfo = KwStruct.new(:encryption_box)
|
227
|
+
|
222
228
|
ResultOfEncryptionBoxGetInfo = KwStruct.new(:info)
|
229
|
+
|
230
|
+
ParamsOfEncryptionBoxEncrypt = KwStruct.new(:encryption_box, :data)
|
231
|
+
|
223
232
|
RegisteredEncryptionBox = KwStruct.new(:handle)
|
233
|
+
|
234
|
+
ResultOfEncryptionBoxEncrypt = KwStruct.new(:data)
|
235
|
+
|
236
|
+
ParamsOfEncryptionBoxDecrypt = KwStruct.new(:encryption_box, :data)
|
237
|
+
|
238
|
+
ResultOfEncryptionBoxDecrypt = KwStruct.new(:data)
|
239
|
+
|
224
240
|
ParamsOfCreateEncryptionBox = KwStruct.new(:algorithm)
|
225
241
|
|
242
|
+
class CryptoBoxSecret
|
243
|
+
TYPES = %i[random_seed_phrase predefined_seed_phrase encrypted_secret]
|
244
|
+
attr_reader :type, :args
|
245
|
+
|
246
|
+
def initialize(type:, **args)
|
247
|
+
unless TYPES.include?(type)
|
248
|
+
raise ArgumentError.new("type #{type} is unknown; known types: #{TYPES}")
|
249
|
+
end
|
250
|
+
@type = type
|
251
|
+
@args = args
|
252
|
+
end
|
253
|
+
|
254
|
+
def to_h
|
255
|
+
hash = case type
|
256
|
+
when :random_seed_phrase
|
257
|
+
{
|
258
|
+
dictionary: args[:dictionary],
|
259
|
+
wordcount: args[:wordcount]
|
260
|
+
}
|
261
|
+
when :predefined_seed_phrase
|
262
|
+
{
|
263
|
+
phrase: args[:phrase],
|
264
|
+
dictionary: args[:dictionary],
|
265
|
+
wordcount: args[:wordcount]
|
266
|
+
}
|
267
|
+
when :encrypted_secret
|
268
|
+
{
|
269
|
+
encrypted_secret: args[:encrypted_secret]
|
270
|
+
}
|
271
|
+
end
|
272
|
+
{
|
273
|
+
type: Helper.sym_to_capitalized_case_str(type)
|
274
|
+
}.merge(hash)
|
275
|
+
end
|
276
|
+
end
|
277
|
+
|
278
|
+
class BoxEncryptionAlgorithm
|
279
|
+
TYPES = %i[cha_cha20 nacl_box nacl_secret_box]
|
280
|
+
attr_reader :type, :args
|
281
|
+
|
282
|
+
def initialize(type:, **args)
|
283
|
+
unless TYPES.include?(type)
|
284
|
+
raise ArgumentError.new("type #{type} is unknown; known types: #{TYPES}")
|
285
|
+
end
|
286
|
+
@type = type
|
287
|
+
@args = args
|
288
|
+
end
|
289
|
+
|
290
|
+
def to_h
|
291
|
+
hash = case type
|
292
|
+
when :cha_cha20
|
293
|
+
{
|
294
|
+
nonce: args[:nonce]
|
295
|
+
}
|
296
|
+
when :nacl_box
|
297
|
+
{
|
298
|
+
their_public: args[:their_public],
|
299
|
+
nonce: args[:nonce]
|
300
|
+
}
|
301
|
+
when :nacl_secret_box
|
302
|
+
{
|
303
|
+
nonce: args[:nonce]
|
304
|
+
}
|
305
|
+
end
|
306
|
+
{
|
307
|
+
type: Helper.sym_to_capitalized_case_str(type)
|
308
|
+
}.merge(hash)
|
309
|
+
end
|
310
|
+
end
|
311
|
+
|
312
|
+
class ParamsOfAppEncryptionBox
|
313
|
+
TYPES = %i[get_info encrypt decrypt]
|
314
|
+
attr_reader :type, :args
|
315
|
+
|
316
|
+
def initialize(type:, **args)
|
317
|
+
unless TYPES.include?(type)
|
318
|
+
raise ArgumentError.new("type #{type} is unknown; known types: #{TYPES}")
|
319
|
+
end
|
320
|
+
@type = type
|
321
|
+
@args = args
|
322
|
+
end
|
323
|
+
|
324
|
+
def to_h
|
325
|
+
hash = case type
|
326
|
+
when :get_info
|
327
|
+
{}
|
328
|
+
when :encrypt, :decrypt
|
329
|
+
{
|
330
|
+
data: args[:data]
|
331
|
+
}
|
332
|
+
end
|
333
|
+
{
|
334
|
+
type: Helper.sym_to_capitalized_case_str(type)
|
335
|
+
}.merge(hash)
|
336
|
+
end
|
337
|
+
end
|
338
|
+
|
339
|
+
ParamsOfCreateCryptoBox = KwStruct.new(:secret_encryption_salt, :secret)
|
340
|
+
|
341
|
+
RegisteredCryptoBox = KwStruct.new(:handle)
|
342
|
+
|
343
|
+
ParamsOfAppPasswordProvider = KwStruct.new(:encryption_public_key) do
|
344
|
+
attr_reader :type, :encryption_public_key
|
345
|
+
|
346
|
+
def initialize(encryption_public_key:)
|
347
|
+
@type = "GetPassword"
|
348
|
+
@encryption_public_key = encryption_public_key
|
349
|
+
end
|
350
|
+
|
351
|
+
def to_h
|
352
|
+
{
|
353
|
+
type: type,
|
354
|
+
encryption_public_key: encryption_public_key
|
355
|
+
}
|
356
|
+
end
|
357
|
+
end
|
358
|
+
|
359
|
+
ResultOfAppPasswordProvider = KwStruct.new(:type, :encrypted_password, :app_encryption_pubkey)
|
360
|
+
|
361
|
+
ResultOfGetCryptoBoxInfo = KwStruct.new(:encrypted_secret)
|
362
|
+
|
363
|
+
ResultOfGetCryptoBoxSeedPhrase = KwStruct.new(:phrase, :dictionary, :wordcount)
|
364
|
+
|
365
|
+
ParamsOfGetSigningBoxFromCryptoBox = KwStruct.new(:handle, :hdpath, :secret_lifetime)
|
366
|
+
|
367
|
+
ParamsOfGetEncryptionBoxFromCryptoBox = KwStruct.new(:handle, :hdpath, :algorithm, :secret_lifetime)
|
368
|
+
|
226
369
|
class EncryptionAlgorithm
|
227
370
|
private_class_method :new
|
228
371
|
|
@@ -234,8 +377,6 @@ module TonSdk
|
|
234
377
|
end
|
235
378
|
end
|
236
379
|
|
237
|
-
|
238
|
-
|
239
380
|
#
|
240
381
|
# functions
|
241
382
|
#
|
@@ -654,34 +795,13 @@ module TonSdk
|
|
654
795
|
end
|
655
796
|
end
|
656
797
|
|
657
|
-
def self.register_signing_box(ctx,
|
658
|
-
client_callback = Proc.new do |type_, x|
|
659
|
-
app_res = app_obj.request(x["request_data"])
|
660
|
-
app_req_result = case app_res
|
661
|
-
in [:success, result]
|
662
|
-
TonSdk::Client::AppRequestResult.new(
|
663
|
-
type_: :ok,
|
664
|
-
result: result
|
665
|
-
)
|
666
|
-
in [:error, text]
|
667
|
-
TonSdk::Client::AppRequestResult.new(
|
668
|
-
type_: :error,
|
669
|
-
text: text
|
670
|
-
)
|
671
|
-
end
|
672
|
-
|
673
|
-
params = TonSdk::Client::ParamsOfResolveAppRequest.new(
|
674
|
-
app_request_id: x["app_request_id"],
|
675
|
-
result: app_req_result
|
676
|
-
)
|
677
|
-
TonSdk::Client.resolve_app_request(ctx, params)
|
678
|
-
end
|
679
|
-
|
798
|
+
def self.register_signing_box(ctx, callback:)
|
680
799
|
Interop::request_to_native_lib(
|
681
800
|
ctx,
|
682
801
|
"crypto.register_signing_box",
|
683
802
|
nil,
|
684
|
-
|
803
|
+
client_callback: callback,
|
804
|
+
is_single_thread_only: false
|
685
805
|
) do |resp|
|
686
806
|
if resp.success?
|
687
807
|
yield NativeLibResponseResult.new(
|
@@ -746,34 +866,12 @@ module TonSdk
|
|
746
866
|
end
|
747
867
|
end
|
748
868
|
|
749
|
-
def self.register_encryption_box(ctx,
|
750
|
-
client_callback = Proc.new do |type_, x|
|
751
|
-
app_res = app_obj.request(x["request_data"])
|
752
|
-
app_req_result = case app_res
|
753
|
-
in [:success, result]
|
754
|
-
TonSdk::Client::AppRequestResult.new(
|
755
|
-
type_: :ok,
|
756
|
-
result: result
|
757
|
-
)
|
758
|
-
in [:error, text]
|
759
|
-
TonSdk::Client::AppRequestResult.new(
|
760
|
-
type_: :error,
|
761
|
-
text: text
|
762
|
-
)
|
763
|
-
end
|
764
|
-
|
765
|
-
params = TonSdk::Client::ParamsOfResolveAppRequest.new(
|
766
|
-
app_request_id: x["app_request_id"],
|
767
|
-
result: app_req_result
|
768
|
-
)
|
769
|
-
TonSdk::Client.resolve_app_request(ctx, params)
|
770
|
-
end
|
771
|
-
|
869
|
+
def self.register_encryption_box(ctx, callback:)
|
772
870
|
Interop::request_to_native_lib(
|
773
871
|
ctx,
|
774
872
|
"crypto.register_encryption_box",
|
775
873
|
nil,
|
776
|
-
client_callback:
|
874
|
+
client_callback: callback,
|
777
875
|
is_single_thread_only: false
|
778
876
|
) do |resp|
|
779
877
|
if resp.success?
|
@@ -786,6 +884,18 @@ module TonSdk
|
|
786
884
|
end
|
787
885
|
end
|
788
886
|
|
887
|
+
def self.remove_encryption_box(ctx, params)
|
888
|
+
Interop::request_to_native_lib(ctx, "crypto.remove_encryption_box", params) do |resp|
|
889
|
+
if resp.success?
|
890
|
+
yield NativeLibResponseResult.new(
|
891
|
+
result: nil
|
892
|
+
)
|
893
|
+
else
|
894
|
+
yield resp
|
895
|
+
end
|
896
|
+
end
|
897
|
+
end
|
898
|
+
|
789
899
|
def self.encryption_box_get_info(ctx, params)
|
790
900
|
Interop::request_to_native_lib(ctx, "crypto.encryption_box_get_info", params) do |resp|
|
791
901
|
if resp.success?
|
@@ -798,6 +908,30 @@ module TonSdk
|
|
798
908
|
end
|
799
909
|
end
|
800
910
|
|
911
|
+
def self.encryption_box_encrypt(ctx, params)
|
912
|
+
Interop::request_to_native_lib(ctx, "crypto.encryption_box_encrypt", params) do |resp|
|
913
|
+
if resp.success?
|
914
|
+
yield NativeLibResponseResult.new(
|
915
|
+
result: ResultOfEncryptionBoxEncrypt.new(data: resp.result["data"])
|
916
|
+
)
|
917
|
+
else
|
918
|
+
yield resp
|
919
|
+
end
|
920
|
+
end
|
921
|
+
end
|
922
|
+
|
923
|
+
def self.encryption_box_decrypt(ctx, params)
|
924
|
+
Interop::request_to_native_lib(ctx, "crypto.encryption_box_decrypt", params) do |resp|
|
925
|
+
if resp.success?
|
926
|
+
yield NativeLibResponseResult.new(
|
927
|
+
result: ResultOfEncryptionBoxDecrypt.new(data: resp.result["data"])
|
928
|
+
)
|
929
|
+
else
|
930
|
+
yield resp
|
931
|
+
end
|
932
|
+
end
|
933
|
+
end
|
934
|
+
|
801
935
|
def self.create_encryption_box(ctx, params)
|
802
936
|
Interop::request_to_native_lib(ctx, "crypto.create_encryption_box", params) do |resp|
|
803
937
|
if resp.success?
|
@@ -809,5 +943,105 @@ module TonSdk
|
|
809
943
|
end
|
810
944
|
end
|
811
945
|
end
|
946
|
+
|
947
|
+
def self.create_crypto_box(ctx, params, callback:)
|
948
|
+
Interop::request_to_native_lib(
|
949
|
+
ctx,
|
950
|
+
"crypto.create_crypto_box",
|
951
|
+
params,
|
952
|
+
client_callback: callback,
|
953
|
+
is_single_thread_only: false
|
954
|
+
) do |resp|
|
955
|
+
if resp.success?
|
956
|
+
yield NativeLibResponseResult.new(
|
957
|
+
result: RegisteredCryptoBox.new(handle: resp.result["handle"])
|
958
|
+
)
|
959
|
+
else
|
960
|
+
yield resp
|
961
|
+
end
|
962
|
+
end
|
963
|
+
end
|
964
|
+
|
965
|
+
def self.remove_crypto_box(ctx, params)
|
966
|
+
Interop::request_to_native_lib(ctx, "crypto.remove_crypto_box", params) do |resp|
|
967
|
+
if resp.success?
|
968
|
+
yield NativeLibResponseResult.new(
|
969
|
+
result: nil
|
970
|
+
)
|
971
|
+
else
|
972
|
+
yield resp
|
973
|
+
end
|
974
|
+
end
|
975
|
+
end
|
976
|
+
|
977
|
+
def self.get_crypto_box_info(ctx, params)
|
978
|
+
Interop::request_to_native_lib(ctx, "crypto.get_crypto_box_info", params) do |resp|
|
979
|
+
if resp.success?
|
980
|
+
yield NativeLibResponseResult.new(
|
981
|
+
result: ResultOfGetCryptoBoxInfo.new(
|
982
|
+
encrypted_secret: resp.result["encrypted_secret"]
|
983
|
+
)
|
984
|
+
)
|
985
|
+
else
|
986
|
+
yield resp
|
987
|
+
end
|
988
|
+
end
|
989
|
+
end
|
990
|
+
|
991
|
+
def self.get_crypto_box_seed_phrase(ctx, params)
|
992
|
+
Interop::request_to_native_lib(ctx, "crypto.get_crypto_box_seed_phrase", params) do |resp|
|
993
|
+
if resp.success?
|
994
|
+
yield NativeLibResponseResult.new(
|
995
|
+
result: ResultOfGetCryptoBoxSeedPhrase.new(
|
996
|
+
phrase: resp.result["phrase"],
|
997
|
+
dictionary: resp.result["dictionary"],
|
998
|
+
wordcount: resp.result["wordcount"]
|
999
|
+
)
|
1000
|
+
)
|
1001
|
+
else
|
1002
|
+
yield resp
|
1003
|
+
end
|
1004
|
+
end
|
1005
|
+
end
|
1006
|
+
|
1007
|
+
def self.get_signing_box_from_crypto_box(ctx, params)
|
1008
|
+
Interop::request_to_native_lib(ctx, "crypto.get_signing_box_from_crypto_box", params) do |resp|
|
1009
|
+
if resp.success?
|
1010
|
+
yield NativeLibResponseResult.new(
|
1011
|
+
result: RegisteredSigningBox.new(handle: resp.result["handle"])
|
1012
|
+
)
|
1013
|
+
else
|
1014
|
+
yield resp
|
1015
|
+
end
|
1016
|
+
end
|
1017
|
+
end
|
1018
|
+
|
1019
|
+
def self.get_encryption_box_from_crypto_box(ctx, params)
|
1020
|
+
Interop::request_to_native_lib(ctx, "crypto.get_encryption_box_from_crypto_box", params) do |resp|
|
1021
|
+
if resp.success?
|
1022
|
+
yield NativeLibResponseResult.new(
|
1023
|
+
result: RegisteredEncryptionBox.new(handle: resp.result["handle"])
|
1024
|
+
)
|
1025
|
+
else
|
1026
|
+
yield resp
|
1027
|
+
end
|
1028
|
+
end
|
1029
|
+
end
|
1030
|
+
|
1031
|
+
def self.clear_crypto_box_secret_cache(ctx, params)
|
1032
|
+
Interop::request_to_native_lib(
|
1033
|
+
ctx,
|
1034
|
+
"crypto.clear_crypto_box_secret_cache",
|
1035
|
+
params
|
1036
|
+
) do |resp|
|
1037
|
+
if resp.success?
|
1038
|
+
yield NativeLibResponseResult.new(
|
1039
|
+
result: nil
|
1040
|
+
)
|
1041
|
+
else
|
1042
|
+
yield resp
|
1043
|
+
end
|
1044
|
+
end
|
1045
|
+
end
|
812
1046
|
end
|
813
1047
|
end
|