react-native-rgb 0.2.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.
Files changed (44) hide show
  1. package/LICENSE +20 -0
  2. package/README.md +165 -0
  3. package/Rgb.podspec +23 -0
  4. package/android/build.gradle +80 -0
  5. package/android/gradle.properties +5 -0
  6. package/android/src/main/AndroidManifest.xml +2 -0
  7. package/android/src/main/java/com/rgb/AppConstants.kt +57 -0
  8. package/android/src/main/java/com/rgb/RgbModule.kt +1959 -0
  9. package/android/src/main/java/com/rgb/RgbPackage.kt +33 -0
  10. package/android/src/main/java/com/rgb/WalletStore.kt +49 -0
  11. package/ios/AppConstants.swift +71 -0
  12. package/ios/Rgb.h +5 -0
  13. package/ios/Rgb.mm +1740 -0
  14. package/ios/Rgb.swift +1916 -0
  15. package/ios/RgbLib.swift +7615 -0
  16. package/ios/WalletStore.swift +61 -0
  17. package/lib/module/Interfaces.js +65 -0
  18. package/lib/module/Interfaces.js.map +1 -0
  19. package/lib/module/NativeRgb.js +5 -0
  20. package/lib/module/NativeRgb.js.map +1 -0
  21. package/lib/module/RgbError.js +65 -0
  22. package/lib/module/RgbError.js.map +1 -0
  23. package/lib/module/Wallet.js +854 -0
  24. package/lib/module/Wallet.js.map +1 -0
  25. package/lib/module/index.js +39 -0
  26. package/lib/module/index.js.map +1 -0
  27. package/lib/module/package.json +1 -0
  28. package/lib/typescript/package.json +1 -0
  29. package/lib/typescript/src/Interfaces.d.ts +390 -0
  30. package/lib/typescript/src/Interfaces.d.ts.map +1 -0
  31. package/lib/typescript/src/NativeRgb.d.ts +417 -0
  32. package/lib/typescript/src/NativeRgb.d.ts.map +1 -0
  33. package/lib/typescript/src/RgbError.d.ts +28 -0
  34. package/lib/typescript/src/RgbError.d.ts.map +1 -0
  35. package/lib/typescript/src/Wallet.d.ts +648 -0
  36. package/lib/typescript/src/Wallet.d.ts.map +1 -0
  37. package/lib/typescript/src/index.d.ts +28 -0
  38. package/lib/typescript/src/index.d.ts.map +1 -0
  39. package/package.json +174 -0
  40. package/src/Interfaces.ts +376 -0
  41. package/src/NativeRgb.ts +630 -0
  42. package/src/RgbError.ts +84 -0
  43. package/src/Wallet.ts +1118 -0
  44. package/src/index.tsx +46 -0
