From 34a6b31602fbc316427b20fe300b8629ac5aba50 Mon Sep 17 00:00:00 2001 From: StanislavDevIOS Date: Wed, 10 Jul 2024 12:24:51 +0300 Subject: [PATCH 1/6] [trello.com/c/An2zqhSr] Feat: Replace LSK with KLY --- Adamant.xcodeproj/project.pbxproj | 148 ++-- Adamant/App/DI/AppAssembly.swift | 18 +- Adamant/Helpers/NodeGroup+Constants.swift | 40 +- Adamant/Models/NodeWithGroup.swift | 10 +- .../Chat/ViewModel/ChatMessageFactory.swift | 5 +- .../CoinsNodesListFactory.swift | 4 +- .../CoinsNodesListViewModel+ApiServices.swift | 12 +- .../AdamantScreensFactory.swift | 2 +- .../AdmWalletService+DynamicConstants.swift | 4 +- .../BtcWalletService+DynamicConstants.swift | 2 +- .../DI/AdamantWalletFactoryCompose.swift | 4 +- .../DashWalletService+DynamicConstants.swift | 2 +- .../KlyApiCore.swift} | 8 +- .../KlyNodeApiService.swift} | 14 +- .../KlyServiceApiService.swift} | 16 +- ...KlyTransactionDetailsViewController.swift} | 18 +- .../KlyTransactionsViewController.swift} | 45 +- .../KlyTransferViewController.swift} | 18 +- Adamant/Modules/Wallets/Klayr/KlyWallet.swift | 49 ++ .../KlyWalletFactory.swift} | 24 +- .../Klayr/KlyWalletViewController.swift | 34 + .../KlyWalletService+DynamicConstants.swift} | 23 +- ...lyWalletService+RichMessageProvider.swift} | 16 +- .../KlyWalletService+Send.swift} | 38 +- .../KlyWalletService+StatusCheck.swift} | 51 +- .../KlyWalletService+WalletCore.swift | 64 ++ .../WalletService/KlyWalletService.swift} | 636 ++++++++---------- Adamant/Modules/Wallets/Lisk/LskWallet.swift | 41 -- .../Lisk/LskWalletViewController.swift | 34 - .../Wallets/TransferViewControllerBase.swift | 3 + Adamant/Services/NodesStorage.swift | 8 +- .../CommonKit/AdamantDynamicResources.swift | 4 +- .../Localization/de.lproj/Localizable.strings | 11 +- .../Localization/en.lproj/Localizable.strings | 11 +- .../Localization/ru.lproj/Localizable.strings | 11 +- .../Localization/zh.lproj/Localizable.strings | 11 +- .../klayr_notification.imageset/Contents.json | 23 + .../klayr_notification.png | Bin 0 -> 378 bytes .../klayr_notification@2x.png | Bin 0 -> 567 bytes .../klayr_notification@3x.png | Bin 0 -> 728 bytes .../klayr_wallet.imageset/Contents.json | 23 + .../klayr_wallet.imageset/klayr_wallet.png | Bin 0 -> 378 bytes .../klayr_wallet.imageset/klayr_wallet@2x.png | Bin 0 -> 567 bytes .../klayr_wallet.imageset/klayr_wallet@3x.png | Bin 0 -> 728 bytes .../klayr_wallet_row.imageset/Contents.json | 23 + .../klayr_wallet_row.png | Bin 0 -> 378 bytes .../klayr_wallet_row@2x.png | Bin 0 -> 567 bytes .../klayr_wallet_row@3x.png | Bin 0 -> 728 bytes .../mana_notification.png | Bin 3186 -> 2760 bytes .../mana_notification@2x.png | Bin 6008 -> 5980 bytes .../mana_notification@3x.png | Bin 9237 -> 10018 bytes .../mana_wallet.imageset/mana_wallet.png | Bin 3186 -> 2760 bytes .../mana_wallet.imageset/mana_wallet@2x.png | Bin 6008 -> 5980 bytes .../mana_wallet.imageset/mana_wallet@3x.png | Bin 9237 -> 10018 bytes .../mana_wallet_row.png | Bin 3186 -> 2760 bytes .../mana_wallet_row@2x.png | Bin 6008 -> 5980 bytes .../mana_wallet_row@3x.png | Bin 9237 -> 10018 bytes .../Wallets/no-token.imageset/Contents.json | 23 + .../Wallets/no-token.imageset/no-token.png | Bin 0 -> 2302 bytes .../Wallets/no-token.imageset/no-token@2x.png | Bin 0 -> 5699 bytes .../Wallets/no-token.imageset/no-token@3x.png | Bin 0 -> 9283 bytes .../Models/NodeGroup+Constants.swift | 2 +- .../Sources/CommonKit/Models/NodeGroup.swift | 4 +- .../CommonKit/Models/ethereumTokensList.swift | 20 +- .../RichMessageProviders/LskProvider.swift | 10 +- LiskKit/Sources/API/Service/Service.swift | 6 +- .../Models/TransactionModel.swift | 2 + .../TransactionEntity+Extension.swift | 2 +- LiskKit/Sources/Crypto/Crypto.swift | 10 +- .../NotificationService.swift | 2 +- .../klayr_notificationContent.png | Bin 0 -> 728 bytes .../WalletImages/mana_notificationContent.png | Bin 9237 -> 10018 bytes .../NotificationViewController.swift | 2 +- 73 files changed, 853 insertions(+), 738 deletions(-) rename Adamant/Modules/Wallets/{Lisk/LskApiCore.swift => Klayr/KlyApiCore.swift} (93%) rename Adamant/Modules/Wallets/{Lisk/LskNodeApiService.swift => Klayr/KlyNodeApiService.swift} (85%) rename Adamant/Modules/Wallets/{Lisk/LskServiceApiService.swift => Klayr/KlyServiceApiService.swift} (84%) rename Adamant/Modules/Wallets/{Lisk/LskTransactionDetailsViewController.swift => Klayr/KlyTransactionDetailsViewController.swift} (82%) rename Adamant/Modules/Wallets/{Lisk/LskTransactionsViewController.swift => Klayr/KlyTransactionsViewController.swift} (79%) rename Adamant/Modules/Wallets/{Lisk/LskTransferViewController.swift => Klayr/KlyTransferViewController.swift} (94%) create mode 100644 Adamant/Modules/Wallets/Klayr/KlyWallet.swift rename Adamant/Modules/Wallets/{Lisk/LskWalletFactory.swift => Klayr/KlyWalletFactory.swift} (89%) create mode 100644 Adamant/Modules/Wallets/Klayr/KlyWalletViewController.swift rename Adamant/Modules/Wallets/{Lisk/LskWalletService+DynamicConstants.swift => Klayr/WalletService/KlyWalletService+DynamicConstants.swift} (65%) rename Adamant/Modules/Wallets/{Lisk/LskWalletService+RichMessageProvider.swift => Klayr/WalletService/KlyWalletService+RichMessageProvider.swift} (77%) rename Adamant/Modules/Wallets/{Lisk/LskWalletService+Send.swift => Klayr/WalletService/KlyWalletService+Send.swift} (75%) rename Adamant/Modules/Wallets/{Lisk/LskWalletService+RichMessageProviderWithStatusCheck.swift => Klayr/WalletService/KlyWalletService+StatusCheck.swift} (69%) create mode 100644 Adamant/Modules/Wallets/Klayr/WalletService/KlyWalletService+WalletCore.swift rename Adamant/Modules/Wallets/{Lisk/LskWalletService.swift => Klayr/WalletService/KlyWalletService.swift} (54%) delete mode 100644 Adamant/Modules/Wallets/Lisk/LskWallet.swift delete mode 100644 Adamant/Modules/Wallets/Lisk/LskWalletViewController.swift create mode 100644 CommonKit/Sources/CommonKit/Assets/Shared.xcassets/Wallets/klayr_notification.imageset/Contents.json create mode 100644 CommonKit/Sources/CommonKit/Assets/Shared.xcassets/Wallets/klayr_notification.imageset/klayr_notification.png create mode 100644 CommonKit/Sources/CommonKit/Assets/Shared.xcassets/Wallets/klayr_notification.imageset/klayr_notification@2x.png create mode 100644 CommonKit/Sources/CommonKit/Assets/Shared.xcassets/Wallets/klayr_notification.imageset/klayr_notification@3x.png create mode 100644 CommonKit/Sources/CommonKit/Assets/Shared.xcassets/Wallets/klayr_wallet.imageset/Contents.json create mode 100644 CommonKit/Sources/CommonKit/Assets/Shared.xcassets/Wallets/klayr_wallet.imageset/klayr_wallet.png create mode 100644 CommonKit/Sources/CommonKit/Assets/Shared.xcassets/Wallets/klayr_wallet.imageset/klayr_wallet@2x.png create mode 100644 CommonKit/Sources/CommonKit/Assets/Shared.xcassets/Wallets/klayr_wallet.imageset/klayr_wallet@3x.png create mode 100644 CommonKit/Sources/CommonKit/Assets/Shared.xcassets/Wallets/klayr_wallet_row.imageset/Contents.json create mode 100644 CommonKit/Sources/CommonKit/Assets/Shared.xcassets/Wallets/klayr_wallet_row.imageset/klayr_wallet_row.png create mode 100644 CommonKit/Sources/CommonKit/Assets/Shared.xcassets/Wallets/klayr_wallet_row.imageset/klayr_wallet_row@2x.png create mode 100644 CommonKit/Sources/CommonKit/Assets/Shared.xcassets/Wallets/klayr_wallet_row.imageset/klayr_wallet_row@3x.png create mode 100644 CommonKit/Sources/CommonKit/Assets/Shared.xcassets/Wallets/no-token.imageset/Contents.json create mode 100644 CommonKit/Sources/CommonKit/Assets/Shared.xcassets/Wallets/no-token.imageset/no-token.png create mode 100644 CommonKit/Sources/CommonKit/Assets/Shared.xcassets/Wallets/no-token.imageset/no-token@2x.png create mode 100644 CommonKit/Sources/CommonKit/Assets/Shared.xcassets/Wallets/no-token.imageset/no-token@3x.png create mode 100644 NotificationServiceExtension/WalletImages/klayr_notificationContent.png diff --git a/Adamant.xcodeproj/project.pbxproj b/Adamant.xcodeproj/project.pbxproj index 8ca9dce71..ccdabcdde 100644 --- a/Adamant.xcodeproj/project.pbxproj +++ b/Adamant.xcodeproj/project.pbxproj @@ -12,6 +12,22 @@ 26A975FF2B7E843E0095C367 /* SelectTextView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 26A975FE2B7E843E0095C367 /* SelectTextView.swift */; }; 26A976012B7E852E0095C367 /* ChatSelectTextViewFactory.swift in Sources */ = {isa = PBXBuildFile; fileRef = 26A976002B7E852E0095C367 /* ChatSelectTextViewFactory.swift */; }; 3A20D93B2AE7F316005475A6 /* AdamantTransactionDetails.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3A20D93A2AE7F316005475A6 /* AdamantTransactionDetails.swift */; }; + 3A26D9332C3C1B90003AD832 /* KlyWalletService+DynamicConstants.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3A26D9322C3C1B90003AD832 /* KlyWalletService+DynamicConstants.swift */; }; + 3A26D9352C3C1BE2003AD832 /* KlyWalletService.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3A26D9342C3C1BE2003AD832 /* KlyWalletService.swift */; }; + 3A26D9372C3C1C01003AD832 /* KlyWallet.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3A26D9362C3C1C01003AD832 /* KlyWallet.swift */; }; + 3A26D9392C3C1C62003AD832 /* KlyWalletFactory.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3A26D9382C3C1C62003AD832 /* KlyWalletFactory.swift */; }; + 3A26D93B2C3C1C97003AD832 /* KlyApiCore.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3A26D93A2C3C1C97003AD832 /* KlyApiCore.swift */; }; + 3A26D93D2C3C1CC3003AD832 /* KlyNodeApiService.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3A26D93C2C3C1CC3003AD832 /* KlyNodeApiService.swift */; }; + 3A26D93F2C3C1CED003AD832 /* KlyServiceApiService.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3A26D93E2C3C1CED003AD832 /* KlyServiceApiService.swift */; }; + 3A26D9412C3C2DC4003AD832 /* KlyWalletService+Send.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3A26D9402C3C2DC4003AD832 /* KlyWalletService+Send.swift */; }; + 3A26D9432C3C2E19003AD832 /* KlyWalletService+StatusCheck.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3A26D9422C3C2E19003AD832 /* KlyWalletService+StatusCheck.swift */; }; + 3A26D9452C3D336A003AD832 /* KlyWalletService+RichMessageProvider.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3A26D9442C3D336A003AD832 /* KlyWalletService+RichMessageProvider.swift */; }; + 3A26D9472C3D37B5003AD832 /* KlyWalletViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3A26D9462C3D37B5003AD832 /* KlyWalletViewController.swift */; }; + 3A26D9492C3D3804003AD832 /* KlyTransferViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3A26D9482C3D3804003AD832 /* KlyTransferViewController.swift */; }; + 3A26D94B2C3D3838003AD832 /* KlyTransactionsViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3A26D94A2C3D3838003AD832 /* KlyTransactionsViewController.swift */; }; + 3A26D94D2C3D387B003AD832 /* KlyTransactionDetailsViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3A26D94C2C3D387B003AD832 /* KlyTransactionDetailsViewController.swift */; }; + 3A26D9502C3D3A5A003AD832 /* KlyWalletService+WalletCore.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3A26D94F2C3D3A5A003AD832 /* KlyWalletService+WalletCore.swift */; }; + 3A26D9522C3E7F1E003AD832 /* klayr_notificationContent.png in Resources */ = {isa = PBXBuildFile; fileRef = 3A26D9512C3E7F1D003AD832 /* klayr_notificationContent.png */; }; 3A2F55F92AC6F308000A3F26 /* CoinTransaction+CoreDataClass.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3A2F55F72AC6F308000A3F26 /* CoinTransaction+CoreDataClass.swift */; }; 3A2F55FA2AC6F308000A3F26 /* CoinTransaction+CoreDataProperties.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3A2F55F82AC6F308000A3F26 /* CoinTransaction+CoreDataProperties.swift */; }; 3A2F55FC2AC6F885000A3F26 /* CoinStorage.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3A2F55FB2AC6F885000A3F26 /* CoinStorage.swift */; }; @@ -81,7 +97,6 @@ 4186B3302941E642006594A3 /* AdmWalletService+DynamicConstants.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4186B32F2941E642006594A3 /* AdmWalletService+DynamicConstants.swift */; }; 4186B332294200B4006594A3 /* BtcWalletService+DynamicConstants.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4186B331294200B4006594A3 /* BtcWalletService+DynamicConstants.swift */; }; 4186B334294200C5006594A3 /* EthWalletService+DynamicConstants.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4186B333294200C5006594A3 /* EthWalletService+DynamicConstants.swift */; }; - 4186B336294200D2006594A3 /* LskWalletService+DynamicConstants.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4186B335294200D2006594A3 /* LskWalletService+DynamicConstants.swift */; }; 4186B338294200E8006594A3 /* DogeWalletService+DynamicConstants.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4186B337294200E8006594A3 /* DogeWalletService+DynamicConstants.swift */; }; 4186B33A294200F4006594A3 /* DashWalletService+DynamicConstants.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4186B339294200F4006594A3 /* DashWalletService+DynamicConstants.swift */; }; 418FDE502A25CA340055E3CD /* ChatMenuManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = 418FDE4F2A25CA340055E3CD /* ChatMenuManager.swift */; }; @@ -126,11 +141,6 @@ 6403F5E622723FDA00D58779 /* DashWalletViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6403F5E522723FDA00D58779 /* DashWalletViewController.swift */; }; 6406D74A21C7F06000196713 /* SearchResultsViewController.xib in Resources */ = {isa = PBXBuildFile; fileRef = 6406D74821C7F06000196713 /* SearchResultsViewController.xib */; }; 6414C18E217DF43100373FA6 /* String+adamant.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6414C18D217DF43100373FA6 /* String+adamant.swift */; }; - 6416B19D21AD7B92006089AC /* LskWalletFactory.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6416B19C21AD7B92006089AC /* LskWalletFactory.swift */; }; - 6416B19F21AD7CBE006089AC /* LskWalletViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6416B19E21AD7CBE006089AC /* LskWalletViewController.swift */; }; - 6416B1A121AD7D93006089AC /* LskTransferViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6416B1A021AD7D93006089AC /* LskTransferViewController.swift */; }; - 6416B1A321AD7EA1006089AC /* LskTransactionDetailsViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6416B1A221AD7EA1006089AC /* LskTransactionDetailsViewController.swift */; }; - 6416B1A721B024B6006089AC /* LskWalletService+Send.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6416B1A621B024B6006089AC /* LskWalletService+Send.swift */; }; 644793C32166314A00FC4CF5 /* OnboardPage.swift in Sources */ = {isa = PBXBuildFile; fileRef = 644793C22166314A00FC4CF5 /* OnboardPage.swift */; }; 6448C291235CA6E100F3F15B /* ERC20WalletService+RichMessageProviderWithStatusCheck.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6449BA64235CA0930033B936 /* ERC20WalletService+RichMessageProviderWithStatusCheck.swift */; }; 6449BA68235CA0930033B936 /* ERC20WalletService.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6449BA5E235CA0930033B936 /* ERC20WalletService.swift */; }; @@ -174,8 +184,6 @@ 648DD7A62237DC4000B811FD /* DogeTransferViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 648DD7A52237DC4000B811FD /* DogeTransferViewController.swift */; }; 648DD7A82239147800B811FD /* DogeWalletService+RichMessageProvider.swift in Sources */ = {isa = PBXBuildFile; fileRef = 648DD7A72239147800B811FD /* DogeWalletService+RichMessageProvider.swift */; }; 648DD7AA2239150E00B811FD /* DogeWalletService+RichMessageProviderWithStatusCheck.swift in Sources */ = {isa = PBXBuildFile; fileRef = 648DD7A92239150E00B811FD /* DogeWalletService+RichMessageProviderWithStatusCheck.swift */; }; - 649D6BE821B95DB7009E727B /* LskWalletService+RichMessageProvider.swift in Sources */ = {isa = PBXBuildFile; fileRef = 649D6BE721B95DB7009E727B /* LskWalletService+RichMessageProvider.swift */; }; - 649D6BEA21B9627B009E727B /* LskWalletService+RichMessageProviderWithStatusCheck.swift in Sources */ = {isa = PBXBuildFile; fileRef = 649D6BE921B9627B009E727B /* LskWalletService+RichMessageProviderWithStatusCheck.swift */; }; 649D6BEC21BD5A53009E727B /* UISuffixTextField.swift in Sources */ = {isa = PBXBuildFile; fileRef = 649D6BEB21BD5A53009E727B /* UISuffixTextField.swift */; }; 649D6BF021BFF481009E727B /* AdamantChatsProvider+search.swift in Sources */ = {isa = PBXBuildFile; fileRef = 649D6BEF21BFF481009E727B /* AdamantChatsProvider+search.swift */; }; 649D6BF221C27D5C009E727B /* SearchResultsViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 649D6BF121C27D5C009E727B /* SearchResultsViewController.swift */; }; @@ -191,7 +199,6 @@ 64E1C833222EA0F0006C4DA7 /* DogeWalletViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 64E1C832222EA0F0006C4DA7 /* DogeWalletViewController.swift */; }; 64EAB37422463E020018D9B2 /* CurrencyInfoService.swift in Sources */ = {isa = PBXBuildFile; fileRef = 64EAB37322463E020018D9B2 /* CurrencyInfoService.swift */; }; 64EAB37622463F680018D9B2 /* AdamantCurrencyInfoService.swift in Sources */ = {isa = PBXBuildFile; fileRef = 64EAB37522463F680018D9B2 /* AdamantCurrencyInfoService.swift */; }; - 64EE46B220FE0C8D00194DDA /* LskTransactionsViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 64EE46B120FE0C8D00194DDA /* LskTransactionsViewController.swift */; }; 64F085D920E2D7600006DE68 /* AdmTransactionsViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 64F085D820E2D7600006DE68 /* AdmTransactionsViewController.swift */; }; 64FA53CD20E1300B006783C9 /* EthTransactionsViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 64FA53CC20E1300A006783C9 /* EthTransactionsViewController.swift */; }; 64FA53D120E24942006783C9 /* TransactionDetailsViewControllerBase.swift in Sources */ = {isa = PBXBuildFile; fileRef = 64FA53D020E24941006783C9 /* TransactionDetailsViewControllerBase.swift */; }; @@ -311,8 +318,6 @@ 93CC8DC7296F00D6003772BF /* ChatTransactionContainerView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 93CC8DC6296F00D6003772BF /* ChatTransactionContainerView.swift */; }; 93CC8DC9296F01DE003772BF /* ChatTransactionContainerView+Model.swift in Sources */ = {isa = PBXBuildFile; fileRef = 93CC8DC8296F01DE003772BF /* ChatTransactionContainerView+Model.swift */; }; 93CC94C12B17EE73004842AC /* EthApiCore.swift in Sources */ = {isa = PBXBuildFile; fileRef = 93CC94C02B17EE73004842AC /* EthApiCore.swift */; }; - 93CCAE752B06CC3600EA5B94 /* LskNodeApiService.swift in Sources */ = {isa = PBXBuildFile; fileRef = 93CCAE742B06CC3600EA5B94 /* LskNodeApiService.swift */; }; - 93CCAE772B06D6CC00EA5B94 /* LskServiceApiService.swift in Sources */ = {isa = PBXBuildFile; fileRef = 93CCAE762B06D6CC00EA5B94 /* LskServiceApiService.swift */; }; 93CCAE792B06D81D00EA5B94 /* DogeApiService.swift in Sources */ = {isa = PBXBuildFile; fileRef = 93CCAE782B06D81D00EA5B94 /* DogeApiService.swift */; }; 93CCAE7B2B06D9B500EA5B94 /* DogeBlocksDTO.swift in Sources */ = {isa = PBXBuildFile; fileRef = 93CCAE7A2B06D9B500EA5B94 /* DogeBlocksDTO.swift */; }; 93CCAE7E2B06DA6C00EA5B94 /* DogeBlockDTO.swift in Sources */ = {isa = PBXBuildFile; fileRef = 93CCAE7D2B06DA6C00EA5B94 /* DogeBlockDTO.swift */; }; @@ -342,7 +347,6 @@ 93FA403629401BFC00D20DB6 /* PopupKit in Frameworks */ = {isa = PBXBuildFile; productRef = 93FA403529401BFC00D20DB6 /* PopupKit */; }; 93FC169B2B0197FD0062B507 /* BtcApiService.swift in Sources */ = {isa = PBXBuildFile; fileRef = 93FC169A2B0197FD0062B507 /* BtcApiService.swift */; }; 93FC169D2B019F440062B507 /* EthApiService.swift in Sources */ = {isa = PBXBuildFile; fileRef = 93FC169C2B019F440062B507 /* EthApiService.swift */; }; - 93FC169F2B01A3630062B507 /* LskApiCore.swift in Sources */ = {isa = PBXBuildFile; fileRef = 93FC169E2B01A3630062B507 /* LskApiCore.swift */; }; 93FC16A12B01DE120062B507 /* ERC20ApiService.swift in Sources */ = {isa = PBXBuildFile; fileRef = 93FC16A02B01DE120062B507 /* ERC20ApiService.swift */; }; A50A41082822F8CE006BDFE1 /* BtcWalletService.swift in Sources */ = {isa = PBXBuildFile; fileRef = A50A41042822F8CE006BDFE1 /* BtcWalletService.swift */; }; A50A41092822F8CE006BDFE1 /* BtcWalletViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = A50A41052822F8CE006BDFE1 /* BtcWalletViewController.swift */; }; @@ -460,8 +464,6 @@ E94008722114EACF00CD2D67 /* WalletAccount.swift in Sources */ = {isa = PBXBuildFile; fileRef = E94008712114EACF00CD2D67 /* WalletAccount.swift */; }; E940087B2114ED0600CD2D67 /* EthWalletService.swift in Sources */ = {isa = PBXBuildFile; fileRef = E940087A2114ED0600CD2D67 /* EthWalletService.swift */; }; E940087D2114EDEE00CD2D67 /* EthWallet.swift in Sources */ = {isa = PBXBuildFile; fileRef = E940087C2114EDEE00CD2D67 /* EthWallet.swift */; }; - E94008832114EE4700CD2D67 /* LskWallet.swift in Sources */ = {isa = PBXBuildFile; fileRef = E94008822114EE4700CD2D67 /* LskWallet.swift */; }; - E94008852114EE7500CD2D67 /* LskWalletService.swift in Sources */ = {isa = PBXBuildFile; fileRef = E94008842114EE7500CD2D67 /* LskWalletService.swift */; }; E94008872114F05B00CD2D67 /* AddressValidationResult.swift in Sources */ = {isa = PBXBuildFile; fileRef = E94008862114F05B00CD2D67 /* AddressValidationResult.swift */; }; E940088B2114F63000CD2D67 /* NSRegularExpression+adamant.swift in Sources */ = {isa = PBXBuildFile; fileRef = E940088A2114F63000CD2D67 /* NSRegularExpression+adamant.swift */; }; E940088F2119A9E800CD2D67 /* BigInt+Decimal.swift in Sources */ = {isa = PBXBuildFile; fileRef = E940088E2119A9E800CD2D67 /* BigInt+Decimal.swift */; }; @@ -661,6 +663,22 @@ 33975C0D891698AA7E74EBCC /* Pods_Adamant.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Adamant.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 36AB8CE9537B3B873972548B /* Pods_AdmCore.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_AdmCore.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 3A20D93A2AE7F316005475A6 /* AdamantTransactionDetails.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AdamantTransactionDetails.swift; sourceTree = ""; }; + 3A26D9322C3C1B90003AD832 /* KlyWalletService+DynamicConstants.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "KlyWalletService+DynamicConstants.swift"; sourceTree = ""; }; + 3A26D9342C3C1BE2003AD832 /* KlyWalletService.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = KlyWalletService.swift; sourceTree = ""; }; + 3A26D9362C3C1C01003AD832 /* KlyWallet.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = KlyWallet.swift; sourceTree = ""; }; + 3A26D9382C3C1C62003AD832 /* KlyWalletFactory.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = KlyWalletFactory.swift; sourceTree = ""; }; + 3A26D93A2C3C1C97003AD832 /* KlyApiCore.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = KlyApiCore.swift; sourceTree = ""; }; + 3A26D93C2C3C1CC3003AD832 /* KlyNodeApiService.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = KlyNodeApiService.swift; sourceTree = ""; }; + 3A26D93E2C3C1CED003AD832 /* KlyServiceApiService.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = KlyServiceApiService.swift; sourceTree = ""; }; + 3A26D9402C3C2DC4003AD832 /* KlyWalletService+Send.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "KlyWalletService+Send.swift"; sourceTree = ""; }; + 3A26D9422C3C2E19003AD832 /* KlyWalletService+StatusCheck.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "KlyWalletService+StatusCheck.swift"; sourceTree = ""; }; + 3A26D9442C3D336A003AD832 /* KlyWalletService+RichMessageProvider.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "KlyWalletService+RichMessageProvider.swift"; sourceTree = ""; }; + 3A26D9462C3D37B5003AD832 /* KlyWalletViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = KlyWalletViewController.swift; sourceTree = ""; }; + 3A26D9482C3D3804003AD832 /* KlyTransferViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = KlyTransferViewController.swift; sourceTree = ""; }; + 3A26D94A2C3D3838003AD832 /* KlyTransactionsViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = KlyTransactionsViewController.swift; sourceTree = ""; }; + 3A26D94C2C3D387B003AD832 /* KlyTransactionDetailsViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = KlyTransactionDetailsViewController.swift; sourceTree = ""; }; + 3A26D94F2C3D3A5A003AD832 /* KlyWalletService+WalletCore.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "KlyWalletService+WalletCore.swift"; sourceTree = ""; }; + 3A26D9512C3E7F1D003AD832 /* klayr_notificationContent.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = klayr_notificationContent.png; sourceTree = ""; }; 3A2F55F72AC6F308000A3F26 /* CoinTransaction+CoreDataClass.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "CoinTransaction+CoreDataClass.swift"; sourceTree = ""; }; 3A2F55F82AC6F308000A3F26 /* CoinTransaction+CoreDataProperties.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "CoinTransaction+CoreDataProperties.swift"; sourceTree = ""; }; 3A2F55FB2AC6F885000A3F26 /* CoinStorage.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CoinStorage.swift; sourceTree = ""; }; @@ -726,7 +744,6 @@ 4186B32F2941E642006594A3 /* AdmWalletService+DynamicConstants.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "AdmWalletService+DynamicConstants.swift"; sourceTree = ""; }; 4186B331294200B4006594A3 /* BtcWalletService+DynamicConstants.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "BtcWalletService+DynamicConstants.swift"; sourceTree = ""; }; 4186B333294200C5006594A3 /* EthWalletService+DynamicConstants.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "EthWalletService+DynamicConstants.swift"; sourceTree = ""; }; - 4186B335294200D2006594A3 /* LskWalletService+DynamicConstants.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "LskWalletService+DynamicConstants.swift"; sourceTree = ""; }; 4186B337294200E8006594A3 /* DogeWalletService+DynamicConstants.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "DogeWalletService+DynamicConstants.swift"; sourceTree = ""; }; 4186B339294200F4006594A3 /* DashWalletService+DynamicConstants.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "DashWalletService+DynamicConstants.swift"; sourceTree = ""; }; 418FDE4F2A25CA340055E3CD /* ChatMenuManager.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ChatMenuManager.swift; sourceTree = ""; }; @@ -768,11 +785,6 @@ 6403F5E522723FDA00D58779 /* DashWalletViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DashWalletViewController.swift; sourceTree = ""; }; 6406D74821C7F06000196713 /* SearchResultsViewController.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = SearchResultsViewController.xib; sourceTree = ""; }; 6414C18D217DF43100373FA6 /* String+adamant.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "String+adamant.swift"; sourceTree = ""; }; - 6416B19C21AD7B92006089AC /* LskWalletFactory.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LskWalletFactory.swift; sourceTree = ""; }; - 6416B19E21AD7CBE006089AC /* LskWalletViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LskWalletViewController.swift; sourceTree = ""; }; - 6416B1A021AD7D93006089AC /* LskTransferViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LskTransferViewController.swift; sourceTree = ""; }; - 6416B1A221AD7EA1006089AC /* LskTransactionDetailsViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LskTransactionDetailsViewController.swift; sourceTree = ""; }; - 6416B1A621B024B6006089AC /* LskWalletService+Send.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "LskWalletService+Send.swift"; sourceTree = ""; }; 644793C22166314A00FC4CF5 /* OnboardPage.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = OnboardPage.swift; sourceTree = ""; }; 6449BA5E235CA0930033B936 /* ERC20WalletService.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ERC20WalletService.swift; sourceTree = ""; }; 6449BA5F235CA0930033B936 /* ERC20TransferViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ERC20TransferViewController.swift; sourceTree = ""; }; @@ -816,8 +828,6 @@ 648DD7A52237DC4000B811FD /* DogeTransferViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DogeTransferViewController.swift; sourceTree = ""; }; 648DD7A72239147800B811FD /* DogeWalletService+RichMessageProvider.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "DogeWalletService+RichMessageProvider.swift"; sourceTree = ""; }; 648DD7A92239150E00B811FD /* DogeWalletService+RichMessageProviderWithStatusCheck.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "DogeWalletService+RichMessageProviderWithStatusCheck.swift"; sourceTree = ""; }; - 649D6BE721B95DB7009E727B /* LskWalletService+RichMessageProvider.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "LskWalletService+RichMessageProvider.swift"; sourceTree = ""; }; - 649D6BE921B9627B009E727B /* LskWalletService+RichMessageProviderWithStatusCheck.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "LskWalletService+RichMessageProviderWithStatusCheck.swift"; sourceTree = ""; }; 649D6BEB21BD5A53009E727B /* UISuffixTextField.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = UISuffixTextField.swift; sourceTree = ""; }; 649D6BEF21BFF481009E727B /* AdamantChatsProvider+search.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "AdamantChatsProvider+search.swift"; sourceTree = ""; }; 649D6BF121C27D5C009E727B /* SearchResultsViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SearchResultsViewController.swift; sourceTree = ""; }; @@ -835,7 +845,6 @@ 64E1C832222EA0F0006C4DA7 /* DogeWalletViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DogeWalletViewController.swift; sourceTree = ""; }; 64EAB37322463E020018D9B2 /* CurrencyInfoService.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CurrencyInfoService.swift; sourceTree = ""; }; 64EAB37522463F680018D9B2 /* AdamantCurrencyInfoService.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AdamantCurrencyInfoService.swift; sourceTree = ""; }; - 64EE46B120FE0C8D00194DDA /* LskTransactionsViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LskTransactionsViewController.swift; sourceTree = ""; }; 64F085D820E2D7600006DE68 /* AdmTransactionsViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AdmTransactionsViewController.swift; sourceTree = ""; }; 64FA53CC20E1300A006783C9 /* EthTransactionsViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = EthTransactionsViewController.swift; sourceTree = ""; }; 64FA53D020E24941006783C9 /* TransactionDetailsViewControllerBase.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = TransactionDetailsViewControllerBase.swift; sourceTree = ""; }; @@ -951,8 +960,6 @@ 93CC8DC6296F00D6003772BF /* ChatTransactionContainerView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ChatTransactionContainerView.swift; sourceTree = ""; }; 93CC8DC8296F01DE003772BF /* ChatTransactionContainerView+Model.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "ChatTransactionContainerView+Model.swift"; sourceTree = ""; }; 93CC94C02B17EE73004842AC /* EthApiCore.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = EthApiCore.swift; sourceTree = ""; }; - 93CCAE742B06CC3600EA5B94 /* LskNodeApiService.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LskNodeApiService.swift; sourceTree = ""; }; - 93CCAE762B06D6CC00EA5B94 /* LskServiceApiService.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LskServiceApiService.swift; sourceTree = ""; }; 93CCAE782B06D81D00EA5B94 /* DogeApiService.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DogeApiService.swift; sourceTree = ""; }; 93CCAE7A2B06D9B500EA5B94 /* DogeBlocksDTO.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DogeBlocksDTO.swift; sourceTree = ""; }; 93CCAE7D2B06DA6C00EA5B94 /* DogeBlockDTO.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DogeBlockDTO.swift; sourceTree = ""; }; @@ -976,7 +983,6 @@ 93F3914F2962F5D400BFD6AE /* SpinnerView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SpinnerView.swift; sourceTree = ""; }; 93FC169A2B0197FD0062B507 /* BtcApiService.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BtcApiService.swift; sourceTree = ""; }; 93FC169C2B019F440062B507 /* EthApiService.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = EthApiService.swift; sourceTree = ""; }; - 93FC169E2B01A3630062B507 /* LskApiCore.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LskApiCore.swift; sourceTree = ""; }; 93FC16A02B01DE120062B507 /* ERC20ApiService.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ERC20ApiService.swift; sourceTree = ""; }; A50A41042822F8CE006BDFE1 /* BtcWalletService.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = BtcWalletService.swift; sourceTree = ""; }; A50A41052822F8CE006BDFE1 /* BtcWalletViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = BtcWalletViewController.swift; sourceTree = ""; }; @@ -1072,8 +1078,6 @@ E94008712114EACF00CD2D67 /* WalletAccount.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = WalletAccount.swift; sourceTree = ""; }; E940087A2114ED0600CD2D67 /* EthWalletService.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = EthWalletService.swift; sourceTree = ""; }; E940087C2114EDEE00CD2D67 /* EthWallet.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = EthWallet.swift; sourceTree = ""; }; - E94008822114EE4700CD2D67 /* LskWallet.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LskWallet.swift; sourceTree = ""; }; - E94008842114EE7500CD2D67 /* LskWalletService.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LskWalletService.swift; sourceTree = ""; }; E94008862114F05B00CD2D67 /* AddressValidationResult.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AddressValidationResult.swift; sourceTree = ""; }; E940088A2114F63000CD2D67 /* NSRegularExpression+adamant.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "NSRegularExpression+adamant.swift"; sourceTree = ""; }; E940088E2119A9E800CD2D67 /* BigInt+Decimal.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "BigInt+Decimal.swift"; sourceTree = ""; }; @@ -1319,6 +1323,36 @@ path = Models; sourceTree = ""; }; + 3A26D9312C3C1B55003AD832 /* Klayr */ = { + isa = PBXGroup; + children = ( + 3A26D94E2C3D3983003AD832 /* WalletService */, + 3A26D9362C3C1C01003AD832 /* KlyWallet.swift */, + 3A26D9382C3C1C62003AD832 /* KlyWalletFactory.swift */, + 3A26D93A2C3C1C97003AD832 /* KlyApiCore.swift */, + 3A26D93C2C3C1CC3003AD832 /* KlyNodeApiService.swift */, + 3A26D93E2C3C1CED003AD832 /* KlyServiceApiService.swift */, + 3A26D9462C3D37B5003AD832 /* KlyWalletViewController.swift */, + 3A26D9482C3D3804003AD832 /* KlyTransferViewController.swift */, + 3A26D94A2C3D3838003AD832 /* KlyTransactionsViewController.swift */, + 3A26D94C2C3D387B003AD832 /* KlyTransactionDetailsViewController.swift */, + ); + path = Klayr; + sourceTree = ""; + }; + 3A26D94E2C3D3983003AD832 /* WalletService */ = { + isa = PBXGroup; + children = ( + 3A26D9342C3C1BE2003AD832 /* KlyWalletService.swift */, + 3A26D94F2C3D3A5A003AD832 /* KlyWalletService+WalletCore.swift */, + 3A26D9322C3C1B90003AD832 /* KlyWalletService+DynamicConstants.swift */, + 3A26D9402C3C2DC4003AD832 /* KlyWalletService+Send.swift */, + 3A26D9422C3C2E19003AD832 /* KlyWalletService+StatusCheck.swift */, + 3A26D9442C3D336A003AD832 /* KlyWalletService+RichMessageProvider.swift */, + ); + path = WalletService; + sourceTree = ""; + }; 3A41938D2A580C3B006A6B22 /* RichTransactionReactService */ = { isa = PBXGroup; children = ( @@ -2195,7 +2229,7 @@ A50A41022822F8CE006BDFE1 /* Bitcoin */, E94008902119D22400CD2D67 /* Adamant */, E94008792114ECF100CD2D67 /* Ethereum */, - E94008812114EE3900CD2D67 /* Lisk */, + 3A26D9312C3C1B55003AD832 /* Klayr */, 64E1C82B222E958C006C4DA7 /* Doge */, 6403F5DC22723C2800D58779 /* Dash */, 6449BA5D235CA0930033B936 /* ERC20 */, @@ -2236,27 +2270,6 @@ path = Ethereum; sourceTree = ""; }; - E94008812114EE3900CD2D67 /* Lisk */ = { - isa = PBXGroup; - children = ( - E94008822114EE4700CD2D67 /* LskWallet.swift */, - 6416B19C21AD7B92006089AC /* LskWalletFactory.swift */, - E94008842114EE7500CD2D67 /* LskWalletService.swift */, - 93FC169E2B01A3630062B507 /* LskApiCore.swift */, - 93CCAE742B06CC3600EA5B94 /* LskNodeApiService.swift */, - 93CCAE762B06D6CC00EA5B94 /* LskServiceApiService.swift */, - 4186B335294200D2006594A3 /* LskWalletService+DynamicConstants.swift */, - 6416B1A621B024B6006089AC /* LskWalletService+Send.swift */, - 649D6BE721B95DB7009E727B /* LskWalletService+RichMessageProvider.swift */, - 649D6BE921B9627B009E727B /* LskWalletService+RichMessageProviderWithStatusCheck.swift */, - 6416B19E21AD7CBE006089AC /* LskWalletViewController.swift */, - 6416B1A021AD7D93006089AC /* LskTransferViewController.swift */, - 64EE46B120FE0C8D00194DDA /* LskTransactionsViewController.swift */, - 6416B1A221AD7EA1006089AC /* LskTransactionDetailsViewController.swift */, - ); - path = Lisk; - sourceTree = ""; - }; E94008902119D22400CD2D67 /* Adamant */ = { isa = PBXGroup; children = ( @@ -2298,6 +2311,7 @@ E957E105229AF7CA0019732A /* lisk_notificationContent.png */, 412C0ED829124A3400DE2C5E /* dash_notificationContent.png */, 4154413A2923AED000824478 /* bitcoin_notificationContent.png */, + 3A26D9512C3E7F1D003AD832 /* klayr_notificationContent.png */, ); path = WalletImages; sourceTree = ""; @@ -2872,6 +2886,7 @@ 93E123452A6DFECB004DF33B /* Localizable.stringsdict in Resources */, E957E109229AF7CB0019732A /* lisk_notificationContent.png in Resources */, 412C0ED929124A3400DE2C5E /* dash_notificationContent.png in Resources */, + 3A26D9522C3E7F1E003AD832 /* klayr_notificationContent.png in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -3006,8 +3021,10 @@ E9960B3621F5154300C840A8 /* DummyAccount+CoreDataProperties.swift in Sources */, 4186B332294200B4006594A3 /* BtcWalletService+DynamicConstants.swift in Sources */, 3AFE7E432B19E4D900718739 /* WalletServiceCompose.swift in Sources */, + 3A26D93D2C3C1CC3003AD832 /* KlyNodeApiService.swift in Sources */, 93A118512993167500E144CC /* ChatMessageBackgroundColor.swift in Sources */, E9CAE8D22018AA7700345E76 /* AdamantApi+Accounts.swift in Sources */, + 3A26D93B2C3C1C97003AD832 /* KlyApiCore.swift in Sources */, 936658A32B0ADE4400BDB2D3 /* CoinsNodesListView+Row.swift in Sources */, 648CE3A6229AD1CD0070A2CC /* DashWalletService+Send.swift in Sources */, E987024920C2B1F700E393F4 /* AdamantChatsProvider+fakeMessages.swift in Sources */, @@ -3062,6 +3079,7 @@ 557AC308287B1365004699D7 /* CheckmarkRowView.swift in Sources */, 9390C5052976B53000270CDF /* ChatDialog.swift in Sources */, 6455E9F321075D8000B2E94C /* AdamantAddressBookService.swift in Sources */, + 3A26D9472C3D37B5003AD832 /* KlyWalletViewController.swift in Sources */, 9324C75E297170600022D7EA /* TransactionStatusService.swift in Sources */, 9304F8BE292F88F900173F18 /* ANSPayload.swift in Sources */, 41CA598C29A0D84F002BFDE4 /* TaskManager.swift in Sources */, @@ -3075,6 +3093,7 @@ 93C794442B07725C00408826 /* DashGetAddressBalanceDTO.swift in Sources */, 6449BA69235CA0930033B936 /* ERC20TransferViewController.swift in Sources */, 93684A2A29EFA28A00F9EFFE /* FixedTextMessageSizeCalculator.swift in Sources */, + 3A26D9332C3C1B90003AD832 /* KlyWalletService+DynamicConstants.swift in Sources */, E9E7CD8B20026B0600DFC4DB /* AccountService.swift in Sources */, 41E3C9CC2A0E20F500AF0985 /* AdamantCoinTools.swift in Sources */, 93ADE0712ACA66AF008ED641 /* VibrationSelectionViewModel.swift in Sources */, @@ -3112,7 +3131,6 @@ 4184F1752A33106200D7B8B9 /* CrashlysticsService.swift in Sources */, 4197B9C92952FAFF004CAF64 /* VisibleWalletsCheckmarkView.swift in Sources */, E9E7CD932002740500DFC4DB /* AdamantAccountService.swift in Sources */, - 6416B19F21AD7CBE006089AC /* LskWalletViewController.swift in Sources */, 41330F7629F1509400CB587C /* AdamantCellAnimation.swift in Sources */, 64FA53CD20E1300B006783C9 /* EthTransactionsViewController.swift in Sources */, 6449BA6A235CA0930033B936 /* ERC20Wallet.swift in Sources */, @@ -3132,6 +3150,7 @@ E983AE2120E655C500497E1A /* AccountHeaderView.swift in Sources */, E971591C2168209800A5F904 /* EthWalletService+RichMessageProviderWithStatusCheck.swift in Sources */, 644EC35220EFA9A300F40C73 /* DelegatesFactory.swift in Sources */, + 3A26D9492C3D3804003AD832 /* KlyTransferViewController.swift in Sources */, E96BBE3121F70F5E009AA738 /* ReadonlyTextView.swift in Sources */, A50A41112822FC35006BDFE1 /* BtcWalletService+RichMessageProviderWithStatusCheck.swift in Sources */, E926E032213EC43B005E536B /* FullscreenAlertView.swift in Sources */, @@ -3165,11 +3184,13 @@ 938F7D692955C9EC001915CA /* ChatViewModel.swift in Sources */, E90A494D204DA932009F6A65 /* LocalAuthentication.swift in Sources */, E96D64C62295C3ED00CA5587 /* Mnemonic+extended.swift in Sources */, + 3A26D9352C3C1BE2003AD832 /* KlyWalletService.swift in Sources */, 41047B70294B5EE10039E956 /* VisibleWalletsViewController.swift in Sources */, 93B28EC82B076E68007F268B /* DashResponseDTO.swift in Sources */, A5BBD811262C657300B5C40C /* ByteBackpacker.swift in Sources */, 648BCA6D213D384F00875EB5 /* AvatarService.swift in Sources */, E95F856F2007B61D0070534A /* GetPublicKeyResponse.swift in Sources */, + 3A26D94B2C3D3838003AD832 /* KlyTransactionsViewController.swift in Sources */, 936658992B0AD32600BDB2D3 /* CoinsNodesListViewModel+ApiServices.swift in Sources */, 644EC34D20EFA60900F40C73 /* AdamantApi+Delegates.swift in Sources */, E940088F2119A9E800CD2D67 /* BigInt+Decimal.swift in Sources */, @@ -3178,7 +3199,6 @@ 9338AE862AEF6A97001D32DF /* APICore.swift in Sources */, 938F7D5D2955C8F9001915CA /* ChatLayoutManager.swift in Sources */, 6403F5DE22723C6800D58779 /* DashMainnet.swift in Sources */, - 649D6BEA21B9627B009E727B /* LskWalletService+RichMessageProviderWithStatusCheck.swift in Sources */, E940088B2114F63000CD2D67 /* NSRegularExpression+adamant.swift in Sources */, 932B34E92974AA4A002A75BA /* ChatPreservationProtocol.swift in Sources */, 3AA388032B67F47600125684 /* RPCResponseModel.swift in Sources */, @@ -3213,7 +3233,6 @@ 93775E462A674FA9009061AC /* Markdown+Adamant.swift in Sources */, 3AA3880E2B6A356900125684 /* RpcRequestModel.swift in Sources */, 93E8EDCD2AF1BD65003E163C /* AdamantApiCore.swift in Sources */, - 6416B1A721B024B6006089AC /* LskWalletService+Send.swift in Sources */, E9942B87203D9E5100C163AF /* EurekaQRRow.swift in Sources */, 3AA50DF32AEBE67C00C58FC8 /* PartnerQRFactory.swift in Sources */, E9AA8C02212C5BF500F9249F /* AdmWalletService+Send.swift in Sources */, @@ -3240,6 +3259,7 @@ E913C8F21FFFA51D001A83F7 /* AppDelegate.swift in Sources */, 648CE3A222999CE70070A2CC /* BTCRawTransaction.swift in Sources */, 648DD79E2236A0B500B811FD /* DogeTransactionsViewController.swift in Sources */, + 3A26D9392C3C1C62003AD832 /* KlyWalletFactory.swift in Sources */, 64B5736F2209B892005DC968 /* BtcTransactionDetailsViewController.swift in Sources */, 938F7D612955C92B001915CA /* ChatDataSourceManager.swift in Sources */, E96D64C82295C44400CA5587 /* Data+utilites.swift in Sources */, @@ -3255,6 +3275,7 @@ 649D6BF021BFF481009E727B /* AdamantChatsProvider+search.swift in Sources */, E908473B219707200095825D /* AccountViewController+StayIn.swift in Sources */, 93C7944C2B077B2700408826 /* DashGetAddressTransactionIds.swift in Sources */, + 3A26D9502C3D3A5A003AD832 /* KlyWalletService+WalletCore.swift in Sources */, E9204B5220C9762400F3B9AB /* MessageStatus.swift in Sources */, 3A770E4C2AE14F130008D98F /* SimpleTransactionDetails+Hashable.swift in Sources */, E908471B2196FE590095825D /* Adamant.xcdatamodeld in Sources */, @@ -3271,7 +3292,6 @@ 9338AE8F2AEF8131001D32DF /* InternalAPIError.swift in Sources */, 41A1994829D325800031AD75 /* SwipeableView.swift in Sources */, 5558A438282AB9390024DDD6 /* NodeStatus.swift in Sources */, - 93FC169F2B01A3630062B507 /* LskApiCore.swift in Sources */, E91947AC20001A9A001362F8 /* ApiService.swift in Sources */, 4164A9D928F17DA700EEF16D /* AdamantChatTransactionService.swift in Sources */, E993302221354BC300CD5200 /* EthWalletFactory.swift in Sources */, @@ -3289,13 +3309,13 @@ E99330262136B0E500CD5200 /* TransferViewControllerBase+QR.swift in Sources */, 93ADC17F2B083D7A00F2DF77 /* NodesAdditionalParamsStorage.swift in Sources */, E9B1AA5B21283E0F00080A2A /* AdmTransferViewController.swift in Sources */, + 3A26D94D2C3D387B003AD832 /* KlyTransactionDetailsViewController.swift in Sources */, 648C697322916192006645F5 /* DashTransactionsViewController.swift in Sources */, 93E8EDCF2AF1CD9F003E163C /* NodeStatusInfo.swift in Sources */, 55E69E172868D7920025D82E /* CheckmarkView.swift in Sources */, 93B28EC02B076667007F268B /* APIResponseModel.swift in Sources */, 9304F8C2292F895C00173F18 /* PushNotificationsTokenService.swift in Sources */, E940086B2114A70600CD2D67 /* LskAccount.swift in Sources */, - 6416B19D21AD7B92006089AC /* LskWalletFactory.swift in Sources */, E9B3D3A1201FA26B0019EB36 /* AdamantAccountsProvider.swift in Sources */, E9FAE5DA203DBFEF008D3A6B /* Comparable+clamped.swift in Sources */, 93A91FD329799298001DB1F8 /* ChatStartPosition.swift in Sources */, @@ -3313,7 +3333,6 @@ E9240BF5215D686500187B09 /* AdmWalletService+RichMessageProvider.swift in Sources */, 648C697122915CB8006645F5 /* BTCRPCServerResponce.swift in Sources */, E9A174B32057EC47003667CD /* BackgroundFetchService.swift in Sources */, - 649D6BE821B95DB7009E727B /* LskWalletService+RichMessageProvider.swift in Sources */, E9E7CDBE2003AEFB00DFC4DB /* CellFactory.swift in Sources */, 9366589D2B0ADBAF00BDB2D3 /* CoinsNodesListView.swift in Sources */, 411743022A39B208008CD98A /* ContributeState.swift in Sources */, @@ -3325,23 +3344,20 @@ E9CAE8D62018AC5300345E76 /* AdamantApi+Transactions.swift in Sources */, E93D7ABE2052CEE1005D19DC /* NotificationsService.swift in Sources */, E940087D2114EDEE00CD2D67 /* EthWallet.swift in Sources */, - 6416B1A121AD7D93006089AC /* LskTransferViewController.swift in Sources */, A5E0422B282AB18B0076CD13 /* BtcUnspentTransactionResponse.swift in Sources */, E972206B201F44CA004F2AAD /* TransfersProvider.swift in Sources */, 3A20D93B2AE7F316005475A6 /* AdamantTransactionDetails.swift in Sources */, 93294B962AAD320B00911109 /* ScreensFactory.swift in Sources */, - 93CCAE772B06D6CC00EA5B94 /* LskServiceApiService.swift in Sources */, 3A9015A72A614A62002A2464 /* AdamantEmojiService.swift in Sources */, 93ADE0722ACA66AF008ED641 /* VibrationSelectionView.swift in Sources */, 648C696F22915A12006645F5 /* DashTransaction.swift in Sources */, 3AF53F8F2B3EE0DA00B30312 /* DogeNodeInfo.swift in Sources */, 3A41939A2A5D554A006A6B22 /* Reaction.swift in Sources */, - 93CCAE752B06CC3600EA5B94 /* LskNodeApiService.swift in Sources */, - 6416B1A321AD7EA1006089AC /* LskTransactionDetailsViewController.swift in Sources */, 6449BA6F235CA0930033B936 /* ERC20WalletService+Send.swift in Sources */, A50A41132822FC35006BDFE1 /* BtcWalletService+Send.swift in Sources */, A5E04229282A998C0076CD13 /* BtcTransactionResponse.swift in Sources */, 4186B334294200C5006594A3 /* EthWalletService+DynamicConstants.swift in Sources */, + 3A26D93F2C3C1CED003AD832 /* KlyServiceApiService.swift in Sources */, 93CCAE802B06E2D100EA5B94 /* ApiServiceError+Extension.swift in Sources */, 644EC34F20EFA77A00F40C73 /* Delegate.swift in Sources */, 64EAB37622463F680018D9B2 /* AdamantCurrencyInfoService.swift in Sources */, @@ -3371,6 +3387,7 @@ E993302021354B1800CD5200 /* AdmWalletFactory.swift in Sources */, E9332B8921F1FA4400D56E72 /* OnboardFactory.swift in Sources */, 938F7D722955CE72001915CA /* ChatFactory.swift in Sources */, + 3A26D9372C3C1C01003AD832 /* KlyWallet.swift in Sources */, 93CCAE792B06D81D00EA5B94 /* DogeApiService.swift in Sources */, 938F7D5F2955C90D001915CA /* ChatInputBarManager.swift in Sources */, E908472D2196FEA80095825D /* CoreDataAccount+CoreDataProperties.swift in Sources */, @@ -3381,8 +3398,8 @@ 64BD2B7720E2820300E2CD36 /* TransactionDetails.swift in Sources */, 3A9015A52A614A18002A2464 /* EmojiService.swift in Sources */, 9322E875297042F000B8357C /* ChatSender.swift in Sources */, - E94008852114EE7500CD2D67 /* LskWalletService.swift in Sources */, E96E86B821679C120061F80A /* EthTransactionDetailsViewController.swift in Sources */, + 3A26D9432C3C2E19003AD832 /* KlyWalletService+StatusCheck.swift in Sources */, 265AA1622B74E6B900CF98B0 /* ChatPreservation.swift in Sources */, 4164A9D728F17D4000EEF16D /* ChatTransactionService.swift in Sources */, E90A4943204C5ED6009F6A65 /* EurekaPassphraseRow.swift in Sources */, @@ -3400,9 +3417,9 @@ 9338AE8D2AEF7E9C001D32DF /* BodyStringEncoding.swift in Sources */, 64C65F4523893C7600DC0425 /* OnboardOverlay.swift in Sources */, 93A18C862AAEACC100D0AB98 /* AdamantWalletFactoryCompose.swift in Sources */, + 3A26D9452C3D336A003AD832 /* KlyWalletService+RichMessageProvider.swift in Sources */, E9484B79227C617E008E10F0 /* BalanceTableViewCell.swift in Sources */, E90847352196FEA80095825D /* MessageTransaction+CoreDataProperties.swift in Sources */, - 4186B336294200D2006594A3 /* LskWalletService+DynamicConstants.swift in Sources */, E9771DA722997F310099AAC7 /* ServerResponseWithTimestamp.swift in Sources */, E9A03FD420DBC824007653A1 /* NodeVersion.swift in Sources */, 648CE3AA229AD1F90070A2CC /* DashWalletService+RichMessageProviderWithStatusCheck.swift in Sources */, @@ -3410,8 +3427,6 @@ 41A1994629D2FCF80031AD75 /* ReplyView.swift in Sources */, E90847342196FEA80095825D /* MessageTransaction+CoreDataClass.swift in Sources */, E9960B3521F5154300C840A8 /* DummyAccount+CoreDataClass.swift in Sources */, - 64EE46B220FE0C8D00194DDA /* LskTransactionsViewController.swift in Sources */, - E94008832114EE4700CD2D67 /* LskWallet.swift in Sources */, 64E1C833222EA0F0006C4DA7 /* DogeWalletViewController.swift in Sources */, E93EB09F20DA3FA4001F9601 /* NodesEditorFactory.swift in Sources */, 93294B8F2AAD2C6B00911109 /* SwiftyOnboard.swift in Sources */, @@ -3433,6 +3448,7 @@ A50A41122822FC35006BDFE1 /* BtcWalletService+RichMessageProvider.swift in Sources */, 3AFE7E412B18D88B00718739 /* WalletService.swift in Sources */, 3A2F55FE2AC6F90E000A3F26 /* AdamantCoinStorageService.swift in Sources */, + 3A26D9412C3C2DC4003AD832 /* KlyWalletService+Send.swift in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -3758,7 +3774,7 @@ "$(inherited)", "@executable_path/Frameworks", ); - MARKETING_VERSION = 3.6.1; + MARKETING_VERSION = 3.7.0; PRODUCT_BUNDLE_IDENTIFIER = "im.adamant.adamant-messenger-dev"; PRODUCT_NAME = "$(TARGET_NAME)"; PROVISIONING_PROFILE_SPECIFIER = ""; @@ -3789,7 +3805,7 @@ "$(inherited)", "@executable_path/Frameworks", ); - MARKETING_VERSION = 3.6.1; + MARKETING_VERSION = 3.7.0; PRODUCT_BUNDLE_IDENTIFIER = "im.adamant.adamant-messenger"; PRODUCT_NAME = "$(TARGET_NAME)"; PROVISIONING_PROFILE_SPECIFIER = ""; diff --git a/Adamant/App/DI/AppAssembly.swift b/Adamant/App/DI/AppAssembly.swift index bbc291bef..b116c8375 100644 --- a/Adamant/App/DI/AppAssembly.swift +++ b/Adamant/App/DI/AppAssembly.swift @@ -151,22 +151,22 @@ struct AppAssembly: Assembly { }.inObjectScope(.container) // MARK: LskNodeApiService - container.register(LskNodeApiService.self) { r in - LskNodeApiService(api: .init( + container.register(KlyNodeApiService.self) { r in + KlyNodeApiService(api: .init( service: .init(), nodesStorage: r.resolve(NodesStorageProtocol.self)!, nodesAdditionalParamsStorage: r.resolve(NodesAdditionalParamsStorageProtocol.self)!, - nodeGroup: .lskNode + nodeGroup: .klyNode )) }.inObjectScope(.container) - // MARK: LskServiceApiService - container.register(LskServiceApiService.self) { r in - LskServiceApiService(api: .init( + // MARK: KlyServiceApiService + container.register(KlyServiceApiService.self) { r in + KlyServiceApiService(api: .init( service: .init(), nodesStorage: r.resolve(NodesStorageProtocol.self)!, nodesAdditionalParamsStorage: r.resolve(NodesAdditionalParamsStorageProtocol.self)!, - nodeGroup: .lskService + nodeGroup: .klyService )) }.inObjectScope(.container) @@ -231,7 +231,7 @@ struct AppAssembly: Assembly { }.inObjectScope(.container) // MARK: LanguageStorageProtocol - container.register(LanguageStorageProtocol.self) { r in + container.register(LanguageStorageProtocol.self) { _ in LanguageStorageService() }.inObjectScope(.container) @@ -333,7 +333,7 @@ struct AppAssembly: Assembly { AdmWalletService(), BtcWalletService(), EthWalletService(), - LskWalletService(), + KlyWalletService(), DogeWalletService(), DashWalletService() ] diff --git a/Adamant/Helpers/NodeGroup+Constants.swift b/Adamant/Helpers/NodeGroup+Constants.swift index 98ccdc67e..bcac6516b 100644 --- a/Adamant/Helpers/NodeGroup+Constants.swift +++ b/Adamant/Helpers/NodeGroup+Constants.swift @@ -17,10 +17,10 @@ public extension NodeGroup { return BtcWalletService.healthCheckParameters.onScreenUpdateInterval case .eth: return EthWalletService.healthCheckParameters.onScreenUpdateInterval - case .lskNode: - return LskWalletService.healthCheckParameters.onScreenUpdateInterval - case .lskService: - return LskWalletService.healthCheckParameters.onScreenServiceUpdateInterval + case .klyNode: + return KlyWalletService.healthCheckParameters.onScreenUpdateInterval + case .klyService: + return KlyWalletService.healthCheckParameters.onScreenServiceUpdateInterval case .doge: return DogeWalletService.healthCheckParameters.onScreenUpdateInterval case .dash: @@ -36,10 +36,10 @@ public extension NodeGroup { return BtcWalletService.healthCheckParameters.crucialUpdateInterval case .eth: return EthWalletService.healthCheckParameters.crucialUpdateInterval - case .lskNode: - return LskWalletService.healthCheckParameters.crucialUpdateInterval - case .lskService: - return LskWalletService.healthCheckParameters.crucialServiceUpdateInterval + case .klyNode: + return KlyWalletService.healthCheckParameters.crucialUpdateInterval + case .klyService: + return KlyWalletService.healthCheckParameters.crucialServiceUpdateInterval case .doge: return DogeWalletService.healthCheckParameters.crucialUpdateInterval case .dash: @@ -55,10 +55,10 @@ public extension NodeGroup { return BtcWalletService.healthCheckParameters.threshold case .eth: return EthWalletService.healthCheckParameters.threshold - case .lskNode: - return LskWalletService.healthCheckParameters.threshold - case .lskService: - return LskWalletService.healthCheckParameters.threshold + case .klyNode: + return KlyWalletService.healthCheckParameters.threshold + case .klyService: + return KlyWalletService.healthCheckParameters.threshold case .doge: return DogeWalletService.healthCheckParameters.threshold case .dash: @@ -74,10 +74,10 @@ public extension NodeGroup { return BtcWalletService.healthCheckParameters.normalUpdateInterval case .eth: return EthWalletService.healthCheckParameters.normalUpdateInterval - case .lskNode: - return LskWalletService.healthCheckParameters.normalUpdateInterval - case .lskService: - return LskWalletService.healthCheckParameters.normalServiceUpdateInterval + case .klyNode: + return KlyWalletService.healthCheckParameters.normalUpdateInterval + case .klyService: + return KlyWalletService.healthCheckParameters.normalServiceUpdateInterval case .doge: return DogeWalletService.healthCheckParameters.normalUpdateInterval case .dash: @@ -94,10 +94,10 @@ public extension NodeGroup { minNodeVersion = BtcWalletService.minNodeVersion case .eth: minNodeVersion = EthWalletService.minNodeVersion - case .lskNode: - minNodeVersion = LskWalletService.minNodeVersion - case .lskService: - minNodeVersion = LskWalletService.minNodeVersion + case .klyNode: + minNodeVersion = KlyWalletService.minNodeVersion + case .klyService: + minNodeVersion = KlyWalletService.minNodeVersion case .doge: minNodeVersion = DogeWalletService.minNodeVersion case .dash: diff --git a/Adamant/Models/NodeWithGroup.swift b/Adamant/Models/NodeWithGroup.swift index 13f3be003..7574cb556 100644 --- a/Adamant/Models/NodeWithGroup.swift +++ b/Adamant/Models/NodeWithGroup.swift @@ -20,10 +20,10 @@ extension NodeGroup { return BtcWalletService.tokenNetworkSymbol case .eth: return EthWalletService.tokenNetworkSymbol - case .lskNode: - return LskWalletService.tokenNetworkSymbol - case .lskService: - return LskWalletService.tokenNetworkSymbol + case .klyNode: + return KlyWalletService.tokenNetworkSymbol + case .klyService: + return KlyWalletService.tokenNetworkSymbol + " " + .adamant.coinsNodesList.serviceNode case .doge: return DogeWalletService.tokenNetworkSymbol @@ -36,7 +36,7 @@ extension NodeGroup { var includeVersionTitle: Bool { switch self { - case .btc, .lskNode, .lskService, .doge, .adm: + case .btc, .klyNode, .klyService, .doge, .adm: return true case .eth, .dash: return false diff --git a/Adamant/Modules/Chat/ViewModel/ChatMessageFactory.swift b/Adamant/Modules/Chat/ViewModel/ChatMessageFactory.swift index cbf4c0cc0..22832f057 100644 --- a/Adamant/Modules/Chat/ViewModel/ChatMessageFactory.swift +++ b/Adamant/Modules/Chat/ViewModel/ChatMessageFactory.swift @@ -254,6 +254,7 @@ private extension ChatMessageFactory { : transaction.senderAddress let coreService = walletServiceCompose.getWallet(by: transfer.type)?.core + let defaultIcon: UIImage = .asset(named: "no-token") ?? .init() return .transaction(.init(value: .init( id: id, @@ -263,9 +264,9 @@ private extension ChatMessageFactory { title: isFromCurrentSender ? .adamant.chat.transactionSent : .adamant.chat.transactionReceived, - icon: coreService?.tokenLogo ?? .init(), + icon: coreService?.tokenLogo ?? defaultIcon, amount: AdamantBalanceFormat.full.format(transfer.amount), - currency: coreService?.tokenSymbol ?? "", + currency: coreService?.tokenSymbol ?? .adamant.transfer.unknownToken, date: transaction.sentDate?.humanizedDateTime(withWeekday: false) ?? "", comment: transfer.comments, backgroundColor: backgroundColor, diff --git a/Adamant/Modules/CoinsNodesList/CoinsNodesListFactory.swift b/Adamant/Modules/CoinsNodesList/CoinsNodesListFactory.swift index 2e230fc37..081c56256 100644 --- a/Adamant/Modules/CoinsNodesList/CoinsNodesListFactory.swift +++ b/Adamant/Modules/CoinsNodesList/CoinsNodesListFactory.swift @@ -50,8 +50,8 @@ private struct CoinsNodesListAssembly: Assembly { apiServices: .init( btc: $0.resolve(BtcApiService.self)!, eth: $0.resolve(EthApiService.self)!, - lskNode: $0.resolve(LskNodeApiService.self)!, - lskService: $0.resolve(LskServiceApiService.self)!, + klyNode: $0.resolve(KlyNodeApiService.self)!, + klyService: $0.resolve(KlyServiceApiService.self)!, doge: $0.resolve(DogeApiService.self)!, dash: $0.resolve(DashApiService.self)!, adm: $0.resolve(ApiService.self)! diff --git a/Adamant/Modules/CoinsNodesList/ViewModel/CoinsNodesListViewModel+ApiServices.swift b/Adamant/Modules/CoinsNodesList/ViewModel/CoinsNodesListViewModel+ApiServices.swift index 53bc5f309..df6da88d3 100644 --- a/Adamant/Modules/CoinsNodesList/ViewModel/CoinsNodesListViewModel+ApiServices.swift +++ b/Adamant/Modules/CoinsNodesList/ViewModel/CoinsNodesListViewModel+ApiServices.swift @@ -12,8 +12,8 @@ extension CoinsNodesListViewModel { struct ApiServices { let btc: WalletApiService let eth: WalletApiService - let lskNode: WalletApiService - let lskService: WalletApiService + let klyNode: WalletApiService + let klyService: WalletApiService let doge: WalletApiService let dash: WalletApiService let adm: WalletApiService @@ -27,10 +27,10 @@ extension CoinsNodesListViewModel.ApiServices { return btc case .eth: return eth - case .lskNode: - return lskNode - case .lskService: - return lskService + case .klyNode: + return klyNode + case .klyService: + return klyService case .doge: return doge case .dash: diff --git a/Adamant/Modules/ScreensFactory/AdamantScreensFactory.swift b/Adamant/Modules/ScreensFactory/AdamantScreensFactory.swift index 0524b81fb..794ca2a6d 100644 --- a/Adamant/Modules/ScreensFactory/AdamantScreensFactory.swift +++ b/Adamant/Modules/ScreensFactory/AdamantScreensFactory.swift @@ -46,7 +46,7 @@ struct AdamantScreensFactory: ScreensFactory { chatSelectTextFactory = .init() walletFactoryCompose = AdamantWalletFactoryCompose( - lskWalletFactory: .init(assembler: assembler), + klyWalletFactory: .init(assembler: assembler), dogeWalletFactory: .init(assembler: assembler), dashWalletFactory: .init(assembler: assembler), btcWalletFactory: .init(assembler: assembler), diff --git a/Adamant/Modules/Wallets/Adamant/AdmWalletService+DynamicConstants.swift b/Adamant/Modules/Wallets/Adamant/AdmWalletService+DynamicConstants.swift index f180c7e52..9cbd3ec83 100644 --- a/Adamant/Modules/Wallets/Adamant/AdmWalletService+DynamicConstants.swift +++ b/Adamant/Modules/Wallets/Adamant/AdmWalletService+DynamicConstants.swift @@ -79,9 +79,9 @@ Node(url: URL(string: "http://184.94.215.92:45555")!), Node(url: URL(string: "https://node1.adamant.business")!, altUrl: URL(string: "http://194.233.75.29:45555")), Node(url: URL(string: "https://node2.blockchain2fa.io")!), Node(url: URL(string: "https://phecda.adm.im")!, altUrl: URL(string: "http://46.250.234.248:36666")), -Node(url: URL(string: "https://tegmine.adm.im")!, altUrl: URL(string: "http://5.104.87.219:36666")), +Node(url: URL(string: "https://tegmine.adm.im")!), Node(url: URL(string: "https://tauri.adm.im")!, altUrl: URL(string: "http://154.26.159.245:36666")), -Node(url: URL(string: "https://dschubba.adm.im")!, altUrl: URL(string: "http://85.239.234.17:36666")), +Node(url: URL(string: "https://dschubba.adm.im")!), ] } diff --git a/Adamant/Modules/Wallets/Bitcoin/BtcWalletService+DynamicConstants.swift b/Adamant/Modules/Wallets/Bitcoin/BtcWalletService+DynamicConstants.swift index 732eb5bf2..130bc3953 100644 --- a/Adamant/Modules/Wallets/Bitcoin/BtcWalletService+DynamicConstants.swift +++ b/Adamant/Modules/Wallets/Bitcoin/BtcWalletService+DynamicConstants.swift @@ -76,7 +76,7 @@ extension BtcWalletService { static var nodes: [Node] { [ Node(url: URL(string: "https://btcnode1.adamant.im")!, altUrl: URL(string: "http://176.9.38.204:44099")), -Node(url: URL(string: "https://btcnode2.adamant.im")!, altUrl: URL(string: "http://176.9.32.126:44099")), +Node(url: URL(string: "https://btcnode3.adamant.im")!, altUrl: URL(string: "http://195.201.242.108:44099")), ] } diff --git a/Adamant/Modules/Wallets/DI/AdamantWalletFactoryCompose.swift b/Adamant/Modules/Wallets/DI/AdamantWalletFactoryCompose.swift index 39413fc89..e71b6b3f3 100644 --- a/Adamant/Modules/Wallets/DI/AdamantWalletFactoryCompose.swift +++ b/Adamant/Modules/Wallets/DI/AdamantWalletFactoryCompose.swift @@ -12,7 +12,7 @@ struct AdamantWalletFactoryCompose: WalletFactoryCompose { private let factories: [any WalletFactory] init( - lskWalletFactory: LskWalletFactory, + klyWalletFactory: KlyWalletFactory, dogeWalletFactory: DogeWalletFactory, dashWalletFactory: DashWalletFactory, btcWalletFactory: BtcWalletFactory, @@ -21,7 +21,7 @@ struct AdamantWalletFactoryCompose: WalletFactoryCompose { admWalletFactory: AdmWalletFactory ) { factories = [ - lskWalletFactory, + klyWalletFactory, dogeWalletFactory, dashWalletFactory, btcWalletFactory, diff --git a/Adamant/Modules/Wallets/Dash/DashWalletService+DynamicConstants.swift b/Adamant/Modules/Wallets/Dash/DashWalletService+DynamicConstants.swift index dde5f44e7..0b6668985 100644 --- a/Adamant/Modules/Wallets/Dash/DashWalletService+DynamicConstants.swift +++ b/Adamant/Modules/Wallets/Dash/DashWalletService+DynamicConstants.swift @@ -60,7 +60,7 @@ extension DashWalletService { } var defaultOrdinalLevel: Int? { - 80 + 70 } static var minNodeVersion: String? { diff --git a/Adamant/Modules/Wallets/Lisk/LskApiCore.swift b/Adamant/Modules/Wallets/Klayr/KlyApiCore.swift similarity index 93% rename from Adamant/Modules/Wallets/Lisk/LskApiCore.swift rename to Adamant/Modules/Wallets/Klayr/KlyApiCore.swift index b8c7d3d61..769cdc204 100644 --- a/Adamant/Modules/Wallets/Lisk/LskApiCore.swift +++ b/Adamant/Modules/Wallets/Klayr/KlyApiCore.swift @@ -1,16 +1,16 @@ // -// LskApiCore.swift +// KlyApiCore.swift // Adamant // -// Created by Andrew G on 13.11.2023. -// Copyright © 2023 Adamant. All rights reserved. +// Created by Stanislav Jelezoglo on 08.07.2024. +// Copyright © 2024 Adamant. All rights reserved. // import CommonKit import Foundation import LiskKit -class LskApiCore: BlockchainHealthCheckableService { +class KlyApiCore: BlockchainHealthCheckableService { func makeClient(node: CommonKit.Node) -> APIClient { .init(options: .init( nodes: [.init(origin: node.asString())], diff --git a/Adamant/Modules/Wallets/Lisk/LskNodeApiService.swift b/Adamant/Modules/Wallets/Klayr/KlyNodeApiService.swift similarity index 85% rename from Adamant/Modules/Wallets/Lisk/LskNodeApiService.swift rename to Adamant/Modules/Wallets/Klayr/KlyNodeApiService.swift index e76ba7521..885bbd5da 100644 --- a/Adamant/Modules/Wallets/Lisk/LskNodeApiService.swift +++ b/Adamant/Modules/Wallets/Klayr/KlyNodeApiService.swift @@ -1,22 +1,22 @@ // -// LskNodeApiService.swift +// KlyNodeApiService.swift // Adamant // -// Created by Andrew G on 17.11.2023. -// Copyright © 2023 Adamant. All rights reserved. +// Created by Stanislav Jelezoglo on 08.07.2024. +// Copyright © 2024 Adamant. All rights reserved. // import LiskKit import Foundation -final class LskNodeApiService: WalletApiService { - let api: BlockchainHealthCheckWrapper +final class KlyNodeApiService: WalletApiService { + let api: BlockchainHealthCheckWrapper var preferredNodeIds: [UUID] { api.preferredNodeIds } - init(api: BlockchainHealthCheckWrapper) { + init(api: BlockchainHealthCheckWrapper) { self.api = api } @@ -58,7 +58,7 @@ final class LskNodeApiService: WalletApiService { } } -private extension LskNodeApiService { +private extension KlyNodeApiService { func requestClient( body: @escaping @Sendable ( _ client: APIClient, diff --git a/Adamant/Modules/Wallets/Lisk/LskServiceApiService.swift b/Adamant/Modules/Wallets/Klayr/KlyServiceApiService.swift similarity index 84% rename from Adamant/Modules/Wallets/Lisk/LskServiceApiService.swift rename to Adamant/Modules/Wallets/Klayr/KlyServiceApiService.swift index ee0d8363c..b34ded0eb 100644 --- a/Adamant/Modules/Wallets/Lisk/LskServiceApiService.swift +++ b/Adamant/Modules/Wallets/Klayr/KlyServiceApiService.swift @@ -1,16 +1,16 @@ // -// LskServiceApiService.swift +// KlyServiceApiService.swift // Adamant // -// Created by Andrew G on 17.11.2023. -// Copyright © 2023 Adamant. All rights reserved. +// Created by Stanislav Jelezoglo on 08.07.2024. +// Copyright © 2024 Adamant. All rights reserved. // import LiskKit import Foundation import CommonKit -final class LskServiceApiCore: LskApiCore { +final class KlyServiceApiCore: KlyApiCore { override func getStatusInfo( node: CommonKit.Node ) async -> WalletServiceResult { @@ -31,14 +31,14 @@ final class LskServiceApiCore: LskApiCore { } } -final class LskServiceApiService: WalletApiService { - let api: BlockchainHealthCheckWrapper +final class KlyServiceApiService: WalletApiService { + let api: BlockchainHealthCheckWrapper var preferredNodeIds: [UUID] { api.preferredNodeIds } - init(api: BlockchainHealthCheckWrapper) { + init(api: BlockchainHealthCheckWrapper) { self.api = api } @@ -66,7 +66,7 @@ final class LskServiceApiService: WalletApiService { } } -private extension LskServiceApiService { +private extension KlyServiceApiService { func requestClient( body: @escaping @Sendable ( _ client: APIClient, diff --git a/Adamant/Modules/Wallets/Lisk/LskTransactionDetailsViewController.swift b/Adamant/Modules/Wallets/Klayr/KlyTransactionDetailsViewController.swift similarity index 82% rename from Adamant/Modules/Wallets/Lisk/LskTransactionDetailsViewController.swift rename to Adamant/Modules/Wallets/Klayr/KlyTransactionDetailsViewController.swift index 7362f038e..872d8a640 100644 --- a/Adamant/Modules/Wallets/Lisk/LskTransactionDetailsViewController.swift +++ b/Adamant/Modules/Wallets/Klayr/KlyTransactionDetailsViewController.swift @@ -1,19 +1,19 @@ // -// LskTransactionDetailsViewController.swift +// KlyTransactionDetailsViewController.swift // Adamant // -// Created by Anton Boyarkin on 27/11/2018. -// Copyright © 2018 Adamant. All rights reserved. +// Created by Stanislav Jelezoglo on 09.07.2024. +// Copyright © 2024 Adamant. All rights reserved. // import UIKit import CommonKit -final class LskTransactionDetailsViewController: TransactionDetailsViewControllerBase { +final class KlyTransactionDetailsViewController: TransactionDetailsViewControllerBase { // MARK: - Dependencies - weak var service: LskWalletService? { - walletService?.core as? LskWalletService + weak var service: KlyWalletService? { + walletService?.core as? KlyWalletService } // MARK: - Properties @@ -31,7 +31,7 @@ final class LskTransactionDetailsViewController: TransactionDetailsViewControlle // MARK: - Lifecycle override func viewDidLoad() { - currencySymbol = LskWalletService.currencySymbol + currencySymbol = KlyWalletService.currencySymbol super.viewDidLoad() @@ -55,7 +55,7 @@ final class LskTransactionDetailsViewController: TransactionDetailsViewControlle override func explorerUrl(for transaction: TransactionDetails) -> URL? { let id = transaction.txId - return URL(string: "\(LskWalletService.explorerAddress)\(id)") + return URL(string: "\(KlyWalletService.explorerAddress)\(id)") } @MainActor @@ -70,7 +70,7 @@ final class LskTransactionDetailsViewController: TransactionDetailsViewControlle do { var trs = try await service.getTransaction(by: id) - let result = try await service.getFees() + let result = try await service.getCurrentFee() let lastHeight = result.lastHeight trs.updateConfirmations(value: lastHeight) diff --git a/Adamant/Modules/Wallets/Lisk/LskTransactionsViewController.swift b/Adamant/Modules/Wallets/Klayr/KlyTransactionsViewController.swift similarity index 79% rename from Adamant/Modules/Wallets/Lisk/LskTransactionsViewController.swift rename to Adamant/Modules/Wallets/Klayr/KlyTransactionsViewController.swift index b3c3a3107..5106ab376 100644 --- a/Adamant/Modules/Wallets/Lisk/LskTransactionsViewController.swift +++ b/Adamant/Modules/Wallets/Klayr/KlyTransactionsViewController.swift @@ -1,9 +1,9 @@ // -// LskTransactionsViewController +// KlyTransactionsViewController.swift // Adamant // -// Created by Anton Boyarkin on 17/07/2018. -// Copyright © 2018 Adamant. All rights reserved. +// Created by Stanislav Jelezoglo on 09.07.2024. +// Copyright © 2024 Adamant. All rights reserved. // import UIKit @@ -13,11 +13,11 @@ import BigInt import CommonKit import Combine -final class LskTransactionsViewController: TransactionsListViewControllerBase { - - // MARK: - UITableView - - func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) { +final class KlyTransactionsViewController: TransactionsListViewControllerBase { + func tableView( + _ tableView: UITableView, + didSelectRowAt indexPath: IndexPath + ) { tableView.deselectRow(at: indexPath, animated: true) guard let address = walletService.core.wallet?.address, let transaction = transactions[safe: indexPath.row] @@ -44,7 +44,7 @@ extension Transactions.TransactionModel: TransactionDetails { return self.nonce } - var defaultCurrencySymbol: String? { LskWalletService.currencySymbol } + var defaultCurrencySymbol: String? { KlyWalletService.currencySymbol } var txId: String { return id @@ -57,18 +57,21 @@ extension Transactions.TransactionModel: TransactionDetails { var amountValue: Decimal? { let value = BigUInt(self.amount) ?? BigUInt(0) - return value.asDecimal(exponent: LskWalletService.currencyExponent) + return value.asDecimal(exponent: KlyWalletService.currencyExponent) } var feeValue: Decimal? { let value = BigUInt(self.fee) ?? BigUInt(0) - return value.asDecimal(exponent: LskWalletService.currencyExponent) + return value.asDecimal(exponent: KlyWalletService.currencyExponent) } var confirmationsValue: String? { - guard let confirmations = confirmations, let height = height else { return "0" } - if confirmations < height { return "0" } + guard let confirmations = confirmations, + let height = height, + confirmations >= height + else { return "0" } + if confirmations > 0 { return "\(confirmations - height + 1)" } @@ -92,6 +95,10 @@ extension Transactions.TransactionModel: TransactionDetails { if confirmations < height { return .registered } + guard executionStatus != .failed else { + return .failed + } + if confirmations > 0 && height > 0 { let conf = (confirmations - height) + 1 if conf > 1 { @@ -118,7 +125,7 @@ extension Transactions.TransactionModel: TransactionDetails { extension LocalTransaction: TransactionDetails { - var defaultCurrencySymbol: String? { LskWalletService.currencySymbol } + var defaultCurrencySymbol: String? { KlyWalletService.currencySymbol } var txId: String { return id ?? "" @@ -139,13 +146,13 @@ extension LocalTransaction: TransactionDetails { var amountValue: Decimal? { let value = BigUInt(self.amount) - return value.asDecimal(exponent: LskWalletService.currencyExponent) + return value.asDecimal(exponent: KlyWalletService.currencyExponent) } var feeValue: Decimal? { let value = BigUInt(self.fee) - return value.asDecimal(exponent: LskWalletService.currencyExponent) + return value.asDecimal(exponent: KlyWalletService.currencyExponent) } var confirmationsValue: String? { @@ -175,7 +182,7 @@ extension LocalTransaction: TransactionDetails { extension TransactionEntity: TransactionDetails { - var defaultCurrencySymbol: String? { LskWalletService.currencySymbol } + var defaultCurrencySymbol: String? { KlyWalletService.currencySymbol } var txId: String { return id @@ -192,13 +199,13 @@ extension TransactionEntity: TransactionDetails { var amountValue: Decimal? { let value = BigUInt(self.params.amount) - return value.asDecimal(exponent: LskWalletService.currencyExponent) + return value.asDecimal(exponent: KlyWalletService.currencyExponent) } var feeValue: Decimal? { let value = BigUInt(self.fee) - return value.asDecimal(exponent: LskWalletService.currencyExponent) + return value.asDecimal(exponent: KlyWalletService.currencyExponent) } var confirmationsValue: String? { diff --git a/Adamant/Modules/Wallets/Lisk/LskTransferViewController.swift b/Adamant/Modules/Wallets/Klayr/KlyTransferViewController.swift similarity index 94% rename from Adamant/Modules/Wallets/Lisk/LskTransferViewController.swift rename to Adamant/Modules/Wallets/Klayr/KlyTransferViewController.swift index 27f635578..8f6d7c177 100644 --- a/Adamant/Modules/Wallets/Lisk/LskTransferViewController.swift +++ b/Adamant/Modules/Wallets/Klayr/KlyTransferViewController.swift @@ -1,9 +1,9 @@ // -// LskTransferViewController.swift +// KlyTransferViewController.swift // Adamant // -// Created by Anton Boyarkin on 27/11/2018. -// Copyright © 2018 Adamant. All rights reserved. +// Created by Stanislav Jelezoglo on 09.07.2024. +// Copyright © 2024 Adamant. All rights reserved. // import UIKit @@ -12,11 +12,11 @@ import LiskKit import CommonKit @MainActor -final class LskTransferViewController: TransferViewControllerBase { +final class KlyTransferViewController: TransferViewControllerBase { // MARK: Properties - private let prefix = "lsk" + private let prefix = "kly" override func checkForAdditionalFee() { Task { @@ -49,7 +49,7 @@ final class LskTransferViewController: TransferViewControllerBase { comments = "" } - guard let service = walletCore as? LskWalletService, + guard let service = walletCore as? KlyWalletService, let recipient = recipientAddress, let amount = amount else { @@ -94,9 +94,7 @@ final class LskTransferViewController: TransferViewControllerBase { throw error } - Task { - await service.update() - } + service.update() dialogService.dismissProgress() dialogService.showSuccess(withMessage: String.adamant.transfer.transferSuccess) @@ -221,6 +219,6 @@ final class LskTransferViewController: TransferViewControllerBase { } override func defaultSceneTitle() -> String? { - return String.adamant.sendLsk + return String.adamant.sendKly } } diff --git a/Adamant/Modules/Wallets/Klayr/KlyWallet.swift b/Adamant/Modules/Wallets/Klayr/KlyWallet.swift new file mode 100644 index 000000000..939e2255b --- /dev/null +++ b/Adamant/Modules/Wallets/Klayr/KlyWallet.swift @@ -0,0 +1,49 @@ +// +// KlyWallet.swift +// Adamant +// +// Created by Stanislav Jelezoglo on 08.07.2024. +// Copyright © 2024 Adamant. All rights reserved. +// + +import Foundation +import CommonKit +import LiskKit + +final class KlyWallet: WalletAccount { + let legacyAddress: String + let kly32Address: String + let keyPair: KeyPair + var balance: Decimal = 0.0 + var notifications: Int = 0 + var isNewApi: Bool = true + var nonce: UInt64 + var minBalance: Decimal = 0.05 + var minAmount: Decimal = 0 + var isBalanceInitialized: Bool = false + + var address: String { + return isNewApi ? kly32Address : legacyAddress + } + + var binaryAddress: String { + return isNewApi + ? LiskKit.Crypto.getBinaryAddressFromBase32(kly32Address) ?? .empty + : legacyAddress + } + + init( + address: String, + keyPair: KeyPair, + nonce: UInt64, + isNewApi: Bool + ) { + self.legacyAddress = address + self.keyPair = keyPair + self.isNewApi = isNewApi + self.nonce = nonce + self.kly32Address = LiskKit.Crypto.getBase32Address( + from: keyPair.publicKeyString + ) + } +} diff --git a/Adamant/Modules/Wallets/Lisk/LskWalletFactory.swift b/Adamant/Modules/Wallets/Klayr/KlyWalletFactory.swift similarity index 89% rename from Adamant/Modules/Wallets/Lisk/LskWalletFactory.swift rename to Adamant/Modules/Wallets/Klayr/KlyWalletFactory.swift index a950ded07..cb5f85e33 100644 --- a/Adamant/Modules/Wallets/Lisk/LskWalletFactory.swift +++ b/Adamant/Modules/Wallets/Klayr/KlyWalletFactory.swift @@ -1,9 +1,9 @@ // -// LskWalletFactory.swift +// KlyWalletFactory.swift // Adamant // -// Created by Anton Boyarkin on 27/11/2018. -// Copyright © 2018 Adamant. All rights reserved. +// Created by Stanislav Jelezoglo on 08.07.2024. +// Copyright © 2024 Adamant. All rights reserved. // import Swinject @@ -11,14 +11,14 @@ import UIKit import CommonKit import LiskKit -struct LskWalletFactory: WalletFactory { +struct KlyWalletFactory: WalletFactory { typealias Service = WalletService - let typeSymbol: String = LskWalletService.richMessageType + let typeSymbol: String = KlyWalletService.richMessageType let assembler: Assembler func makeWalletVC(service: Service, screensFactory: ScreensFactory) -> WalletViewController { - LskWalletViewController( + KlyWalletViewController( dialogService: assembler.resolve(DialogService.self)!, currencyInfoService: assembler.resolve(CurrencyInfoService.self)!, accountService: assembler.resolve(AccountService.self)!, @@ -29,7 +29,7 @@ struct LskWalletFactory: WalletFactory { } func makeTransferListVC(service: Service, screensFactory: ScreensFactory) -> UIViewController { - LskTransactionsViewController( + KlyTransactionsViewController( walletService: service, dialogService: assembler.resolve(DialogService.self)!, reachabilityMonitor: assembler.resolve(ReachabilityMonitor.self)!, @@ -38,7 +38,7 @@ struct LskWalletFactory: WalletFactory { } func makeTransferVC(service: Service, screensFactory: ScreensFactory) -> TransferViewControllerBase { - LskTransferViewController( + KlyTransferViewController( chatsProvider: assembler.resolve(ChatsProvider.self)!, accountService: assembler.resolve(AccountService.self)!, accountsProvider: assembler.resolve(AccountsProvider.self)!, @@ -82,7 +82,7 @@ struct LskWalletFactory: WalletFactory { } } -private extension LskWalletFactory { +private extension KlyWalletFactory { private func makeTransactionDetailsVC( hash: String, senderId: String?, @@ -117,7 +117,7 @@ private extension LskWalletFactory { confirmationsValue: nil, blockValue: nil, isOutgoing: richTransaction.isOutgoing, - transactionStatus: nil, + transactionStatus: nil, nonceRaw: nil ) @@ -126,8 +126,8 @@ private extension LskWalletFactory { return vc } - func makeTransactionDetailsVC(service: Service) -> LskTransactionDetailsViewController { - LskTransactionDetailsViewController( + func makeTransactionDetailsVC(service: Service) -> KlyTransactionDetailsViewController { + KlyTransactionDetailsViewController( dialogService: assembler.resolve(DialogService.self)!, currencyInfo: assembler.resolve(CurrencyInfoService.self)!, addressBookService: assembler.resolve(AddressBookService.self)!, diff --git a/Adamant/Modules/Wallets/Klayr/KlyWalletViewController.swift b/Adamant/Modules/Wallets/Klayr/KlyWalletViewController.swift new file mode 100644 index 000000000..3a3934c90 --- /dev/null +++ b/Adamant/Modules/Wallets/Klayr/KlyWalletViewController.swift @@ -0,0 +1,34 @@ +// +// KlyWalletViewController.swift +// Adamant +// +// Created by Stanislav Jelezoglo on 09.07.2024. +// Copyright © 2024 Adamant. All rights reserved. +// + +import UIKit +import CommonKit + +extension String.adamant { + static var kly: String { + String.localized("AccountTab.Wallets.kly_wallet", comment: "Account tab: Klayr wallet") + } + + static var sendKly: String { + String.localized("AccountTab.Row.SendKly", comment: "Account tab: 'Send KLY tokens' button") + } +} + +final class KlyWalletViewController: WalletViewControllerBase { + override func sendRowLocalizedLabel() -> NSAttributedString { + return NSAttributedString(string: String.adamant.sendKly) + } + + override func encodeForQr(address: String) -> String? { + return "klayr:\(address)" + } + + override func setTitle() { + walletTitleLabel.text = String.adamant.kly + } +} diff --git a/Adamant/Modules/Wallets/Lisk/LskWalletService+DynamicConstants.swift b/Adamant/Modules/Wallets/Klayr/WalletService/KlyWalletService+DynamicConstants.swift similarity index 65% rename from Adamant/Modules/Wallets/Lisk/LskWalletService+DynamicConstants.swift rename to Adamant/Modules/Wallets/Klayr/WalletService/KlyWalletService+DynamicConstants.swift index 32fc5fe7f..83e0d41e6 100644 --- a/Adamant/Modules/Wallets/Lisk/LskWalletService+DynamicConstants.swift +++ b/Adamant/Modules/Wallets/Klayr/WalletService/KlyWalletService+DynamicConstants.swift @@ -2,12 +2,12 @@ import Foundation import BigInt import CommonKit -extension LskWalletService { +extension KlyWalletService { // MARK: - Constants static let fixedFee: Decimal = 0.00164 - static let currencySymbol = "LSK" + static let currencySymbol = "KLY" static let currencyExponent: Int = -8 - static let qqPrefix: String = "lisk" + static let qqPrefix: String = "klayr" static let healthCheckParameters = CoinHealthCheckParameters( normalUpdateInterval: 270, @@ -40,7 +40,7 @@ extension LskWalletService { } var tokenName: String { - "Lisk" + "Klayr" } var consistencyMaxTime: Double { @@ -60,7 +60,7 @@ extension LskWalletService { } var defaultOrdinalLevel: Int? { - 60 + 50 } static var minNodeVersion: String? { @@ -71,21 +71,20 @@ extension LskWalletService { 8 } - static let explorerAddress = "https://liskscan.com/transaction/" + static let explorerAddress = "https://explorer.klayr.xyz/transaction/" static var nodes: [Node] { [ - Node(url: URL(string: "https://lisknode3.adamant.im")!, altUrl: URL(string: "http://157.90.229.236:44099")), -Node(url: URL(string: "https://lisknode4.adamant.im")!, altUrl: URL(string: "http://78.47.205.206:44099")), -Node(url: URL(string: "https://lisknode5.adamant.im")!, altUrl: URL(string: "http://38.242.243.29:44099")), + Node(url: URL(string: "https://klynode1.adamant.im")!, altUrl: URL(string: "http://195.26.255.137:44099")), +Node(url: URL(string: "https://klynode2.adamant.im")!, altUrl: URL(string: "http://109.176.199.130:44099")), ] } static var serviceNodes: [Node] { [ - Node(url: URL(string: "https://liskservice3.adamant.im")!), -Node(url: URL(string: "https://liskservice4.adamant.im")!), -Node(url: URL(string: "https://liskservice5.adamant.im")!), + Node(url: URL(string: "https://klyservice1.adamant.im")!), +Node(url: URL(string: "https://klyservice2.adamant.im")!), +Node(url: URL(string: "https://service.klayr.xyz")!), ] } } diff --git a/Adamant/Modules/Wallets/Lisk/LskWalletService+RichMessageProvider.swift b/Adamant/Modules/Wallets/Klayr/WalletService/KlyWalletService+RichMessageProvider.swift similarity index 77% rename from Adamant/Modules/Wallets/Lisk/LskWalletService+RichMessageProvider.swift rename to Adamant/Modules/Wallets/Klayr/WalletService/KlyWalletService+RichMessageProvider.swift index 4bb5f514e..5a341130c 100644 --- a/Adamant/Modules/Wallets/Lisk/LskWalletService+RichMessageProvider.swift +++ b/Adamant/Modules/Wallets/Klayr/WalletService/KlyWalletService+RichMessageProvider.swift @@ -1,18 +1,16 @@ // -// LskWalletService+RichMessageProvider.swift +// KlyWalletService+RichMessageProvider.swift // Adamant // -// Created by Anton Boyarkin on 06/12/2018. -// Copyright © 2018 Adamant. All rights reserved. +// Created by Stanislav Jelezoglo on 09.07.2024. +// Copyright © 2024 Adamant. All rights reserved. // import Foundation -import MessageKit -import UIKit import LiskKit import CommonKit -extension LskWalletService { +extension KlyWalletService { var newPendingInterval: TimeInterval { .init(milliseconds: type(of: self).newPendingInterval) } @@ -44,7 +42,7 @@ extension LskWalletService { guard let raw = transaction.getRichValue(for: RichContentKeys.transfer.amount) else { - return NSAttributedString(string: "⬅️ \(LskWalletService.currencySymbol)") + return NSAttributedString(string: "⬅️ \(KlyWalletService.currencySymbol)") } if let decimal = Decimal(string: raw) { @@ -55,9 +53,9 @@ extension LskWalletService { let string: String if transaction.isOutgoing { - string = "⬅️ \(amount) \(LskWalletService.currencySymbol)" + string = "⬅️ \(amount) \(KlyWalletService.currencySymbol)" } else { - string = "➡️ \(amount) \(LskWalletService.currencySymbol)" + string = "➡️ \(amount) \(KlyWalletService.currencySymbol)" } return NSAttributedString(string: string) diff --git a/Adamant/Modules/Wallets/Lisk/LskWalletService+Send.swift b/Adamant/Modules/Wallets/Klayr/WalletService/KlyWalletService+Send.swift similarity index 75% rename from Adamant/Modules/Wallets/Lisk/LskWalletService+Send.swift rename to Adamant/Modules/Wallets/Klayr/WalletService/KlyWalletService+Send.swift index d2d2f0e40..10174162d 100644 --- a/Adamant/Modules/Wallets/Lisk/LskWalletService+Send.swift +++ b/Adamant/Modules/Wallets/Klayr/WalletService/KlyWalletService+Send.swift @@ -1,28 +1,16 @@ // -// LskWalletService+Send.swift +// KlyWalletService+Send.swift // Adamant // -// Created by Anton Boyarkin on 29/11/2018. -// Copyright © 2018 Adamant. All rights reserved. +// Created by Stanislav Jelezoglo on 08.07.2024. +// Copyright © 2024 Adamant. All rights reserved. // import UIKit import LiskKit import CommonKit -extension LocalTransaction: RawTransaction { - var txHash: String? { - return id - } -} - -extension TransactionEntity: RawTransaction { - var txHash: String? { - return id - } -} - -extension LskWalletService: WalletServiceTwoStepSend { +extension KlyWalletService: WalletServiceTwoStepSend { typealias T = TransactionEntity // MARK: Create & Send @@ -32,7 +20,9 @@ extension LskWalletService: WalletServiceTwoStepSend { fee: Decimal ) async throws -> TransactionEntity { // MARK: 1. Prepare - guard let wallet = lskWallet, let binaryAddress = LiskKit.Crypto.getBinaryAddressFromBase32(recipient) else { + guard let wallet = klyWallet, + let binaryAddress = LiskKit.Crypto.getBinaryAddressFromBase32(recipient) + else { throw WalletServiceError.notLogged } @@ -53,8 +43,20 @@ extension LskWalletService: WalletServiceTwoStepSend { } func sendTransaction(_ transaction: TransactionEntity) async throws { - _ = try await lskNodeApiService.requestTransactionsApi { api in + _ = try await klyNodeApiService.requestTransactionsApi { api in try await api.submit(transaction: transaction) }.get() } } + +extension LocalTransaction: RawTransaction { + var txHash: String? { + return id + } +} + +extension TransactionEntity: RawTransaction { + var txHash: String? { + return id + } +} diff --git a/Adamant/Modules/Wallets/Lisk/LskWalletService+RichMessageProviderWithStatusCheck.swift b/Adamant/Modules/Wallets/Klayr/WalletService/KlyWalletService+StatusCheck.swift similarity index 69% rename from Adamant/Modules/Wallets/Lisk/LskWalletService+RichMessageProviderWithStatusCheck.swift rename to Adamant/Modules/Wallets/Klayr/WalletService/KlyWalletService+StatusCheck.swift index d315f0fc8..2117e4569 100644 --- a/Adamant/Modules/Wallets/Lisk/LskWalletService+RichMessageProviderWithStatusCheck.swift +++ b/Adamant/Modules/Wallets/Klayr/WalletService/KlyWalletService+StatusCheck.swift @@ -1,16 +1,15 @@ // -// LskWalletService+RichMessageProviderWithStatusCheck.swift +// KlyWalletService+StatusCheck.swift // Adamant // -// Created by Anton Boyarkin on 06/12/2018. -// Copyright © 2018 Adamant. All rights reserved. +// Created by Stanislav Jelezoglo on 08.07.2024. +// Copyright © 2024 Adamant. All rights reserved. // -import Foundation import LiskKit import CommonKit -extension LskWalletService { +extension KlyWalletService { func statusInfoFor(transaction: CoinTransaction) async -> TransactionStatusInfo { let hash: String? @@ -24,34 +23,38 @@ extension LskWalletService { return .init(sentDate: nil, status: .inconsistent(.wrongTxHash)) } - var lskTransaction: Transactions.TransactionModel + var klyTransaction: Transactions.TransactionModel do { - lskTransaction = try await getTransaction(by: hash) + klyTransaction = try await getTransaction(by: hash) } catch { return .init(error: error) } - lskTransaction.updateConfirmations(value: lastHeight) + klyTransaction.updateConfirmations(value: lastHeight) return await .init( - sentDate: lskTransaction.sentDate, + sentDate: klyTransaction.sentDate, status: getStatus( - lskTransaction: lskTransaction, + klyTransaction: klyTransaction, transaction: transaction ) ) } } -private extension LskWalletService { +private extension KlyWalletService { func getStatus( - lskTransaction: Transactions.TransactionModel, + klyTransaction: Transactions.TransactionModel, transaction: CoinTransaction ) async -> TransactionStatus { - guard lskTransaction.blockId != nil else { return .registered } + guard klyTransaction.blockId != nil else { return .registered } - guard let status = lskTransaction.transactionStatus else { + guard klyTransaction.executionStatus != .failed else { + return .failed + } + + guard let status = klyTransaction.transactionStatus else { return .inconsistent(.unknown) } @@ -61,8 +64,8 @@ private extension LskWalletService { // MARK: Check address - var realSenderAddress = lskTransaction.senderAddress - var realRecipientAddress = lskTransaction.recipientAddress + var realSenderAddress = klyTransaction.senderAddress + var realRecipientAddress = klyTransaction.recipientAddress if transaction is RichMessageTransaction { guard let senderAddress = try? await getWalletAddress(byAdamantAddress: transaction.senderAddress) @@ -79,20 +82,20 @@ private extension LskWalletService { realRecipientAddress = recipientAddress } - guard lskTransaction.senderAddress.caseInsensitiveCompare(realSenderAddress) == .orderedSame else { + guard klyTransaction.senderAddress.caseInsensitiveCompare(realSenderAddress) == .orderedSame else { return .inconsistent(.senderCryptoAddressMismatch(tokenSymbol)) } - guard lskTransaction.recipientAddress.caseInsensitiveCompare(realRecipientAddress) == .orderedSame else { + guard klyTransaction.recipientAddress.caseInsensitiveCompare(realRecipientAddress) == .orderedSame else { return .inconsistent(.recipientCryptoAddressMismatch(tokenSymbol)) } if transaction.isOutgoing { - guard lskWallet?.address.caseInsensitiveCompare(lskTransaction.senderAddress) == .orderedSame else { + guard klyWallet?.address.caseInsensitiveCompare(klyTransaction.senderAddress) == .orderedSame else { return .inconsistent(.senderCryptoAddressMismatch(tokenSymbol)) } } else { - guard lskWallet?.address.caseInsensitiveCompare(lskTransaction.recipientAddress) == .orderedSame else { + guard klyWallet?.address.caseInsensitiveCompare(klyTransaction.recipientAddress) == .orderedSame else { return .inconsistent(.recipientCryptoAddressMismatch(tokenSymbol)) } } @@ -100,7 +103,7 @@ private extension LskWalletService { // MARK: Check amount guard isAmountCorrect( transaction: transaction, - lskTransaction: lskTransaction + klyTransaction: klyTransaction ) else { return .inconsistent(.wrongAmount) } return .success @@ -108,7 +111,7 @@ private extension LskWalletService { func isAmountCorrect( transaction: CoinTransaction, - lskTransaction: Transactions.TransactionModel + klyTransaction: Transactions.TransactionModel ) -> Bool { if let transaction = transaction as? RichMessageTransaction, let raw = transaction.getRichValue(for: RichContentKeys.transfer.amount), @@ -116,10 +119,10 @@ private extension LskWalletService { let min = reported - reported*0.005 let max = reported + reported*0.005 - let amount = lskTransaction.amountValue ?? 0 + let amount = klyTransaction.amountValue ?? 0 return amount <= max && amount >= min } - return transaction.amountValue == lskTransaction.amountValue + return transaction.amountValue == klyTransaction.amountValue } } diff --git a/Adamant/Modules/Wallets/Klayr/WalletService/KlyWalletService+WalletCore.swift b/Adamant/Modules/Wallets/Klayr/WalletService/KlyWalletService+WalletCore.swift new file mode 100644 index 000000000..a15709032 --- /dev/null +++ b/Adamant/Modules/Wallets/Klayr/WalletService/KlyWalletService+WalletCore.swift @@ -0,0 +1,64 @@ +// +// KlyWalletService+WalletCore.swift +// Adamant +// +// Created by Stanislav Jelezoglo on 09.07.2024. +// Copyright © 2024 Adamant. All rights reserved. +// + +import UIKit +import CommonKit + +extension KlyWalletService { + var wallet: WalletAccount? { + klyWallet + } + + var tokenSymbol: String { + Self.currencySymbol + } + + var tokenLogo: UIImage { + Self.currencyLogo + } + + static var tokenNetworkSymbol: String { + Self.currencySymbol + } + + var tokenContract: String { + .empty + } + + var tokenUnicID: String { + Self.tokenNetworkSymbol + tokenSymbol + } + + var qqPrefix: String { + Self.qqPrefix + } + + var additionalFee: Decimal { + 0.05 + } + + var nodeGroups: [NodeGroup] { + [.klyNode, .klyService] + } + + var transactionFee: Decimal { + transactionFeeRaw.asDecimal(exponent: KlyWalletService.currencyExponent) + } + + var richMessageType: String { + Self.richMessageType + } + + var transactionsPublisher: AnyObservable<[TransactionDetails]> { + $transactions.eraseToAnyPublisher() + } + + var hasMoreOldTransactionsPublisher: AnyObservable { + $hasMoreOldTransactions.eraseToAnyPublisher() + } +} diff --git a/Adamant/Modules/Wallets/Lisk/LskWalletService.swift b/Adamant/Modules/Wallets/Klayr/WalletService/KlyWalletService.swift similarity index 54% rename from Adamant/Modules/Wallets/Lisk/LskWalletService.swift rename to Adamant/Modules/Wallets/Klayr/WalletService/KlyWalletService.swift index c3b9d8a89..b044ee401 100644 --- a/Adamant/Modules/Wallets/Lisk/LskWalletService.swift +++ b/Adamant/Modules/Wallets/Klayr/WalletService/KlyWalletService.swift @@ -1,152 +1,166 @@ // -// LskWalletService.swift +// KlyWalletService.swift // Adamant // -// Created by Anokhov Pavel on 03.08.2018. -// Copyright © 2018 Adamant. All rights reserved. +// Created by Stanislav Jelezoglo on 08.07.2024. +// Copyright © 2024 Adamant. All rights reserved. // import Foundation -import UIKit import Swinject -import LiskKit -import web3swift -import Alamofire -import struct BigInt.BigUInt -import Web3Core -import Combine +import UIKit import CommonKit +import Combine +import struct BigInt.BigUInt +import LiskKit -final class LskWalletService: WalletCoreProtocol { - var wallet: WalletAccount? { return lskWallet } +final class KlyWalletService: WalletCoreProtocol { - // MARK: - Notifications - let walletUpdatedNotification = Notification.Name("adamant.lskWallet.walletUpdated") - let serviceEnabledChanged = Notification.Name("adamant.lskWallet.enabledChanged") - let transactionFeeUpdated = Notification.Name("adamant.lskWallet.feeUpdated") - let serviceStateChanged = Notification.Name("adamant.lskWallet.stateChanged") + // MARK: Dependencies - // MARK: RichMessageProvider properties - static let richMessageType = "lsk_transaction" - - // MARK: - Dependencies var apiService: ApiService! - var lskNodeApiService: LskNodeApiService! - var lskServiceApiService: LskServiceApiService! + var klyNodeApiService: KlyNodeApiService! + var klyServiceApiService: KlyServiceApiService! var accountService: AccountService! var dialogService: DialogService! var vibroService: VibroService! var coreDataStack: CoreDataStack! - // MARK: - Constants - var transactionFee: Decimal { - transactionFeeRaw.asDecimal(exponent: LskWalletService.currencyExponent) - } + // MARK: Proprieties + static let richMessageType = "kly_transaction" + static let currencyLogo = UIImage.asset(named: "klayr_wallet") ?? .init() + static let kvsAddress = "kly:address" + static let defaultFee: BigUInt = 141000 + @Atomic var transactionFeeRaw: BigUInt = BigUInt(integerLiteral: 141000) + + @Atomic private var cachedWalletAddress: [String: String] = [:] + @Atomic private var subscriptions = Set() + @Atomic private var balanceObserver: AnyCancellable? + + @Atomic private(set) var klyWallet: KlyWallet? @Atomic private(set) var enabled = true @Atomic private(set) var isWarningGasPrice = false + @Atomic private(set) var state: WalletServiceState = .notInitiated + @Atomic private(set) var lastHeight: UInt64 = .zero - static let currencyLogo = UIImage.asset(named: "lisk_wallet") ?? .init() - static let kvsAddress = "lsk:address" - static let defaultFee: BigUInt = 141000 + @ObservableValue private(set) var transactions: [TransactionDetails] = [] + @ObservableValue private(set) var hasMoreOldTransactions: Bool = true - @Atomic var lastHeight: UInt64 = .zero + private(set) lazy var coinStorage: CoinStorageService = AdamantCoinStorageService( + coinId: tokenUnicID, + coreDataStack: coreDataStack, + blockchainType: richMessageType + ) + + // MARK: Notifications - var tokenSymbol: String { - return type(of: self).currencySymbol - } + let walletUpdatedNotification = Notification.Name("adamant.klyWallet.walletUpdated") + let serviceEnabledChanged = Notification.Name("adamant.klyWallet.enabledChanged") + let transactionFeeUpdated = Notification.Name("adamant.klyWallet.feeUpdated") + let serviceStateChanged = Notification.Name("adamant.klyWallet.stateChanged") - var tokenLogo: UIImage { - return type(of: self).currencyLogo - } - - static var tokenNetworkSymbol: String { - return "LSK" - } + // MARK: - - var tokenContract: String { - return "" + func initWallet( + withPassphrase passphrase: String + ) async throws -> WalletAccount { + try await initWallet(passphrase: passphrase) } - var tokenUnicID: String { - Self.tokenNetworkSymbol + tokenSymbol + func setInitiationFailed(reason: String) { + setState(.initiationFailed(reason: reason)) + klyWallet = nil } - var richMessageType: String { - return Self.richMessageType - } - - var qqPrefix: String { - return Self.qqPrefix + func update() { + Task { + await update() + } } - var additionalFee: Decimal { - 0.05 - } - - var nodeGroups: [NodeGroup] { - [.lskNode, .lskService] + func updateStatus(for id: String, status: TransactionStatus?) { + coinStorage.updateStatus(for: id, status: status) } - // MARK: - Properties - let transferAvailable: Bool = true - let netHash = Constants.Nethash.main - - @Atomic private(set) var lskWallet: LskWallet? - @Atomic private var cachedWalletAddress: [String: String] = [:] + func validate(address: String) -> AddressValidationResult { + LiskKit.Crypto.isValidBase32(address: address) + ? .valid + : .invalid(description: nil) + } - let defaultDispatchQueue = DispatchQueue( - label: "im.adamant.lskWalletService", - qos: .utility, - attributes: [.concurrent] - ) + func getBalance(address: String) async throws -> Decimal { + try await getBalance(for: address) + } - @Atomic private var subscriptions = Set() - - @ObservableValue private(set) var transactions: [TransactionDetails] = [] - @ObservableValue private(set) var hasMoreOldTransactions: Bool = true - - var transactionsPublisher: AnyObservable<[TransactionDetails]> { - $transactions.eraseToAnyPublisher() + func getCurrentFee() async throws -> (fee: BigUInt, lastHeight: UInt64) { + try await getFees() } - var hasMoreOldTransactionsPublisher: AnyObservable { - $hasMoreOldTransactions.eraseToAnyPublisher() + func getWalletAddress(byAdamantAddress address: String) async throws -> String { + try await getKlyWalletAddress(byAdamantAddress: address) } - private(set) lazy var coinStorage: CoinStorageService = AdamantCoinStorageService( - coinId: tokenUnicID, - coreDataStack: coreDataStack, - blockchainType: richMessageType - ) + func getLocalTransactionHistory() -> [TransactionDetails] { + transactions + } - // MARK: - State - @Atomic private (set) var state: WalletServiceState = .notInitiated + func getTransactionsHistory( + offset: Int, + limit: Int + ) async throws -> [TransactionDetails] { + try await getTransactions(offset: UInt(offset), limit: UInt(limit)) + } - private func setState(_ newState: WalletServiceState, silent: Bool = false) { - guard newState != state else { - return - } - - state = newState + func loadTransactions(offset: Int, limit: Int) async throws -> Int { + let trs = try await getTransactionsHistory(offset: offset, limit: limit) - if !silent { - NotificationCenter.default.post( - name: serviceStateChanged, - object: self, - userInfo: [AdamantUserInfoKey.WalletService.walletState: state] - ) + guard trs.count > 0 else { + hasMoreOldTransactions = false + return .zero } - } - // MARK: - Delayed KVS save - @Atomic private var balanceObserver: NSObjectProtocol? + coinStorage.append(trs) + return trs.count + } - init() { - addObservers() + func getTransaction( + by hash: String + ) async throws -> Transactions.TransactionModel { + try await getTransaction(hash: hash) } + func isExist(address: String) async throws -> Bool { + try await isAccountExist(with: address) + } +} + +// MARK: - Dependencies +extension KlyWalletService: SwinjectDependentService { + @MainActor + func injectDependencies(from container: Container) { + accountService = container.resolve(AccountService.self) + apiService = container.resolve(ApiService.self) + dialogService = container.resolve(DialogService.self) + klyServiceApiService = container.resolve(KlyServiceApiService.self) + klyNodeApiService = container.resolve(KlyNodeApiService.self) + vibroService = container.resolve(VibroService.self) + coreDataStack = container.resolve(CoreDataStack.self) + + addTransactionObserver() + } + + func addTransactionObserver() { + coinStorage.transactionsPublisher + .sink { [weak self] transactions in + self?.transactions = transactions + } + .store(in: &subscriptions) + } +} + +private extension KlyWalletService { func addObservers() { NotificationCenter.default .publisher(for: .AdamantAccountService.userLoggedIn, object: nil) @@ -168,7 +182,8 @@ final class LskWalletService: WalletCoreProtocol { .publisher(for: .AdamantAccountService.userLoggedOut, object: nil) .receive(on: OperationQueue.main) .sink { [weak self] _ in - self?.lskWallet = nil + self?.klyWallet = nil + if let balanceObserver = self?.balanceObserver { NotificationCenter.default.removeObserver(balanceObserver) self?.balanceObserver = nil @@ -180,22 +195,8 @@ final class LskWalletService: WalletCoreProtocol { .store(in: &subscriptions) } - func addTransactionObserver() { - coinStorage.transactionsPublisher - .sink { [weak self] transactions in - self?.transactions = transactions - } - .store(in: &subscriptions) - } - - func update() { - Task { - await update() - } - } - func update() async { - guard let wallet = lskWallet else { + guard let wallet = klyWallet else { return } @@ -215,9 +216,9 @@ final class LskWalletService: WalletCoreProtocol { if let result = try? await getFees() { self.lastHeight = result.lastHeight - self.transactionFeeRaw = result.fee > LskWalletService.defaultFee + self.transactionFeeRaw = result.fee > KlyWalletService.defaultFee ? result.fee - : LskWalletService.defaultFee + : KlyWalletService.defaultFee } if let balance = try? await getBalance() { @@ -251,34 +252,46 @@ final class LskWalletService: WalletCoreProtocol { setState(.upToDate) } - - // MARK: - Tools - func validate(address: String) -> AddressValidationResult { - return validateAddress(address) - } +} - func validateAddress(_ address: String) -> AddressValidationResult { - return LiskKit.Crypto.isValidBase32(address: address) ? .valid : .invalid(description: nil) - } - - func fromRawLsk(value: BigInt.BigUInt) -> String { - return Utilities.formatToPrecision(value, units: .custom(8), formattingDecimals: 8, decimalSeparator: ".", fallbackToScientific: false) +private extension KlyWalletService { + func getBalance() async throws -> Decimal { + guard let address = klyWallet?.address else { + throw WalletServiceError.notLogged + } + + return try await getBalance(address: address) } - func toRawLsk(value: Double) -> String { - if let formattedAmount = Utilities.parseToBigUInt("\(value)", decimals: 8) { - return "\(formattedAmount)" - } else { - return "--" + func getBalance(for address: String) async throws -> Decimal { + let result = await klyNodeApiService.requestAccountsApi { api in + let balanceRaw = try await api.balance(address: address) + let balance = BigUInt(balanceRaw?.availableBalance ?? "0") ?? .zero + return balance + } + + switch result { + case let .success(balance): + return balance.asDecimal(exponent: KlyWalletService.currencyExponent) + case let .failure(error): + throw error } } + func getNonce(address: String) async throws -> UInt64 { + let nonce = try await klyNodeApiService.requestAccountsApi { api in + try await api.nonce(address: address) + }.get() + + return UInt64(nonce) ?? .zero + } + func getFees() async throws -> (fee: BigUInt, lastHeight: UInt64) { - guard let wallet = lskWallet else { + guard let wallet = klyWallet else { throw WalletServiceError.notLogged } - let minFeePerByte = try await lskNodeApiService.requestAccountsApi { api in + let minFeePerByte = try await klyNodeApiService.requestAccountsApi { api in try await api.getFees().minFeePerByte }.get() @@ -296,7 +309,7 @@ final class LskWalletService: WalletCoreProtocol { let feeValue = tempTransaction.getFee(with: minFeePerByte) let fee = BigUInt(feeValue) - let lastBlock = try await lskNodeApiService.requestAccountsApi { api in + let lastBlock = try await klyNodeApiService.requestAccountsApi { api in try await api.lastBlock() }.get() @@ -305,30 +318,30 @@ final class LskWalletService: WalletCoreProtocol { return (fee: fee, lastHeight: height) } - func isExist(address: String) async throws -> Bool { - try await lskServiceApiService.requestServiceApi { api in - try await withUnsafeThrowingContinuation { continuation in - api.exist(address: address) { result in - switch result { - case .success(let response): - continuation.resume(returning: response.data.isExists) - case .error(let error): - continuation.resume(throwing: error) - } - } - } - }.get() + func setState(_ newState: WalletServiceState, silent: Bool = false) { + guard newState != state else { + return + } + + state = newState + + guard !silent else { return } + + NotificationCenter.default.post( + name: serviceStateChanged, + object: self, + userInfo: [AdamantUserInfoKey.WalletService.walletState: state] + ) } } -// MARK: - WalletInitiatedWithPassphrase -extension LskWalletService { - func initWallet(withPassphrase passphrase: String) async throws -> WalletAccount { +// MARK: - Init Wallet +private extension KlyWalletService { + func initWallet(passphrase: String) async throws -> WalletAccount { guard let adamant = accountService.account else { throw WalletServiceError.notLogged } - // MARK: 1. Prepare setState(.notInitiated) if enabled { @@ -336,19 +349,21 @@ extension LskWalletService { NotificationCenter.default.post(name: serviceEnabledChanged, object: self) } - // MARK: 2. Create keys and addresses do { - let keyPair = try LiskKit.Crypto.keyPair(fromPassphrase: passphrase, salt: "adm") + let keyPair = try LiskKit.Crypto.keyPair( + fromPassphrase: passphrase, + salt: "adm" + ) + let address = LiskKit.Crypto.address(fromPublicKey: keyPair.publicKeyString) - // MARK: 3. Update - let wallet = LskWallet( + let wallet = KlyWallet( address: address, keyPair: keyPair, nonce: .zero, isNewApi: true ) - self.lskWallet = wallet + self.klyWallet = wallet NotificationCenter.default.post( name: walletUpdatedNotification, @@ -356,7 +371,6 @@ extension LskWalletService { userInfo: [AdamantUserInfoKey.WalletService.wallet: wallet] ) } catch { - print("\(error)") throw WalletServiceError.accountNotFound } @@ -365,25 +379,23 @@ extension LskWalletService { NotificationCenter.default.post(name: serviceEnabledChanged, object: self) } - guard let eWallet = self.lskWallet else { + guard let eWallet = self.klyWallet else { throw WalletServiceError.accountNotFound } - // MARK: 4. Save into KVS - let service = self + // Save into KVS + do { let address = try await getWalletAddress(byAdamantAddress: adamant.address) if address != eWallet.address { - service.save(lskAddress: eWallet.address) { result in - service.kvsSaveCompletionRecursion(lskAddress: eWallet.address, result: result) - } + updateKvsAddress(eWallet.address) } - service.setState(.upToDate) + setState(.upToDate) Task { - await service.update() + await update() } return eWallet @@ -392,143 +404,102 @@ extension LskWalletService { case .walletNotInitiated: /// The ADM Wallet is not initialized. Check the balance of the current wallet /// and save the wallet address to kvs when dropshipping ADM - service.setState(.upToDate) + setState(.upToDate) Task { - await service.update() + await update() } - service.save(lskAddress: eWallet.address) { result in - service.kvsSaveCompletionRecursion(lskAddress: eWallet.address, result: result) - } + updateKvsAddress(eWallet.address) return eWallet default: - service.setState(.upToDate) + setState(.upToDate) throw error } } } - func setInitiationFailed(reason: String) { - setState(.initiationFailed(reason: reason)) - lskWallet = nil + func updateKvsAddress(_ address: String) { + Task { + do { + try await save(klyAddress: address) + } catch { + kvsSaveProcessError( + klyAddress: address, + error: error + ) + } + } } /// New accounts doesn't have enought money to save KVS. We need to wait for balance update, and then - retry save - private func kvsSaveCompletionRecursion(lskAddress: String, result: WalletServiceSimpleResult) { - if let observer = balanceObserver { - NotificationCenter.default.removeObserver(observer) - balanceObserver = nil - } - - switch result { - case .success: - break - - case .failure(let error): - switch error { - case .notEnoughMoney: // Possibly new account, we need to wait for dropship - // Register observer - let observer = NotificationCenter.default.addObserver(forName: NSNotification.Name.AdamantAccountService.accountDataUpdated, object: nil, queue: nil) { [weak self] _ in - guard let balance = self?.accountService.account?.balance, balance > AdamantApiService.KvsFee else { - return - } - - self?.save(lskAddress: lskAddress) { result in - self?.kvsSaveCompletionRecursion(lskAddress: lskAddress, result: result) - } - } - - // Save referense to unregister it later - balanceObserver = observer + func kvsSaveProcessError( + klyAddress: String, + error: Error + ) { + guard let error = error as? WalletServiceError, + case .notEnoughMoney = error + else { return } + + balanceObserver?.cancel() + + balanceObserver = NotificationCenter.default.publisher(for: .AdamantAccountService.accountDataUpdated) + .compactMap { [weak self] _ in + self?.accountService.account?.balance + } + .filter { $0 > AdamantApiService.KvsFee } + .sink { [weak self] _ in + guard let self = self else { return } - default: - print("\(error.localizedDescription)") + Task { + try await self.save(klyAddress: klyAddress) + self.balanceObserver?.cancel() + } } - } } -} - -// MARK: - Dependencies -extension LskWalletService: SwinjectDependentService { - @MainActor - func injectDependencies(from container: Container) { - accountService = container.resolve(AccountService.self) - apiService = container.resolve(ApiService.self) - dialogService = container.resolve(DialogService.self) - lskServiceApiService = container.resolve(LskServiceApiService.self) - lskNodeApiService = container.resolve(LskNodeApiService.self) - vibroService = container.resolve(VibroService.self) - coreDataStack = container.resolve(CoreDataStack.self) - - addTransactionObserver() - } -} - -// MARK: - Balances & addresses -extension LskWalletService { - func getBalance() async throws -> Decimal { - guard let address = lskWallet?.address else { + + /// - Parameters: + /// - klyAddress: Klayr address to save into KVS + /// - adamantAddress: Owner of Klayr address + func save(klyAddress: String) async throws { + guard let adamant = accountService.account, + let keypair = accountService.keypair + else { throw WalletServiceError.notLogged } - return try await getBalance(address: address) - } - - func getBalance(address: String) async throws -> Decimal { - let result = await lskNodeApiService.requestAccountsApi { api in - let balanceRaw = try await api.balance(address: address) - let balance = BigUInt(balanceRaw?.availableBalance ?? "0") ?? .zero - return balance + guard adamant.balance >= AdamantApiService.KvsFee else { + throw WalletServiceError.notEnoughMoney } - switch result { - case let .success(balance): - return balance.asDecimal(exponent: LskWalletService.currencyExponent) - case let .failure(error): - throw error - } - } - - func getNonce(address: String) async throws -> UInt64 { - let nonce = try await lskNodeApiService.requestAccountsApi { api in - try await api.nonce(address: address) - }.get() + let result = await apiService.store( + key: KlyWalletService.kvsAddress, + value: klyAddress, + type: .keyValue, + sender: adamant.address, + keypair: keypair + ) - return UInt64(nonce) ?? .zero - } - - func handleAccountSuccess(with balance: String?, completion: @escaping (WalletServiceResult) -> Void) { - let balance = BigUInt(balance ?? "0") ?? BigUInt(0) - completion(.success(balance.asDecimal(exponent: LskWalletService.currencyExponent))) - } - func handleAccountError(with error: APIError, completion: @escaping (WalletServiceResult) -> Void) { - if error == .noNetwork { - completion(.failure(.networkError)) - } else { - completion(.failure(.remoteServiceError(message: error.message))) - } - } - - func getLskAddress(byAdamandAddress address: String, completion: @escaping (ApiServiceResult) -> Void) { - Task { - let result = await apiService.get( - key: LskWalletService.kvsAddress, - sender: address - ) - - completion(result) + guard case .failure(let error) = result else { + return } + + throw WalletServiceError.apiError(error) } - func getWalletAddress(byAdamantAddress address: String) async throws -> String { + func getKlyWalletAddress( + byAdamantAddress address: String + ) async throws -> String { if let address = cachedWalletAddress[address], !address.isEmpty { return address } do { - let result = try await apiService.get(key: LskWalletService.kvsAddress, sender: address).get() + let result = try await apiService.get( + key: KlyWalletService.kvsAddress, + sender: address + ).get() guard let result = result else { throw WalletServiceError.walletNotInitiated @@ -539,77 +510,22 @@ extension LskWalletService { return result } catch _ as ApiServiceError { throw WalletServiceError.remoteServiceError( - message: "LSK Wallet: failed to get address from KVS" + message: "KLY Wallet: failed to get address from KVS" ) } } - - func loadTransactions(offset: Int, limit: Int) async throws -> Int { - let trs = try await getTransactionsHistory(offset: offset, limit: limit) - - guard trs.count > 0 else { - hasMoreOldTransactions = false - return .zero - } - - coinStorage.append(trs) - return trs.count - } - - func getTransactionsHistory(offset: Int, limit: Int) async throws -> [TransactionDetails] { - try await getTransactions(offset: UInt(offset), limit: UInt(limit)) - } - - func getLocalTransactionHistory() -> [TransactionDetails] { - transactions - } } -// MARK: - KVS -extension LskWalletService { - /// - Parameters: - /// - lskAddress: Lisk address to save into KVS - /// - adamantAddress: Owner of Lisk address - /// - completion: success - private func save(lskAddress: String, completion: @escaping (WalletServiceSimpleResult) -> Void) { - guard let adamant = accountService.account, let keypair = accountService.keypair else { - completion(.failure(error: .notLogged)) - return +private extension KlyWalletService { + func getTransactions( + offset: UInt, + limit: UInt = 100 + ) async throws -> [Transactions.TransactionModel] { + guard let address = self.klyWallet?.address else { + throw WalletServiceError.internalError(message: "KLY Wallet: not found", error: nil) } - guard adamant.balance >= AdamantApiService.KvsFee else { - completion(.failure(error: .notEnoughMoney)) - return - } - - Task { - let result = await apiService.store( - key: LskWalletService.kvsAddress, - value: lskAddress, - type: .keyValue, - sender: adamant.address, - keypair: keypair - ) - - switch result { - case .success: - completion(.success) - - case .failure(let error): - completion(.failure(error: .apiError(error))) - } - } - } -} - -// MARK: - Transactions -extension LskWalletService { - func getTransactions(offset: UInt, limit: UInt = 100) async throws -> [Transactions.TransactionModel] { - guard let address = self.lskWallet?.address else { - throw WalletServiceError.internalError(message: "LSK Wallet: not found", error: nil) - } - - return try await lskServiceApiService.requestServiceApi { api, completion in + return try await klyServiceApiService.requestServiceApi { api, completion in api.transactions( ownerAddress: address, senderIdOrRecipientId: address, @@ -621,14 +537,14 @@ extension LskWalletService { }.get() } - func getTransaction(by hash: String) async throws -> Transactions.TransactionModel { + func getTransaction(hash: String) async throws -> Transactions.TransactionModel { guard !hash.isEmpty else { throw ApiServiceError.internalError(message: "No hash", error: nil) } - let ownerAddress = wallet?.address + let ownerAddress = klyWallet?.address - let result = try await lskServiceApiService.requestServiceApi { api, completion in + let result = try await klyServiceApiService.requestServiceApi { api, completion in api.transactions( ownerAddress: ownerAddress, id: hash, @@ -640,31 +556,23 @@ extension LskWalletService { if let transaction = result.first { return transaction - } else { - throw WalletServiceError.remoteServiceError(message: "No transaction") } + + throw WalletServiceError.remoteServiceError(message: "No transaction") } - func updateStatus(for id: String, status: TransactionStatus?) { - coinStorage.updateStatus(for: id, status: status) - } -} - -// MARK: - PrivateKey generator -extension LskWalletService: PrivateKeyGenerator { - var rowTitle: String { - return "Lisk" - } - - var rowImage: UIImage? { - return .asset(named: "lisk_wallet_row") - } - - func generatePrivateKeyFor(passphrase: String) -> String? { - guard AdamantUtilities.validateAdamantPassphrase(passphrase: passphrase), let keypair = try? LiskKit.Crypto.keyPair(fromPassphrase: passphrase, salt: "adm") else { - return nil - } - - return keypair.privateKeyString + func isAccountExist(with address: String) async throws -> Bool { + try await klyServiceApiService.requestServiceApi { api in + try await withUnsafeThrowingContinuation { continuation in + api.exist(address: address) { result in + switch result { + case .success(let response): + continuation.resume(returning: response.data.isExists) + case .error(let error): + continuation.resume(throwing: error) + } + } + } + }.get() } } diff --git a/Adamant/Modules/Wallets/Lisk/LskWallet.swift b/Adamant/Modules/Wallets/Lisk/LskWallet.swift deleted file mode 100644 index 4eb1fe9c5..000000000 --- a/Adamant/Modules/Wallets/Lisk/LskWallet.swift +++ /dev/null @@ -1,41 +0,0 @@ -// -// LskWallet.swift -// Adamant -// -// Created by Anokhov Pavel on 03.08.2018. -// Copyright © 2018 Adamant. All rights reserved. -// - -import Foundation -import LiskKit - -final class LskWallet: WalletAccount { - - var address: String { - return isNewApi ? lisk32Address : legacyAddress - } - - var binaryAddress: String { - return isNewApi ? LiskKit.Crypto.getBinaryAddressFromBase32(lisk32Address) ?? "" : legacyAddress - } - - let legacyAddress: String - let lisk32Address: String - let keyPair: KeyPair - var balance: Decimal = 0.0 - var notifications: Int = 0 - var isNewApi: Bool = true - var nonce: UInt64 - var minBalance: Decimal = 0.05 - var minAmount: Decimal = 0 - var isBalanceInitialized: Bool = false - - init(address: String, keyPair: KeyPair, nonce: UInt64, isNewApi: Bool) { - self.legacyAddress = address - self.keyPair = keyPair - self.lisk32Address = LiskKit.Crypto.getBase32Address(from: keyPair.publicKeyString) - self.isNewApi = isNewApi - self.nonce = nonce - } - -} diff --git a/Adamant/Modules/Wallets/Lisk/LskWalletViewController.swift b/Adamant/Modules/Wallets/Lisk/LskWalletViewController.swift deleted file mode 100644 index af0544723..000000000 --- a/Adamant/Modules/Wallets/Lisk/LskWalletViewController.swift +++ /dev/null @@ -1,34 +0,0 @@ -// -// LskWalletViewController.swift -// Adamant -// -// Created by Anton Boyarkin on 27/11/2018. -// Copyright © 2018 Adamant. All rights reserved. -// - -import UIKit -import CommonKit - -extension String.adamant { - static var lisk: String { - String.localized("AccountTab.Wallets.lisk_wallet", comment: "Account tab: Lisk wallet") - } - - static var sendLsk: String { - String.localized("AccountTab.Row.SendLsk", comment: "Account tab: 'Send LSK tokens' button") - } -} - -final class LskWalletViewController: WalletViewControllerBase { - override func sendRowLocalizedLabel() -> NSAttributedString { - return NSAttributedString(string: String.adamant.sendLsk) - } - - override func encodeForQr(address: String) -> String? { - return "lisk:\(address)" - } - - override func setTitle() { - walletTitleLabel.text = String.adamant.lisk - } -} diff --git a/Adamant/Modules/Wallets/TransferViewControllerBase.swift b/Adamant/Modules/Wallets/TransferViewControllerBase.swift index 6b3fa1496..b7073e925 100644 --- a/Adamant/Modules/Wallets/TransferViewControllerBase.swift +++ b/Adamant/Modules/Wallets/TransferViewControllerBase.swift @@ -67,6 +67,9 @@ extension String.adamant { static var useMaxToTransfer: String { String.localized("TransferScene.UseMaxToTransfer", comment: "Tranfser: Confirm using maximum available for transfer tokens as amount to transfer.") } + static var unknownToken: String { + String.localized("Transaction.UnknownTokenTitle", comment: "Transaction: Unknown token") + } } } diff --git a/Adamant/Services/NodesStorage.swift b/Adamant/Services/NodesStorage.swift index 8a7b4089f..f58c484f4 100644 --- a/Adamant/Services/NodesStorage.swift +++ b/Adamant/Services/NodesStorage.swift @@ -122,10 +122,10 @@ private extension NodesStorage { return BtcWalletService.nodes.map { .init(group: .btc, node: $0) } case .eth: return EthWalletService.nodes.map { .init(group: .eth, node: $0) } - case .lskNode: - return LskWalletService.nodes.map { .init(group: .lskNode, node: $0) } - case .lskService: - return LskWalletService.serviceNodes.map { .init(group: .lskService, node: $0) } + case .klyNode: + return KlyWalletService.nodes.map { .init(group: .klyNode, node: $0) } + case .klyService: + return KlyWalletService.serviceNodes.map { .init(group: .klyService, node: $0) } case .doge: return DogeWalletService.nodes.map { .init(group: .doge, node: $0) } case .dash: diff --git a/CommonKit/Sources/CommonKit/AdamantDynamicResources.swift b/CommonKit/Sources/CommonKit/AdamantDynamicResources.swift index 5aebf8810..5b46f2aa1 100644 --- a/CommonKit/Sources/CommonKit/AdamantDynamicResources.swift +++ b/CommonKit/Sources/CommonKit/AdamantDynamicResources.swift @@ -16,9 +16,9 @@ Node(url: URL(string: "http://184.94.215.92:45555")!), Node(url: URL(string: "https://node1.adamant.business")!, altUrl: URL(string: "http://194.233.75.29:45555")), Node(url: URL(string: "https://node2.blockchain2fa.io")!), Node(url: URL(string: "https://phecda.adm.im")!, altUrl: URL(string: "http://46.250.234.248:36666")), -Node(url: URL(string: "https://tegmine.adm.im")!, altUrl: URL(string: "http://5.104.87.219:36666")), +Node(url: URL(string: "https://tegmine.adm.im")!), Node(url: URL(string: "https://tauri.adm.im")!, altUrl: URL(string: "http://154.26.159.245:36666")), -Node(url: URL(string: "https://dschubba.adm.im")!, altUrl: URL(string: "http://85.239.234.17:36666")), +Node(url: URL(string: "https://dschubba.adm.im")!), ] } diff --git a/CommonKit/Sources/CommonKit/Assets/Localization/de.lproj/Localizable.strings b/CommonKit/Sources/CommonKit/Assets/Localization/de.lproj/Localizable.strings index 085ad7956..7e96c86bb 100644 --- a/CommonKit/Sources/CommonKit/Assets/Localization/de.lproj/Localizable.strings +++ b/CommonKit/Sources/CommonKit/Assets/Localization/de.lproj/Localizable.strings @@ -184,8 +184,8 @@ /* Account tab: 'Send ETH tokens' button */ "AccountTab.Row.SendEth" = "ETH senden"; -/* Account tab: 'Send LSK tokens' button */ -"AccountTab.Row.SendLsk" = "LSK senden"; +/* Account tab: 'Send KLY tokens' button */ +"AccountTab.Row.SendKly" = "KLY senden"; /* Account tab: 'Send BTC tokens' button */ "AccountTab.Row.SendBtc" = "BTC "; @@ -241,8 +241,8 @@ /* Account tab: Ethereum wallet */ "AccountTab.Wallets.ethereum_wallet" = "Ethereum Wallet"; -/* Account tab: Lisk wallet */ -"AccountTab.Wallets.lisk_wallet" = "Lisk Wallet"; +/* Account tab: Klayr wallet */ +"AccountTab.Wallets.kly_wallet" = "Klayr Wallet"; /* Account tab: Bitcoin wallet */ "AccountTab.Wallets.bitcoin_wallet" = "Bitcoin Wallet"; @@ -1239,3 +1239,6 @@ /* Include partner url */ "PartnerQR.includePartnerURL" = "Koppeling naar webapp opnemen"; + +/* Transaction: Unknown token */ +"Transaction.UnknownTokenTitle" = "Unbekannt"; diff --git a/CommonKit/Sources/CommonKit/Assets/Localization/en.lproj/Localizable.strings b/CommonKit/Sources/CommonKit/Assets/Localization/en.lproj/Localizable.strings index 95c1d1f23..18acc4061 100644 --- a/CommonKit/Sources/CommonKit/Assets/Localization/en.lproj/Localizable.strings +++ b/CommonKit/Sources/CommonKit/Assets/Localization/en.lproj/Localizable.strings @@ -181,8 +181,8 @@ /* Account tab: 'Send ETH tokens' button */ "AccountTab.Row.SendEth" = "Send ETH"; -/* Account tab: 'Send LSK tokens' button */ -"AccountTab.Row.SendLsk" = "Send LSK"; +/* Account tab: 'Send KLY tokens' button */ +"AccountTab.Row.SendKly" = "Send KLY"; /* Account tab: 'Send BTC tokens' button */ "AccountTab.Row.SendBtc" = "Send BTC"; @@ -238,8 +238,8 @@ /* Account tab: Ethereum wallet */ "AccountTab.Wallets.ethereum_wallet" = "Ethereum Wallet"; -/* Account tab: Lisk wallet */ -"AccountTab.Wallets.lisk_wallet" = "Lisk Wallet"; +/* Account tab: Klayr wallet */ +"AccountTab.Wallets.kly_wallet" = "Klayr Wallet"; /* Account tab: Bitcoin wallet */ "AccountTab.Wallets.bitcoin_wallet" = "Bitcoin Wallet"; @@ -1212,3 +1212,6 @@ /* Include partner url */ "PartnerQR.includePartnerURL" = "Include Web app link"; + +/* Transaction: Unknown token */ +"Transaction.UnknownTokenTitle" = "Unknown"; diff --git a/CommonKit/Sources/CommonKit/Assets/Localization/ru.lproj/Localizable.strings b/CommonKit/Sources/CommonKit/Assets/Localization/ru.lproj/Localizable.strings index b67494f1e..c4a061e1d 100644 --- a/CommonKit/Sources/CommonKit/Assets/Localization/ru.lproj/Localizable.strings +++ b/CommonKit/Sources/CommonKit/Assets/Localization/ru.lproj/Localizable.strings @@ -172,8 +172,8 @@ /* Account tab: 'Send ETH tokens' button */ "AccountTab.Row.SendEth" = "Отправить ETH"; -/* Account tab: 'Send LSK tokens' button */ -"AccountTab.Row.SendLsk" = "Отправить LSK"; +/* Account tab: 'Send KLY tokens' button */ +"AccountTab.Row.SendKly" = "Отправить KLY"; /* Account tab: 'Send BTC tokens' button */ "AccountTab.Row.SendBtc" = "Отправить BTC"; @@ -238,8 +238,8 @@ /* Account tab: Ethereum wallet */ "AccountTab.Wallets.ethereum_wallet" = "Кошелек Ethereum"; -/* Account tab: Lisk wallet */ -"AccountTab.Wallets.lisk_wallet" = "Кошелек Lisk"; +/* Account tab: Klayr wallet */ +"AccountTab.Wallets.kly_wallet" = "Кошелек Klayr"; /* Account tab: Bitcoin wallet */ "AccountTab.Wallets.bitcoin_wallet" = "Кошелек Bitcoin"; @@ -1209,3 +1209,6 @@ /* Include partner url */ "PartnerQR.includePartnerURL" = "Добавить ссылку на веб-приложение"; + +/* Transaction: Unknown token */ +"Transaction.UnknownTokenTitle" = "Unknown"; diff --git a/CommonKit/Sources/CommonKit/Assets/Localization/zh.lproj/Localizable.strings b/CommonKit/Sources/CommonKit/Assets/Localization/zh.lproj/Localizable.strings index a164356b3..602d2d314 100644 --- a/CommonKit/Sources/CommonKit/Assets/Localization/zh.lproj/Localizable.strings +++ b/CommonKit/Sources/CommonKit/Assets/Localization/zh.lproj/Localizable.strings @@ -181,8 +181,8 @@ /* Account tab: 'Send ETH tokens' button */ "AccountTab.Row.SendEth" = "发送ETH"; -/* Account tab: 'Send LSK tokens' button */ -"AccountTab.Row.SendLsk" = "发送LSK"; +/* Account tab: 'Send KLY tokens' button */ +"AccountTab.Row.SendKly" = "发送KLY"; /* Account tab: 'Send BTC tokens' button */ "AccountTab.Row.SendBtc" = "发送BTC"; @@ -238,8 +238,8 @@ /* Account tab: Ethereum wallet */ "AccountTab.Wallets.ethereum_wallet" = "以太坊钱包"; -/* Account tab: Lisk wallet */ -"AccountTab.Wallets.lisk_wallet" = "Lisk钱包"; +/* Account tab: Klayr wallet */ +"AccountTab.Wallets.kly_wallet" = "Klayr钱包"; /* Account tab: Bitcoin wallet */ "AccountTab.Wallets.bitcoin_wallet" = "比特币钱包"; @@ -1209,3 +1209,6 @@ /* Include partner url */ "PartnerQR.includePartnerURL" = "包括Web应用程序链接"; + +/* Transaction: Unknown token */ +"Transaction.UnknownTokenTitle" = "未知"; diff --git a/CommonKit/Sources/CommonKit/Assets/Shared.xcassets/Wallets/klayr_notification.imageset/Contents.json b/CommonKit/Sources/CommonKit/Assets/Shared.xcassets/Wallets/klayr_notification.imageset/Contents.json new file mode 100644 index 000000000..ad8ca4a0a --- /dev/null +++ b/CommonKit/Sources/CommonKit/Assets/Shared.xcassets/Wallets/klayr_notification.imageset/Contents.json @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "idiom" : "universal", + "scale" : "1x", + "filename" : "klayr_notification.png" + }, + { + "idiom" : "universal", + "scale" : "2x", + "filename" : "klayr_notification@2x.png" + }, + { + "idiom" : "universal", + "scale" : "3x", + "filename" : "klayr_notification@3x.png" + } + ], + "info" : { + "version" : 1, + "author" : "xcode" + } +} diff --git a/CommonKit/Sources/CommonKit/Assets/Shared.xcassets/Wallets/klayr_notification.imageset/klayr_notification.png b/CommonKit/Sources/CommonKit/Assets/Shared.xcassets/Wallets/klayr_notification.imageset/klayr_notification.png new file mode 100644 index 0000000000000000000000000000000000000000..46d2959c3d6dd15642655e466833157b807511d5 GIT binary patch literal 378 zcmeAS@N?(olHy`uVBq!ia0vp^<{-?$1|(P9zT^g^I14-?iy0WWg+Z8+Vb&Z8pde#$ zkh>GZx^prwfgF}}M_)$E)e-c@Na{Qhyjv*C{Z*SRiH6_R#`#ArvV%LIg3tn(- zy~b+g6wRK&v&*6Sg5s@3%q`Vdq^{h$^h97uM1a7uwfp!^t^RQ0vt)eXkFH<)PG!%r z{iw2>Yf^HL^HGZsFtM{w+p}%j=4CTxN3AK2y1RZ&|1_0@w}nI>2Yk$3nUuHc)W-*J zugTXe6!GzwNP`Ag^Urae>Kjlc_=c~>oR@z+4;Fwte!p-(OmRgF}sV?mT1{H&+tDnm{ Hr-UW|34Em{ literal 0 HcmV?d00001 diff --git a/CommonKit/Sources/CommonKit/Assets/Shared.xcassets/Wallets/klayr_notification.imageset/klayr_notification@2x.png b/CommonKit/Sources/CommonKit/Assets/Shared.xcassets/Wallets/klayr_notification.imageset/klayr_notification@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..410144c82e581f668506fe2950fae075aa7f3d31 GIT binary patch literal 567 zcmeAS@N?(olHy`uVBq!ia0vp^c_7Te1|*L~tNjL2oCO|{#S9GG!XV7ZFl&wkP>``W z$lZxy-8q?;Kn_c~qpu?a!^VE@KZ&eBxig+Fjv*C{Z|@rFu>{H-|9D?XP|-tVbs=k1 zHKU%wF5A|(vJMMN*$SD&1Jx$hhpHqK^}T(vQF1xp(H@z29H?SJZBu5i~n`zUJ0VzrITE z`LpZg-Zc9;-m19V)oO9l#&&8=<-RFWaq}eJ8!6rSk)B+2C#iVX=@_kr#CrwJ!>i_} z>msFZ%|@6F}?cK?$89LBx275=$``W z$lZxy-8q?;Kn_c~qpu?a!^VE@KZ&di3{1J6E{-7;jBoGSW=#ncX?QqUgCnph!7%jN zL%x{C8)udN+-`lK^k!2_jzhGfx5whCKR0*z&9JRGYF%@ldHde0r*~d`DiixI&0L_! zMnKuC$i=fyi4-nqY~I8DZ9%I)j3BQGsqU;pgv z?){sm{H^u=_37W!m^t&$NLB75)j#Q5t4qGsCwyy{n@ni{5D|Xtn>VEte>2D~DzCNq zZvJ|XB)jm_?ehE6eZN`P>7DaW>$SO0YD5&5?3{hqp~I7^aS8OwXO5ZHI+e_&r5V74 O$l&Sf=d#Wzp$PyPswKJr literal 0 HcmV?d00001 diff --git a/CommonKit/Sources/CommonKit/Assets/Shared.xcassets/Wallets/klayr_wallet.imageset/Contents.json b/CommonKit/Sources/CommonKit/Assets/Shared.xcassets/Wallets/klayr_wallet.imageset/Contents.json new file mode 100644 index 000000000..d29b8f225 --- /dev/null +++ b/CommonKit/Sources/CommonKit/Assets/Shared.xcassets/Wallets/klayr_wallet.imageset/Contents.json @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "idiom" : "universal", + "scale" : "1x", + "filename" : "klayr_wallet.png" + }, + { + "idiom" : "universal", + "scale" : "2x", + "filename" : "klayr_wallet@2x.png" + }, + { + "idiom" : "universal", + "scale" : "3x", + "filename" : "klayr_wallet@3x.png" + } + ], + "info" : { + "version" : 1, + "author" : "xcode" + } +} diff --git a/CommonKit/Sources/CommonKit/Assets/Shared.xcassets/Wallets/klayr_wallet.imageset/klayr_wallet.png b/CommonKit/Sources/CommonKit/Assets/Shared.xcassets/Wallets/klayr_wallet.imageset/klayr_wallet.png new file mode 100644 index 0000000000000000000000000000000000000000..46d2959c3d6dd15642655e466833157b807511d5 GIT binary patch literal 378 zcmeAS@N?(olHy`uVBq!ia0vp^<{-?$1|(P9zT^g^I14-?iy0WWg+Z8+Vb&Z8pde#$ zkh>GZx^prwfgF}}M_)$E)e-c@Na{Qhyjv*C{Z*SRiH6_R#`#ArvV%LIg3tn(- zy~b+g6wRK&v&*6Sg5s@3%q`Vdq^{h$^h97uM1a7uwfp!^t^RQ0vt)eXkFH<)PG!%r z{iw2>Yf^HL^HGZsFtM{w+p}%j=4CTxN3AK2y1RZ&|1_0@w}nI>2Yk$3nUuHc)W-*J zugTXe6!GzwNP`Ag^Urae>Kjlc_=c~>oR@z+4;Fwte!p-(OmRgF}sV?mT1{H&+tDnm{ Hr-UW|34Em{ literal 0 HcmV?d00001 diff --git a/CommonKit/Sources/CommonKit/Assets/Shared.xcassets/Wallets/klayr_wallet.imageset/klayr_wallet@2x.png b/CommonKit/Sources/CommonKit/Assets/Shared.xcassets/Wallets/klayr_wallet.imageset/klayr_wallet@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..410144c82e581f668506fe2950fae075aa7f3d31 GIT binary patch literal 567 zcmeAS@N?(olHy`uVBq!ia0vp^c_7Te1|*L~tNjL2oCO|{#S9GG!XV7ZFl&wkP>``W z$lZxy-8q?;Kn_c~qpu?a!^VE@KZ&eBxig+Fjv*C{Z|@rFu>{H-|9D?XP|-tVbs=k1 zHKU%wF5A|(vJMMN*$SD&1Jx$hhpHqK^}T(vQF1xp(H@z29H?SJZBu5i~n`zUJ0VzrITE z`LpZg-Zc9;-m19V)oO9l#&&8=<-RFWaq}eJ8!6rSk)B+2C#iVX=@_kr#CrwJ!>i_} z>msFZ%|@6F}?cK?$89LBx275=$``W z$lZxy-8q?;Kn_c~qpu?a!^VE@KZ&di3{1J6E{-7;jBoGSW=#ncX?QqUgCnph!7%jN zL%x{C8)udN+-`lK^k!2_jzhGfx5whCKR0*z&9JRGYF%@ldHde0r*~d`DiixI&0L_! zMnKuC$i=fyi4-nqY~I8DZ9%I)j3BQGsqU;pgv z?){sm{H^u=_37W!m^t&$NLB75)j#Q5t4qGsCwyy{n@ni{5D|Xtn>VEte>2D~DzCNq zZvJ|XB)jm_?ehE6eZN`P>7DaW>$SO0YD5&5?3{hqp~I7^aS8OwXO5ZHI+e_&r5V74 O$l&Sf=d#Wzp$PyPswKJr literal 0 HcmV?d00001 diff --git a/CommonKit/Sources/CommonKit/Assets/Shared.xcassets/Wallets/klayr_wallet_row.imageset/Contents.json b/CommonKit/Sources/CommonKit/Assets/Shared.xcassets/Wallets/klayr_wallet_row.imageset/Contents.json new file mode 100644 index 000000000..7fcd1e574 --- /dev/null +++ b/CommonKit/Sources/CommonKit/Assets/Shared.xcassets/Wallets/klayr_wallet_row.imageset/Contents.json @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "idiom" : "universal", + "scale" : "1x", + "filename" : "klayr_wallet_row.png" + }, + { + "idiom" : "universal", + "scale" : "2x", + "filename" : "klayr_wallet_row@2x.png" + }, + { + "idiom" : "universal", + "scale" : "3x", + "filename" : "klayr_wallet_row@3x.png" + } + ], + "info" : { + "version" : 1, + "author" : "xcode" + } +} diff --git a/CommonKit/Sources/CommonKit/Assets/Shared.xcassets/Wallets/klayr_wallet_row.imageset/klayr_wallet_row.png b/CommonKit/Sources/CommonKit/Assets/Shared.xcassets/Wallets/klayr_wallet_row.imageset/klayr_wallet_row.png new file mode 100644 index 0000000000000000000000000000000000000000..46d2959c3d6dd15642655e466833157b807511d5 GIT binary patch literal 378 zcmeAS@N?(olHy`uVBq!ia0vp^<{-?$1|(P9zT^g^I14-?iy0WWg+Z8+Vb&Z8pde#$ zkh>GZx^prwfgF}}M_)$E)e-c@Na{Qhyjv*C{Z*SRiH6_R#`#ArvV%LIg3tn(- zy~b+g6wRK&v&*6Sg5s@3%q`Vdq^{h$^h97uM1a7uwfp!^t^RQ0vt)eXkFH<)PG!%r z{iw2>Yf^HL^HGZsFtM{w+p}%j=4CTxN3AK2y1RZ&|1_0@w}nI>2Yk$3nUuHc)W-*J zugTXe6!GzwNP`Ag^Urae>Kjlc_=c~>oR@z+4;Fwte!p-(OmRgF}sV?mT1{H&+tDnm{ Hr-UW|34Em{ literal 0 HcmV?d00001 diff --git a/CommonKit/Sources/CommonKit/Assets/Shared.xcassets/Wallets/klayr_wallet_row.imageset/klayr_wallet_row@2x.png b/CommonKit/Sources/CommonKit/Assets/Shared.xcassets/Wallets/klayr_wallet_row.imageset/klayr_wallet_row@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..410144c82e581f668506fe2950fae075aa7f3d31 GIT binary patch literal 567 zcmeAS@N?(olHy`uVBq!ia0vp^c_7Te1|*L~tNjL2oCO|{#S9GG!XV7ZFl&wkP>``W z$lZxy-8q?;Kn_c~qpu?a!^VE@KZ&eBxig+Fjv*C{Z|@rFu>{H-|9D?XP|-tVbs=k1 zHKU%wF5A|(vJMMN*$SD&1Jx$hhpHqK^}T(vQF1xp(H@z29H?SJZBu5i~n`zUJ0VzrITE z`LpZg-Zc9;-m19V)oO9l#&&8=<-RFWaq}eJ8!6rSk)B+2C#iVX=@_kr#CrwJ!>i_} z>msFZ%|@6F}?cK?$89LBx275=$``W z$lZxy-8q?;Kn_c~qpu?a!^VE@KZ&di3{1J6E{-7;jBoGSW=#ncX?QqUgCnph!7%jN zL%x{C8)udN+-`lK^k!2_jzhGfx5whCKR0*z&9JRGYF%@ldHde0r*~d`DiixI&0L_! zMnKuC$i=fyi4-nqY~I8DZ9%I)j3BQGsqU;pgv z?){sm{H^u=_37W!m^t&$NLB75)j#Q5t4qGsCwyy{n@ni{5D|Xtn>VEte>2D~DzCNq zZvJ|XB)jm_?ehE6eZN`P>7DaW>$SO0YD5&5?3{hqp~I7^aS8OwXO5ZHI+e_&r5V74 O$l&Sf=d#Wzp$PyPswKJr literal 0 HcmV?d00001 diff --git a/CommonKit/Sources/CommonKit/Assets/Shared.xcassets/Wallets/mana_notification.imageset/mana_notification.png b/CommonKit/Sources/CommonKit/Assets/Shared.xcassets/Wallets/mana_notification.imageset/mana_notification.png index 70727957c6d694164c692407d23df8b686ecc6a8..451cc20dac823c8db3a6858d8e7c6950a48c04e8 100644 GIT binary patch delta 2752 zcmV;x3P1Jo7|0cnB!3BTNLh0L01FcU01FcV0GgZ_00001b5ch_0Itp)=>Px#1ZP1_ zK>z@;j|==^1pojFT}ebiRCoc+S!;0A))oG)q<#2>G1w%KajGk zrVVKVG-Do(%d06(pe3XkW_Jq}!w2)vi`6X|-$9^39xGN%!d9^XZ&>&b<;t4}&jx@g8*Cn1kE$c&KUt zR5psF2pstc$^sy8FrfnquczZC$Vvk|-lNFRJ%d$ynUDxrvBOvo@Yvcn9ed)Y>J_d&tUO$^P-?DWr+C z$Z^gYs^)K?`LYHfRkAiP1wr>A8gBzlRY}^6DPw=aet-4D+i(fjSBtReDfh{JgMHv5Cw8`e!%{@ zXN#TvwqeO%Bi9FSZA=P}aEP#Ys0_F1;z4E#w;m5sP(=Nje|6#0NQWF>KW`9%ox8!f zg8@-vvu&K8&nygL$p+f>&s-4H+}P2%lh34NXMX`HiP+z&{Wy5wJ?bDoMxC3Kw9b{N zvDc~bJ_~}EdBgxMd_-Mezd0IedjENJZ33MP*XC_>yf%`LN$G?dIaXPCd4Bl5ubqhNorhnB+M96p9g}bZANCs1m_*+ zlcz{pToiFF!#O4z(dnh zW~iiWhUAPWz&;D=1Rr6Mf43+k{lUyR$*9US{*}4qN#wxPm9A5;V}^4eXw>cRSYoX) zMo67SMQL3EIlg1X2!y(3rd4AYQkMza2SAdW0l9uwrNm^TBA4^Y^9IJqQ9Y})4}Uuc zf<`GULPPOF+zw`^4pB{Hjw)Xr%i_T)+Ypn0u!AHIS`yYi;D15vGE0_(2_?E%cb+hXuNuleHIOo93X;SNR3t^ zbx5(c$IeDIKnpsLP?DOE#m)Wh1HQf>!3NE95(~xT%x6QwVQL$q+G^&Ha(|@g+ul_6V8G3JcP?hWHB?9Bx(tMs@2rO8u)szG~L|R*U!Y+w|Z2I)raEzQ( z2cJI>U0a&Qx=HdjDVEapQX#U0)ASliPSe4E42x{;V4n_MM-)a&lu`yqlw1RFu`ba0IVE{58qP2w~63NfPSt;_~VKraoEf`NPcDn7xj<53t@8mb3$47Ej2^gOh2~ z`{jwSgTNwl&I;{Udf{4j5&8{kO56{c$I{2sZE~|8G={ByjVppgv46?wfF-)vV$d;< z1Czc9Cup9N5VCD=Iad&#d-(&}4RgpemOuxxnrO7se$e+OZ62Y|%=V5&LDa7G~IPm-RJ zE?z%SK|6??K5zq(rS_aAjCR&7Ckwz;Lv)ON7-EQq?(BWMwxW$i)HViC`7pBm@GSox)y*QqRZef^ zgR!&DwrpH#D1SzA$t9yo9N~4c@g$l>dlw!S*o-ZW5X1|yr%`Y}d94zeKraPu#lQ4% zh+~H)^r4yOK`=pDE*GHrN+E0uy*We$)Ur1>ei5lIO#XdXA(uM%+Dp-GLk8rughIdt!E5zJkb{!F*Yqr^u$^IA+7GMPdx3wl^#~e2oQCe8pdM_x;H=}P z`L+55+h!(GDX?4RPzJsJd0!L_Z-OAH@$1HwOqTDjZ1=Xa+U5A3<=RKD<9f|BbO%~q zc*5ajq<^2HVk||6zn8s^5b>NXs7AJ*&qMEFZF<~ApeLCu-&R9c5wKZ%57XZf+$k`6 zjw4q^2s){0MVyj|lkgkF@uEL@&Sm-cv+cXy)%!B-HhrrhhmO(<+7z*s0fx?_jp#sE zs$N4Wu!DM)LH3J~?o}ce1lj=jeQS(52_#tATYtyt_ZR4ClvL2-`%%~GR@u@@IF&x$ z9%bPXH?cQ%es1h1*+Vl1X`g`_!rz@WQ8N+5rCJj>s*Bf^^=#$j-kdIIFSMEG#ZnK{r#5C9@4r%fBeOwe@#$61?#I@23zu9NojucR;m;ZG(_PDdFyrd@jHi+A$p{e@rvi^ zO%7X(f8Ux)`FS)lfj~8fT$q21dcI!f(sJGCE}8tM4OYgwx@sOoHYAM zPEXo2ZQ661G&T97sco88qlwLCv@s^yEF@r5K&gU&fb0z0Fn{~Zo7eBYd4tGoZ-z0w zobS9d!+me=?|$F?eZTMCM?r*JUQ)uGWph$jEXzzQTa=PioT1g^#6_u+c%F~(^r0!r zG-0*r`z9tkuMX)iUFaG3_M6V0`YVIO*Ekm+v9VB*ct}BVLgvN=xtrGJWpB#YB`nn{ zmB};Dy8MPAm5 zhgK~4>6-cTwrQ0Ljh*9wSU9s!z{(j06f6TKyTe-B*>m#E`o;qvTyFWy*W}zbaHSck z1y5G2e0F_)_HLYg8V3X64!|E!m5ddx2=c^>r@wywY=2v4-E9S@lF68-*WLN^AC;Fp z6D55jbx_~%$oro>{6%~Bc`5fXQaT}7tog?S+m7cZ#upo`Ht=#5hsL5Q z#m`PMqJPMNBR^+#Iw4sdowB{SV9&78+|k%K*gR`+JC_u0Ke%V}F(u2!TO3aB4lc9| zbk#yclZn?<$_;EH@*Z>`^CG({wl2=!VRkr1zwPR+4;vf-_Igd#5sZ0-opX72ARZ%N z7NN<+@5nV7Kily-7FiDpbBST&M35Wub2eJ+&VMlkSQj$54Fx%O{dLcle-U5~U%)&o zHXlc?5`lVRh%_bsv!4$y27|BxSr#1cg31NC8wVzh*Dm%BT#^iKfi7|G;Rm;Wf;lJ7 z?hhC*-c3T0oi?cHjez4MgeMO-`!S-oUDLj!`~XB!TbG|*^<8)Wr=6qYyORrP!QYV4fvQ(ClN1$Y(2ABocs;pHQIXV#lR8oE4&#qGgNW?q?VzJQbYmvuX=1($-;*TD@vm=-o3`;(`KH``c?ei7-Y?nLF@3QBHDdbh^$Kh zkx);>?~*9@1e$z5ivUcCQ75EoV&YNF9Dnxe z0k181ubvM~R|HrJ0Y1Q;)RCXc!aBG4p|QRa)$!TVZ&ys-YBUc2hIN`Dzk zdx5(vXKpDnWDU`Yp-Tu6q$eyH3G0lc5LFOh)BDGW9`w`S>Tp2moYbB@Nj0N5@kE|7}MCeCUoPkFqp<6CBE_w2Jvz+st-*_!8IUrZh?l z?K9vv#QbM(QQifJ3gW$zjFdZ9W`E6DHU;jU!rZM|l~T=x>ounxH-pipf`98nDS<jYc9Sb;7mOG+&@+;R z-gEgUlzuVEODVcovC0_YgZ3vY3o97y6 zS3e;Zv}%PyOQSAROJ_z0#BSaN@_F;6GdPB%(TWT@9DqTm%Qni#=WtRY&nxNBn6dH} zW|XY0(PJZ%$e^PE7=QFOG&&?^T(>#wA0njEH--#qKn7)8{&^fjpN`PJ3sER$$;>!Q z?IbYhFfypg4})?JkgZsU9FvK&?wr-HQ50pP$!QDiFV6|gs13@D(tl87(4kbY*cG<` z%*B z>sgVv2x2O?1BKor;YlPMAtELWfDGc%8_oT6^T2Q;Id1aBjM@;HF?0q^1s9fCGF>Xf z?bwU|V1Va1!NX1$BTRtZDf2JF{fQdH(>^lZN}s>cUpI5V#KVlLFqknE2Gx&6L!V_X z#P8Y%v^r*nhksodT5>@I@EFQe2mr~MUsK=UcXWMMZ>_;^D08-S7f zR=O@HGJm5w85TaY9%wc+H9W>%Rl~#xvJCznlU`+UxJW^M_T7 zt<{red)VN}erV1r*7rV+%Lx>tgv7FaK&hg_%#k94q6o-K=@9_)(*P=EEWCBT>1B(< zy&*J}y-(J5oULshKBbO{0g6?IWjuzZlZ53=vwwkbjVXKpfo0Azg}4OyHj_b#*II@~ zuDo@w>9Ch@CI#yY2fujA<>EP-iY!y|oEUl>Lk9(hY7^qrD){A*(~rGy^z85bZIAkFjh+3?W}AIvLupU(NI_^O0;DjGq?! z`g{BC`);H>(?%=dPaoI5^u(Jdo(LGW!5)SH>xRaSZEK5jD;089<|GTBgxmLSDDE(q zDP%1Fn|IGX{@kHcw|Gp3no^_DfKsWPGRX<8qA0iQ<@>7sk`=ElG}zp)NKxN|r#!Ed zsTFb*t@g zcAVK=vT*y}<;6cMNl#hBB7KvCKXN`64(|}(lV=bwk=w5f>dzlKfBCh)pKClcX0cks z6iBnxc{Hrf$-HCBqWqn!vNJbi#Ayl?49mD*Ky$wm?C%|CVlo6o_B`y^cfeq5ukGwP zjgxoubj$U#81|AAY)wrK9A-UwboQRRMPUh*d}kdojZ*Pcahk4pd1hMqlJu12xruQF zN$RL{awvfcMKx{1)M~Oj3?n9Uf5*sJOH<#_`TFkOZ!Y!@To^G~Op#i({}W&Uf2nGy TlH6Dw00000NkvXXu0mjfe0&o- diff --git a/CommonKit/Sources/CommonKit/Assets/Shared.xcassets/Wallets/mana_notification.imageset/mana_notification@2x.png b/CommonKit/Sources/CommonKit/Assets/Shared.xcassets/Wallets/mana_notification.imageset/mana_notification@2x.png index a9c39f9bfee7b73c5582538ee334371568854d20..2663aafb1d1c906ceceb512580223a883c6d6ae6 100644 GIT binary patch literal 5980 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 diff --git a/CommonKit/Sources/CommonKit/Assets/Shared.xcassets/Wallets/mana_wallet.imageset/mana_wallet.png b/CommonKit/Sources/CommonKit/Assets/Shared.xcassets/Wallets/mana_wallet.imageset/mana_wallet.png index 70727957c6d694164c692407d23df8b686ecc6a8..451cc20dac823c8db3a6858d8e7c6950a48c04e8 100644 GIT binary patch delta 2752 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 TlH6Dw00000NkvXXu0mjfe0&o- diff --git a/CommonKit/Sources/CommonKit/Assets/Shared.xcassets/Wallets/mana_wallet.imageset/mana_wallet@2x.png b/CommonKit/Sources/CommonKit/Assets/Shared.xcassets/Wallets/mana_wallet.imageset/mana_wallet@2x.png index a9c39f9bfee7b73c5582538ee334371568854d20..2663aafb1d1c906ceceb512580223a883c6d6ae6 100644 GIT binary patch literal 5980 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 diff --git a/CommonKit/Sources/CommonKit/Assets/Shared.xcassets/Wallets/mana_wallet_row.imageset/mana_wallet_row.png b/CommonKit/Sources/CommonKit/Assets/Shared.xcassets/Wallets/mana_wallet_row.imageset/mana_wallet_row.png index 70727957c6d694164c692407d23df8b686ecc6a8..451cc20dac823c8db3a6858d8e7c6950a48c04e8 100644 GIT binary patch delta 2752 zcmV;x3P1Jo7|0cnB!3BTNLh0L01FcU01FcV0GgZ_00001b5ch_0Itp)=>Px#1ZP1_ zK>z@;j|==^1pojFT}ebiRCoc+S!;0A))oG)q<#2>G1w%KajGk zrVVKVG-Do(%d06(pe3XkW_Jq}!w2)vi`6X|-$9^39xGN%!d9^XZ&>&b<;t4}&jx@g8*Cn1kE$c&KUt zR5psF2pstc$^sy8FrfnquczZC$Vvk|-lNFRJ%d$ynUDxrvBOvo@Yvcn9ed)Y>J_d&tUO$^P-?DWr+C z$Z^gYs^)K?`LYHfRkAiP1wr>A8gBzlRY}^6DPw=aet-4D+i(fjSBtReDfh{JgMHv5Cw8`e!%{@ zXN#TvwqeO%Bi9FSZA=P}aEP#Ys0_F1;z4E#w;m5sP(=Nje|6#0NQWF>KW`9%ox8!f zg8@-vvu&K8&nygL$p+f>&s-4H+}P2%lh34NXMX`HiP+z&{Wy5wJ?bDoMxC3Kw9b{N zvDc~bJ_~}EdBgxMd_-Mezd0IedjENJZ33MP*XC_>yf%`LN$G?dIaXPCd4Bl5ubqhNorhnB+M96p9g}bZANCs1m_*+ zlcz{pToiFF!#O4z(dnh zW~iiWhUAPWz&;D=1Rr6Mf43+k{lUyR$*9US{*}4qN#wxPm9A5;V}^4eXw>cRSYoX) zMo67SMQL3EIlg1X2!y(3rd4AYQkMza2SAdW0l9uwrNm^TBA4^Y^9IJqQ9Y})4}Uuc zf<`GULPPOF+zw`^4pB{Hjw)Xr%i_T)+Ypn0u!AHIS`yYi;D15vGE0_(2_?E%cb+hXuNuleHIOo93X;SNR3t^ zbx5(c$IeDIKnpsLP?DOE#m)Wh1HQf>!3NE95(~xT%x6QwVQL$q+G^&Ha(|@g+ul_6V8G3JcP?hWHB?9Bx(tMs@2rO8u)szG~L|R*U!Y+w|Z2I)raEzQ( z2cJI>U0a&Qx=HdjDVEapQX#U0)ASliPSe4E42x{;V4n_MM-)a&lu`yqlw1RFu`ba0IVE{58qP2w~63NfPSt;_~VKraoEf`NPcDn7xj<53t@8mb3$47Ej2^gOh2~ z`{jwSgTNwl&I;{Udf{4j5&8{kO56{c$I{2sZE~|8G={ByjVppgv46?wfF-)vV$d;< z1Czc9Cup9N5VCD=Iad&#d-(&}4RgpemOuxxnrO7se$e+OZ62Y|%=V5&LDa7G~IPm-RJ zE?z%SK|6??K5zq(rS_aAjCR&7Ckwz;Lv)ON7-EQq?(BWMwxW$i)HViC`7pBm@GSox)y*QqRZef^ zgR!&DwrpH#D1SzA$t9yo9N~4c@g$l>dlw!S*o-ZW5X1|yr%`Y}d94zeKraPu#lQ4% zh+~H)^r4yOK`=pDE*GHrN+E0uy*We$)Ur1>ei5lIO#XdXA(uM%+Dp-GLk8rughIdt!E5zJkb{!F*Yqr^u$^IA+7GMPdx3wl^#~e2oQCe8pdM_x;H=}P z`L+55+h!(GDX?4RPzJsJd0!L_Z-OAH@$1HwOqTDjZ1=Xa+U5A3<=RKD<9f|BbO%~q zc*5ajq<^2HVk||6zn8s^5b>NXs7AJ*&qMEFZF<~ApeLCu-&R9c5wKZ%57XZf+$k`6 zjw4q^2s){0MVyj|lkgkF@uEL@&Sm-cv+cXy)%!B-HhrrhhmO(<+7z*s0fx?_jp#sE zs$N4Wu!DM)LH3J~?o}ce1lj=jeQS(52_#tATYtyt_ZR4ClvL2-`%%~GR@u@@IF&x$ z9%bPXH?cQ%es1h1*+Vl1X`g`_!rz@WQ8N+5rCJj>s*Bf^^=#$j-kdIIFSMEG#ZnK{r#5C9@4r%fBeOwe@#$61?#I@23zu9NojucR;m;ZG(_PDdFyrd@jHi+A$p{e@rvi^ zO%7X(f8Ux)`FS)lfj~8fT$q21dcI!f(sJGCE}8tM4OYgwx@sOoHYAM zPEXo2ZQ661G&T97sco88qlwLCv@s^yEF@r5K&gU&fb0z0Fn{~Zo7eBYd4tGoZ-z0w zobS9d!+me=?|$F?eZTMCM?r*JUQ)uGWph$jEXzzQTa=PioT1g^#6_u+c%F~(^r0!r zG-0*r`z9tkuMX)iUFaG3_M6V0`YVIO*Ekm+v9VB*ct}BVLgvN=xtrGJWpB#YB`nn{ zmB};Dy8MPAm5 zhgK~4>6-cTwrQ0Ljh*9wSU9s!z{(j06f6TKyTe-B*>m#E`o;qvTyFWy*W}zbaHSck z1y5G2e0F_)_HLYg8V3X64!|E!m5ddx2=c^>r@wywY=2v4-E9S@lF68-*WLN^AC;Fp z6D55jbx_~%$oro>{6%~Bc`5fXQaT}7tog?S+m7cZ#upo`Ht=#5hsL5Q z#m`PMqJPMNBR^+#Iw4sdowB{SV9&78+|k%K*gR`+JC_u0Ke%V}F(u2!TO3aB4lc9| zbk#yclZn?<$_;EH@*Z>`^CG({wl2=!VRkr1zwPR+4;vf-_Igd#5sZ0-opX72ARZ%N z7NN<+@5nV7Kily-7FiDpbBST&M35Wub2eJ+&VMlkSQj$54Fx%O{dLcle-U5~U%)&o zHXlc?5`lVRh%_bsv!4$y27|BxSr#1cg31NC8wVzh*Dm%BT#^iKfi7|G;Rm;Wf;lJ7 z?hhC*-c3T0oi?cHjez4MgeMO-`!S-oUDLj!`~XB!TbG|*^<8)Wr=6qYyORrP!QYV4fvQ(ClN1$Y(2ABocs;pHQIXV#lR8oE4&#qGgNW?q?VzJQbYmvuX=1($-;*TD@vm=-o3`;(`KH``c?ei7-Y?nLF@3QBHDdbh^$Kh zkx);>?~*9@1e$z5ivUcCQ75EoV&YNF9Dnxe z0k181ubvM~R|HrJ0Y1Q;)RCXc!aBG4p|QRa)$!TVZ&ys-YBUc2hIN`Dzk zdx5(vXKpDnWDU`Yp-Tu6q$eyH3G0lc5LFOh)BDGW9`w`S>Tp2moYbB@Nj0N5@kE|7}MCeCUoPkFqp<6CBE_w2Jvz+st-*_!8IUrZh?l z?K9vv#QbM(QQifJ3gW$zjFdZ9W`E6DHU;jU!rZM|l~T=x>ounxH-pipf`98nDS<jYc9Sb;7mOG+&@+;R z-gEgUlzuVEODVcovC0_YgZ3vY3o97y6 zS3e;Zv}%PyOQSAROJ_z0#BSaN@_F;6GdPB%(TWT@9DqTm%Qni#=WtRY&nxNBn6dH} zW|XY0(PJZ%$e^PE7=QFOG&&?^T(>#wA0njEH--#qKn7)8{&^fjpN`PJ3sER$$;>!Q z?IbYhFfypg4})?JkgZsU9FvK&?wr-HQ50pP$!QDiFV6|gs13@D(tl87(4kbY*cG<` z%*B z>sgVv2x2O?1BKor;YlPMAtELWfDGc%8_oT6^T2Q;Id1aBjM@;HF?0q^1s9fCGF>Xf z?bwU|V1Va1!NX1$BTRtZDf2JF{fQdH(>^lZN}s>cUpI5V#KVlLFqknE2Gx&6L!V_X z#P8Y%v^r*nhksodT5>@I@EFQe2mr~MUsK=UcXWMMZ>_;^D08-S7f zR=O@HGJm5w85TaY9%wc+H9W>%Rl~#xvJCznlU`+UxJW^M_T7 zt<{red)VN}erV1r*7rV+%Lx>tgv7FaK&hg_%#k94q6o-K=@9_)(*P=EEWCBT>1B(< zy&*J}y-(J5oULshKBbO{0g6?IWjuzZlZ53=vwwkbjVXKpfo0Azg}4OyHj_b#*II@~ zuDo@w>9Ch@CI#yY2fujA<>EP-iY!y|oEUl>Lk9(hY7^qrD){A*(~rGy^z85bZIAkFjh+3?W}AIvLupU(NI_^O0;DjGq?! z`g{BC`);H>(?%=dPaoI5^u(Jdo(LGW!5)SH>xRaSZEK5jD;089<|GTBgxmLSDDE(q zDP%1Fn|IGX{@kHcw|Gp3no^_DfKsWPGRX<8qA0iQ<@>7sk`=ElG}zp)NKxN|r#!Ed zsTFb*t@g zcAVK=vT*y}<;6cMNl#hBB7KvCKXN`64(|}(lV=bwk=w5f>dzlKfBCh)pKClcX0cks z6iBnxc{Hrf$-HCBqWqn!vNJbi#Ayl?49mD*Ky$wm?C%|CVlo6o_B`y^cfeq5ukGwP zjgxoubj$U#81|AAY)wrK9A-UwboQRRMPUh*d}kdojZ*Pcahk4pd1hMqlJu12xruQF zN$RL{awvfcMKx{1)M~Oj3?n9Uf5*sJOH<#_`TFkOZ!Y!@To^G~Op#i({}W&Uf2nGy TlH6Dw00000NkvXXu0mjfe0&o- diff --git a/CommonKit/Sources/CommonKit/Assets/Shared.xcassets/Wallets/mana_wallet_row.imageset/mana_wallet_row@2x.png b/CommonKit/Sources/CommonKit/Assets/Shared.xcassets/Wallets/mana_wallet_row.imageset/mana_wallet_row@2x.png index a9c39f9bfee7b73c5582538ee334371568854d20..2663aafb1d1c906ceceb512580223a883c6d6ae6 100644 GIT binary patch literal 5980 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 diff --git a/CommonKit/Sources/CommonKit/Assets/Shared.xcassets/Wallets/no-token.imageset/Contents.json b/CommonKit/Sources/CommonKit/Assets/Shared.xcassets/Wallets/no-token.imageset/Contents.json new file mode 100644 index 000000000..88cbb81ed --- /dev/null +++ b/CommonKit/Sources/CommonKit/Assets/Shared.xcassets/Wallets/no-token.imageset/Contents.json @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "filename" : "no-token.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "no-token@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "no-token@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/CommonKit/Sources/CommonKit/Assets/Shared.xcassets/Wallets/no-token.imageset/no-token.png b/CommonKit/Sources/CommonKit/Assets/Shared.xcassets/Wallets/no-token.imageset/no-token.png new file mode 100644 index 0000000000000000000000000000000000000000..ee0a0b29af3a4d14b380046301c0579495bc7a66 GIT binary patch literal 2302 zcmVF)-kSa zTw$V)H_k9Fkavs@ZY1yUPR2&Y zrpAAa!;CK(2OED>i72&m<;H7`t&CHQgN*MPzcBuh{xModJ}8G94>N9SeBF4zafpgU zv7KYY?=!YHjx;`Fe9QQ|O2_)fcE+=fdq>Z{Mn%lzS}F`Ir@Q5GQrCE#v9s|7Wz#Xh zjI%V4jGn)Zaf0!#==W2jkeS=TI3W7>0b}n1zDrCIlf>d;`CxpS^1HP0T;ut20qSU+ zl;(?RXYL5OqS3gv%HOf(#!KYN7)L|ndQn4jViLzD#vbxz7y_Yr*mzX*H|=PzjKJDo zYJA$bc^jS7BIad`!Mn%c5&vC)`J;hRWN0vwR@G%=ggBVh%}uQ?814=)Z@{jTgy< zCvm&TH*;miH{_}n&e+EC{cVC)ABc0*IKFp|Fm7$^ZhYQ2JN#18%n|skd-fX~$D-J0 zTzf_CDhU21TJ@-99A*5$c#>8&2h17@+*0m>Dv+d>z2tI#x>oEM3fEt*gvV<2bWG9j zppFO%E2(bqIf93uy)OJ>*ts(KTJ9qc);KW1s1=*`>RgflYj=vVfpO1-&)AwSm2dbJ z2$$uP#wNz2jeo0p;YGPg@0`03pSc#s)8w*W-8u&DF?N#2-ZI2zZlHYDS}A+5oKZEF z6b=KQI91u>RpYO6M^!O%TgpvppWtSs_7)Y7b&Xfb)t8ipJdG8Cn>kOV0c~g+Tw_aM z+rZ9MbdD5*ksKP_e1qH<7K1LvkL0R*yL`FaDz|D37@hmXc)W_kzQ!wpYcCt;%1wGj z=a{wO@+r-svAoj*R2cAy?1lHrGw}oESwwDsVlzhFFv4Tx4u~vaD-{Nw!9X>MU7Kfo zP42Fib&hx_*UA>=P`S*$t#n`?qC;3V_9hgU5uBUnepU+J75hY{fUiW%(smMu@{4@A z$3Z248cw4cQ6mUMM*O$fO?+0TlE%eBY`!D!R8RS4TPRq*7e~L_HfnfPzzVV=;%0+* z`^tDCGsm*|Nh@{?kbb1;7$E&%miJR}9RuvKmry#kg~2Kw#A+xi^rr!xLo^lyA0n~s zR2on|2I*P3>@!2i{)p(=l7Bvh}v{+al(gxC0r{7q)5G@znRf*lpUCe#lbZy*bC_ZBN~?C zkmc=EJwQB94z8iL)9Bnxc@h}Ml!(;|XtXE|qq{h-YDobqSje;8}#57hq^pl%#WWGn9dve>&p9!B49;hehb8HKP zln(geu-)XQnD~)2=mX;%`JNO9`55_8ZB-3M8h1}taH>2{>lEBW!b*nxesGmIq~WjM^w$DA1}r0C4uEb)=deXjGL3AtWIL% zVDMO`XYikR=SWS6l?&xgzPf=DKQT|?XxZ^sSaHU+V`_=Nr3nwf)-2GP1DcQ&n;Xi@ z9Ef1I+{N&$;6}My>7MX_a=GDcp)~_$WK8sL2--{be^dNocs_@E5pQg$RK4OU3F$vC z(_A2b+h@8~9}bb9i_@llTCv<;CNCXw(z?RtpL9OQY$B!9HdvzJGUP#2%sA#sTDn<- z_DnK9C!e9X*ikShi|3`Dj^P*c9UC)4C=W7=3dpL0I?gL&<^%FGJtX= z)PX8H6W?8Knb>T}rnBB2N&)SrMuQu{*^E!Rsj{~jh&Q$dLIldwrw7nXz%I0#&_alLL;QGC6fdOfY2$Y*bj7;gp5-A1+^( zD@7Z&kMHD%CGk={1*x%0evOgu^^AU(jT%FqYE=~TN+NR15~O1U^+2r}kgu`K*;mOV zh<%KGYGEt(eM^=f?whJKcIYX2X*`Rf5?M6Mm`XA+#=c65G`qm(l>DYFWPU1=9P*0o<9Yi3AH8N}j1t~}N zF~JNDUX~d`g%Khw)DUH0(6j1X9PCllF*vKElt4ABZbSwF%SOXl!X(HD3GM^GI!_tm YU!XYGeZKF*#{d8T07*qoM6N<$g8yPwWdHyG literal 0 HcmV?d00001 diff --git a/CommonKit/Sources/CommonKit/Assets/Shared.xcassets/Wallets/no-token.imageset/no-token@2x.png b/CommonKit/Sources/CommonKit/Assets/Shared.xcassets/Wallets/no-token.imageset/no-token@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..72863cedccfa777d06ec13984a49f0b755b75457 GIT binary patch literal 5699 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 literal 0 HcmV?d00001 diff --git a/CommonKit/Sources/CommonKit/Assets/Shared.xcassets/Wallets/no-token.imageset/no-token@3x.png b/CommonKit/Sources/CommonKit/Assets/Shared.xcassets/Wallets/no-token.imageset/no-token@3x.png new file mode 100644 index 0000000000000000000000000000000000000000..014f9a68c49c1aaba56787832b66a1c338094426 GIT binary patch literal 9283 zcmV-JB)r>+P)>e8Km??BsS)9U^xk`U z)X+;XfK=!A_L*eg{pQ|#X3m^@X6~K;_wDb!GpF2hX4b6wUuz!}6G|Lhts|;+&T8$d z)_JRSu4*Q+vZ?%3cNw*DlNFdh=a0Zsd{YVEDoJF4}8YVDgH-x1g;LiyX(`qOG% zqgsDZt#ijX@QX;M{v*|TZM9CQ)@NgzW4j9FX{z;m)w)r&t{llcpJvYY@(cNa--u*d zzgVpkBl(1U!0*o%fAPnWOzqES?{hx+r2Nb?R_m+>*LjWNwr=%`~S8x_1jG-2>~J86Uj9H+8pm8Oa$-4kuEY##K#kyd@q&*H^|u| z2_^wOU$rh#t&2nouI9NezTZ2m^_*(GEK+c_EwCMg(go%h-l|$Rt=6w^@_O2h@VzUN z&nCe5b_@r!>Lsgn`AFLSg0XqP<@^78wVofz2mM8i7-JVo7wvY{x>+PMxgG=wF4mi> z_10>Av|9fc!v|p`l)qoCVjca#{TP`W6)t99>cT_M)@6=_7~ z?e*1qT_m4y?BJJPwOW5(tz)WnrgdINQ@R1480oi+1r$wS%4myM zRO>ylJrmP{C{{u?;Rca>=_bg9Iu{R%(SNvV5Hz~uo${fN^0MyT7MJkJNp8bM@90Xc5)>|8cGh9 zTXW1huc0}et4GFwP5MxU()YS{q?32PhUb}N8u3ZhdS6T^@kiCVQ=|yK$+CR9TKBBh zt7Cv#bBIF8nRhocN2hOiUgZ4XNE&j-l-@dkl_8uDsn+=$p6BBHN45Ss5_x1W7?Mz) zwpv%K);~q6dX$jhCanJ%6RV~ToL9ln9V3-nODJOs9{HSu$ZwuDh5>i=!>jf9NVKpV zw4tQ%T_Tz4U&e$sV4hi*mq)5_DKzB4ko@koXU}noR(^hmpefa*pIxns7RQ}T)s_cT z>%B1?(Bgbu6gR;a7enqe=Tpj&{wNX+?eAk)Ia2hz`$sbE<@I;dD@MFOR)|$=%BxrF zg>j%+adDqqt-Dq0%P}lGFj5LeZje9HdbEa>&aQ{%PmqudF#7aNx}mxfhnN*7fsN7PrQD^wpivO|esoLdKPZw= z*1+d{Q6x7&xv*~`akJi{T7Me{-fWmuDrsBhMs1}~x)TZH?-s|M@H&FL!<)3nW7&!|8I}P zKq{l}3q=ZkE)iRRt?(%kR{14mUko9=W%QdaVTROxrD3qTn=AoWK>}V?=+!Yy&`fWO zl)vTgHI)jrQefFLw{MF6a8ji6f`xS6?6`nU)`8!@R8sV^&9_|Mn<4Bt7%*FG3y-P*^U~%MQuNQ0Ogc6Y*Sz0c0 zndaLGqz#WMj_WD8M=U4Z<1YVX_LvEDXA5$ebdlzm1QOJxRby~SHJ9o`@C3g z#fXf^2JDHoZiM7I4gQ(v8Osn#xh;3|MT+C1y5nNt1k(wPASd#ze^ngUk1n72{pb;W z2Rh1bOifNQC4|q76nsnqIbOUaQuR&Fw^n9cGybd?p|=*_K82EMe_XY$UmTZq5!6iV zp7BGJ&vm$9cI@a#^?eO$y(pbNg_7WDUC3Pm`A5m?ZPO^f!$Gn9ccdUTPZvr1i5dPU zdO%-3rG&0KuoF$NxFHV|S!9-x;%G2-yPN&i>^hJ|%%X zu39%Qj_WOcQFMdPylbSE+Pq#((4P`hqu3%)vP9Xd&nw~l<4C6b-O&wll@!M1vSa6( zedb%DBNh=#tnnumpFwL%{dA#L5lDej$+IMoT!D|rghe3OG*J%WqCUT_9eyc`^tR{* zq#A)v9{8XpVlnND4(KYB@{wq0M`p)l_V+~hG9LPx_J>>`PnsQnT}+s9o2BNfuOR>Y=f1p?_R|&&9K2I#qEXz7Q?YHu^qj_DAwEqWUL# z(+{H?%CaPry=V4!CM*}U^}17!0BdWXG_W2u9UL1&-8tt; z%FMqeCe$#j3&BC(ilG4bh5E}8oF|%H0;amOQ$4$0?S=A7?Q)!>tBMRijzQo>s`{GM~qmU3bn&TL)Aykd5Yg~571pkHXc zJJ<%5d9MYoUE2v|SVX4vzHzoL6XS$70=p;ZZDu{nDQC7{e(LNsT$?fo#PnwBO@Y%$ zcZL`zc1LQlHSNt{f!u zI(n}O0vB5Dv5~s;N?{_5I{K7e%@D_yk^gBV?)bz`vJ#Jlm{#cUjPP#kTVA6+1 z@_%v&T;ytHCbWL+E1vu4>^bW*4WBJimnPB6w6q~nJ;U$HI~QHon?-x@#dEXI@|?4L zQIk;8aQVr?;%VzkGX41oX@0}gV%U+WbD@u!z-Sr1Qmj2ceglCMajS5>Dc0|wt_QMe zV@2gEcUoZjjP|2p?;C6TTZW3`W9{#yxZ1YUvLv6%9@Cm-2ScM!Ub{H1|Dw&1Oxi#m zD$jvRkql`soD%B#2m`i-^ZU!~_v$3Dh_UpIHUcxvndeIqz%tmA=hQ}G+@7KP^9=W2 z735w&m_2rVZx!tzKq{$;S1DgqrZb$B6XVpAL$mRx+RQ*C{VrU+wFj-?g17F~*aGNR zmi#6d?)vh4a5?zXIHT_HMK!&41JOGxQWh=*lS*<=h&29W5L?m}(7JMb_Sj9QrQ$0w zKUgCgvp&~uR2806h~lND)CZj3t+vYeNVJ2`$oHCYF}t>JE)(XjOM5+K_Wx2K5npc^ z$v2eF>BIFPI`Nc82YqYs}_@!?xj^+8wHA3mf=V>4pqwN$ek<`VC&*&1lF9S?9 z&F3a@(aViVnQEF-a6)L7UAvZ2QhK8Z@CnNOgXBl?51l_z>SjEJtpd}VyB5sxJjH|@ zD-Q-jz)$q7VRK-J~4Z&x$L6(2i8EoJZtt? zV)RSV4g|TbXt?vA6|05dMbcOB&~)PXNBld%$A@Bds7;!HkV!9ZWY^ly<&`dn=V zON1Mw*6jZMM6`pPXCBEbOq{ZrRbJ82@^Inou{1^7G|snXU(ml&A+L(nKxywz)%wRs z+B?7bXrg_y=Tw}G#T&}}Oa7){Nbj`oq=PgsYx-S+A^xbAluyTMAjL;%>Cw_q_aL68IwQ) z1%a7^98&Iqu2Au(F;39*x%*KQJx&qCvcs%x!h9&;FqbuVrkcqfn=qD8`B3W2*;=mO zF)?0zvUt2d`%??$g*JKdSRfEMJbSEW{hrufP=n6XMu*0D@!8_>eu4*~R6)pDLA1-5 zxPB#apUcJDZaYhqHSwX9BHN&xXG%GqmQd>H&S$^khUULL`9 z-XbEQXlu9~cA*SkyF?lY%j??5IwD=2#BYu~lyr7j8TIyL@38f-A<(L1~p) zjQv9CgyepSEd5T};j4*Epp2(Zjz)Hc=x@6~pF`+WF7!biQ9OT0!?EoQ{&8LdCx^dL z3uTUF?j1cu*b(77>pX`WN-!TE%|i#;K(*{&B9Ua(d7HWce-hpIv>7YPags;XfliJt z{-jjQvP|8wp;m9`66Q-2canC)t<&uGtY#7e>|kSo1vG;3XdSIwI#Z_^<-Bsec^ z+iu~z#p5Fg<>AG_??pS%v}O@%cX0B@n4%Ei7%hUJu^!b9Ls~oS3A5L3#&7gIZl;o_ z{eg~J=XLyd=goE>V;uA1dSfmjB^!R$mcdlY+hK&VOuqgg+5ss*ZFX0ra^6K_oKU`V zQm+wd+{${>ESPcT94+s%4bQV0&c}-*wdt-G$rDEAoR5iAJl5@}U2i>3yCRi%?;Pz= zp6Bxr%Cdv5?Rb^Exx9|%#|%F8agny|ph257m*2TNl7C1*>tIQq4J8iW@R(>$@Ay3F zr(>GQZk3omS2RIFgAu<0dcK42!;hh#)u^;nFtzK=a<4CeY$K>H()Q^?@Tt ztT%g6q^T=ZEnYjocG>*2?7wQ;CVX=7_y|H-^7Pu8k@Ef9X`rfe!6)1ssa=6^9@+3Z zf_Re+K8H(0qaGg}_9`4Wnr0`pL3wkYh1xxMlNW7<(=GV^F@R7RVr2@gpzh>3-^Ufg z>M;d^|G3=*63Xk{HUcl-f2L)Ww6^n*P(&4xCasBmv=JRnibpe=G!iz zxAiH;3MXH`cA5N@cayUlV~au;l;*lEnYw)c$%L}>bIus;@Z$yFKVjS`hsd^_hEfK~ z-zStOZ}LYrLz(>CDVlOZLeqr0HYnxoyM(edGi__w`BVpq;E%#+HygAz8 zti|Im^B>Ey;@P4do;Uka2JRyrOq+=AEV$k}EtN|Z2ii{9E7|^EC6py?>+om?j_vDW z!cNA=cVw_Ni&$q)+hnLvhE~QTbd2Dg)i!ol5JC^OQ2A(E=km15HPDtdN zY@5@ka2hpvnH)RTVNi8vqzy{*(SKOqZFle(63RLB`zJ@&LMa=c)7shkBV(LEC(C(^ zexofhltb}Yl+0c}t)E8ugXjkD{k2$~ zRzjUZvi)*#Tuw|ou#)H49>JD4s$`=yG<@2LNiQ`w!2 z>t>HVXZl#1yPlb3BDGl>#L5@i8>@jtEP;9N?7QTq!X2tVS^F%Dp!cThOitTQe`WUf z%pKAo)^(KiA4M8quqT?w!|40D7@Y|tqy+h*L18_m#yx<_2rvRPSN@9NGH}r3);P{ zaMHxjovki#&YWjjQP*SHH|>JC;JPX8uhVu|MBgAYS1*pW?O-*)BG2%+sZZGlJU8F_ zVl5ZW$+<$b1HsNo!{*BTajYJuUeG|MUT`lCn92}I1L^U$DO4Z+<~)$%u}=tLyq>F6w z1s|qt?=*gekkFXM^(||vE+32)v8&td<3Llb8PA^ShPm3gt?hiLW#an9<0ij-GnCt` zV5^^EO-pktxXCx1r%~jR+T5WwCFca!u7TZPZS?--7#37}u2QXg#oCPsYA{KBQtn4z z-`)8(;>AWy{Kr!0>z#w`Zp&94+VEPgoyl-DvxguFDBslLGgt#@th|ent9Z(eB;`r* z;(gg;K37|9`L^OSOm(|{3=f2k*|fE>{b|aPbWR$xNiaF(i*{+6)@Exyn|?Z{<+-=n zs`=;qUgmI!)0FkH=d2#pq_$fn3Wg6UK4VQqv1}xFryd>YF0R3>w`q5%^K@6rj?qNV zj$w{;sjDJ-wMB)t(aX;ZVKmy08zSP}U!RTnK{MPc(kvmLQ>LI;p=U&zVd;h*>PSF- zw#-6Kpb#;?E9QqA@!r+CKz58(eSP_&5{AR)!m~TtvxWo=d6Pc1fAttPXetvg4B&4X z$>L^p5%`;bILGI?cw8A#y(D-!BGJuY(5&FgjudT&)owLR1Sz){d_}Ya<&;ma(~f(9 z!fO&rrsJ*IW9s_4(GDE*7Z%6-sG--M38Jk-ZW<{X|3dLRKbapYKoQL!z0T(-2TI`_ zA8CX2@^^ES2>+gFuX$Gi-~U?0F}c#V0hnS%9=RLo{f_cQO+v{;y{tHPwP+uS%G>2% zS`Kt9L!P9ySPbL+n5=T(f>2A)ZQFktw zn@$qEX_B!MZ<`VU)mZ!D6&)n_btTY}ZF7@q-LJ|X^PS1r0ed!WWKK!(HM7Ue@!eu) zLoq=a6%TM8S40HOMBO*K_eF0PJT6jcvIc8>ou(IVWRgXMxwFrg`t8`+;BUH7ndt9s z@>;AHrk%;!=>n;;cjfG{An)nxy?CQplByr78ug%ksSJ+(8)9ceW&)#1up`|g|ENMk zb23T#=${tJswkc9q}|)r1M8Brf)oa192!%Eo0%Z$_W9XkzR_i3=j}?i5!A0m;ci;h zE6LzhGI)jt*&9r)JU=T5|LpbNu$fTOr2As+hCPp&tqBw6!F?j_uT;ZLiy^cwb8NFT zkIKwbi(`8tnXCyDHUsw6^|HrOOIkZNq%zKvdsM5A zX&#~EKR&uRCZfDROqj4f1jr>32m5K$Jng(y8r7LRqt9toSRZT4>V)NjT-d55?`*&X zdgeTDo_Bi@zJSsjQbjGuyCQMmJ{ya{55UWWwj=wl_ zJw~617U;5N9RjR7t7gOaahIspi=taAEyBX?SWC0li;Yl<*E#u^{lhggUE{XJalJ^= zeO=gGNX@E$`M7AM>f5yaye>kCzAuuZ(P~Y5sEBZ^qX~xsK6@#U+B0a#t^(;gyWY7#k_WC`=iyt6PJm!m zA6XnT{osKMd^WD)4I(+oHTXH3k!mMw48cY&C<-51T;@t>H^B83EM2ZRP9EB}&8$Hm z8^)U-q&*;?UoAzXGSKx0JAo4F{76LE`$s>OhMf$-qLyAR(EB5$-M$vxp{Y)Ale>VD z@1pmG`uqE;T~p&yJNXRjI%)d)n6TZTHAWREchk54hF|?S7DOMK5(uEgy0+6ZWuML2 zHT9wE?8gbigDlIlVy!?5aB0rZM-S+mv>&Uf?Q|k^P)%eEtF6l&XD$v)0 zX|xF+(|p5a3Z}nd2-VGJe^d2oJ9QT-TF5OvG!nx~uCdL$@wT8D4e2U3{8F(o+q3tA z#xj}XSjR>=->x_==us10hL5R4X~s>S1z=+Ig@X%UJsby<`-dQnHk!&5Bsu&60gAkud^4&k%5i9UYgsm6+JdIrkvL8ioZul2xgto z?F%Xl=GL4e*8hFXxo8oeaEM8H^E{bn!nRS#R;gD4yUlp#&ETAAdohdi(CoNtWCGpN zG-Qos`II@BOMWCFK}V|vrJnU@>W0!{UxFzEKojz_4Cy?y;WdZMp2M0M;usobS}x8Z z>pbr_J}J^Tls>n?b4_j?Ng(r^!8J7d$Icl`XKQVRPy)Y>pwN!H5-#J?{{<_mtVFKa$W@f80$kB~;hlQ;MrNc!MJu6X` z8`{(A_5R|^te>~SP^YFDM!>ge8aK#98i>!-^g=4#reJXdWztto*O^w7lUzwKvk`_W zlptMXE{)vfnH!!LnaVLDS}ZbZWV?Z{EBUT-v1#}iU)LZpGe-xx_1=($vW9AmM6%$b zY4DX?pxUp}*s_w#Lx+gk=1B?@Dr5&YyhiXP;x?jh&|Lsy5K7=@@+pstY~y0z3htA2P2JxUz3nKJH3$Lo zhkStXqQ|A}$ZBa60-($(FZ!L?WB+F^3BylgEt^U3#otpCCxrTJXzs&j>#*6HR{(4H z8#KDcIMhBj&bCZ{ZD*k@K|rKWM64orKH6DhxRBD)eTmSqH`1u>9Wi-sCkbT^CY0G! z&g6?8Gkd&BnjEdC{)|+sXNeH String { @@ -63,13 +63,13 @@ public struct Crypto { let uint5Address = convertUIntArray(binaryAddress.map { UInt($0) }, 8, 5) let uint5Checksum = createChecksum(uint5Address) let identifier = convertUInt5ToBase32(uint5Address + uint5Checksum) - return "\(PREFIX_LISK)\(identifier)" + return "\(PREFIX_KLY)\(identifier)" } public static func getBinaryAddressFromBase32(_ base32Address: String) -> String? { guard isValidBase32(address: base32Address) else { return nil } - let addressArray = Array(base32Address)[PREFIX_LISK.count..<(base32Address.count - 6)] + let addressArray = Array(base32Address)[PREFIX_KLY.count..<(base32Address.count - 6)] let integerSequence = addressArray.compactMap { CHARSET.firstIndex(of: $0) }.map { UInt($0) } guard integerSequence.count == 32 else { return nil } @@ -78,7 +78,7 @@ public struct Crypto { } public static func isValidBase32(address: String) -> Bool { - guard address.prefix(3) == "lsk", address.count == 41 else { return false } + guard address.prefix(3) == PREFIX_KLY, address.count == 41 else { return false } let content = String(address.suffix(38)) let bytes = covertBase32toUInt5(content) diff --git a/NotificationServiceExtension/NotificationService.swift b/NotificationServiceExtension/NotificationService.swift index 1b3178b1c..684af775d 100644 --- a/NotificationServiceExtension/NotificationService.swift +++ b/NotificationServiceExtension/NotificationService.swift @@ -22,7 +22,7 @@ class NotificationService: UNNotificationServiceExtension { private lazy var richMessageProviders: [String: TransferNotificationContentProvider] = { var providers: [String: TransferNotificationContentProvider] = [ EthProvider.richMessageType: EthProvider(), - LskProvider.richMessageType: LskProvider(), + KlyProvider.richMessageType: KlyProvider(), DogeProvider.richMessageType: DogeProvider(), DashProvider.richMessageType: DashProvider(), BtcProvider.richMessageType: BtcProvider() diff --git a/NotificationServiceExtension/WalletImages/klayr_notificationContent.png b/NotificationServiceExtension/WalletImages/klayr_notificationContent.png new file mode 100644 index 0000000000000000000000000000000000000000..d7c21bc16325fcf897220e77853568316375c2a3 GIT binary patch literal 728 zcmeAS@N?(olHy`uVBq!ia0vp^OF@`}4M^H*+uj0FoCO|{#S9GG!XV7ZFl&wkP>``W z$lZxy-8q?;Kn_c~qpu?a!^VE@KZ&di3{1J6E{-7;jBoGSW=#ncX?QqUgCnph!7%jN zL%x{C8)udN+-`lK^k!2_jzhGfx5whCKR0*z&9JRGYF%@ldHde0r*~d`DiixI&0L_! zMnKuC$i=fyi4-nqY~I8DZ9%I)j3BQGsqU;pgv z?){sm{H^u=_37W!m^t&$NLB75)j#Q5t4qGsCwyy{n@ni{5D|Xtn>VEte>2D~DzCNq zZvJ|XB)jm_?ehE6eZN`P>7DaW>$SO0YD5&5?3{hqp~I7^aS8OwXO5ZHI+e_&r5V74 O$l&Sf=d#Wzp$PyPswKJr literal 0 HcmV?d00001 diff --git a/NotificationServiceExtension/WalletImages/mana_notificationContent.png b/NotificationServiceExtension/WalletImages/mana_notificationContent.png index ef189dde47db6e80e3c33eb04e92899abdcf6fa3..0b7d1725db6c9a2d4a7a0bac99af710837b2b2dd 100644 GIT binary patch literal 10018 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 diff --git a/TransferNotificationContentExtension/NotificationViewController.swift b/TransferNotificationContentExtension/NotificationViewController.swift index 16bcab904..952281d2f 100644 --- a/TransferNotificationContentExtension/NotificationViewController.swift +++ b/TransferNotificationContentExtension/NotificationViewController.swift @@ -26,7 +26,7 @@ class NotificationViewController: UIViewController, UNNotificationContentExtensi private lazy var richMessageProviders: [String: TransferNotificationContentProvider] = { var providers: [String: TransferNotificationContentProvider] = [ EthProvider.richMessageType: EthProvider(), - LskProvider.richMessageType: LskProvider(), + KlyProvider.richMessageType: KlyProvider(), DogeProvider.richMessageType: DogeProvider(), DashProvider.richMessageType: DashProvider(), BtcProvider.richMessageType: BtcProvider() From 5645bab5470cb3385c7bcac5dd94b6ae052c2070 Mon Sep 17 00:00:00 2001 From: StanislavDevIOS Date: Fri, 12 Jul 2024 12:37:17 +0300 Subject: [PATCH 2/6] [trello.com/c/An2zqhSr] Fix: check contain sending tx --- .../Wallets/Klayr/KlyTransferViewController.swift | 5 ++++- .../Modules/Wallets/TransferViewControllerBase.swift | 10 ++++++++-- 2 files changed, 12 insertions(+), 3 deletions(-) diff --git a/Adamant/Modules/Wallets/Klayr/KlyTransferViewController.swift b/Adamant/Modules/Wallets/Klayr/KlyTransferViewController.swift index 8f6d7c177..878fb878e 100644 --- a/Adamant/Modules/Wallets/Klayr/KlyTransferViewController.swift +++ b/Adamant/Modules/Wallets/Klayr/KlyTransferViewController.swift @@ -67,7 +67,10 @@ final class KlyTransferViewController: TransferViewControllerBase { fee: transactionFee ) - if await !doesNotContainSendingTx(with: String(transaction.nonce)) { + if await !doesNotContainSendingTx( + with: String(transaction.nonce), + senderAddress: transaction.senderAddress + ) { presentSendingError() return } diff --git a/Adamant/Modules/Wallets/TransferViewControllerBase.swift b/Adamant/Modules/Wallets/TransferViewControllerBase.swift index b7073e925..c8aa15dc1 100644 --- a/Adamant/Modules/Wallets/TransferViewControllerBase.swift +++ b/Adamant/Modules/Wallets/TransferViewControllerBase.swift @@ -1236,7 +1236,10 @@ extension TransferViewControllerBase { return !havePending } - func doesNotContainSendingTx(with nonce: String) async -> Bool { + func doesNotContainSendingTx( + with nonce: String, + senderAddress: String + ) async -> Bool { var history = walletCore.getLocalTransactionHistory() if history.isEmpty { @@ -1246,7 +1249,10 @@ extension TransferViewControllerBase { ) ?? [] } - let nonces = history.compactMap { $0.nonceRaw } + let nonces = history.filter { + $0.senderAddress == senderAddress + && $0.transactionStatus != .failed + }.compactMap { $0.nonceRaw } return !nonces.contains(nonce) } From 89d02f4d2ad535d02896175ea4e8068f54e30836 Mon Sep 17 00:00:00 2001 From: StanislavDevIOS Date: Fri, 12 Jul 2024 12:38:17 +0300 Subject: [PATCH 3/6] [trello.com/c/An2zqhSr] Fix: KLY visibility in PrivateKey Generator screen --- .../KlyWalletService+WalletCore.swift | 24 +++++++++++++++++++ 1 file changed, 24 insertions(+) diff --git a/Adamant/Modules/Wallets/Klayr/WalletService/KlyWalletService+WalletCore.swift b/Adamant/Modules/Wallets/Klayr/WalletService/KlyWalletService+WalletCore.swift index a15709032..a8854c951 100644 --- a/Adamant/Modules/Wallets/Klayr/WalletService/KlyWalletService+WalletCore.swift +++ b/Adamant/Modules/Wallets/Klayr/WalletService/KlyWalletService+WalletCore.swift @@ -8,6 +8,7 @@ import UIKit import CommonKit +import LiskKit extension KlyWalletService { var wallet: WalletAccount? { @@ -62,3 +63,26 @@ extension KlyWalletService { $hasMoreOldTransactions.eraseToAnyPublisher() } } + +extension KlyWalletService: PrivateKeyGenerator { + var rowTitle: String { + tokenName + } + + var rowImage: UIImage? { + .asset(named: "klayr_wallet_row") + } + + func generatePrivateKeyFor(passphrase: String) -> String? { + guard AdamantUtilities.validateAdamantPassphrase(passphrase), + let keypair = try? LiskKit.Crypto.keyPair( + fromPassphrase: passphrase, + salt: salt + ) + else { + return nil + } + + return keypair.privateKeyString + } +} From 29b0b3b325b68e741b87e45d598b08c0bb54f5cd Mon Sep 17 00:00:00 2001 From: StanislavDevIOS Date: Fri, 12 Jul 2024 12:42:26 +0300 Subject: [PATCH 4/6] [trello.com/c/An2zqhSr] Feat: add public message in direct transfer for KLY --- .../Bitcoin/BtcTransferViewController.swift | 3 +- .../Bitcoin/BtcWalletService+Send.swift | 7 ++- .../Dash/DashTransferViewController.swift | 3 +- .../Wallets/Dash/DashWalletService+Send.swift | 9 ++-- .../Doge/DogeTransferViewController.swift | 3 +- .../Wallets/Doge/DogeWalletService+Send.swift | 3 +- .../ERC20/ERC20TransferViewController.swift | 3 +- .../ERC20/ERC20WalletService+Send.swift | 3 +- .../Ethereum/EthTransferViewController.swift | 3 +- .../Ethereum/EthWalletService+Send.swift | 3 +- .../Klayr/KlyTransferViewController.swift | 28 +++++++++- .../WalletService/KlyWalletService+Send.swift | 6 ++- .../WalletService/KlyWalletService.swift | 53 ++++++++++++++++--- .../Wallets/TransferViewControllerBase.swift | 46 ++++++++++++++++ .../WalletsService/WalletCoreProtocol.swift | 5 +- .../Utilities/AdamantUtilities+extended.swift | 5 ++ .../Localization/de.lproj/Localizable.strings | 3 ++ .../Localization/en.lproj/Localizable.strings | 3 ++ .../Localization/ru.lproj/Localizable.strings | 3 ++ .../Localization/zh.lproj/Localizable.strings | 3 ++ .../Helpers/StringMaxLengthFormatter.swift | 41 ++++++++++++++ .../TransactionEntity+Extension.swift | 5 +- 22 files changed, 215 insertions(+), 26 deletions(-) create mode 100644 CommonKit/Sources/CommonKit/Helpers/StringMaxLengthFormatter.swift diff --git a/Adamant/Modules/Wallets/Bitcoin/BtcTransferViewController.swift b/Adamant/Modules/Wallets/Bitcoin/BtcTransferViewController.swift index aea381b29..34d544ba7 100644 --- a/Adamant/Modules/Wallets/Bitcoin/BtcTransferViewController.swift +++ b/Adamant/Modules/Wallets/Bitcoin/BtcTransferViewController.swift @@ -42,7 +42,8 @@ final class BtcTransferViewController: TransferViewControllerBase { let transaction = try await service.createTransaction( recipient: recipient, amount: amount, - fee: transactionFee + fee: transactionFee, + comment: nil ) if await !doesNotContainSendingTx() { diff --git a/Adamant/Modules/Wallets/Bitcoin/BtcWalletService+Send.swift b/Adamant/Modules/Wallets/Bitcoin/BtcWalletService+Send.swift index 2e2278f8d..46f0f0f07 100644 --- a/Adamant/Modules/Wallets/Bitcoin/BtcWalletService+Send.swift +++ b/Adamant/Modules/Wallets/Bitcoin/BtcWalletService+Send.swift @@ -14,7 +14,12 @@ extension BtcWalletService: WalletServiceTwoStepSend { typealias T = BitcoinKit.Transaction // MARK: Create & Send - func createTransaction(recipient: String, amount: Decimal, fee: Decimal) async throws -> BitcoinKit.Transaction { + func createTransaction( + recipient: String, + amount: Decimal, + fee: Decimal, + comment: String? + ) async throws -> BitcoinKit.Transaction { // MARK: 1. Prepare guard let wallet = self.btcWallet else { throw WalletServiceError.notLogged diff --git a/Adamant/Modules/Wallets/Dash/DashTransferViewController.swift b/Adamant/Modules/Wallets/Dash/DashTransferViewController.swift index f1605e508..5a1d1e717 100644 --- a/Adamant/Modules/Wallets/Dash/DashTransferViewController.swift +++ b/Adamant/Modules/Wallets/Dash/DashTransferViewController.swift @@ -66,7 +66,8 @@ final class DashTransferViewController: TransferViewControllerBase { let transaction = try await service.createTransaction( recipient: recipient, amount: amount, - fee: transactionFee + fee: transactionFee, + comment: nil ) if await !doesNotContainSendingTx() { diff --git a/Adamant/Modules/Wallets/Dash/DashWalletService+Send.swift b/Adamant/Modules/Wallets/Dash/DashWalletService+Send.swift index e246bb2c8..e2aa6cf8a 100644 --- a/Adamant/Modules/Wallets/Dash/DashWalletService+Send.swift +++ b/Adamant/Modules/Wallets/Dash/DashWalletService+Send.swift @@ -19,7 +19,8 @@ extension DashWalletService: WalletServiceTwoStepSend { return try await createTransaction( recipient: recipient, amount: amount, - fee: transactionFee + fee: transactionFee, + comment: nil ) } @@ -34,14 +35,16 @@ extension DashWalletService: WalletServiceTwoStepSend { return try await createTransaction( recipient: recipient, amount: amount, - fee: transactionFee + fee: transactionFee, + comment: nil ) } func createTransaction( recipient: String, amount: Decimal, - fee: Decimal + fee: Decimal, + comment: String? ) async throws -> BitcoinKit.Transaction { // MARK: 1. Prepare guard let wallet = self.dashWallet else { diff --git a/Adamant/Modules/Wallets/Doge/DogeTransferViewController.swift b/Adamant/Modules/Wallets/Doge/DogeTransferViewController.swift index 02f4188f3..9c49995fb 100644 --- a/Adamant/Modules/Wallets/Doge/DogeTransferViewController.swift +++ b/Adamant/Modules/Wallets/Doge/DogeTransferViewController.swift @@ -43,7 +43,8 @@ final class DogeTransferViewController: TransferViewControllerBase { let transaction = try await service.createTransaction( recipient: recipient, amount: amount, - fee: transactionFee + fee: transactionFee, + comment: nil ) if await !doesNotContainSendingTx() { diff --git a/Adamant/Modules/Wallets/Doge/DogeWalletService+Send.swift b/Adamant/Modules/Wallets/Doge/DogeWalletService+Send.swift index 4dc9955e9..b3e61438f 100644 --- a/Adamant/Modules/Wallets/Doge/DogeWalletService+Send.swift +++ b/Adamant/Modules/Wallets/Doge/DogeWalletService+Send.swift @@ -24,7 +24,8 @@ extension DogeWalletService: WalletServiceTwoStepSend { func createTransaction( recipient: String, amount: Decimal, - fee: Decimal + fee: Decimal, + comment: String? ) async throws -> BitcoinKit.Transaction { // Prepare guard let wallet = self.dogeWallet else { diff --git a/Adamant/Modules/Wallets/ERC20/ERC20TransferViewController.swift b/Adamant/Modules/Wallets/ERC20/ERC20TransferViewController.swift index fb8ee242e..c66d4fe08 100644 --- a/Adamant/Modules/Wallets/ERC20/ERC20TransferViewController.swift +++ b/Adamant/Modules/Wallets/ERC20/ERC20TransferViewController.swift @@ -50,7 +50,8 @@ final class ERC20TransferViewController: TransferViewControllerBase { let transaction = try await service.createTransaction( recipient: recipient, amount: amount, - fee: transactionFee + fee: transactionFee, + comment: nil ) if await !doesNotContainSendingTx( diff --git a/Adamant/Modules/Wallets/ERC20/ERC20WalletService+Send.swift b/Adamant/Modules/Wallets/ERC20/ERC20WalletService+Send.swift index bdd294084..6cef2de23 100644 --- a/Adamant/Modules/Wallets/ERC20/ERC20WalletService+Send.swift +++ b/Adamant/Modules/Wallets/ERC20/ERC20WalletService+Send.swift @@ -19,7 +19,8 @@ extension ERC20WalletService: WalletServiceTwoStepSend { func createTransaction( recipient: String, amount: Decimal, - fee: Decimal + fee: Decimal, + comment: String? ) async throws -> CodableTransaction { guard let ethWallet = ethWallet else { throw WalletServiceError.notLogged diff --git a/Adamant/Modules/Wallets/Ethereum/EthTransferViewController.swift b/Adamant/Modules/Wallets/Ethereum/EthTransferViewController.swift index 86e59ccf8..ef867e9d9 100644 --- a/Adamant/Modules/Wallets/Ethereum/EthTransferViewController.swift +++ b/Adamant/Modules/Wallets/Ethereum/EthTransferViewController.swift @@ -44,7 +44,8 @@ final class EthTransferViewController: TransferViewControllerBase { let transaction = try await service.createTransaction( recipient: recipient, amount: amount, - fee: transactionFee + fee: transactionFee, + comment: nil ) if await !doesNotContainSendingTx( diff --git a/Adamant/Modules/Wallets/Ethereum/EthWalletService+Send.swift b/Adamant/Modules/Wallets/Ethereum/EthWalletService+Send.swift index 440c0168d..ead2c3db4 100644 --- a/Adamant/Modules/Wallets/Ethereum/EthWalletService+Send.swift +++ b/Adamant/Modules/Wallets/Ethereum/EthWalletService+Send.swift @@ -25,7 +25,8 @@ extension EthWalletService: WalletServiceTwoStepSend { func createTransaction( recipient: String, amount: Decimal, - fee: Decimal + fee: Decimal, + comment: String? ) async throws -> CodableTransaction { try await ethApiService.requestWeb3 { [weak self] web3 in guard let self = self else { throw WalletServiceError.internalError(.unknownError) } diff --git a/Adamant/Modules/Wallets/Klayr/KlyTransferViewController.swift b/Adamant/Modules/Wallets/Klayr/KlyTransferViewController.swift index 878fb878e..8fbf263cb 100644 --- a/Adamant/Modules/Wallets/Klayr/KlyTransferViewController.swift +++ b/Adamant/Modules/Wallets/Klayr/KlyTransferViewController.swift @@ -18,6 +18,25 @@ final class KlyTransferViewController: TransferViewControllerBase { private let prefix = "kly" + override var blockchainCommentsEnabled: Bool { + !commentsEnabled + } + + override var transactionFee: Decimal { + let blockchainComment: String = (form.rowBy( + tag: BaseRows.blockchainComments( + coin: walletCore.tokenName + ).tag + ) as? TextAreaRow)?.value ?? .empty + + let baseFee = walletCore.getFee(comment: blockchainComment) + let additionalyFee = walletCore.additionalFee + + return addAdditionalFee + ? baseFee + additionalyFee + : baseFee + } + override func checkForAdditionalFee() { Task { guard let recipientAddress = recipientAddress, @@ -49,6 +68,12 @@ final class KlyTransferViewController: TransferViewControllerBase { comments = "" } + let blockchainComment: String? = (form.rowBy( + tag: BaseRows.blockchainComments( + coin: walletCore.tokenName + ).tag + ) as? TextAreaRow)?.value + guard let service = walletCore as? KlyWalletService, let recipient = recipientAddress, let amount = amount @@ -64,7 +89,8 @@ final class KlyTransferViewController: TransferViewControllerBase { let transaction = try await service.createTransaction( recipient: recipient, amount: amount, - fee: transactionFee + fee: transactionFee, + comment: blockchainComment ) if await !doesNotContainSendingTx( diff --git a/Adamant/Modules/Wallets/Klayr/WalletService/KlyWalletService+Send.swift b/Adamant/Modules/Wallets/Klayr/WalletService/KlyWalletService+Send.swift index 10174162d..77631bf2f 100644 --- a/Adamant/Modules/Wallets/Klayr/WalletService/KlyWalletService+Send.swift +++ b/Adamant/Modules/Wallets/Klayr/WalletService/KlyWalletService+Send.swift @@ -17,7 +17,8 @@ extension KlyWalletService: WalletServiceTwoStepSend { func createTransaction( recipient: String, amount: Decimal, - fee: Decimal + fee: Decimal, + comment: String? ) async throws -> TransactionEntity { // MARK: 1. Prepare guard let wallet = klyWallet, @@ -35,7 +36,8 @@ extension KlyWalletService: WalletServiceTwoStepSend { fee: fee, nonce: wallet.nonce, senderPublicKey: wallet.keyPair.publicKeyString, - recipientAddressBinary: binaryAddress + recipientAddressBinary: binaryAddress, + comment: comment ?? .empty ) let signedTransaction = transaction.sign(with: keys, for: Constants.chainID) diff --git a/Adamant/Modules/Wallets/Klayr/WalletService/KlyWalletService.swift b/Adamant/Modules/Wallets/Klayr/WalletService/KlyWalletService.swift index b044ee401..82ccbcbca 100644 --- a/Adamant/Modules/Wallets/Klayr/WalletService/KlyWalletService.swift +++ b/Adamant/Modules/Wallets/Klayr/WalletService/KlyWalletService.swift @@ -44,6 +44,7 @@ final class KlyWalletService: WalletCoreProtocol { @Atomic private(set) var isWarningGasPrice = false @Atomic private(set) var state: WalletServiceState = .notInitiated @Atomic private(set) var lastHeight: UInt64 = .zero + @Atomic private(set) var lastMinFeePerByte: UInt64 = .zero @ObservableValue private(set) var transactions: [TransactionDetails] = [] @ObservableValue private(set) var hasMoreOldTransactions: Bool = true @@ -53,7 +54,9 @@ final class KlyWalletService: WalletCoreProtocol { coreDataStack: coreDataStack, blockchainType: richMessageType ) - + + let salt = "adm" + // MARK: Notifications let walletUpdatedNotification = Notification.Name("adamant.klyWallet.walletUpdated") @@ -94,8 +97,17 @@ final class KlyWalletService: WalletCoreProtocol { try await getBalance(for: address) } - func getCurrentFee() async throws -> (fee: BigUInt, lastHeight: UInt64) { - try await getFees() + func getCurrentFee() async throws -> (fee: BigUInt, lastHeight: UInt64, minFeePerByte: UInt64) { + try await getFees(comment: .empty) + } + + func getFee(comment: String) -> Decimal { + let fee = try? getFee( + minFeePerByte: lastMinFeePerByte, + comment: comment + ).asDecimal(exponent: Self.currencyExponent) + + return fee ?? transactionFee } func getWalletAddress(byAdamantAddress address: String) async throws -> String { @@ -214,11 +226,12 @@ private extension KlyWalletService { wallet.nonce = nonce } - if let result = try? await getFees() { + if let result = try? await getFees(comment: .empty) { self.lastHeight = result.lastHeight self.transactionFeeRaw = result.fee > KlyWalletService.defaultFee ? result.fee : KlyWalletService.defaultFee + self.lastMinFeePerByte = result.minFeePerByte } if let balance = try? await getBalance() { @@ -286,7 +299,7 @@ private extension KlyWalletService { return UInt64(nonce) ?? .zero } - func getFees() async throws -> (fee: BigUInt, lastHeight: UInt64) { + func getFees(comment: String) async throws -> (fee: BigUInt, lastHeight: UInt64, minFeePerByte: UInt64) { guard let wallet = klyWallet else { throw WalletServiceError.notLogged } @@ -300,7 +313,8 @@ private extension KlyWalletService { fee: 0.00141, nonce: wallet.nonce, senderPublicKey: wallet.keyPair.publicKeyString, - recipientAddressBinary: wallet.binaryAddress + recipientAddressBinary: wallet.binaryAddress, + comment: comment ).sign( with: wallet.keyPair, for: Constants.chainID @@ -315,7 +329,30 @@ private extension KlyWalletService { let height = UInt64(lastBlock.header.height) - return (fee: fee, lastHeight: height) + return (fee: fee, lastHeight: height, minFeePerByte: minFeePerByte) + } + + func getFee(minFeePerByte: UInt64, comment: String) throws -> BigUInt { + guard let wallet = klyWallet else { + throw WalletServiceError.notLogged + } + + let tempTransaction = TransactionEntity().createTx( + amount: 100000000.0, + fee: 0.00141, + nonce: wallet.nonce, + senderPublicKey: wallet.keyPair.publicKeyString, + recipientAddressBinary: wallet.binaryAddress, + comment: comment + ).sign( + with: wallet.keyPair, + for: Constants.chainID + ) + + let feeValue = tempTransaction.getFee(with: minFeePerByte) + let fee = BigUInt(feeValue) + + return fee } func setState(_ newState: WalletServiceState, silent: Bool = false) { @@ -352,7 +389,7 @@ private extension KlyWalletService { do { let keyPair = try LiskKit.Crypto.keyPair( fromPassphrase: passphrase, - salt: "adm" + salt: salt ) let address = LiskKit.Crypto.address(fromPublicKey: keyPair.publicKeyString) diff --git a/Adamant/Modules/Wallets/TransferViewControllerBase.swift b/Adamant/Modules/Wallets/TransferViewControllerBase.swift index c8aa15dc1..6c5065f5b 100644 --- a/Adamant/Modules/Wallets/TransferViewControllerBase.swift +++ b/Adamant/Modules/Wallets/TransferViewControllerBase.swift @@ -101,6 +101,7 @@ class TransferViewControllerBase: FormViewController { case total case comments case sendButton + case blockchainComments(coin: String) var tag: String { switch self { @@ -115,6 +116,7 @@ class TransferViewControllerBase: FormViewController { case .total: return "total" case .comments: return "comments" case .sendButton: return "send" + case .blockchainComments: return "blockchainComments" } } @@ -129,6 +131,11 @@ class TransferViewControllerBase: FormViewController { case .fee: return .localized("TransferScene.Row.TransactionFee", comment: "Transfer: transfer fee") case .total: return .localized("TransferScene.Row.Total", comment: "Transfer: total amount of transaction: money to transfer adding fee") case .comments: return .localized("TransferScene.Row.Comments", comment: "Transfer: transfer comment") + case let .blockchainComments(coin): + return String.localizedStringWithFormat(.localized( + "TransferScene.Row.Blockchain.Comments", + comment: "Transfer: Blockchain transfer comment" + ), coin) case .sendButton: return String.adamant.transfer.send case .increaseFee: return .localized("TransferScene.Row.IncreaseFee", comment: "Transfer: transfer increase fee") } @@ -140,6 +147,7 @@ class TransferViewControllerBase: FormViewController { case recipient case transferInfo case comments + case blockchainComments(coin: String) var tag: String { switch self { @@ -147,6 +155,7 @@ class TransferViewControllerBase: FormViewController { case .recipient: return "rcp" case .transferInfo: return "trsfr" case .comments: return "cmmnt" + case .blockchainComments: return "blockchainComments" } } @@ -156,6 +165,11 @@ class TransferViewControllerBase: FormViewController { case .recipient: return .localized("TransferScene.Section.Recipient", comment: "Transfer: 'Recipient info' section") case .transferInfo: return .localized("TransferScene.Section.TransferInfo", comment: "Transfer: 'Transfer info' section") case .comments: return .localized("TransferScene.Row.Comments", comment: "Transfer: transfer comment") + case let .blockchainComments(coin): + return String.localizedStringWithFormat(.localized( + "TransferScene.Row.Blockchain.Comments", + comment: "Transfer: Blockchain transfer comment" + ), coin) } } } @@ -184,6 +198,8 @@ class TransferViewControllerBase: FormViewController { var rootCoinBalance: Decimal? var isNeedAddFee: Bool { true } var replyToMessageId: String? + var blockchainCommentsEnabled: Bool { false } + var maxBlockchainCommentLenght: Int { 64 } static let invalidCharacters: CharacterSet = { CharacterSet( @@ -345,6 +361,10 @@ class TransferViewControllerBase: FormViewController { form.append(commentsSection()) } + if blockchainCommentsEnabled { + form.append(blockchainCommentsSection()) + } + // MARK: Button section form +++ Section() <<< ButtonRow { @@ -559,6 +579,17 @@ class TransferViewControllerBase: FormViewController { return section } + func blockchainCommentsSection() -> Section { + let commentSection = Sections.blockchainComments(coin: walletCore.tokenName) + let section = Section(commentSection.localized) { + $0.tag = commentSection.tag + } + + section.append(defaultRowFor(baseRow: .blockchainComments(coin: walletCore.tokenName))) + + return section + } + // MARK: - Tools @discardableResult @@ -1167,6 +1198,21 @@ extension TransferViewControllerBase { return row + case .blockchainComments: + let row = TextAreaRow { + $0.tag = BaseRows.blockchainComments(coin: walletCore.tokenName).tag + $0.textAreaHeight = .dynamic(initialTextViewHeight: 44) + $0.useFormatterDuringInput = true + $0.formatter = StringMaxLengthFormatter(maxLength: maxBlockchainCommentLenght) + }.onChange { [weak self] row in + self?.updateToolbar(for: row) + self?.updateFeeCell() + }.cellUpdate { (cell, _) in + cell.textView?.backgroundColor = UIColor.clear + } + + return row + case .sendButton: return ButtonRow { $0.title = BaseRows.sendButton.localized diff --git a/Adamant/Modules/Wallets/WalletsService/WalletCoreProtocol.swift b/Adamant/Modules/Wallets/WalletsService/WalletCoreProtocol.swift index c5496b4df..a204a8342 100644 --- a/Adamant/Modules/Wallets/WalletsService/WalletCoreProtocol.swift +++ b/Adamant/Modules/Wallets/WalletsService/WalletCoreProtocol.swift @@ -305,6 +305,7 @@ protocol WalletCoreProtocol: AnyObject { func initWallet(withPassphrase: String) async throws -> WalletAccount func setInitiationFailed(reason: String) func shortDescription(for transaction: RichMessageTransaction) -> NSAttributedString + func getFee(comment: String) -> Decimal // MARK: Send @@ -326,6 +327,7 @@ protocol WalletCoreProtocol: AnyObject { extension WalletCoreProtocol { func isExist(address: String) async throws -> Bool { return true } + func getFee(comment: String) -> Decimal { transactionFee } } extension WalletCoreProtocol { @@ -380,7 +382,8 @@ protocol WalletServiceTwoStepSend: WalletCoreProtocol { func createTransaction( recipient: String, amount: Decimal, - fee: Decimal + fee: Decimal, + comment: String? ) async throws -> T func sendTransaction(_ transaction: T) async throws diff --git a/Adamant/Utilities/AdamantUtilities+extended.swift b/Adamant/Utilities/AdamantUtilities+extended.swift index 993f0a9e5..2610c8123 100644 --- a/Adamant/Utilities/AdamantUtilities+extended.swift +++ b/Adamant/Utilities/AdamantUtilities+extended.swift @@ -79,6 +79,11 @@ extension AdamantUtilities { /// - No -$%èçïäł- caracters /// - 12 words, splitted by a single whitespace /// - a-z + + static func validateAdamantPassphrase(_ passphrase: String) -> Bool { + validateAdamantPassphrase(passphrase: passphrase) + } + static func validateAdamantPassphrase(passphrase: String) -> Bool { guard validate(string: passphrase, with: passphraseRegex) else { return false diff --git a/CommonKit/Sources/CommonKit/Assets/Localization/de.lproj/Localizable.strings b/CommonKit/Sources/CommonKit/Assets/Localization/de.lproj/Localizable.strings index 7e96c86bb..4088c7870 100644 --- a/CommonKit/Sources/CommonKit/Assets/Localization/de.lproj/Localizable.strings +++ b/CommonKit/Sources/CommonKit/Assets/Localization/de.lproj/Localizable.strings @@ -1126,6 +1126,9 @@ /* Transfer: comment for transfer in chat */ "TransferScene.Row.Comments" = "Bemerkungen"; +/* Transfer: Blockchain comment for transfer in chat */ +"TransferScene.Row.Blockchain.Comments" = "Öffentliche Nachricht in %@ Blockchain"; + /* Transfer: transfer increase fee */ "TransferScene.Row.IncreaseFee" = "Gebühr erhöhen"; diff --git a/CommonKit/Sources/CommonKit/Assets/Localization/en.lproj/Localizable.strings b/CommonKit/Sources/CommonKit/Assets/Localization/en.lproj/Localizable.strings index 18acc4061..37bca7fef 100644 --- a/CommonKit/Sources/CommonKit/Assets/Localization/en.lproj/Localizable.strings +++ b/CommonKit/Sources/CommonKit/Assets/Localization/en.lproj/Localizable.strings @@ -1099,6 +1099,9 @@ /* Transfer: comment for transfer in chat */ "TransferScene.Row.Comments" = "Comments"; +/* Transfer: Blockchain comment for transfer in chat */ +"TransferScene.Row.Blockchain.Comments" = "Public message in %@ blockchain"; + /* Transfer: transfer increase fee */ "TransferScene.Row.IncreaseFee" = "Increase fee"; diff --git a/CommonKit/Sources/CommonKit/Assets/Localization/ru.lproj/Localizable.strings b/CommonKit/Sources/CommonKit/Assets/Localization/ru.lproj/Localizable.strings index c4a061e1d..066703b31 100644 --- a/CommonKit/Sources/CommonKit/Assets/Localization/ru.lproj/Localizable.strings +++ b/CommonKit/Sources/CommonKit/Assets/Localization/ru.lproj/Localizable.strings @@ -1096,6 +1096,9 @@ /* Transfer: comment for transfer in chat */ "TransferScene.Row.Comments" = "Комментарии"; +/* Transfer: Blockchain comment for transfer in chat */ +"TransferScene.Row.Blockchain.Comments" = "Публичное сообщение в %@ блокчейне"; + /* Transfer: transfer increase fee */ "TransferScene.Row.IncreaseFee" = "Увеличить комиссию"; diff --git a/CommonKit/Sources/CommonKit/Assets/Localization/zh.lproj/Localizable.strings b/CommonKit/Sources/CommonKit/Assets/Localization/zh.lproj/Localizable.strings index 602d2d314..63fafa539 100644 --- a/CommonKit/Sources/CommonKit/Assets/Localization/zh.lproj/Localizable.strings +++ b/CommonKit/Sources/CommonKit/Assets/Localization/zh.lproj/Localizable.strings @@ -1096,6 +1096,9 @@ /* Transfer: comment for transfer in chat */ "TransferScene.Row.Comments" = "评论"; +/* Transfer: Blockchain comment for transfer in chat */ +"TransferScene.Row.Blockchain.Comments" = "区块链 %@ 中的公开信息"; + /* Transfer: transfer increase fee */ "TransferScene.Row.IncreaseFee" = "增加费用"; diff --git a/CommonKit/Sources/CommonKit/Helpers/StringMaxLengthFormatter.swift b/CommonKit/Sources/CommonKit/Helpers/StringMaxLengthFormatter.swift new file mode 100644 index 000000000..117ac3e9d --- /dev/null +++ b/CommonKit/Sources/CommonKit/Helpers/StringMaxLengthFormatter.swift @@ -0,0 +1,41 @@ +// +// StringMaxLengthFormatter.swift +// +// +// Created by Stanislav Jelezoglo on 12.07.2024. +// + +import Foundation + +public class StringMaxLengthFormatter: Formatter { + private let maxLength: Int + + public init(maxLength: Int) { + self.maxLength = maxLength + super.init() + } + + required init?(coder: NSCoder) { + fatalError("init(coder:) has not been implemented") + } + + public override func string(for obj: Any?) -> String? { + guard let string = obj as? String else { + return nil + } + + return String(string.prefix(maxLength)) + } + + public override func getObjectValue( + _ obj: AutoreleasingUnsafeMutablePointer?, + for string: String, + errorDescription error: AutoreleasingUnsafeMutablePointer? + ) -> Bool { + if let obj = obj { + obj.pointee = self.string(for: string) as AnyObject? + } + + return true + } +} diff --git a/LiskKit/Sources/API/Transactions/TransactionEntity+Extension.swift b/LiskKit/Sources/API/Transactions/TransactionEntity+Extension.swift index 7a37fa3cc..09b5e728f 100644 --- a/LiskKit/Sources/API/Transactions/TransactionEntity+Extension.swift +++ b/LiskKit/Sources/API/Transactions/TransactionEntity+Extension.swift @@ -29,7 +29,8 @@ public extension TransactionEntity { fee: Decimal, nonce: UInt64, senderPublicKey: String, - recipientAddressBinary: String + recipientAddressBinary: String, + comment: String ) -> TransactionEntity { let amount = Crypto.fixedPoint(amount: amount) let fee = Crypto.fixedPoint(amount: fee) @@ -44,7 +45,7 @@ public extension TransactionEntity { $0.tokenID = Data(Constants.tokenID.allHexBytes()) $0.amount = amount $0.recipientAddressBinary = Data(recipientAddressBinary.allHexBytes()) - $0.data = "" + $0.data = comment } $0.signatures = [] } From 26fd896b0ccc758df36e450a198bf7148e3c24bd Mon Sep 17 00:00:00 2001 From: StanislavDevIOS Date: Fri, 12 Jul 2024 12:43:19 +0300 Subject: [PATCH 5/6] [trello.com/c/An2zqhSr] Fix: cursor position in KLY address field --- .../Klayr/KlyTransferViewController.swift | 21 +++++++++++++------ 1 file changed, 15 insertions(+), 6 deletions(-) diff --git a/Adamant/Modules/Wallets/Klayr/KlyTransferViewController.swift b/Adamant/Modules/Wallets/Klayr/KlyTransferViewController.swift index 8fbf263cb..331fd708a 100644 --- a/Adamant/Modules/Wallets/Klayr/KlyTransferViewController.swift +++ b/Adamant/Modules/Wallets/Klayr/KlyTransferViewController.swift @@ -227,9 +227,15 @@ final class KlyTransferViewController: TransferViewControllerBase { label.textColor = UIColor.adamant.primary } }.onChange { [weak self] row in - var trimmed = row.value?.components( + defer { + self?.updateToolbar(for: row) + } + + guard let text = row.value else { return } + + var trimmed = text.components( separatedBy: TransferViewControllerBase.invalidCharacters - ).joined() ?? "" + ).joined() if let prefix = self?.prefix, trimmed.starts(with: prefix) { @@ -237,9 +243,12 @@ final class KlyTransferViewController: TransferViewControllerBase { trimmed = String(trimmed[i...]) } - row.value = trimmed - row.updateCell() - self?.updateToolbar(for: row) + if text != trimmed { + DispatchQueue.main.async { + row.value = trimmed + row.updateCell() + } + } }.onCellSelection { [weak self] (cell, _) in self?.shareValue(self?.recipientAddress, from: cell) } @@ -248,6 +257,6 @@ final class KlyTransferViewController: TransferViewControllerBase { } override func defaultSceneTitle() -> String? { - return String.adamant.sendKly + String.adamant.sendKly } } From 359855f3861eb60e7f5dd82dec0eb1b965502f2d Mon Sep 17 00:00:00 2001 From: StanislavDevIOS Date: Fri, 12 Jul 2024 12:50:30 +0300 Subject: [PATCH 6/6] [trello.com/c/An2zqhSr] Feat: update from remote branch --- Adamant.xcodeproj/project.pbxproj | 8 ++++---- ...> KLYWalletService+DynamicConstants.swift} | 1 - .../klayr_notification.png | Bin 378 -> 376 bytes .../klayr_notification@2x.png | Bin 567 -> 561 bytes .../klayr_notification@3x.png | Bin 728 -> 728 bytes .../klayr_wallet.imageset/klayr_wallet.png | Bin 378 -> 376 bytes .../klayr_wallet.imageset/klayr_wallet@2x.png | Bin 567 -> 561 bytes .../klayr_wallet.imageset/klayr_wallet@3x.png | Bin 728 -> 728 bytes .../klayr_wallet_row.png | Bin 378 -> 285 bytes .../klayr_wallet_row@2x.png | Bin 567 -> 339 bytes .../klayr_wallet_row@3x.png | Bin 728 -> 468 bytes .../mana_notification.png | Bin 2760 -> 2978 bytes .../mana_notification@2x.png | Bin 5980 -> 6625 bytes .../mana_notification@3x.png | Bin 10018 -> 11468 bytes .../mana_wallet.imageset/mana_wallet.png | Bin 2760 -> 2978 bytes .../mana_wallet.imageset/mana_wallet@2x.png | Bin 5980 -> 6625 bytes .../mana_wallet.imageset/mana_wallet@3x.png | Bin 10018 -> 11468 bytes .../mana_wallet_row.png | Bin 2760 -> 2978 bytes .../mana_wallet_row@2x.png | Bin 5980 -> 6625 bytes .../mana_wallet_row@3x.png | Bin 10018 -> 11468 bytes .../klayr_notificationContent.png | Bin 728 -> 728 bytes .../WalletImages/mana_notificationContent.png | Bin 10018 -> 11468 bytes 22 files changed, 4 insertions(+), 5 deletions(-) rename Adamant/Modules/Wallets/Klayr/{WalletService/KlyWalletService+DynamicConstants.swift => KLYWalletService+DynamicConstants.swift} (97%) diff --git a/Adamant.xcodeproj/project.pbxproj b/Adamant.xcodeproj/project.pbxproj index ccdabcdde..0f21beb0c 100644 --- a/Adamant.xcodeproj/project.pbxproj +++ b/Adamant.xcodeproj/project.pbxproj @@ -12,7 +12,6 @@ 26A975FF2B7E843E0095C367 /* SelectTextView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 26A975FE2B7E843E0095C367 /* SelectTextView.swift */; }; 26A976012B7E852E0095C367 /* ChatSelectTextViewFactory.swift in Sources */ = {isa = PBXBuildFile; fileRef = 26A976002B7E852E0095C367 /* ChatSelectTextViewFactory.swift */; }; 3A20D93B2AE7F316005475A6 /* AdamantTransactionDetails.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3A20D93A2AE7F316005475A6 /* AdamantTransactionDetails.swift */; }; - 3A26D9332C3C1B90003AD832 /* KlyWalletService+DynamicConstants.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3A26D9322C3C1B90003AD832 /* KlyWalletService+DynamicConstants.swift */; }; 3A26D9352C3C1BE2003AD832 /* KlyWalletService.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3A26D9342C3C1BE2003AD832 /* KlyWalletService.swift */; }; 3A26D9372C3C1C01003AD832 /* KlyWallet.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3A26D9362C3C1C01003AD832 /* KlyWallet.swift */; }; 3A26D9392C3C1C62003AD832 /* KlyWalletFactory.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3A26D9382C3C1C62003AD832 /* KlyWalletFactory.swift */; }; @@ -45,6 +44,7 @@ 3A9015A52A614A18002A2464 /* EmojiService.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3A9015A42A614A18002A2464 /* EmojiService.swift */; }; 3A9015A72A614A62002A2464 /* AdamantEmojiService.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3A9015A62A614A62002A2464 /* AdamantEmojiService.swift */; }; 3A9015A92A615893002A2464 /* ChatMessagesListViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3A9015A82A615893002A2464 /* ChatMessagesListViewModel.swift */; }; + 3A9365A92C41332F0073D9A7 /* KLYWalletService+DynamicConstants.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3A9365A82C41332F0073D9A7 /* KLYWalletService+DynamicConstants.swift */; }; 3A96E37A2AED27D7001F5A52 /* AdamantPartnerQRService.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3A96E3792AED27D7001F5A52 /* AdamantPartnerQRService.swift */; }; 3A96E37C2AED27F8001F5A52 /* PartnerQRService.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3A96E37B2AED27F8001F5A52 /* PartnerQRService.swift */; }; 3AA2D5F7280EADE3000ED971 /* SocketService.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3AA2D5F6280EADE3000ED971 /* SocketService.swift */; }; @@ -663,7 +663,6 @@ 33975C0D891698AA7E74EBCC /* Pods_Adamant.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Adamant.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 36AB8CE9537B3B873972548B /* Pods_AdmCore.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_AdmCore.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 3A20D93A2AE7F316005475A6 /* AdamantTransactionDetails.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AdamantTransactionDetails.swift; sourceTree = ""; }; - 3A26D9322C3C1B90003AD832 /* KlyWalletService+DynamicConstants.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "KlyWalletService+DynamicConstants.swift"; sourceTree = ""; }; 3A26D9342C3C1BE2003AD832 /* KlyWalletService.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = KlyWalletService.swift; sourceTree = ""; }; 3A26D9362C3C1C01003AD832 /* KlyWallet.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = KlyWallet.swift; sourceTree = ""; }; 3A26D9382C3C1C62003AD832 /* KlyWalletFactory.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = KlyWalletFactory.swift; sourceTree = ""; }; @@ -695,6 +694,7 @@ 3A9015A42A614A18002A2464 /* EmojiService.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = EmojiService.swift; sourceTree = ""; }; 3A9015A62A614A62002A2464 /* AdamantEmojiService.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AdamantEmojiService.swift; sourceTree = ""; }; 3A9015A82A615893002A2464 /* ChatMessagesListViewModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ChatMessagesListViewModel.swift; sourceTree = ""; }; + 3A9365A82C41332F0073D9A7 /* KLYWalletService+DynamicConstants.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "KLYWalletService+DynamicConstants.swift"; sourceTree = ""; }; 3A96E3792AED27D7001F5A52 /* AdamantPartnerQRService.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AdamantPartnerQRService.swift; sourceTree = ""; }; 3A96E37B2AED27F8001F5A52 /* PartnerQRService.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PartnerQRService.swift; sourceTree = ""; }; 3AA2D5F6280EADE3000ED971 /* SocketService.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SocketService.swift; sourceTree = ""; }; @@ -1329,6 +1329,7 @@ 3A26D94E2C3D3983003AD832 /* WalletService */, 3A26D9362C3C1C01003AD832 /* KlyWallet.swift */, 3A26D9382C3C1C62003AD832 /* KlyWalletFactory.swift */, + 3A9365A82C41332F0073D9A7 /* KLYWalletService+DynamicConstants.swift */, 3A26D93A2C3C1C97003AD832 /* KlyApiCore.swift */, 3A26D93C2C3C1CC3003AD832 /* KlyNodeApiService.swift */, 3A26D93E2C3C1CED003AD832 /* KlyServiceApiService.swift */, @@ -1345,7 +1346,6 @@ children = ( 3A26D9342C3C1BE2003AD832 /* KlyWalletService.swift */, 3A26D94F2C3D3A5A003AD832 /* KlyWalletService+WalletCore.swift */, - 3A26D9322C3C1B90003AD832 /* KlyWalletService+DynamicConstants.swift */, 3A26D9402C3C2DC4003AD832 /* KlyWalletService+Send.swift */, 3A26D9422C3C2E19003AD832 /* KlyWalletService+StatusCheck.swift */, 3A26D9442C3D336A003AD832 /* KlyWalletService+RichMessageProvider.swift */, @@ -3093,7 +3093,6 @@ 93C794442B07725C00408826 /* DashGetAddressBalanceDTO.swift in Sources */, 6449BA69235CA0930033B936 /* ERC20TransferViewController.swift in Sources */, 93684A2A29EFA28A00F9EFFE /* FixedTextMessageSizeCalculator.swift in Sources */, - 3A26D9332C3C1B90003AD832 /* KlyWalletService+DynamicConstants.swift in Sources */, E9E7CD8B20026B0600DFC4DB /* AccountService.swift in Sources */, 41E3C9CC2A0E20F500AF0985 /* AdamantCoinTools.swift in Sources */, 93ADE0712ACA66AF008ED641 /* VibrationSelectionViewModel.swift in Sources */, @@ -3219,6 +3218,7 @@ 93E5D4DB293000BE00439298 /* UnregisteredTransaction.swift in Sources */, 411DB8332A14D01F006AB158 /* ChatKeyboardManager.swift in Sources */, 6449BA68235CA0930033B936 /* ERC20WalletService.swift in Sources */, + 3A9365A92C41332F0073D9A7 /* KLYWalletService+DynamicConstants.swift in Sources */, 93B28ECA2B076E88007F268B /* DashErrorDTO.swift in Sources */, 644793C32166314A00FC4CF5 /* OnboardPage.swift in Sources */, 9345769528FD0C34004E6C7A /* UIViewController+email.swift in Sources */, diff --git a/Adamant/Modules/Wallets/Klayr/WalletService/KlyWalletService+DynamicConstants.swift b/Adamant/Modules/Wallets/Klayr/KLYWalletService+DynamicConstants.swift similarity index 97% rename from Adamant/Modules/Wallets/Klayr/WalletService/KlyWalletService+DynamicConstants.swift rename to Adamant/Modules/Wallets/Klayr/KLYWalletService+DynamicConstants.swift index 83e0d41e6..b58ec6f05 100644 --- a/Adamant/Modules/Wallets/Klayr/WalletService/KlyWalletService+DynamicConstants.swift +++ b/Adamant/Modules/Wallets/Klayr/KLYWalletService+DynamicConstants.swift @@ -84,7 +84,6 @@ Node(url: URL(string: "https://klynode2.adamant.im")!, altUrl: URL(string: "http [ Node(url: URL(string: "https://klyservice1.adamant.im")!), Node(url: URL(string: "https://klyservice2.adamant.im")!), -Node(url: URL(string: "https://service.klayr.xyz")!), ] } } diff --git a/CommonKit/Sources/CommonKit/Assets/Shared.xcassets/Wallets/klayr_notification.imageset/klayr_notification.png b/CommonKit/Sources/CommonKit/Assets/Shared.xcassets/Wallets/klayr_notification.imageset/klayr_notification.png index 46d2959c3d6dd15642655e466833157b807511d5..fb15bc8dc27602217b1ec7a0acbd789898b0fff4 100644 GIT binary patch delta 299 zcmeyx^n+1a zKJ^BV*>nZnN1I>1nlR^C#xIle`Y$gn@%``VUtN{8_S@9yM?##EdJ0!aw0D6Bt!ssv zoELLSCZ2t@uGD8^%E^?8(-kVB7bVGP+3AK}J3YIoeq)a3+4`{g+tSpZ&VKt#G5z?P z^5O?Oe*Rc>Cw{B2(VSKOw{w>N^R3_?6Q61nuEk+p8`6)CUs38IsCv@PlcJLt;%{{1CYl7;^B*Ehu+ voU}kmI6Qxb%6^eP%a9)DqZU9y^z{z&ZSzcxKN^@-FaUw4tDnm{r-UW|$5)Zv delta 301 zcmeyt^owaiSUta|i(^Oy#Cm_$(P;_@nFBzEjzAY(J_j=bDt<<9yU21WfGg z)Anqewt3l%*->kXqwcO>(?3n+;B6t%#{nO6S0?4HI`#3v+xlzrbyJR49p3J8^Zlw% zB|H~Tdi+wgd$nciW5)wU)zf#VHBXD!o|G{s*pcPf!Xz23x7^QPFZ~m*aQx}5U+Xu2 zv$(E#B<|<(*7Gu2U}-R+Hz(BX@$?r{j@eH+Quz6*bBUF#R$WYB$s^3=z|+;wWt~$(698cEm|_3` diff --git a/CommonKit/Sources/CommonKit/Assets/Shared.xcassets/Wallets/klayr_notification.imageset/klayr_notification@2x.png b/CommonKit/Sources/CommonKit/Assets/Shared.xcassets/Wallets/klayr_notification.imageset/klayr_notification@2x.png index 410144c82e581f668506fe2950fae075aa7f3d31..a687ffb168402d4e9c27377c106b62e998508e61 100644 GIT binary patch delta 302 zcmV+}0nz@q1hE8=R#C=DL_t(|0qxx(PD4QyM&ZBZg%GF%!3vtX;=2GW8iim37`g=< zhCQ$a>e)cuLts!%2o6Y~p@js2LQE4ToaTIf)X5uhGr6xbY5U6vryC)X0wIyW4i!|B zHT5`KerCJ(9lZS9dkDNLp^@+v9c4Hu#7pL<*&??$^VIP290WwT z_G>WRPT!&*UX_!90WOig3>4L0GOx0Gq$c;A{9={eBQ?3_M1PZi0T>!u+dnq0>R{Al zw{QpaV7QUmI+M1)jBvavp^@+vk-!xhD8oU00w@D8oFJBGxBvhE07*qoM6N<$f(i_e AUH||9 delta 300 zcmV+{0n`4m1h)i`R#41IL_t(|0qxx}E(B2=$MN4H5g|wvt8oQddjT#Wx;=&M9YCRV z25|xxP_L{~rIIKF5hM(&SG-BQ?0540^plz7JM)T{m;dx8O_~U2E<%%W0WTG(g>=;Y z-F$|-{nW5`_?pq_V`}n?lW+kWJ5_y?d33OmQagi>43D0Ru327da&qyIQfJ5OxxJbF zz4z)*czv~)Qkz?!DYdft^&7nWy6L@UKb%V?k+2vZg*eGPJ(YZUzLXkXo*3^kBHZ|A zV|v_TbGpl1Dxs4B0veN$0T_|L2NbHGWNtHiq$cN_{GrY4k(!)yqJNX{0T>x|_K%Hi y4ffyCFPs6rJ$O%Ty-AZM!f~mDlW_qp7WEBRh%omBr{J0Z0000Le@8Md bP!`UAh({}bgI%RY00000NkvXXu0mjfv>k}W delta 286 zcmV+(0pb4G1=t0UUqd}=lu;Cb;gcu`QG#GGRo3AST!GllBK+Hh;3Dj@gls@tAxlW3 zmHD%ZPMAG>#XEe@1Gl}^%emF%99`~aHxP0>5R;Gr8j-&^7N^4^KEHi6Kfgbls_lo{ z*?zp8Lts*qj{zHzzY{?Y<~zi%t0%Lh=coVY#p!OAvN`)Vo2!Re%H8$x+~2HoW*khE z+t-^}(x{h0paBYz zzc3>Qv$AA!_AqO5cYQqfH|v}k2NUJDAHQc!_B(zq&QE5IJl~T)0xOfC0R;$ibh(?| kK!{0`e*r6zza{HIXaE2J07*qoM6N<$f1a zKJ^BV*>nZnN1I>1nlR^C#xIle`Y$gn@%``VUtN{8_S@9yM?##EdJ0!aw0D6Bt!ssv zoELLSCZ2t@uGD8^%E^?8(-kVB7bVGP+3AK}J3YIoeq)a3+4`{g+tSpZ&VKt#G5z?P z^5O?Oe*Rc>Cw{B2(VSKOw{w>N^R3_?6Q61nuEk+p8`6)CUs38IsCv@PlcJLt;%{{1CYl7;^B*Ehu+ voU}kmI6Qxb%6^eP%a9)DqZU9y^z{z&ZSzcxKN^@-FaUw4tDnm{r-UW|$5)Zv delta 301 zcmeyt^owaiSUta|i(^Oy#Cm_$(P;_@nFBzEjzAY(J_j=bDt<<9yU21WfGg z)Anqewt3l%*->kXqwcO>(?3n+;B6t%#{nO6S0?4HI`#3v+xlzrbyJR49p3J8^Zlw% zB|H~Tdi+wgd$nciW5)wU)zf#VHBXD!o|G{s*pcPf!Xz23x7^QPFZ~m*aQx}5U+Xu2 zv$(E#B<|<(*7Gu2U}-R+Hz(BX@$?r{j@eH+Quz6*bBUF#R$WYB$s^3=z|+;wWt~$(698cEm|_3` diff --git a/CommonKit/Sources/CommonKit/Assets/Shared.xcassets/Wallets/klayr_wallet.imageset/klayr_wallet@2x.png b/CommonKit/Sources/CommonKit/Assets/Shared.xcassets/Wallets/klayr_wallet.imageset/klayr_wallet@2x.png index 410144c82e581f668506fe2950fae075aa7f3d31..a687ffb168402d4e9c27377c106b62e998508e61 100644 GIT binary patch delta 302 zcmV+}0nz@q1hE8=R#C=DL_t(|0qxx(PD4QyM&ZBZg%GF%!3vtX;=2GW8iim37`g=< zhCQ$a>e)cuLts!%2o6Y~p@js2LQE4ToaTIf)X5uhGr6xbY5U6vryC)X0wIyW4i!|B zHT5`KerCJ(9lZS9dkDNLp^@+v9c4Hu#7pL<*&??$^VIP290WwT z_G>WRPT!&*UX_!90WOig3>4L0GOx0Gq$c;A{9={eBQ?3_M1PZi0T>!u+dnq0>R{Al zw{QpaV7QUmI+M1)jBvavp^@+vk-!xhD8oU00w@D8oFJBGxBvhE07*qoM6N<$f(i_e AUH||9 delta 300 zcmV+{0n`4m1h)i`R#41IL_t(|0qxx}E(B2=$MN4H5g|wvt8oQddjT#Wx;=&M9YCRV z25|xxP_L{~rIIKF5hM(&SG-BQ?0540^plz7JM)T{m;dx8O_~U2E<%%W0WTG(g>=;Y z-F$|-{nW5`_?pq_V`}n?lW+kWJ5_y?d33OmQagi>43D0Ru327da&qyIQfJ5OxxJbF zz4z)*czv~)Qkz?!DYdft^&7nWy6L@UKb%V?k+2vZg*eGPJ(YZUzLXkXo*3^kBHZ|A zV|v_TbGpl1Dxs4B0veN$0T_|L2NbHGWNtHiq$cN_{GrY4k(!)yqJNX{0T>x|_K%Hi y4ffyCFPs6rJ$O%Ty-AZM!f~mDlW_qp7WEBRh%omBr{J0Z0000Le@8Md bP!`UAh({}bgI%RY00000NkvXXu0mjfv>k}W delta 286 zcmV+(0pb4G1=t0UUqd}=lu;Cb;gcu`QG#GGRo3AST!GllBK+Hh;3Dj@gls@tAxlW3 zmHD%ZPMAG>#XEe@1Gl}^%emF%99`~aHxP0>5R;Gr8j-&^7N^4^KEHi6Kfgbls_lo{ z*?zp8Lts*qj{zHzzY{?Y<~zi%t0%Lh=coVY#p!OAvN`)Vo2!Re%H8$x+~2HoW*khE z+t-^}(x{h0paBYz zzc3>Qv$AA!_AqO5cYQqfH|v}k2NUJDAHQc!_B(zq&QE5IJl~T)0xOfC0R;$ibh(?| kK!{0`e*r6zza{HIXaE2J07*qoM6N<$fP+10Xa!+<#MF0Q*eMv+?R7l6|)!hn!Ab$*iQGd#unpwU7yLO`$ ziK0Seu= delta 362 zcmbQs^owbNWIY=L1H+2jm)w99XMsm#F#`j)FbFd;%$g$s6l5$8a(7}_cTVOdki(Mh z={_sG!3(af*I2EbqS-Teb~#jE zP`tH>xuyDw)RkM8o(L?72oPAdb|2rV)gMlLmW;12{L%Gm->K|5wjWiNb4^O_aXxAh z0w#9$X?wO!+q`VX?5H)xQFqs`>7S-@@V1cXv0Se$LyyZDg1oZxx`9Vt1c$6-0hgjGpS-e=lDeRO5=%)BgQ}LG zPXe>LKBux4kD?mCoV=KUiL{igh^{r86a%Xi5Xgu*_OW>Z%@HgK@(X6Dj@oVCWP4=B0S)5S3)j>R)>io4SUbm{=uWCIV zZppmF|MSJ{+})RIcer2j^)3K|_JX%lmS>x0&6?wPeV3m8IT=)N$L9NWv9D=4hOwu3 zZeEkn{U2Ia@r02b44%hExsXQ$uV8LTTpfnH$nboFyt=akR{0JYJ1 A1poj5 literal 567 zcmeAS@N?(olHy`uVBq!ia0vp^c_7Te1|*L~tNjL2oCO|{#S9GG!XV7ZFl&wkP>``W z$lZxy-8q?;Kn_c~qpu?a!^VE@KZ&eBxig+Fjv*C{Z|@rFu>{H-|9D?XP|-tVbs=k1 zHKU%wF5A|(vJMMN*$SD&1Jx$hhpHqK^}T(vQF1xp(H@z29H?SJZBu5i~n`zUJ0VzrITE z`LpZg-Zc9;-m19V)oO9l#&&8=<-RFWaq}eJ8!6rSk)B+2C#iVX=@_kr#CrwJ!>i_} z>msFZ%|@6F}?cK?$89LBx275=$GJ@*9FV>F-idr#b&Hc{Xpp+?uHR%(GAPF}tx^Y|}ih zo#srJNmfspm47&2C(~!m-Yi+(6sNgL&6qd6vk&Q6Wd6}JH0T-V`9DqWJ3Z-1&xU4f zU`qY<+{BW7NW8f}ork`tr`bIHh!pLYL{IOw`@Iz1BY!Y4F)=YQF)=YQF)=YQF)^oL zMy+pppBv7W{&;6!T)K1BJ7*sd_p`G>rt`nGVWwbWVn1SHVvfKJ$0N@TdP*g86C0Rv woL$4Nde0E+nD$6kmD%U!B-i%6BZQ1TUm-=se$D~dS^xk507*qoM6N<$f`Hn?TL1t6 literal 728 zcmeAS@N?(olHy`uVBq!ia0vp^OF@`}4M^H*+uj0FoCO|{#S9GG!XV7ZFl&wkP>``W z$lZxy-8q?;Kn_c~qpu?a!^VE@KZ&di3{1J6E{-7;jBoGSW=#ncX?QqUgCnph!7%jN zL%x{C8)udN+-`lK^k!2_jzhGfx5whCKR0*z&9JRGYF%@ldHde0r*~d`DiixI&0L_! zMnKuC$i=fyi4-nqY~I8DZ9%I)j3BQGsqU;pgv z?){sm{H^u=_37W!m^t&$NLB75)j#Q5t4qGsCwyy{n@ni{5D|Xtn>VEte>2D~DzCNq zZvJ|XB)jm_?ehE6eZN`P>7DaW>$SO0YD5&5?3{hqp~I7^aS8OwXO5ZHI+e_&r5V74 O$l&Sf=d#Wzp$PyPswKJr diff --git a/CommonKit/Sources/CommonKit/Assets/Shared.xcassets/Wallets/mana_notification.imageset/mana_notification.png b/CommonKit/Sources/CommonKit/Assets/Shared.xcassets/Wallets/mana_notification.imageset/mana_notification.png index 451cc20dac823c8db3a6858d8e7c6950a48c04e8..fbe64f4f37b44905056185d41c842a16106e32bf 100644 GIT binary patch delta 2922 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 U4+#BW)c^nh07*qoM6N<$f-VZK)Bpeg delta 2703 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 delta 5948 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 literal 10018 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 U4+#BW)c^nh07*qoM6N<$f-VZK)Bpeg delta 2703 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 delta 5948 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 literal 10018 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 U4+#BW)c^nh07*qoM6N<$f-VZK)Bpeg delta 2703 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 delta 5948 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 literal 10018 zcmV+-C*9bIP)@G(vQVoCUBqmXZaI6fGum{1gf>?|o5(5-P zb8dH(xeye!9h5eqE3gBq(ga^gJG$9*T}=}vP5KzI1Di;FeFTF@1Hmy2`hT9Nz~0Tn zpn7JYqnnW}b}l2?G=##(F{f%mNnst|P8f%Wkylk4STSrzMcI4o`dz5rk8s+E{p9Yu zyK#)-m?9-zwaSh4TgIciYbHzjS?KJVk5FVXBcP%QK#WW>_l)FvWN7cT$Hi(+bt@{% z-vOboqNeJ7xX14yKUosSF@gb4O4bzn5maX4V8f*dM$bbqGzVeU>^ecJToE(%cO||c zV)R{BlfI9-+TWsM=KEyzq9_J11|%sdPuH?#Q*gNLY6OGlqr3YwL}Mg*Q;Z~8uAS78 z=2LSWE?0~-@gJb9IL%i`u8yaF`!6EAANKzwrsf^q1d&Ih_exmD(MBAQX9$E zfVn0nOE zSt85o=#imf`ctoY?O9R!2C7OQ#)(7!%%+=S=!fWcq+|mZ1)=WwXga(C9qm)C*LKBD zOe(HlFRZeB6NU}F7ufwOS-rYn4UGB~De1jSFT~L!53mX7xoJ(bWpYqSc?)4iGP!8V zGyM|pIt;H{MqXO+7xWYK3sTbi@1Kn313yM*$EO`5iC&=(RALfV%#{`YjnOqjY;3_3ZtU@Y4~v;`QuNT zQKTqJQqm`$@S=IoWoT;pAsfUD(*lz>Q+(-yH439*I`m{@;S@~m#n5sfi=6?mVr`|=LShfvCgrXrO zegAzo{_DjrVDH`)Y!#+&?dSwCg>+C!c?)4iGN$s>A#x|KU9M&ft-6!^^+(U5NKh1{ zq|g7n7H|FI2ds8n#75P`9;qyZ^|@EX#H5J}CyB`iLe-VOV)L6{Coir%fC8i7q@)il zKM#!uoZs$opv>;Uy|23&AgJ5KJvgsG=1_08_A??&*RvP1CSFH={+%_*1M)&jy5jzev48h-2!$(* zGeIyzvxV_DZDz0}%~RR@8_dC9&H5K3=X=b>MB~g6F&!nhjeN{@&!ry3=;|BEAD;Xp za*UjllK%TW7oes2cL)Y5v;c?~x{!Rr=Y;$e`){%$mn#1I_3Xdbqd-J7&SEDf71u9C zOjjdL7;_W(?ZYo4hft71(EnI|1zH;ah!7)Wk|+d7yY3T4((l1cKH;Crk}^e+f6Tc2 ziR{1A6p1)Vb~`fttU65OjDBYtClSjtnK(Hjkzv@e_c!$Ocb|_OB4?ze-@EH_9BNpF zaL6l^U@L{5ydJ|YPPCbndF=NiiFll%BymEAo{Xs+v8N-OOfclbo~9S*Rm(3xj*t^l z(jV2Iha*itMl4oqy}&YvX(WG!;!H};Qu@YcSm+rx!a!bx5JXUyaGV)7X44@PCr4MH z3S0NCri<=76FGq6q@+JxS%=*_pF%8J7Y~q4a5iFQlOMq@DhV9HD5B}JYNJs)^<-r8 zMOH_TjBJ_&?gfKYXxRHZ`sMlwa2Sq~l0M5O#y|P+bwonP#RKdVKsI7#%JHV#Ax_5i zj3a&R$&Ay;Ml+IR)nOuM^gG#yAzPTNj?O?Gw(fqD-uJ_5I0(l`$(9a1*tX@D2z5_! zAvi)xjgV_rqO*O0 zP-a^y9HOto4`)#ZbGwP8jYhg4C?}FT(Jc#&&13Kbws((It{s!ucZ_ClS*t6K6~7)%3DEzXk_jo0Rm4W%JN- zaAmwSMH65v6EZTi1J0tu#15l-dN#@u%}k!J;g>L1n(+DGilh!%Vv5+!C+zn$E~l3- zvpt7NU<35Ydxzuj;lH7~YpNCi`4tPx@`;O+75j6PsrV;bZ+tiAkli*{et7AWvj4_1 zcN}v=+22*n_cEXN;P?>(A?Dhlt>N!u{$^%-GcDZ8kH2IS7M%WRQvcOPScE-NK6J}3 z(AM&$9)ps8K8abwl5nX*eQd7x8CKFQDP$6|!^B1@d1!>2s%R@sV-$^qqTp-zhnbRp zu#1h%9WjejfS9rmRAuRETyXI7%z?iS{GkL6X>_RX!xbOy$`h-Bg=j zEVcD~Y50Wc+7OeoQ7_D@JoovAl7Dk)%bwLlY-0&Bbo0F6ORgs;76bTpy>QC?RG(jn z*l%Wcs!S*{9nrS!-~RaR4`Bh8N|OHS$w}Dp_S^9j&f)=ZrgpTdV+gd`(oQQLWy+po zggi=fW20G($+xR4U<{mKfrw@}$Rc=|wE){``fjK`wo;uih=pa|^LZLEdej{9;v;(@ z32Vi;Z{12n86ibG*LK20e< zpT~;ZgT6Lqv&&8%1VY1bsBtA-`dA4hAx%p9<8NGpVCThB#saw~<|am{btwZBQE)DE zLa&e6x6#yY9b)n(_8ONqlFlV~d<$4>!socvl(1AkTT?EY&P@4^uFs)i-{r7isxauP zn`+P!dJBQT@mc_K-!#k0^99Z`RIx&CV?TO_k#T3DS#!chQynP-3%>XBvyLrCw2Ek)nfJ`(bmbGaOl1FEUI0RJ%u6(oNn-Y~KXE~6 z_I%fap03XBT9lW4mtEZqK?v8B^q2QfMZ+iS5skWXvfbWs9f=EGWBQ5KQQqa+;)1`2!zYs)sWyKXv>B(KjEs$Z1?JOAVF}5>?YV;4Q4SOP9VqK)#EpFi zRzMJ91D#dNKZ8K~S-OR8)mTW#+a;#caY8~qGmMY0r=;F2Aj+5>S0s9Hmh(78pOKE% z_Dkp$U;7LMU`opP8RKn-9*Q5!*T*0m#I&0UR*0FmIJ1QD+&;ZP{m5+KuObiEDaTZw zUznxM^dV;aX>NWn&LcdjCP77raE#!Oe;G0#JHo|VI2Tp z!aPe6$QK8Q+0lI}wgfJO2@FXY|13yL(+UtOSLm`eiLAUO9X4$=ic_R;xSN^Nmq)FG zAKJiIl+1`}_njX;XxevZ1x>cPSzw$?KfUKd1UjbbM&2jP#8{&+WC@eiA#0;kaq7ur z-sc0GQHEtvIB-HvQLLp?Hmt2<8ovCk`7nSnDFf~I$wh91m`-GZtc^~_2@`p~l$h&P z8#|aNm@ml-k^IS~W7odBVSucpq(56W7lE#`Z56tZyh&J2wB~^qNPkNV9 zgwiQM%xpS3y3U|C)SrSZ$X-(h+pY(VD%MD4lbCrSGSQDyBxB9u)YDN_e-@o~_BeofhN_!5KzmAcAABJc0SbSloIL8NQ8bO98qHWCS&b`o}v`wE&`YQ=1HBF@Zv$q$?s zGm`tHtq_wWF3j>L^|~`Kn_hk2G-RM}P1&(u`<9JS0azlHO=4Ol^6=5XwYMUw`tZ+n z^Vqsj9AxU zCC;*P;QBjQU#SfIi&5dQ8}EKN7vYFIH#TOooA24|Msb5bG|4S}c8J*{Bbbk&=moTX zRoXcx={2RY`4raH&lXY!BZG{>Y!Xv6&Js3Lef?d)h~Bfd6jo)mwN>C>>*uh>KoPf5 zG|p^cyyZSxOjGD+D283WRlb&BdMrGmwIGQXXwu1R7Rs*9^HNrbwI$ySU)9 zz@*;p3a=@X?od-5Hg1_AZlm3d=YDgMlX5?_8lA%_V)6?!9kCd}-o2M01wEvs@2_$r z)P5=eF@uc4gyb`b>13RzpAVdS2{OTJ%B0)fFb4Y$jLIJ|8))x9q8PC)CPp+FVv@v# znT}B8Tw1@T=hd9vnsWP|G3@`jJwK2kgcbStHL<5d@7|PIz!iNL3sP%Jl6Wy{!^W9t zZmG$wjmc|%M$z6Ptu6UM1xedT76(`-rrF>p6g~x8UmBk@rnPD=WpY)BsLINg#mkuV{7 z8^lyq;L2OsNP7&jBfa@fb*)D$@$trKtk128+h`@7e9C1#?S0d)7_ftC&Pqj-^ks<2 zFZAwpc3(grewe?;mZ&LPca3CBJ;C`JP*&aoF}b^xtyYcivoMebE|xmb$#l(4HQ2Rl zeBZc?Y_yWjk7L?fmBj#V#$Tf8D><^|sV8G9r$fw8WD4Hj9shWPMoKk21F^8n)G!&N zt;ol(C5d_3g=~0ceom+M6Kd#o?HGss`$o#yD4R}xINn<^%`Y_8M70yyL`Y?nPQBlm z$z=|H!Xeh1a!u!dYNU*YPd1D|@?C!n>p z!uf|M)!#?8vm*;R?%7SXZ&F$%mB>9KIX#&`XfnUlN;B9wFK0x9RUIaUK4Khj-PZxH z-e+q2LaPm9rY;sC_-O4+1iF3lHo{Ck#pmbwtSb;J`9rZf()Y~D)N3o{srNfGV)BdR zbu|2G?j@?2*hFcf5u0H`@>z(ltjZT6+DRdq_Bc_VdNQVR31WsL@#RK^uBmr{M#owKQUJ6mSB(AqFH9vH6?sQeLsxt8w< zV}HzD0G!cxO@>luztFW2b5Mn=WV}28~ku^VXzcW#Wc5T!noMGAp)0<7cq-2~6!9Yb{AsfVm zfI%|EEN3Ng`7J>M5n@K8 zRSMiClX`BZDkX{kQtxHTWec++uNQXyRczHJZKu3th)$lHxg&?Fuz%-BiFA_mdoYtX z2{V$hToy!3hZAv{=_o5Xp1=A~Ypg6!#LNtvd$Hym0#~cIb9tPGK6z}SL*|~D zoUS~9)D9@Saq9gp685nCjVOjn`xq@?1SIaIUYD^o?Mv9e#+8eMcbu&$xr+o`Xjngn zH8zShVy608AukuFg=BO7xaXVRxJHU-OH+>cQUb7usO zt^CaT3~;jHG1#_|oD#|vns*I_#~;LyQAZ{6k=UPLw<9m4!(khZba0>Xk&#lR@daKP zrAatJ%oFATXD&ppp$&8>a*0EmhQV7Bf`4e2bz;Iy9?lcfG)@U(X6llSQ&p(~)umM* zR+cd)hXp~we#v`$T)8@X6e!Txn4;z#84M4T-TjED(i z`G~I~{+KyR64T%2fS8$KE_X* z5$Tcl8etG7Sm@O?XgT9L>~0(@CNFJ=12$TX)9q?y4>xTxRVJ)dkeIy59y1I11yNA&JxPCYilS+>z)b=c}w)=J*=;~n6)sY_?eqDKE=Ft^BlBy zRp{u*qMtynJay#>AhT>L6K7Y~cGiw6N1T5;vJmsQnQT7tN)!T4?GlpSRkWolUTezd zElIz}r|vFY1k5<8CzvmH^0T2n*fty8!4hM=Msb_Ti`eK?oG!IRVUufZrb=aq*>jyi z%&I!zyd{Y5kt_hTLZo?jgv|lBY#M@ar`sMePdgj9F!lYU-nIO;_6ls=IYS%x80j^N z+j99k9A}BQO<@bTJM9~mEi6IIQZ~X~@HN&S%Fjq!ABCwYxr=ryX!)oL(V%Lr&?ip^ zuDKDJn^gFw<)mwD8HP=}QqEHnA&H0`FwkLzm}YSX!mRl&8`|WIVOhd>&3N{gfg#T9 z9=8r!keV{-!mVx`-BcOx2TJARu;Hv9c?X{=NlT61uBV3mW3abzv>4Hd&9Gd_kF0G{ zP;>ki;UCH-gu64Z2gc1op}|clBq_NIHhR&%tF-UtjijF$#@|m`a<}H|rl;?gx-B~< z<49{&Zis0pPvFSlXX0@i6?E*~0M#ASj|lb>GW|ke+65>Iko=Fn^;{<-W!L_cK}n{c zymqsi@$=XAeBGi?a&&4+?kHOiS-<&2bO%bDFHa$PL1OC3_&gD`HE&VKx%Cm&H0*cQ zFy_Xc0-X8uY6)geL5)N57QMe6Gl8+={vkE9JVk}qcyy7R7MPrJkcR5^yzJI`(HT4y8j)^!z# z1$4gU!*SX51Y475!>f!bk8y;B%1Q%wcE8To~}f|>-LRE_$6#2 zcmBO>q+N|-f@W&0XdFL4pmi-(Ab94cSj~Uv;BXvjtn1B$R9`PFTbUCR`K-Ss#&W5?TV2aN?MP|WwGj#%?8L%6 zuX=@K_V4kjpE+M-LwaZ4({>(-8mh<;KIB5T#|QuEe&9=Yv8l5fq2Fl_S=3yRmCq+T z$FUX45QYpnB3_<)G7yxrvLDmy3A2IDMj%;JR*h_A#1x+zf{s7&EMUroC{}2u7tdfP z)rAiDKo_tYa-{gKDVaVppBvq^V?0|{_V;E+Z>IDOGm;UlDf`G1V;zKS#rP5YV|*GZ z$-Fz-*mC1*!X(TL8+{^h`eGEzNLvqt6wg2>%`v-5zV=y=Q%{ym5j7m>WV%Smg`L|b z#MjET3_-7NxoH;EAwtZ`^0&y{cgMf=+uNHa%IoGzb;7Dx|M4{Tlq)@-)+09cbv$BW?NJix zGx&$Ffz493wk_5VDm0WL>r<*Hp8)SN)(>~dZ&KmSw`w6hZ7mfzxOX_4lRqH;&JQwV zASjn6PZD7%eN3M>fSS^^$)EM+M%B1oY-Q(PJ%5X^{q&oGisBn->!FzDDY;We*TVPM zEg*g`tio#ChZ^c|_+X7#8Jo#it{qcq>log_{P_*&Nmo+llqF%-1g{Z_h>x`AvL<_Y zv5vI$P?$lCuB)kn_sKg!sw-d>b|12RJ4d3UwagkZMdh>U$RuV(*?Z*Nb0f*0q_-QT z!(V2Eqo#%(&(^aiTI&ZD3Ou1jK}fF~o_oIlWrDpHhL@+zK&Ovm#N4y_xcKK;q={)K zEc2en9Yyuf)kr})DJw^O1b4}MX+O+VUdL+3ldeKBkF@ns9L=}uw$DPn_;lEX6WtL$ zRn)L)O#I^@S&3tpgv3Bse1M~@h2Q;tYTD9B$(ryk)`b5xtMZCbY)$*CtcRYyx351y z`xGE8s8g@_6kK0&>dZ}N9x}co{@~8x*|*anOPH0~QBPNS*KPC< z)<>DQ95|DWw0-u@9xoIMJC@L%e1Rdy-lFYsJAl&}dsG9}M z_#*n>NV`a|G;ewRXUBE{R#hH3law~AD;QG81agUh;+?=~34vCMGNMP%l1w=blv}_xKnkg+n@_Ru} zHsuN%;Q0MdXN%vk3Z$!c=JtiQ&T3v-?~&? zQAW;AxxtKCjp;9Y*eG7(?I~-je$Up$wqX!r@Ujv1^jkGQ$Iu2kH0Q2sj~~G!DSI%j z^f6OqD#|zFvB&-b0~nGrKGW_hzXyXb2j8S}{Ix98Cm>%StWTM9N7>~1&N4(gUCBu0 ziJA2ItHVQT?jdO(w(JY@jeLjB{1b@h0}R3#6WB<*?lj~R`C5&lA&SoJe(lXm4y(lU zG9LMSe}-wgOh6VbVvmdGeheZzMxFzVyA1h7ewR&ST_jG-9>@}tzxPo)Y+2?yw;sf{ zJfFMj6)2v+V-S5YWGb5+|042@LagOSk0=Q2_V$jZWr$f`{(C(1=xY#w&=8T$om2Xz ze=&mLkC{a(2BD#ZjkKpN0o>)tJ6J)hB>&5%kpnJ-*&L~RcvyU1(&Y}Ks$wY-oB|8KHud8x%=<}Ng;bc+Jwm%xR%@!_D>2%?1muZ-dG9; z?qjrX!7&e(+q3RqBkl1hB=X&S_qZ5Ec$okn5zhmvRv;Z3Tx@hTfJRh44IsCx3`lZPPz`DKUFVK1P)`*K7>SKwGg zEnCx`Q23;4D>?;!WjM(Cn41;2rp5I8lcoMYk^1jF3rR@7a7<3A?}Ep_luZ^N!Lf#l ziNMU;VX|c)FNn`Y7qF)6sWICqV!Kj|O8OqP36rPY2@A0FsRnZ9le?k#rTPi|9(+JE z<5uK)OwRBmWgH^4sz2pmP;U}jpVgFPe`f9o`o@$oa$hWIvNi1(YY0o$D;`ts6?qRk!8vZrN; zz5t2`R&DX*l|>9L1@dHemOJMaJoaZE#n z|8}zE`#*$DI5v!oK7HG>G!QJzhZhG?1n{kLE&0LCZ~%^dC{Y+f$W1CtvbP-Y14h&)dLurJ&`bMV-8P|*)fPC(I zYm}-XR}#0o6N4CdpvqxYDfy~v@%LUq4v^DDT>AXdiy}w6{y=D~*iY#ngdhmih@$$h zB42rIHFAWU)Rak(MUTJgsw%q@gbWUT1_FqyOCi3?a!E*zoRX4*EL!mb{G~TBVm4wB z{TD>(guCL4VEg)at*Q5o*>iL; z4R)_UEN1<)TZ3>Ip4VM=|a5G($dY z<;U9(^=yxgtGv^7^JD)X1w`TBfMTEvZytpsU5}u#`>K9LmVtu!anI_DxM0Q|tV$|UGjU%d&tj(!~-k^G%PdaS^wwxF(TDUL5+ zO&)*T;TL`Eqi9LVK`*(f2BE;CI2^nNq1fPQZ+78Qq8RFZ8Xk2ydF2;PC{h$PDU+br z-FgD{wSAxUH!nhLa3mxRzC=>#eFe3pcaq<&D*7|*`vobJpw}$92s>IIMrU-^;3!=H z@xw|zA7XgPH^}dPR?ul48T2bsa?tvE1$z!H!0z_PaVXfoKNy)yRC%^zWZ6BKI^qu^ zM>-c1`W-2gp!@^Xm)~$98wf2&OYj^-XunO1V{j<}l)B%?#L6FFeC-SUjf_bQh=QaG z7tcj&XfZmXSE4;!fU}+pi1_i%$`Mqu>7B7vPm!m7@Fw~>22|}r7vC}oja`@ENcehm zhEE*OwWo_v_+1;=FsN$_rbJ?hUA({fGvXFUf^xl77Wb-KzxYf1r zlGib=`eoGmHjqaiX~zJ@F*P`#&)0kKTFY28cFsX4Iv+!VU z652yPmR)ry^-c$kRwEcGL6Ft3k(l;{1pbv{HR;$AidT)oLe@8Md bP!`UAh({}bgI%RY00000NkvXXu0mjfv>k}W delta 286 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 literal 10018 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