Skip to content

Commit 8b76181

Browse files
Merge pull request #649 from Adamant-im/dev/trello.com/c/etjLStc6
[trello.com/c/etjLStc6] KVS-related code refactoring
2 parents f45fa99 + 0e555d8 commit 8b76181

File tree

9 files changed

+164
-115
lines changed

9 files changed

+164
-115
lines changed

Adamant/Modules/Wallets/Bitcoin/BtcWalletService.swift

Lines changed: 24 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -451,6 +451,7 @@ extension BtcWalletService {
451451
addressConverter: addressConverter
452452
)
453453
self.btcWallet = eWallet
454+
let kvsAddressModel = makeKVSAddressModel(wallet: eWallet)
454455

455456
NotificationCenter.default.post(
456457
name: walletUpdatedNotification,
@@ -467,9 +468,9 @@ extension BtcWalletService {
467468
let service = self
468469
do {
469470
let address = try await getWalletAddress(byAdamantAddress: adamant.address)
470-
if address != eWallet.address {
471-
service.save(btcAddress: eWallet.address) { result in
472-
service.kvsSaveCompletionRecursion(btcAddress: eWallet.address, result: result)
471+
if address != eWallet.address, let kvsAddressModel {
472+
service.save(kvsAddressModel) { result in
473+
service.kvsSaveCompletionRecursion(kvsAddressModel, result: result)
473474
}
474475
throw WalletServiceError.accountNotFound
475476
}
@@ -492,8 +493,10 @@ extension BtcWalletService {
492493
await service.update()
493494
}
494495

495-
service.save(btcAddress: eWallet.address) { result in
496-
service.kvsSaveCompletionRecursion(btcAddress: eWallet.address, result: result)
496+
if let kvsAddressModel {
497+
service.save(kvsAddressModel) { result in
498+
service.kvsSaveCompletionRecursion(kvsAddressModel, result: result)
499+
}
497500
}
498501

499502
return eWallet
@@ -563,8 +566,8 @@ extension BtcWalletService {
563566
/// - btcAddress: Bitcoin address to save into KVS
564567
/// - adamantAddress: Owner of BTC address
565568
/// - completion: success
566-
private func save(btcAddress: String, completion: @escaping @Sendable (WalletServiceSimpleResult) -> Void) {
567-
guard let adamant = accountService.account, let keypair = accountService.keypair else {
569+
private func save(_ model: KVSValueModel, completion: @escaping @Sendable (WalletServiceSimpleResult) -> Void) {
570+
guard let adamant = accountService.account else {
568571
completion(.failure(error: .notLogged))
569572
return
570573
}
@@ -575,13 +578,7 @@ extension BtcWalletService {
575578
}
576579

577580
Task {
578-
let result = await apiService.store(
579-
key: BtcWalletService.kvsAddress,
580-
value: btcAddress,
581-
type: .keyValue,
582-
sender: adamant.address,
583-
keypair: keypair
584-
)
581+
let result = await apiService.store(model)
585582

586583
switch result {
587584
case .success:
@@ -594,7 +591,7 @@ extension BtcWalletService {
594591
}
595592

596593
/// New accounts doesn't have enought money to save KVS. We need to wait for balance update, and then - retry save
597-
private func kvsSaveCompletionRecursion(btcAddress: String, result: WalletServiceSimpleResult) {
594+
private func kvsSaveCompletionRecursion(_ model: KVSValueModel, result: WalletServiceSimpleResult) {
598595
if let observer = balanceObserver {
599596
NotificationCenter.default.removeObserver(observer)
600597
balanceObserver = nil
@@ -613,8 +610,8 @@ extension BtcWalletService {
613610
return
614611
}
615612

616-
self?.save(btcAddress: btcAddress) { [weak self] result in
617-
self?.kvsSaveCompletionRecursion(btcAddress: btcAddress, result: result)
613+
self?.save(model) { [weak self] result in
614+
self?.kvsSaveCompletionRecursion(model, result: result)
618615
}
619616
}
620617

@@ -655,6 +652,16 @@ extension BtcWalletService {
655652
}
656653
}
657654
}
655+
656+
private func makeKVSAddressModel(wallet: WalletAccount) -> KVSValueModel? {
657+
guard let keypair = accountService.keypair else { return nil }
658+
659+
return .init(
660+
key: Self.kvsAddress,
661+
value: wallet.address,
662+
keypair: keypair
663+
)
664+
}
658665
}
659666

660667
// MARK: - Transactions

Adamant/Modules/Wallets/Dash/DashWalletService.swift

Lines changed: 25 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -331,6 +331,7 @@ extension DashWalletService {
331331
)
332332

333333
self.dashWallet = eWallet
334+
let kvsAddressModel = makeKVSAddressModel(wallet: eWallet)
334335

335336
NotificationCenter.default.post(
336337
name: walletUpdatedNotification,
@@ -347,9 +348,9 @@ extension DashWalletService {
347348
do {
348349
let address = try await getWalletAddress(byAdamantAddress: adamant.address)
349350
let service = self
350-
if address != eWallet.address {
351-
service.save(dashAddress: eWallet.address) { result in
352-
service.kvsSaveCompletionRecursion(dashAddress: eWallet.address, result: result)
351+
if address != eWallet.address, let kvsAddressModel {
352+
service.save(kvsAddressModel) { result in
353+
service.kvsSaveCompletionRecursion(kvsAddressModel, result: result)
353354
}
354355
}
355356

@@ -371,9 +372,12 @@ extension DashWalletService {
371372
await service.update()
372373
}
373374

374-
service.save(dashAddress: eWallet.address) { result in
375-
service.kvsSaveCompletionRecursion(dashAddress: eWallet.address, result: result)
375+
if let kvsAddressModel {
376+
service.save(kvsAddressModel) { result in
377+
service.kvsSaveCompletionRecursion(kvsAddressModel, result: result)
378+
}
376379
}
380+
377381
service.setState(.upToDate)
378382
return eWallet
379383

@@ -521,8 +525,8 @@ extension DashWalletService {
521525
/// - dashAddress: DASH address to save into KVS
522526
/// - adamantAddress: Owner of Dash address
523527
/// - completion: success
524-
private func save(dashAddress: String, completion: @escaping @Sendable (WalletServiceSimpleResult) -> Void) {
525-
guard let adamant = accountService.account, let keypair = accountService.keypair else {
528+
private func save(_ model: KVSValueModel, completion: @escaping @Sendable (WalletServiceSimpleResult) -> Void) {
529+
guard let adamant = accountService.account else {
526530
completion(.failure(error: .notLogged))
527531
return
528532
}
@@ -533,13 +537,7 @@ extension DashWalletService {
533537
}
534538

535539
Task { @Sendable in
536-
let result = await apiService.store(
537-
key: DashWalletService.kvsAddress,
538-
value: dashAddress,
539-
type: .keyValue,
540-
sender: adamant.address,
541-
keypair: keypair
542-
)
540+
let result = await apiService.store(model)
543541

544542
switch result {
545543
case .success:
@@ -552,7 +550,7 @@ extension DashWalletService {
552550
}
553551

554552
/// New accounts doesn't have enought money to save KVS. We need to wait for balance update, and then - retry save
555-
private func kvsSaveCompletionRecursion(dashAddress: String, result: WalletServiceSimpleResult) {
553+
private func kvsSaveCompletionRecursion(_ model: KVSValueModel, result: WalletServiceSimpleResult) {
556554
if let observer = balanceObserver {
557555
NotificationCenter.default.removeObserver(observer)
558556
balanceObserver = nil
@@ -571,8 +569,8 @@ extension DashWalletService {
571569
return
572570
}
573571

574-
self?.save(dashAddress: dashAddress) { [weak self] result in
575-
self?.kvsSaveCompletionRecursion(dashAddress: dashAddress, result: result)
572+
self?.save(model) { [weak self] result in
573+
self?.kvsSaveCompletionRecursion(model, result: result)
576574
}
577575
}
578576

@@ -584,6 +582,16 @@ extension DashWalletService {
584582
}
585583
}
586584
}
585+
586+
private func makeKVSAddressModel(wallet: WalletAccount) -> KVSValueModel? {
587+
guard let keypair = accountService.keypair else { return nil }
588+
589+
return .init(
590+
key: Self.kvsAddress,
591+
value: wallet.address,
592+
keypair: keypair
593+
)
594+
}
587595
}
588596

589597
// MARK: - PrivateKey generator

Adamant/Modules/Wallets/Doge/DogeWalletService.swift

Lines changed: 25 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -326,6 +326,7 @@ extension DogeWalletService {
326326
addressConverter: addressConverter
327327
)
328328
self.dogeWallet = eWallet
329+
let kvsAddressModel = makeKVSAddressModel(wallet: eWallet)
329330

330331
NotificationCenter.default.post(
331332
name: walletUpdatedNotification,
@@ -342,9 +343,9 @@ extension DogeWalletService {
342343
let service = self
343344
do {
344345
let address = try await getWalletAddress(byAdamantAddress: adamant.address)
345-
if address != eWallet.address {
346-
service.save(dogeAddress: eWallet.address) { result in
347-
service.kvsSaveCompletionRecursion(dogeAddress: eWallet.address, result: result)
346+
if address != eWallet.address, let kvsAddressModel {
347+
service.save(kvsAddressModel) { result in
348+
service.kvsSaveCompletionRecursion(kvsAddressModel, result: result)
348349
}
349350
}
350351

@@ -366,9 +367,12 @@ extension DogeWalletService {
366367
await service.update()
367368
}
368369

369-
service.save(dogeAddress: eWallet.address) { result in
370-
service.kvsSaveCompletionRecursion(dogeAddress: eWallet.address, result: result)
370+
if let kvsAddressModel {
371+
service.save(kvsAddressModel) { result in
372+
service.kvsSaveCompletionRecursion(kvsAddressModel, result: result)
373+
}
371374
}
375+
372376
service.setState(.upToDate)
373377
return eWallet
374378

@@ -455,8 +459,8 @@ extension DogeWalletService {
455459
/// - dogeAddress: DOGE address to save into KVS
456460
/// - adamantAddress: Owner of Doge address
457461
/// - completion: success
458-
private func save(dogeAddress: String, completion: @escaping @Sendable (WalletServiceSimpleResult) -> Void) {
459-
guard let adamant = accountService.account, let keypair = accountService.keypair else {
462+
private func save(_ model: KVSValueModel, completion: @escaping @Sendable (WalletServiceSimpleResult) -> Void) {
463+
guard let adamant = accountService.account else {
460464
completion(.failure(error: .notLogged))
461465
return
462466
}
@@ -467,13 +471,7 @@ extension DogeWalletService {
467471
}
468472

469473
Task { @Sendable in
470-
let result = await apiService.store(
471-
key: DogeWalletService.kvsAddress,
472-
value: dogeAddress,
473-
type: .keyValue,
474-
sender: adamant.address,
475-
keypair: keypair
476-
)
474+
let result = await apiService.store(model)
477475

478476
switch result {
479477
case .success:
@@ -486,7 +484,7 @@ extension DogeWalletService {
486484
}
487485

488486
/// New accounts doesn't have enought money to save KVS. We need to wait for balance update, and then - retry save
489-
private func kvsSaveCompletionRecursion(dogeAddress: String, result: WalletServiceSimpleResult) {
487+
private func kvsSaveCompletionRecursion(_ model: KVSValueModel, result: WalletServiceSimpleResult) {
490488
if let observer = balanceObserver {
491489
NotificationCenter.default.removeObserver(observer)
492490
balanceObserver = nil
@@ -505,8 +503,8 @@ extension DogeWalletService {
505503
return
506504
}
507505

508-
self?.save(dogeAddress: dogeAddress) { [weak self] result in
509-
self?.kvsSaveCompletionRecursion(dogeAddress: dogeAddress, result: result)
506+
self?.save(model) { [weak self] result in
507+
self?.kvsSaveCompletionRecursion(model, result: result)
510508
}
511509
}
512510

@@ -518,6 +516,16 @@ extension DogeWalletService {
518516
}
519517
}
520518
}
519+
520+
private func makeKVSAddressModel(wallet: WalletAccount) -> KVSValueModel? {
521+
guard let keypair = accountService.keypair else { return nil }
522+
523+
return .init(
524+
key: Self.kvsAddress,
525+
value: wallet.address,
526+
keypair: keypair
527+
)
528+
}
521529
}
522530

523531
// MARK: - Transactions

Adamant/Modules/Wallets/Ethereum/EthWalletService.swift

Lines changed: 24 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -428,6 +428,7 @@ extension EthWalletService {
428428

429429
// MARK: 3. Update
430430
ethWallet = eWallet
431+
let kvsAddressModel = makeKVSAddressModel(wallet: eWallet)
431432

432433
NotificationCenter.default.post(
433434
name: walletUpdatedNotification,
@@ -444,9 +445,9 @@ extension EthWalletService {
444445
let service = self
445446
do {
446447
let address = try await getWalletAddress(byAdamantAddress: adamant.address)
447-
if eWallet.address.caseInsensitiveCompare(address) != .orderedSame {
448-
service.save(ethAddress: eWallet.address) { result in
449-
service.kvsSaveCompletionRecursion(ethAddress: eWallet.address.lowercased(), result: result)
448+
if eWallet.address.caseInsensitiveCompare(address) != .orderedSame, let kvsAddressModel {
449+
service.save(kvsAddressModel) { result in
450+
service.kvsSaveCompletionRecursion(kvsAddressModel, result: result)
450451
}
451452
}
452453

@@ -468,8 +469,10 @@ extension EthWalletService {
468469
await service.update()
469470
}
470471

471-
service.save(ethAddress: eWallet.address) { result in
472-
service.kvsSaveCompletionRecursion(ethAddress: eWallet.address, result: result)
472+
if let kvsAddressModel {
473+
service.save(kvsAddressModel) { result in
474+
service.kvsSaveCompletionRecursion(kvsAddressModel, result: result)
475+
}
473476
}
474477

475478
return eWallet
@@ -487,7 +490,7 @@ extension EthWalletService {
487490
}
488491

489492
/// New accounts doesn't have enought money to save KVS. We need to wait for balance update, and then - retry save
490-
private func kvsSaveCompletionRecursion(ethAddress: String, result: WalletServiceSimpleResult) {
493+
private func kvsSaveCompletionRecursion(_ model: KVSValueModel, result: WalletServiceSimpleResult) {
491494
if let observer = balanceObserver {
492495
NotificationCenter.default.removeObserver(observer)
493496
balanceObserver = nil
@@ -506,8 +509,8 @@ extension EthWalletService {
506509
return
507510
}
508511

509-
self?.save(ethAddress: ethAddress) { [weak self] result in
510-
self?.kvsSaveCompletionRecursion(ethAddress: ethAddress, result: result)
512+
self?.save(model) { [weak self] result in
513+
self?.kvsSaveCompletionRecursion(model, result: result)
511514
}
512515
}
513516

@@ -584,8 +587,8 @@ extension EthWalletService {
584587
/// - ethAddress: Ethereum address to save into KVS
585588
/// - adamantAddress: Owner of Ethereum address
586589
/// - completion: success
587-
private func save(ethAddress: String, completion: @escaping @Sendable (WalletServiceSimpleResult) -> Void) {
588-
guard let adamant = accountService?.account, let keypair = accountService?.keypair else {
590+
private func save(_ model: KVSValueModel, completion: @escaping @Sendable (WalletServiceSimpleResult) -> Void) {
591+
guard let adamant = accountService?.account else {
589592
completion(.failure(error: .notLogged))
590593
return
591594
}
@@ -596,13 +599,7 @@ extension EthWalletService {
596599
}
597600

598601
Task {
599-
let result = await apiService.store(
600-
key: EthWalletService.kvsAddress,
601-
value: ethAddress,
602-
type: .keyValue,
603-
sender: adamant.address,
604-
keypair: keypair
605-
)
602+
let result = await apiService.store(model)
606603

607604
switch result {
608605
case .success:
@@ -613,6 +610,16 @@ extension EthWalletService {
613610
}
614611
}
615612
}
613+
614+
private func makeKVSAddressModel(wallet: WalletAccount) -> KVSValueModel? {
615+
guard let keypair = accountService?.keypair else { return nil }
616+
617+
return .init(
618+
key: Self.kvsAddress,
619+
value: wallet.address.lowercased(),
620+
keypair: keypair
621+
)
622+
}
616623
}
617624

618625
// MARK: - Transactions

0 commit comments

Comments
 (0)