package/ios/Rgb.mm ADDED
@@ -0,0 +1,1740 @@
1
+ #import "Rgb.h"
2
+
3
+ // Forward declaration for Swift class
4
+ @class RgbSwiftHelper;
5
+
6
+ // Import Swift bridging header - CocoaPods will generate this automatically
7
+ // The header name follows the pattern: <PodName>-Swift.h
8
+ #if __has_include(<Rgb/Rgb-Swift.h>)
9
+ #import <Rgb/Rgb-Swift.h>
10
+ #elif __has_include("Rgb-Swift.h")
11
+ #import "Rgb-Swift.h"
12
+ #else
13
+ // If bridging header is not found, we'll use runtime class lookup
14
+ #endif
15
+
16
+ // Macro to execute work on a background thread and catch Objective-C exceptions
17
+ #define EXEC_ASYNC(methodBlock) \
18
+ dispatch_async(dispatch_get_global_queue(QOS_CLASS_USER_INITIATED, 0), ^{ \
19
+ @try { methodBlock } \
20
+ @catch (NSException *exception) { \
21
+ NSLog(@"Exception in async block: %@", exception.reason ?: @"Unknown error"); \
22
+ } \
23
+ });
24
+
25
+ @implementation Rgb
26
+
27
+ // Helpers to ensure promise resolution/rejection happen on the main thread
28
+ - (void)resolvePromise:(RCTPromiseResolveBlock)resolve withResult:(id)result {
29
+ dispatch_async(dispatch_get_main_queue(), ^{
30
+ if (resolve) {
31
+ resolve(result);
32
+ }
33
+ });
34
+ }
35
+
36
+ - (void)rejectPromise:(RCTPromiseRejectBlock)reject
37
+ withErrorCode:(NSString *)errorCode
38
+ errorMessage:(NSString *)errorMessage {
39
+ dispatch_async(dispatch_get_main_queue(), ^{
40
+ if (reject) {
41
+ reject(errorCode ?: @"ERROR", errorMessage ?: @"Unknown error", nil);
42
+ }
43
+ });
44
+ }
45
+
46
+ - (NSDictionary *)generateKeys:(NSString *)bitcoinNetwork {
47
+ return [RgbSwiftHelper _generateKeys:bitcoinNetwork];
48
+ }
49
+
50
+ - (void)generateKeys:(NSString *)bitcoinNetwork
51
+ resolve:(RCTPromiseResolveBlock)resolve
52
+ reject:(RCTPromiseRejectBlock)reject
53
+ {
54
+ __weak Rgb *weakSelf = self;
55
+ RCTPromiseResolveBlock strongResolve = resolve;
56
+ RCTPromiseRejectBlock strongReject = reject;
57
+ NSString *strongBitcoinNetwork = [bitcoinNetwork copy];
58
+
59
+ EXEC_ASYNC({
60
+ NSDictionary *result = [RgbSwiftHelper _generateKeys:strongBitcoinNetwork];
61
+ __strong Rgb *strongSelf = weakSelf;
62
+ if (strongSelf && strongResolve) {
63
+ [strongSelf resolvePromise:strongResolve withResult:result];
64
+ }
65
+ });
66
+ }
67
+
68
+ - (void)restoreKeys:(NSString *)bitcoinNetwork
69
+ mnemonic:(NSString *)mnemonic
70
+ resolve:(RCTPromiseResolveBlock)resolve
71
+ reject:(RCTPromiseRejectBlock)reject
72
+ {
73
+ __weak Rgb *weakSelf = self;
74
+ RCTPromiseResolveBlock strongResolve = resolve;
75
+ RCTPromiseRejectBlock strongReject = reject;
76
+ NSString *strongBitcoinNetwork = [bitcoinNetwork copy];
77
+ NSString *strongMnemonic = [mnemonic copy];
78
+
79
+ EXEC_ASYNC({
80
+ NSDictionary *result = [RgbSwiftHelper _restoreKeys:strongBitcoinNetwork mnemonic:strongMnemonic];
81
+ NSString *errorMessage = result[@"error"];
82
+ if (errorMessage != nil) {
83
+ NSString *errorCode = result[@"errorCode"] ?: @"RESTORE_KEYS_ERROR";
84
+ dispatch_async(dispatch_get_main_queue(), ^{
85
+ if (strongReject) {
86
+ strongReject(errorCode, errorMessage, nil);
87
+ }
88
+ });
89
+ } else {
90
+ __strong Rgb *strongSelf = weakSelf;
91
+ if (strongSelf && strongResolve) {
92
+ [strongSelf resolvePromise:strongResolve withResult:result];
93
+ }
94
+ }
95
+ });
96
+ }
97
+
98
+ - (void)initializeWallet:(NSString *)network
99
+ accountXpubVanilla:(NSString *)accountXpubVanilla
100
+ accountXpubColored:(NSString *)accountXpubColored
101
+ mnemonic:(NSString *)mnemonic
102
+ masterFingerprint:(NSString *)masterFingerprint
103
+ supportedSchemas:(NSArray<NSString *> *)supportedSchemas
104
+ maxAllocationsPerUtxo:(NSNumber *)maxAllocationsPerUtxo
105
+ vanillaKeychain:(NSNumber *)vanillaKeychain
106
+ resolve:(RCTPromiseResolveBlock)resolve
107
+ reject:(RCTPromiseRejectBlock)reject
108
+ {
109
+ // Validate required parameters
110
+ if (!network || !accountXpubVanilla || !accountXpubColored || !mnemonic || !masterFingerprint || !supportedSchemas || !maxAllocationsPerUtxo || !vanillaKeychain) {
111
+ if (reject) {
112
+ reject(@"INITIALIZE_WALLET_ERROR", @"Missing required parameters", nil);
113
+ }
114
+ return;
115
+ }
116
+
117
+ __weak Rgb *weakSelf = self;
118
+ RCTPromiseResolveBlock strongResolve = resolve;
119
+ RCTPromiseRejectBlock strongReject = reject;
120
+
121
+ // Capture parameters strongly to ensure they're retained
122
+ NSString *strongNetwork = [network copy];
123
+ NSString *strongAccountXpubVanilla = [accountXpubVanilla copy];
124
+ NSString *strongAccountXpubColored = [accountXpubColored copy];
125
+ NSString *strongMnemonic = [mnemonic copy];
126
+ NSString *strongMasterFingerprint = [masterFingerprint copy];
127
+ NSArray<NSString *> *strongSupportedSchemas = [supportedSchemas copy];
128
+ NSNumber *strongMaxAllocationsPerUtxo = [maxAllocationsPerUtxo copy];
129
+ NSNumber *strongVanillaKeychain = [vanillaKeychain copy];
130
+
131
+ // Ensure all parameters are non-nil before dispatching
132
+ if (!strongNetwork || !strongAccountXpubVanilla || !strongAccountXpubColored ||
133
+ !strongMnemonic || !strongMasterFingerprint || !strongSupportedSchemas ||
134
+ !strongMaxAllocationsPerUtxo || !strongVanillaKeychain) {
135
+ if (strongReject) {
136
+ strongReject(@"INITIALIZE_WALLET_ERROR", @"One or more parameters became nil", nil);
137
+ }
138
+ return;
139
+ }
140
+
141
+ dispatch_async(dispatch_get_global_queue(QOS_CLASS_USER_INITIATED, 0), ^{
142
+ @autoreleasepool {
143
+ @try {
144
+ NSDictionary *result = nil;
145
+ @autoreleasepool {
146
+ // Call Swift method - it should handle its own threading
147
+ result = [RgbSwiftHelper _initializeWallet:strongNetwork
148
+ accountXpubVanilla:strongAccountXpubVanilla
149
+ accountXpubColored:strongAccountXpubColored
150
+ mnemonic:strongMnemonic
151
+ masterFingerprint:strongMasterFingerprint
152
+ supportedSchemas:strongSupportedSchemas
153
+ maxAllocationsPerUtxo:strongMaxAllocationsPerUtxo
154
+ vanillaKeychain:strongVanillaKeychain];
155
+ }
156
+
157
+ if (!result) {
158
+ dispatch_async(dispatch_get_main_queue(), ^{
159
+ if (strongReject) {
160
+ strongReject(@"INITIALIZE_WALLET_ERROR", @"Swift method returned nil", nil);
161
+ }
162
+ });
163
+ return;
164
+ }
165
+
166
+ NSString *errorMessage = result[@"error"];
167
+ if (errorMessage != nil) {
168
+ NSString *errorCode = result[@"errorCode"] ?: @"INITIALIZE_WALLET_ERROR";
169
+ dispatch_async(dispatch_get_main_queue(), ^{
170
+ if (strongReject) {
171
+ strongReject(errorCode, errorMessage, nil);
172
+ }
173
+ });
174
+ } else {
175
+ NSNumber *walletId = result[@"walletId"];
176
+ if (!walletId) {
177
+ dispatch_async(dispatch_get_main_queue(), ^{
178
+ if (strongReject) {
179
+ strongReject(@"INITIALIZE_WALLET_ERROR", @"walletId not found in result", nil);
180
+ }
181
+ });
182
+ return;
183
+ }
184
+ __strong Rgb *strongSelf = weakSelf;
185
+ if (strongSelf && strongResolve) {
186
+ [strongSelf resolvePromise:strongResolve withResult:walletId];
187
+ }
188
+ }
189
+ } @catch (NSException *exception) {
190
+ dispatch_async(dispatch_get_main_queue(), ^{
191
+ if (strongReject) {
192
+ strongReject(@"INITIALIZE_WALLET_ERROR", exception.reason ?: @"Unknown error", nil);
193
+ }
194
+ });
195
+ }
196
+ }
197
+ });
198
+ }
199
+
200
+ - (void)goOnline:(NSNumber *)walletId
201
+ skipConsistencyCheck:(NSNumber *)skipConsistencyCheck
202
+ indexerUrl:(NSString *)indexerUrl
203
+ resolve:(RCTPromiseResolveBlock)resolve
204
+ reject:(RCTPromiseRejectBlock)reject
205
+ {
206
+ __weak Rgb *weakSelf = self;
207
+ RCTPromiseResolveBlock strongResolve = resolve;
208
+ RCTPromiseRejectBlock strongReject = reject;
209
+ NSNumber *strongWalletId = [walletId copy];
210
+ NSNumber *strongSkipConsistencyCheck = [skipConsistencyCheck copy];
211
+ NSString *strongIndexerUrl = [indexerUrl copy];
212
+
213
+ EXEC_ASYNC({
214
+ NSDictionary *result = [RgbSwiftHelper _goOnline:strongWalletId
215
+ skipConsistencyCheck:[strongSkipConsistencyCheck boolValue]
216
+ indexerUrl:strongIndexerUrl];
217
+ NSString *errorMessage = result[@"error"];
218
+ if (errorMessage != nil) {
219
+ NSString *errorCode = result[@"errorCode"] ?: @"GO_ONLINE_ERROR";
220
+ dispatch_async(dispatch_get_main_queue(), ^{
221
+ if (strongReject) {
222
+ strongReject(errorCode, errorMessage, nil);
223
+ }
224
+ });
225
+ } else {
226
+ __strong Rgb *strongSelf = weakSelf;
227
+ if (strongSelf && strongResolve) {
228
+ [strongSelf resolvePromise:strongResolve withResult:nil];
229
+ }
230
+ }
231
+ });
232
+ }
233
+
234
+ - (void)getBtcBalance:(NSNumber *)walletId
235
+ skipSync:(NSNumber *)skipSync
236
+ resolve:(RCTPromiseResolveBlock)resolve
237
+ reject:(RCTPromiseRejectBlock)reject
238
+ {
239
+ __weak Rgb *weakSelf = self;
240
+ RCTPromiseResolveBlock strongResolve = resolve;
241
+ RCTPromiseRejectBlock strongReject = reject;
242
+ NSNumber *strongWalletId = [walletId copy];
243
+ NSNumber *strongSkipSync = [skipSync copy];
244
+
245
+ EXEC_ASYNC({
246
+ NSDictionary *result = [RgbSwiftHelper _getBtcBalance:strongWalletId
247
+ skipSync:[strongSkipSync boolValue]];
248
+ NSString *errorMessage = result[@"error"];
249
+ if (errorMessage != nil) {
250
+ NSString *errorCode = result[@"errorCode"] ?: @"GET_BTC_BALANCE_ERROR";
251
+ dispatch_async(dispatch_get_main_queue(), ^{
252
+ if (strongReject) {
253
+ strongReject(errorCode, errorMessage, nil);
254
+ }
255
+ });
256
+ } else {
257
+ __strong Rgb *strongSelf = weakSelf;
258
+ if (strongSelf && strongResolve) {
259
+ [strongSelf resolvePromise:strongResolve withResult:result];
260
+ }
261
+ }
262
+ });
263
+ }
264
+
265
+ - (void)walletClose:(NSNumber *)walletId
266
+ resolve:(RCTPromiseResolveBlock)resolve
267
+ reject:(RCTPromiseRejectBlock)reject
268
+ {
269
+ __weak Rgb *weakSelf = self;
270
+ RCTPromiseResolveBlock strongResolve = resolve;
271
+ RCTPromiseRejectBlock strongReject = reject;
272
+ NSNumber *strongWalletId = [walletId copy];
273
+
274
+ EXEC_ASYNC({
275
+ NSDictionary *result = [RgbSwiftHelper _walletClose:strongWalletId];
276
+ NSString *errorMessage = result[@"error"];
277
+ if (errorMessage != nil) {
278
+ NSString *errorCode = result[@"errorCode"] ?: @"ERROR";
279
+ dispatch_async(dispatch_get_main_queue(), ^{
280
+ if (strongReject) {
281
+ strongReject(errorCode, errorMessage, nil);
282
+ }
283
+ });
284
+ } else {
285
+ __strong Rgb *strongSelf = weakSelf;
286
+ if (strongSelf && strongResolve) {
287
+ [strongSelf resolvePromise:strongResolve withResult:nil];
288
+ }
289
+ }
290
+ });
291
+ }
292
+
293
+ // All wallet methods bridge implementations
294
+ - (void)backup:(NSNumber *)walletId
295
+ backupPath:(NSString *)backupPath
296
+ password:(NSString *)password
297
+ resolve:(RCTPromiseResolveBlock)resolve
298
+ reject:(RCTPromiseRejectBlock)reject
299
+ {
300
+ __weak Rgb *weakSelf = self;
301
+ RCTPromiseResolveBlock strongResolve = resolve;
302
+ RCTPromiseRejectBlock strongReject = reject;
303
+ NSNumber *strongWalletId = [walletId copy];
304
+ NSString *strongBackupPath = [backupPath copy];
305
+ NSString *strongPassword = [password copy];
306
+
307
+ EXEC_ASYNC({
308
+ NSDictionary *result = [RgbSwiftHelper _backup:strongWalletId backupPath:strongBackupPath password:strongPassword];
309
+ NSString *errorMessage = result[@"error"];
310
+ if (errorMessage != nil) {
311
+ NSString *errorCode = result[@"errorCode"] ?: @"ERROR";
312
+ dispatch_async(dispatch_get_main_queue(), ^{
313
+ if (strongReject) {
314
+ strongReject(errorCode, errorMessage, nil);
315
+ }
316
+ });
317
+ } else {
318
+ __strong Rgb *strongSelf = weakSelf;
319
+ if (strongSelf && strongResolve) {
320
+ [strongSelf resolvePromise:strongResolve withResult:nil];
321
+ }
322
+ }
323
+ });
324
+ }
325
+
326
+ - (void)backupInfo:(NSNumber *)walletId
327
+ resolve:(RCTPromiseResolveBlock)resolve
328
+ reject:(RCTPromiseRejectBlock)reject
329
+ {
330
+ __weak Rgb *weakSelf = self;
331
+ RCTPromiseResolveBlock strongResolve = resolve;
332
+ RCTPromiseRejectBlock strongReject = reject;
333
+ NSNumber *strongWalletId = [walletId copy];
334
+
335
+ EXEC_ASYNC({
336
+ NSDictionary *result = [RgbSwiftHelper _backupInfo:strongWalletId];
337
+ NSString *errorMessage = result[@"error"];
338
+ if (errorMessage != nil) {
339
+ NSString *errorCode = result[@"errorCode"] ?: @"ERROR";
340
+ dispatch_async(dispatch_get_main_queue(), ^{
341
+ if (strongReject) {
342
+ strongReject(errorCode, errorMessage, nil);
343
+ }
344
+ });
345
+ } else {
346
+ __strong Rgb *strongSelf = weakSelf;
347
+ if (strongSelf && strongResolve) {
348
+ [strongSelf resolvePromise:strongResolve withResult:result[@"hasBackup"]];
349
+ }
350
+ }
351
+ });
352
+ }
353
+
354
+ - (void)blindReceive:(NSNumber *)walletId
355
+ assetId:(NSString *)assetId
356
+ assignment:(NSDictionary *)assignment
357
+ durationSeconds:(NSNumber *)durationSeconds
358
+ transportEndpoints:(NSArray<NSString *> *)transportEndpoints
359
+ minConfirmations:(NSNumber *)minConfirmations
360
+ resolve:(RCTPromiseResolveBlock)resolve
361
+ reject:(RCTPromiseRejectBlock)reject
362
+ {
363
+ __weak Rgb *weakSelf = self;
364
+ RCTPromiseResolveBlock strongResolve = resolve;
365
+ RCTPromiseRejectBlock strongReject = reject;
366
+ NSNumber *strongWalletId = [walletId copy];
367
+ NSString *strongAssetId = assetId ? [assetId copy] : nil;
368
+ NSDictionary *strongAssignment = [assignment copy];
369
+ NSNumber *strongDurationSeconds = durationSeconds ? [durationSeconds copy] : nil;
370
+ NSArray *strongTransportEndpoints = [transportEndpoints copy];
371
+ NSNumber *strongMinConfirmations = [minConfirmations copy];
372
+
373
+ EXEC_ASYNC({
374
+ NSDictionary *result = [RgbSwiftHelper _blindReceive:strongWalletId
375
+ assetId:strongAssetId
376
+ assignment:strongAssignment
377
+ durationSeconds:strongDurationSeconds
378
+ transportEndpoints:strongTransportEndpoints
379
+ minConfirmations:strongMinConfirmations];
380
+ NSString *errorMessage = result[@"error"];
381
+ if (errorMessage != nil) {
382
+ NSString *errorCode = result[@"errorCode"] ?: @"ERROR";
383
+ dispatch_async(dispatch_get_main_queue(), ^{
384
+ if (strongReject) {
385
+ strongReject(errorCode, errorMessage, nil);
386
+ }
387
+ });
388
+ } else {
389
+ __strong Rgb *strongSelf = weakSelf;
390
+ if (strongSelf && strongResolve) {
391
+ [strongSelf resolvePromise:strongResolve withResult:result];
392
+ }
393
+ }
394
+ });
395
+ }
396
+
397
+ - (void)createUtxos:(NSNumber *)walletId
398
+ upTo:(NSNumber *)upTo
399
+ num:(NSNumber *)num
400
+ size:(NSNumber *)size
401
+ feeRate:(NSNumber *)feeRate
402
+ skipSync:(NSNumber *)skipSync
403
+ resolve:(RCTPromiseResolveBlock)resolve
404
+ reject:(RCTPromiseRejectBlock)reject
405
+ {
406
+ __weak Rgb *weakSelf = self;
407
+ RCTPromiseResolveBlock strongResolve = resolve;
408
+ RCTPromiseRejectBlock strongReject = reject;
409
+ NSNumber *strongWalletId = [walletId copy];
410
+ NSNumber *strongUpTo = [upTo copy];
411
+ NSNumber *strongNum = num ? [num copy] : nil;
412
+ NSNumber *strongSize = size ? [size copy] : nil;
413
+ NSNumber *strongFeeRate = [feeRate copy];
414
+ NSNumber *strongSkipSync = [skipSync copy];
415
+
416
+ EXEC_ASYNC({
417
+ NSDictionary *result = [RgbSwiftHelper _createUtxos:strongWalletId
418
+ upTo:strongUpTo
419
+ num:strongNum
420
+ size:strongSize
421
+ feeRate:strongFeeRate
422
+ skipSync:strongSkipSync];
423
+ NSString *errorMessage = result[@"error"];
424
+ if (errorMessage != nil) {
425
+ NSString *errorCode = result[@"errorCode"] ?: @"ERROR";
426
+ dispatch_async(dispatch_get_main_queue(), ^{
427
+ if (strongReject) {
428
+ strongReject(errorCode, errorMessage, nil);
429
+ }
430
+ });
431
+ } else {
432
+ __strong Rgb *strongSelf = weakSelf;
433
+ if (strongSelf && strongResolve) {
434
+ [strongSelf resolvePromise:strongResolve withResult:result[@"count"]];
435
+ }
436
+ }
437
+ });
438
+ }
439
+
440
+ - (void)createUtxosBegin:(NSNumber *)walletId
441
+ upTo:(NSNumber *)upTo
442
+ num:(NSNumber *)num
443
+ size:(NSNumber *)size
444
+ feeRate:(NSNumber *)feeRate
445
+ skipSync:(NSNumber *)skipSync
446
+ resolve:(RCTPromiseResolveBlock)resolve
447
+ reject:(RCTPromiseRejectBlock)reject
448
+ {
449
+ __weak Rgb *weakSelf = self;
450
+ RCTPromiseResolveBlock strongResolve = resolve;
451
+ RCTPromiseRejectBlock strongReject = reject;
452
+ NSNumber *strongWalletId = [walletId copy];
453
+ NSNumber *strongUpTo = [upTo copy];
454
+ NSNumber *strongNum = num ? [num copy] : nil;
455
+ NSNumber *strongSize = size ? [size copy] : nil;
456
+ NSNumber *strongFeeRate = [feeRate copy];
457
+ NSNumber *strongSkipSync = [skipSync copy];
458
+
459
+ EXEC_ASYNC({
460
+ NSDictionary *result = [RgbSwiftHelper _createUtxosBegin:strongWalletId
461
+ upTo:strongUpTo
462
+ num:strongNum
463
+ size:strongSize
464
+ feeRate:strongFeeRate
465
+ skipSync:strongSkipSync];
466
+ NSString *errorMessage = result[@"error"];
467
+ if (errorMessage != nil) {
468
+ NSString *errorCode = result[@"errorCode"] ?: @"ERROR";
469
+ dispatch_async(dispatch_get_main_queue(), ^{
470
+ if (strongReject) {
471
+ strongReject(errorCode, errorMessage, nil);
472
+ }
473
+ });
474
+ } else {
475
+ __strong Rgb *strongSelf = weakSelf;
476
+ if (strongSelf && strongResolve) {
477
+ [strongSelf resolvePromise:strongResolve withResult:result[@"psbt"]];
478
+ }
479
+ }
480
+ });
481
+ }
482
+
483
+ - (void)createUtxosEnd:(NSNumber *)walletId
484
+ signedPsbt:(NSString *)signedPsbt
485
+ skipSync:(NSNumber *)skipSync
486
+ resolve:(RCTPromiseResolveBlock)resolve
487
+ reject:(RCTPromiseRejectBlock)reject
488
+ {
489
+ __weak Rgb *weakSelf = self;
490
+ RCTPromiseResolveBlock strongResolve = resolve;
491
+ RCTPromiseRejectBlock strongReject = reject;
492
+ NSNumber *strongWalletId = [walletId copy];
493
+ NSString *strongSignedPsbt = [signedPsbt copy];
494
+ NSNumber *strongSkipSync = [skipSync copy];
495
+
496
+ EXEC_ASYNC({
497
+ NSDictionary *result = [RgbSwiftHelper _createUtxosEnd:strongWalletId
498
+ signedPsbt:strongSignedPsbt
499
+ skipSync:strongSkipSync];
500
+ NSString *errorMessage = result[@"error"];
501
+ if (errorMessage != nil) {
502
+ NSString *errorCode = result[@"errorCode"] ?: @"ERROR";
503
+ dispatch_async(dispatch_get_main_queue(), ^{
504
+ if (strongReject) {
505
+ strongReject(errorCode, errorMessage, nil);
506
+ }
507
+ });
508
+ } else {
509
+ __strong Rgb *strongSelf = weakSelf;
510
+ if (strongSelf && strongResolve) {
511
+ [strongSelf resolvePromise:strongResolve withResult:result[@"count"]];
512
+ }
513
+ }
514
+ });
515
+ }
516
+
517
+ - (void)deleteTransfers:(NSNumber *)walletId
518
+ batchTransferIdx:(NSNumber *)batchTransferIdx
519
+ noAssetOnly:(NSNumber *)noAssetOnly
520
+ resolve:(RCTPromiseResolveBlock)resolve
521
+ reject:(RCTPromiseRejectBlock)reject
522
+ {
523
+ __weak Rgb *weakSelf = self;
524
+ RCTPromiseResolveBlock strongResolve = resolve;
525
+ RCTPromiseRejectBlock strongReject = reject;
526
+ NSNumber *strongWalletId = [walletId copy];
527
+ NSNumber *strongBatchTransferIdx = batchTransferIdx ? [batchTransferIdx copy] : nil;
528
+ NSNumber *strongNoAssetOnly = [noAssetOnly copy];
529
+
530
+ EXEC_ASYNC({
531
+ NSDictionary *result = [RgbSwiftHelper _deleteTransfers:strongWalletId
532
+ batchTransferIdx:strongBatchTransferIdx
533
+ noAssetOnly:strongNoAssetOnly];
534
+ NSString *errorMessage = result[@"error"];
535
+ if (errorMessage != nil) {
536
+ NSString *errorCode = result[@"errorCode"] ?: @"ERROR";
537
+ dispatch_async(dispatch_get_main_queue(), ^{
538
+ if (strongReject) {
539
+ strongReject(errorCode, errorMessage, nil);
540
+ }
541
+ });
542
+ } else {
543
+ __strong Rgb *strongSelf = weakSelf;
544
+ if (strongSelf && strongResolve) {
545
+ [strongSelf resolvePromise:strongResolve withResult:result[@"deleted"]];
546
+ }
547
+ }
548
+ });
549
+ }
550
+
551
+ - (void)drainTo:(NSNumber *)walletId
552
+ address:(NSString *)address
553
+ destroyAssets:(NSNumber *)destroyAssets
554
+ feeRate:(NSNumber *)feeRate
555
+ resolve:(RCTPromiseResolveBlock)resolve
556
+ reject:(RCTPromiseRejectBlock)reject
557
+ {
558
+ __weak Rgb *weakSelf = self;
559
+ RCTPromiseResolveBlock strongResolve = resolve;
560
+ RCTPromiseRejectBlock strongReject = reject;
561
+ NSNumber *strongWalletId = [walletId copy];
562
+ NSString *strongAddress = [address copy];
563
+ NSNumber *strongDestroyAssets = [destroyAssets copy];
564
+ NSNumber *strongFeeRate = [feeRate copy];
565
+
566
+ EXEC_ASYNC({
567
+ NSDictionary *result = [RgbSwiftHelper _drainTo:strongWalletId
568
+ address:strongAddress
569
+ destroyAssets:strongDestroyAssets
570
+ feeRate:strongFeeRate];
571
+ NSString *errorMessage = result[@"error"];
572
+ if (errorMessage != nil) {
573
+ NSString *errorCode = result[@"errorCode"] ?: @"ERROR";
574
+ dispatch_async(dispatch_get_main_queue(), ^{
575
+ if (strongReject) {
576
+ strongReject(errorCode, errorMessage, nil);
577
+ }
578
+ });
579
+ } else {
580
+ __strong Rgb *strongSelf = weakSelf;
581
+ if (strongSelf && strongResolve) {
582
+ [strongSelf resolvePromise:strongResolve withResult:result[@"txid"]];
583
+ }
584
+ }
585
+ });
586
+ }
587
+
588
+ - (void)drainToBegin:(NSNumber *)walletId
589
+ address:(NSString *)address
590
+ destroyAssets:(NSNumber *)destroyAssets
591
+ feeRate:(NSNumber *)feeRate
592
+ resolve:(RCTPromiseResolveBlock)resolve
593
+ reject:(RCTPromiseRejectBlock)reject
594
+ {
595
+ __weak Rgb *weakSelf = self;
596
+ RCTPromiseResolveBlock strongResolve = resolve;
597
+ RCTPromiseRejectBlock strongReject = reject;
598
+ NSNumber *strongWalletId = [walletId copy];
599
+ NSString *strongAddress = [address copy];
600
+ NSNumber *strongDestroyAssets = [destroyAssets copy];
601
+ NSNumber *strongFeeRate = [feeRate copy];
602
+
603
+ EXEC_ASYNC({
604
+ NSDictionary *result = [RgbSwiftHelper _drainToBegin:strongWalletId
605
+ address:strongAddress
606
+ destroyAssets:strongDestroyAssets
607
+ feeRate:strongFeeRate];
608
+ NSString *errorMessage = result[@"error"];
609
+ if (errorMessage != nil) {
610
+ NSString *errorCode = result[@"errorCode"] ?: @"ERROR";
611
+ dispatch_async(dispatch_get_main_queue(), ^{
612
+ if (strongReject) {
613
+ strongReject(errorCode, errorMessage, nil);
614
+ }
615
+ });
616
+ } else {
617
+ __strong Rgb *strongSelf = weakSelf;
618
+ if (strongSelf && strongResolve) {
619
+ [strongSelf resolvePromise:strongResolve withResult:result[@"psbt"]];
620
+ }
621
+ }
622
+ });
623
+ }
624
+
625
+ - (void)drainToEnd:(NSNumber *)walletId
626
+ signedPsbt:(NSString *)signedPsbt
627
+ resolve:(RCTPromiseResolveBlock)resolve
628
+ reject:(RCTPromiseRejectBlock)reject
629
+ {
630
+ __weak Rgb *weakSelf = self;
631
+ RCTPromiseResolveBlock strongResolve = resolve;
632
+ RCTPromiseRejectBlock strongReject = reject;
633
+ NSNumber *strongWalletId = [walletId copy];
634
+ NSString *strongSignedPsbt = [signedPsbt copy];
635
+
636
+ EXEC_ASYNC({
637
+ NSDictionary *result = [RgbSwiftHelper _drainToEnd:strongWalletId signedPsbt:strongSignedPsbt];
638
+ NSString *errorMessage = result[@"error"];
639
+ if (errorMessage != nil) {
640
+ NSString *errorCode = result[@"errorCode"] ?: @"ERROR";
641
+ dispatch_async(dispatch_get_main_queue(), ^{
642
+ if (strongReject) {
643
+ strongReject(errorCode, errorMessage, nil);
644
+ }
645
+ });
646
+ } else {
647
+ __strong Rgb *strongSelf = weakSelf;
648
+ if (strongSelf && strongResolve) {
649
+ [strongSelf resolvePromise:strongResolve withResult:result[@"txid"]];
650
+ }
651
+ }
652
+ });
653
+ }
654
+
655
+ - (void)failTransfers:(NSNumber *)walletId
656
+ batchTransferIdx:(NSNumber *)batchTransferIdx
657
+ noAssetOnly:(NSNumber *)noAssetOnly
658
+ skipSync:(NSNumber *)skipSync
659
+ resolve:(RCTPromiseResolveBlock)resolve
660
+ reject:(RCTPromiseRejectBlock)reject
661
+ {
662
+ __weak Rgb *weakSelf = self;
663
+ RCTPromiseResolveBlock strongResolve = resolve;
664
+ RCTPromiseRejectBlock strongReject = reject;
665
+ NSNumber *strongWalletId = [walletId copy];
666
+ NSNumber *strongBatchTransferIdx = batchTransferIdx ? [batchTransferIdx copy] : nil;
667
+ NSNumber *strongNoAssetOnly = [noAssetOnly copy];
668
+ NSNumber *strongSkipSync = [skipSync copy];
669
+
670
+ EXEC_ASYNC({
671
+ NSDictionary *result = [RgbSwiftHelper _failTransfers:strongWalletId
672
+ batchTransferIdx:strongBatchTransferIdx
673
+ noAssetOnly:strongNoAssetOnly
674
+ skipSync:strongSkipSync];
675
+ NSString *errorMessage = result[@"error"];
676
+ if (errorMessage != nil) {
677
+ NSString *errorCode = result[@"errorCode"] ?: @"ERROR";
678
+ dispatch_async(dispatch_get_main_queue(), ^{
679
+ if (strongReject) {
680
+ strongReject(errorCode, errorMessage, nil);
681
+ }
682
+ });
683
+ } else {
684
+ __strong Rgb *strongSelf = weakSelf;
685
+ if (strongSelf && strongResolve) {
686
+ [strongSelf resolvePromise:strongResolve withResult:result[@"failed"]];
687
+ }
688
+ }
689
+ });
690
+ }
691
+
692
+ - (void)finalizePsbt:(NSNumber *)walletId
693
+ signedPsbt:(NSString *)signedPsbt
694
+ resolve:(RCTPromiseResolveBlock)resolve
695
+ reject:(RCTPromiseRejectBlock)reject
696
+ {
697
+ __weak Rgb *weakSelf = self;
698
+ RCTPromiseResolveBlock strongResolve = resolve;
699
+ RCTPromiseRejectBlock strongReject = reject;
700
+ NSNumber *strongWalletId = [walletId copy];
701
+ NSString *strongSignedPsbt = [signedPsbt copy];
702
+
703
+ EXEC_ASYNC({
704
+ NSDictionary *result = [RgbSwiftHelper _finalizePsbt:strongWalletId signedPsbt:strongSignedPsbt];
705
+ NSString *errorMessage = result[@"error"];
706
+ if (errorMessage != nil) {
707
+ NSString *errorCode = result[@"errorCode"] ?: @"ERROR";
708
+ dispatch_async(dispatch_get_main_queue(), ^{
709
+ if (strongReject) {
710
+ strongReject(errorCode, errorMessage, nil);
711
+ }
712
+ });
713
+ } else {
714
+ __strong Rgb *strongSelf = weakSelf;
715
+ if (strongSelf && strongResolve) {
716
+ [strongSelf resolvePromise:strongResolve withResult:result[@"psbt"]];
717
+ }
718
+ }
719
+ });
720
+ }
721
+
722
+ - (void)getAddress:(NSNumber *)walletId
723
+ resolve:(RCTPromiseResolveBlock)resolve
724
+ reject:(RCTPromiseRejectBlock)reject
725
+ {
726
+ __weak Rgb *weakSelf = self;
727
+ RCTPromiseResolveBlock strongResolve = resolve;
728
+ RCTPromiseRejectBlock strongReject = reject;
729
+ NSNumber *strongWalletId = [walletId copy];
730
+
731
+ EXEC_ASYNC({
732
+ NSDictionary *result = [RgbSwiftHelper _getAddress:strongWalletId];
733
+ NSString *errorMessage = result[@"error"];
734
+ if (errorMessage != nil) {
735
+ NSString *errorCode = result[@"errorCode"] ?: @"ERROR";
736
+ dispatch_async(dispatch_get_main_queue(), ^{
737
+ if (strongReject) {
738
+ strongReject(errorCode, errorMessage, nil);
739
+ }
740
+ });
741
+ } else {
742
+ __strong Rgb *strongSelf = weakSelf;
743
+ if (strongSelf && strongResolve) {
744
+ [strongSelf resolvePromise:strongResolve withResult:result[@"address"]];
745
+ }
746
+ }
747
+ });
748
+ }
749
+
750
+ - (void)getAssetBalance:(NSNumber *)walletId
751
+ assetId:(NSString *)assetId
752
+ resolve:(RCTPromiseResolveBlock)resolve
753
+ reject:(RCTPromiseRejectBlock)reject
754
+ {
755
+ __weak Rgb *weakSelf = self;
756
+ RCTPromiseResolveBlock strongResolve = resolve;
757
+ RCTPromiseRejectBlock strongReject = reject;
758
+ NSNumber *strongWalletId = [walletId copy];
759
+ NSString *strongAssetId = [assetId copy];
760
+
761
+ EXEC_ASYNC({
762
+ NSDictionary *result = [RgbSwiftHelper _getAssetBalance:strongWalletId assetId:strongAssetId];
763
+ NSString *errorMessage = result[@"error"];
764
+ if (errorMessage != nil) {
765
+ NSString *errorCode = result[@"errorCode"] ?: @"ERROR";
766
+ dispatch_async(dispatch_get_main_queue(), ^{
767
+ if (strongReject) {
768
+ strongReject(errorCode, errorMessage, nil);
769
+ }
770
+ });
771
+ } else {
772
+ __strong Rgb *strongSelf = weakSelf;
773
+ if (strongSelf && strongResolve) {
774
+ [strongSelf resolvePromise:strongResolve withResult:result];
775
+ }
776
+ }
777
+ });
778
+ }
779
+
780
+ - (void)getAssetMetadata:(NSNumber *)walletId
781
+ assetId:(NSString *)assetId
782
+ resolve:(RCTPromiseResolveBlock)resolve
783
+ reject:(RCTPromiseRejectBlock)reject
784
+ {
785
+ __weak Rgb *weakSelf = self;
786
+ RCTPromiseResolveBlock strongResolve = resolve;
787
+ RCTPromiseRejectBlock strongReject = reject;
788
+ NSNumber *strongWalletId = [walletId copy];
789
+ NSString *strongAssetId = [assetId copy];
790
+
791
+ EXEC_ASYNC({
792
+ NSDictionary *result = [RgbSwiftHelper _getAssetMetadata:strongWalletId assetId:strongAssetId];
793
+ NSString *errorMessage = result[@"error"];
794
+ if (errorMessage != nil) {
795
+ NSString *errorCode = result[@"errorCode"] ?: @"ERROR";
796
+ dispatch_async(dispatch_get_main_queue(), ^{
797
+ if (strongReject) {
798
+ strongReject(errorCode, errorMessage, nil);
799
+ }
800
+ });
801
+ } else {
802
+ __strong Rgb *strongSelf = weakSelf;
803
+ if (strongSelf && strongResolve) {
804
+ [strongSelf resolvePromise:strongResolve withResult:result];
805
+ }
806
+ }
807
+ });
808
+ }
809
+
810
+ - (void)getFeeEstimation:(NSNumber *)walletId
811
+ blocks:(NSNumber *)blocks
812
+ resolve:(RCTPromiseResolveBlock)resolve
813
+ reject:(RCTPromiseRejectBlock)reject
814
+ {
815
+ __weak Rgb *weakSelf = self;
816
+ RCTPromiseResolveBlock strongResolve = resolve;
817
+ RCTPromiseRejectBlock strongReject = reject;
818
+ NSNumber *strongWalletId = [walletId copy];
819
+ NSNumber *strongBlocks = [blocks copy];
820
+
821
+ EXEC_ASYNC({
822
+ NSDictionary *result = [RgbSwiftHelper _getFeeEstimation:strongWalletId blocks:strongBlocks];
823
+ NSString *errorMessage = result[@"error"];
824
+ if (errorMessage != nil) {
825
+ NSString *errorCode = result[@"errorCode"] ?: @"ERROR";
826
+ dispatch_async(dispatch_get_main_queue(), ^{
827
+ if (strongReject) {
828
+ strongReject(errorCode, errorMessage, nil);
829
+ }
830
+ });
831
+ } else {
832
+ __strong Rgb *strongSelf = weakSelf;
833
+ if (strongSelf && strongResolve) {
834
+ [strongSelf resolvePromise:strongResolve withResult:result[@"feeRate"]];
835
+ }
836
+ }
837
+ });
838
+ }
839
+
840
+ - (void)getMediaDir:(NSNumber *)walletId
841
+ resolve:(RCTPromiseResolveBlock)resolve
842
+ reject:(RCTPromiseRejectBlock)reject
843
+ {
844
+ __weak Rgb *weakSelf = self;
845
+ RCTPromiseResolveBlock strongResolve = resolve;
846
+ RCTPromiseRejectBlock strongReject = reject;
847
+ NSNumber *strongWalletId = [walletId copy];
848
+
849
+ EXEC_ASYNC({
850
+ NSDictionary *result = [RgbSwiftHelper _getMediaDir:strongWalletId];
851
+ NSString *errorMessage = result[@"error"];
852
+ if (errorMessage != nil) {
853
+ NSString *errorCode = result[@"errorCode"] ?: @"ERROR";
854
+ dispatch_async(dispatch_get_main_queue(), ^{
855
+ if (strongReject) {
856
+ strongReject(errorCode, errorMessage, nil);
857
+ }
858
+ });
859
+ } else {
860
+ __strong Rgb *strongSelf = weakSelf;
861
+ if (strongSelf && strongResolve) {
862
+ [strongSelf resolvePromise:strongResolve withResult:result[@"mediaDir"]];
863
+ }
864
+ }
865
+ });
866
+ }
867
+
868
+ - (void)getWalletData:(NSNumber *)walletId
869
+ resolve:(RCTPromiseResolveBlock)resolve
870
+ reject:(RCTPromiseRejectBlock)reject
871
+ {
872
+ __weak Rgb *weakSelf = self;
873
+ RCTPromiseResolveBlock strongResolve = resolve;
874
+ RCTPromiseRejectBlock strongReject = reject;
875
+ NSNumber *strongWalletId = [walletId copy];
876
+
877
+ EXEC_ASYNC({
878
+ NSDictionary *result = [RgbSwiftHelper _getWalletData:strongWalletId];
879
+ NSString *errorMessage = result[@"error"];
880
+ if (errorMessage != nil) {
881
+ NSString *errorCode = result[@"errorCode"] ?: @"ERROR";
882
+ dispatch_async(dispatch_get_main_queue(), ^{
883
+ if (strongReject) {
884
+ strongReject(errorCode, errorMessage, nil);
885
+ }
886
+ });
887
+ } else {
888
+ __strong Rgb *strongSelf = weakSelf;
889
+ if (strongSelf && strongResolve) {
890
+ [strongSelf resolvePromise:strongResolve withResult:result];
891
+ }
892
+ }
893
+ });
894
+ }
895
+
896
+ - (void)getWalletDir:(NSNumber *)walletId
897
+ resolve:(RCTPromiseResolveBlock)resolve
898
+ reject:(RCTPromiseRejectBlock)reject
899
+ {
900
+ __weak Rgb *weakSelf = self;
901
+ RCTPromiseResolveBlock strongResolve = resolve;
902
+ RCTPromiseRejectBlock strongReject = reject;
903
+ NSNumber *strongWalletId = [walletId copy];
904
+
905
+ EXEC_ASYNC({
906
+ NSDictionary *result = [RgbSwiftHelper _getWalletDir:strongWalletId];
907
+ NSString *errorMessage = result[@"error"];
908
+ if (errorMessage != nil) {
909
+ NSString *errorCode = result[@"errorCode"] ?: @"ERROR";
910
+ dispatch_async(dispatch_get_main_queue(), ^{
911
+ if (strongReject) {
912
+ strongReject(errorCode, errorMessage, nil);
913
+ }
914
+ });
915
+ } else {
916
+ __strong Rgb *strongSelf = weakSelf;
917
+ if (strongSelf && strongResolve) {
918
+ [strongSelf resolvePromise:strongResolve withResult:result[@"walletDir"]];
919
+ }
920
+ }
921
+ });
922
+ }
923
+
924
+ - (void)inflate:(NSNumber *)walletId
925
+ assetId:(NSString *)assetId
926
+ inflationAmounts:(NSArray<NSNumber *> *)inflationAmounts
927
+ feeRate:(NSNumber *)feeRate
928
+ minConfirmations:(NSNumber *)minConfirmations
929
+ resolve:(RCTPromiseResolveBlock)resolve
930
+ reject:(RCTPromiseRejectBlock)reject
931
+ {
932
+ __weak Rgb *weakSelf = self;
933
+ RCTPromiseResolveBlock strongResolve = resolve;
934
+ RCTPromiseRejectBlock strongReject = reject;
935
+ NSNumber *strongWalletId = [walletId copy];
936
+ NSString *strongAssetId = [assetId copy];
937
+ NSArray *strongInflationAmounts = [inflationAmounts copy];
938
+ NSNumber *strongFeeRate = [feeRate copy];
939
+ NSNumber *strongMinConfirmations = [minConfirmations copy];
940
+
941
+ EXEC_ASYNC({
942
+ NSDictionary *result = [RgbSwiftHelper _inflate:strongWalletId
943
+ assetId:strongAssetId
944
+ inflationAmounts:strongInflationAmounts
945
+ feeRate:strongFeeRate
946
+ minConfirmations:strongMinConfirmations];
947
+ NSString *errorMessage = result[@"error"];
948
+ if (errorMessage != nil) {
949
+ NSString *errorCode = result[@"errorCode"] ?: @"ERROR";
950
+ dispatch_async(dispatch_get_main_queue(), ^{
951
+ if (strongReject) {
952
+ strongReject(errorCode, errorMessage, nil);
953
+ }
954
+ });
955
+ } else {
956
+ __strong Rgb *strongSelf = weakSelf;
957
+ if (strongSelf && strongResolve) {
958
+ [strongSelf resolvePromise:strongResolve withResult:result];
959
+ }
960
+ }
961
+ });
962
+ }
963
+
964
+ - (void)inflateBegin:(NSNumber *)walletId
965
+ assetId:(NSString *)assetId
966
+ inflationAmounts:(NSArray<NSNumber *> *)inflationAmounts
967
+ feeRate:(NSNumber *)feeRate
968
+ minConfirmations:(NSNumber *)minConfirmations
969
+ resolve:(RCTPromiseResolveBlock)resolve
970
+ reject:(RCTPromiseRejectBlock)reject
971
+ {
972
+ __weak Rgb *weakSelf = self;
973
+ RCTPromiseResolveBlock strongResolve = resolve;
974
+ RCTPromiseRejectBlock strongReject = reject;
975
+ NSNumber *strongWalletId = [walletId copy];
976
+ NSString *strongAssetId = [assetId copy];
977
+ NSArray *strongInflationAmounts = [inflationAmounts copy];
978
+ NSNumber *strongFeeRate = [feeRate copy];
979
+ NSNumber *strongMinConfirmations = [minConfirmations copy];
980
+
981
+ EXEC_ASYNC({
982
+ NSDictionary *result = [RgbSwiftHelper _inflateBegin:strongWalletId
983
+ assetId:strongAssetId
984
+ inflationAmounts:strongInflationAmounts
985
+ feeRate:strongFeeRate
986
+ minConfirmations:strongMinConfirmations];
987
+ NSString *errorMessage = result[@"error"];
988
+ if (errorMessage != nil) {
989
+ NSString *errorCode = result[@"errorCode"] ?: @"ERROR";
990
+ dispatch_async(dispatch_get_main_queue(), ^{
991
+ if (strongReject) {
992
+ strongReject(errorCode, errorMessage, nil);
993
+ }
994
+ });
995
+ } else {
996
+ __strong Rgb *strongSelf = weakSelf;
997
+ if (strongSelf && strongResolve) {
998
+ [strongSelf resolvePromise:strongResolve withResult:result[@"psbt"]];
999
+ }
1000
+ }
1001
+ });
1002
+ }
1003
+
1004
+ - (void)inflateEnd:(NSNumber *)walletId
1005
+ signedPsbt:(NSString *)signedPsbt
1006
+ resolve:(RCTPromiseResolveBlock)resolve
1007
+ reject:(RCTPromiseRejectBlock)reject
1008
+ {
1009
+ __weak Rgb *weakSelf = self;
1010
+ RCTPromiseResolveBlock strongResolve = resolve;
1011
+ RCTPromiseRejectBlock strongReject = reject;
1012
+ NSNumber *strongWalletId = [walletId copy];
1013
+ NSString *strongSignedPsbt = [signedPsbt copy];
1014
+
1015
+ EXEC_ASYNC({
1016
+ NSDictionary *result = [RgbSwiftHelper _inflateEnd:strongWalletId signedPsbt:strongSignedPsbt];
1017
+ NSString *errorMessage = result[@"error"];
1018
+ if (errorMessage != nil) {
1019
+ NSString *errorCode = result[@"errorCode"] ?: @"ERROR";
1020
+ dispatch_async(dispatch_get_main_queue(), ^{
1021
+ if (strongReject) {
1022
+ strongReject(errorCode, errorMessage, nil);
1023
+ }
1024
+ });
1025
+ } else {
1026
+ __strong Rgb *strongSelf = weakSelf;
1027
+ if (strongSelf && strongResolve) {
1028
+ [strongSelf resolvePromise:strongResolve withResult:result];
1029
+ }
1030
+ }
1031
+ });
1032
+ }
1033
+
1034
+ - (void)issueAssetCfa:(NSNumber *)walletId
1035
+ name:(NSString *)name
1036
+ details:(NSString *)details
1037
+ precision:(NSNumber *)precision
1038
+ amounts:(NSArray<NSNumber *> *)amounts
1039
+ filePath:(NSString *)filePath
1040
+ resolve:(RCTPromiseResolveBlock)resolve
1041
+ reject:(RCTPromiseRejectBlock)reject
1042
+ {
1043
+ __weak Rgb *weakSelf = self;
1044
+ RCTPromiseResolveBlock strongResolve = resolve;
1045
+ RCTPromiseRejectBlock strongReject = reject;
1046
+ NSNumber *strongWalletId = [walletId copy];
1047
+ NSString *strongName = [name copy];
1048
+ NSString *strongDetails = details ? [details copy] : nil;
1049
+ NSNumber *strongPrecision = [precision copy];
1050
+ NSArray *strongAmounts = [amounts copy];
1051
+ NSString *strongFilePath = filePath ? [filePath copy] : nil;
1052
+
1053
+ EXEC_ASYNC({
1054
+ NSDictionary *result = [RgbSwiftHelper _issueAssetCfa:strongWalletId
1055
+ name:strongName
1056
+ details:strongDetails
1057
+ precision:strongPrecision
1058
+ amounts:strongAmounts
1059
+ filePath:strongFilePath];
1060
+ NSString *errorMessage = result[@"error"];
1061
+ if (errorMessage != nil) {
1062
+ NSString *errorCode = result[@"errorCode"] ?: @"ERROR";
1063
+ dispatch_async(dispatch_get_main_queue(), ^{
1064
+ if (strongReject) {
1065
+ strongReject(errorCode, errorMessage, nil);
1066
+ }
1067
+ });
1068
+ } else {
1069
+ __strong Rgb *strongSelf = weakSelf;
1070
+ if (strongSelf && strongResolve) {
1071
+ [strongSelf resolvePromise:strongResolve withResult:result];
1072
+ }
1073
+ }
1074
+ });
1075
+ }
1076
+
1077
+ - (void)issueAssetIfa:(NSNumber *)walletId
1078
+ ticker:(NSString *)ticker
1079
+ name:(NSString *)name
1080
+ precision:(NSNumber *)precision
1081
+ amounts:(NSArray<NSNumber *> *)amounts
1082
+ inflationAmounts:(NSArray<NSNumber *> *)inflationAmounts
1083
+ replaceRightsNum:(NSNumber *)replaceRightsNum
1084
+ rejectListUrl:(NSString *)rejectListUrl
1085
+ resolve:(RCTPromiseResolveBlock)resolve
1086
+ reject:(RCTPromiseRejectBlock)reject
1087
+ {
1088
+ __weak Rgb *weakSelf = self;
1089
+ RCTPromiseResolveBlock strongResolve = resolve;
1090
+ RCTPromiseRejectBlock strongReject = reject;
1091
+ NSNumber *strongWalletId = [walletId copy];
1092
+ NSString *strongTicker = [ticker copy];
1093
+ NSString *strongName = [name copy];
1094
+ NSNumber *strongPrecision = [precision copy];
1095
+ NSArray *strongAmounts = [amounts copy];
1096
+ NSArray *strongInflationAmounts = [inflationAmounts copy];
1097
+ NSNumber *strongReplaceRightsNum = [replaceRightsNum copy];
1098
+ NSString *strongRejectListUrl = rejectListUrl ? [rejectListUrl copy] : nil;
1099
+
1100
+ EXEC_ASYNC({
1101
+ NSDictionary *result = [RgbSwiftHelper _issueAssetIfa:strongWalletId
1102
+ ticker:strongTicker
1103
+ name:strongName
1104
+ precision:strongPrecision
1105
+ amounts:strongAmounts
1106
+ inflationAmounts:strongInflationAmounts
1107
+ replaceRightsNum:strongReplaceRightsNum
1108
+ rejectListUrl:strongRejectListUrl];
1109
+ NSString *errorMessage = result[@"error"];
1110
+ if (errorMessage != nil) {
1111
+ NSString *errorCode = result[@"errorCode"] ?: @"ERROR";
1112
+ dispatch_async(dispatch_get_main_queue(), ^{
1113
+ if (strongReject) {
1114
+ strongReject(errorCode, errorMessage, nil);
1115
+ }
1116
+ });
1117
+ } else {
1118
+ __strong Rgb *strongSelf = weakSelf;
1119
+ if (strongSelf && strongResolve) {
1120
+ [strongSelf resolvePromise:strongResolve withResult:result];
1121
+ }
1122
+ }
1123
+ });
1124
+ }
1125
+
1126
+ - (void)issueAssetNia:(NSNumber *)walletId
1127
+ ticker:(NSString *)ticker
1128
+ name:(NSString *)name
1129
+ precision:(NSNumber *)precision
1130
+ amounts:(NSArray<NSNumber *> *)amounts
1131
+ resolve:(RCTPromiseResolveBlock)resolve
1132
+ reject:(RCTPromiseRejectBlock)reject
1133
+ {
1134
+ __weak Rgb *weakSelf = self;
1135
+ RCTPromiseResolveBlock strongResolve = resolve;
1136
+ RCTPromiseRejectBlock strongReject = reject;
1137
+ NSNumber *strongWalletId = [walletId copy];
1138
+ NSString *strongTicker = [ticker copy];
1139
+ NSString *strongName = [name copy];
1140
+ NSNumber *strongPrecision = [precision copy];
1141
+ NSArray *strongAmounts = [amounts copy];
1142
+
1143
+ EXEC_ASYNC({
1144
+ NSDictionary *result = [RgbSwiftHelper _issueAssetNia:strongWalletId
1145
+ ticker:strongTicker
1146
+ name:strongName
1147
+ precision:strongPrecision
1148
+ amounts:strongAmounts];
1149
+ NSString *errorMessage = result[@"error"];
1150
+ if (errorMessage != nil) {
1151
+ NSString *errorCode = result[@"errorCode"] ?: @"ERROR";
1152
+ dispatch_async(dispatch_get_main_queue(), ^{
1153
+ if (strongReject) {
1154
+ strongReject(errorCode, errorMessage, nil);
1155
+ }
1156
+ });
1157
+ } else {
1158
+ __strong Rgb *strongSelf = weakSelf;
1159
+ if (strongSelf && strongResolve) {
1160
+ [strongSelf resolvePromise:strongResolve withResult:result];
1161
+ }
1162
+ }
1163
+ });
1164
+ }
1165
+
1166
+ - (void)issueAssetUda:(NSNumber *)walletId
1167
+ ticker:(NSString *)ticker
1168
+ name:(NSString *)name
1169
+ details:(NSString *)details
1170
+ precision:(NSNumber *)precision
1171
+ mediaFilePath:(NSString *)mediaFilePath
1172
+ attachmentsFilePaths:(NSArray<NSString *> *)attachmentsFilePaths
1173
+ resolve:(RCTPromiseResolveBlock)resolve
1174
+ reject:(RCTPromiseRejectBlock)reject
1175
+ {
1176
+ __weak Rgb *weakSelf = self;
1177
+ RCTPromiseResolveBlock strongResolve = resolve;
1178
+ RCTPromiseRejectBlock strongReject = reject;
1179
+ NSNumber *strongWalletId = [walletId copy];
1180
+ NSString *strongTicker = [ticker copy];
1181
+ NSString *strongName = [name copy];
1182
+ NSString *strongDetails = details ? [details copy] : nil;
1183
+ NSNumber *strongPrecision = [precision copy];
1184
+ NSString *strongMediaFilePath = mediaFilePath ? [mediaFilePath copy] : nil;
1185
+ NSArray *strongAttachmentsFilePaths = [attachmentsFilePaths copy];
1186
+
1187
+ EXEC_ASYNC({
1188
+ NSDictionary *result = [RgbSwiftHelper _issueAssetUda:strongWalletId
1189
+ ticker:strongTicker
1190
+ name:strongName
1191
+ details:strongDetails
1192
+ precision:strongPrecision
1193
+ mediaFilePath:strongMediaFilePath
1194
+ attachmentsFilePaths:strongAttachmentsFilePaths];
1195
+ NSString *errorMessage = result[@"error"];
1196
+ if (errorMessage != nil) {
1197
+ NSString *errorCode = result[@"errorCode"] ?: @"ERROR";
1198
+ dispatch_async(dispatch_get_main_queue(), ^{
1199
+ if (strongReject) {
1200
+ strongReject(errorCode, errorMessage, nil);
1201
+ }
1202
+ });
1203
+ } else {
1204
+ __strong Rgb *strongSelf = weakSelf;
1205
+ if (strongSelf && strongResolve) {
1206
+ [strongSelf resolvePromise:strongResolve withResult:result];
1207
+ }
1208
+ }
1209
+ });
1210
+ }
1211
+
1212
+ - (void)listAssets:(NSNumber *)walletId
1213
+ filterAssetSchemas:(NSArray<NSString *> *)filterAssetSchemas
1214
+ resolve:(RCTPromiseResolveBlock)resolve
1215
+ reject:(RCTPromiseRejectBlock)reject
1216
+ {
1217
+ __weak Rgb *weakSelf = self;
1218
+ RCTPromiseResolveBlock strongResolve = resolve;
1219
+ RCTPromiseRejectBlock strongReject = reject;
1220
+ NSNumber *strongWalletId = [walletId copy];
1221
+ NSArray *strongFilterAssetSchemas = [filterAssetSchemas copy];
1222
+
1223
+ EXEC_ASYNC({
1224
+ NSDictionary *result = [RgbSwiftHelper _listAssets:strongWalletId filterAssetSchemas:strongFilterAssetSchemas];
1225
+ NSString *errorMessage = result[@"error"];
1226
+ if (errorMessage != nil) {
1227
+ NSString *errorCode = result[@"errorCode"] ?: @"ERROR";
1228
+ dispatch_async(dispatch_get_main_queue(), ^{
1229
+ if (strongReject) {
1230
+ strongReject(errorCode, errorMessage, nil);
1231
+ }
1232
+ });
1233
+ } else {
1234
+ __strong Rgb *strongSelf = weakSelf;
1235
+ if (strongSelf && strongResolve) {
1236
+ [strongSelf resolvePromise:strongResolve withResult:result];
1237
+ }
1238
+ }
1239
+ });
1240
+ }
1241
+
1242
+ - (void)listTransactions:(NSNumber *)walletId
1243
+ skipSync:(NSNumber *)skipSync
1244
+ resolve:(RCTPromiseResolveBlock)resolve
1245
+ reject:(RCTPromiseRejectBlock)reject
1246
+ {
1247
+ __weak Rgb *weakSelf = self;
1248
+ RCTPromiseResolveBlock strongResolve = resolve;
1249
+ RCTPromiseRejectBlock strongReject = reject;
1250
+ NSNumber *strongWalletId = [walletId copy];
1251
+ NSNumber *strongSkipSync = [skipSync copy];
1252
+
1253
+ EXEC_ASYNC({
1254
+ NSDictionary *result = [RgbSwiftHelper _listTransactions:strongWalletId skipSync:strongSkipSync];
1255
+ NSString *errorMessage = result[@"error"];
1256
+ if (errorMessage != nil) {
1257
+ NSString *errorCode = result[@"errorCode"] ?: @"ERROR";
1258
+ dispatch_async(dispatch_get_main_queue(), ^{
1259
+ if (strongReject) {
1260
+ strongReject(errorCode, errorMessage, nil);
1261
+ }
1262
+ });
1263
+ } else {
1264
+ __strong Rgb *strongSelf = weakSelf;
1265
+ if (strongSelf && strongResolve) {
1266
+ [strongSelf resolvePromise:strongResolve withResult:result[@"transactions"]];
1267
+ }
1268
+ }
1269
+ });
1270
+ }
1271
+
1272
+ - (void)listTransfers:(NSNumber *)walletId
1273
+ assetId:(NSString *)assetId
1274
+ resolve:(RCTPromiseResolveBlock)resolve
1275
+ reject:(RCTPromiseRejectBlock)reject
1276
+ {
1277
+ __weak Rgb *weakSelf = self;
1278
+ RCTPromiseResolveBlock strongResolve = resolve;
1279
+ RCTPromiseRejectBlock strongReject = reject;
1280
+ NSNumber *strongWalletId = [walletId copy];
1281
+ NSString *strongAssetId = assetId ? [assetId copy] : nil;
1282
+
1283
+ EXEC_ASYNC({
1284
+ NSDictionary *result = [RgbSwiftHelper _listTransfers:strongWalletId assetId:strongAssetId];
1285
+ NSString *errorMessage = result[@"error"];
1286
+ if (errorMessage != nil) {
1287
+ NSString *errorCode = result[@"errorCode"] ?: @"ERROR";
1288
+ dispatch_async(dispatch_get_main_queue(), ^{
1289
+ if (strongReject) {
1290
+ strongReject(errorCode, errorMessage, nil);
1291
+ }
1292
+ });
1293
+ } else {
1294
+ __strong Rgb *strongSelf = weakSelf;
1295
+ if (strongSelf && strongResolve) {
1296
+ [strongSelf resolvePromise:strongResolve withResult:result[@"transfers"]];
1297
+ }
1298
+ }
1299
+ });
1300
+ }
1301
+
1302
+ - (void)listUnspents:(NSNumber *)walletId
1303
+ settledOnly:(NSNumber *)settledOnly
1304
+ skipSync:(NSNumber *)skipSync
1305
+ resolve:(RCTPromiseResolveBlock)resolve
1306
+ reject:(RCTPromiseRejectBlock)reject
1307
+ {
1308
+ __weak Rgb *weakSelf = self;
1309
+ RCTPromiseResolveBlock strongResolve = resolve;
1310
+ RCTPromiseRejectBlock strongReject = reject;
1311
+ NSNumber *strongWalletId = [walletId copy];
1312
+ NSNumber *strongSettledOnly = [settledOnly copy];
1313
+ NSNumber *strongSkipSync = [skipSync copy];
1314
+
1315
+ EXEC_ASYNC({
1316
+ NSDictionary *result = [RgbSwiftHelper _listUnspents:strongWalletId
1317
+ settledOnly:strongSettledOnly
1318
+ skipSync:strongSkipSync];
1319
+ NSString *errorMessage = result[@"error"];
1320
+ if (errorMessage != nil) {
1321
+ NSString *errorCode = result[@"errorCode"] ?: @"ERROR";
1322
+ dispatch_async(dispatch_get_main_queue(), ^{
1323
+ if (strongReject) {
1324
+ strongReject(errorCode, errorMessage, nil);
1325
+ }
1326
+ });
1327
+ } else {
1328
+ __strong Rgb *strongSelf = weakSelf;
1329
+ if (strongSelf && strongResolve) {
1330
+ [strongSelf resolvePromise:strongResolve withResult:result[@"unspents"]];
1331
+ }
1332
+ }
1333
+ });
1334
+ }
1335
+
1336
+ - (void)refresh:(NSNumber *)walletId
1337
+ assetId:(NSString *)assetId
1338
+ filter:(NSArray<NSDictionary *> *)filter
1339
+ skipSync:(NSNumber *)skipSync
1340
+ resolve:(RCTPromiseResolveBlock)resolve
1341
+ reject:(RCTPromiseRejectBlock)reject
1342
+ {
1343
+ __weak Rgb *weakSelf = self;
1344
+ RCTPromiseResolveBlock strongResolve = resolve;
1345
+ RCTPromiseRejectBlock strongReject = reject;
1346
+ NSNumber *strongWalletId = [walletId copy];
1347
+ NSString *strongAssetId = assetId ? [assetId copy] : nil;
1348
+ NSArray *strongFilter = [filter copy];
1349
+ NSNumber *strongSkipSync = [skipSync copy];
1350
+
1351
+ EXEC_ASYNC({
1352
+ NSDictionary *result = [RgbSwiftHelper _refresh:strongWalletId
1353
+ assetId:strongAssetId
1354
+ filter:strongFilter
1355
+ skipSync:strongSkipSync];
1356
+ NSString *errorMessage = result[@"error"];
1357
+ if (errorMessage != nil) {
1358
+ NSString *errorCode = result[@"errorCode"] ?: @"ERROR";
1359
+ dispatch_async(dispatch_get_main_queue(), ^{
1360
+ if (strongReject) {
1361
+ strongReject(errorCode, errorMessage, nil);
1362
+ }
1363
+ });
1364
+ } else {
1365
+ __strong Rgb *strongSelf = weakSelf;
1366
+ if (strongSelf && strongResolve) {
1367
+ [strongSelf resolvePromise:strongResolve withResult:result];
1368
+ }
1369
+ }
1370
+ });
1371
+ }
1372
+
1373
+ - (void)send:(NSNumber *)walletId
1374
+ recipientMap:(NSDictionary *)recipientMap
1375
+ donation:(NSNumber *)donation
1376
+ feeRate:(NSNumber *)feeRate
1377
+ minConfirmations:(NSNumber *)minConfirmations
1378
+ skipSync:(NSNumber *)skipSync
1379
+ resolve:(RCTPromiseResolveBlock)resolve
1380
+ reject:(RCTPromiseRejectBlock)reject
1381
+ {
1382
+ __weak Rgb *weakSelf = self;
1383
+ RCTPromiseResolveBlock strongResolve = resolve;
1384
+ RCTPromiseRejectBlock strongReject = reject;
1385
+ NSNumber *strongWalletId = [walletId copy];
1386
+ NSDictionary *strongRecipientMap = [recipientMap copy];
1387
+ NSNumber *strongDonation = [donation copy];
1388
+ NSNumber *strongFeeRate = [feeRate copy];
1389
+ NSNumber *strongMinConfirmations = [minConfirmations copy];
1390
+ NSNumber *strongSkipSync = [skipSync copy];
1391
+
1392
+ EXEC_ASYNC({
1393
+ NSDictionary *result = [RgbSwiftHelper _send:strongWalletId
1394
+ recipientMap:strongRecipientMap
1395
+ donation:strongDonation
1396
+ feeRate:strongFeeRate
1397
+ minConfirmations:strongMinConfirmations
1398
+ skipSync:strongSkipSync];
1399
+ NSString *errorMessage = result[@"error"];
1400
+ if (errorMessage != nil) {
1401
+ NSString *errorCode = result[@"errorCode"] ?: @"ERROR";
1402
+ dispatch_async(dispatch_get_main_queue(), ^{
1403
+ if (strongReject) {
1404
+ strongReject(errorCode, errorMessage, nil);
1405
+ }
1406
+ });
1407
+ } else {
1408
+ __strong Rgb *strongSelf = weakSelf;
1409
+ if (strongSelf && strongResolve) {
1410
+ [strongSelf resolvePromise:strongResolve withResult:result];
1411
+ }
1412
+ }
1413
+ });
1414
+ }
1415
+
1416
+ - (void)sendBegin:(NSNumber *)walletId
1417
+ recipientMap:(NSDictionary *)recipientMap
1418
+ donation:(NSNumber *)donation
1419
+ feeRate:(NSNumber *)feeRate
1420
+ minConfirmations:(NSNumber *)minConfirmations
1421
+ resolve:(RCTPromiseResolveBlock)resolve
1422
+ reject:(RCTPromiseRejectBlock)reject
1423
+ {
1424
+ __weak Rgb *weakSelf = self;
1425
+ RCTPromiseResolveBlock strongResolve = resolve;
1426
+ RCTPromiseRejectBlock strongReject = reject;
1427
+ NSNumber *strongWalletId = [walletId copy];
1428
+ NSDictionary *strongRecipientMap = [recipientMap copy];
1429
+ NSNumber *strongDonation = [donation copy];
1430
+ NSNumber *strongFeeRate = [feeRate copy];
1431
+ NSNumber *strongMinConfirmations = [minConfirmations copy];
1432
+
1433
+ EXEC_ASYNC({
1434
+ NSDictionary *result = [RgbSwiftHelper _sendBegin:strongWalletId
1435
+ recipientMap:strongRecipientMap
1436
+ donation:strongDonation
1437
+ feeRate:strongFeeRate
1438
+ minConfirmations:strongMinConfirmations];
1439
+ NSString *errorMessage = result[@"error"];
1440
+ if (errorMessage != nil) {
1441
+ NSString *errorCode = result[@"errorCode"] ?: @"ERROR";
1442
+ dispatch_async(dispatch_get_main_queue(), ^{
1443
+ if (strongReject) {
1444
+ strongReject(errorCode, errorMessage, nil);
1445
+ }
1446
+ });
1447
+ } else {
1448
+ __strong Rgb *strongSelf = weakSelf;
1449
+ if (strongSelf && strongResolve) {
1450
+ [strongSelf resolvePromise:strongResolve withResult:result[@"psbt"]];
1451
+ }
1452
+ }
1453
+ });
1454
+ }
1455
+
1456
+ - (void)sendBtc:(NSNumber *)walletId
1457
+ address:(NSString *)address
1458
+ amount:(NSNumber *)amount
1459
+ feeRate:(NSNumber *)feeRate
1460
+ skipSync:(NSNumber *)skipSync
1461
+ resolve:(RCTPromiseResolveBlock)resolve
1462
+ reject:(RCTPromiseRejectBlock)reject
1463
+ {
1464
+ __weak Rgb *weakSelf = self;
1465
+ RCTPromiseResolveBlock strongResolve = resolve;
1466
+ RCTPromiseRejectBlock strongReject = reject;
1467
+ NSNumber *strongWalletId = [walletId copy];
1468
+ NSString *strongAddress = [address copy];
1469
+ NSNumber *strongAmount = [amount copy];
1470
+ NSNumber *strongFeeRate = [feeRate copy];
1471
+ NSNumber *strongSkipSync = [skipSync copy];
1472
+
1473
+ EXEC_ASYNC({
1474
+ NSDictionary *result = [RgbSwiftHelper _sendBtc:strongWalletId
1475
+ address:strongAddress
1476
+ amount:strongAmount
1477
+ feeRate:strongFeeRate
1478
+ skipSync:strongSkipSync];
1479
+ NSString *errorMessage = result[@"error"];
1480
+ if (errorMessage != nil) {
1481
+ NSString *errorCode = result[@"errorCode"] ?: @"ERROR";
1482
+ dispatch_async(dispatch_get_main_queue(), ^{
1483
+ if (strongReject) {
1484
+ strongReject(errorCode, errorMessage, nil);
1485
+ }
1486
+ });
1487
+ } else {
1488
+ __strong Rgb *strongSelf = weakSelf;
1489
+ if (strongSelf && strongResolve) {
1490
+ [strongSelf resolvePromise:strongResolve withResult:result[@"txid"]];
1491
+ }
1492
+ }
1493
+ });
1494
+ }
1495
+
1496
+ - (void)sendBtcBegin:(NSNumber *)walletId
1497
+ address:(NSString *)address
1498
+ amount:(NSNumber *)amount
1499
+ feeRate:(NSNumber *)feeRate
1500
+ skipSync:(NSNumber *)skipSync
1501
+ resolve:(RCTPromiseResolveBlock)resolve
1502
+ reject:(RCTPromiseRejectBlock)reject
1503
+ {
1504
+ __weak Rgb *weakSelf = self;
1505
+ RCTPromiseResolveBlock strongResolve = resolve;
1506
+ RCTPromiseRejectBlock strongReject = reject;
1507
+ NSNumber *strongWalletId = [walletId copy];
1508
+ NSString *strongAddress = [address copy];
1509
+ NSNumber *strongAmount = [amount copy];
1510
+ NSNumber *strongFeeRate = [feeRate copy];
1511
+ NSNumber *strongSkipSync = [skipSync copy];
1512
+
1513
+ EXEC_ASYNC({
1514
+ NSDictionary *result = [RgbSwiftHelper _sendBtcBegin:strongWalletId
1515
+ address:strongAddress
1516
+ amount:strongAmount
1517
+ feeRate:strongFeeRate
1518
+ skipSync:strongSkipSync];
1519
+ NSString *errorMessage = result[@"error"];
1520
+ if (errorMessage != nil) {
1521
+ NSString *errorCode = result[@"errorCode"] ?: @"ERROR";
1522
+ dispatch_async(dispatch_get_main_queue(), ^{
1523
+ if (strongReject) {
1524
+ strongReject(errorCode, errorMessage, nil);
1525
+ }
1526
+ });
1527
+ } else {
1528
+ __strong Rgb *strongSelf = weakSelf;
1529
+ if (strongSelf && strongResolve) {
1530
+ [strongSelf resolvePromise:strongResolve withResult:result[@"psbt"]];
1531
+ }
1532
+ }
1533
+ });
1534
+ }
1535
+
1536
+ - (void)sendBtcEnd:(NSNumber *)walletId
1537
+ signedPsbt:(NSString *)signedPsbt
1538
+ skipSync:(NSNumber *)skipSync
1539
+ resolve:(RCTPromiseResolveBlock)resolve
1540
+ reject:(RCTPromiseRejectBlock)reject
1541
+ {
1542
+ __weak Rgb *weakSelf = self;
1543
+ RCTPromiseResolveBlock strongResolve = resolve;
1544
+ RCTPromiseRejectBlock strongReject = reject;
1545
+ NSNumber *strongWalletId = [walletId copy];
1546
+ NSString *strongSignedPsbt = [signedPsbt copy];
1547
+ NSNumber *strongSkipSync = [skipSync copy];
1548
+
1549
+ EXEC_ASYNC({
1550
+ NSDictionary *result = [RgbSwiftHelper _sendBtcEnd:strongWalletId signedPsbt:strongSignedPsbt skipSync:strongSkipSync];
1551
+ NSString *errorMessage = result[@"error"];
1552
+ if (errorMessage != nil) {
1553
+ NSString *errorCode = result[@"errorCode"] ?: @"ERROR";
1554
+ dispatch_async(dispatch_get_main_queue(), ^{
1555
+ if (strongReject) {
1556
+ strongReject(errorCode, errorMessage, nil);
1557
+ }
1558
+ });
1559
+ } else {
1560
+ __strong Rgb *strongSelf = weakSelf;
1561
+ if (strongSelf && strongResolve) {
1562
+ [strongSelf resolvePromise:strongResolve withResult:result[@"txid"]];
1563
+ }
1564
+ }
1565
+ });
1566
+ }
1567
+
1568
+ - (void)sendEnd:(NSNumber *)walletId
1569
+ signedPsbt:(NSString *)signedPsbt
1570
+ skipSync:(NSNumber *)skipSync
1571
+ resolve:(RCTPromiseResolveBlock)resolve
1572
+ reject:(RCTPromiseRejectBlock)reject
1573
+ {
1574
+ __weak Rgb *weakSelf = self;
1575
+ RCTPromiseResolveBlock strongResolve = resolve;
1576
+ RCTPromiseRejectBlock strongReject = reject;
1577
+ NSNumber *strongWalletId = [walletId copy];
1578
+ NSString *strongSignedPsbt = [signedPsbt copy];
1579
+ NSNumber *strongSkipSync = [skipSync copy];
1580
+
1581
+ EXEC_ASYNC({
1582
+ NSDictionary *result = [RgbSwiftHelper _sendEnd:strongWalletId signedPsbt:strongSignedPsbt skipSync:strongSkipSync];
1583
+ NSString *errorMessage = result[@"error"];
1584
+ if (errorMessage != nil) {
1585
+ NSString *errorCode = result[@"errorCode"] ?: @"ERROR";
1586
+ dispatch_async(dispatch_get_main_queue(), ^{
1587
+ if (strongReject) {
1588
+ strongReject(errorCode, errorMessage, nil);
1589
+ }
1590
+ });
1591
+ } else {
1592
+ __strong Rgb *strongSelf = weakSelf;
1593
+ if (strongSelf && strongResolve) {
1594
+ [strongSelf resolvePromise:strongResolve withResult:result];
1595
+ }
1596
+ }
1597
+ });
1598
+ }
1599
+
1600
+ - (void)signPsbt:(NSNumber *)walletId
1601
+ unsignedPsbt:(NSString *)unsignedPsbt
1602
+ resolve:(RCTPromiseResolveBlock)resolve
1603
+ reject:(RCTPromiseRejectBlock)reject
1604
+ {
1605
+ __weak Rgb *weakSelf = self;
1606
+ RCTPromiseResolveBlock strongResolve = resolve;
1607
+ RCTPromiseRejectBlock strongReject = reject;
1608
+ NSNumber *strongWalletId = [walletId copy];
1609
+ NSString *strongUnsignedPsbt = [unsignedPsbt copy];
1610
+
1611
+ EXEC_ASYNC({
1612
+ NSDictionary *result = [RgbSwiftHelper _signPsbt:strongWalletId unsignedPsbt:strongUnsignedPsbt];
1613
+ NSString *errorMessage = result[@"error"];
1614
+ if (errorMessage != nil) {
1615
+ NSString *errorCode = result[@"errorCode"] ?: @"ERROR";
1616
+ dispatch_async(dispatch_get_main_queue(), ^{
1617
+ if (strongReject) {
1618
+ strongReject(errorCode, errorMessage, nil);
1619
+ }
1620
+ });
1621
+ } else {
1622
+ __strong Rgb *strongSelf = weakSelf;
1623
+ if (strongSelf && strongResolve) {
1624
+ [strongSelf resolvePromise:strongResolve withResult:result[@"psbt"]];
1625
+ }
1626
+ }
1627
+ });
1628
+ }
1629
+
1630
+ - (void)sync:(NSNumber *)walletId
1631
+ resolve:(RCTPromiseResolveBlock)resolve
1632
+ reject:(RCTPromiseRejectBlock)reject
1633
+ {
1634
+ __weak Rgb *weakSelf = self;
1635
+ RCTPromiseResolveBlock strongResolve = resolve;
1636
+ RCTPromiseRejectBlock strongReject = reject;
1637
+ NSNumber *strongWalletId = [walletId copy];
1638
+
1639
+ EXEC_ASYNC({
1640
+ NSDictionary *result = [RgbSwiftHelper _sync:strongWalletId];
1641
+ NSString *errorMessage = result[@"error"];
1642
+ if (errorMessage != nil) {
1643
+ NSString *errorCode = result[@"errorCode"] ?: @"ERROR";
1644
+ dispatch_async(dispatch_get_main_queue(), ^{
1645
+ if (strongReject) {
1646
+ strongReject(errorCode, errorMessage, nil);
1647
+ }
1648
+ });
1649
+ } else {
1650
+ __strong Rgb *strongSelf = weakSelf;
1651
+ if (strongSelf && strongResolve) {
1652
+ [strongSelf resolvePromise:strongResolve withResult:nil];
1653
+ }
1654
+ }
1655
+ });
1656
+ }
1657
+
1658
+ - (void)witnessReceive:(NSNumber *)walletId
1659
+ assetId:(NSString *)assetId
1660
+ assignment:(NSDictionary *)assignment
1661
+ durationSeconds:(NSNumber *)durationSeconds
1662
+ transportEndpoints:(NSArray<NSString *> *)transportEndpoints
1663
+ minConfirmations:(NSNumber *)minConfirmations
1664
+ resolve:(RCTPromiseResolveBlock)resolve
1665
+ reject:(RCTPromiseRejectBlock)reject
1666
+ {
1667
+ __weak Rgb *weakSelf = self;
1668
+ RCTPromiseResolveBlock strongResolve = resolve;
1669
+ RCTPromiseRejectBlock strongReject = reject;
1670
+ NSNumber *strongWalletId = [walletId copy];
1671
+ NSString *strongAssetId = assetId ? [assetId copy] : nil;
1672
+ NSDictionary *strongAssignment = [assignment copy];
1673
+ NSNumber *strongDurationSeconds = durationSeconds ? [durationSeconds copy] : nil;
1674
+ NSArray *strongTransportEndpoints = [transportEndpoints copy];
1675
+ NSNumber *strongMinConfirmations = [minConfirmations copy];
1676
+
1677
+ EXEC_ASYNC({
1678
+ NSDictionary *result = [RgbSwiftHelper _witnessReceive:strongWalletId
1679
+ assetId:strongAssetId
1680
+ assignment:strongAssignment
1681
+ durationSeconds:strongDurationSeconds
1682
+ transportEndpoints:strongTransportEndpoints
1683
+ minConfirmations:strongMinConfirmations];
1684
+ NSString *errorMessage = result[@"error"];
1685
+ if (errorMessage != nil) {
1686
+ NSString *errorCode = result[@"errorCode"] ?: @"ERROR";
1687
+ dispatch_async(dispatch_get_main_queue(), ^{
1688
+ if (strongReject) {
1689
+ strongReject(errorCode, errorMessage, nil);
1690
+ }
1691
+ });
1692
+ } else {
1693
+ __strong Rgb *strongSelf = weakSelf;
1694
+ if (strongSelf && strongResolve) {
1695
+ [strongSelf resolvePromise:strongResolve withResult:result];
1696
+ }
1697
+ }
1698
+ });
1699
+ }
1700
+
1701
+ - (void)decodeInvoice:(NSString *)invoice
1702
+ resolve:(RCTPromiseResolveBlock)resolve
1703
+ reject:(RCTPromiseRejectBlock)reject
1704
+ {
1705
+ __weak Rgb *weakSelf = self;
1706
+ RCTPromiseResolveBlock strongResolve = resolve;
1707
+ RCTPromiseRejectBlock strongReject = reject;
1708
+ NSString *strongInvoice = [invoice copy];
1709
+
1710
+ EXEC_ASYNC({
1711
+ NSDictionary *result = [RgbSwiftHelper _decodeInvoice:strongInvoice];
1712
+ NSString *errorMessage = result[@"error"];
1713
+ if (errorMessage != nil) {
1714
+ NSString *errorCode = result[@"errorCode"] ?: @"ERROR";
1715
+ dispatch_async(dispatch_get_main_queue(), ^{
1716
+ if (strongReject) {
1717
+ strongReject(errorCode, errorMessage, nil);
1718
+ }
1719
+ });
1720
+ } else {
1721
+ __strong Rgb *strongSelf = weakSelf;
1722
+ if (strongSelf && strongResolve) {
1723
+ [strongSelf resolvePromise:strongResolve withResult:result];
1724
+ }
1725
+ }
1726
+ });
1727
+ }
1728
+
1729
+ - (std::shared_ptr<facebook::react::TurboModule>)getTurboModule:
1730
+ (const facebook::react::ObjCTurboModule::InitParams &)params
1731
+ {
1732
+ return std::make_shared<facebook::react::NativeRgbSpecJSI>(params);
1733
+ }
1734
+
1735
+ + (NSString *)moduleName
1736
+ {
1737
+ return @"Rgb";
1738
+ }
1739
+
1740
+ @end