From e044599007db56eec0fcabb9a68c6e1e6a64e76f Mon Sep 17 00:00:00 2001 From: Quantum Explorer Date: Fri, 15 Mar 2019 20:06:48 +0700 Subject: [PATCH 01/34] ported over a lot of views from Dash Sync --- DashSyncCurrentCommit | 2 +- DashWallet.xcodeproj/project.pbxproj | 98 +- DashWallet/DWKeyValueTableViewCell.h | 14 + DashWallet/DWKeyValueTableViewCell.m | 24 + DashWallet/DWMasternodeTableViewCell.h | 16 + DashWallet/DWMasternodeTableViewCell.m | 24 + .../DWProviderUpdateRegistrarTableViewCell.h | 22 + .../DWProviderUpdateRegistrarTableViewCell.m | 24 + .../DWProviderUpdateServiceTableViewCell.h | 22 + .../DWProviderUpdateServiceTableViewCell.m | 24 + DashWallet/DWSettingsViewController.m | 10 +- DashWallet/DWTransactionTableViewCell.h | 2 +- DashWallet/DWTransactionTableViewCell.m | 2 +- .../DWKeysOverviewViewController.m | 2 +- .../DWMasternodeDetailViewController.h | 23 + .../DWMasternodeDetailViewController.m | 169 ++ .../DWMasternodeRootViewController.h | 28 + .../DWMasternodeRootViewController.m | 55 + .../DWMasternodeViewController.h | 16 + .../DWMasternodeViewController.m | 193 ++ ...pdateRegistrarTransactionsViewController.h | 21 + ...pdateRegistrarTransactionsViewController.m | 97 + ...rUpdateServiceTransactionsViewController.h | 21 + ...rUpdateServiceTransactionsViewController.m | 103 + .../DWReclaimMasternodeViewController.h | 21 + .../DWReclaimMasternodeViewController.m | 88 + .../DWRegisterMasternodeViewController.h | 20 + .../DWRegisterMasternodeViewController.m | 212 ++ .../DWSignPayloadViewController.h | 30 + .../DWSignPayloadViewController.m | 78 + ...WUpdateMasternodeRegistrarViewController.h | 20 + ...WUpdateMasternodeRegistrarViewController.m | 101 + ...UpdateMasternodeRevocationViewController.h | 17 + ...UpdateMasternodeRevocationViewController.m | 27 + .../DWUpdateMasternodeServiceViewController.h | 21 + .../DWUpdateMasternodeServiceViewController.m | 107 + .../Masternode Keys/Masternode.storyboard | 1746 +++++++++++++++++ .../Masternode Keys/MasternodeKeys.storyboard | 202 -- .../DSTransactionAmountTableViewCell.h | 2 +- .../DSTransactionAmountTableViewCell.m | 2 +- .../DSTransactionDetailTableViewCell.h | 2 +- .../DSTransactionDetailTableViewCell.m | 2 +- .../DSTransactionIdentifierTableViewCell.h | 2 +- .../DSTransactionIdentifierTableViewCell.m | 2 +- .../DSTransactionStatusTableViewCell.h | 2 +- .../DSTransactionStatusTableViewCell.m | 2 +- DashWallet/ar.lproj/Localizable.strings | 6 +- DashWallet/bg.lproj/Localizable.strings | 6 +- DashWallet/de.lproj/Localizable.strings | 6 +- DashWallet/el.lproj/Localizable.strings | 6 +- DashWallet/en.lproj/Localizable.strings | 6 +- DashWallet/es.lproj/Localizable.strings | 6 +- DashWallet/fr.lproj/Localizable.strings | 6 +- DashWallet/id.lproj/Localizable.strings | 6 +- DashWallet/it.lproj/Localizable.strings | 6 +- DashWallet/ja.lproj/Localizable.strings | 6 +- DashWallet/ko.lproj/Localizable.strings | 6 +- DashWallet/nb.lproj/Localizable.strings | 6 +- DashWallet/nl.lproj/Localizable.strings | 6 +- DashWallet/pl.lproj/Localizable.strings | 6 +- DashWallet/pt.lproj/Localizable.strings | 6 +- DashWallet/ru.lproj/Localizable.strings | 6 +- DashWallet/sq.lproj/Localizable.strings | 6 +- DashWallet/sv.lproj/Localizable.strings | 6 +- DashWallet/th.lproj/Localizable.strings | 6 +- DashWallet/tr.lproj/Localizable.strings | 6 +- DashWallet/vi.lproj/Localizable.strings | 6 +- DashWallet/zh-Hans.lproj/Localizable.strings | 6 +- .../zh-Hant-TW.lproj/Localizable.strings | 6 +- 69 files changed, 3564 insertions(+), 292 deletions(-) create mode 100644 DashWallet/DWKeyValueTableViewCell.h create mode 100644 DashWallet/DWKeyValueTableViewCell.m create mode 100644 DashWallet/DWMasternodeTableViewCell.h create mode 100644 DashWallet/DWMasternodeTableViewCell.m create mode 100644 DashWallet/DWProviderUpdateRegistrarTableViewCell.h create mode 100644 DashWallet/DWProviderUpdateRegistrarTableViewCell.m create mode 100644 DashWallet/DWProviderUpdateServiceTableViewCell.h create mode 100644 DashWallet/DWProviderUpdateServiceTableViewCell.m create mode 100644 DashWallet/Masternode Keys/DWMasternodeDetailViewController.h create mode 100644 DashWallet/Masternode Keys/DWMasternodeDetailViewController.m create mode 100644 DashWallet/Masternode Keys/DWMasternodeRootViewController.h create mode 100644 DashWallet/Masternode Keys/DWMasternodeRootViewController.m create mode 100644 DashWallet/Masternode Keys/DWMasternodeViewController.h create mode 100644 DashWallet/Masternode Keys/DWMasternodeViewController.m create mode 100644 DashWallet/Masternode Keys/DWProviderUpdateRegistrarTransactionsViewController.h create mode 100644 DashWallet/Masternode Keys/DWProviderUpdateRegistrarTransactionsViewController.m create mode 100644 DashWallet/Masternode Keys/DWProviderUpdateServiceTransactionsViewController.h create mode 100644 DashWallet/Masternode Keys/DWProviderUpdateServiceTransactionsViewController.m create mode 100644 DashWallet/Masternode Keys/DWReclaimMasternodeViewController.h create mode 100644 DashWallet/Masternode Keys/DWReclaimMasternodeViewController.m create mode 100644 DashWallet/Masternode Keys/DWRegisterMasternodeViewController.h create mode 100644 DashWallet/Masternode Keys/DWRegisterMasternodeViewController.m create mode 100644 DashWallet/Masternode Keys/DWSignPayloadViewController.h create mode 100644 DashWallet/Masternode Keys/DWSignPayloadViewController.m create mode 100644 DashWallet/Masternode Keys/DWUpdateMasternodeRegistrarViewController.h create mode 100644 DashWallet/Masternode Keys/DWUpdateMasternodeRegistrarViewController.m create mode 100644 DashWallet/Masternode Keys/DWUpdateMasternodeRevocationViewController.h create mode 100644 DashWallet/Masternode Keys/DWUpdateMasternodeRevocationViewController.m create mode 100644 DashWallet/Masternode Keys/DWUpdateMasternodeServiceViewController.h create mode 100644 DashWallet/Masternode Keys/DWUpdateMasternodeServiceViewController.m create mode 100644 DashWallet/Masternode Keys/Masternode.storyboard delete mode 100644 DashWallet/Masternode Keys/MasternodeKeys.storyboard diff --git a/DashSyncCurrentCommit b/DashSyncCurrentCommit index 928bb4415..a29b3fe4c 100644 --- a/DashSyncCurrentCommit +++ b/DashSyncCurrentCommit @@ -1 +1 @@ -255762c20e466200be55618e67e9dfe6565fb478 +317a276affb99e15d7b38a4aadd927abca23d06b diff --git a/DashWallet.xcodeproj/project.pbxproj b/DashWallet.xcodeproj/project.pbxproj index e1e553e3b..4ab71db9d 100644 --- a/DashWallet.xcodeproj/project.pbxproj +++ b/DashWallet.xcodeproj/project.pbxproj @@ -114,8 +114,23 @@ FB248B5D1F73803100405AE0 /* UserNotifications.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FB248B5C1F73803100405AE0 /* UserNotifications.framework */; }; FB248B631F79BB7C00405AE0 /* SafariServices.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FB248B621F79BB7C00405AE0 /* SafariServices.framework */; }; FB2E5537218BA161003A1B7C /* DWVersionManager.m in Sources */ = {isa = PBXBuildFile; fileRef = FB2E5536218BA161003A1B7C /* DWVersionManager.m */; }; + FB31C23C223BCFAA00BD0868 /* DWMasternodeRootViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = FB31C23B223BCFAA00BD0868 /* DWMasternodeRootViewController.m */; }; + FB31C253223BD3F600BD0868 /* DWReclaimMasternodeViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = FB31C23D223BD3F000BD0868 /* DWReclaimMasternodeViewController.m */; }; + FB31C254223BD3F600BD0868 /* DWMasternodeViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = FB31C23E223BD3F000BD0868 /* DWMasternodeViewController.m */; }; + FB31C255223BD3F600BD0868 /* DWSignPayloadViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = FB31C246223BD3F200BD0868 /* DWSignPayloadViewController.m */; }; + FB31C256223BD3F600BD0868 /* DWRegisterMasternodeViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = FB31C247223BD3F200BD0868 /* DWRegisterMasternodeViewController.m */; }; + FB31C257223BD3F600BD0868 /* DWProviderUpdateServiceTransactionsViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = FB31C249223BD3F300BD0868 /* DWProviderUpdateServiceTransactionsViewController.m */; }; + FB31C259223BD3F600BD0868 /* DWUpdateMasternodeRevocationViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = FB31C24B223BD3F400BD0868 /* DWUpdateMasternodeRevocationViewController.m */; }; + FB31C25A223BD3F600BD0868 /* DWUpdateMasternodeServiceViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = FB31C24C223BD3F400BD0868 /* DWUpdateMasternodeServiceViewController.m */; }; + FB31C25B223BD3F600BD0868 /* DWProviderUpdateRegistrarTransactionsViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = FB31C24D223BD3F400BD0868 /* DWProviderUpdateRegistrarTransactionsViewController.m */; }; + FB31C25C223BD3F600BD0868 /* DWMasternodeDetailViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = FB31C24E223BD3F500BD0868 /* DWMasternodeDetailViewController.m */; }; + FB31C25D223BD3F600BD0868 /* DWUpdateMasternodeRegistrarViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = FB31C250223BD3F500BD0868 /* DWUpdateMasternodeRegistrarViewController.m */; }; + FB31C262223BD62D00BD0868 /* DWProviderUpdateServiceTableViewCell.m in Sources */ = {isa = PBXBuildFile; fileRef = FB31C25F223BD62C00BD0868 /* DWProviderUpdateServiceTableViewCell.m */; }; + FB31C263223BD62D00BD0868 /* DWProviderUpdateRegistrarTableViewCell.m in Sources */ = {isa = PBXBuildFile; fileRef = FB31C260223BD62C00BD0868 /* DWProviderUpdateRegistrarTableViewCell.m */; }; + FB31C266223BD6FB00BD0868 /* DWKeyValueTableViewCell.m in Sources */ = {isa = PBXBuildFile; fileRef = FB31C265223BD6FB00BD0868 /* DWKeyValueTableViewCell.m */; }; + FB31C269223BD9F400BD0868 /* DWMasternodeTableViewCell.m in Sources */ = {isa = PBXBuildFile; fileRef = FB31C267223BD9F400BD0868 /* DWMasternodeTableViewCell.m */; }; FB3FA3D61F2364140071FCC5 /* UIImage+Utils.m in Sources */ = {isa = PBXBuildFile; fileRef = BAA4843B1B3EFFAF0075C749 /* UIImage+Utils.m */; }; - FB3FF0B22226416A0059A9A5 /* MasternodeKeys.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = FB3FF0B12226416A0059A9A5 /* MasternodeKeys.storyboard */; }; + FB3FF0B22226416A0059A9A5 /* Masternode.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = FB3FF0B12226416A0059A9A5 /* Masternode.storyboard */; }; FB3FF0B5222642FB0059A9A5 /* DWKeysOverviewViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = FB3FF0B4222642FB0059A9A5 /* DWKeysOverviewViewController.m */; }; FB3FF0B822264DC60059A9A5 /* DWDerivationPathKeysViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = FB3FF0B722264DC60059A9A5 /* DWDerivationPathKeysViewController.m */; }; FB43BC72211B8A5E00BC9879 /* DWActionTableViewCell.m in Sources */ = {isa = PBXBuildFile; fileRef = FB43BC71211B8A5E00BC9879 /* DWActionTableViewCell.m */; }; @@ -558,7 +573,37 @@ FB248B621F79BB7C00405AE0 /* SafariServices.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = SafariServices.framework; path = System/Library/Frameworks/SafariServices.framework; sourceTree = SDKROOT; }; FB2E5535218BA161003A1B7C /* DWVersionManager.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = DWVersionManager.h; sourceTree = ""; }; FB2E5536218BA161003A1B7C /* DWVersionManager.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = DWVersionManager.m; sourceTree = ""; }; - FB3FF0B12226416A0059A9A5 /* MasternodeKeys.storyboard */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; path = MasternodeKeys.storyboard; sourceTree = ""; }; + FB31C23A223BCFAA00BD0868 /* DWMasternodeRootViewController.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = DWMasternodeRootViewController.h; sourceTree = ""; }; + FB31C23B223BCFAA00BD0868 /* DWMasternodeRootViewController.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = DWMasternodeRootViewController.m; sourceTree = ""; }; + FB31C23D223BD3F000BD0868 /* DWReclaimMasternodeViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = DWReclaimMasternodeViewController.m; sourceTree = ""; }; + FB31C23E223BD3F000BD0868 /* DWMasternodeViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = DWMasternodeViewController.m; sourceTree = ""; }; + FB31C23F223BD3F100BD0868 /* DWRegisterMasternodeViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DWRegisterMasternodeViewController.h; sourceTree = ""; }; + FB31C240223BD3F100BD0868 /* DWProviderUpdateServiceTransactionsViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DWProviderUpdateServiceTransactionsViewController.h; sourceTree = ""; }; + FB31C241223BD3F100BD0868 /* DWUpdateMasternodeRegistrarViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DWUpdateMasternodeRegistrarViewController.h; sourceTree = ""; }; + FB31C242223BD3F100BD0868 /* DWReclaimMasternodeViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DWReclaimMasternodeViewController.h; sourceTree = ""; }; + FB31C243223BD3F200BD0868 /* DWUpdateMasternodeServiceViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DWUpdateMasternodeServiceViewController.h; sourceTree = ""; }; + FB31C244223BD3F200BD0868 /* DWUpdateMasternodeRevocationViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DWUpdateMasternodeRevocationViewController.h; sourceTree = ""; }; + FB31C245223BD3F200BD0868 /* DWProviderUpdateRegistrarTransactionsViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DWProviderUpdateRegistrarTransactionsViewController.h; sourceTree = ""; }; + FB31C246223BD3F200BD0868 /* DWSignPayloadViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = DWSignPayloadViewController.m; sourceTree = ""; }; + FB31C247223BD3F200BD0868 /* DWRegisterMasternodeViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = DWRegisterMasternodeViewController.m; sourceTree = ""; }; + FB31C249223BD3F300BD0868 /* DWProviderUpdateServiceTransactionsViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = DWProviderUpdateServiceTransactionsViewController.m; sourceTree = ""; }; + FB31C24B223BD3F400BD0868 /* DWUpdateMasternodeRevocationViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = DWUpdateMasternodeRevocationViewController.m; sourceTree = ""; }; + FB31C24C223BD3F400BD0868 /* DWUpdateMasternodeServiceViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = DWUpdateMasternodeServiceViewController.m; sourceTree = ""; }; + FB31C24D223BD3F400BD0868 /* DWProviderUpdateRegistrarTransactionsViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = DWProviderUpdateRegistrarTransactionsViewController.m; sourceTree = ""; }; + FB31C24E223BD3F500BD0868 /* DWMasternodeDetailViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = DWMasternodeDetailViewController.m; sourceTree = ""; }; + FB31C24F223BD3F500BD0868 /* DWSignPayloadViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DWSignPayloadViewController.h; sourceTree = ""; }; + FB31C250223BD3F500BD0868 /* DWUpdateMasternodeRegistrarViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = DWUpdateMasternodeRegistrarViewController.m; sourceTree = ""; }; + FB31C251223BD3F600BD0868 /* DWMasternodeDetailViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DWMasternodeDetailViewController.h; sourceTree = ""; }; + FB31C252223BD3F600BD0868 /* DWMasternodeViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DWMasternodeViewController.h; sourceTree = ""; }; + FB31C25E223BD62C00BD0868 /* DWProviderUpdateRegistrarTableViewCell.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DWProviderUpdateRegistrarTableViewCell.h; sourceTree = ""; }; + FB31C25F223BD62C00BD0868 /* DWProviderUpdateServiceTableViewCell.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = DWProviderUpdateServiceTableViewCell.m; sourceTree = ""; }; + FB31C260223BD62C00BD0868 /* DWProviderUpdateRegistrarTableViewCell.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = DWProviderUpdateRegistrarTableViewCell.m; sourceTree = ""; }; + FB31C261223BD62C00BD0868 /* DWProviderUpdateServiceTableViewCell.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DWProviderUpdateServiceTableViewCell.h; sourceTree = ""; }; + FB31C264223BD6FB00BD0868 /* DWKeyValueTableViewCell.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DWKeyValueTableViewCell.h; sourceTree = ""; }; + FB31C265223BD6FB00BD0868 /* DWKeyValueTableViewCell.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = DWKeyValueTableViewCell.m; sourceTree = ""; }; + FB31C267223BD9F400BD0868 /* DWMasternodeTableViewCell.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = DWMasternodeTableViewCell.m; sourceTree = ""; }; + FB31C268223BD9F400BD0868 /* DWMasternodeTableViewCell.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DWMasternodeTableViewCell.h; sourceTree = ""; }; + FB3FF0B12226416A0059A9A5 /* Masternode.storyboard */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; path = Masternode.storyboard; sourceTree = ""; }; FB3FF0B3222642FB0059A9A5 /* DWKeysOverviewViewController.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = DWKeysOverviewViewController.h; sourceTree = ""; }; FB3FF0B4222642FB0059A9A5 /* DWKeysOverviewViewController.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = DWKeysOverviewViewController.m; sourceTree = ""; }; FB3FF0B622264DC60059A9A5 /* DWDerivationPathKeysViewController.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = DWDerivationPathKeysViewController.h; sourceTree = ""; }; @@ -1144,11 +1189,33 @@ FB3FF0B0222641210059A9A5 /* Masternode Keys */ = { isa = PBXGroup; children = ( - FB3FF0B12226416A0059A9A5 /* MasternodeKeys.storyboard */, + FB3FF0B12226416A0059A9A5 /* Masternode.storyboard */, FB3FF0B3222642FB0059A9A5 /* DWKeysOverviewViewController.h */, FB3FF0B4222642FB0059A9A5 /* DWKeysOverviewViewController.m */, FB3FF0B622264DC60059A9A5 /* DWDerivationPathKeysViewController.h */, FB3FF0B722264DC60059A9A5 /* DWDerivationPathKeysViewController.m */, + FB31C23A223BCFAA00BD0868 /* DWMasternodeRootViewController.h */, + FB31C23B223BCFAA00BD0868 /* DWMasternodeRootViewController.m */, + FB31C251223BD3F600BD0868 /* DWMasternodeDetailViewController.h */, + FB31C24E223BD3F500BD0868 /* DWMasternodeDetailViewController.m */, + FB31C252223BD3F600BD0868 /* DWMasternodeViewController.h */, + FB31C23E223BD3F000BD0868 /* DWMasternodeViewController.m */, + FB31C245223BD3F200BD0868 /* DWProviderUpdateRegistrarTransactionsViewController.h */, + FB31C24D223BD3F400BD0868 /* DWProviderUpdateRegistrarTransactionsViewController.m */, + FB31C240223BD3F100BD0868 /* DWProviderUpdateServiceTransactionsViewController.h */, + FB31C249223BD3F300BD0868 /* DWProviderUpdateServiceTransactionsViewController.m */, + FB31C242223BD3F100BD0868 /* DWReclaimMasternodeViewController.h */, + FB31C23D223BD3F000BD0868 /* DWReclaimMasternodeViewController.m */, + FB31C23F223BD3F100BD0868 /* DWRegisterMasternodeViewController.h */, + FB31C247223BD3F200BD0868 /* DWRegisterMasternodeViewController.m */, + FB31C24F223BD3F500BD0868 /* DWSignPayloadViewController.h */, + FB31C246223BD3F200BD0868 /* DWSignPayloadViewController.m */, + FB31C241223BD3F100BD0868 /* DWUpdateMasternodeRegistrarViewController.h */, + FB31C250223BD3F500BD0868 /* DWUpdateMasternodeRegistrarViewController.m */, + FB31C244223BD3F200BD0868 /* DWUpdateMasternodeRevocationViewController.h */, + FB31C24B223BD3F400BD0868 /* DWUpdateMasternodeRevocationViewController.m */, + FB31C243223BD3F200BD0868 /* DWUpdateMasternodeServiceViewController.h */, + FB31C24C223BD3F400BD0868 /* DWUpdateMasternodeServiceViewController.m */, ); path = "Masternode Keys"; sourceTree = ""; @@ -1162,6 +1229,14 @@ FB43BC7F211D96C500BC9879 /* DWTransactionTableViewCell.m */, FB43BC70211B8A5E00BC9879 /* DWActionTableViewCell.h */, FB43BC71211B8A5E00BC9879 /* DWActionTableViewCell.m */, + FB31C25E223BD62C00BD0868 /* DWProviderUpdateRegistrarTableViewCell.h */, + FB31C260223BD62C00BD0868 /* DWProviderUpdateRegistrarTableViewCell.m */, + FB31C261223BD62C00BD0868 /* DWProviderUpdateServiceTableViewCell.h */, + FB31C25F223BD62C00BD0868 /* DWProviderUpdateServiceTableViewCell.m */, + FB31C264223BD6FB00BD0868 /* DWKeyValueTableViewCell.h */, + FB31C265223BD6FB00BD0868 /* DWKeyValueTableViewCell.m */, + FB31C268223BD9F400BD0868 /* DWMasternodeTableViewCell.h */, + FB31C267223BD9F400BD0868 /* DWMasternodeTableViewCell.m */, ); name = Cells; sourceTree = ""; @@ -1494,7 +1569,7 @@ FBFC2EC921137A7A00D20C57 /* Montserrat-ExtraLight.otf in Resources */, FBFC2EF121137A7A00D20C57 /* Montserrat-LightItalic.otf in Resources */, FBFC2EE521137A7A00D20C57 /* Montserrat-SemiBold.otf in Resources */, - FB3FF0B22226416A0059A9A5 /* MasternodeKeys.storyboard in Resources */, + FB3FF0B22226416A0059A9A5 /* Masternode.storyboard in Resources */, 2A8F422121BF028500858B91 /* AboutStoryboard.storyboard in Resources */, FBFC2ED521137A7A00D20C57 /* Montserrat-Medium.otf in Resources */, FBFC2EC521137A7A00D20C57 /* Montserrat-Regular.otf in Resources */, @@ -1780,11 +1855,14 @@ isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( + FB31C25B223BD3F600BD0868 /* DWProviderUpdateRegistrarTransactionsViewController.m in Sources */, 22F04A001C9714EF00F137D8 /* BRUserDefaultsSwitchCell.m in Sources */, 2AAEF5402216BE77000FC092 /* DWAmountSendingOptionsModel.m in Sources */, 2A8BE8BF21888F9C00DBA382 /* DSWatchTransactionDataObject.m in Sources */, 75AA5F55194143D5003F23BD /* BRBouncyBurgerButton.m in Sources */, + FB31C25C223BD3F600BD0868 /* DWMasternodeDetailViewController.m in Sources */, 2A11F59521947CBE00E7B563 /* BRPeerEntity.m in Sources */, + FB31C255223BD3F600BD0868 /* DWSignPayloadViewController.m in Sources */, 2A11F59621947CBE00E7B563 /* BRMerkleBlockEntity.m in Sources */, BA7B53501BDA9A2800355E8D /* BRAppleWatchData.m in Sources */, 2AB8CDDB220D879300A3D1DB /* DWAmountViewController.m in Sources */, @@ -1805,10 +1883,12 @@ BAC7B6BE1BD9C29900165B84 /* DWPhoneWCSessionManager.m in Sources */, FB021E561E47E17200D17638 /* FBShimmeringLayer.m in Sources */, FB43BC72211B8A5E00BC9879 /* DWActionTableViewCell.m in Sources */, + FB31C266223BD6FB00BD0868 /* DWKeyValueTableViewCell.m in Sources */, 2A11F5A32194C1D800E7B563 /* DashWallet.xcdatamodeld in Sources */, 2A9FFCD5222EA87F00956D5F /* DSTransactionStatusTableViewCell.m in Sources */, 7525B619192453840041C0F2 /* BRNavigationBar.m in Sources */, FB2E5537218BA161003A1B7C /* DWVersionManager.m in Sources */, + FB31C256223BD3F600BD0868 /* DWRegisterMasternodeViewController.m in Sources */, 2AB8CDE4220DCA7D00A3D1DB /* DWAmountKeyboard.m in Sources */, 75878BC1192AEC3F002505AB /* DWReceiveViewController.m in Sources */, 759816E719357D6F005060EA /* BRBubbleView.m in Sources */, @@ -1824,31 +1904,41 @@ FB9CC2711F8E27B80079309F /* DWGenerateViewController.m in Sources */, BA7B53541BDAA0A800355E8D /* BRAppleWatchTransactionData.m in Sources */, 2AB231D72196E5CF00A6E7E6 /* DWMigrationViewModel.m in Sources */, + FB31C262223BD62D00BD0868 /* DWProviderUpdateServiceTableViewCell.m in Sources */, FB3FF0B5222642FB0059A9A5 /* DWKeysOverviewViewController.m in Sources */, FB021E571E47E17200D17638 /* FBShimmeringView.m in Sources */, FB3FF0B822264DC60059A9A5 /* DWDerivationPathKeysViewController.m in Sources */, + FB31C25D223BD3F600BD0868 /* DWUpdateMasternodeRegistrarViewController.m in Sources */, FB021E5B1E4DEFE800D17638 /* MBProgressHUD.m in Sources */, FB4AB41921CA760E001CC324 /* DWStoryboardSegueWithCompletion.m in Sources */, FBFC2EFB211413EB00D20C57 /* DWWarningViewController.m in Sources */, 751B2B5C1B68911700EA87FB /* DWTxHistoryViewController.m in Sources */, + FB31C253223BD3F600BD0868 /* DWReclaimMasternodeViewController.m in Sources */, 2A11F59421947CBE00E7B563 /* BRTxOutputEntity.m in Sources */, + FB31C263223BD62D00BD0868 /* DWProviderUpdateRegistrarTableViewCell.m in Sources */, 2AC92C871FEB0AE8008CAEE0 /* DWQRScanView.m in Sources */, 757C89521A2FCE420076B373 /* DWSettingsViewController.m in Sources */, + FB31C25A223BD3F600BD0868 /* DWUpdateMasternodeServiceViewController.m in Sources */, FB43BC81211D96C600BC9879 /* DWTransactionTableViewCell.m in Sources */, + FB31C269223BD9F400BD0868 /* DWMasternodeTableViewCell.m in Sources */, FBEF3AF121823CD800917AB6 /* DWEnvironment.m in Sources */, 75D5F3D2191EC270004AB296 /* DWAppDelegate.m in Sources */, 2A11F59F2194BD6200E7B563 /* DWDataMigrationManager.m in Sources */, 2A11F59921947CBE00E7B563 /* BRAddressEntity.m in Sources */, 2A9FFCD7222EA87F00956D5F /* DSTransactionAmountTableViewCell.m in Sources */, + FB31C259223BD3F600BD0868 /* DWUpdateMasternodeRevocationViewController.m in Sources */, + FB31C254223BD3F600BD0868 /* DWMasternodeViewController.m in Sources */, 759FBB36193290F600AB4465 /* DWRootViewController.m in Sources */, 2AB231D22196E25D00A6E7E6 /* DWMigrationViewController.m in Sources */, 2A11F59C21947CBE00E7B563 /* BRTransactionEntity.m in Sources */, 2AB8CDDF220D880100A3D1DB /* DWAmountButton.m in Sources */, + FB31C257223BD3F600BD0868 /* DWProviderUpdateServiceTransactionsViewController.m in Sources */, 2A58815921A5906C00FD4D2C /* DWBaseRootViewController.m in Sources */, 2AB21D2E220F3A3E00615700 /* DWAmountNavigationController.m in Sources */, 2A8F420F21BEE95D00858B91 /* DWAboutViewController.m in Sources */, 759FBB37193290F600AB4465 /* DWSendViewController.m in Sources */, 2A8F422021BEFEEA00858B91 /* DWAboutModel.m in Sources */, + FB31C23C223BCFAA00BD0868 /* DWMasternodeRootViewController.m in Sources */, 75D5F3CE191EC270004AB296 /* main.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; diff --git a/DashWallet/DWKeyValueTableViewCell.h b/DashWallet/DWKeyValueTableViewCell.h new file mode 100644 index 000000000..90a9d1fe4 --- /dev/null +++ b/DashWallet/DWKeyValueTableViewCell.h @@ -0,0 +1,14 @@ +// +// DSAddDevnetNameTableViewCell.h +// DashWallet +// +// Created by Sam Westrich on 6/19/18. +// Copyright © 2018 Andrew Podkovyrin. All rights reserved. +// + +#import + +@interface DWKeyValueTableViewCell : UITableViewCell +@property (strong, nonatomic) IBOutlet UITextField *valueTextField; + +@end diff --git a/DashWallet/DWKeyValueTableViewCell.m b/DashWallet/DWKeyValueTableViewCell.m new file mode 100644 index 000000000..0c3fb63aa --- /dev/null +++ b/DashWallet/DWKeyValueTableViewCell.m @@ -0,0 +1,24 @@ +// +// DSAddDevnetNameTableViewCell.m +// DashWallet +// +// Created by Sam Westrich on 6/19/18. +// Copyright © 2018 Andrew Podkovyrin. All rights reserved. +// + +#import "DWKeyValueTableViewCell.h" + +@implementation DWKeyValueTableViewCell + +- (void)awakeFromNib { + [super awakeFromNib]; + // Initialization code +} + +- (void)setSelected:(BOOL)selected animated:(BOOL)animated { + [super setSelected:selected animated:animated]; + + // Configure the view for the selected state +} + +@end diff --git a/DashWallet/DWMasternodeTableViewCell.h b/DashWallet/DWMasternodeTableViewCell.h new file mode 100644 index 000000000..7b6af2dd6 --- /dev/null +++ b/DashWallet/DWMasternodeTableViewCell.h @@ -0,0 +1,16 @@ +// +// DWMasternodeTableViewCell.h +// DashWallet +// +// Created by Sam Westrich on 6/10/18. +// Copyright © 2018 Dash Core Group. All rights reserved. +// + +#import + +@interface DWMasternodeTableViewCell : UITableViewCell +@property (strong, nonatomic) IBOutlet UILabel *masternodeLocationLabel; +@property (strong, nonatomic) IBOutlet UILabel *protocolLabel; +@property (strong, nonatomic) IBOutlet UILabel *outputLabel; + +@end diff --git a/DashWallet/DWMasternodeTableViewCell.m b/DashWallet/DWMasternodeTableViewCell.m new file mode 100644 index 000000000..0c08d3d3f --- /dev/null +++ b/DashWallet/DWMasternodeTableViewCell.m @@ -0,0 +1,24 @@ +// +// DWMasternodeTableViewCell.m +// DashWallet +// +// Created by Sam Westrich on 6/10/18. +// Copyright © 2018 Dash Core Group. All rights reserved. +// + +#import "DWMasternodeTableViewCell.h" + +@implementation DWMasternodeTableViewCell + +- (void)awakeFromNib { + [super awakeFromNib]; + // Initialization code +} + +- (void)setSelected:(BOOL)selected animated:(BOOL)animated { + [super setSelected:selected animated:animated]; + + // Configure the view for the selected state +} + +@end diff --git a/DashWallet/DWProviderUpdateRegistrarTableViewCell.h b/DashWallet/DWProviderUpdateRegistrarTableViewCell.h new file mode 100644 index 000000000..008b52920 --- /dev/null +++ b/DashWallet/DWProviderUpdateRegistrarTableViewCell.h @@ -0,0 +1,22 @@ +// +// DWProviderUpdateRegistrarTableViewCell.h +// DashWallet +// +// Created by Sam Westrich on 3/3/19. +// Copyright © 2019 Dash Core Group. All rights reserved. +// + +#import +#import "BRCopyLabel.h" + +NS_ASSUME_NONNULL_BEGIN + +@interface DWProviderUpdateRegistrarTableViewCell : UITableViewCell + +@property (strong, nonatomic) IBOutlet BRCopyLabel *payToAddressLabel; +@property (strong, nonatomic) IBOutlet BRCopyLabel *operatorKeyLabel; +@property (strong, nonatomic) IBOutlet BRCopyLabel *blockHeightLabel; + +@end + +NS_ASSUME_NONNULL_END diff --git a/DashWallet/DWProviderUpdateRegistrarTableViewCell.m b/DashWallet/DWProviderUpdateRegistrarTableViewCell.m new file mode 100644 index 000000000..359a301b9 --- /dev/null +++ b/DashWallet/DWProviderUpdateRegistrarTableViewCell.m @@ -0,0 +1,24 @@ +// +// DWProviderUpdateRegistrarTableViewCell.m +// DashWallet +// +// Created by Sam Westrich on 3/3/19. +// Copyright © 2019 Dash Core Group. All rights reserved. +// + +#import "DWProviderUpdateRegistrarTableViewCell.h" + +@implementation DWProviderUpdateRegistrarTableViewCell + +- (void)awakeFromNib { + [super awakeFromNib]; + // Initialization code +} + +- (void)setSelected:(BOOL)selected animated:(BOOL)animated { + [super setSelected:selected animated:animated]; + + // Configure the view for the selected state +} + +@end diff --git a/DashWallet/DWProviderUpdateServiceTableViewCell.h b/DashWallet/DWProviderUpdateServiceTableViewCell.h new file mode 100644 index 000000000..62d59beb2 --- /dev/null +++ b/DashWallet/DWProviderUpdateServiceTableViewCell.h @@ -0,0 +1,22 @@ +// +// DWProviderUpdateServiceTableViewCell.h +// DashWallet +// +// Created by Sam Westrich on 3/3/19. +// Copyright © 2019 Dash Core Group. All rights reserved. +// + +#import +#import "BRCopyLabel.h" + +NS_ASSUME_NONNULL_BEGIN + +@interface DWProviderUpdateServiceTableViewCell : UITableViewCell + +@property (strong, nonatomic) IBOutlet BRCopyLabel *locationLabel; +@property (strong, nonatomic) IBOutlet BRCopyLabel *operatorRewardPayoutAddressLabel; +@property (strong, nonatomic) IBOutlet BRCopyLabel *blockHeightLabel; + +@end + +NS_ASSUME_NONNULL_END diff --git a/DashWallet/DWProviderUpdateServiceTableViewCell.m b/DashWallet/DWProviderUpdateServiceTableViewCell.m new file mode 100644 index 000000000..88fc0fd71 --- /dev/null +++ b/DashWallet/DWProviderUpdateServiceTableViewCell.m @@ -0,0 +1,24 @@ +// +// DWProviderUpdateServiceTableViewCell.m +// DashWallet +// +// Created by Sam Westrich on 3/3/19. +// Copyright © 2019 Dash Core Group. All rights reserved. +// + +#import "DWProviderUpdateServiceTableViewCell.h" + +@implementation DWProviderUpdateServiceTableViewCell + +- (void)awakeFromNib { + [super awakeFromNib]; + // Initialization code +} + +- (void)setSelected:(BOOL)selected animated:(BOOL)animated { + [super setSelected:selected animated:animated]; + + // Configure the view for the selected state +} + +@end diff --git a/DashWallet/DWSettingsViewController.m b/DashWallet/DWSettingsViewController.m index f972b7377..36e377c35 100644 --- a/DashWallet/DWSettingsViewController.m +++ b/DashWallet/DWSettingsViewController.m @@ -28,7 +28,7 @@ #import "BRUserDefaultsSwitchCell.h" #import "DSCurrencyPriceObject.h" #import "DWAboutViewController.h" -#import "DWKeysOverviewViewController.h" +#import "DWMasternodeRootViewController.h" @interface DWSettingsViewController () @@ -317,7 +317,7 @@ - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(N break; case 1: cell = [tableView dequeueReusableCellWithIdentifier:selectorIdent]; - cell.textLabel.text = NSLocalizedString(@"Show masternode keys", nil); + cell.textLabel.text = NSLocalizedString(@"Masternode control", nil); cell.detailTextLabel.text = nil; break; default: @@ -537,10 +537,10 @@ - (void)showMasternodeKeys:(UITableViewCell *)cell { [DSEventManager saveEvent:@"settings:show_masternode_keys"]; DSAuthenticationManager *authenticationManager = [DSAuthenticationManager sharedInstance]; - [authenticationManager authenticateWithPrompt:NSLocalizedString(@"Show masternode keys", nil) andTouchId:YES alertIfLockout:YES completion:^(BOOL authenticated, BOOL cancelled) { + [authenticationManager authenticateWithPrompt:NSLocalizedString(@"Masternode control", nil) andTouchId:YES alertIfLockout:YES completion:^(BOOL authenticated, BOOL cancelled) { if (authenticated) { - DWKeysOverviewViewController *keysViewController = [DWKeysOverviewViewController controller]; - [self.navigationController pushViewController:keysViewController animated:YES]; + DWMasternodeRootViewController *masternodeRootViewController = [DWMasternodeRootViewController controller]; + [self.navigationController pushViewController:masternodeRootViewController animated:YES]; } }]; } diff --git a/DashWallet/DWTransactionTableViewCell.h b/DashWallet/DWTransactionTableViewCell.h index 3cf258939..83eb24dc6 100644 --- a/DashWallet/DWTransactionTableViewCell.h +++ b/DashWallet/DWTransactionTableViewCell.h @@ -1,6 +1,6 @@ // // DWTransactionTableViewCell.h -// DashSync_Example +// DashWallet // // Created by Sam Westrich on 6/22/18. // Copyright © 2019 Dash Core Group. All rights reserved. diff --git a/DashWallet/DWTransactionTableViewCell.m b/DashWallet/DWTransactionTableViewCell.m index 85c4b36af..4dba00298 100644 --- a/DashWallet/DWTransactionTableViewCell.m +++ b/DashWallet/DWTransactionTableViewCell.m @@ -1,6 +1,6 @@ // // DWTransactionTableViewCell.m -// DashSync_Example +// DashWallet // // Created by Sam Westrich on 6/22/18. // Copyright © 2019 Dash Core Group. All rights reserved. diff --git a/DashWallet/Masternode Keys/DWKeysOverviewViewController.m b/DashWallet/Masternode Keys/DWKeysOverviewViewController.m index 57c76794e..232a0c5e0 100644 --- a/DashWallet/Masternode Keys/DWKeysOverviewViewController.m +++ b/DashWallet/Masternode Keys/DWKeysOverviewViewController.m @@ -45,7 +45,7 @@ @implementation DWKeysOverviewViewController + (instancetype)controller { - UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"MasternodeKeys" bundle:nil]; + UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"Masternode" bundle:nil]; DWKeysOverviewViewController *controller = [storyboard instantiateViewControllerWithIdentifier:@"KeysOverviewViewControllerIdentifier"]; return controller; diff --git a/DashWallet/Masternode Keys/DWMasternodeDetailViewController.h b/DashWallet/Masternode Keys/DWMasternodeDetailViewController.h new file mode 100644 index 000000000..a7ec8cc03 --- /dev/null +++ b/DashWallet/Masternode Keys/DWMasternodeDetailViewController.h @@ -0,0 +1,23 @@ +// +// DWMasternodeDetailViewController.h +// DashWallet +// +// Created by Sam Westrich on 2/21/19. +// Copyright © 2019 Dash Core Group. All rights reserved. +// + +#import + +NS_ASSUME_NONNULL_BEGIN + +@class DSLocalMasternode, DSSimplifiedMasternodeEntry; + +@interface DWMasternodeDetailViewController : UITableViewController + +@property (nonatomic,strong) DSLocalMasternode * localMasternode; +@property (nonatomic,strong) DSSimplifiedMasternodeEntry * simplifiedMasternodeEntry; + + +@end + +NS_ASSUME_NONNULL_END diff --git a/DashWallet/Masternode Keys/DWMasternodeDetailViewController.m b/DashWallet/Masternode Keys/DWMasternodeDetailViewController.m new file mode 100644 index 000000000..5c5f11c82 --- /dev/null +++ b/DashWallet/Masternode Keys/DWMasternodeDetailViewController.m @@ -0,0 +1,169 @@ +// +// DWMasternodeDetailViewController.m +// DashWallet +// +// Created by Sam Westrich on 2/21/19. +// Copyright © 2019 Dash Core Group. All rights reserved. +// + +#import "DWMasternodeDetailViewController.h" +#import "DSSimplifiedMasternodeEntry.h" +#import "DSLocalMasternode.h" +#import "DWUpdateMasternodeServiceViewController.h" +#import "DWUpdateMasternodeRegistrarViewController.h" +#import "DWReclaimMasternodeViewController.h" +#import "DWProviderUpdateRegistrarTransactionsViewController.h" +#import "DWProviderUpdateServiceTransactionsViewController.h" +#import +#import "BRCopyLabel.h" + +@interface DWMasternodeDetailViewController () +@property (strong, nonatomic) IBOutlet UILabel *locationLabel; +@property (strong, nonatomic) IBOutlet UILabel *operatorKeyLabel; +@property (strong, nonatomic) IBOutlet UILabel *operatorPublicKeyLabel; +@property (strong, nonatomic) IBOutlet UILabel *ownerKeyLabel; +@property (strong, nonatomic) IBOutlet UILabel *votingKeyLabel; +@property (strong, nonatomic) IBOutlet UILabel *votingAddressLabel; +@property (strong, nonatomic) IBOutlet UILabel *fundsInHoldingLabel; +@property (strong, nonatomic) IBOutlet UILabel *activeLabel; +@property (strong, nonatomic) IBOutlet UILabel *payToAddress; +@property (strong, nonatomic) IBOutlet BRCopyLabel *proRegTxLabel; +@property (strong, nonatomic) IBOutlet BRCopyLabel *proUpRegTxLabel; +@property (strong, nonatomic) IBOutlet BRCopyLabel *proUpServTxLabel; + +@end + +@implementation DWMasternodeDetailViewController + +- (void)viewDidLoad { + [super viewDidLoad]; + + char s[INET6_ADDRSTRLEN]; + uint32_t ipAddress = self.simplifiedMasternodeEntry.address.u32[3]; + + self.locationLabel.text = [NSString stringWithFormat:@"%s:%d",inet_ntop(AF_INET, &ipAddress, s, sizeof(s)),self.simplifiedMasternodeEntry.port]; + self.ownerKeyLabel.text = self.localMasternode.ownerKeysWallet?@"SHOW":@"NO"; + self.operatorKeyLabel.text = self.localMasternode.operatorKeysWallet?@"SHOW":@"NO"; + self.operatorPublicKeyLabel.text = uint384_hex(self.simplifiedMasternodeEntry.operatorPublicKey); + self.votingAddressLabel.text = self.simplifiedMasternodeEntry.votingAddress; + self.votingKeyLabel.text = self.localMasternode.votingKeysWallet?@"SHOW":@"NO"; + self.fundsInHoldingLabel.text = self.localMasternode.holdingKeysWallet?@"YES":@"NO"; + self.activeLabel.text = self.simplifiedMasternodeEntry.isValid?@"YES":@"NO"; + self.payToAddress.text = self.localMasternode.payoutAddress?self.localMasternode.payoutAddress:@"Unknown"; + self.proRegTxLabel.text = uint256_hex(self.localMasternode.providerRegistrationTransaction.txHash); + self.proUpRegTxLabel.text = [NSString stringWithFormat:@"%lu",(unsigned long)self.localMasternode.providerUpdateRegistrarTransactions.count]; + self.proUpServTxLabel.text = [NSString stringWithFormat:@"%lu",(unsigned long)self.localMasternode.providerUpdateServiceTransactions.count]; +} + +-(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender { + if ([segue.identifier isEqualToString:@"UpdateMasternodeServiceSegue"]) { + UINavigationController * navigationController = (UINavigationController*)segue.destinationViewController; + DWUpdateMasternodeServiceViewController * updateMasternodeServiceViewController = (DWUpdateMasternodeServiceViewController*)navigationController.topViewController; + updateMasternodeServiceViewController.localMasternode = self.localMasternode; + } else if ([segue.identifier isEqualToString:@"UpdateMasternodeRegistrarSegue"]) { + UINavigationController * navigationController = (UINavigationController*)segue.destinationViewController; + DWUpdateMasternodeRegistrarViewController * updateMasternodeRegistrarViewController = (DWUpdateMasternodeRegistrarViewController*)navigationController.topViewController; + updateMasternodeRegistrarViewController.localMasternode = self.localMasternode; + updateMasternodeRegistrarViewController.simplifiedMasternodeEntry = self.simplifiedMasternodeEntry; + } else if ([segue.identifier isEqualToString:@"ReclaimMasternodeSegue"]) { + UINavigationController * navigationController = (UINavigationController*)segue.destinationViewController; + DWReclaimMasternodeViewController * reclaimMasternodeViewController = (DWReclaimMasternodeViewController*)navigationController.topViewController; + reclaimMasternodeViewController.localMasternode = self.localMasternode; + } else if ([segue.identifier isEqualToString:@"ShowProviderUpdateRegistrarTransactionsSegue"]) { + DWProviderUpdateRegistrarTransactionsViewController * providerUpdateRegistrarTransactionsViewController = segue.destinationViewController; + providerUpdateRegistrarTransactionsViewController.localMasternode = self.localMasternode; + } else if ([segue.identifier isEqualToString:@"ShowProviderUpdateServiceTransactionsSegue"]) { + DWProviderUpdateServiceTransactionsViewController * providerUpdateServiceTransactionsViewController = segue.destinationViewController; + providerUpdateServiceTransactionsViewController.localMasternode = self.localMasternode; + } +} + +-(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath { + switch (indexPath.section) { + case 0: + { + switch (indexPath.row) { + case 2: + if (self.localMasternode.ownerKeysWallet) { + [self.localMasternode.ownerKeysWallet seedWithPrompt:@"Show owner key?" forAmount:0 completion:^(NSData * _Nullable seed, BOOL cancelled) { + if (seed) { + self.ownerKeyLabel.text = [self.localMasternode ownerKeyStringFromSeed:seed]; + } + }]; + } + break; + case 3: + if (self.localMasternode.operatorKeysWallet) { + [self.localMasternode.operatorKeysWallet seedWithPrompt:@"Show operator key?" forAmount:0 completion:^(NSData * _Nullable seed, BOOL cancelled) { + if (seed) { + self.operatorKeyLabel.text = [self.localMasternode operatorKeyStringFromSeed:seed]; + } + }]; + } + break; + case 4: + if (self.localMasternode.operatorKeysWallet) { + [self.localMasternode.operatorKeysWallet seedWithPrompt:@"Show voting key?" forAmount:0 completion:^(NSData * _Nullable seed, BOOL cancelled) { + if (seed) { + self.votingKeyLabel.text = [self.localMasternode votingKeyStringFromSeed:seed]; + } + }]; + } + break; + + default: + break; + } + + } + break; + case 1: { + switch (indexPath.row) { + case 0: { + if (!self.localMasternode) { + [self claimSimplifiedMasternodeEntry]; + } + } + default: + break; + } + } + default: + break; + } +} + +-(void)claimSimplifiedMasternodeEntry { + [[DSInsightManager sharedInstance] queryInsightForTransactionWithHash:[NSData dataWithUInt256: self.simplifiedMasternodeEntry.providerRegistrationTransactionHash].reverse.UInt256 onChain:self.simplifiedMasternodeEntry.chain completion:^(DSTransaction *transaction, NSError *error) { + if ([transaction isKindOfClass:[DSProviderRegistrationTransaction class]]) { + DSProviderRegistrationTransaction * providerRegistrationTransaction = (DSProviderRegistrationTransaction *)transaction; + DSLocalMasternode * localMasternode = [self.simplifiedMasternodeEntry.chain.chainManager.masternodeManager localMasternodeFromProviderRegistrationTransaction:providerRegistrationTransaction]; + } + }]; + + +// [self.moc performBlockAndWait:^{ // add the transaction to core data +// [DSChainEntity setContext:self.moc]; +// Class transactionEntityClass = [transaction entityClass]; +// [transactionEntityClass setContext:self.moc]; +// [DSTransactionHashEntity setContext:self.moc]; +// [DSAddressEntity setContext:self.moc]; +// if ([DSTransactionEntity countObjectsMatching:@"transactionHash.txHash == %@", uint256_data(txHash)] == 0) { +// +// DSTransactionEntity * transactionEntity = [transactionEntityClass managedObject]; +// [transactionEntity setAttributesFromTransaction:transaction]; +// [transactionEntityClass saveContext]; +// } +// }]; + +// uint32_t votingIndex; +// DSWallet * votingWallet = [self.simplifiedMasternodeEntry.chain walletHavingProviderVotingAuthenticationHash:self.simplifiedMasternodeEntry.keyIDVoting foundAtIndex:&votingIndex]; +// +// uint32_t operatorIndex; +// DSWallet * operatorWallet = [self.simplifiedMasternodeEntry.chain walletHavingProviderOperatorAuthenticationKey:self.simplifiedMasternodeEntry.operatorPublicKey foundAtIndex:&operatorIndex]; +// + +} + + +@end diff --git a/DashWallet/Masternode Keys/DWMasternodeRootViewController.h b/DashWallet/Masternode Keys/DWMasternodeRootViewController.h new file mode 100644 index 000000000..25597fd3e --- /dev/null +++ b/DashWallet/Masternode Keys/DWMasternodeRootViewController.h @@ -0,0 +1,28 @@ +// +// Created by Sam Westrich +// Copyright © 2019 Dash Core Group. All rights reserved. +// +// Licensed under the MIT License (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://opensource.org/licenses/MIT +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// + +#import + +NS_ASSUME_NONNULL_BEGIN + +@interface DWMasternodeRootViewController : UITableViewController + ++ (instancetype)controller; + +@end + +NS_ASSUME_NONNULL_END diff --git a/DashWallet/Masternode Keys/DWMasternodeRootViewController.m b/DashWallet/Masternode Keys/DWMasternodeRootViewController.m new file mode 100644 index 000000000..fdf3e7e9d --- /dev/null +++ b/DashWallet/Masternode Keys/DWMasternodeRootViewController.m @@ -0,0 +1,55 @@ +// +// Created by Sam Westrich +// Copyright © 2019 Dash Core Group. All rights reserved. +// +// Licensed under the MIT License (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://opensource.org/licenses/MIT +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// + +#import "DWMasternodeRootViewController.h" + +@interface DWMasternodeRootViewController () + +@end + +@implementation DWMasternodeRootViewController + ++ (instancetype)controller { + UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"Masternode" bundle:nil]; + DWMasternodeRootViewController *controller = [storyboard instantiateViewControllerWithIdentifier:@"MasternodeOverviewViewControllerIdentifier"]; + + return controller; +} + +- (void)viewDidLoad { + [super viewDidLoad]; + + // Uncomment the following line to preserve selection between presentations. + // self.clearsSelectionOnViewWillAppear = NO; + + // Uncomment the following line to display an Edit button in the navigation bar for this view controller. + // self.navigationItem.rightBarButtonItem = self.editButtonItem; +} + +#pragma mark - Table view data source + +/* +#pragma mark - Navigation + +// In a storyboard-based application, you will often want to do a little preparation before navigation +- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender { + // Get the new view controller using [segue destinationViewController]. + // Pass the selected object to the new view controller. +} +*/ + +@end diff --git a/DashWallet/Masternode Keys/DWMasternodeViewController.h b/DashWallet/Masternode Keys/DWMasternodeViewController.h new file mode 100644 index 000000000..0b90d2fc7 --- /dev/null +++ b/DashWallet/Masternode Keys/DWMasternodeViewController.h @@ -0,0 +1,16 @@ +// +// DWMasternodeViewController.h +// DashWallet +// +// Created by Sam Westrich on 6/10/18. +// Copyright © 2018 Dash Core Group. All rights reserved. +// + +#import +#import + +@interface DWMasternodeViewController : UITableViewController + +@property (nonatomic,strong) DSChain * chain; + +@end diff --git a/DashWallet/Masternode Keys/DWMasternodeViewController.m b/DashWallet/Masternode Keys/DWMasternodeViewController.m new file mode 100644 index 000000000..36f5c81b3 --- /dev/null +++ b/DashWallet/Masternode Keys/DWMasternodeViewController.m @@ -0,0 +1,193 @@ +// +// DWMasternodeViewController.m +// DashWallet +// +// Created by Sam Westrich on 6/10/18. +// Copyright © 2018 Dash Core Group. All rights reserved. +// + +#import "DWMasternodeViewController.h" +#import "DWMasternodeTableViewCell.h" +#import +#import +#import "DWRegisterMasternodeViewController.h" +#import "DWMasternodeDetailViewController.h" +#import "DSLocalMasternodeEntity+CoreDataClass.h" + +@interface DWMasternodeViewController () +@property (nonatomic,strong) NSFetchedResultsController * fetchedResultsController; +@property (nonatomic,strong) NSString * searchString; +@property (strong, nonatomic) IBOutlet UIBarButtonItem *registerButton; + +@end + +@implementation DWMasternodeViewController + +- (void)viewDidLoad { + [super viewDidLoad]; +} + +- (void)didReceiveMemoryWarning { + [super didReceiveMemoryWarning]; + // Dispose of any resources that can be recreated. +} + +#pragma mark - Automation KVO + +-(NSManagedObjectContext*)managedObjectContext { + return [NSManagedObject context]; +} + +-(NSPredicate*)searchPredicate { + // Get all shapeshifts that have been received by shapeshift.io or all shapeshifts that have no deposits but where we can verify a transaction has been pushed on the blockchain + if (self.searchString && ![self.searchString isEqualToString:@""]) { + if ([self.searchString isEqualToString:@"0"] || [self.searchString longLongValue]) { + NSArray * ipArray = [self.searchString componentsSeparatedByString:@"."]; + NSMutableArray *partPredicates = [NSMutableArray array]; + NSPredicate * chainPredicate = [NSPredicate predicateWithFormat:@"chain == %@",self.chain.chainEntity]; + [partPredicates addObject:chainPredicate]; + for (int i = 0; i< MIN(ipArray.count,4); i++) { + if ([ipArray[i] isEqualToString:@""]) break; + NSPredicate *currentPartPredicate = [NSPredicate predicateWithFormat:@"(((address >> %@) & 255) == %@)", @(24-i*8),@([ipArray[i] integerValue])]; + [partPredicates addObject:currentPartPredicate]; + } + + return [NSCompoundPredicate andPredicateWithSubpredicates:partPredicates]; + } else { + return [NSPredicate predicateWithFormat:@"chain == %@",self.chain.chainEntity]; + } + + } else { + return [NSPredicate predicateWithFormat:@"chain == %@",self.chain.chainEntity]; + } + +} + +- (NSFetchedResultsController *)fetchedResultsController +{ + if (_fetchedResultsController) return _fetchedResultsController; + NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init]; + // Edit the entity name as appropriate. + NSEntityDescription *entity = [NSEntityDescription entityForName:@"DSSimplifiedMasternodeEntryEntity" inManagedObjectContext:self.managedObjectContext]; + [fetchRequest setEntity:entity]; + + // Set the batch size to a suitable number. + [fetchRequest setFetchBatchSize:20]; + + // Edit the sort key as appropriate. + NSSortDescriptor *claimSortDescriptor = [[NSSortDescriptor alloc] initWithKey:@"localMasternode" ascending:NO]; + NSSortDescriptor *addressSortDescriptor = [[NSSortDescriptor alloc] initWithKey:@"address" ascending:YES]; + NSSortDescriptor *portSortDescriptor = [[NSSortDescriptor alloc] initWithKey:@"port" ascending:YES]; + NSArray *sortDescriptors = @[claimSortDescriptor,addressSortDescriptor,portSortDescriptor]; + + [fetchRequest setSortDescriptors:sortDescriptors]; + + NSPredicate *filterPredicate = [self searchPredicate]; + [fetchRequest setPredicate:filterPredicate]; + + // Edit the section name key path and cache name if appropriate. + // nil for section name key path means "no sections". + NSFetchedResultsController *aFetchedResultsController = [[NSFetchedResultsController alloc] initWithFetchRequest:fetchRequest managedObjectContext:self.managedObjectContext sectionNameKeyPath:@"localMasternode" cacheName:nil]; + _fetchedResultsController = aFetchedResultsController; + aFetchedResultsController.delegate = self; + NSError *error = nil; + if (![aFetchedResultsController performFetch:&error]) { + // Replace this implementation with code to handle the error appropriately. + // abort() causes the application to generate a crash log and terminate. You should not use this function in a shipping application, although it may be useful during development. + NSLog(@"Unresolved error %@, %@", error, [error userInfo]); + abort(); + } + + return aFetchedResultsController; +} + +- (void)controllerWillChangeContent:(NSFetchedResultsController *)controller { + +} + + +- (void)controller:(NSFetchedResultsController *)controller didChangeSection:(id )sectionInfo + atIndex:(NSUInteger)sectionIndex forChangeType:(NSFetchedResultsChangeType)type { + +} + +- (void)controller:(NSFetchedResultsController *)controller didChangeObject:(id)anObject + atIndexPath:(NSIndexPath *)indexPath forChangeType:(NSFetchedResultsChangeType)changeType + newIndexPath:(NSIndexPath *)newIndexPath { + +} + + +- (void)controllerDidChangeContent:(NSFetchedResultsController *)controller { + + +} + +#pragma mark - Table view data source + +-(NSString*)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section { + id sectionInfo = [[self.fetchedResultsController sections] objectAtIndex:section]; + if ([[sectionInfo name] integerValue]) { + return @"My Masternodes"; + } else { + return @"Masternodes"; + } +} + +- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView { + + return [[self.fetchedResultsController sections] count]; +} + +- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section { + id sectionInfo = [[self.fetchedResultsController sections] objectAtIndex:section]; + return [sectionInfo numberOfObjects]; +} + +-(void)tableView:(UITableView *)tableView didDeselectRowAtIndexPath:(NSIndexPath *)indexPath { + [self.registerButton setEnabled:FALSE]; +} + +- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { + DWMasternodeTableViewCell *cell = (DWMasternodeTableViewCell *)[tableView dequeueReusableCellWithIdentifier:@"MasternodeTableViewCellIdentifier" forIndexPath:indexPath]; + + // Configure the cell... + [self configureCell:cell atIndexPath:indexPath]; + return cell; +} + + +-(void)configureCell:(DWMasternodeTableViewCell*)cell atIndexPath:(NSIndexPath *)indexPath { + DSSimplifiedMasternodeEntryEntity *simplifiedMasternodeEntryEntity = [self.fetchedResultsController objectAtIndexPath:indexPath]; + char s[INET6_ADDRSTRLEN]; + uint32_t ipAddress = CFSwapInt32BigToHost(simplifiedMasternodeEntryEntity.address); + cell.masternodeLocationLabel.text = [NSString stringWithFormat:@"%s:%d",inet_ntop(AF_INET, &ipAddress, s, sizeof(s)),simplifiedMasternodeEntryEntity.port]; + cell.outputLabel.text = [NSString stringWithFormat:@"%@",simplifiedMasternodeEntryEntity.providerRegistrationTransactionHash]; +} + +-(void)searchBarTextDidBeginEditing:(UISearchBar *)searchBar { + self.searchString = @"0"; + _fetchedResultsController = nil; + [self.tableView reloadData]; +} + +- (void)searchBarSearchButtonClicked:(UISearchBar *)searchBar { + self.searchString = searchBar.text; + _fetchedResultsController = nil; + [self.tableView reloadData]; +} + +-(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender { + if ([segue.identifier isEqualToString:@"MasternodeDetailSegue"]) { + NSIndexPath * indexPath = self.tableView.indexPathForSelectedRow; + DSSimplifiedMasternodeEntryEntity *simplifiedMasternodeEntryEntity = [self.fetchedResultsController objectAtIndexPath:indexPath]; + DWMasternodeDetailViewController * masternodeDetailViewController = (DWMasternodeDetailViewController*)segue.destinationViewController; + masternodeDetailViewController.simplifiedMasternodeEntry = simplifiedMasternodeEntryEntity.simplifiedMasternodeEntry; + masternodeDetailViewController.localMasternode = simplifiedMasternodeEntryEntity.localMasternode?[simplifiedMasternodeEntryEntity.localMasternode loadLocalMasternode]:nil; + } else if ([segue.identifier isEqualToString:@"RegisterMasternodeSegue"]) { + UINavigationController * navigationController = (UINavigationController*)segue.destinationViewController; + DWRegisterMasternodeViewController * registerMasternodeViewController = (DWRegisterMasternodeViewController*)navigationController.topViewController; + registerMasternodeViewController.chain = self.chain; + } +} +@end diff --git a/DashWallet/Masternode Keys/DWProviderUpdateRegistrarTransactionsViewController.h b/DashWallet/Masternode Keys/DWProviderUpdateRegistrarTransactionsViewController.h new file mode 100644 index 000000000..abe2b20b6 --- /dev/null +++ b/DashWallet/Masternode Keys/DWProviderUpdateRegistrarTransactionsViewController.h @@ -0,0 +1,21 @@ +// +// DWProviderUpdateRegistrarTransactionsViewController.h +// DashWallet +// +// Created by Sam Westrich on 3/3/19. +// Copyright © 2019 Dash Core Group. All rights reserved. +// + +#import + +@class DSLocalMasternode; + +NS_ASSUME_NONNULL_BEGIN + +@interface DWProviderUpdateRegistrarTransactionsViewController : UITableViewController + +@property (nonatomic,strong) DSLocalMasternode * localMasternode; + +@end + +NS_ASSUME_NONNULL_END diff --git a/DashWallet/Masternode Keys/DWProviderUpdateRegistrarTransactionsViewController.m b/DashWallet/Masternode Keys/DWProviderUpdateRegistrarTransactionsViewController.m new file mode 100644 index 000000000..6eef51ffa --- /dev/null +++ b/DashWallet/Masternode Keys/DWProviderUpdateRegistrarTransactionsViewController.m @@ -0,0 +1,97 @@ +// +// DWProviderUpdateRegistrarTransactionsViewController.m +// DashWallet +// +// Created by Sam Westrich on 3/3/19. +// Copyright © 2019 Dash Core Group. All rights reserved. +// + +#import "DWProviderUpdateRegistrarTransactionsViewController.h" +#import "DWProviderUpdateRegistrarTableViewCell.h" + +@interface DWProviderUpdateRegistrarTransactionsViewController () + +@end + +@implementation DWProviderUpdateRegistrarTransactionsViewController + +- (void)viewDidLoad { + [super viewDidLoad]; + + // Uncomment the following line to preserve selection between presentations. + // self.clearsSelectionOnViewWillAppear = NO; + + // Uncomment the following line to display an Edit button in the navigation bar for this view controller. + // self.navigationItem.rightBarButtonItem = self.editButtonItem; +} + +#pragma mark - Table view data source + +- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView { + return 1; +} + +- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section { + return self.localMasternode.providerUpdateRegistrarTransactions.count; +} + + +- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { + static NSString * reuseIdentifier = @"RegistrarTransactionCellIdentifier"; + DWProviderUpdateRegistrarTableViewCell *cell = (DWProviderUpdateRegistrarTableViewCell*)[tableView dequeueReusableCellWithIdentifier:reuseIdentifier forIndexPath:indexPath]; + + DSProviderUpdateRegistrarTransaction * transaction = [self.localMasternode.providerUpdateRegistrarTransactions objectAtIndex:indexPath.row]; + + cell.blockHeightLabel.text = [NSString stringWithFormat:@"%d",transaction.blockHeight]; + cell.operatorKeyLabel.text = [NSData dataWithUInt384:transaction.operatorKey].hexString; + cell.payToAddressLabel.text = [NSString addressWithScriptPubKey:transaction.scriptPayout onChain:transaction.chain]; + + return cell; +} + + +/* +// Override to support conditional editing of the table view. +- (BOOL)tableView:(UITableView *)tableView canEditRowAtIndexPath:(NSIndexPath *)indexPath { + // Return NO if you do not want the specified item to be editable. + return YES; +} +*/ + +/* +// Override to support editing the table view. +- (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath { + if (editingStyle == UITableViewCellEditingStyleDelete) { + // Delete the row from the data source + [tableView deleteRowsAtIndexPaths:@[indexPath] withRowAnimation:UITableViewRowAnimationFade]; + } else if (editingStyle == UITableViewCellEditingStyleInsert) { + // Create a new instance of the appropriate class, insert it into the array, and add a new row to the table view + } +} +*/ + +/* +// Override to support rearranging the table view. +- (void)tableView:(UITableView *)tableView moveRowAtIndexPath:(NSIndexPath *)fromIndexPath toIndexPath:(NSIndexPath *)toIndexPath { +} +*/ + +/* +// Override to support conditional rearranging of the table view. +- (BOOL)tableView:(UITableView *)tableView canMoveRowAtIndexPath:(NSIndexPath *)indexPath { + // Return NO if you do not want the item to be re-orderable. + return YES; +} +*/ + +/* +#pragma mark - Navigation + +// In a storyboard-based application, you will often want to do a little preparation before navigation +- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender { + // Get the new view controller using [segue destinationViewController]. + // Pass the selected object to the new view controller. +} +*/ + +@end diff --git a/DashWallet/Masternode Keys/DWProviderUpdateServiceTransactionsViewController.h b/DashWallet/Masternode Keys/DWProviderUpdateServiceTransactionsViewController.h new file mode 100644 index 000000000..9576985c4 --- /dev/null +++ b/DashWallet/Masternode Keys/DWProviderUpdateServiceTransactionsViewController.h @@ -0,0 +1,21 @@ +// +// DWProviderUpdateServiceTransactionsViewController.h +// DashWallet +// +// Created by Sam Westrich on 3/3/19. +// Copyright © 2019 Dash Core Group. All rights reserved. +// + +#import + +@class DSLocalMasternode; + +NS_ASSUME_NONNULL_BEGIN + +@interface DWProviderUpdateServiceTransactionsViewController : UITableViewController + +@property (nonatomic,strong) DSLocalMasternode * localMasternode; + +@end + +NS_ASSUME_NONNULL_END diff --git a/DashWallet/Masternode Keys/DWProviderUpdateServiceTransactionsViewController.m b/DashWallet/Masternode Keys/DWProviderUpdateServiceTransactionsViewController.m new file mode 100644 index 000000000..30ddd1514 --- /dev/null +++ b/DashWallet/Masternode Keys/DWProviderUpdateServiceTransactionsViewController.m @@ -0,0 +1,103 @@ +// +// DWProviderUpdateServiceTransactionsViewController.m +// DashWallet +// +// Created by Sam Westrich on 3/3/19. +// Copyright © 2019 Dash Core Group. All rights reserved. +// + +#import "DWProviderUpdateServiceTransactionsViewController.h" +#import "DSLocalMasternode.h" +#import "DWProviderUpdateServiceTableViewCell.h" +#import "DSProviderUpdateServiceTransaction.h" +#import "NSData+Bitcoin.h" +#import "NSString+Dash.h" +#include + +@interface DWProviderUpdateServiceTransactionsViewController () + +@end + +@implementation DWProviderUpdateServiceTransactionsViewController + +- (void)viewDidLoad { + [super viewDidLoad]; + + // Uncomment the following line to preserve selection between presentations. + // self.clearsSelectionOnViewWillAppear = NO; + + // Uncomment the following line to display an Edit button in the navigation bar for this view controller. + // self.navigationItem.rightBarButtonItem = self.editButtonItem; +} + +#pragma mark - Table view data source + +- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView { + return 1; +} + +- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section { + return self.localMasternode.providerUpdateServiceTransactions.count; +} + + +- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { + static NSString * reuseIdentifier = @"ServiceTransactionCellIdentifier"; + DWProviderUpdateServiceTableViewCell *cell = (DWProviderUpdateServiceTableViewCell*)[tableView dequeueReusableCellWithIdentifier:reuseIdentifier forIndexPath:indexPath]; + + DSProviderUpdateServiceTransaction * transaction = [self.localMasternode.providerUpdateServiceTransactions objectAtIndex:indexPath.row]; + + cell.blockHeightLabel.text = [NSString stringWithFormat:@"%d",transaction.blockHeight]; + cell.operatorRewardPayoutAddressLabel.text = (transaction.scriptPayout.length?[NSString addressWithScriptPubKey:transaction.scriptPayout onChain:transaction.chain]:@""); + char s[INET6_ADDRSTRLEN]; + uint32_t ipAddress = transaction.ipAddress.u32[3]; + cell.locationLabel.text = [NSString stringWithFormat:@"%s:%d",inet_ntop(AF_INET, &ipAddress, s, sizeof(s)),self.localMasternode.port]; + return cell; +} + + +/* +// Override to support conditional editing of the table view. +- (BOOL)tableView:(UITableView *)tableView canEditRowAtIndexPath:(NSIndexPath *)indexPath { + // Return NO if you do not want the specified item to be editable. + return YES; +} +*/ + +/* +// Override to support editing the table view. +- (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath { + if (editingStyle == UITableViewCellEditingStyleDelete) { + // Delete the row from the data source + [tableView deleteRowsAtIndexPaths:@[indexPath] withRowAnimation:UITableViewRowAnimationFade]; + } else if (editingStyle == UITableViewCellEditingStyleInsert) { + // Create a new instance of the appropriate class, insert it into the array, and add a new row to the table view + } +} +*/ + +/* +// Override to support rearranging the table view. +- (void)tableView:(UITableView *)tableView moveRowAtIndexPath:(NSIndexPath *)fromIndexPath toIndexPath:(NSIndexPath *)toIndexPath { +} +*/ + +/* +// Override to support conditional rearranging of the table view. +- (BOOL)tableView:(UITableView *)tableView canMoveRowAtIndexPath:(NSIndexPath *)indexPath { + // Return NO if you do not want the item to be re-orderable. + return YES; +} +*/ + +/* +#pragma mark - Navigation + +// In a storyboard-based application, you will often want to do a little preparation before navigation +- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender { + // Get the new view controller using [segue destinationViewController]. + // Pass the selected object to the new view controller. +} +*/ + +@end diff --git a/DashWallet/Masternode Keys/DWReclaimMasternodeViewController.h b/DashWallet/Masternode Keys/DWReclaimMasternodeViewController.h new file mode 100644 index 000000000..33def175e --- /dev/null +++ b/DashWallet/Masternode Keys/DWReclaimMasternodeViewController.h @@ -0,0 +1,21 @@ +// +// DWReclaimMasternodeViewController.h +// DashWallet +// +// Created by Sam Westrich on 2/28/19. +// Copyright © 2019 Dash Core Group. All rights reserved. +// + +#import + +NS_ASSUME_NONNULL_BEGIN + +@class DSLocalMasternode; + +@interface DWReclaimMasternodeViewController : UITableViewController + +@property (nonatomic,strong) DSLocalMasternode * localMasternode; + +@end + +NS_ASSUME_NONNULL_END diff --git a/DashWallet/Masternode Keys/DWReclaimMasternodeViewController.m b/DashWallet/Masternode Keys/DWReclaimMasternodeViewController.m new file mode 100644 index 000000000..fde90364a --- /dev/null +++ b/DashWallet/Masternode Keys/DWReclaimMasternodeViewController.m @@ -0,0 +1,88 @@ +// +// DWReclaimMasternodeViewController.m +// DashWallet +// +// Created by Sam Westrich on 2/28/19. +// Copyright © 2019 Dash Core Group. All rights reserved. +// + +#import "DWReclaimMasternodeViewController.h" +#import "DWKeyValueTableViewCell.h" +#import "DWEnvironment.h" +#include + +@interface DWReclaimMasternodeViewController () + +@property (nonatomic,strong) DSAccount * account; + +@end + +@implementation DWReclaimMasternodeViewController + +- (void)viewDidLoad { + [super viewDidLoad]; + self.account = [DWEnvironment sharedInstance].currentAccount; +} + +#pragma mark - Table view data source + +- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView { + return 1; +} + +- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section { + return 0; +} + +-(UITableViewCell*)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { + switch (indexPath.section) { + case 0: + { + switch (indexPath.row) { + case 0: + return nil; + } + } + } + return nil; +} + +-(IBAction)reclaimMasternode:(id)sender { + [self.localMasternode reclaimTransactionToAccount:self.account completion:^(DSTransaction * _Nonnull reclaimTransaction) { + if (reclaimTransaction) { + DSMasternodeHoldingsDerivationPath * derivationPath = [[DSDerivationPathFactory sharedInstance] providerFundsDerivationPathForWallet:self.localMasternode.holdingKeysWallet]; + [derivationPath signTransaction:reclaimTransaction withPrompt:@"Would you like to update this masternode?" completion:^(BOOL signedTransaction) { + if (signedTransaction) { + [self.localMasternode.providerRegistrationTransaction.chain.chainManager.transactionManager publishTransaction:reclaimTransaction completion:^(NSError * _Nullable error) { + if (error) { + [self raiseIssue:@"Error" message:error.localizedDescription]; + } else { + //[masternode registerInWallet]; + [self.presentingViewController dismissViewControllerAnimated:TRUE completion:nil]; + } + }]; + } else { + [self raiseIssue:@"Error" message:@"Transaction was not signed."]; + } + }]; + } else { + [self raiseIssue:@"Error" message:@"Unable to create Reclaim Transaction."]; + } + }]; +} + +-(void)raiseIssue:(NSString*)issue message:(NSString*)message { + UIAlertController * alert = [UIAlertController alertControllerWithTitle:issue message:message preferredStyle:UIAlertControllerStyleAlert]; + [alert addAction:[UIAlertAction actionWithTitle:@"Ok" style:UIAlertActionStyleCancel handler:^(UIAlertAction * _Nonnull action) { + + }]]; + [self presentViewController:alert animated:TRUE completion:^{ + + }]; +} + +-(IBAction)cancel { + [self.presentingViewController dismissViewControllerAnimated:TRUE completion:nil]; +} + +@end diff --git a/DashWallet/Masternode Keys/DWRegisterMasternodeViewController.h b/DashWallet/Masternode Keys/DWRegisterMasternodeViewController.h new file mode 100644 index 000000000..0e15ea137 --- /dev/null +++ b/DashWallet/Masternode Keys/DWRegisterMasternodeViewController.h @@ -0,0 +1,20 @@ +// +// DWRegisterMasternodeViewController.h +// DashWallet +// +// Created by Sam Westrich on 2/9/19. +// Copyright © 2019 Dash Core Group. All rights reserved. +// + +#import +#import "DWSignPayloadViewController.h" + +NS_ASSUME_NONNULL_BEGIN + +@interface DWRegisterMasternodeViewController : UITableViewController + +@property (nonatomic,strong) DSChain * chain; + +@end + +NS_ASSUME_NONNULL_END diff --git a/DashWallet/Masternode Keys/DWRegisterMasternodeViewController.m b/DashWallet/Masternode Keys/DWRegisterMasternodeViewController.m new file mode 100644 index 000000000..c795d0be5 --- /dev/null +++ b/DashWallet/Masternode Keys/DWRegisterMasternodeViewController.m @@ -0,0 +1,212 @@ +// +// DWRegisterMasternodeViewController.m +// DashWallet +// +// Created by Sam Westrich on 2/9/19. +// Copyright © 2019 Dash Core Group. All rights reserved. +// + +#import "DWRegisterMasternodeViewController.h" +#import "DWKeyValueTableViewCell.h" +#import "DWSignPayloadViewController.h" +#import "DWEnvironment.h" +#include + +@interface DWRegisterMasternodeViewController () + +@property (nonatomic,strong) DWKeyValueTableViewCell * collateralTransactionTableViewCell; +@property (nonatomic,strong) DWKeyValueTableViewCell * collateralIndexTableViewCell; +@property (nonatomic,strong) DWKeyValueTableViewCell * ipAddressTableViewCell; +@property (nonatomic,strong) DWKeyValueTableViewCell * portTableViewCell; +@property (nonatomic,strong) DWKeyValueTableViewCell * payToAddressTableViewCell; +@property (nonatomic,strong) DWKeyValueTableViewCell * ownerIndexTableViewCell; +@property (nonatomic,strong) DWKeyValueTableViewCell * operatorIndexTableViewCell; +@property (nonatomic,strong) DWKeyValueTableViewCell * votingIndexTableViewCell; +@property (nonatomic,strong) DSAccount * account; +@property (nonatomic,strong) DSWallet * wallet; +@property (nonatomic,strong) DSProviderRegistrationTransaction * providerRegistrationTransaction; +@property (nonatomic,strong) DSTransaction * collateralTransaction; + +@end + +@implementation DWRegisterMasternodeViewController + +- (void)viewDidLoad { + [super viewDidLoad]; + self.payToAddressTableViewCell = [self.tableView dequeueReusableCellWithIdentifier:@"MasternodePayoutAddressCellIdentifier"]; + self.collateralTransactionTableViewCell = [self.tableView dequeueReusableCellWithIdentifier:@"MasternodeCollateralTransactionCellIdentifier"]; + self.collateralIndexTableViewCell = [self.tableView dequeueReusableCellWithIdentifier:@"MasternodeCollateralIndexCellIdentifier"]; + self.ipAddressTableViewCell = [self.tableView dequeueReusableCellWithIdentifier:@"MasternodeIPAddressCellIdentifier"]; + self.portTableViewCell = [self.tableView dequeueReusableCellWithIdentifier:@"MasternodePortCellIdentifier"]; + self.portTableViewCell.valueTextField.text = [NSString stringWithFormat:@"%d",self.chain.standardPort]; + self.ownerIndexTableViewCell = [self.tableView dequeueReusableCellWithIdentifier:@"MasternodeOwnerIndexCellIdentifier"]; + self.votingIndexTableViewCell = [self.tableView dequeueReusableCellWithIdentifier:@"MasternodeVotingIndexCellIdentifier"]; + self.operatorIndexTableViewCell = [self.tableView dequeueReusableCellWithIdentifier:@"MasternodeOperatorIndexCellIdentifier"]; + self.wallet = [DWEnvironment sharedInstance].currentWallet; + self.account = [DWEnvironment sharedInstance].currentAccount; +} + +#pragma mark - Table view data source + +- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView { + return 1; +} + +- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section { + return 8; +} + +-(UITableViewCell*)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { + switch (indexPath.section) { + case 0: + { + switch (indexPath.row) { + case 0: + return self.collateralTransactionTableViewCell; + case 1: + return self.collateralIndexTableViewCell; + case 2: + return self.ipAddressTableViewCell; + case 3: + return self.portTableViewCell; + case 4: + return self.ownerIndexTableViewCell; + case 5: + return self.operatorIndexTableViewCell; + case 6: + return self.votingIndexTableViewCell; + case 7: + return self.payToAddressTableViewCell; + } + } + } + return nil; +} + +-(void)signTransactionInputs:(DSProviderRegistrationTransaction*)providerRegistrationTransaction { + [self.account signTransaction:providerRegistrationTransaction withPrompt:@"Would you like to register this masternode?" completion:^(BOOL signedTransaction) { + if (signedTransaction) { + [self.chain.chainManager.transactionManager publishTransaction:providerRegistrationTransaction completion:^(NSError * _Nullable error) { + if (error) { + [self raiseIssue:@"Error" message:error.localizedDescription]; + } else { + //[masternode registerInWallet]; + [self.presentingViewController dismissViewControllerAnimated:TRUE completion:nil]; + } + }]; + } else { + [self raiseIssue:@"Error" message:@"Transaction was not signed."]; + } + }]; +} + +-(IBAction)registerMasternode:(id)sender { + NSString * ipAddressString = [self.ipAddressTableViewCell.valueTextField.text stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]]; + NSString * portString = [self.portTableViewCell.valueTextField.text stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]]; + UInt128 ipAddress = { .u32 = { 0, 0, CFSwapInt32HostToBig(0xffff), 0 } }; + struct in_addr addrV4; + if (inet_aton([ipAddressString UTF8String], &addrV4) != 0) { + uint32_t ip = ntohl(addrV4.s_addr); + ipAddress.u32[3] = CFSwapInt32HostToBig(ip); + DSDLog(@"%08x", ip); + } + uint16_t port = [portString intValue]; + + uint32_t ownerWalletIndex = UINT32_MAX; + uint32_t votingWalletIndex = UINT32_MAX; + uint32_t operatorWalletIndex = UINT32_MAX; + + if (self.ownerIndexTableViewCell.valueTextField.text && ![self.ownerIndexTableViewCell.valueTextField.text isEqualToString:@""]) { + ownerWalletIndex = (uint32_t)[self.ownerIndexTableViewCell.valueTextField.text integerValue]; + } + + if (self.operatorIndexTableViewCell.valueTextField.text && ![self.operatorIndexTableViewCell.valueTextField.text isEqualToString:@""]) { + operatorWalletIndex = (uint32_t)[self.operatorIndexTableViewCell.valueTextField.text integerValue]; + } + + if (self.votingIndexTableViewCell.valueTextField.text && ![self.votingIndexTableViewCell.valueTextField.text isEqualToString:@""]) { + votingWalletIndex = (uint32_t)[self.votingIndexTableViewCell.valueTextField.text integerValue]; + } + + DSLocalMasternode * masternode = [self.chain.chainManager.masternodeManager createNewMasternodeWithIPAddress:ipAddress onPort:port inFundsWallet:self.wallet fundsWalletIndex:UINT32_MAX inOperatorWallet:self.wallet operatorWalletIndex:operatorWalletIndex inOwnerWallet:self.wallet ownerWalletIndex:ownerWalletIndex inVotingWallet:self.wallet votingWalletIndex:votingWalletIndex]; + + NSString * payoutAddress = [self.payToAddressTableViewCell.valueTextField.text isValidDashAddressOnChain:self.chain]?self.payToAddressTableViewCell.textLabel.text:self.account.receiveAddress; + + + DSUTXO collateral = DSUTXO_ZERO; + UInt256 nonReversedCollateralHash = UINT256_ZERO; + NSString * collateralTransactionHash = self.collateralTransactionTableViewCell.valueTextField.text; + if (![collateralTransactionHash isEqual:@""]) { + NSData * collateralTransactionHashData = [collateralTransactionHash hexToData]; + if (collateralTransactionHashData.length != 32) return; + collateral.hash = collateralTransactionHashData.reverse.UInt256; + + nonReversedCollateralHash = collateralTransactionHashData.UInt256; + collateral.n = [self.collateralIndexTableViewCell.valueTextField.text integerValue]; + + } + + + [masternode registrationTransactionFundedByAccount:self.account toAddress:payoutAddress withCollateral:collateral completion:^(DSProviderRegistrationTransaction * _Nonnull providerRegistrationTransaction) { + if (providerRegistrationTransaction) { + if (dsutxo_is_zero(collateral)) { + [self signTransactionInputs:providerRegistrationTransaction]; + } else { + [[DSInsightManager sharedInstance] queryInsightForTransactionWithHash:nonReversedCollateralHash onChain:self.chain completion:^(DSTransaction *transaction, NSError *error) { + NSIndexSet * indexSet = [[transaction outputAmounts] indexesOfObjectsPassingTest:^BOOL(id _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) { + if ([obj isEqual:@(MASTERNODE_COST)]) return TRUE; + return FALSE; + }]; + if ([indexSet containsIndex:collateral.n]) { + self.collateralTransaction = transaction; + self.providerRegistrationTransaction = providerRegistrationTransaction; + dispatch_async(dispatch_get_main_queue(), ^{ + [self performSegueWithIdentifier:@"PayloadSigningSegue" sender:self]; + }); + } else { + dispatch_async(dispatch_get_main_queue(), ^{ + [self raiseIssue:@"Error" message:@"Incorrect collateral index"]; + }); + } + + }]; + + + } + + } else { + [self raiseIssue:@"Error" message:@"Unable to create ProviderRegistrationTransaction."]; + } + }]; +} + +-(void)raiseIssue:(NSString*)issue message:(NSString*)message { + UIAlertController * alert = [UIAlertController alertControllerWithTitle:issue message:message preferredStyle:UIAlertControllerStyleAlert]; + [alert addAction:[UIAlertAction actionWithTitle:@"Ok" style:UIAlertActionStyleCancel handler:^(UIAlertAction * _Nonnull action) { + + }]]; + [self presentViewController:alert animated:TRUE completion:^{ + + }]; +} + +-(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender { + if ([segue.identifier isEqualToString:@"PayloadSigningSegue"]) { + DWSignPayloadViewController * signPayloadSegue = (DWSignPayloadViewController*)segue.destinationViewController; + signPayloadSegue.collateralAddress = self.collateralTransaction.outputAddresses[self.providerRegistrationTransaction.collateralOutpoint.n]; + signPayloadSegue.providerRegistrationTransaction = self.providerRegistrationTransaction; + signPayloadSegue.delegate = self; + } +} + +-(IBAction)cancel { + [self.presentingViewController dismissViewControllerAnimated:TRUE completion:nil]; +} + +- (void)viewController:(nonnull UIViewController *)controller didReturnSignature:(nonnull NSData *)signature { + self.providerRegistrationTransaction.payloadSignature = signature; + [self signTransactionInputs:self.providerRegistrationTransaction]; +} + + +@end diff --git a/DashWallet/Masternode Keys/DWSignPayloadViewController.h b/DashWallet/Masternode Keys/DWSignPayloadViewController.h new file mode 100644 index 000000000..a18d6be6b --- /dev/null +++ b/DashWallet/Masternode Keys/DWSignPayloadViewController.h @@ -0,0 +1,30 @@ +// +// DWSignPayloadViewController.h +// DashWallet +// +// Created by Sam Westrich on 3/8/19. +// Copyright © 2019 Dash Core Group. All rights reserved. +// + +#import + + +@class DSProviderRegistrationTransaction; + +NS_ASSUME_NONNULL_BEGIN + +@protocol DWSignPayloadDelegate + +-(void)viewController:(UIViewController*)controller didReturnSignature:(NSData*)signature; + +@end + +@interface DWSignPayloadViewController : UIViewController + +@property (nonatomic,weak) id delegate; +@property (nonatomic,strong) NSString * collateralAddress; +@property (nonatomic,strong) DSProviderRegistrationTransaction * providerRegistrationTransaction; + +@end + +NS_ASSUME_NONNULL_END diff --git a/DashWallet/Masternode Keys/DWSignPayloadViewController.m b/DashWallet/Masternode Keys/DWSignPayloadViewController.m new file mode 100644 index 000000000..8df0ed757 --- /dev/null +++ b/DashWallet/Masternode Keys/DWSignPayloadViewController.m @@ -0,0 +1,78 @@ +// +// DWSignPayloadViewController.m +// DashWallet +// +// Created by Sam Westrich on 3/8/19. +// Copyright © 2019 Dash Core Group. All rights reserved. +// + +#import "DWSignPayloadViewController.h" +#import "DSProviderRegistrationTransaction.h" +#import "NSMutableData+Dash.h" +#import "NSData+Bitcoin.h" +#import "NSString+Dash.h" +#import "DSECDSAKey.h" +#import "DSAccount.h" +#import "DSWallet.h" + +@interface DWSignPayloadViewController () +@property (strong, nonatomic) IBOutlet UITextView *signatureMessageInputTextView; +@property (strong, nonatomic) IBOutlet UITextView *signatureMessageResultTextView; +@property (strong, nonatomic) IBOutlet UIButton *signButton; + +@end + +@implementation DWSignPayloadViewController + +- (void)viewDidLoad { + [super viewDidLoad]; + self.signatureMessageInputTextView.text = self.providerRegistrationTransaction.payloadCollateralString; + + if ([self.providerRegistrationTransaction.chain accountContainingAddress:self.collateralAddress]) { + self.signButton.enabled = TRUE; + } else { + self.signButton.enabled = FALSE; + } +} + +/* +#pragma mark - Navigation + +// In a storyboard-based application, you will often want to do a little preparation before navigation +- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender { + // Get the new view controller using [segue destinationViewController]. + // Pass the selected object to the new view controller. +} +*/ +- (IBAction)sign:(id)sender { + + if (self.signatureMessageResultTextView.text && ![self.signatureMessageResultTextView.text isEqualToString:@""]) { + NSData * signature = [[NSData alloc] initWithBase64EncodedString:self.signatureMessageResultTextView.text options:0]; + DSECDSAKey * key = [DSECDSAKey keyRecoveredFromCompactSig:signature andMessageDigest:self.providerRegistrationTransaction.payloadCollateralDigest]; + NSString * address = [key addressForChain:self.providerRegistrationTransaction.chain]; + if ([address isEqualToString:self.collateralAddress]) { + [self.delegate viewController:self didReturnSignature:signature]; + } else { + NSLog(@"Not matching signature"); + } + } else { + DSAccount * account = [self.providerRegistrationTransaction.chain accountContainingAddress:self.collateralAddress]; + + + + + DSFundsDerivationPath * derivationPath = [account derivationPathContainingAddress:self.collateralAddress]; + + NSIndexPath * indexPath = [derivationPath indexPathForKnownAddress:self.collateralAddress]; + + [account.wallet seedWithPrompt:@"Sign?" forAmount:0 completion:^(NSData * _Nullable seed, BOOL cancelled) { + if (seed && !cancelled) { + DSECDSAKey* key = (DSECDSAKey*)[derivationPath privateKeyAtIndexPath:indexPath fromSeed:seed]; + NSData * data = [key compactSign:self.providerRegistrationTransaction.payloadCollateralDigest]; + [self.delegate viewController:self didReturnSignature:data]; + } + }]; + } +} + +@end diff --git a/DashWallet/Masternode Keys/DWUpdateMasternodeRegistrarViewController.h b/DashWallet/Masternode Keys/DWUpdateMasternodeRegistrarViewController.h new file mode 100644 index 000000000..64f0f6bc3 --- /dev/null +++ b/DashWallet/Masternode Keys/DWUpdateMasternodeRegistrarViewController.h @@ -0,0 +1,20 @@ +// +// DWUpdateMasternodeRegistrarViewController.h +// DashWallet +// +// Created by Sam Westrich on 2/22/19. +// Copyright © 2019 Dash Core Group. All rights reserved. +// + +#import + +NS_ASSUME_NONNULL_BEGIN + +@interface DWUpdateMasternodeRegistrarViewController : UITableViewController + +@property (nonatomic,strong) DSLocalMasternode * localMasternode; +@property (nonatomic,strong) DSSimplifiedMasternodeEntry * simplifiedMasternodeEntry; + +@end + +NS_ASSUME_NONNULL_END diff --git a/DashWallet/Masternode Keys/DWUpdateMasternodeRegistrarViewController.m b/DashWallet/Masternode Keys/DWUpdateMasternodeRegistrarViewController.m new file mode 100644 index 000000000..aea82f8cd --- /dev/null +++ b/DashWallet/Masternode Keys/DWUpdateMasternodeRegistrarViewController.m @@ -0,0 +1,101 @@ +// +// DWUpdateMasternodeRegistrarViewController.m +// DashWallet +// +// Created by Sam Westrich on 2/22/19. +// Copyright © 2019 Dash Core Group. All rights reserved. +// + +#import "DWUpdateMasternodeRegistrarViewController.h" +#import "DWKeyValueTableViewCell.h" +#import "DWEnvironment.h" +#include + +@interface DWUpdateMasternodeRegistrarViewController () + +@property (nonatomic,strong) DWKeyValueTableViewCell * payoutTableViewCell; +@property (nonatomic,strong) DSAccount * account; +@property (nonatomic,strong) DSWallet * votingWallet; + +@end + +@implementation DWUpdateMasternodeRegistrarViewController + +- (void)viewDidLoad { + [super viewDidLoad]; + self.payoutTableViewCell = [self.tableView dequeueReusableCellWithIdentifier:@"MasternodePayoutAddressCellIdentifier"]; + self.votingWallet = [DWEnvironment sharedInstance].currentWallet; + self.account = [DWEnvironment sharedInstance].currentAccount; +} + +#pragma mark - Table view data source + +- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView { + return 1; +} + +- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section { + return 3; +} + +-(UITableViewCell*)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { + switch (indexPath.section) { + case 0: + { + switch (indexPath.row) { + case 0: + return self.payoutTableViewCell; + } + } + } + return nil; +} + +-(IBAction)updateMasternode:(id)sender { + UInt160 votingHash; + if (self.votingWallet) { + DSAuthenticationKeysDerivationPath * providerVotingKeysDerivationPath = [DSAuthenticationKeysDerivationPath providerVotingKeysDerivationPathForWallet:self.votingWallet]; + votingHash = providerVotingKeysDerivationPath.firstUnusedPublicKey.hash160; + } else { + votingHash = self.simplifiedMasternodeEntry.keyIDVoting; + } + NSString * payoutAddress = (self.payoutTableViewCell.valueTextField.text && ![self.payoutTableViewCell.valueTextField.text isEqualToString:@""])?self.payoutTableViewCell.valueTextField.text:self.localMasternode + .payoutAddress; + [self.localMasternode updateTransactionFundedByAccount:self.account changeOperator:self.localMasternode.providerRegistrationTransaction.operatorKey changeVotingKeyHash:votingHash changePayoutAddress:payoutAddress completion:^(DSProviderUpdateRegistrarTransaction * _Nonnull providerUpdateRegistrarTransaction) { + + if (providerUpdateRegistrarTransaction) { + [self.account signTransaction:providerUpdateRegistrarTransaction withPrompt:@"Would you like to update this masternode?" completion:^(BOOL signedTransaction) { + if (signedTransaction) { + [self.localMasternode.providerRegistrationTransaction.chain.chainManager.transactionManager publishTransaction:providerUpdateRegistrarTransaction completion:^(NSError * _Nullable error) { + if (error) { + [self raiseIssue:@"Error" message:error.localizedDescription]; + } else { + //[masternode registerInWallet]; + [self.presentingViewController dismissViewControllerAnimated:TRUE completion:nil]; + } + }]; + } else { + [self raiseIssue:@"Error" message:@"Transaction was not signed."]; + } + }]; + } else { + [self raiseIssue:@"Error" message:@"Unable to create ProviderRegistrationTransaction."]; + } + }]; +} + +-(void)raiseIssue:(NSString*)issue message:(NSString*)message { + UIAlertController * alert = [UIAlertController alertControllerWithTitle:issue message:message preferredStyle:UIAlertControllerStyleAlert]; + [alert addAction:[UIAlertAction actionWithTitle:@"Ok" style:UIAlertActionStyleCancel handler:^(UIAlertAction * _Nonnull action) { + + }]]; + [self presentViewController:alert animated:TRUE completion:^{ + + }]; +} + +-(IBAction)cancel { + [self.presentingViewController dismissViewControllerAnimated:TRUE completion:nil]; +} + +@end diff --git a/DashWallet/Masternode Keys/DWUpdateMasternodeRevocationViewController.h b/DashWallet/Masternode Keys/DWUpdateMasternodeRevocationViewController.h new file mode 100644 index 000000000..3acabae16 --- /dev/null +++ b/DashWallet/Masternode Keys/DWUpdateMasternodeRevocationViewController.h @@ -0,0 +1,17 @@ +// +// DWUpdateMasternodeRevocationViewController.h +// DashWallet +// +// Created by Sam Westrich on 2/26/19. +// Copyright © 2019 Dash Core Group. All rights reserved. +// + +#import + +NS_ASSUME_NONNULL_BEGIN + +@interface DWUpdateMasternodeRevocationViewController : UITableViewController + +@end + +NS_ASSUME_NONNULL_END diff --git a/DashWallet/Masternode Keys/DWUpdateMasternodeRevocationViewController.m b/DashWallet/Masternode Keys/DWUpdateMasternodeRevocationViewController.m new file mode 100644 index 000000000..11bc7860c --- /dev/null +++ b/DashWallet/Masternode Keys/DWUpdateMasternodeRevocationViewController.m @@ -0,0 +1,27 @@ +// +// DWUpdateMasternodeRevocationViewController.m +// DashWallet +// +// Created by Sam Westrich on 2/26/19. +// Copyright © 2019 Dash Core Group. All rights reserved. +// + +#import "DWUpdateMasternodeRevocationViewController.h" + +@interface DWUpdateMasternodeRevocationViewController () + +@end + +@implementation DWUpdateMasternodeRevocationViewController + +- (void)viewDidLoad { + [super viewDidLoad]; + + // Uncomment the following line to preserve selection between presentations. + // self.clearsSelectionOnViewWillAppear = NO; + + // Uncomment the following line to display an Edit button in the navigation bar for this view controller. + // self.navigationItem.rightBarButtonItem = self.editButtonItem; +} + +@end diff --git a/DashWallet/Masternode Keys/DWUpdateMasternodeServiceViewController.h b/DashWallet/Masternode Keys/DWUpdateMasternodeServiceViewController.h new file mode 100644 index 000000000..b8957fe29 --- /dev/null +++ b/DashWallet/Masternode Keys/DWUpdateMasternodeServiceViewController.h @@ -0,0 +1,21 @@ +// +// DWUpdateMasternodeServiceViewController.h +// DashWallet +// +// Created by Sam Westrich on 2/21/19. +// Copyright © 2019 Dash Core Group. All rights reserved. +// + +#import + +NS_ASSUME_NONNULL_BEGIN + +@class DSLocalMasternode; + +@interface DWUpdateMasternodeServiceViewController : UITableViewController + +@property (nonatomic,strong) DSLocalMasternode * localMasternode; + +@end + +NS_ASSUME_NONNULL_END diff --git a/DashWallet/Masternode Keys/DWUpdateMasternodeServiceViewController.m b/DashWallet/Masternode Keys/DWUpdateMasternodeServiceViewController.m new file mode 100644 index 000000000..76df93900 --- /dev/null +++ b/DashWallet/Masternode Keys/DWUpdateMasternodeServiceViewController.m @@ -0,0 +1,107 @@ +// +// DWUpdateMasternodeServiceViewController.m +// DashWallet +// +// Created by Sam Westrich on 2/21/19. +// Copyright © 2019 Dash Core Group. All rights reserved. +// + +#import "DWUpdateMasternodeServiceViewController.h" +#import "DWKeyValueTableViewCell.h" +#import "DWEnvironment.h" +#include + +@interface DWUpdateMasternodeServiceViewController () + +@property (nonatomic,strong) DWKeyValueTableViewCell * ipAddressTableViewCell; +@property (nonatomic,strong) DWKeyValueTableViewCell * portTableViewCell; +@property (nonatomic,strong) DSAccount * account; + +@end + +@implementation DWUpdateMasternodeServiceViewController + +- (void)viewDidLoad { + [super viewDidLoad]; + self.ipAddressTableViewCell = [self.tableView dequeueReusableCellWithIdentifier:@"MasternodeIPAddressCellIdentifier"]; + char s[INET6_ADDRSTRLEN]; + uint32_t ipAddress = self.localMasternode.ipAddress.u32[3]; + self.ipAddressTableViewCell.valueTextField.text = [NSString stringWithFormat:@"%s",inet_ntop(AF_INET, &ipAddress, s, sizeof(s))]; + self.portTableViewCell = [self.tableView dequeueReusableCellWithIdentifier:@"MasternodePortCellIdentifier"]; + self.portTableViewCell.valueTextField.text = [NSString stringWithFormat:@"%d",self.localMasternode.port]; + self.account = [DWEnvironment sharedInstance].currentAccount; +} + +#pragma mark - Table view data source + +- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView { + return 1; +} + +- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section { + return 3; +} + +-(UITableViewCell*)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { + switch (indexPath.section) { + case 0: + { + switch (indexPath.row) { + case 0: + return self.ipAddressTableViewCell; + case 1: + return self.portTableViewCell; + } + } + } + return nil; +} + +-(IBAction)updateMasternode:(id)sender { + NSString * ipAddressString = self.ipAddressTableViewCell.valueTextField.text; + NSString * portString = self.portTableViewCell.valueTextField.text; + UInt128 ipAddress = { .u32 = { 0, 0, CFSwapInt32HostToBig(0xffff), 0 } }; + struct in_addr addrV4; + if (inet_aton([ipAddressString UTF8String], &addrV4) != 0) { + uint32_t ip = ntohl(addrV4.s_addr); + ipAddress.u32[3] = CFSwapInt32HostToBig(ip); + DSDLog(@"%08x", ip); + } + uint16_t port = [portString intValue]; + [self.localMasternode updateTransactionFundedByAccount:self.account toIPAddress:ipAddress port:port payoutAddress:nil completion:^(DSProviderUpdateServiceTransaction * _Nonnull providerUpdateServiceTransaction) { + if (providerUpdateServiceTransaction) { + [self.account signTransaction:providerUpdateServiceTransaction withPrompt:@"Would you like to update this masternode?" completion:^(BOOL signedTransaction) { + if (signedTransaction) { + [self.localMasternode.providerRegistrationTransaction.chain.chainManager.transactionManager publishTransaction:providerUpdateServiceTransaction completion:^(NSError * _Nullable error) { + if (error) { + [self raiseIssue:@"Error" message:error.localizedDescription]; + } else { + //[masternode registerInWallet]; + [self.presentingViewController dismissViewControllerAnimated:TRUE completion:nil]; + } + }]; + } else { + [self raiseIssue:@"Error" message:@"Transaction was not signed."]; + } + }]; + } else { + [self raiseIssue:@"Error" message:@"Unable to create ProviderRegistrationTransaction."]; + } + }]; +} + +-(void)raiseIssue:(NSString*)issue message:(NSString*)message { + UIAlertController * alert = [UIAlertController alertControllerWithTitle:issue message:message preferredStyle:UIAlertControllerStyleAlert]; + [alert addAction:[UIAlertAction actionWithTitle:@"Ok" style:UIAlertActionStyleCancel handler:^(UIAlertAction * _Nonnull action) { + + }]]; + [self presentViewController:alert animated:TRUE completion:^{ + + }]; +} + +-(IBAction)cancel { + [self.presentingViewController dismissViewControllerAnimated:TRUE completion:nil]; +} + +@end diff --git a/DashWallet/Masternode Keys/Masternode.storyboard b/DashWallet/Masternode Keys/Masternode.storyboard new file mode 100644 index 000000000..6ea0604e3 --- /dev/null +++ b/DashWallet/Masternode Keys/Masternode.storyboard @@ -0,0 +1,1746 @@ + + + + + + + + + + + + + + Montserrat-Medium + + + Montserrat-Regular + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/DashWallet/Masternode Keys/MasternodeKeys.storyboard b/DashWallet/Masternode Keys/MasternodeKeys.storyboard deleted file mode 100644 index 613b4b078..000000000 --- a/DashWallet/Masternode Keys/MasternodeKeys.storyboard +++ /dev/null @@ -1,202 +0,0 @@ - - - - - - - - - - - - - Montserrat-Medium - - - Montserrat-Regular - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/DashWallet/TxDetails/DSTransactionAmountTableViewCell.h b/DashWallet/TxDetails/DSTransactionAmountTableViewCell.h index 9b4524abe..a9e2f4f8f 100644 --- a/DashWallet/TxDetails/DSTransactionAmountTableViewCell.h +++ b/DashWallet/TxDetails/DSTransactionAmountTableViewCell.h @@ -1,6 +1,6 @@ // // DSTransactionAmountTableViewCell.h -// DashSync_Example +// DashWallet // // Created by Sam Westrich on 7/22/18. // Copyright © 2018 Dash Core Group. All rights reserved. diff --git a/DashWallet/TxDetails/DSTransactionAmountTableViewCell.m b/DashWallet/TxDetails/DSTransactionAmountTableViewCell.m index eab0e3c78..a8cd1804d 100644 --- a/DashWallet/TxDetails/DSTransactionAmountTableViewCell.m +++ b/DashWallet/TxDetails/DSTransactionAmountTableViewCell.m @@ -1,6 +1,6 @@ // // DSTransactionAmountTableViewCell.m -// DashSync_Example +// DashWallet // // Created by Sam Westrich on 7/22/18. // Copyright © 2018 Dash Core Group. All rights reserved. diff --git a/DashWallet/TxDetails/DSTransactionDetailTableViewCell.h b/DashWallet/TxDetails/DSTransactionDetailTableViewCell.h index b23c388e6..df958a433 100644 --- a/DashWallet/TxDetails/DSTransactionDetailTableViewCell.h +++ b/DashWallet/TxDetails/DSTransactionDetailTableViewCell.h @@ -1,6 +1,6 @@ // // DSTransactionDetailTableViewCell.h -// DashSync_Example +// DashWallet // // Created by Sam Westrich on 7/22/18. // Copyright © 2018 Dash Core Group. All rights reserved. diff --git a/DashWallet/TxDetails/DSTransactionDetailTableViewCell.m b/DashWallet/TxDetails/DSTransactionDetailTableViewCell.m index 030af762e..a16af2a10 100644 --- a/DashWallet/TxDetails/DSTransactionDetailTableViewCell.m +++ b/DashWallet/TxDetails/DSTransactionDetailTableViewCell.m @@ -1,6 +1,6 @@ // // DSTransactionDetailTableViewCell.m -// DashSync_Example +// DashWallet // // Created by Sam Westrich on 7/22/18. // Copyright © 2018 Dash Core Group. All rights reserved. diff --git a/DashWallet/TxDetails/DSTransactionIdentifierTableViewCell.h b/DashWallet/TxDetails/DSTransactionIdentifierTableViewCell.h index 1035fd0f0..8928d0185 100644 --- a/DashWallet/TxDetails/DSTransactionIdentifierTableViewCell.h +++ b/DashWallet/TxDetails/DSTransactionIdentifierTableViewCell.h @@ -1,6 +1,6 @@ // // DSTransactionIdentifierTableViewCell.h -// DashSync_Example +// DashWallet // // Created by Sam Westrich on 7/22/18. // Copyright © 2018 Dash Core Group. All rights reserved. diff --git a/DashWallet/TxDetails/DSTransactionIdentifierTableViewCell.m b/DashWallet/TxDetails/DSTransactionIdentifierTableViewCell.m index 2585d30cd..c60befbe8 100644 --- a/DashWallet/TxDetails/DSTransactionIdentifierTableViewCell.m +++ b/DashWallet/TxDetails/DSTransactionIdentifierTableViewCell.m @@ -1,6 +1,6 @@ // // DSTransactionIdentifierTableViewCell.m -// DashSync_Example +// DashWallet // // Created by Sam Westrich on 7/22/18. // Copyright © 2018 Dash Core Group. All rights reserved. diff --git a/DashWallet/TxDetails/DSTransactionStatusTableViewCell.h b/DashWallet/TxDetails/DSTransactionStatusTableViewCell.h index 47a0f103b..eb8488089 100644 --- a/DashWallet/TxDetails/DSTransactionStatusTableViewCell.h +++ b/DashWallet/TxDetails/DSTransactionStatusTableViewCell.h @@ -1,6 +1,6 @@ // // DSTransactionStatusTableViewCell.h -// DashSync_Example +// DashWallet // // Created by Sam Westrich on 7/22/18. // Copyright © 2018 Dash Core Group. All rights reserved. diff --git a/DashWallet/TxDetails/DSTransactionStatusTableViewCell.m b/DashWallet/TxDetails/DSTransactionStatusTableViewCell.m index 2e785507e..a87a704f2 100644 --- a/DashWallet/TxDetails/DSTransactionStatusTableViewCell.m +++ b/DashWallet/TxDetails/DSTransactionStatusTableViewCell.m @@ -1,6 +1,6 @@ // // DSTransactionStatusTableViewCell.m -// DashSync_Example +// DashWallet // // Created by Sam Westrich on 7/22/18. // Copyright © 2018 Dash Core Group. All rights reserved. diff --git a/DashWallet/ar.lproj/Localizable.strings b/DashWallet/ar.lproj/Localizable.strings index 5dff9c032..27ea539ec 100644 --- a/DashWallet/ar.lproj/Localizable.strings +++ b/DashWallet/ar.lproj/Localizable.strings @@ -302,6 +302,9 @@ /* No comment provided by engineer. */ "locked with instant send" = "locked with instant send"; +/* No comment provided by engineer. */ +"Masternode control" = "Masternode control"; + /* No comment provided by engineer. */ "masternode holding address" = "masternode holding address"; @@ -554,9 +557,6 @@ /* No comment provided by engineer. */ "show" = "عرض"; -/* No comment provided by engineer. */ -"Show masternode keys" = "Show masternode keys"; - /* No comment provided by engineer. */ "show phrase" = "إظهار الجملة"; diff --git a/DashWallet/bg.lproj/Localizable.strings b/DashWallet/bg.lproj/Localizable.strings index ef491b18c..f75818a66 100644 --- a/DashWallet/bg.lproj/Localizable.strings +++ b/DashWallet/bg.lproj/Localizable.strings @@ -302,6 +302,9 @@ /* No comment provided by engineer. */ "locked with instant send" = "locked with instant send"; +/* No comment provided by engineer. */ +"Masternode control" = "Masternode control"; + /* No comment provided by engineer. */ "masternode holding address" = "masternode притежаван адрес"; @@ -554,9 +557,6 @@ /* No comment provided by engineer. */ "show" = "покажи"; -/* No comment provided by engineer. */ -"Show masternode keys" = "Покажи masternode ключове"; - /* No comment provided by engineer. */ "show phrase" = "покажи фраза"; diff --git a/DashWallet/de.lproj/Localizable.strings b/DashWallet/de.lproj/Localizable.strings index 5e15c52d9..1740fdc6c 100644 --- a/DashWallet/de.lproj/Localizable.strings +++ b/DashWallet/de.lproj/Localizable.strings @@ -302,6 +302,9 @@ /* No comment provided by engineer. */ "locked with instant send" = "locked with instant send"; +/* No comment provided by engineer. */ +"Masternode control" = "Masternode control"; + /* No comment provided by engineer. */ "masternode holding address" = "Masternode Halter-Adresse"; @@ -554,9 +557,6 @@ /* No comment provided by engineer. */ "show" = "anzeigen"; -/* No comment provided by engineer. */ -"Show masternode keys" = "Masternode-Schlüssel anzeigen"; - /* No comment provided by engineer. */ "show phrase" = "Wiederherstellungs-Wortfolge anzeigen"; diff --git a/DashWallet/el.lproj/Localizable.strings b/DashWallet/el.lproj/Localizable.strings index 0bff7a5d5..6ff135f73 100644 --- a/DashWallet/el.lproj/Localizable.strings +++ b/DashWallet/el.lproj/Localizable.strings @@ -302,6 +302,9 @@ /* No comment provided by engineer. */ "locked with instant send" = "locked with instant send"; +/* No comment provided by engineer. */ +"Masternode control" = "Masternode control"; + /* No comment provided by engineer. */ "masternode holding address" = "masternode holding address"; @@ -554,9 +557,6 @@ /* No comment provided by engineer. */ "show" = "εμφάνιση"; -/* No comment provided by engineer. */ -"Show masternode keys" = "Show masternode keys"; - /* No comment provided by engineer. */ "show phrase" = "εμφάνιση φράσης"; diff --git a/DashWallet/en.lproj/Localizable.strings b/DashWallet/en.lproj/Localizable.strings index 2861ed61c..d6e435b63 100644 --- a/DashWallet/en.lproj/Localizable.strings +++ b/DashWallet/en.lproj/Localizable.strings @@ -302,6 +302,9 @@ /* No comment provided by engineer. */ "locked with instant send" = "locked with instant send"; +/* No comment provided by engineer. */ +"Masternode control" = "Masternode control"; + /* No comment provided by engineer. */ "masternode holding address" = "masternode holding address"; @@ -554,9 +557,6 @@ /* No comment provided by engineer. */ "show" = "show"; -/* No comment provided by engineer. */ -"Show masternode keys" = "Show masternode keys"; - /* No comment provided by engineer. */ "show phrase" = "show phrase"; diff --git a/DashWallet/es.lproj/Localizable.strings b/DashWallet/es.lproj/Localizable.strings index 8dd6dc1e7..387640547 100644 --- a/DashWallet/es.lproj/Localizable.strings +++ b/DashWallet/es.lproj/Localizable.strings @@ -302,6 +302,9 @@ /* No comment provided by engineer. */ "locked with instant send" = "locked with instant send"; +/* No comment provided by engineer. */ +"Masternode control" = "Masternode control"; + /* No comment provided by engineer. */ "masternode holding address" = "Dirección de almacenamiento de masternode"; @@ -554,9 +557,6 @@ /* No comment provided by engineer. */ "show" = "mostrar"; -/* No comment provided by engineer. */ -"Show masternode keys" = "Mostrar llaves de masternode"; - /* No comment provided by engineer. */ "show phrase" = "mostrar frase"; diff --git a/DashWallet/fr.lproj/Localizable.strings b/DashWallet/fr.lproj/Localizable.strings index 332509d9f..e8a58c31e 100644 --- a/DashWallet/fr.lproj/Localizable.strings +++ b/DashWallet/fr.lproj/Localizable.strings @@ -302,6 +302,9 @@ /* No comment provided by engineer. */ "locked with instant send" = "locked with instant send"; +/* No comment provided by engineer. */ +"Masternode control" = "Masternode control"; + /* No comment provided by engineer. */ "masternode holding address" = "adresse de masternode"; @@ -554,9 +557,6 @@ /* No comment provided by engineer. */ "show" = "montrer"; -/* No comment provided by engineer. */ -"Show masternode keys" = "Voir les clés de masternode"; - /* No comment provided by engineer. */ "show phrase" = "montrer la phrase"; diff --git a/DashWallet/id.lproj/Localizable.strings b/DashWallet/id.lproj/Localizable.strings index 8d34f7700..d9187890b 100644 --- a/DashWallet/id.lproj/Localizable.strings +++ b/DashWallet/id.lproj/Localizable.strings @@ -302,6 +302,9 @@ /* No comment provided by engineer. */ "locked with instant send" = "locked with instant send"; +/* No comment provided by engineer. */ +"Masternode control" = "Masternode control"; + /* No comment provided by engineer. */ "masternode holding address" = "alamat pemegang masternode"; @@ -554,9 +557,6 @@ /* No comment provided by engineer. */ "show" = "tunjukkan"; -/* No comment provided by engineer. */ -"Show masternode keys" = "Tampilkan kunci masternode"; - /* No comment provided by engineer. */ "show phrase" = "tunjukkan frasa"; diff --git a/DashWallet/it.lproj/Localizable.strings b/DashWallet/it.lproj/Localizable.strings index d7ece7399..44f9d19ba 100644 --- a/DashWallet/it.lproj/Localizable.strings +++ b/DashWallet/it.lproj/Localizable.strings @@ -302,6 +302,9 @@ /* No comment provided by engineer. */ "locked with instant send" = "locked with instant send"; +/* No comment provided by engineer. */ +"Masternode control" = "Masternode control"; + /* No comment provided by engineer. */ "masternode holding address" = "indirizzo di partecipazione del masternode"; @@ -554,9 +557,6 @@ /* No comment provided by engineer. */ "show" = "mostra"; -/* No comment provided by engineer. */ -"Show masternode keys" = "Mostra le chiavi masternode"; - /* No comment provided by engineer. */ "show phrase" = "mostra frase"; diff --git a/DashWallet/ja.lproj/Localizable.strings b/DashWallet/ja.lproj/Localizable.strings index eeefdc345..f95f2c81d 100644 --- a/DashWallet/ja.lproj/Localizable.strings +++ b/DashWallet/ja.lproj/Localizable.strings @@ -302,6 +302,9 @@ /* No comment provided by engineer. */ "locked with instant send" = "locked with instant send"; +/* No comment provided by engineer. */ +"Masternode control" = "Masternode control"; + /* No comment provided by engineer. */ "masternode holding address" = "masternode holding address"; @@ -554,9 +557,6 @@ /* No comment provided by engineer. */ "show" = "表示"; -/* No comment provided by engineer. */ -"Show masternode keys" = "Show masternode keys"; - /* No comment provided by engineer. */ "show phrase" = "フレーズを表示"; diff --git a/DashWallet/ko.lproj/Localizable.strings b/DashWallet/ko.lproj/Localizable.strings index f34be695c..aebf5fc37 100644 --- a/DashWallet/ko.lproj/Localizable.strings +++ b/DashWallet/ko.lproj/Localizable.strings @@ -302,6 +302,9 @@ /* No comment provided by engineer. */ "locked with instant send" = "locked with instant send"; +/* No comment provided by engineer. */ +"Masternode control" = "Masternode control"; + /* No comment provided by engineer. */ "masternode holding address" = "마스터노드 보유 주소"; @@ -554,9 +557,6 @@ /* No comment provided by engineer. */ "show" = "보기"; -/* No comment provided by engineer. */ -"Show masternode keys" = "마스터노드 키 확인하기"; - /* No comment provided by engineer. */ "show phrase" = "문구 보기"; diff --git a/DashWallet/nb.lproj/Localizable.strings b/DashWallet/nb.lproj/Localizable.strings index 547c07e19..4d59d2625 100644 --- a/DashWallet/nb.lproj/Localizable.strings +++ b/DashWallet/nb.lproj/Localizable.strings @@ -302,6 +302,9 @@ /* No comment provided by engineer. */ "locked with instant send" = "locked with instant send"; +/* No comment provided by engineer. */ +"Masternode control" = "Masternode control"; + /* No comment provided by engineer. */ "masternode holding address" = "masternode holding address"; @@ -554,9 +557,6 @@ /* No comment provided by engineer. */ "show" = "vis"; -/* No comment provided by engineer. */ -"Show masternode keys" = "Show masternode keys"; - /* No comment provided by engineer. */ "show phrase" = "vis frase"; diff --git a/DashWallet/nl.lproj/Localizable.strings b/DashWallet/nl.lproj/Localizable.strings index 3cc9819a0..0e3dc8120 100644 --- a/DashWallet/nl.lproj/Localizable.strings +++ b/DashWallet/nl.lproj/Localizable.strings @@ -302,6 +302,9 @@ /* No comment provided by engineer. */ "locked with instant send" = "locked with instant send"; +/* No comment provided by engineer. */ +"Masternode control" = "Masternode control"; + /* No comment provided by engineer. */ "masternode holding address" = "adres met saldo van masternode"; @@ -554,9 +557,6 @@ /* No comment provided by engineer. */ "show" = "toon"; -/* No comment provided by engineer. */ -"Show masternode keys" = "Toon masternode sleutels"; - /* No comment provided by engineer. */ "show phrase" = "toon zin"; diff --git a/DashWallet/pl.lproj/Localizable.strings b/DashWallet/pl.lproj/Localizable.strings index bec907216..a77bb863a 100644 --- a/DashWallet/pl.lproj/Localizable.strings +++ b/DashWallet/pl.lproj/Localizable.strings @@ -302,6 +302,9 @@ /* No comment provided by engineer. */ "locked with instant send" = "locked with instant send"; +/* No comment provided by engineer. */ +"Masternode control" = "Masternode control"; + /* No comment provided by engineer. */ "masternode holding address" = "adres przetrzymujący masternode"; @@ -554,9 +557,6 @@ /* No comment provided by engineer. */ "show" = "pokaż"; -/* No comment provided by engineer. */ -"Show masternode keys" = "Pokaż klucze masternoda"; - /* No comment provided by engineer. */ "show phrase" = "pokaż frazę"; diff --git a/DashWallet/pt.lproj/Localizable.strings b/DashWallet/pt.lproj/Localizable.strings index 7a0a36ee5..c7442a561 100644 --- a/DashWallet/pt.lproj/Localizable.strings +++ b/DashWallet/pt.lproj/Localizable.strings @@ -302,6 +302,9 @@ /* No comment provided by engineer. */ "locked with instant send" = "locked with instant send"; +/* No comment provided by engineer. */ +"Masternode control" = "Masternode control"; + /* No comment provided by engineer. */ "masternode holding address" = "endereço principal do masternode"; @@ -554,9 +557,6 @@ /* No comment provided by engineer. */ "show" = "mostrar"; -/* No comment provided by engineer. */ -"Show masternode keys" = "Mostrar chaves do masternode"; - /* No comment provided by engineer. */ "show phrase" = "mostrar a frase"; diff --git a/DashWallet/ru.lproj/Localizable.strings b/DashWallet/ru.lproj/Localizable.strings index 83002e2a1..2ca7f5c39 100644 --- a/DashWallet/ru.lproj/Localizable.strings +++ b/DashWallet/ru.lproj/Localizable.strings @@ -302,6 +302,9 @@ /* No comment provided by engineer. */ "locked with instant send" = "locked with instant send"; +/* No comment provided by engineer. */ +"Masternode control" = "Masternode control"; + /* No comment provided by engineer. */ "masternode holding address" = "адрес расположения мастерноды"; @@ -554,9 +557,6 @@ /* No comment provided by engineer. */ "show" = "Показать"; -/* No comment provided by engineer. */ -"Show masternode keys" = "Показать ключи мастерноды"; - /* No comment provided by engineer. */ "show phrase" = "Показать фразу"; diff --git a/DashWallet/sq.lproj/Localizable.strings b/DashWallet/sq.lproj/Localizable.strings index 541d120ed..74e48a48f 100644 --- a/DashWallet/sq.lproj/Localizable.strings +++ b/DashWallet/sq.lproj/Localizable.strings @@ -302,6 +302,9 @@ /* No comment provided by engineer. */ "locked with instant send" = "locked with instant send"; +/* No comment provided by engineer. */ +"Masternode control" = "Masternode control"; + /* No comment provided by engineer. */ "masternode holding address" = "masternode holding address"; @@ -554,9 +557,6 @@ /* No comment provided by engineer. */ "show" = "shfaq"; -/* No comment provided by engineer. */ -"Show masternode keys" = "Show masternode keys"; - /* No comment provided by engineer. */ "show phrase" = "shfaq frazën"; diff --git a/DashWallet/sv.lproj/Localizable.strings b/DashWallet/sv.lproj/Localizable.strings index c41ac78a8..065f7b9ff 100644 --- a/DashWallet/sv.lproj/Localizable.strings +++ b/DashWallet/sv.lproj/Localizable.strings @@ -302,6 +302,9 @@ /* No comment provided by engineer. */ "locked with instant send" = "locked with instant send"; +/* No comment provided by engineer. */ +"Masternode control" = "Masternode control"; + /* No comment provided by engineer. */ "masternode holding address" = "masternode holding address"; @@ -554,9 +557,6 @@ /* No comment provided by engineer. */ "show" = "visa"; -/* No comment provided by engineer. */ -"Show masternode keys" = "Show masternode keys"; - /* No comment provided by engineer. */ "show phrase" = "visa fras"; diff --git a/DashWallet/th.lproj/Localizable.strings b/DashWallet/th.lproj/Localizable.strings index 9d283410a..b7488d72b 100644 --- a/DashWallet/th.lproj/Localizable.strings +++ b/DashWallet/th.lproj/Localizable.strings @@ -302,6 +302,9 @@ /* No comment provided by engineer. */ "locked with instant send" = "locked with instant send"; +/* No comment provided by engineer. */ +"Masternode control" = "Masternode control"; + /* No comment provided by engineer. */ "masternode holding address" = "ที่อยู่สำหรับ Masternode"; @@ -554,9 +557,6 @@ /* No comment provided by engineer. */ "show" = "แสดง"; -/* No comment provided by engineer. */ -"Show masternode keys" = "แสดง masternode keys"; - /* No comment provided by engineer. */ "show phrase" = "แสดงวลี"; diff --git a/DashWallet/tr.lproj/Localizable.strings b/DashWallet/tr.lproj/Localizable.strings index 773877b5a..c87d86544 100644 --- a/DashWallet/tr.lproj/Localizable.strings +++ b/DashWallet/tr.lproj/Localizable.strings @@ -302,6 +302,9 @@ /* No comment provided by engineer. */ "locked with instant send" = "locked with instant send"; +/* No comment provided by engineer. */ +"Masternode control" = "Masternode control"; + /* No comment provided by engineer. */ "masternode holding address" = "anadüğüm barındırma adresi"; @@ -554,9 +557,6 @@ /* No comment provided by engineer. */ "show" = "göster"; -/* No comment provided by engineer. */ -"Show masternode keys" = "Anadüğüm anahtarlarını göster"; - /* No comment provided by engineer. */ "show phrase" = "metni göster"; diff --git a/DashWallet/vi.lproj/Localizable.strings b/DashWallet/vi.lproj/Localizable.strings index 2caeec820..5ef8d8db2 100644 --- a/DashWallet/vi.lproj/Localizable.strings +++ b/DashWallet/vi.lproj/Localizable.strings @@ -302,6 +302,9 @@ /* No comment provided by engineer. */ "locked with instant send" = "locked with instant send"; +/* No comment provided by engineer. */ +"Masternode control" = "Masternode control"; + /* No comment provided by engineer. */ "masternode holding address" = "địa chỉ đặt cọc masternode"; @@ -554,9 +557,6 @@ /* No comment provided by engineer. */ "show" = "hiển thị"; -/* No comment provided by engineer. */ -"Show masternode keys" = "Hiển thị các khoá của masternode"; - /* No comment provided by engineer. */ "show phrase" = "hiển thị cụm từ"; diff --git a/DashWallet/zh-Hans.lproj/Localizable.strings b/DashWallet/zh-Hans.lproj/Localizable.strings index a59b368b0..7c2a53171 100644 --- a/DashWallet/zh-Hans.lproj/Localizable.strings +++ b/DashWallet/zh-Hans.lproj/Localizable.strings @@ -302,6 +302,9 @@ /* No comment provided by engineer. */ "locked with instant send" = "locked with instant send"; +/* No comment provided by engineer. */ +"Masternode control" = "Masternode control"; + /* No comment provided by engineer. */ "masternode holding address" = "masternode holding address"; @@ -554,9 +557,6 @@ /* No comment provided by engineer. */ "show" = "显示"; -/* No comment provided by engineer. */ -"Show masternode keys" = "Show masternode keys"; - /* No comment provided by engineer. */ "show phrase" = "显示密语"; diff --git a/DashWallet/zh-Hant-TW.lproj/Localizable.strings b/DashWallet/zh-Hant-TW.lproj/Localizable.strings index e29db097b..295314bc0 100644 --- a/DashWallet/zh-Hant-TW.lproj/Localizable.strings +++ b/DashWallet/zh-Hant-TW.lproj/Localizable.strings @@ -302,6 +302,9 @@ /* No comment provided by engineer. */ "locked with instant send" = "locked with instant send"; +/* No comment provided by engineer. */ +"Masternode control" = "Masternode control"; + /* No comment provided by engineer. */ "masternode holding address" = "masternode holding address"; @@ -554,9 +557,6 @@ /* No comment provided by engineer. */ "show" = "顯示"; -/* No comment provided by engineer. */ -"Show masternode keys" = "Show masternode keys"; - /* No comment provided by engineer. */ "show phrase" = "顯示詞組"; From 75b2781ae9d79c65ad5c19b68dc38eab25f9a116 Mon Sep 17 00:00:00 2001 From: Quantum Explorer Date: Mon, 18 Mar 2019 17:27:25 +0700 Subject: [PATCH 02/34] more work to improvement My masternodes screen --- .../DWDerivationPathKeysViewController.m | 26 ++- .../DWMasternodeViewController.h | 2 - .../DWMasternodeViewController.m | 11 +- .../DWSignPayloadViewController.m | 2 +- ...WUpdateMasternodeRegistrarViewController.m | 2 +- .../DWUpdateMasternodeServiceViewController.m | 2 +- .../Masternode Keys/Masternode.storyboard | 169 ++++-------------- DashWallet/ar.lproj/Localizable.strings | 12 ++ DashWallet/bg.lproj/Localizable.strings | 12 ++ DashWallet/de.lproj/Localizable.strings | 12 ++ DashWallet/el.lproj/Localizable.strings | 12 ++ DashWallet/en.lproj/Localizable.strings | 12 ++ DashWallet/es.lproj/Localizable.strings | 12 ++ DashWallet/fr.lproj/Localizable.strings | 12 ++ DashWallet/id.lproj/Localizable.strings | 12 ++ DashWallet/it.lproj/Localizable.strings | 12 ++ DashWallet/ja.lproj/Localizable.strings | 12 ++ DashWallet/ko.lproj/Localizable.strings | 12 ++ DashWallet/nb.lproj/Localizable.strings | 12 ++ DashWallet/nl.lproj/Localizable.strings | 12 ++ DashWallet/pl.lproj/Localizable.strings | 12 ++ DashWallet/pt.lproj/Localizable.strings | 12 ++ DashWallet/ru.lproj/Localizable.strings | 12 ++ DashWallet/sq.lproj/Localizable.strings | 12 ++ DashWallet/sv.lproj/Localizable.strings | 12 ++ DashWallet/th.lproj/Localizable.strings | 12 ++ DashWallet/tr.lproj/Localizable.strings | 12 ++ DashWallet/vi.lproj/Localizable.strings | 12 ++ DashWallet/zh-Hans.lproj/Localizable.strings | 12 ++ .../zh-Hant-TW.lproj/Localizable.strings | 12 ++ 30 files changed, 343 insertions(+), 147 deletions(-) diff --git a/DashWallet/Masternode Keys/DWDerivationPathKeysViewController.m b/DashWallet/Masternode Keys/DWDerivationPathKeysViewController.m index 9d39dd2f2..16c6cbfdb 100644 --- a/DashWallet/Masternode Keys/DWDerivationPathKeysViewController.m +++ b/DashWallet/Masternode Keys/DWDerivationPathKeysViewController.m @@ -24,9 +24,10 @@ static NSString * const LoadMoreCellId = @"LoadMoreCell"; typedef NS_ENUM(NSUInteger, DWDerivationPathInfo) { - DWDerivationPathInfoAddress, - DWDerivationPathInfoPublicKey, - DWDerivationPathInfoPrivateKey, + DWDerivationPathInfo_Address, + DWDerivationPathInfo_PublicKey, + DWDerivationPathInfo_PrivateKey, + DWDerivationPathInfo_UsedOrNot, _DWDerivationPathInfo_Count, }; @@ -83,19 +84,19 @@ - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(N NSInteger index = indexPath.section; DWDerivationPathInfo info = indexPath.row; switch (info) { - case DWDerivationPathInfoAddress: { + case DWDerivationPathInfo_Address: { cell.textLabel.text = NSLocalizedString(@"Address", nil); cell.detailTextLabel.text = [self.derivationPath addressAtIndex:index]; break; } - case DWDerivationPathInfoPublicKey: { + case DWDerivationPathInfo_PublicKey: { cell.textLabel.text = NSLocalizedString(@"Public key", nil); cell.detailTextLabel.text = [self.derivationPath publicKeyDataAtIndex:index].hexString; break; } - case DWDerivationPathInfoPrivateKey: { + case DWDerivationPathInfo_PrivateKey: { cell.textLabel.text = NSLocalizedString(@"Private key", nil); @autoreleasepool { @@ -109,6 +110,19 @@ - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(N } break; } + case DWDerivationPathInfo_UsedOrNot: { + BOOL used = [self.derivationPath addressIsUsedAtIndex:index]; + cell.textLabel.text = used?NSLocalizedString(@"Used", nil):NSLocalizedString(@"Not used", nil); + if (used) { + DSLocalMasternode * localMasternode = [self.derivationPath.chain.chainManager.masternodeManager localMasternodeUsingIndex:index atDerivationPath:self.derivationPath]; + cell.detailTextLabel.text = localMasternode.ipAddressString; + } else { + cell.detailTextLabel.text = nil; + } + + + break; + } default: break; } diff --git a/DashWallet/Masternode Keys/DWMasternodeViewController.h b/DashWallet/Masternode Keys/DWMasternodeViewController.h index 0b90d2fc7..ecc8ef0d3 100644 --- a/DashWallet/Masternode Keys/DWMasternodeViewController.h +++ b/DashWallet/Masternode Keys/DWMasternodeViewController.h @@ -11,6 +11,4 @@ @interface DWMasternodeViewController : UITableViewController -@property (nonatomic,strong) DSChain * chain; - @end diff --git a/DashWallet/Masternode Keys/DWMasternodeViewController.m b/DashWallet/Masternode Keys/DWMasternodeViewController.m index 36f5c81b3..63e07f358 100644 --- a/DashWallet/Masternode Keys/DWMasternodeViewController.m +++ b/DashWallet/Masternode Keys/DWMasternodeViewController.m @@ -12,12 +12,13 @@ #import #import "DWRegisterMasternodeViewController.h" #import "DWMasternodeDetailViewController.h" -#import "DSLocalMasternodeEntity+CoreDataClass.h" +#import "DWEnvironment.h" @interface DWMasternodeViewController () @property (nonatomic,strong) NSFetchedResultsController * fetchedResultsController; @property (nonatomic,strong) NSString * searchString; @property (strong, nonatomic) IBOutlet UIBarButtonItem *registerButton; +@property (nonatomic,strong) DSChain * chain; @end @@ -25,6 +26,7 @@ @implementation DWMasternodeViewController - (void)viewDidLoad { [super viewDidLoad]; + self.chain = [DWEnvironment sharedInstance].currentChain; } - (void)didReceiveMemoryWarning { @@ -126,11 +128,10 @@ - (void)controllerDidChangeContent:(NSFetchedResultsController *)controller { #pragma mark - Table view data source -(NSString*)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section { - id sectionInfo = [[self.fetchedResultsController sections] objectAtIndex:section]; - if ([[sectionInfo name] integerValue]) { - return @"My Masternodes"; + if ([self.fetchedResultsController sections].count == 1 || section) { + return NSLocalizedString(@"Masternodes",nil); } else { - return @"Masternodes"; + return NSLocalizedString(@"My Masternodes",nil); } } diff --git a/DashWallet/Masternode Keys/DWSignPayloadViewController.m b/DashWallet/Masternode Keys/DWSignPayloadViewController.m index 8df0ed757..5eb4d84bb 100644 --- a/DashWallet/Masternode Keys/DWSignPayloadViewController.m +++ b/DashWallet/Masternode Keys/DWSignPayloadViewController.m @@ -26,7 +26,7 @@ @implementation DWSignPayloadViewController - (void)viewDidLoad { [super viewDidLoad]; - self.signatureMessageInputTextView.text = self.providerRegistrationTransaction.payloadCollateralString; + self.signatureMessageInputTextView.text = [NSString stringWithFormat:@"signmessage %@ %@",self.collateralAddress, self.providerRegistrationTransaction.payloadCollateralString]; if ([self.providerRegistrationTransaction.chain accountContainingAddress:self.collateralAddress]) { self.signButton.enabled = TRUE; diff --git a/DashWallet/Masternode Keys/DWUpdateMasternodeRegistrarViewController.m b/DashWallet/Masternode Keys/DWUpdateMasternodeRegistrarViewController.m index aea82f8cd..e0ed3903c 100644 --- a/DashWallet/Masternode Keys/DWUpdateMasternodeRegistrarViewController.m +++ b/DashWallet/Masternode Keys/DWUpdateMasternodeRegistrarViewController.m @@ -35,7 +35,7 @@ - (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView { } - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section { - return 3; + return 1; } -(UITableViewCell*)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { diff --git a/DashWallet/Masternode Keys/DWUpdateMasternodeServiceViewController.m b/DashWallet/Masternode Keys/DWUpdateMasternodeServiceViewController.m index 76df93900..c65ddaa75 100644 --- a/DashWallet/Masternode Keys/DWUpdateMasternodeServiceViewController.m +++ b/DashWallet/Masternode Keys/DWUpdateMasternodeServiceViewController.m @@ -39,7 +39,7 @@ - (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView { } - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section { - return 3; + return 2; } -(UITableViewCell*)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { diff --git a/DashWallet/Masternode Keys/Masternode.storyboard b/DashWallet/Masternode Keys/Masternode.storyboard index 6ea0604e3..69ca54e1f 100644 --- a/DashWallet/Masternode Keys/Masternode.storyboard +++ b/DashWallet/Masternode Keys/Masternode.storyboard @@ -266,13 +266,14 @@ - + - + + @@ -280,7 +281,7 @@ - + @@ -348,15 +349,15 @@ - + - + - + @@ -385,7 +386,7 @@ - + @@ -397,7 +398,7 @@ - - + @@ -426,7 +427,7 @@ - - + @@ -458,7 +459,7 @@ - - + @@ -527,7 +528,7 @@ - + @@ -556,7 +557,7 @@ - + @@ -589,13 +590,13 @@ - + - - + @@ -629,7 +630,7 @@ - + @@ -646,7 +647,7 @@ - + @@ -670,7 +671,7 @@ - + @@ -699,7 +700,7 @@ - + @@ -731,7 +732,7 @@ - + @@ -797,17 +798,17 @@ - - + + - + - + @@ -822,7 +823,7 @@ - + @@ -847,13 +848,13 @@ - + - + - + @@ -1229,11 +1230,13 @@ + + @@ -1344,38 +1347,6 @@ - - - - - - - - - - - - - - - - - - - - - - @@ -1462,70 +1433,6 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - @@ -1548,7 +1455,7 @@ - + @@ -1655,13 +1562,13 @@ - + - + - + diff --git a/DashWallet/ar.lproj/Localizable.strings b/DashWallet/ar.lproj/Localizable.strings index 27ea539ec..4edeb8b96 100644 --- a/DashWallet/ar.lproj/Localizable.strings +++ b/DashWallet/ar.lproj/Localizable.strings @@ -317,12 +317,18 @@ /* No comment provided by engineer. */ "Masternode Update Service Transaction" = "Masternode Update Service Transaction"; +/* No comment provided by engineer. */ +"Masternodes" = "Masternodes"; + /* No comment provided by engineer. */ "more..." = "أكثر..."; /* No comment provided by engineer. */ "Moved" = "تحرك"; +/* No comment provided by engineer. */ +"My Masternodes" = "My Masternodes"; + /* No comment provided by engineer. */ "Network" = "Network"; @@ -368,6 +374,9 @@ /* No comment provided by engineer. */ "not owner" = "not owner"; +/* No comment provided by engineer. */ +"Not used" = "Not used"; + /* No comment provided by engineer. */ "not voter" = "not voter"; @@ -665,6 +674,9 @@ /* No comment provided by engineer. */ "unverified" = "غير مثبت عليه"; +/* No comment provided by engineer. */ +"Used" = "Used"; + /* No comment provided by engineer. */ "User Registration Transaction" = "User Registration Transaction"; diff --git a/DashWallet/bg.lproj/Localizable.strings b/DashWallet/bg.lproj/Localizable.strings index f75818a66..84ea1e035 100644 --- a/DashWallet/bg.lproj/Localizable.strings +++ b/DashWallet/bg.lproj/Localizable.strings @@ -317,12 +317,18 @@ /* No comment provided by engineer. */ "Masternode Update Service Transaction" = "Masternode актуализира обслужващата транзакция"; +/* No comment provided by engineer. */ +"Masternodes" = "Masternodes"; + /* No comment provided by engineer. */ "more..." = "още..."; /* No comment provided by engineer. */ "Moved" = "Преместен"; +/* No comment provided by engineer. */ +"My Masternodes" = "My Masternodes"; + /* No comment provided by engineer. */ "Network" = "Мрежа"; @@ -368,6 +374,9 @@ /* No comment provided by engineer. */ "not owner" = "не собственик"; +/* No comment provided by engineer. */ +"Not used" = "Not used"; + /* No comment provided by engineer. */ "not voter" = "не гласуващ"; @@ -665,6 +674,9 @@ /* No comment provided by engineer. */ "unverified" = "непроверен"; +/* No comment provided by engineer. */ +"Used" = "Used"; + /* No comment provided by engineer. */ "User Registration Transaction" = "Регистриране на транзакция от потребителя"; diff --git a/DashWallet/de.lproj/Localizable.strings b/DashWallet/de.lproj/Localizable.strings index 1740fdc6c..b3e85885c 100644 --- a/DashWallet/de.lproj/Localizable.strings +++ b/DashWallet/de.lproj/Localizable.strings @@ -317,12 +317,18 @@ /* No comment provided by engineer. */ "Masternode Update Service Transaction" = "Masternode Dienst-Aktualisierungs-Transaktion"; +/* No comment provided by engineer. */ +"Masternodes" = "Masternodes"; + /* No comment provided by engineer. */ "more..." = "mehr..."; /* No comment provided by engineer. */ "Moved" = "Verschoben"; +/* No comment provided by engineer. */ +"My Masternodes" = "My Masternodes"; + /* No comment provided by engineer. */ "Network" = "Netzwerk"; @@ -368,6 +374,9 @@ /* No comment provided by engineer. */ "not owner" = "nicht Besitzer"; +/* No comment provided by engineer. */ +"Not used" = "Not used"; + /* No comment provided by engineer. */ "not voter" = "nicht Wähler"; @@ -665,6 +674,9 @@ /* No comment provided by engineer. */ "unverified" = "ungeprüft"; +/* No comment provided by engineer. */ +"Used" = "Used"; + /* No comment provided by engineer. */ "User Registration Transaction" = "Benutzer Registrierungs-Transaktion"; diff --git a/DashWallet/el.lproj/Localizable.strings b/DashWallet/el.lproj/Localizable.strings index 6ff135f73..f90c6a06f 100644 --- a/DashWallet/el.lproj/Localizable.strings +++ b/DashWallet/el.lproj/Localizable.strings @@ -317,12 +317,18 @@ /* No comment provided by engineer. */ "Masternode Update Service Transaction" = "Masternode Update Service Transaction"; +/* No comment provided by engineer. */ +"Masternodes" = "Masternodes"; + /* No comment provided by engineer. */ "more..." = "περισσότερα..."; /* No comment provided by engineer. */ "Moved" = "Moved"; +/* No comment provided by engineer. */ +"My Masternodes" = "My Masternodes"; + /* No comment provided by engineer. */ "Network" = "Network"; @@ -368,6 +374,9 @@ /* No comment provided by engineer. */ "not owner" = "not owner"; +/* No comment provided by engineer. */ +"Not used" = "Not used"; + /* No comment provided by engineer. */ "not voter" = "not voter"; @@ -665,6 +674,9 @@ /* No comment provided by engineer. */ "unverified" = "χωρίς επαλήθευση"; +/* No comment provided by engineer. */ +"Used" = "Used"; + /* No comment provided by engineer. */ "User Registration Transaction" = "User Registration Transaction"; diff --git a/DashWallet/en.lproj/Localizable.strings b/DashWallet/en.lproj/Localizable.strings index d6e435b63..05d8f538c 100644 --- a/DashWallet/en.lproj/Localizable.strings +++ b/DashWallet/en.lproj/Localizable.strings @@ -317,12 +317,18 @@ /* No comment provided by engineer. */ "Masternode Update Service Transaction" = "Masternode Update Service Transaction"; +/* No comment provided by engineer. */ +"Masternodes" = "Masternodes"; + /* No comment provided by engineer. */ "more..." = "more..."; /* No comment provided by engineer. */ "Moved" = "Moved"; +/* No comment provided by engineer. */ +"My Masternodes" = "My Masternodes"; + /* No comment provided by engineer. */ "Network" = "Network"; @@ -368,6 +374,9 @@ /* No comment provided by engineer. */ "not owner" = "not owner"; +/* No comment provided by engineer. */ +"Not used" = "Not used"; + /* No comment provided by engineer. */ "not voter" = "not voter"; @@ -665,6 +674,9 @@ /* No comment provided by engineer. */ "unverified" = "unverified"; +/* No comment provided by engineer. */ +"Used" = "Used"; + /* No comment provided by engineer. */ "User Registration Transaction" = "User Registration Transaction"; diff --git a/DashWallet/es.lproj/Localizable.strings b/DashWallet/es.lproj/Localizable.strings index 387640547..57c0222a7 100644 --- a/DashWallet/es.lproj/Localizable.strings +++ b/DashWallet/es.lproj/Localizable.strings @@ -317,12 +317,18 @@ /* No comment provided by engineer. */ "Masternode Update Service Transaction" = "Transacción del servicio de actualización de Masternode"; +/* No comment provided by engineer. */ +"Masternodes" = "Masternodes"; + /* No comment provided by engineer. */ "more..." = "más..."; /* No comment provided by engineer. */ "Moved" = "Movido"; +/* No comment provided by engineer. */ +"My Masternodes" = "My Masternodes"; + /* No comment provided by engineer. */ "Network" = "Red de trabajo"; @@ -368,6 +374,9 @@ /* No comment provided by engineer. */ "not owner" = "no propietario"; +/* No comment provided by engineer. */ +"Not used" = "Not used"; + /* No comment provided by engineer. */ "not voter" = "no votante"; @@ -665,6 +674,9 @@ /* No comment provided by engineer. */ "unverified" = "no verificado"; +/* No comment provided by engineer. */ +"Used" = "Used"; + /* No comment provided by engineer. */ "User Registration Transaction" = "Transacción de registro de usuario"; diff --git a/DashWallet/fr.lproj/Localizable.strings b/DashWallet/fr.lproj/Localizable.strings index e8a58c31e..7efdf093d 100644 --- a/DashWallet/fr.lproj/Localizable.strings +++ b/DashWallet/fr.lproj/Localizable.strings @@ -317,12 +317,18 @@ /* No comment provided by engineer. */ "Masternode Update Service Transaction" = "Transaction de mise à jour du service de masternode"; +/* No comment provided by engineer. */ +"Masternodes" = "Masternodes"; + /* No comment provided by engineer. */ "more..." = "plus..."; /* No comment provided by engineer. */ "Moved" = "Déplacé"; +/* No comment provided by engineer. */ +"My Masternodes" = "My Masternodes"; + /* No comment provided by engineer. */ "Network" = "Réseau"; @@ -368,6 +374,9 @@ /* No comment provided by engineer. */ "not owner" = "non propriétaire"; +/* No comment provided by engineer. */ +"Not used" = "Not used"; + /* No comment provided by engineer. */ "not voter" = "non votant"; @@ -665,6 +674,9 @@ /* No comment provided by engineer. */ "unverified" = "non vérifiée"; +/* No comment provided by engineer. */ +"Used" = "Used"; + /* No comment provided by engineer. */ "User Registration Transaction" = "Transaction d'enregistrement d'utilisateur"; diff --git a/DashWallet/id.lproj/Localizable.strings b/DashWallet/id.lproj/Localizable.strings index d9187890b..84fe06637 100644 --- a/DashWallet/id.lproj/Localizable.strings +++ b/DashWallet/id.lproj/Localizable.strings @@ -317,12 +317,18 @@ /* No comment provided by engineer. */ "Masternode Update Service Transaction" = "Transaksi Layanan Pembaruan Masternode"; +/* No comment provided by engineer. */ +"Masternodes" = "Masternodes"; + /* No comment provided by engineer. */ "more..." = "lebih..."; /* No comment provided by engineer. */ "Moved" = "Terpindah"; +/* No comment provided by engineer. */ +"My Masternodes" = "My Masternodes"; + /* No comment provided by engineer. */ "Network" = "Jaringan"; @@ -368,6 +374,9 @@ /* No comment provided by engineer. */ "not owner" = "bukan pemilik"; +/* No comment provided by engineer. */ +"Not used" = "Not used"; + /* No comment provided by engineer. */ "not voter" = "bukan pemilih"; @@ -665,6 +674,9 @@ /* No comment provided by engineer. */ "unverified" = "tidak diverifikasi"; +/* No comment provided by engineer. */ +"Used" = "Used"; + /* No comment provided by engineer. */ "User Registration Transaction" = "Transaksi pendaftaran Pengguna"; diff --git a/DashWallet/it.lproj/Localizable.strings b/DashWallet/it.lproj/Localizable.strings index 44f9d19ba..6c0ee837d 100644 --- a/DashWallet/it.lproj/Localizable.strings +++ b/DashWallet/it.lproj/Localizable.strings @@ -317,12 +317,18 @@ /* No comment provided by engineer. */ "Masternode Update Service Transaction" = "Transazione del servizio di aggiornamento Masternode"; +/* No comment provided by engineer. */ +"Masternodes" = "Masternodes"; + /* No comment provided by engineer. */ "more..." = "di più..."; /* No comment provided by engineer. */ "Moved" = "Mosso"; +/* No comment provided by engineer. */ +"My Masternodes" = "My Masternodes"; + /* No comment provided by engineer. */ "Network" = "Network"; @@ -368,6 +374,9 @@ /* No comment provided by engineer. */ "not owner" = "non proprietario"; +/* No comment provided by engineer. */ +"Not used" = "Not used"; + /* No comment provided by engineer. */ "not voter" = "non votante"; @@ -665,6 +674,9 @@ /* No comment provided by engineer. */ "unverified" = "non verificato"; +/* No comment provided by engineer. */ +"Used" = "Used"; + /* No comment provided by engineer. */ "User Registration Transaction" = "Transazione registrazione utente"; diff --git a/DashWallet/ja.lproj/Localizable.strings b/DashWallet/ja.lproj/Localizable.strings index f95f2c81d..f64a1f0d7 100644 --- a/DashWallet/ja.lproj/Localizable.strings +++ b/DashWallet/ja.lproj/Localizable.strings @@ -317,12 +317,18 @@ /* No comment provided by engineer. */ "Masternode Update Service Transaction" = "Masternode Update Service Transaction"; +/* No comment provided by engineer. */ +"Masternodes" = "Masternodes"; + /* No comment provided by engineer. */ "more..." = "さらに…"; /* No comment provided by engineer. */ "Moved" = "移動されました"; +/* No comment provided by engineer. */ +"My Masternodes" = "My Masternodes"; + /* No comment provided by engineer. */ "Network" = "ネットワーク"; @@ -368,6 +374,9 @@ /* No comment provided by engineer. */ "not owner" = "not owner"; +/* No comment provided by engineer. */ +"Not used" = "Not used"; + /* No comment provided by engineer. */ "not voter" = "not voter"; @@ -665,6 +674,9 @@ /* No comment provided by engineer. */ "unverified" = "未確認"; +/* No comment provided by engineer. */ +"Used" = "Used"; + /* No comment provided by engineer. */ "User Registration Transaction" = "User Registration Transaction"; diff --git a/DashWallet/ko.lproj/Localizable.strings b/DashWallet/ko.lproj/Localizable.strings index aebf5fc37..ab7e24326 100644 --- a/DashWallet/ko.lproj/Localizable.strings +++ b/DashWallet/ko.lproj/Localizable.strings @@ -317,12 +317,18 @@ /* No comment provided by engineer. */ "Masternode Update Service Transaction" = "마스터노드 업데이트 서비스 거래"; +/* No comment provided by engineer. */ +"Masternodes" = "Masternodes"; + /* No comment provided by engineer. */ "more..." = "더 보기..."; /* No comment provided by engineer. */ "Moved" = "이동 완료"; +/* No comment provided by engineer. */ +"My Masternodes" = "My Masternodes"; + /* No comment provided by engineer. */ "Network" = "네트워크"; @@ -368,6 +374,9 @@ /* No comment provided by engineer. */ "not owner" = "소유자 아님"; +/* No comment provided by engineer. */ +"Not used" = "Not used"; + /* No comment provided by engineer. */ "not voter" = "투표자 아님"; @@ -665,6 +674,9 @@ /* No comment provided by engineer. */ "unverified" = "인증되지 않음"; +/* No comment provided by engineer. */ +"Used" = "Used"; + /* No comment provided by engineer. */ "User Registration Transaction" = "사용자 등록 거래"; diff --git a/DashWallet/nb.lproj/Localizable.strings b/DashWallet/nb.lproj/Localizable.strings index 4d59d2625..3294efe6b 100644 --- a/DashWallet/nb.lproj/Localizable.strings +++ b/DashWallet/nb.lproj/Localizable.strings @@ -317,12 +317,18 @@ /* No comment provided by engineer. */ "Masternode Update Service Transaction" = "Masternode Update Service Transaction"; +/* No comment provided by engineer. */ +"Masternodes" = "Masternodes"; + /* No comment provided by engineer. */ "more..." = "mer..."; /* No comment provided by engineer. */ "Moved" = "Moved"; +/* No comment provided by engineer. */ +"My Masternodes" = "My Masternodes"; + /* No comment provided by engineer. */ "Network" = "Network"; @@ -368,6 +374,9 @@ /* No comment provided by engineer. */ "not owner" = "not owner"; +/* No comment provided by engineer. */ +"Not used" = "Not used"; + /* No comment provided by engineer. */ "not voter" = "not voter"; @@ -665,6 +674,9 @@ /* No comment provided by engineer. */ "unverified" = "ubekreftet"; +/* No comment provided by engineer. */ +"Used" = "Used"; + /* No comment provided by engineer. */ "User Registration Transaction" = "User Registration Transaction"; diff --git a/DashWallet/nl.lproj/Localizable.strings b/DashWallet/nl.lproj/Localizable.strings index 0e3dc8120..85aeece58 100644 --- a/DashWallet/nl.lproj/Localizable.strings +++ b/DashWallet/nl.lproj/Localizable.strings @@ -317,12 +317,18 @@ /* No comment provided by engineer. */ "Masternode Update Service Transaction" = "Masternode service update transactie"; +/* No comment provided by engineer. */ +"Masternodes" = "Masternodes"; + /* No comment provided by engineer. */ "more..." = "meer..."; /* No comment provided by engineer. */ "Moved" = "Verplaatst"; +/* No comment provided by engineer. */ +"My Masternodes" = "My Masternodes"; + /* No comment provided by engineer. */ "Network" = "Netwerk"; @@ -368,6 +374,9 @@ /* No comment provided by engineer. */ "not owner" = "geen eigenaar"; +/* No comment provided by engineer. */ +"Not used" = "Not used"; + /* No comment provided by engineer. */ "not voter" = "geen stemrecht"; @@ -665,6 +674,9 @@ /* No comment provided by engineer. */ "unverified" = "niet geverifieerd"; +/* No comment provided by engineer. */ +"Used" = "Used"; + /* No comment provided by engineer. */ "User Registration Transaction" = "Gebruiker registratie transactie"; diff --git a/DashWallet/pl.lproj/Localizable.strings b/DashWallet/pl.lproj/Localizable.strings index a77bb863a..640aa2a64 100644 --- a/DashWallet/pl.lproj/Localizable.strings +++ b/DashWallet/pl.lproj/Localizable.strings @@ -317,12 +317,18 @@ /* No comment provided by engineer. */ "Masternode Update Service Transaction" = "Transakcja Aktualizacji Serwisu Masternoda"; +/* No comment provided by engineer. */ +"Masternodes" = "Masternodes"; + /* No comment provided by engineer. */ "more..." = "więcej..."; /* No comment provided by engineer. */ "Moved" = "Przeniesiono"; +/* No comment provided by engineer. */ +"My Masternodes" = "My Masternodes"; + /* No comment provided by engineer. */ "Network" = "Sieć"; @@ -368,6 +374,9 @@ /* No comment provided by engineer. */ "not owner" = "nie właściciel"; +/* No comment provided by engineer. */ +"Not used" = "Not used"; + /* No comment provided by engineer. */ "not voter" = "nie głosujący"; @@ -665,6 +674,9 @@ /* No comment provided by engineer. */ "unverified" = "niesprawdzona"; +/* No comment provided by engineer. */ +"Used" = "Used"; + /* No comment provided by engineer. */ "User Registration Transaction" = "Transakcja rejestrująca użytkownika"; diff --git a/DashWallet/pt.lproj/Localizable.strings b/DashWallet/pt.lproj/Localizable.strings index c7442a561..b89214caf 100644 --- a/DashWallet/pt.lproj/Localizable.strings +++ b/DashWallet/pt.lproj/Localizable.strings @@ -317,12 +317,18 @@ /* No comment provided by engineer. */ "Masternode Update Service Transaction" = "Transação do Serviço de Atualização do Masternode"; +/* No comment provided by engineer. */ +"Masternodes" = "Masternodes"; + /* No comment provided by engineer. */ "more..." = "mais..."; /* No comment provided by engineer. */ "Moved" = "Movido"; +/* No comment provided by engineer. */ +"My Masternodes" = "My Masternodes"; + /* No comment provided by engineer. */ "Network" = "Rede"; @@ -368,6 +374,9 @@ /* No comment provided by engineer. */ "not owner" = "não é proprietário"; +/* No comment provided by engineer. */ +"Not used" = "Not used"; + /* No comment provided by engineer. */ "not voter" = "não é eleitor"; @@ -665,6 +674,9 @@ /* No comment provided by engineer. */ "unverified" = "não verificada"; +/* No comment provided by engineer. */ +"Used" = "Used"; + /* No comment provided by engineer. */ "User Registration Transaction" = "Transação de Registro de Usuário"; diff --git a/DashWallet/ru.lproj/Localizable.strings b/DashWallet/ru.lproj/Localizable.strings index 2ca7f5c39..6f0d2634e 100644 --- a/DashWallet/ru.lproj/Localizable.strings +++ b/DashWallet/ru.lproj/Localizable.strings @@ -317,12 +317,18 @@ /* No comment provided by engineer. */ "Masternode Update Service Transaction" = "Транзакция обновления услуг мастерноды"; +/* No comment provided by engineer. */ +"Masternodes" = "Masternodes"; + /* No comment provided by engineer. */ "more..." = "ещё..."; /* No comment provided by engineer. */ "Moved" = "Перемещено"; +/* No comment provided by engineer. */ +"My Masternodes" = "My Masternodes"; + /* No comment provided by engineer. */ "Network" = "Сеть"; @@ -368,6 +374,9 @@ /* No comment provided by engineer. */ "not owner" = "не владелец"; +/* No comment provided by engineer. */ +"Not used" = "Not used"; + /* No comment provided by engineer. */ "not voter" = "не участник голосования"; @@ -665,6 +674,9 @@ /* No comment provided by engineer. */ "unverified" = "Неподтверждённый"; +/* No comment provided by engineer. */ +"Used" = "Used"; + /* No comment provided by engineer. */ "User Registration Transaction" = "Транзакция регистрации пользователя"; diff --git a/DashWallet/sq.lproj/Localizable.strings b/DashWallet/sq.lproj/Localizable.strings index 74e48a48f..fb7a5068a 100644 --- a/DashWallet/sq.lproj/Localizable.strings +++ b/DashWallet/sq.lproj/Localizable.strings @@ -317,12 +317,18 @@ /* No comment provided by engineer. */ "Masternode Update Service Transaction" = "Masternode Update Service Transaction"; +/* No comment provided by engineer. */ +"Masternodes" = "Masternodes"; + /* No comment provided by engineer. */ "more..." = "më shumë..."; /* No comment provided by engineer. */ "Moved" = "Moved"; +/* No comment provided by engineer. */ +"My Masternodes" = "My Masternodes"; + /* No comment provided by engineer. */ "Network" = "Network"; @@ -368,6 +374,9 @@ /* No comment provided by engineer. */ "not owner" = "not owner"; +/* No comment provided by engineer. */ +"Not used" = "Not used"; + /* No comment provided by engineer. */ "not voter" = "not voter"; @@ -665,6 +674,9 @@ /* No comment provided by engineer. */ "unverified" = "i paverifikuar"; +/* No comment provided by engineer. */ +"Used" = "Used"; + /* No comment provided by engineer. */ "User Registration Transaction" = "User Registration Transaction"; diff --git a/DashWallet/sv.lproj/Localizable.strings b/DashWallet/sv.lproj/Localizable.strings index 065f7b9ff..a20517f5f 100644 --- a/DashWallet/sv.lproj/Localizable.strings +++ b/DashWallet/sv.lproj/Localizable.strings @@ -317,12 +317,18 @@ /* No comment provided by engineer. */ "Masternode Update Service Transaction" = "Masternode Update Service Transaction"; +/* No comment provided by engineer. */ +"Masternodes" = "Masternodes"; + /* No comment provided by engineer. */ "more..." = "mer..."; /* No comment provided by engineer. */ "Moved" = "Moved"; +/* No comment provided by engineer. */ +"My Masternodes" = "My Masternodes"; + /* No comment provided by engineer. */ "Network" = "Network"; @@ -368,6 +374,9 @@ /* No comment provided by engineer. */ "not owner" = "not owner"; +/* No comment provided by engineer. */ +"Not used" = "Not used"; + /* No comment provided by engineer. */ "not voter" = "not voter"; @@ -665,6 +674,9 @@ /* No comment provided by engineer. */ "unverified" = "overifierad"; +/* No comment provided by engineer. */ +"Used" = "Used"; + /* No comment provided by engineer. */ "User Registration Transaction" = "User Registration Transaction"; diff --git a/DashWallet/th.lproj/Localizable.strings b/DashWallet/th.lproj/Localizable.strings index b7488d72b..1d2d7dc4e 100644 --- a/DashWallet/th.lproj/Localizable.strings +++ b/DashWallet/th.lproj/Localizable.strings @@ -317,12 +317,18 @@ /* No comment provided by engineer. */ "Masternode Update Service Transaction" = "Masternode อัพเดตบริการธุรกรรม"; +/* No comment provided by engineer. */ +"Masternodes" = "Masternodes"; + /* No comment provided by engineer. */ "more..." = "เพิ่มเติม"; /* No comment provided by engineer. */ "Moved" = "เคลื่อนย้าย"; +/* No comment provided by engineer. */ +"My Masternodes" = "My Masternodes"; + /* No comment provided by engineer. */ "Network" = "เครือข่าย"; @@ -368,6 +374,9 @@ /* No comment provided by engineer. */ "not owner" = "ไม่ใช่เจ้าของ"; +/* No comment provided by engineer. */ +"Not used" = "Not used"; + /* No comment provided by engineer. */ "not voter" = "ไม่ใช่ผู้โหวต"; @@ -665,6 +674,9 @@ /* No comment provided by engineer. */ "unverified" = "พิสูจน์ไม่ได้"; +/* No comment provided by engineer. */ +"Used" = "Used"; + /* No comment provided by engineer. */ "User Registration Transaction" = "ธุรกรรมการลงทะเบียนผู้ใช้"; diff --git a/DashWallet/tr.lproj/Localizable.strings b/DashWallet/tr.lproj/Localizable.strings index c87d86544..ca0e9e142 100644 --- a/DashWallet/tr.lproj/Localizable.strings +++ b/DashWallet/tr.lproj/Localizable.strings @@ -317,12 +317,18 @@ /* No comment provided by engineer. */ "Masternode Update Service Transaction" = "Anadüğüm Hizmet Yenileme İşlemi"; +/* No comment provided by engineer. */ +"Masternodes" = "Masternodes"; + /* No comment provided by engineer. */ "more..." = "daha fazla..."; /* No comment provided by engineer. */ "Moved" = "Taşındı"; +/* No comment provided by engineer. */ +"My Masternodes" = "My Masternodes"; + /* No comment provided by engineer. */ "Network" = "Ağ"; @@ -368,6 +374,9 @@ /* No comment provided by engineer. */ "not owner" = "sahip değil"; +/* No comment provided by engineer. */ +"Not used" = "Not used"; + /* No comment provided by engineer. */ "not voter" = "oy veren değil"; @@ -665,6 +674,9 @@ /* No comment provided by engineer. */ "unverified" = "doğrulanmadı"; +/* No comment provided by engineer. */ +"Used" = "Used"; + /* No comment provided by engineer. */ "User Registration Transaction" = "Kullanıcı Kayıt İşlemi"; diff --git a/DashWallet/vi.lproj/Localizable.strings b/DashWallet/vi.lproj/Localizable.strings index 5ef8d8db2..40a6b3b72 100644 --- a/DashWallet/vi.lproj/Localizable.strings +++ b/DashWallet/vi.lproj/Localizable.strings @@ -317,12 +317,18 @@ /* No comment provided by engineer. */ "Masternode Update Service Transaction" = "Giao dịch cập nhật dịch vụ Masternode"; +/* No comment provided by engineer. */ +"Masternodes" = "Masternodes"; + /* No comment provided by engineer. */ "more..." = "tiếp..."; /* No comment provided by engineer. */ "Moved" = "Đã chuyển"; +/* No comment provided by engineer. */ +"My Masternodes" = "My Masternodes"; + /* No comment provided by engineer. */ "Network" = "Mạng"; @@ -368,6 +374,9 @@ /* No comment provided by engineer. */ "not owner" = "không phải chủ sở hữu"; +/* No comment provided by engineer. */ +"Not used" = "Not used"; + /* No comment provided by engineer. */ "not voter" = "không phải người bỏ phiếu"; @@ -665,6 +674,9 @@ /* No comment provided by engineer. */ "unverified" = "chưa được kiểm tra"; +/* No comment provided by engineer. */ +"Used" = "Used"; + /* No comment provided by engineer. */ "User Registration Transaction" = "Giao dịch đăng ký người dùng"; diff --git a/DashWallet/zh-Hans.lproj/Localizable.strings b/DashWallet/zh-Hans.lproj/Localizable.strings index 7c2a53171..575d59f75 100644 --- a/DashWallet/zh-Hans.lproj/Localizable.strings +++ b/DashWallet/zh-Hans.lproj/Localizable.strings @@ -317,12 +317,18 @@ /* No comment provided by engineer. */ "Masternode Update Service Transaction" = "Masternode Update Service Transaction"; +/* No comment provided by engineer. */ +"Masternodes" = "Masternodes"; + /* No comment provided by engineer. */ "more..." = "更多..."; /* No comment provided by engineer. */ "Moved" = "已移动"; +/* No comment provided by engineer. */ +"My Masternodes" = "My Masternodes"; + /* No comment provided by engineer. */ "Network" = "Network"; @@ -368,6 +374,9 @@ /* No comment provided by engineer. */ "not owner" = "not owner"; +/* No comment provided by engineer. */ +"Not used" = "Not used"; + /* No comment provided by engineer. */ "not voter" = "not voter"; @@ -665,6 +674,9 @@ /* No comment provided by engineer. */ "unverified" = "未验证"; +/* No comment provided by engineer. */ +"Used" = "Used"; + /* No comment provided by engineer. */ "User Registration Transaction" = "User Registration Transaction"; diff --git a/DashWallet/zh-Hant-TW.lproj/Localizable.strings b/DashWallet/zh-Hant-TW.lproj/Localizable.strings index 295314bc0..25920db6f 100644 --- a/DashWallet/zh-Hant-TW.lproj/Localizable.strings +++ b/DashWallet/zh-Hant-TW.lproj/Localizable.strings @@ -317,12 +317,18 @@ /* No comment provided by engineer. */ "Masternode Update Service Transaction" = "Masternode Update Service Transaction"; +/* No comment provided by engineer. */ +"Masternodes" = "Masternodes"; + /* No comment provided by engineer. */ "more..." = "更多..."; /* No comment provided by engineer. */ "Moved" = "已移動"; +/* No comment provided by engineer. */ +"My Masternodes" = "My Masternodes"; + /* No comment provided by engineer. */ "Network" = "Network"; @@ -368,6 +374,9 @@ /* No comment provided by engineer. */ "not owner" = "not owner"; +/* No comment provided by engineer. */ +"Not used" = "Not used"; + /* No comment provided by engineer. */ "not voter" = "not voter"; @@ -665,6 +674,9 @@ /* No comment provided by engineer. */ "unverified" = "未經核實"; +/* No comment provided by engineer. */ +"Used" = "Used"; + /* No comment provided by engineer. */ "User Registration Transaction" = "User Registration Transaction"; From d7a3f72f07638cdee7bb0205dda2e314e31e94c4 Mon Sep 17 00:00:00 2001 From: Quantum Explorer Date: Thu, 21 Mar 2019 19:23:34 +0700 Subject: [PATCH 03/34] better show keys --- DashSyncCurrentCommit | 2 +- .../DWMasternodeDetailViewController.m | 15 +++++++++------ 2 files changed, 10 insertions(+), 7 deletions(-) diff --git a/DashSyncCurrentCommit b/DashSyncCurrentCommit index a29b3fe4c..ceb7240bd 100644 --- a/DashSyncCurrentCommit +++ b/DashSyncCurrentCommit @@ -1 +1 @@ -317a276affb99e15d7b38a4aadd927abca23d06b +263e53d4e75c3484f69d786e412745e1c60fe5a5 diff --git a/DashWallet/Masternode Keys/DWMasternodeDetailViewController.m b/DashWallet/Masternode Keys/DWMasternodeDetailViewController.m index 5c5f11c82..e5df5e949 100644 --- a/DashWallet/Masternode Keys/DWMasternodeDetailViewController.m +++ b/DashWallet/Masternode Keys/DWMasternodeDetailViewController.m @@ -16,6 +16,7 @@ #import "DWProviderUpdateServiceTransactionsViewController.h" #import #import "BRCopyLabel.h" +#import "DWEnvironment.h" @interface DWMasternodeDetailViewController () @property (strong, nonatomic) IBOutlet UILabel *locationLabel; @@ -30,6 +31,7 @@ @interface DWMasternodeDetailViewController () @property (strong, nonatomic) IBOutlet BRCopyLabel *proRegTxLabel; @property (strong, nonatomic) IBOutlet BRCopyLabel *proUpRegTxLabel; @property (strong, nonatomic) IBOutlet BRCopyLabel *proUpServTxLabel; +@property (strong, nonatomic) DSChain * chain; @end @@ -53,6 +55,7 @@ - (void)viewDidLoad { self.proRegTxLabel.text = uint256_hex(self.localMasternode.providerRegistrationTransaction.txHash); self.proUpRegTxLabel.text = [NSString stringWithFormat:@"%lu",(unsigned long)self.localMasternode.providerUpdateRegistrarTransactions.count]; self.proUpServTxLabel.text = [NSString stringWithFormat:@"%lu",(unsigned long)self.localMasternode.providerUpdateServiceTransactions.count]; + self.chain = [DWEnvironment sharedInstance].currentChain; } -(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender { @@ -84,16 +87,16 @@ -(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath * { switch (indexPath.row) { case 2: - if (self.localMasternode.ownerKeysWallet) { + if (self.localMasternode.ownerKeysWallet && [self.ownerKeyLabel.text isEqualToString:@"SHOW"]) { [self.localMasternode.ownerKeysWallet seedWithPrompt:@"Show owner key?" forAmount:0 completion:^(NSData * _Nullable seed, BOOL cancelled) { if (seed) { - self.ownerKeyLabel.text = [self.localMasternode ownerKeyStringFromSeed:seed]; + self.ownerKeyLabel.text = [[self.localMasternode ownerKeyFromSeed:seed] privateKeyStringForChain:self.chain]; } }]; } break; case 3: - if (self.localMasternode.operatorKeysWallet) { + if (self.localMasternode.operatorKeysWallet && [self.operatorKeyLabel.text isEqualToString:@"SHOW"]) { [self.localMasternode.operatorKeysWallet seedWithPrompt:@"Show operator key?" forAmount:0 completion:^(NSData * _Nullable seed, BOOL cancelled) { if (seed) { self.operatorKeyLabel.text = [self.localMasternode operatorKeyStringFromSeed:seed]; @@ -102,10 +105,10 @@ -(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath * } break; case 4: - if (self.localMasternode.operatorKeysWallet) { + if (self.localMasternode.operatorKeysWallet && [self.votingKeyLabel.text isEqualToString:@"SHOW"]) { [self.localMasternode.operatorKeysWallet seedWithPrompt:@"Show voting key?" forAmount:0 completion:^(NSData * _Nullable seed, BOOL cancelled) { if (seed) { - self.votingKeyLabel.text = [self.localMasternode votingKeyStringFromSeed:seed]; + self.votingKeyLabel.text = [[self.localMasternode votingKeyFromSeed:seed] privateKeyStringForChain:self.chain]; } }]; } @@ -137,7 +140,7 @@ -(void)claimSimplifiedMasternodeEntry { [[DSInsightManager sharedInstance] queryInsightForTransactionWithHash:[NSData dataWithUInt256: self.simplifiedMasternodeEntry.providerRegistrationTransactionHash].reverse.UInt256 onChain:self.simplifiedMasternodeEntry.chain completion:^(DSTransaction *transaction, NSError *error) { if ([transaction isKindOfClass:[DSProviderRegistrationTransaction class]]) { DSProviderRegistrationTransaction * providerRegistrationTransaction = (DSProviderRegistrationTransaction *)transaction; - DSLocalMasternode * localMasternode = [self.simplifiedMasternodeEntry.chain.chainManager.masternodeManager localMasternodeFromProviderRegistrationTransaction:providerRegistrationTransaction]; + DSLocalMasternode * localMasternode = [self.simplifiedMasternodeEntry.chain.chainManager.masternodeManager localMasternodeFromProviderRegistrationTransaction:providerRegistrationTransaction save:TRUE]; } }]; From baadf3df6ac28733ff81d432d67a4058fbadc049 Mon Sep 17 00:00:00 2001 From: Andrew Podkovyrin Date: Tue, 19 Mar 2019 23:49:18 +0300 Subject: [PATCH 04/34] Search masternodes done right --- DashSyncCurrentCommit | 2 +- DashWallet.xcodeproj/project.pbxproj | 16 ++ DashWallet/DWAppDelegate.m | 3 - DashWallet/DWMasternodeTableViewCell.xib | 57 +++++ DashWallet/DWTxHistoryViewController.m | 106 ++++----- .../DWBaseMasternodeViewController.h | 33 +++ .../DWBaseMasternodeViewController.m | 160 +++++++++++++ .../DWMasternodeViewController.h | 4 +- .../DWMasternodeViewController.m | 213 ++++++------------ .../DWResultsMasternodeViewController.h | 26 +++ .../DWResultsMasternodeViewController.m | 26 +++ .../Masternode Keys/Masternode.storyboard | 88 ++------ 12 files changed, 455 insertions(+), 279 deletions(-) create mode 100644 DashWallet/DWMasternodeTableViewCell.xib create mode 100644 DashWallet/Masternode Keys/DWBaseMasternodeViewController.h create mode 100644 DashWallet/Masternode Keys/DWBaseMasternodeViewController.m create mode 100644 DashWallet/Masternode Keys/DWResultsMasternodeViewController.h create mode 100644 DashWallet/Masternode Keys/DWResultsMasternodeViewController.m diff --git a/DashSyncCurrentCommit b/DashSyncCurrentCommit index ceb7240bd..b769d6f87 100644 --- a/DashSyncCurrentCommit +++ b/DashSyncCurrentCommit @@ -1 +1 @@ -263e53d4e75c3484f69d786e412745e1c60fe5a5 +344d264736149b22f2051191da2e4be0646652dd diff --git a/DashWallet.xcodeproj/project.pbxproj b/DashWallet.xcodeproj/project.pbxproj index 4ab71db9d..a14c57488 100644 --- a/DashWallet.xcodeproj/project.pbxproj +++ b/DashWallet.xcodeproj/project.pbxproj @@ -54,6 +54,9 @@ 2AC92C841FEB0A6D008CAEE0 /* DWQRScanViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 2AC92C831FEB0A6D008CAEE0 /* DWQRScanViewController.m */; }; 2AC92C871FEB0AE8008CAEE0 /* DWQRScanView.m in Sources */ = {isa = PBXBuildFile; fileRef = 2AC92C861FEB0AE8008CAEE0 /* DWQRScanView.m */; }; 2AC92C8A1FEB0B8B008CAEE0 /* DWQRScanViewModel.m in Sources */ = {isa = PBXBuildFile; fileRef = 2AC92C891FEB0B8B008CAEE0 /* DWQRScanViewModel.m */; }; + 2AE125F8224113C600379C6F /* DWBaseMasternodeViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 2AE125F7224113C600379C6F /* DWBaseMasternodeViewController.m */; }; + 2AE125FD2241151B00379C6F /* DWMasternodeTableViewCell.xib in Resources */ = {isa = PBXBuildFile; fileRef = 2AE125FB2241151B00379C6F /* DWMasternodeTableViewCell.xib */; }; + 2AE126002241342900379C6F /* DWResultsMasternodeViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 2AE125FF2241342900379C6F /* DWResultsMasternodeViewController.m */; }; 31D68B531C23B6C10030FAAA /* DashWalletUITests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 31D68B521C23B6C10030FAAA /* DashWalletUITests.swift */; }; 31D68B5B1C23B6FD0030FAAA /* SnapshotHelper.swift in Sources */ = {isa = PBXBuildFile; fileRef = 31D68B5A1C23B6FD0030FAAA /* SnapshotHelper.swift */; }; 435AD52C799FC0B38E732134 /* libPods-WatchApp.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 07283055DE20FE578E399BE7 /* libPods-WatchApp.a */; }; @@ -402,6 +405,11 @@ 2AC92C861FEB0AE8008CAEE0 /* DWQRScanView.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = DWQRScanView.m; sourceTree = ""; }; 2AC92C881FEB0B8B008CAEE0 /* DWQRScanViewModel.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = DWQRScanViewModel.h; sourceTree = ""; }; 2AC92C891FEB0B8B008CAEE0 /* DWQRScanViewModel.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = DWQRScanViewModel.m; sourceTree = ""; }; + 2AE125F6224113C600379C6F /* DWBaseMasternodeViewController.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = DWBaseMasternodeViewController.h; sourceTree = ""; }; + 2AE125F7224113C600379C6F /* DWBaseMasternodeViewController.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = DWBaseMasternodeViewController.m; sourceTree = ""; }; + 2AE125FB2241151B00379C6F /* DWMasternodeTableViewCell.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = DWMasternodeTableViewCell.xib; sourceTree = ""; }; + 2AE125FE2241342900379C6F /* DWResultsMasternodeViewController.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = DWResultsMasternodeViewController.h; sourceTree = ""; }; + 2AE125FF2241342900379C6F /* DWResultsMasternodeViewController.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = DWResultsMasternodeViewController.m; sourceTree = ""; }; 31B0B9B2A5229B6E6848BD9C /* libPods-DashWalletUITests.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libPods-DashWalletUITests.a"; sourceTree = BUILT_PRODUCTS_DIR; }; 31D68B501C23B6C10030FAAA /* DashWalletUITests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = DashWalletUITests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; 31D68B521C23B6C10030FAAA /* DashWalletUITests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DashWalletUITests.swift; sourceTree = ""; }; @@ -1216,6 +1224,10 @@ FB31C24B223BD3F400BD0868 /* DWUpdateMasternodeRevocationViewController.m */, FB31C243223BD3F200BD0868 /* DWUpdateMasternodeServiceViewController.h */, FB31C24C223BD3F400BD0868 /* DWUpdateMasternodeServiceViewController.m */, + 2AE125F6224113C600379C6F /* DWBaseMasternodeViewController.h */, + 2AE125F7224113C600379C6F /* DWBaseMasternodeViewController.m */, + 2AE125FE2241342900379C6F /* DWResultsMasternodeViewController.h */, + 2AE125FF2241342900379C6F /* DWResultsMasternodeViewController.m */, ); path = "Masternode Keys"; sourceTree = ""; @@ -1237,6 +1249,7 @@ FB31C265223BD6FB00BD0868 /* DWKeyValueTableViewCell.m */, FB31C268223BD9F400BD0868 /* DWMasternodeTableViewCell.h */, FB31C267223BD9F400BD0868 /* DWMasternodeTableViewCell.m */, + 2AE125FB2241151B00379C6F /* DWMasternodeTableViewCell.xib */, ); name = Cells; sourceTree = ""; @@ -1572,6 +1585,7 @@ FB3FF0B22226416A0059A9A5 /* Masternode.storyboard in Resources */, 2A8F422121BF028500858B91 /* AboutStoryboard.storyboard in Resources */, FBFC2ED521137A7A00D20C57 /* Montserrat-Medium.otf in Resources */, + 2AE125FD2241151B00379C6F /* DWMasternodeTableViewCell.xib in Resources */, FBFC2EC521137A7A00D20C57 /* Montserrat-Regular.otf in Resources */, FBFC2EB921137A7A00D20C57 /* Montserrat-ThinItalic.otf in Resources */, 75E83CF61B5F997A0038FB70 /* coinflip.aiff in Resources */, @@ -1904,6 +1918,7 @@ FB9CC2711F8E27B80079309F /* DWGenerateViewController.m in Sources */, BA7B53541BDAA0A800355E8D /* BRAppleWatchTransactionData.m in Sources */, 2AB231D72196E5CF00A6E7E6 /* DWMigrationViewModel.m in Sources */, + 2AE126002241342900379C6F /* DWResultsMasternodeViewController.m in Sources */, FB31C262223BD62D00BD0868 /* DWProviderUpdateServiceTableViewCell.m in Sources */, FB3FF0B5222642FB0059A9A5 /* DWKeysOverviewViewController.m in Sources */, FB021E571E47E17200D17638 /* FBShimmeringView.m in Sources */, @@ -1939,6 +1954,7 @@ 759FBB37193290F600AB4465 /* DWSendViewController.m in Sources */, 2A8F422021BEFEEA00858B91 /* DWAboutModel.m in Sources */, FB31C23C223BCFAA00BD0868 /* DWMasternodeRootViewController.m in Sources */, + 2AE125F8224113C600379C6F /* DWBaseMasternodeViewController.m in Sources */, 75D5F3CE191EC270004AB296 /* main.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; diff --git a/DashWallet/DWAppDelegate.m b/DashWallet/DWAppDelegate.m index e127c049c..4669d1d8e 100644 --- a/DashWallet/DWAppDelegate.m +++ b/DashWallet/DWAppDelegate.m @@ -257,9 +257,6 @@ - (void)setupDashWalletAppearance { [[UINavigationBar appearance] setBarTintColor:UIColorFromRGB(0x00A0EA)]; [[UINavigationBar appearance] setTranslucent:NO]; [[UINavigationBar appearance] setShadowImage:[[UIImage alloc] init]]; - [[UINavigationBar appearance] setBackgroundImage:[[UIImage alloc] init] - forBarPosition:UIBarPositionAny - barMetrics:UIBarMetricsDefault]; [[UIBarButtonItem appearanceWhenContainedInInstancesOfClasses:@[[UINavigationBar class]]] setTitleTextAttributes:@{NSFontAttributeName:[UIFont systemFontOfSize:18]} diff --git a/DashWallet/DWMasternodeTableViewCell.xib b/DashWallet/DWMasternodeTableViewCell.xib new file mode 100644 index 000000000..8c6a119c7 --- /dev/null +++ b/DashWallet/DWMasternodeTableViewCell.xib @@ -0,0 +1,57 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/DashWallet/DWTxHistoryViewController.m b/DashWallet/DWTxHistoryViewController.m index 63c6ff883..508dc6bbe 100644 --- a/DashWallet/DWTxHistoryViewController.m +++ b/DashWallet/DWTxHistoryViewController.m @@ -696,57 +696,59 @@ - (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath } } -// MARK: - UIViewControllerAnimatedTransitioning - -// This is used for percent driven interactive transitions, as well as for container controllers that have companion -// animations that might need to synchronize with the main animation. -- (NSTimeInterval)transitionDuration:(id)transitionContext -{ - return 0.35; -} - -// This method can only be a nop if the transition is interactive and not a percentDriven interactive transition. -- (void)animateTransition:(id)transitionContext -{ - UIView *containerView = transitionContext.containerView; - UIViewController *to = [transitionContext viewControllerForKey:UITransitionContextToViewControllerKey], - *from = [transitionContext viewControllerForKey:UITransitionContextFromViewControllerKey]; - - BOOL pop = to == self || ![self.navigationController.viewControllers containsObject:from]; - - to.view.center = CGPointMake(containerView.frame.size.width*(pop ? -1 : 3)/2, to.view.center.y); - [containerView addSubview:to.view]; - - [UIView animateWithDuration:[self transitionDuration:transitionContext] delay:0.0 usingSpringWithDamping:0.8 - initialSpringVelocity:0 options:UIViewAnimationOptionCurveEaseOut animations:^{ - to.view.center = from.view.center; - from.view.center = CGPointMake(containerView.frame.size.width*(pop ? 3 : -1)/2, from.view.center.y); - } completion:^(BOOL finished) { - if (pop) [from.view removeFromSuperview]; - [transitionContext completeTransition:YES]; - }]; -} - -// MARK: - UINavigationControllerDelegate - -- (id)navigationController:(UINavigationController *)navigationController - animationControllerForOperation:(UINavigationControllerOperation)operation fromViewController:(UIViewController *)fromVC - toViewController:(UIViewController *)toVC -{ - return self; -} - -// MARK: - UIViewControllerTransitioningDelegate - -- (id)animationControllerForPresentedController:(UIViewController *)presented - presentingController:(UIViewController *)presenting sourceController:(UIViewController *)source -{ - return self; -} - -- (id)animationControllerForDismissedController:(UIViewController *)dismissed -{ - return self; -} +// Custom navigation transition disabled due to buggy transitions with search bar +// +//// MARK: - UIViewControllerAnimatedTransitioning +// +//// This is used for percent driven interactive transitions, as well as for container controllers that have companion +//// animations that might need to synchronize with the main animation. +//- (NSTimeInterval)transitionDuration:(id)transitionContext +//{ +// return 0.35; +//} +// +//// This method can only be a nop if the transition is interactive and not a percentDriven interactive transition. +//- (void)animateTransition:(id)transitionContext +//{ +// UIView *containerView = transitionContext.containerView; +// UIViewController *to = [transitionContext viewControllerForKey:UITransitionContextToViewControllerKey], +// *from = [transitionContext viewControllerForKey:UITransitionContextFromViewControllerKey]; +// +// BOOL pop = to == self || ![self.navigationController.viewControllers containsObject:from]; +// +// to.view.center = CGPointMake(containerView.frame.size.width*(pop ? -1 : 3)/2, to.view.center.y); +// [containerView addSubview:to.view]; +// +// [UIView animateWithDuration:[self transitionDuration:transitionContext] delay:0.0 usingSpringWithDamping:0.8 +// initialSpringVelocity:0 options:UIViewAnimationOptionCurveEaseOut animations:^{ +// to.view.center = from.view.center; +// from.view.center = CGPointMake(containerView.frame.size.width*(pop ? 3 : -1)/2, from.view.center.y); +// } completion:^(BOOL finished) { +// if (pop) [from.view removeFromSuperview]; +// [transitionContext completeTransition:YES]; +// }]; +//} +// +//// MARK: - UINavigationControllerDelegate +// +//- (id)navigationController:(UINavigationController *)navigationController +// animationControllerForOperation:(UINavigationControllerOperation)operation fromViewController:(UIViewController *)fromVC +// toViewController:(UIViewController *)toVC +//{ +// return self; +//} +// +//// MARK: - UIViewControllerTransitioningDelegate +// +//- (id)animationControllerForPresentedController:(UIViewController *)presented +// presentingController:(UIViewController *)presenting sourceController:(UIViewController *)source +//{ +// return self; +//} +// +//- (id)animationControllerForDismissedController:(UIViewController *)dismissed +//{ +// return self; +//} @end diff --git a/DashWallet/Masternode Keys/DWBaseMasternodeViewController.h b/DashWallet/Masternode Keys/DWBaseMasternodeViewController.h new file mode 100644 index 000000000..db518e12d --- /dev/null +++ b/DashWallet/Masternode Keys/DWBaseMasternodeViewController.h @@ -0,0 +1,33 @@ +// +// Created by Andrew Podkovyrin +// Copyright © 2019 Dash Core Group. All rights reserved. +// +// Licensed under the MIT License (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://opensource.org/licenses/MIT +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// + +#import + +NS_ASSUME_NONNULL_BEGIN + +@class DSChain; + +@interface DWBaseMasternodeViewController : UITableViewController + +@property (nonatomic,strong) DSChain * chain; +@property (nonatomic,strong) NSFetchedResultsController * fetchedResultsController; + +- (void)updateSearchString:(NSString *)searchString; + +@end + +NS_ASSUME_NONNULL_END diff --git a/DashWallet/Masternode Keys/DWBaseMasternodeViewController.m b/DashWallet/Masternode Keys/DWBaseMasternodeViewController.m new file mode 100644 index 000000000..2e78e2925 --- /dev/null +++ b/DashWallet/Masternode Keys/DWBaseMasternodeViewController.m @@ -0,0 +1,160 @@ +// +// Created by Andrew Podkovyrin +// Copyright © 2019 Dash Core Group. All rights reserved. +// +// Licensed under the MIT License (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://opensource.org/licenses/MIT +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// + +#import "DWBaseMasternodeViewController.h" + +#import "DWMasternodeTableViewCell.h" +#import +#import "DWEnvironment.h" + +NS_ASSUME_NONNULL_BEGIN + +static NSString * const DWBaseMasternodeViewControllerCellId = @"MasternodeTableViewCellIdentifier"; + +@interface DWBaseMasternodeViewController () + +@property (nullable, copy, nonatomic) NSString *searchString; + +@end + +@implementation DWBaseMasternodeViewController + +- (void)viewDidLoad { + [super viewDidLoad]; + + self.chain = [DWEnvironment sharedInstance].currentChain; + + self.tableView.rowHeight = 93.0; + + UINib *nib = [UINib nibWithNibName:@"DWMasternodeTableViewCell" bundle:nil]; + NSParameterAssert(nib); + [self.tableView registerNib:nib forCellReuseIdentifier:DWBaseMasternodeViewControllerCellId]; +} + +- (void)updateSearchString:(NSString *)searchString { + self.searchString = searchString; + _fetchedResultsController = nil; + [self.tableView reloadData]; +} + +#pragma mark - FRC + +-(NSManagedObjectContext*)managedObjectContext { + return [NSManagedObject context]; +} + +-(NSPredicate*)searchPredicate { + // Get all shapeshifts that have been received by shapeshift.io or all shapeshifts that have no deposits but where we can verify a transaction has been pushed on the blockchain + if (self.searchString && ![self.searchString isEqualToString:@""]) { + if ([self.searchString isEqualToString:@"0"] || [self.searchString longLongValue]) { + NSArray * ipArray = [self.searchString componentsSeparatedByString:@"."]; + NSMutableArray *partPredicates = [NSMutableArray array]; + NSPredicate * chainPredicate = [NSPredicate predicateWithFormat:@"chain == %@",self.chain.chainEntity]; + [partPredicates addObject:chainPredicate]; + for (int i = 0; i< MIN(ipArray.count,4); i++) { + if ([ipArray[i] isEqualToString:@""]) break; + NSPredicate *currentPartPredicate = [NSPredicate predicateWithFormat:@"(((address >> %@) & 255) == %@)", @(24-i*8),@([ipArray[i] integerValue])]; + [partPredicates addObject:currentPartPredicate]; + } + + return [NSCompoundPredicate andPredicateWithSubpredicates:partPredicates]; + } else { + return [NSPredicate predicateWithFormat:@"chain == %@",self.chain.chainEntity]; + } + + } else { + return [NSPredicate predicateWithFormat:@"chain == %@",self.chain.chainEntity]; + } + +} + +- (NSFetchedResultsController *)fetchedResultsController +{ + if (_fetchedResultsController) return _fetchedResultsController; + NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init]; + // Edit the entity name as appropriate. + NSEntityDescription *entity = [NSEntityDescription entityForName:@"DSSimplifiedMasternodeEntryEntity" inManagedObjectContext:self.managedObjectContext]; + [fetchRequest setEntity:entity]; + + // Set the batch size to a suitable number. + [fetchRequest setFetchBatchSize:20]; + + // Edit the sort key as appropriate. + NSSortDescriptor *claimSortDescriptor = [[NSSortDescriptor alloc] initWithKey:@"localMasternode" ascending:NO]; + NSSortDescriptor *addressSortDescriptor = [[NSSortDescriptor alloc] initWithKey:@"address" ascending:YES]; + NSSortDescriptor *portSortDescriptor = [[NSSortDescriptor alloc] initWithKey:@"port" ascending:YES]; + NSArray *sortDescriptors = @[claimSortDescriptor,addressSortDescriptor,portSortDescriptor]; + + [fetchRequest setSortDescriptors:sortDescriptors]; + + NSPredicate *filterPredicate = [self searchPredicate]; + [fetchRequest setPredicate:filterPredicate]; + + // Edit the section name key path and cache name if appropriate. + // nil for section name key path means "no sections". + NSFetchedResultsController *aFetchedResultsController = [[NSFetchedResultsController alloc] initWithFetchRequest:fetchRequest managedObjectContext:self.managedObjectContext sectionNameKeyPath:@"localMasternode" cacheName:nil]; + _fetchedResultsController = aFetchedResultsController; + NSError *error = nil; + if (![aFetchedResultsController performFetch:&error]) { + // Replace this implementation with code to handle the error appropriately. + // abort() causes the application to generate a crash log and terminate. You should not use this function in a shipping application, although it may be useful during development. + NSLog(@"Unresolved error %@, %@", error, [error userInfo]); + abort(); + } + + return aFetchedResultsController; +} + + +#pragma mark - TableView + +-(nullable NSString*)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section { + if ([self.fetchedResultsController sections].count == 1 || section) { + return NSLocalizedString(@"Masternodes",nil); + } else { + return NSLocalizedString(@"My Masternodes",nil); + } +} + +- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView { + return [[self.fetchedResultsController sections] count]; +} + +- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section { + id sectionInfo = [[self.fetchedResultsController sections] objectAtIndex:section]; + return [sectionInfo numberOfObjects]; +} + +- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { + DWMasternodeTableViewCell *cell = (DWMasternodeTableViewCell *)[tableView dequeueReusableCellWithIdentifier:DWBaseMasternodeViewControllerCellId forIndexPath:indexPath]; + + [self configureCell:cell atIndexPath:indexPath]; + + return cell; +} + +-(void)configureCell:(DWMasternodeTableViewCell*)cell atIndexPath:(NSIndexPath *)indexPath { + DSSimplifiedMasternodeEntryEntity *simplifiedMasternodeEntryEntity = [self.fetchedResultsController objectAtIndexPath:indexPath]; + char s[INET6_ADDRSTRLEN]; + uint32_t ipAddress = CFSwapInt32BigToHost(simplifiedMasternodeEntryEntity.address); + cell.masternodeLocationLabel.text = [NSString stringWithFormat:@"%s:%d",inet_ntop(AF_INET, &ipAddress, s, sizeof(s)),simplifiedMasternodeEntryEntity.port]; + cell.outputLabel.text = [NSString stringWithFormat:@"%@",simplifiedMasternodeEntryEntity.providerRegistrationTransactionHash]; +} + +@end + +NS_ASSUME_NONNULL_END diff --git a/DashWallet/Masternode Keys/DWMasternodeViewController.h b/DashWallet/Masternode Keys/DWMasternodeViewController.h index ecc8ef0d3..0a09df594 100644 --- a/DashWallet/Masternode Keys/DWMasternodeViewController.h +++ b/DashWallet/Masternode Keys/DWMasternodeViewController.h @@ -6,9 +6,9 @@ // Copyright © 2018 Dash Core Group. All rights reserved. // -#import +#import "DWBaseMasternodeViewController.h" #import -@interface DWMasternodeViewController : UITableViewController +@interface DWMasternodeViewController : DWBaseMasternodeViewController @end diff --git a/DashWallet/Masternode Keys/DWMasternodeViewController.m b/DashWallet/Masternode Keys/DWMasternodeViewController.m index 63e07f358..22cf8d2d4 100644 --- a/DashWallet/Masternode Keys/DWMasternodeViewController.m +++ b/DashWallet/Masternode Keys/DWMasternodeViewController.m @@ -12,183 +12,96 @@ #import #import "DWRegisterMasternodeViewController.h" #import "DWMasternodeDetailViewController.h" -#import "DWEnvironment.h" +#import "DWResultsMasternodeViewController.h" -@interface DWMasternodeViewController () -@property (nonatomic,strong) NSFetchedResultsController * fetchedResultsController; -@property (nonatomic,strong) NSString * searchString; -@property (strong, nonatomic) IBOutlet UIBarButtonItem *registerButton; -@property (nonatomic,strong) DSChain * chain; - -@end - -@implementation DWMasternodeViewController - -- (void)viewDidLoad { - [super viewDidLoad]; - self.chain = [DWEnvironment sharedInstance].currentChain; -} - -- (void)didReceiveMemoryWarning { - [super didReceiveMemoryWarning]; - // Dispose of any resources that can be recreated. -} - -#pragma mark - Automation KVO - --(NSManagedObjectContext*)managedObjectContext { - return [NSManagedObject context]; -} - --(NSPredicate*)searchPredicate { - // Get all shapeshifts that have been received by shapeshift.io or all shapeshifts that have no deposits but where we can verify a transaction has been pushed on the blockchain - if (self.searchString && ![self.searchString isEqualToString:@""]) { - if ([self.searchString isEqualToString:@"0"] || [self.searchString longLongValue]) { - NSArray * ipArray = [self.searchString componentsSeparatedByString:@"."]; - NSMutableArray *partPredicates = [NSMutableArray array]; - NSPredicate * chainPredicate = [NSPredicate predicateWithFormat:@"chain == %@",self.chain.chainEntity]; - [partPredicates addObject:chainPredicate]; - for (int i = 0; i< MIN(ipArray.count,4); i++) { - if ([ipArray[i] isEqualToString:@""]) break; - NSPredicate *currentPartPredicate = [NSPredicate predicateWithFormat:@"(((address >> %@) & 255) == %@)", @(24-i*8),@([ipArray[i] integerValue])]; - [partPredicates addObject:currentPartPredicate]; +static UITextField *TextFieldSubviewOfView(UIView *view) { + if ([view isKindOfClass:UITextField.class]) { + return (UITextField *)view; + } + else { + UITextField *textField = nil; + for (UIView *subview in view.subviews) { + textField = TextFieldSubviewOfView(subview); + if (textField) { + break; } - - return [NSCompoundPredicate andPredicateWithSubpredicates:partPredicates]; - } else { - return [NSPredicate predicateWithFormat:@"chain == %@",self.chain.chainEntity]; } - - } else { - return [NSPredicate predicateWithFormat:@"chain == %@",self.chain.chainEntity]; + return textField; } - } -- (NSFetchedResultsController *)fetchedResultsController -{ - if (_fetchedResultsController) return _fetchedResultsController; - NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init]; - // Edit the entity name as appropriate. - NSEntityDescription *entity = [NSEntityDescription entityForName:@"DSSimplifiedMasternodeEntryEntity" inManagedObjectContext:self.managedObjectContext]; - [fetchRequest setEntity:entity]; - - // Set the batch size to a suitable number. - [fetchRequest setFetchBatchSize:20]; - - // Edit the sort key as appropriate. - NSSortDescriptor *claimSortDescriptor = [[NSSortDescriptor alloc] initWithKey:@"localMasternode" ascending:NO]; - NSSortDescriptor *addressSortDescriptor = [[NSSortDescriptor alloc] initWithKey:@"address" ascending:YES]; - NSSortDescriptor *portSortDescriptor = [[NSSortDescriptor alloc] initWithKey:@"port" ascending:YES]; - NSArray *sortDescriptors = @[claimSortDescriptor,addressSortDescriptor,portSortDescriptor]; - - [fetchRequest setSortDescriptors:sortDescriptors]; - - NSPredicate *filterPredicate = [self searchPredicate]; - [fetchRequest setPredicate:filterPredicate]; - - // Edit the section name key path and cache name if appropriate. - // nil for section name key path means "no sections". - NSFetchedResultsController *aFetchedResultsController = [[NSFetchedResultsController alloc] initWithFetchRequest:fetchRequest managedObjectContext:self.managedObjectContext sectionNameKeyPath:@"localMasternode" cacheName:nil]; - _fetchedResultsController = aFetchedResultsController; - aFetchedResultsController.delegate = self; - NSError *error = nil; - if (![aFetchedResultsController performFetch:&error]) { - // Replace this implementation with code to handle the error appropriately. - // abort() causes the application to generate a crash log and terminate. You should not use this function in a shipping application, although it may be useful during development. - NSLog(@"Unresolved error %@, %@", error, [error userInfo]); - abort(); - } - - return aFetchedResultsController; -} +@interface DWMasternodeViewController () -- (void)controllerWillChangeContent:(NSFetchedResultsController *)controller { - -} +@property (strong, nonatomic) IBOutlet UIBarButtonItem *registerButton; +@property (strong, nonatomic) UISearchController *searchController; +@property (strong, nonatomic) DWResultsMasternodeViewController *searchResultsController; +@end -- (void)controller:(NSFetchedResultsController *)controller didChangeSection:(id )sectionInfo - atIndex:(NSUInteger)sectionIndex forChangeType:(NSFetchedResultsChangeType)type { - -} +@implementation DWMasternodeViewController -- (void)controller:(NSFetchedResultsController *)controller didChangeObject:(id)anObject - atIndexPath:(NSIndexPath *)indexPath forChangeType:(NSFetchedResultsChangeType)changeType - newIndexPath:(NSIndexPath *)newIndexPath { +- (void)viewDidLoad { + [super viewDidLoad]; -} - - -- (void)controllerDidChangeContent:(NSFetchedResultsController *)controller { + self.definesPresentationContext = YES; + DWResultsMasternodeViewController *searchResultsController = [[DWResultsMasternodeViewController alloc] initWithStyle:UITableViewStyleGrouped]; + searchResultsController.tableView.delegate = self; + self.searchResultsController = searchResultsController; -} - -#pragma mark - Table view data source - --(NSString*)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section { - if ([self.fetchedResultsController sections].count == 1 || section) { - return NSLocalizedString(@"Masternodes",nil); + UIColor *dashBlueColor = [UIColor colorWithRed:0.0 green:141.0/255.0 blue:228.0/255.0 alpha:1.0]; + UISearchController *searchController = [[UISearchController alloc] initWithSearchResultsController:searchResultsController]; + searchController.searchResultsUpdater = self; + searchController.searchBar.delegate = self; + searchController.searchBar.autocapitalizationType = UITextAutocapitalizationTypeNone; + searchController.searchBar.searchBarStyle = UISearchBarStyleProminent; + searchController.searchBar.barTintColor = dashBlueColor; + searchController.searchBar.tintColor = [UIColor whiteColor]; + UITextField *searchTextField = TextFieldSubviewOfView(searchController.searchBar); + searchTextField.tintColor = dashBlueColor; + UIView *textfieldBackground = searchTextField.subviews.firstObject; + textfieldBackground.backgroundColor = [UIColor whiteColor]; + textfieldBackground.layer.cornerRadius = 10; + textfieldBackground.clipsToBounds = YES; + if (@available(iOS 11.0, *)) { + self.navigationItem.searchController = searchController; + self.navigationItem.hidesSearchBarWhenScrolling = NO; } else { - return NSLocalizedString(@"My Masternodes",nil); + self.tableView.tableHeaderView = searchController.searchBar; } + self.searchController = searchController; } -- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView { - - return [[self.fetchedResultsController sections] count]; -} - -- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section { - id sectionInfo = [[self.fetchedResultsController sections] objectAtIndex:section]; - return [sectionInfo numberOfObjects]; -} +#pragma mark - Table view data source --(void)tableView:(UITableView *)tableView didDeselectRowAtIndexPath:(NSIndexPath *)indexPath { - [self.registerButton setEnabled:FALSE]; +- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath { + [tableView deselectRowAtIndexPath:indexPath animated:YES]; + + DSSimplifiedMasternodeEntryEntity *simplifiedMasternodeEntryEntity = [self.fetchedResultsController objectAtIndexPath:indexPath]; + DWMasternodeDetailViewController * masternodeDetailViewController = (DWMasternodeDetailViewController*)[self.storyboard instantiateViewControllerWithIdentifier:@"DWMasternodeDetailViewControllerId"]; + masternodeDetailViewController.simplifiedMasternodeEntry = simplifiedMasternodeEntryEntity.simplifiedMasternodeEntry; + masternodeDetailViewController.localMasternode = simplifiedMasternodeEntryEntity.localMasternode?[simplifiedMasternodeEntryEntity.localMasternode loadLocalMasternode]:nil; + [self.navigationController pushViewController:masternodeDetailViewController animated:YES]; } -- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { - DWMasternodeTableViewCell *cell = (DWMasternodeTableViewCell *)[tableView dequeueReusableCellWithIdentifier:@"MasternodeTableViewCellIdentifier" forIndexPath:indexPath]; - - // Configure the cell... - [self configureCell:cell atIndexPath:indexPath]; - return cell; +-(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender { + if ([segue.identifier isEqualToString:@"RegisterMasternodeSegue"]) { + UINavigationController * navigationController = (UINavigationController*)segue.destinationViewController; + DWRegisterMasternodeViewController * registerMasternodeViewController = (DWRegisterMasternodeViewController*)navigationController.topViewController; + registerMasternodeViewController.chain = self.chain; + } } +#pragma mark UISearchResultsUpdating --(void)configureCell:(DWMasternodeTableViewCell*)cell atIndexPath:(NSIndexPath *)indexPath { - DSSimplifiedMasternodeEntryEntity *simplifiedMasternodeEntryEntity = [self.fetchedResultsController objectAtIndexPath:indexPath]; - char s[INET6_ADDRSTRLEN]; - uint32_t ipAddress = CFSwapInt32BigToHost(simplifiedMasternodeEntryEntity.address); - cell.masternodeLocationLabel.text = [NSString stringWithFormat:@"%s:%d",inet_ntop(AF_INET, &ipAddress, s, sizeof(s)),simplifiedMasternodeEntryEntity.port]; - cell.outputLabel.text = [NSString stringWithFormat:@"%@",simplifiedMasternodeEntryEntity.providerRegistrationTransactionHash]; +- (void)updateSearchResultsForSearchController:(UISearchController *)searchController { + [self.searchResultsController updateSearchString:searchController.searchBar.text]; } --(void)searchBarTextDidBeginEditing:(UISearchBar *)searchBar { - self.searchString = @"0"; - _fetchedResultsController = nil; - [self.tableView reloadData]; -} +#pragma mark UISearchBarDelegate - (void)searchBarSearchButtonClicked:(UISearchBar *)searchBar { - self.searchString = searchBar.text; - _fetchedResultsController = nil; - [self.tableView reloadData]; + [searchBar resignFirstResponder]; } --(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender { - if ([segue.identifier isEqualToString:@"MasternodeDetailSegue"]) { - NSIndexPath * indexPath = self.tableView.indexPathForSelectedRow; - DSSimplifiedMasternodeEntryEntity *simplifiedMasternodeEntryEntity = [self.fetchedResultsController objectAtIndexPath:indexPath]; - DWMasternodeDetailViewController * masternodeDetailViewController = (DWMasternodeDetailViewController*)segue.destinationViewController; - masternodeDetailViewController.simplifiedMasternodeEntry = simplifiedMasternodeEntryEntity.simplifiedMasternodeEntry; - masternodeDetailViewController.localMasternode = simplifiedMasternodeEntryEntity.localMasternode?[simplifiedMasternodeEntryEntity.localMasternode loadLocalMasternode]:nil; - } else if ([segue.identifier isEqualToString:@"RegisterMasternodeSegue"]) { - UINavigationController * navigationController = (UINavigationController*)segue.destinationViewController; - DWRegisterMasternodeViewController * registerMasternodeViewController = (DWRegisterMasternodeViewController*)navigationController.topViewController; - registerMasternodeViewController.chain = self.chain; - } -} @end diff --git a/DashWallet/Masternode Keys/DWResultsMasternodeViewController.h b/DashWallet/Masternode Keys/DWResultsMasternodeViewController.h new file mode 100644 index 000000000..2efd91e9d --- /dev/null +++ b/DashWallet/Masternode Keys/DWResultsMasternodeViewController.h @@ -0,0 +1,26 @@ +// +// Created by Andrew Podkovyrin +// Copyright © 2019 Dash Core Group. All rights reserved. +// +// Licensed under the MIT License (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://opensource.org/licenses/MIT +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// + +#import "DWBaseMasternodeViewController.h" + +NS_ASSUME_NONNULL_BEGIN + +@interface DWResultsMasternodeViewController : DWBaseMasternodeViewController + +@end + +NS_ASSUME_NONNULL_END diff --git a/DashWallet/Masternode Keys/DWResultsMasternodeViewController.m b/DashWallet/Masternode Keys/DWResultsMasternodeViewController.m new file mode 100644 index 000000000..539ee357c --- /dev/null +++ b/DashWallet/Masternode Keys/DWResultsMasternodeViewController.m @@ -0,0 +1,26 @@ +// +// Created by Andrew Podkovyrin +// Copyright © 2019 Dash Core Group. All rights reserved. +// +// Licensed under the MIT License (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://opensource.org/licenses/MIT +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// + +#import "DWResultsMasternodeViewController.h" + +NS_ASSUME_NONNULL_BEGIN + +@implementation DWResultsMasternodeViewController + +@end + +NS_ASSUME_NONNULL_END diff --git a/DashWallet/Masternode Keys/Masternode.storyboard b/DashWallet/Masternode Keys/Masternode.storyboard index 69ca54e1f..95082be54 100644 --- a/DashWallet/Masternode Keys/Masternode.storyboard +++ b/DashWallet/Masternode Keys/Masternode.storyboard @@ -77,7 +77,9 @@ - + + + @@ -103,14 +105,14 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/DashWallet/ar.lproj/Localizable.strings b/DashWallet/ar.lproj/Localizable.strings index 3c81107b4..c48c17bf6 100644 --- a/DashWallet/ar.lproj/Localizable.strings +++ b/DashWallet/ar.lproj/Localizable.strings @@ -542,6 +542,9 @@ /* No comment provided by engineer. */ "show phrase" = "إظهار الجملة"; +/* No comment provided by engineer. */ +"Sign Message" = "Sign Message"; + /* No comment provided by engineer. */ "size:" = "size:"; diff --git a/DashWallet/bg.lproj/Localizable.strings b/DashWallet/bg.lproj/Localizable.strings index 2dfd88b23..18e48da22 100644 --- a/DashWallet/bg.lproj/Localizable.strings +++ b/DashWallet/bg.lproj/Localizable.strings @@ -542,6 +542,9 @@ /* No comment provided by engineer. */ "show phrase" = "покажи фраза"; +/* No comment provided by engineer. */ +"Sign Message" = "Sign Message"; + /* No comment provided by engineer. */ "size:" = "размер:"; diff --git a/DashWallet/de.lproj/Localizable.strings b/DashWallet/de.lproj/Localizable.strings index 6d4905823..179c2ec3f 100644 --- a/DashWallet/de.lproj/Localizable.strings +++ b/DashWallet/de.lproj/Localizable.strings @@ -542,6 +542,9 @@ /* No comment provided by engineer. */ "show phrase" = "Wiederherstellungs-Wortfolge anzeigen"; +/* No comment provided by engineer. */ +"Sign Message" = "Sign Message"; + /* No comment provided by engineer. */ "size:" = "Größe:"; diff --git a/DashWallet/el.lproj/Localizable.strings b/DashWallet/el.lproj/Localizable.strings index 6a3bd4ff8..dece0475e 100644 --- a/DashWallet/el.lproj/Localizable.strings +++ b/DashWallet/el.lproj/Localizable.strings @@ -542,6 +542,9 @@ /* No comment provided by engineer. */ "show phrase" = "εμφάνιση φράσης"; +/* No comment provided by engineer. */ +"Sign Message" = "Sign Message"; + /* No comment provided by engineer. */ "size:" = "size:"; diff --git a/DashWallet/en.lproj/Localizable.strings b/DashWallet/en.lproj/Localizable.strings index 2b7b16b81..ff93b8079 100644 --- a/DashWallet/en.lproj/Localizable.strings +++ b/DashWallet/en.lproj/Localizable.strings @@ -542,6 +542,9 @@ /* No comment provided by engineer. */ "show phrase" = "show phrase"; +/* No comment provided by engineer. */ +"Sign Message" = "Sign Message"; + /* No comment provided by engineer. */ "size:" = "size:"; diff --git a/DashWallet/es.lproj/Localizable.strings b/DashWallet/es.lproj/Localizable.strings index cc8dc6087..2a504713c 100644 --- a/DashWallet/es.lproj/Localizable.strings +++ b/DashWallet/es.lproj/Localizable.strings @@ -542,6 +542,9 @@ /* No comment provided by engineer. */ "show phrase" = "mostrar frase"; +/* No comment provided by engineer. */ +"Sign Message" = "Sign Message"; + /* No comment provided by engineer. */ "size:" = "tamaño:"; diff --git a/DashWallet/fr.lproj/Localizable.strings b/DashWallet/fr.lproj/Localizable.strings index 13ca34972..837715a28 100644 --- a/DashWallet/fr.lproj/Localizable.strings +++ b/DashWallet/fr.lproj/Localizable.strings @@ -542,6 +542,9 @@ /* No comment provided by engineer. */ "show phrase" = "montrer la phrase"; +/* No comment provided by engineer. */ +"Sign Message" = "Sign Message"; + /* No comment provided by engineer. */ "size:" = "taille :"; diff --git a/DashWallet/id.lproj/Localizable.strings b/DashWallet/id.lproj/Localizable.strings index 770726e5e..ea35907c5 100644 --- a/DashWallet/id.lproj/Localizable.strings +++ b/DashWallet/id.lproj/Localizable.strings @@ -542,6 +542,9 @@ /* No comment provided by engineer. */ "show phrase" = "tunjukkan frasa"; +/* No comment provided by engineer. */ +"Sign Message" = "Sign Message"; + /* No comment provided by engineer. */ "size:" = "ukuran:"; diff --git a/DashWallet/it.lproj/Localizable.strings b/DashWallet/it.lproj/Localizable.strings index 5e88fbddf..d470f9a40 100644 --- a/DashWallet/it.lproj/Localizable.strings +++ b/DashWallet/it.lproj/Localizable.strings @@ -542,6 +542,9 @@ /* No comment provided by engineer. */ "show phrase" = "mostra frase"; +/* No comment provided by engineer. */ +"Sign Message" = "Sign Message"; + /* No comment provided by engineer. */ "size:" = "taglia:"; diff --git a/DashWallet/ja.lproj/Localizable.strings b/DashWallet/ja.lproj/Localizable.strings index 573627737..ac44575c9 100644 --- a/DashWallet/ja.lproj/Localizable.strings +++ b/DashWallet/ja.lproj/Localizable.strings @@ -542,6 +542,9 @@ /* No comment provided by engineer. */ "show phrase" = "フレーズを表示"; +/* No comment provided by engineer. */ +"Sign Message" = "Sign Message"; + /* No comment provided by engineer. */ "size:" = "サイズ:"; diff --git a/DashWallet/ko.lproj/Localizable.strings b/DashWallet/ko.lproj/Localizable.strings index 265344249..9572598e3 100644 --- a/DashWallet/ko.lproj/Localizable.strings +++ b/DashWallet/ko.lproj/Localizable.strings @@ -542,6 +542,9 @@ /* No comment provided by engineer. */ "show phrase" = "문구 보기"; +/* No comment provided by engineer. */ +"Sign Message" = "Sign Message"; + /* No comment provided by engineer. */ "size:" = "크기:"; diff --git a/DashWallet/nb.lproj/Localizable.strings b/DashWallet/nb.lproj/Localizable.strings index 1ebfe5945..4add3e011 100644 --- a/DashWallet/nb.lproj/Localizable.strings +++ b/DashWallet/nb.lproj/Localizable.strings @@ -542,6 +542,9 @@ /* No comment provided by engineer. */ "show phrase" = "vis frase"; +/* No comment provided by engineer. */ +"Sign Message" = "Sign Message"; + /* No comment provided by engineer. */ "size:" = "size:"; diff --git a/DashWallet/nl.lproj/Localizable.strings b/DashWallet/nl.lproj/Localizable.strings index 07d371d9a..71e5e3b1a 100644 --- a/DashWallet/nl.lproj/Localizable.strings +++ b/DashWallet/nl.lproj/Localizable.strings @@ -542,6 +542,9 @@ /* No comment provided by engineer. */ "show phrase" = "toon zin"; +/* No comment provided by engineer. */ +"Sign Message" = "Sign Message"; + /* No comment provided by engineer. */ "size:" = "grootte:"; diff --git a/DashWallet/pl.lproj/Localizable.strings b/DashWallet/pl.lproj/Localizable.strings index 3025afaf6..c51e6049a 100644 --- a/DashWallet/pl.lproj/Localizable.strings +++ b/DashWallet/pl.lproj/Localizable.strings @@ -542,6 +542,9 @@ /* No comment provided by engineer. */ "show phrase" = "pokaż frazę"; +/* No comment provided by engineer. */ +"Sign Message" = "Sign Message"; + /* No comment provided by engineer. */ "size:" = "rozmiar:"; diff --git a/DashWallet/pt.lproj/Localizable.strings b/DashWallet/pt.lproj/Localizable.strings index 9b8519861..4a3bea221 100644 --- a/DashWallet/pt.lproj/Localizable.strings +++ b/DashWallet/pt.lproj/Localizable.strings @@ -542,6 +542,9 @@ /* No comment provided by engineer. */ "show phrase" = "mostrar a frase"; +/* No comment provided by engineer. */ +"Sign Message" = "Sign Message"; + /* No comment provided by engineer. */ "size:" = "tamanho:"; diff --git a/DashWallet/ru.lproj/Localizable.strings b/DashWallet/ru.lproj/Localizable.strings index 5ddf1cbc3..4848923fe 100644 --- a/DashWallet/ru.lproj/Localizable.strings +++ b/DashWallet/ru.lproj/Localizable.strings @@ -542,6 +542,9 @@ /* No comment provided by engineer. */ "show phrase" = "Показать фразу"; +/* No comment provided by engineer. */ +"Sign Message" = "Sign Message"; + /* No comment provided by engineer. */ "size:" = "размер:"; diff --git a/DashWallet/sq.lproj/Localizable.strings b/DashWallet/sq.lproj/Localizable.strings index 2dd015afc..861d27752 100644 --- a/DashWallet/sq.lproj/Localizable.strings +++ b/DashWallet/sq.lproj/Localizable.strings @@ -542,6 +542,9 @@ /* No comment provided by engineer. */ "show phrase" = "shfaq frazën"; +/* No comment provided by engineer. */ +"Sign Message" = "Sign Message"; + /* No comment provided by engineer. */ "size:" = "size:"; diff --git a/DashWallet/sv.lproj/Localizable.strings b/DashWallet/sv.lproj/Localizable.strings index b27638d04..ca13e679f 100644 --- a/DashWallet/sv.lproj/Localizable.strings +++ b/DashWallet/sv.lproj/Localizable.strings @@ -542,6 +542,9 @@ /* No comment provided by engineer. */ "show phrase" = "visa fras"; +/* No comment provided by engineer. */ +"Sign Message" = "Sign Message"; + /* No comment provided by engineer. */ "size:" = "size:"; diff --git a/DashWallet/th.lproj/Localizable.strings b/DashWallet/th.lproj/Localizable.strings index 91ac55615..0a04565cc 100644 --- a/DashWallet/th.lproj/Localizable.strings +++ b/DashWallet/th.lproj/Localizable.strings @@ -542,6 +542,9 @@ /* No comment provided by engineer. */ "show phrase" = "แสดงวลี"; +/* No comment provided by engineer. */ +"Sign Message" = "Sign Message"; + /* No comment provided by engineer. */ "size:" = "ขนาด:"; diff --git a/DashWallet/tr.lproj/Localizable.strings b/DashWallet/tr.lproj/Localizable.strings index c7c0caaf2..4e3d83f86 100644 --- a/DashWallet/tr.lproj/Localizable.strings +++ b/DashWallet/tr.lproj/Localizable.strings @@ -542,6 +542,9 @@ /* No comment provided by engineer. */ "show phrase" = "metni göster"; +/* No comment provided by engineer. */ +"Sign Message" = "Sign Message"; + /* No comment provided by engineer. */ "size:" = "boyut:"; diff --git a/DashWallet/vi.lproj/Localizable.strings b/DashWallet/vi.lproj/Localizable.strings index 9606ca801..d07c02cdc 100644 --- a/DashWallet/vi.lproj/Localizable.strings +++ b/DashWallet/vi.lproj/Localizable.strings @@ -542,6 +542,9 @@ /* No comment provided by engineer. */ "show phrase" = "hiển thị cụm từ"; +/* No comment provided by engineer. */ +"Sign Message" = "Sign Message"; + /* No comment provided by engineer. */ "size:" = "kích thước"; diff --git a/DashWallet/zh-Hans.lproj/Localizable.strings b/DashWallet/zh-Hans.lproj/Localizable.strings index 9b54f235e..6be8a3ea6 100644 --- a/DashWallet/zh-Hans.lproj/Localizable.strings +++ b/DashWallet/zh-Hans.lproj/Localizable.strings @@ -542,6 +542,9 @@ /* No comment provided by engineer. */ "show phrase" = "显示密语"; +/* No comment provided by engineer. */ +"Sign Message" = "Sign Message"; + /* No comment provided by engineer. */ "size:" = "size:"; diff --git a/DashWallet/zh-Hant-TW.lproj/Localizable.strings b/DashWallet/zh-Hant-TW.lproj/Localizable.strings index 1b6214a1f..e7e0c6232 100644 --- a/DashWallet/zh-Hant-TW.lproj/Localizable.strings +++ b/DashWallet/zh-Hant-TW.lproj/Localizable.strings @@ -542,6 +542,9 @@ /* No comment provided by engineer. */ "show phrase" = "顯示詞組"; +/* No comment provided by engineer. */ +"Sign Message" = "Sign Message"; + /* No comment provided by engineer. */ "size:" = "size:"; From b19640c01ee43b076d399cf6f693950c2a75a08a Mon Sep 17 00:00:00 2001 From: Quantum Explorer Date: Sun, 30 Jun 2019 13:50:17 +0800 Subject: [PATCH 08/34] register masternode --- DashWallet.xcodeproj/project.pbxproj | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/DashWallet.xcodeproj/project.pbxproj b/DashWallet.xcodeproj/project.pbxproj index 5d84c071c..af7fe8e1a 100644 --- a/DashWallet.xcodeproj/project.pbxproj +++ b/DashWallet.xcodeproj/project.pbxproj @@ -117,6 +117,8 @@ FB021E571E47E17200D17638 /* FBShimmeringView.m in Sources */ = {isa = PBXBuildFile; fileRef = FB021E551E47E17200D17638 /* FBShimmeringView.m */; }; FB021E5B1E4DEFE800D17638 /* MBProgressHUD.m in Sources */ = {isa = PBXBuildFile; fileRef = FB021E5A1E4DEFE800D17638 /* MBProgressHUD.m */; }; FB1BF8C722C6F4B7003413C6 /* DWSignMessageViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = FB1BF8C622C6F4B7003413C6 /* DWSignMessageViewController.m */; }; + FB1BF8C822C7FBD0003413C6 /* DWAmountInputValidator.m in Sources */ = {isa = PBXBuildFile; fileRef = 2A2120E92214566A009906DC /* DWAmountInputValidator.m */; }; + FB1BF8C922C7FBD4003413C6 /* DWAmountObject.m in Sources */ = {isa = PBXBuildFile; fileRef = 2A2120EF22147A40009906DC /* DWAmountObject.m */; }; FB248B5D1F73803100405AE0 /* UserNotifications.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FB248B5C1F73803100405AE0 /* UserNotifications.framework */; }; FB248B631F79BB7C00405AE0 /* SafariServices.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FB248B621F79BB7C00405AE0 /* SafariServices.framework */; }; FB2E5537218BA161003A1B7C /* DWVersionManager.m in Sources */ = {isa = PBXBuildFile; fileRef = FB2E5536218BA161003A1B7C /* DWVersionManager.m */; }; @@ -1961,6 +1963,8 @@ isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( + FB1BF8C822C7FBD0003413C6 /* DWAmountInputValidator.m in Sources */, + FB1BF8C922C7FBD4003413C6 /* DWAmountObject.m in Sources */, 2A2120EC22145CAE009906DC /* DWAmountInputValidatorTests.m in Sources */, 75D5F3F3191EC270004AB296 /* DashWalletTests.m in Sources */, 2AAEF5432217EDDB000FC092 /* DWAmountObjectTests.m in Sources */, From a247f666411018ade2a504fac34eabba51601a5c Mon Sep 17 00:00:00 2001 From: Quantum Explorer Date: Mon, 26 Aug 2019 19:43:11 +0800 Subject: [PATCH 09/34] strings --- DashSyncCurrentCommit | 2 +- DashWallet/ar.lproj/Localizable.strings | 12 +++---- DashWallet/bg.lproj/Localizable.strings | 6 ++-- DashWallet/de.lproj/Localizable.strings | 6 ++-- DashWallet/el.lproj/Localizable.strings | 32 ++++--------------- DashWallet/en.lproj/Localizable.strings | 12 +++---- DashWallet/es.lproj/Localizable.strings | 6 ++-- DashWallet/fr.lproj/Localizable.strings | 6 ++-- DashWallet/id.lproj/Localizable.strings | 6 ++-- DashWallet/it.lproj/Localizable.strings | 6 ++-- DashWallet/ja.lproj/Localizable.strings | 6 ++-- DashWallet/ko.lproj/Localizable.strings | 7 ++-- DashWallet/nb.lproj/Localizable.strings | 14 ++++---- DashWallet/nl.lproj/Localizable.strings | 6 ++-- DashWallet/pl.lproj/Localizable.strings | 6 ++-- DashWallet/pt.lproj/Localizable.strings | 6 ++-- DashWallet/ru.lproj/Localizable.strings | 6 ++-- DashWallet/sk.lproj/Localizable.strings | 15 +++++++++ DashWallet/sq.lproj/Localizable.strings | 14 ++++---- DashWallet/sv.lproj/Localizable.strings | 14 ++++---- DashWallet/th.lproj/Localizable.strings | 13 ++++---- DashWallet/tr.lproj/Localizable.strings | 6 ++-- DashWallet/vi.lproj/Localizable.strings | 6 ++-- DashWallet/zh-Hans.lproj/Localizable.strings | 13 ++++---- .../zh-Hant-TW.lproj/Localizable.strings | 13 ++++---- 25 files changed, 112 insertions(+), 127 deletions(-) diff --git a/DashSyncCurrentCommit b/DashSyncCurrentCommit index 176821bd5..22cf1bb4d 100644 --- a/DashSyncCurrentCommit +++ b/DashSyncCurrentCommit @@ -1 +1 @@ -510ab61218865ed5f5ea888d0ec7e8cae8b5d837 +f159ba1bbebd2263c57e4d2b316391247ea175e2 diff --git a/DashWallet/ar.lproj/Localizable.strings b/DashWallet/ar.lproj/Localizable.strings index a66ad55a5..a2f096cc6 100644 --- a/DashWallet/ar.lproj/Localizable.strings +++ b/DashWallet/ar.lproj/Localizable.strings @@ -330,8 +330,6 @@ "locked with InstantSend" = "locked with InstantSend"; /* No comment provided by engineer. */ -"Masternode control" = "Masternode control"; - "Log Out" = "Log Out"; /* No comment provided by engineer. */ @@ -592,6 +590,9 @@ /* No comment provided by engineer. */ "show" = "عرض"; +/* No comment provided by engineer. */ +"Show masternode keys" = "Show masternode keys"; + /* No comment provided by engineer. */ "show phrase" = "إظهار الجملة"; @@ -719,14 +720,13 @@ "Unverified" = "Unverified"; /* No comment provided by engineer. */ -<<<<<<< HEAD -"Used" = "Used"; -======= "Uphold" = "Uphold"; /* No comment provided by engineer. */ "Uphold account" = "Uphold account"; ->>>>>>> master + +/* No comment provided by engineer. */ +"Used" = "Used"; /* No comment provided by engineer. */ "User Registration Transaction" = "User Registration Transaction"; diff --git a/DashWallet/bg.lproj/Localizable.strings b/DashWallet/bg.lproj/Localizable.strings index ec17002b1..aa1a0ca8c 100644 --- a/DashWallet/bg.lproj/Localizable.strings +++ b/DashWallet/bg.lproj/Localizable.strings @@ -329,9 +329,6 @@ /* No comment provided by engineer. */ "locked with InstantSend" = "заключена с InstantSend"; -/* No comment provided by engineer. */ -"Masternode control" = "Masternode control"; - /* No comment provided by engineer. */ "Log Out" = "Излез от профила"; @@ -593,6 +590,9 @@ /* No comment provided by engineer. */ "show" = "покажи"; +/* No comment provided by engineer. */ +"Show masternode keys" = "Show masternode keys"; + /* No comment provided by engineer. */ "show phrase" = "покажи фраза"; diff --git a/DashWallet/de.lproj/Localizable.strings b/DashWallet/de.lproj/Localizable.strings index a83d198b1..173bcb5a0 100644 --- a/DashWallet/de.lproj/Localizable.strings +++ b/DashWallet/de.lproj/Localizable.strings @@ -329,9 +329,6 @@ /* No comment provided by engineer. */ "locked with InstantSend" = "Mit InstantSend abgesichert"; -/* No comment provided by engineer. */ -"Masternode control" = "Masternode control"; - /* No comment provided by engineer. */ "Log Out" = "Abmelden"; @@ -593,6 +590,9 @@ /* No comment provided by engineer. */ "show" = "anzeigen"; +/* No comment provided by engineer. */ +"Show masternode keys" = "Show masternode keys"; + /* No comment provided by engineer. */ "show phrase" = "Wiederherstellungs-Wortfolge anzeigen"; diff --git a/DashWallet/el.lproj/Localizable.strings b/DashWallet/el.lproj/Localizable.strings index b00dd4782..6c7ad8b5d 100644 --- a/DashWallet/el.lproj/Localizable.strings +++ b/DashWallet/el.lproj/Localizable.strings @@ -335,15 +335,8 @@ /* No comment provided by engineer. */ "Log out from Uphold" = "Log out from Uphold"; -/* No comment provided by engineer. */ -<<<<<<< HEAD -"Masternode control" = "Masternode control"; - /* No comment provided by engineer. */ "masternode holding address" = "masternode holding address"; -======= -"masternode holding address" = "διεύθυνση κατοχής masternode"; ->>>>>>> master /* No comment provided by engineer. */ "Masternode Registration Transaction" = "Συναλλαγή εγγραφής Masternode"; @@ -364,14 +357,10 @@ "Moved" = "Μετακινήθηκε"; /* No comment provided by engineer. */ -<<<<<<< HEAD "My Masternodes" = "My Masternodes"; /* No comment provided by engineer. */ "Network" = "Network"; -======= -"Network" = "Δίκτυο"; ->>>>>>> master /* No comment provided by engineer. */ "NEVER type your recovery phrase into password managers or elsewhere. Other devices may be infected." = "ΠΟΤΕ ΜΗΝ πληκτρολογείτε τη φράση ανάκτησης σας σε εφαρμογές διαχείρισης κωδικών ή αλλού. Άλλες συσκευές ενδέχεται να έχουν μολυνθεί."; @@ -416,14 +405,10 @@ "not owner" = "δεν είναι κάτοχος"; /* No comment provided by engineer. */ -<<<<<<< HEAD "Not used" = "Not used"; /* No comment provided by engineer. */ "not voter" = "not voter"; -======= -"not voter" = "δεν είναι ψηφοφόρος"; ->>>>>>> master /* No comment provided by engineer. */ "OK" = "OK"; @@ -606,11 +591,10 @@ "show" = "εμφάνιση"; /* No comment provided by engineer. */ -<<<<<<< HEAD -"show phrase" = "εμφάνιση φράσης"; -======= "Show masternode keys" = "Δείξε τα κλειδιά του Masternode"; ->>>>>>> master + +/* No comment provided by engineer. */ +"show phrase" = "εμφάνιση φράσης"; /* No comment provided by engineer. */ "Sign Message" = "Sign Message"; @@ -739,17 +723,13 @@ "Uphold" = "Uphold"; /* No comment provided by engineer. */ -<<<<<<< HEAD -"Used" = "Used"; +"Uphold account" = "Uphold account"; /* No comment provided by engineer. */ -"User Registration Transaction" = "User Registration Transaction"; -======= -"Uphold account" = "Uphold account"; ->>>>>>> master +"Used" = "Used"; /* No comment provided by engineer. */ -"User Registration Transaction" = "Συναλλαγή εγγραφής Χρήστη"; +"User Registration Transaction" = "User Registration Transaction"; /* No comment provided by engineer. */ "User Reset Transaction" = "Συναλλαγή επαναφοράς του Χρήστη"; diff --git a/DashWallet/en.lproj/Localizable.strings b/DashWallet/en.lproj/Localizable.strings index a8d8cf31c..7e87fb8a5 100644 --- a/DashWallet/en.lproj/Localizable.strings +++ b/DashWallet/en.lproj/Localizable.strings @@ -329,9 +329,6 @@ /* No comment provided by engineer. */ "locked with InstantSend" = "locked with InstantSend"; -/* No comment provided by engineer. */ -"Masternode control" = "Masternode control"; - /* No comment provided by engineer. */ "Log Out" = "Log Out"; @@ -593,6 +590,9 @@ /* No comment provided by engineer. */ "show" = "show"; +/* No comment provided by engineer. */ +"Show masternode keys" = "Show masternode keys"; + /* No comment provided by engineer. */ "show phrase" = "show phrase"; @@ -719,15 +719,15 @@ /* No comment provided by engineer. */ "Unverified" = "Unverified"; -/* No comment provided by engineer. */ -"Used" = "Used"; - /* No comment provided by engineer. */ "Uphold" = "Uphold"; /* No comment provided by engineer. */ "Uphold account" = "Uphold account"; +/* No comment provided by engineer. */ +"Used" = "Used"; + /* No comment provided by engineer. */ "User Registration Transaction" = "User Registration Transaction"; diff --git a/DashWallet/es.lproj/Localizable.strings b/DashWallet/es.lproj/Localizable.strings index ec5ac9110..25eecbd63 100644 --- a/DashWallet/es.lproj/Localizable.strings +++ b/DashWallet/es.lproj/Localizable.strings @@ -329,9 +329,6 @@ /* No comment provided by engineer. */ "locked with InstantSend" = "bloquear con InstantSend"; -/* No comment provided by engineer. */ -"Masternode control" = "Masternode control"; - /* No comment provided by engineer. */ "Log Out" = "Cerrar sesión"; @@ -593,6 +590,9 @@ /* No comment provided by engineer. */ "show" = "mostrar"; +/* No comment provided by engineer. */ +"Show masternode keys" = "Show masternode keys"; + /* No comment provided by engineer. */ "show phrase" = "mostrar frase"; diff --git a/DashWallet/fr.lproj/Localizable.strings b/DashWallet/fr.lproj/Localizable.strings index 47533c638..8b87d5d5c 100644 --- a/DashWallet/fr.lproj/Localizable.strings +++ b/DashWallet/fr.lproj/Localizable.strings @@ -329,9 +329,6 @@ /* No comment provided by engineer. */ "locked with InstantSend" = "verrouillé avec InstantSend"; -/* No comment provided by engineer. */ -"Masternode control" = "Masternode control"; - /* No comment provided by engineer. */ "Log Out" = "Se déconnecter"; @@ -593,6 +590,9 @@ /* No comment provided by engineer. */ "show" = "montrer"; +/* No comment provided by engineer. */ +"Show masternode keys" = "Show masternode keys"; + /* No comment provided by engineer. */ "show phrase" = "montrer la phrase"; diff --git a/DashWallet/id.lproj/Localizable.strings b/DashWallet/id.lproj/Localizable.strings index 53646a38c..a457af9f0 100644 --- a/DashWallet/id.lproj/Localizable.strings +++ b/DashWallet/id.lproj/Localizable.strings @@ -329,9 +329,6 @@ /* No comment provided by engineer. */ "locked with InstantSend" = "dikunci dengan InstantSend"; -/* No comment provided by engineer. */ -"Masternode control" = "Masternode control"; - /* No comment provided by engineer. */ "Log Out" = "Keluar"; @@ -593,6 +590,9 @@ /* No comment provided by engineer. */ "show" = "tunjukkan"; +/* No comment provided by engineer. */ +"Show masternode keys" = "Show masternode keys"; + /* No comment provided by engineer. */ "show phrase" = "tunjukkan frasa"; diff --git a/DashWallet/it.lproj/Localizable.strings b/DashWallet/it.lproj/Localizable.strings index 590e377f1..6e458047b 100644 --- a/DashWallet/it.lproj/Localizable.strings +++ b/DashWallet/it.lproj/Localizable.strings @@ -329,9 +329,6 @@ /* No comment provided by engineer. */ "locked with InstantSend" = "bloccato con InstantSend"; -/* No comment provided by engineer. */ -"Masternode control" = "Masternode control"; - /* No comment provided by engineer. */ "Log Out" = "Esci"; @@ -593,6 +590,9 @@ /* No comment provided by engineer. */ "show" = "mostra"; +/* No comment provided by engineer. */ +"Show masternode keys" = "Show masternode keys"; + /* No comment provided by engineer. */ "show phrase" = "mostra frase"; diff --git a/DashWallet/ja.lproj/Localizable.strings b/DashWallet/ja.lproj/Localizable.strings index 7ebc96211..7e0f92519 100644 --- a/DashWallet/ja.lproj/Localizable.strings +++ b/DashWallet/ja.lproj/Localizable.strings @@ -329,9 +329,6 @@ /* No comment provided by engineer. */ "locked with InstantSend" = "即時送金[インスタントセンド]でロック済み"; -/* No comment provided by engineer. */ -"Masternode control" = "Masternode control"; - /* No comment provided by engineer. */ "Log Out" = "ログアウトする"; @@ -593,6 +590,9 @@ /* No comment provided by engineer. */ "show" = "表示"; +/* No comment provided by engineer. */ +"Show masternode keys" = "Show masternode keys"; + /* No comment provided by engineer. */ "show phrase" = "フレーズを表示"; diff --git a/DashWallet/ko.lproj/Localizable.strings b/DashWallet/ko.lproj/Localizable.strings index 4b3aa0c53..e5c1e666f 100644 --- a/DashWallet/ko.lproj/Localizable.strings +++ b/DashWallet/ko.lproj/Localizable.strings @@ -329,15 +329,11 @@ /* No comment provided by engineer. */ "locked with InstantSend" = "인스턴트샌드로 잠김"; -/* No comment provided by engineer. */ -"Masternode control" = "Masternode control"; - /* No comment provided by engineer. */ "Log Out" = "로그아웃"; /* No comment provided by engineer. */ "Log out from Uphold" = "업홀드에서 로그아웃"; ->>>>>>> master /* No comment provided by engineer. */ "masternode holding address" = "마스터노드 보유 주소"; @@ -594,6 +590,9 @@ /* No comment provided by engineer. */ "show" = "보기"; +/* No comment provided by engineer. */ +"Show masternode keys" = "Show masternode keys"; + /* No comment provided by engineer. */ "show phrase" = "문구 보기"; diff --git a/DashWallet/nb.lproj/Localizable.strings b/DashWallet/nb.lproj/Localizable.strings index 8c19eae70..b9b17a8d4 100644 --- a/DashWallet/nb.lproj/Localizable.strings +++ b/DashWallet/nb.lproj/Localizable.strings @@ -330,14 +330,10 @@ "locked with InstantSend" = "locked with InstantSend"; /* No comment provided by engineer. */ -<<<<<<< HEAD -"Masternode control" = "Masternode control"; -======= "Log Out" = "Log Out"; /* No comment provided by engineer. */ "Log out from Uphold" = "Log out from Uphold"; ->>>>>>> master /* No comment provided by engineer. */ "masternode holding address" = "masternode holding address"; @@ -594,6 +590,9 @@ /* No comment provided by engineer. */ "show" = "vis"; +/* No comment provided by engineer. */ +"Show masternode keys" = "Show masternode keys"; + /* No comment provided by engineer. */ "show phrase" = "vis frase"; @@ -721,14 +720,13 @@ "Unverified" = "Unverified"; /* No comment provided by engineer. */ -<<<<<<< HEAD -"Used" = "Used"; -======= "Uphold" = "Uphold"; /* No comment provided by engineer. */ "Uphold account" = "Uphold account"; ->>>>>>> master + +/* No comment provided by engineer. */ +"Used" = "Used"; /* No comment provided by engineer. */ "User Registration Transaction" = "User Registration Transaction"; diff --git a/DashWallet/nl.lproj/Localizable.strings b/DashWallet/nl.lproj/Localizable.strings index 8d6400b8f..c8eeb594d 100644 --- a/DashWallet/nl.lproj/Localizable.strings +++ b/DashWallet/nl.lproj/Localizable.strings @@ -329,9 +329,6 @@ /* No comment provided by engineer. */ "locked with InstantSend" = "vergrendeld met InstantSend"; -/* No comment provided by engineer. */ -"Masternode control" = "Masternode control"; - /* No comment provided by engineer. */ "Log Out" = "Uitloggen"; @@ -593,6 +590,9 @@ /* No comment provided by engineer. */ "show" = "toon"; +/* No comment provided by engineer. */ +"Show masternode keys" = "Show masternode keys"; + /* No comment provided by engineer. */ "show phrase" = "toon zin"; diff --git a/DashWallet/pl.lproj/Localizable.strings b/DashWallet/pl.lproj/Localizable.strings index 5f15d9df3..33cb9a902 100644 --- a/DashWallet/pl.lproj/Localizable.strings +++ b/DashWallet/pl.lproj/Localizable.strings @@ -329,9 +329,6 @@ /* No comment provided by engineer. */ "locked with InstantSend" = "zablokowane z InstantSend"; -/* No comment provided by engineer. */ -"Masternode control" = "Masternode control"; - /* No comment provided by engineer. */ "Log Out" = "Wyloguj"; @@ -593,6 +590,9 @@ /* No comment provided by engineer. */ "show" = "pokaż"; +/* No comment provided by engineer. */ +"Show masternode keys" = "Show masternode keys"; + /* No comment provided by engineer. */ "show phrase" = "pokaż frazę"; diff --git a/DashWallet/pt.lproj/Localizable.strings b/DashWallet/pt.lproj/Localizable.strings index afe82de1f..1045a0051 100644 --- a/DashWallet/pt.lproj/Localizable.strings +++ b/DashWallet/pt.lproj/Localizable.strings @@ -329,9 +329,6 @@ /* No comment provided by engineer. */ "locked with InstantSend" = "reservado para EnvioInstantâneo"; -/* No comment provided by engineer. */ -"Masternode control" = "Masternode control"; - /* No comment provided by engineer. */ "Log Out" = "Sair"; @@ -593,6 +590,9 @@ /* No comment provided by engineer. */ "show" = "mostrar"; +/* No comment provided by engineer. */ +"Show masternode keys" = "Show masternode keys"; + /* No comment provided by engineer. */ "show phrase" = "mostrar a frase"; diff --git a/DashWallet/ru.lproj/Localizable.strings b/DashWallet/ru.lproj/Localizable.strings index 2859853c9..622f317d3 100644 --- a/DashWallet/ru.lproj/Localizable.strings +++ b/DashWallet/ru.lproj/Localizable.strings @@ -329,9 +329,6 @@ /* No comment provided by engineer. */ "locked with InstantSend" = "зафиксировано InstantSend"; -/* No comment provided by engineer. */ -"Masternode control" = "Masternode control"; - /* No comment provided by engineer. */ "Log Out" = "Выйти"; @@ -593,6 +590,9 @@ /* No comment provided by engineer. */ "show" = "Показать"; +/* No comment provided by engineer. */ +"Show masternode keys" = "Show masternode keys"; + /* No comment provided by engineer. */ "show phrase" = "Показать фразу"; diff --git a/DashWallet/sk.lproj/Localizable.strings b/DashWallet/sk.lproj/Localizable.strings index 695352d3b..0beff3d0f 100644 --- a/DashWallet/sk.lproj/Localizable.strings +++ b/DashWallet/sk.lproj/Localizable.strings @@ -347,12 +347,18 @@ /* No comment provided by engineer. */ "Masternode Update Service Transaction" = "Servisná transakcia aktualizácie Masternódu"; +/* No comment provided by engineer. */ +"Masternodes" = "Masternodes"; + /* No comment provided by engineer. */ "more..." = "viac..."; /* No comment provided by engineer. */ "Moved" = "Presunuté"; +/* No comment provided by engineer. */ +"My Masternodes" = "My Masternodes"; + /* No comment provided by engineer. */ "Network" = "Sieť"; @@ -398,6 +404,9 @@ /* No comment provided by engineer. */ "not owner" = "nie je vlastník"; +/* No comment provided by engineer. */ +"Not used" = "Not used"; + /* No comment provided by engineer. */ "not voter" = "nehlasuje"; @@ -587,6 +596,9 @@ /* No comment provided by engineer. */ "show phrase" = "ukázať frázu"; +/* No comment provided by engineer. */ +"Sign Message" = "Sign Message"; + /* No comment provided by engineer. */ "size:" = "veľkosť:"; @@ -713,6 +725,9 @@ /* No comment provided by engineer. */ "Uphold account" = "Účet na Upholde"; +/* No comment provided by engineer. */ +"Used" = "Used"; + /* No comment provided by engineer. */ "User Registration Transaction" = "Používateľove registračné transakcie"; diff --git a/DashWallet/sq.lproj/Localizable.strings b/DashWallet/sq.lproj/Localizable.strings index a8cf8fd2c..a69ac41ba 100644 --- a/DashWallet/sq.lproj/Localizable.strings +++ b/DashWallet/sq.lproj/Localizable.strings @@ -330,14 +330,10 @@ "locked with InstantSend" = "locked with InstantSend"; /* No comment provided by engineer. */ -<<<<<<< HEAD -"Masternode control" = "Masternode control"; -======= "Log Out" = "Log Out"; /* No comment provided by engineer. */ "Log out from Uphold" = "Log out from Uphold"; ->>>>>>> master /* No comment provided by engineer. */ "masternode holding address" = "masternode holding address"; @@ -594,6 +590,9 @@ /* No comment provided by engineer. */ "show" = "shfaq"; +/* No comment provided by engineer. */ +"Show masternode keys" = "Show masternode keys"; + /* No comment provided by engineer. */ "show phrase" = "shfaq frazën"; @@ -721,14 +720,13 @@ "Unverified" = "Unverified"; /* No comment provided by engineer. */ -<<<<<<< HEAD -"Used" = "Used"; -======= "Uphold" = "Uphold"; /* No comment provided by engineer. */ "Uphold account" = "Uphold account"; ->>>>>>> master + +/* No comment provided by engineer. */ +"Used" = "Used"; /* No comment provided by engineer. */ "User Registration Transaction" = "User Registration Transaction"; diff --git a/DashWallet/sv.lproj/Localizable.strings b/DashWallet/sv.lproj/Localizable.strings index e381ac41a..29caaba77 100644 --- a/DashWallet/sv.lproj/Localizable.strings +++ b/DashWallet/sv.lproj/Localizable.strings @@ -330,14 +330,10 @@ "locked with InstantSend" = "locked with InstantSend"; /* No comment provided by engineer. */ -<<<<<<< HEAD -"Masternode control" = "Masternode control"; -======= "Log Out" = "Log Out"; /* No comment provided by engineer. */ "Log out from Uphold" = "Log out from Uphold"; ->>>>>>> master /* No comment provided by engineer. */ "masternode holding address" = "masternode holding address"; @@ -594,6 +590,9 @@ /* No comment provided by engineer. */ "show" = "visa"; +/* No comment provided by engineer. */ +"Show masternode keys" = "Show masternode keys"; + /* No comment provided by engineer. */ "show phrase" = "visa fras"; @@ -721,14 +720,13 @@ "Unverified" = "Unverified"; /* No comment provided by engineer. */ -<<<<<<< HEAD -"Used" = "Used"; -======= "Uphold" = "Uphold"; /* No comment provided by engineer. */ "Uphold account" = "Uphold account"; ->>>>>>> master + +/* No comment provided by engineer. */ +"Used" = "Used"; /* No comment provided by engineer. */ "User Registration Transaction" = "User Registration Transaction"; diff --git a/DashWallet/th.lproj/Localizable.strings b/DashWallet/th.lproj/Localizable.strings index 6d419eeea..2c53e6949 100644 --- a/DashWallet/th.lproj/Localizable.strings +++ b/DashWallet/th.lproj/Localizable.strings @@ -329,9 +329,6 @@ /* No comment provided by engineer. */ "locked with InstantSend" = "ล็อคด้วย InstantSend"; -/* No comment provided by engineer. */ -"Masternode control" = "Masternode control"; - /* No comment provided by engineer. */ "Log Out" = "ออกจากระบบ"; @@ -593,6 +590,9 @@ /* No comment provided by engineer. */ "show" = "แสดง"; +/* No comment provided by engineer. */ +"Show masternode keys" = "Show masternode keys"; + /* No comment provided by engineer. */ "show phrase" = "แสดงวลี"; @@ -720,14 +720,13 @@ "Unverified" = "Unverified"; /* No comment provided by engineer. */ -<<<<<<< HEAD -"Used" = "Used"; -======= "Uphold" = "Uphold"; /* No comment provided by engineer. */ "Uphold account" = "บัญชี Uphold"; ->>>>>>> master + +/* No comment provided by engineer. */ +"Used" = "Used"; /* No comment provided by engineer. */ "User Registration Transaction" = "ธุรกรรมการลงทะเบียนผู้ใช้"; diff --git a/DashWallet/tr.lproj/Localizable.strings b/DashWallet/tr.lproj/Localizable.strings index ebf2ad540..a5e88b7e2 100644 --- a/DashWallet/tr.lproj/Localizable.strings +++ b/DashWallet/tr.lproj/Localizable.strings @@ -329,9 +329,6 @@ /* No comment provided by engineer. */ "locked with InstantSend" = "AnındaGönder ile kilitli"; -/* No comment provided by engineer. */ -"Masternode control" = "Masternode control"; - /* No comment provided by engineer. */ "Log Out" = "Çıkış Yap"; @@ -593,6 +590,9 @@ /* No comment provided by engineer. */ "show" = "göster"; +/* No comment provided by engineer. */ +"Show masternode keys" = "Show masternode keys"; + /* No comment provided by engineer. */ "show phrase" = "metni göster"; diff --git a/DashWallet/vi.lproj/Localizable.strings b/DashWallet/vi.lproj/Localizable.strings index 260a5d8f1..fb3ae35b6 100644 --- a/DashWallet/vi.lproj/Localizable.strings +++ b/DashWallet/vi.lproj/Localizable.strings @@ -329,9 +329,6 @@ /* No comment provided by engineer. */ "locked with InstantSend" = "Đã được khoá với InstantSend"; -/* No comment provided by engineer. */ -"Masternode control" = "Masternode control"; - /* No comment provided by engineer. */ "Log Out" = "Đăng xuất"; @@ -593,6 +590,9 @@ /* No comment provided by engineer. */ "show" = "hiển thị"; +/* No comment provided by engineer. */ +"Show masternode keys" = "Show masternode keys"; + /* No comment provided by engineer. */ "show phrase" = "hiển thị cụm từ"; diff --git a/DashWallet/zh-Hans.lproj/Localizable.strings b/DashWallet/zh-Hans.lproj/Localizable.strings index 23a775a37..2c9ca6ceb 100644 --- a/DashWallet/zh-Hans.lproj/Localizable.strings +++ b/DashWallet/zh-Hans.lproj/Localizable.strings @@ -329,9 +329,6 @@ /* No comment provided by engineer. */ "locked with InstantSend" = "locked with InstantSend"; -/* No comment provided by engineer. */ -"Masternode control" = "Masternode control"; - /* No comment provided by engineer. */ "Log Out" = "Log Out"; @@ -593,6 +590,9 @@ /* No comment provided by engineer. */ "show" = "显示"; +/* No comment provided by engineer. */ +"Show masternode keys" = "Show masternode keys"; + /* No comment provided by engineer. */ "show phrase" = "显示密语"; @@ -720,14 +720,13 @@ "Unverified" = "Unverified"; /* No comment provided by engineer. */ -<<<<<<< HEAD -"Used" = "Used"; -======= "Uphold" = "Uphold"; /* No comment provided by engineer. */ "Uphold account" = "Uphold account"; ->>>>>>> master + +/* No comment provided by engineer. */ +"Used" = "Used"; /* No comment provided by engineer. */ "User Registration Transaction" = "User Registration Transaction"; diff --git a/DashWallet/zh-Hant-TW.lproj/Localizable.strings b/DashWallet/zh-Hant-TW.lproj/Localizable.strings index cd0347164..565364c9f 100644 --- a/DashWallet/zh-Hant-TW.lproj/Localizable.strings +++ b/DashWallet/zh-Hant-TW.lproj/Localizable.strings @@ -329,9 +329,6 @@ /* No comment provided by engineer. */ "locked with InstantSend" = "locked with InstantSend"; -/* No comment provided by engineer. */ -"Masternode control" = "Masternode control"; - /* No comment provided by engineer. */ "Log Out" = "Log Out"; @@ -593,6 +590,9 @@ /* No comment provided by engineer. */ "show" = "顯示"; +/* No comment provided by engineer. */ +"Show masternode keys" = "Show masternode keys"; + /* No comment provided by engineer. */ "show phrase" = "顯示詞組"; @@ -720,14 +720,13 @@ "Unverified" = "Unverified"; /* No comment provided by engineer. */ -<<<<<<< HEAD -"Used" = "Used"; -======= "Uphold" = "Uphold"; /* No comment provided by engineer. */ "Uphold account" = "Uphold account"; ->>>>>>> master + +/* No comment provided by engineer. */ +"Used" = "Used"; /* No comment provided by engineer. */ "User Registration Transaction" = "User Registration Transaction"; From d06337ff1f55e0c5fd35ee7a50564f891cdda7b8 Mon Sep 17 00:00:00 2001 From: Quantum Explorer Date: Sun, 27 Oct 2019 19:56:53 +0700 Subject: [PATCH 10/34] cleanup --- DashWallet.xcodeproj/project.pbxproj | 37 +- .../DWBaseMasternodeViewController.h | 33 - .../DWBaseMasternodeViewController.m | 160 -- .../DWDerivationPathKeysViewController.m | 172 -- .../DWKeysOverviewViewController.m | 99 - .../DWMasternodeDetailViewController.h | 23 - .../DWMasternodeDetailViewController.m | 172 -- .../DWMasternodeRootViewController.h | 28 - .../DWMasternodeRootViewController.m | 55 - .../DWMasternodeViewController.h | 14 - .../DWMasternodeViewController.m | 107 -- ...pdateRegistrarTransactionsViewController.h | 21 - ...pdateRegistrarTransactionsViewController.m | 97 - ...rUpdateServiceTransactionsViewController.h | 21 - ...rUpdateServiceTransactionsViewController.m | 103 - .../DWReclaimMasternodeViewController.h | 21 - .../DWReclaimMasternodeViewController.m | 88 - .../DWRegisterMasternodeViewController.h | 20 - .../DWRegisterMasternodeViewController.m | 212 --- .../DWResultsMasternodeViewController.h | 26 - .../DWResultsMasternodeViewController.m | 26 - .../DWSignMessageViewController.h | 28 - .../DWSignMessageViewController.m | 54 - .../DWSignPayloadViewController.h | 30 - .../DWSignPayloadViewController.m | 78 - ...WUpdateMasternodeRegistrarViewController.h | 20 - ...WUpdateMasternodeRegistrarViewController.m | 101 - ...UpdateMasternodeRevocationViewController.h | 17 - ...UpdateMasternodeRevocationViewController.m | 27 - .../DWUpdateMasternodeServiceViewController.h | 21 - .../DWUpdateMasternodeServiceViewController.m | 107 -- .../Masternode Keys/Masternode.storyboard | 1673 ----------------- .../Settings/DWSettingsViewController.m | 4 +- .../UI/Menu/Tools/DWToolsMenuViewController.m | 19 + DashWallet/ar.lproj/Localizable.strings | 21 +- DashWallet/bg.lproj/Localizable.strings | 21 +- DashWallet/de.lproj/Localizable.strings | 21 +- DashWallet/el.lproj/Localizable.strings | 21 +- DashWallet/en.lproj/Localizable.strings | 21 +- DashWallet/es.lproj/Localizable.strings | 21 +- DashWallet/fr.lproj/Localizable.strings | 21 +- DashWallet/id.lproj/Localizable.strings | 21 +- DashWallet/it.lproj/Localizable.strings | 21 +- DashWallet/ja.lproj/Localizable.strings | 21 +- DashWallet/ko.lproj/Localizable.strings | 21 +- DashWallet/nb.lproj/Localizable.strings | 21 +- DashWallet/nl.lproj/Localizable.strings | 21 +- DashWallet/pl.lproj/Localizable.strings | 21 +- DashWallet/pt.lproj/Localizable.strings | 21 +- DashWallet/ru.lproj/Localizable.strings | 21 +- DashWallet/sk.lproj/Localizable.strings | 21 +- DashWallet/sq.lproj/Localizable.strings | 21 +- DashWallet/sv.lproj/Localizable.strings | 21 +- DashWallet/th.lproj/Localizable.strings | 21 +- DashWallet/tr.lproj/Localizable.strings | 21 +- DashWallet/vi.lproj/Localizable.strings | 21 +- DashWallet/zh-Hans.lproj/Localizable.strings | 21 +- .../zh-Hant-TW.lproj/Localizable.strings | 21 +- 58 files changed, 468 insertions(+), 3750 deletions(-) delete mode 100644 DashWallet/Masternode Keys/DWBaseMasternodeViewController.h delete mode 100644 DashWallet/Masternode Keys/DWBaseMasternodeViewController.m delete mode 100644 DashWallet/Masternode Keys/DWDerivationPathKeysViewController.m delete mode 100644 DashWallet/Masternode Keys/DWKeysOverviewViewController.m delete mode 100644 DashWallet/Masternode Keys/DWMasternodeDetailViewController.h delete mode 100644 DashWallet/Masternode Keys/DWMasternodeDetailViewController.m delete mode 100644 DashWallet/Masternode Keys/DWMasternodeRootViewController.h delete mode 100644 DashWallet/Masternode Keys/DWMasternodeRootViewController.m delete mode 100644 DashWallet/Masternode Keys/DWMasternodeViewController.h delete mode 100644 DashWallet/Masternode Keys/DWMasternodeViewController.m delete mode 100644 DashWallet/Masternode Keys/DWProviderUpdateRegistrarTransactionsViewController.h delete mode 100644 DashWallet/Masternode Keys/DWProviderUpdateRegistrarTransactionsViewController.m delete mode 100644 DashWallet/Masternode Keys/DWProviderUpdateServiceTransactionsViewController.h delete mode 100644 DashWallet/Masternode Keys/DWProviderUpdateServiceTransactionsViewController.m delete mode 100644 DashWallet/Masternode Keys/DWReclaimMasternodeViewController.h delete mode 100644 DashWallet/Masternode Keys/DWReclaimMasternodeViewController.m delete mode 100644 DashWallet/Masternode Keys/DWRegisterMasternodeViewController.h delete mode 100644 DashWallet/Masternode Keys/DWRegisterMasternodeViewController.m delete mode 100644 DashWallet/Masternode Keys/DWResultsMasternodeViewController.h delete mode 100644 DashWallet/Masternode Keys/DWResultsMasternodeViewController.m delete mode 100644 DashWallet/Masternode Keys/DWSignMessageViewController.h delete mode 100644 DashWallet/Masternode Keys/DWSignMessageViewController.m delete mode 100644 DashWallet/Masternode Keys/DWSignPayloadViewController.h delete mode 100644 DashWallet/Masternode Keys/DWSignPayloadViewController.m delete mode 100644 DashWallet/Masternode Keys/DWUpdateMasternodeRegistrarViewController.h delete mode 100644 DashWallet/Masternode Keys/DWUpdateMasternodeRegistrarViewController.m delete mode 100644 DashWallet/Masternode Keys/DWUpdateMasternodeRevocationViewController.h delete mode 100644 DashWallet/Masternode Keys/DWUpdateMasternodeRevocationViewController.m delete mode 100644 DashWallet/Masternode Keys/DWUpdateMasternodeServiceViewController.h delete mode 100644 DashWallet/Masternode Keys/DWUpdateMasternodeServiceViewController.m delete mode 100644 DashWallet/Masternode Keys/Masternode.storyboard diff --git a/DashWallet.xcodeproj/project.pbxproj b/DashWallet.xcodeproj/project.pbxproj index f6410837d..f678f31dc 100644 --- a/DashWallet.xcodeproj/project.pbxproj +++ b/DashWallet.xcodeproj/project.pbxproj @@ -298,9 +298,6 @@ 2ACD53EB234BCFAA00650AD3 /* DWWeakContainer.m in Sources */ = {isa = PBXBuildFile; fileRef = 2ACD53EA234BCFAA00650AD3 /* DWWeakContainer.m */; }; 2ACD53EE234C9D8E00650AD3 /* UIView+DWRecursiveSubview.m in Sources */ = {isa = PBXBuildFile; fileRef = 2ACD53ED234C9D8E00650AD3 /* UIView+DWRecursiveSubview.m */; }; 2ACE88B42265DA1600ED24B5 /* DWCrashReporter.m in Sources */ = {isa = PBXBuildFile; fileRef = 2ACE88B32265DA1600ED24B5 /* DWCrashReporter.m */; }; - 2AE125F8224113C600379C6F /* DWBaseMasternodeViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 2AE125F7224113C600379C6F /* DWBaseMasternodeViewController.m */; }; - 2AE125FD2241151B00379C6F /* DWMasternodeTableViewCell.xib in Resources */ = {isa = PBXBuildFile; fileRef = 2AE125FB2241151B00379C6F /* DWMasternodeTableViewCell.xib */; }; - 2AE126002241342900379C6F /* DWResultsMasternodeViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 2AE125FF2241342900379C6F /* DWResultsMasternodeViewController.m */; }; 2AD1CE6022D8E9D900C99324 /* DWSeedPhraseView.m in Sources */ = {isa = PBXBuildFile; fileRef = 2AD1CE5F22D8E9D900C99324 /* DWSeedPhraseView.m */; }; 2AD1CE6422D9127600C99324 /* DWSeedWordModel.m in Sources */ = {isa = PBXBuildFile; fileRef = 2AD1CE6322D9127600C99324 /* DWSeedWordModel.m */; }; 2AD1CE6E22DA357D00C99324 /* DWBaseViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 2AD1CE6D22DA357D00C99324 /* DWBaseViewController.m */; }; @@ -324,6 +321,9 @@ 2ADF83FA23632D1C008459A7 /* BRBubbleView.m in Sources */ = {isa = PBXBuildFile; fileRef = 759816E619357D6F005060EA /* BRBubbleView.m */; }; 2ADF83FF23633116008459A7 /* SharedAssets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 2ADF83FE23633116008459A7 /* SharedAssets.xcassets */; }; 2ADF840023633121008459A7 /* SharedAssets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 2ADF83FE23633116008459A7 /* SharedAssets.xcassets */; }; + 2AE125F8224113C600379C6F /* DWBaseMasternodeViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 2AE125F7224113C600379C6F /* DWBaseMasternodeViewController.m */; }; + 2AE125FD2241151B00379C6F /* DWMasternodeTableViewCell.xib in Resources */ = {isa = PBXBuildFile; fileRef = 2AE125FB2241151B00379C6F /* DWMasternodeTableViewCell.xib */; }; + 2AE126002241342900379C6F /* DWResultsMasternodeViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 2AE125FF2241342900379C6F /* DWResultsMasternodeViewController.m */; }; 2AF26F3B230C0E4C007F9228 /* DWBaseSeedViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 2AF26F3A230C0E4C007F9228 /* DWBaseSeedViewController.m */; }; 2AF26F3E230C1F79007F9228 /* DWAmountViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 2AF26F3D230C1F79007F9228 /* DWAmountViewController.m */; }; 2AF26F41230C1F9D007F9228 /* DWAmountView.m in Sources */ = {isa = PBXBuildFile; fileRef = 2AF26F40230C1F9D007F9228 /* DWAmountView.m */; }; @@ -381,6 +381,8 @@ FB1BF8C722C6F4B7003413C6 /* DWSignMessageViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = FB1BF8C622C6F4B7003413C6 /* DWSignMessageViewController.m */; }; FB1BF8C822C7FBD0003413C6 /* DWAmountInputValidator.m in Sources */ = {isa = PBXBuildFile; fileRef = 2A2120E92214566A009906DC /* DWAmountInputValidator.m */; }; FB1BF8C922C7FBD4003413C6 /* DWAmountObject.m in Sources */ = {isa = PBXBuildFile; fileRef = 2A2120EF22147A40009906DC /* DWAmountObject.m */; }; + FB248B5D1F73803100405AE0 /* UserNotifications.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FB248B5C1F73803100405AE0 /* UserNotifications.framework */; }; + FB248B631F79BB7C00405AE0 /* SafariServices.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FB248B621F79BB7C00405AE0 /* SafariServices.framework */; }; FB2E5537218BA161003A1B7C /* DWVersionManager.m in Sources */ = {isa = PBXBuildFile; fileRef = FB2E5536218BA161003A1B7C /* DWVersionManager.m */; }; FB31C23C223BCFAA00BD0868 /* DWMasternodeRootViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = FB31C23B223BCFAA00BD0868 /* DWMasternodeRootViewController.m */; }; FB31C253223BD3F600BD0868 /* DWReclaimMasternodeViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = FB31C23D223BD3F000BD0868 /* DWReclaimMasternodeViewController.m */; }; @@ -395,14 +397,10 @@ FB31C25D223BD3F600BD0868 /* DWUpdateMasternodeRegistrarViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = FB31C250223BD3F500BD0868 /* DWUpdateMasternodeRegistrarViewController.m */; }; FB31C262223BD62D00BD0868 /* DWProviderUpdateServiceTableViewCell.m in Sources */ = {isa = PBXBuildFile; fileRef = FB31C25F223BD62C00BD0868 /* DWProviderUpdateServiceTableViewCell.m */; }; FB31C263223BD62D00BD0868 /* DWProviderUpdateRegistrarTableViewCell.m in Sources */ = {isa = PBXBuildFile; fileRef = FB31C260223BD62C00BD0868 /* DWProviderUpdateRegistrarTableViewCell.m */; }; - FB31C266223BD6FB00BD0868 /* DWKeyValueTableViewCell.m in Sources */ = {isa = PBXBuildFile; fileRef = FB31C265223BD6FB00BD0868 /* DWKeyValueTableViewCell.m */; }; FB31C269223BD9F400BD0868 /* DWMasternodeTableViewCell.m in Sources */ = {isa = PBXBuildFile; fileRef = FB31C267223BD9F400BD0868 /* DWMasternodeTableViewCell.m */; }; - FB3FF0B22226416A0059A9A5 /* Masternode.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = FB3FF0B12226416A0059A9A5 /* Masternode.storyboard */; }; - FB248B5D1F73803100405AE0 /* UserNotifications.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FB248B5C1F73803100405AE0 /* UserNotifications.framework */; }; - FB248B631F79BB7C00405AE0 /* SafariServices.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FB248B621F79BB7C00405AE0 /* SafariServices.framework */; }; - FB2E5537218BA161003A1B7C /* DWVersionManager.m in Sources */ = {isa = PBXBuildFile; fileRef = FB2E5536218BA161003A1B7C /* DWVersionManager.m */; }; - FB3E9F60236125F600C09C5C /* BackgroundTasks.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FB3E9F5F236125F600C09C5C /* BackgroundTasks.framework */; }; + FB3E9F60236125F600C09C5C /* (null) in Frameworks */ = {isa = PBXBuildFile; }; FB3FA3D61F2364140071FCC5 /* UIImage+Utils.m in Sources */ = {isa = PBXBuildFile; fileRef = BAA4843B1B3EFFAF0075C749 /* UIImage+Utils.m */; }; + FB3FF0B22226416A0059A9A5 /* Masternode.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = FB3FF0B12226416A0059A9A5 /* Masternode.storyboard */; }; FB3FF0B5222642FB0059A9A5 /* DWKeysOverviewViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = FB3FF0B4222642FB0059A9A5 /* DWKeysOverviewViewController.m */; }; FB3FF0B822264DC60059A9A5 /* DWDerivationPathKeysViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = FB3FF0B722264DC60059A9A5 /* DWDerivationPathKeysViewController.m */; }; FB43BC72211B8A5E00BC9879 /* DWActionTableViewCell.m in Sources */ = {isa = PBXBuildFile; fileRef = FB43BC71211B8A5E00BC9879 /* DWActionTableViewCell.m */; }; @@ -1082,11 +1080,6 @@ 2ACD53ED234C9D8E00650AD3 /* UIView+DWRecursiveSubview.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = "UIView+DWRecursiveSubview.m"; sourceTree = ""; }; 2ACE88B22265DA1600ED24B5 /* DWCrashReporter.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = DWCrashReporter.h; sourceTree = ""; }; 2ACE88B32265DA1600ED24B5 /* DWCrashReporter.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = DWCrashReporter.m; sourceTree = ""; }; - 2AE125F6224113C600379C6F /* DWBaseMasternodeViewController.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = DWBaseMasternodeViewController.h; sourceTree = ""; }; - 2AE125F7224113C600379C6F /* DWBaseMasternodeViewController.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = DWBaseMasternodeViewController.m; sourceTree = ""; }; - 2AE125FB2241151B00379C6F /* DWMasternodeTableViewCell.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = DWMasternodeTableViewCell.xib; sourceTree = ""; }; - 2AE125FE2241342900379C6F /* DWResultsMasternodeViewController.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = DWResultsMasternodeViewController.h; sourceTree = ""; }; - 2AE125FF2241342900379C6F /* DWResultsMasternodeViewController.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = DWResultsMasternodeViewController.m; sourceTree = ""; }; 2AD1CE5F22D8E9D900C99324 /* DWSeedPhraseView.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = DWSeedPhraseView.m; sourceTree = ""; }; 2AD1CE6222D9127600C99324 /* DWSeedWordModel.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = DWSeedWordModel.h; sourceTree = ""; }; 2AD1CE6322D9127600C99324 /* DWSeedWordModel.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = DWSeedWordModel.m; sourceTree = ""; }; @@ -1127,6 +1120,11 @@ 2AD46230232A286000C71557 /* DWLockScreenModel.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = DWLockScreenModel.h; sourceTree = ""; }; 2AD46231232A286000C71557 /* DWLockScreenModel.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = DWLockScreenModel.m; sourceTree = ""; }; 2ADF83FE23633116008459A7 /* SharedAssets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = SharedAssets.xcassets; sourceTree = ""; }; + 2AE125F6224113C600379C6F /* DWBaseMasternodeViewController.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = DWBaseMasternodeViewController.h; sourceTree = ""; }; + 2AE125F7224113C600379C6F /* DWBaseMasternodeViewController.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = DWBaseMasternodeViewController.m; sourceTree = ""; }; + 2AE125FB2241151B00379C6F /* DWMasternodeTableViewCell.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = DWMasternodeTableViewCell.xib; sourceTree = ""; }; + 2AE125FE2241342900379C6F /* DWResultsMasternodeViewController.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = DWResultsMasternodeViewController.h; sourceTree = ""; }; + 2AE125FF2241342900379C6F /* DWResultsMasternodeViewController.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = DWResultsMasternodeViewController.m; sourceTree = ""; }; 2AF26F39230C0E4C007F9228 /* DWBaseSeedViewController.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = DWBaseSeedViewController.h; sourceTree = ""; }; 2AF26F3A230C0E4C007F9228 /* DWBaseSeedViewController.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = DWBaseSeedViewController.m; sourceTree = ""; }; 2AF26F3C230C1F79007F9228 /* DWAmountViewController.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = DWAmountViewController.h; sourceTree = ""; }; @@ -1313,6 +1311,7 @@ FB31C265223BD6FB00BD0868 /* DWKeyValueTableViewCell.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = DWKeyValueTableViewCell.m; sourceTree = ""; }; FB31C267223BD9F400BD0868 /* DWMasternodeTableViewCell.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = DWMasternodeTableViewCell.m; sourceTree = ""; }; FB31C268223BD9F400BD0868 /* DWMasternodeTableViewCell.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DWMasternodeTableViewCell.h; sourceTree = ""; }; + FB3E9F612365C8DE00C09C5C /* DWSeedPhraseView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DWSeedPhraseView.h; sourceTree = ""; }; FB3FF0B12226416A0059A9A5 /* Masternode.storyboard */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; path = Masternode.storyboard; sourceTree = ""; }; FB3FF0B3222642FB0059A9A5 /* DWKeysOverviewViewController.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = DWKeysOverviewViewController.h; sourceTree = ""; }; FB3FF0B4222642FB0059A9A5 /* DWKeysOverviewViewController.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = DWKeysOverviewViewController.m; sourceTree = ""; }; @@ -1400,7 +1399,7 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - FB3E9F60236125F600C09C5C /* BackgroundTasks.framework in Frameworks */, + FB3E9F60236125F600C09C5C /* (null) in Frameworks */, 2AD1CE9922DE63FB00C99324 /* GameplayKit.framework in Frameworks */, FB4FA9C322505DD70060B017 /* AudioToolbox.framework in Frameworks */, FB248B631F79BB7C00405AE0 /* SafariServices.framework in Frameworks */, @@ -2739,8 +2738,6 @@ 2AB66E0723572379007BE825 /* Overview */ = { isa = PBXGroup; children = ( - FB3FF0B3222642FB0059A9A5 /* DWKeysOverviewViewController.h */, - FB3FF0B4222642FB0059A9A5 /* DWKeysOverviewViewController.m */, 2AB66E00235711FA007BE825 /* DWWalletKeysOverviewModel.h */, 2AB66E01235711FA007BE825 /* DWWalletKeysOverviewModel.m */, ); @@ -2752,8 +2749,6 @@ children = ( 2AB66E0923572572007BE825 /* Models */, 2AB66E03235722E0007BE825 /* Cells */, - FB3FF0B622264DC60059A9A5 /* DWDerivationPathKeysViewController.h */, - FB3FF0B722264DC60059A9A5 /* DWDerivationPathKeysViewController.m */, ); path = DerivationPathKeys; sourceTree = ""; @@ -2855,7 +2850,7 @@ 2A4431E722D738C0009BAF7F /* DWSeedPhraseModel.h */, 2A4431E822D738C0009BAF7F /* DWSeedPhraseModel.m */, 2AD1CE6522D9161A00C99324 /* DWSeedPhraseType.h */, - 2AD1CE5E22D8E9D900C99324 /* DWSeedPhraseView.h */, + FB3E9F612365C8DE00C09C5C /* DWSeedPhraseView.h */, 2AD1CE5F22D8E9D900C99324 /* DWSeedPhraseView.m */, 2AD1CE6222D9127600C99324 /* DWSeedWordModel.h */, 2AD1CE6322D9127600C99324 /* DWSeedWordModel.m */, @@ -3075,7 +3070,6 @@ isa = PBXGroup; children = ( 2A0C6C852362EFAE00C86F37 /* libDashSync-Shared.a */, - FB3E9F5F236125F600C09C5C /* BackgroundTasks.framework */, 2ABCA9172357A61B00092C09 /* Foundation.framework */, 2AD1CE9822DE63FA00C99324 /* GameplayKit.framework */, FB4FA9C222505DD60060B017 /* AudioToolbox.framework */, @@ -4106,7 +4100,6 @@ 2A9FFE7E2230FF4600956D5F /* DWSelectorFormCellModel.m in Sources */, FB2E5537218BA161003A1B7C /* DWVersionManager.m in Sources */, FB31C256223BD3F600BD0868 /* DWRegisterMasternodeViewController.m in Sources */, - 2A9FFE782230FF4600956D5F /* DWAlertViewActionBaseView.m in Sources */, 2A9FFE8D2230FF4700956D5F /* DWSettingsViewController.m in Sources */, 2A0C69C623142AA4001B8C90 /* DWModalPresentationController.m in Sources */, 2A9FFF1C2233E56E00956D5F /* DWUpholdCardCellModel.m in Sources */, diff --git a/DashWallet/Masternode Keys/DWBaseMasternodeViewController.h b/DashWallet/Masternode Keys/DWBaseMasternodeViewController.h deleted file mode 100644 index db518e12d..000000000 --- a/DashWallet/Masternode Keys/DWBaseMasternodeViewController.h +++ /dev/null @@ -1,33 +0,0 @@ -// -// Created by Andrew Podkovyrin -// Copyright © 2019 Dash Core Group. All rights reserved. -// -// Licensed under the MIT License (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// https://opensource.org/licenses/MIT -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// - -#import - -NS_ASSUME_NONNULL_BEGIN - -@class DSChain; - -@interface DWBaseMasternodeViewController : UITableViewController - -@property (nonatomic,strong) DSChain * chain; -@property (nonatomic,strong) NSFetchedResultsController * fetchedResultsController; - -- (void)updateSearchString:(NSString *)searchString; - -@end - -NS_ASSUME_NONNULL_END diff --git a/DashWallet/Masternode Keys/DWBaseMasternodeViewController.m b/DashWallet/Masternode Keys/DWBaseMasternodeViewController.m deleted file mode 100644 index 2e78e2925..000000000 --- a/DashWallet/Masternode Keys/DWBaseMasternodeViewController.m +++ /dev/null @@ -1,160 +0,0 @@ -// -// Created by Andrew Podkovyrin -// Copyright © 2019 Dash Core Group. All rights reserved. -// -// Licensed under the MIT License (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// https://opensource.org/licenses/MIT -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// - -#import "DWBaseMasternodeViewController.h" - -#import "DWMasternodeTableViewCell.h" -#import -#import "DWEnvironment.h" - -NS_ASSUME_NONNULL_BEGIN - -static NSString * const DWBaseMasternodeViewControllerCellId = @"MasternodeTableViewCellIdentifier"; - -@interface DWBaseMasternodeViewController () - -@property (nullable, copy, nonatomic) NSString *searchString; - -@end - -@implementation DWBaseMasternodeViewController - -- (void)viewDidLoad { - [super viewDidLoad]; - - self.chain = [DWEnvironment sharedInstance].currentChain; - - self.tableView.rowHeight = 93.0; - - UINib *nib = [UINib nibWithNibName:@"DWMasternodeTableViewCell" bundle:nil]; - NSParameterAssert(nib); - [self.tableView registerNib:nib forCellReuseIdentifier:DWBaseMasternodeViewControllerCellId]; -} - -- (void)updateSearchString:(NSString *)searchString { - self.searchString = searchString; - _fetchedResultsController = nil; - [self.tableView reloadData]; -} - -#pragma mark - FRC - --(NSManagedObjectContext*)managedObjectContext { - return [NSManagedObject context]; -} - --(NSPredicate*)searchPredicate { - // Get all shapeshifts that have been received by shapeshift.io or all shapeshifts that have no deposits but where we can verify a transaction has been pushed on the blockchain - if (self.searchString && ![self.searchString isEqualToString:@""]) { - if ([self.searchString isEqualToString:@"0"] || [self.searchString longLongValue]) { - NSArray * ipArray = [self.searchString componentsSeparatedByString:@"."]; - NSMutableArray *partPredicates = [NSMutableArray array]; - NSPredicate * chainPredicate = [NSPredicate predicateWithFormat:@"chain == %@",self.chain.chainEntity]; - [partPredicates addObject:chainPredicate]; - for (int i = 0; i< MIN(ipArray.count,4); i++) { - if ([ipArray[i] isEqualToString:@""]) break; - NSPredicate *currentPartPredicate = [NSPredicate predicateWithFormat:@"(((address >> %@) & 255) == %@)", @(24-i*8),@([ipArray[i] integerValue])]; - [partPredicates addObject:currentPartPredicate]; - } - - return [NSCompoundPredicate andPredicateWithSubpredicates:partPredicates]; - } else { - return [NSPredicate predicateWithFormat:@"chain == %@",self.chain.chainEntity]; - } - - } else { - return [NSPredicate predicateWithFormat:@"chain == %@",self.chain.chainEntity]; - } - -} - -- (NSFetchedResultsController *)fetchedResultsController -{ - if (_fetchedResultsController) return _fetchedResultsController; - NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init]; - // Edit the entity name as appropriate. - NSEntityDescription *entity = [NSEntityDescription entityForName:@"DSSimplifiedMasternodeEntryEntity" inManagedObjectContext:self.managedObjectContext]; - [fetchRequest setEntity:entity]; - - // Set the batch size to a suitable number. - [fetchRequest setFetchBatchSize:20]; - - // Edit the sort key as appropriate. - NSSortDescriptor *claimSortDescriptor = [[NSSortDescriptor alloc] initWithKey:@"localMasternode" ascending:NO]; - NSSortDescriptor *addressSortDescriptor = [[NSSortDescriptor alloc] initWithKey:@"address" ascending:YES]; - NSSortDescriptor *portSortDescriptor = [[NSSortDescriptor alloc] initWithKey:@"port" ascending:YES]; - NSArray *sortDescriptors = @[claimSortDescriptor,addressSortDescriptor,portSortDescriptor]; - - [fetchRequest setSortDescriptors:sortDescriptors]; - - NSPredicate *filterPredicate = [self searchPredicate]; - [fetchRequest setPredicate:filterPredicate]; - - // Edit the section name key path and cache name if appropriate. - // nil for section name key path means "no sections". - NSFetchedResultsController *aFetchedResultsController = [[NSFetchedResultsController alloc] initWithFetchRequest:fetchRequest managedObjectContext:self.managedObjectContext sectionNameKeyPath:@"localMasternode" cacheName:nil]; - _fetchedResultsController = aFetchedResultsController; - NSError *error = nil; - if (![aFetchedResultsController performFetch:&error]) { - // Replace this implementation with code to handle the error appropriately. - // abort() causes the application to generate a crash log and terminate. You should not use this function in a shipping application, although it may be useful during development. - NSLog(@"Unresolved error %@, %@", error, [error userInfo]); - abort(); - } - - return aFetchedResultsController; -} - - -#pragma mark - TableView - --(nullable NSString*)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section { - if ([self.fetchedResultsController sections].count == 1 || section) { - return NSLocalizedString(@"Masternodes",nil); - } else { - return NSLocalizedString(@"My Masternodes",nil); - } -} - -- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView { - return [[self.fetchedResultsController sections] count]; -} - -- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section { - id sectionInfo = [[self.fetchedResultsController sections] objectAtIndex:section]; - return [sectionInfo numberOfObjects]; -} - -- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { - DWMasternodeTableViewCell *cell = (DWMasternodeTableViewCell *)[tableView dequeueReusableCellWithIdentifier:DWBaseMasternodeViewControllerCellId forIndexPath:indexPath]; - - [self configureCell:cell atIndexPath:indexPath]; - - return cell; -} - --(void)configureCell:(DWMasternodeTableViewCell*)cell atIndexPath:(NSIndexPath *)indexPath { - DSSimplifiedMasternodeEntryEntity *simplifiedMasternodeEntryEntity = [self.fetchedResultsController objectAtIndexPath:indexPath]; - char s[INET6_ADDRSTRLEN]; - uint32_t ipAddress = CFSwapInt32BigToHost(simplifiedMasternodeEntryEntity.address); - cell.masternodeLocationLabel.text = [NSString stringWithFormat:@"%s:%d",inet_ntop(AF_INET, &ipAddress, s, sizeof(s)),simplifiedMasternodeEntryEntity.port]; - cell.outputLabel.text = [NSString stringWithFormat:@"%@",simplifiedMasternodeEntryEntity.providerRegistrationTransactionHash]; -} - -@end - -NS_ASSUME_NONNULL_END diff --git a/DashWallet/Masternode Keys/DWDerivationPathKeysViewController.m b/DashWallet/Masternode Keys/DWDerivationPathKeysViewController.m deleted file mode 100644 index bd036491e..000000000 --- a/DashWallet/Masternode Keys/DWDerivationPathKeysViewController.m +++ /dev/null @@ -1,172 +0,0 @@ -// -// Created by Sam Westrich -// Copyright © 2019 Dash Core Group. All rights reserved. -// -// Licensed under the MIT License (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// https://opensource.org/licenses/MIT -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// - -#import "DWDerivationPathKeysViewController.h" -#import "DWSignMessageViewController.h" - -#import -#import - -static NSString * const KeyInfoCellId = @"KeyInfoCell"; -static NSString * const LoadMoreCellId = @"LoadMoreCell"; -static NSString * const SignMessageCellId = @"SignMessageCell"; - -typedef NS_ENUM(NSUInteger, DWDerivationPathInfo) { - DWDerivationPathInfo_Address, - DWDerivationPathInfo_PublicKey, - DWDerivationPathInfo_PrivateKey, - DWDerivationPathInfo_UsedOrNot, - DWDerivationPathInfo_SignMessage, - _DWDerivationPathInfo_Count, -}; - -@interface DWDerivationPathKeysViewController () - -@property (nonatomic, assign) NSInteger visibleIndexes; - -@end - -@implementation DWDerivationPathKeysViewController - -- (void)viewDidLoad { - [super viewDidLoad]; - - self.tableView.tableFooterView = [[UIView alloc] init]; - - self.visibleIndexes = [self.derivationPath firstUnusedIndex] + 1; -} - -#pragma mark - Table view data source - -- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView { - return self.visibleIndexes + 1; -} - -- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section { - if (section == self.visibleIndexes) { - return 1; - } - else { - return _DWDerivationPathInfo_Count; - } -} - -- (NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section { - if (section == self.visibleIndexes) { - return @""; - } - else { - return [NSString stringWithFormat:@"%ld", section]; - } -} - -- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { - if (indexPath.section == self.visibleIndexes) { - UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:LoadMoreCellId forIndexPath:indexPath]; - cell.textLabel.text = NSLocalizedString(@"Load more", nil); - return cell; - } - else { - UITableViewCell *cell; - - DSWallet *wallet = [DWEnvironment sharedInstance].currentWallet; - NSInteger index = indexPath.section; - DWDerivationPathInfo info = indexPath.row; - switch (info) { - case DWDerivationPathInfo_Address: { - cell = [tableView dequeueReusableCellWithIdentifier:KeyInfoCellId forIndexPath:indexPath]; - cell.textLabel.text = NSLocalizedString(@"Address", nil); - cell.detailTextLabel.text = [self.derivationPath addressAtIndex:index]; - - break; - } - case DWDerivationPathInfo_PublicKey: { - cell = [tableView dequeueReusableCellWithIdentifier:KeyInfoCellId forIndexPath:indexPath]; - cell.textLabel.text = NSLocalizedString(@"Public key", nil); - cell.detailTextLabel.text = [self.derivationPath publicKeyDataAtIndex:index].hexString; - - break; - } - case DWDerivationPathInfo_PrivateKey: { - cell = [tableView dequeueReusableCellWithIdentifier:KeyInfoCellId forIndexPath:indexPath]; - cell.textLabel.text = NSLocalizedString(@"Private key", nil); - @autoreleasepool { - - NSData *seed = [[DSBIP39Mnemonic sharedInstance] deriveKeyFromPhrase:wallet.seedPhraseIfAuthenticated withPassphrase:nil]; - DSKey *key = [self.derivationPath privateKeyAtIndex:index fromSeed:seed]; - if ([key isKindOfClass:[DSECDSAKey class]]) { - cell.detailTextLabel.text = [((DSECDSAKey*)key) privateKeyStringForChain:self.derivationPath.chain]; - } else { - cell.detailTextLabel.text = key.secretKeyString; - } - } - break; - } - case DWDerivationPathInfo_UsedOrNot: { - cell = [tableView dequeueReusableCellWithIdentifier:KeyInfoCellId forIndexPath:indexPath]; - BOOL used = [self.derivationPath addressIsUsedAtIndex:index]; - cell.textLabel.text = used?NSLocalizedString(@"Used", nil):NSLocalizedString(@"Not used", nil); - if (used) { - DSLocalMasternode * localMasternode = [self.derivationPath.chain.chainManager.masternodeManager localMasternodeUsingIndex:index atDerivationPath:self.derivationPath]; - cell.detailTextLabel.text = localMasternode.ipAddressString; - } else { - cell.detailTextLabel.text = nil; - } - - - break; - } - case DWDerivationPathInfo_SignMessage: { - cell = [tableView dequeueReusableCellWithIdentifier:SignMessageCellId forIndexPath:indexPath]; - cell.textLabel.text = NSLocalizedString(@"Sign Message", nil); - - break; - } - - default: - break; - } - - return cell; - } -} - -- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath { - if (indexPath.section == self.visibleIndexes) { - [tableView deselectRowAtIndexPath:indexPath animated:YES]; - - self.visibleIndexes += 1; - [tableView beginUpdates]; - [tableView insertSections:[NSIndexSet indexSetWithIndex:self.visibleIndexes - 1] withRowAnimation:UITableViewRowAnimationAutomatic]; - [tableView endUpdates]; - - [tableView scrollToRowAtIndexPath:[NSIndexPath indexPathForRow:0 inSection:self.visibleIndexes - 1] atScrollPosition:UITableViewScrollPositionMiddle animated:YES]; - } -} - --(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender { - if ([segue.identifier isEqualToString:@"SignMessageSegue"]) { - DWSignMessageViewController * signMessageViewController = (DWSignMessageViewController*)segue.destinationViewController; - DSWallet *wallet = [DWEnvironment sharedInstance].currentWallet; - NSData *seed = [[DSBIP39Mnemonic sharedInstance] deriveKeyFromPhrase:wallet.seedPhraseIfAuthenticated withPassphrase:nil]; - DSKey *key = [self.derivationPath privateKeyAtIndex:self.tableView.indexPathForSelectedRow.section fromSeed:seed]; - signMessageViewController.key = key; - } -} - - -@end diff --git a/DashWallet/Masternode Keys/DWKeysOverviewViewController.m b/DashWallet/Masternode Keys/DWKeysOverviewViewController.m deleted file mode 100644 index 5caa10d78..000000000 --- a/DashWallet/Masternode Keys/DWKeysOverviewViewController.m +++ /dev/null @@ -1,99 +0,0 @@ -// -// Created by Sam Westrich -// Copyright © 2019 Dash Core Group. All rights reserved. -// -// Licensed under the MIT License (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// https://opensource.org/licenses/MIT -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// - -#import "DWKeysOverviewViewController.h" - -#import -#import -#import -#import "DWDerivationPathKeysViewController.h" - -static NSString * const OwnerKeysSegueId = @"OwnerKeysSegue"; -static NSString * const VotingKeysSegueId = @"VotingKeysSegue"; -static NSString * const OperatorKeysSegueId = @"OperatorKeysSegue"; - -@interface DWKeysOverviewViewController () - -@property (strong, nonatomic) IBOutlet UILabel *ownerKeysTitleLabel; -@property (strong, nonatomic) IBOutlet UILabel *votingKeysTitleLabel; -@property (strong, nonatomic) IBOutlet UILabel *operatorKeysTitleLabel; -@property (strong, nonatomic) IBOutlet UILabel *ownerKeysDetailLabel; -@property (strong, nonatomic) IBOutlet UILabel *votingKeysDetailLabel; -@property (strong, nonatomic) IBOutlet UILabel *operatorKeysDetailLabel; - -@property (strong, nonatomic) DSAuthenticationKeysDerivationPath *ownerDerivationPath; -@property (strong, nonatomic) DSAuthenticationKeysDerivationPath *votingDerivationPath; -@property (strong, nonatomic) DSAuthenticationKeysDerivationPath *operatorDerivationPath; - -@end - -@implementation DWKeysOverviewViewController - - -+ (instancetype)controller { - UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"Masternode" bundle:nil]; - DWKeysOverviewViewController *controller = [storyboard instantiateViewControllerWithIdentifier:@"KeysOverviewViewControllerIdentifier"]; - - return controller; -} - -- (void)viewDidLoad { - [super viewDidLoad]; - - self.title = NSLocalizedString(@"Wallet Keys", nil); - - DSWallet *wallet = [DWEnvironment sharedInstance].currentWallet; - DSDerivationPathFactory *factory = [DSDerivationPathFactory sharedInstance]; - self.ownerDerivationPath = [factory providerOwnerKeysDerivationPathForWallet:wallet]; - self.votingDerivationPath = [factory providerVotingKeysDerivationPathForWallet:wallet]; - self.operatorDerivationPath = [factory providerOperatorKeysDerivationPathForWallet:wallet]; - - self.tableView.tableFooterView = [[UIView alloc] init]; - - self.ownerKeysTitleLabel.text = NSLocalizedString(@"Owner Keys", nil); - self.votingKeysTitleLabel.text = NSLocalizedString(@"Voting Keys", nil); - self.operatorKeysTitleLabel.text = NSLocalizedString(@"Operator Keys", nil); - self.ownerKeysDetailLabel.text = [NSString stringWithFormat:NSLocalizedString(@"%ld used", nil), - self.ownerDerivationPath.usedAddresses.count]; - self.votingKeysDetailLabel.text = [NSString stringWithFormat:NSLocalizedString(@"%ld used", nil), - self.votingDerivationPath.usedAddresses.count]; - self.operatorKeysDetailLabel.text = [NSString stringWithFormat:NSLocalizedString(@"%ld used", nil), - self.operatorDerivationPath.usedAddresses.count]; -} - -- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender { - DSAuthenticationKeysDerivationPath *derivationPath = nil; - NSString *title = nil; - if ([segue.identifier isEqualToString:OwnerKeysSegueId]) { - derivationPath = self.ownerDerivationPath; - title = NSLocalizedString(@"Owner Keys", nil); - } - else if ([segue.identifier isEqualToString:VotingKeysSegueId]) { - derivationPath = self.votingDerivationPath; - title = NSLocalizedString(@"Voting Keys", nil); - } - else if ([segue.identifier isEqualToString:OperatorKeysSegueId]) { - derivationPath = self.operatorDerivationPath; - title = NSLocalizedString(@"Operator Keys", nil); - } - NSParameterAssert(derivationPath); - DWDerivationPathKeysViewController *controller = (DWDerivationPathKeysViewController *)segue.destinationViewController; - controller.derivationPath = derivationPath; - controller.title = title; -} - -@end diff --git a/DashWallet/Masternode Keys/DWMasternodeDetailViewController.h b/DashWallet/Masternode Keys/DWMasternodeDetailViewController.h deleted file mode 100644 index a7ec8cc03..000000000 --- a/DashWallet/Masternode Keys/DWMasternodeDetailViewController.h +++ /dev/null @@ -1,23 +0,0 @@ -// -// DWMasternodeDetailViewController.h -// DashWallet -// -// Created by Sam Westrich on 2/21/19. -// Copyright © 2019 Dash Core Group. All rights reserved. -// - -#import - -NS_ASSUME_NONNULL_BEGIN - -@class DSLocalMasternode, DSSimplifiedMasternodeEntry; - -@interface DWMasternodeDetailViewController : UITableViewController - -@property (nonatomic,strong) DSLocalMasternode * localMasternode; -@property (nonatomic,strong) DSSimplifiedMasternodeEntry * simplifiedMasternodeEntry; - - -@end - -NS_ASSUME_NONNULL_END diff --git a/DashWallet/Masternode Keys/DWMasternodeDetailViewController.m b/DashWallet/Masternode Keys/DWMasternodeDetailViewController.m deleted file mode 100644 index e5df5e949..000000000 --- a/DashWallet/Masternode Keys/DWMasternodeDetailViewController.m +++ /dev/null @@ -1,172 +0,0 @@ -// -// DWMasternodeDetailViewController.m -// DashWallet -// -// Created by Sam Westrich on 2/21/19. -// Copyright © 2019 Dash Core Group. All rights reserved. -// - -#import "DWMasternodeDetailViewController.h" -#import "DSSimplifiedMasternodeEntry.h" -#import "DSLocalMasternode.h" -#import "DWUpdateMasternodeServiceViewController.h" -#import "DWUpdateMasternodeRegistrarViewController.h" -#import "DWReclaimMasternodeViewController.h" -#import "DWProviderUpdateRegistrarTransactionsViewController.h" -#import "DWProviderUpdateServiceTransactionsViewController.h" -#import -#import "BRCopyLabel.h" -#import "DWEnvironment.h" - -@interface DWMasternodeDetailViewController () -@property (strong, nonatomic) IBOutlet UILabel *locationLabel; -@property (strong, nonatomic) IBOutlet UILabel *operatorKeyLabel; -@property (strong, nonatomic) IBOutlet UILabel *operatorPublicKeyLabel; -@property (strong, nonatomic) IBOutlet UILabel *ownerKeyLabel; -@property (strong, nonatomic) IBOutlet UILabel *votingKeyLabel; -@property (strong, nonatomic) IBOutlet UILabel *votingAddressLabel; -@property (strong, nonatomic) IBOutlet UILabel *fundsInHoldingLabel; -@property (strong, nonatomic) IBOutlet UILabel *activeLabel; -@property (strong, nonatomic) IBOutlet UILabel *payToAddress; -@property (strong, nonatomic) IBOutlet BRCopyLabel *proRegTxLabel; -@property (strong, nonatomic) IBOutlet BRCopyLabel *proUpRegTxLabel; -@property (strong, nonatomic) IBOutlet BRCopyLabel *proUpServTxLabel; -@property (strong, nonatomic) DSChain * chain; - -@end - -@implementation DWMasternodeDetailViewController - -- (void)viewDidLoad { - [super viewDidLoad]; - - char s[INET6_ADDRSTRLEN]; - uint32_t ipAddress = self.simplifiedMasternodeEntry.address.u32[3]; - - self.locationLabel.text = [NSString stringWithFormat:@"%s:%d",inet_ntop(AF_INET, &ipAddress, s, sizeof(s)),self.simplifiedMasternodeEntry.port]; - self.ownerKeyLabel.text = self.localMasternode.ownerKeysWallet?@"SHOW":@"NO"; - self.operatorKeyLabel.text = self.localMasternode.operatorKeysWallet?@"SHOW":@"NO"; - self.operatorPublicKeyLabel.text = uint384_hex(self.simplifiedMasternodeEntry.operatorPublicKey); - self.votingAddressLabel.text = self.simplifiedMasternodeEntry.votingAddress; - self.votingKeyLabel.text = self.localMasternode.votingKeysWallet?@"SHOW":@"NO"; - self.fundsInHoldingLabel.text = self.localMasternode.holdingKeysWallet?@"YES":@"NO"; - self.activeLabel.text = self.simplifiedMasternodeEntry.isValid?@"YES":@"NO"; - self.payToAddress.text = self.localMasternode.payoutAddress?self.localMasternode.payoutAddress:@"Unknown"; - self.proRegTxLabel.text = uint256_hex(self.localMasternode.providerRegistrationTransaction.txHash); - self.proUpRegTxLabel.text = [NSString stringWithFormat:@"%lu",(unsigned long)self.localMasternode.providerUpdateRegistrarTransactions.count]; - self.proUpServTxLabel.text = [NSString stringWithFormat:@"%lu",(unsigned long)self.localMasternode.providerUpdateServiceTransactions.count]; - self.chain = [DWEnvironment sharedInstance].currentChain; -} - --(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender { - if ([segue.identifier isEqualToString:@"UpdateMasternodeServiceSegue"]) { - UINavigationController * navigationController = (UINavigationController*)segue.destinationViewController; - DWUpdateMasternodeServiceViewController * updateMasternodeServiceViewController = (DWUpdateMasternodeServiceViewController*)navigationController.topViewController; - updateMasternodeServiceViewController.localMasternode = self.localMasternode; - } else if ([segue.identifier isEqualToString:@"UpdateMasternodeRegistrarSegue"]) { - UINavigationController * navigationController = (UINavigationController*)segue.destinationViewController; - DWUpdateMasternodeRegistrarViewController * updateMasternodeRegistrarViewController = (DWUpdateMasternodeRegistrarViewController*)navigationController.topViewController; - updateMasternodeRegistrarViewController.localMasternode = self.localMasternode; - updateMasternodeRegistrarViewController.simplifiedMasternodeEntry = self.simplifiedMasternodeEntry; - } else if ([segue.identifier isEqualToString:@"ReclaimMasternodeSegue"]) { - UINavigationController * navigationController = (UINavigationController*)segue.destinationViewController; - DWReclaimMasternodeViewController * reclaimMasternodeViewController = (DWReclaimMasternodeViewController*)navigationController.topViewController; - reclaimMasternodeViewController.localMasternode = self.localMasternode; - } else if ([segue.identifier isEqualToString:@"ShowProviderUpdateRegistrarTransactionsSegue"]) { - DWProviderUpdateRegistrarTransactionsViewController * providerUpdateRegistrarTransactionsViewController = segue.destinationViewController; - providerUpdateRegistrarTransactionsViewController.localMasternode = self.localMasternode; - } else if ([segue.identifier isEqualToString:@"ShowProviderUpdateServiceTransactionsSegue"]) { - DWProviderUpdateServiceTransactionsViewController * providerUpdateServiceTransactionsViewController = segue.destinationViewController; - providerUpdateServiceTransactionsViewController.localMasternode = self.localMasternode; - } -} - --(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath { - switch (indexPath.section) { - case 0: - { - switch (indexPath.row) { - case 2: - if (self.localMasternode.ownerKeysWallet && [self.ownerKeyLabel.text isEqualToString:@"SHOW"]) { - [self.localMasternode.ownerKeysWallet seedWithPrompt:@"Show owner key?" forAmount:0 completion:^(NSData * _Nullable seed, BOOL cancelled) { - if (seed) { - self.ownerKeyLabel.text = [[self.localMasternode ownerKeyFromSeed:seed] privateKeyStringForChain:self.chain]; - } - }]; - } - break; - case 3: - if (self.localMasternode.operatorKeysWallet && [self.operatorKeyLabel.text isEqualToString:@"SHOW"]) { - [self.localMasternode.operatorKeysWallet seedWithPrompt:@"Show operator key?" forAmount:0 completion:^(NSData * _Nullable seed, BOOL cancelled) { - if (seed) { - self.operatorKeyLabel.text = [self.localMasternode operatorKeyStringFromSeed:seed]; - } - }]; - } - break; - case 4: - if (self.localMasternode.operatorKeysWallet && [self.votingKeyLabel.text isEqualToString:@"SHOW"]) { - [self.localMasternode.operatorKeysWallet seedWithPrompt:@"Show voting key?" forAmount:0 completion:^(NSData * _Nullable seed, BOOL cancelled) { - if (seed) { - self.votingKeyLabel.text = [[self.localMasternode votingKeyFromSeed:seed] privateKeyStringForChain:self.chain]; - } - }]; - } - break; - - default: - break; - } - - } - break; - case 1: { - switch (indexPath.row) { - case 0: { - if (!self.localMasternode) { - [self claimSimplifiedMasternodeEntry]; - } - } - default: - break; - } - } - default: - break; - } -} - --(void)claimSimplifiedMasternodeEntry { - [[DSInsightManager sharedInstance] queryInsightForTransactionWithHash:[NSData dataWithUInt256: self.simplifiedMasternodeEntry.providerRegistrationTransactionHash].reverse.UInt256 onChain:self.simplifiedMasternodeEntry.chain completion:^(DSTransaction *transaction, NSError *error) { - if ([transaction isKindOfClass:[DSProviderRegistrationTransaction class]]) { - DSProviderRegistrationTransaction * providerRegistrationTransaction = (DSProviderRegistrationTransaction *)transaction; - DSLocalMasternode * localMasternode = [self.simplifiedMasternodeEntry.chain.chainManager.masternodeManager localMasternodeFromProviderRegistrationTransaction:providerRegistrationTransaction save:TRUE]; - } - }]; - - -// [self.moc performBlockAndWait:^{ // add the transaction to core data -// [DSChainEntity setContext:self.moc]; -// Class transactionEntityClass = [transaction entityClass]; -// [transactionEntityClass setContext:self.moc]; -// [DSTransactionHashEntity setContext:self.moc]; -// [DSAddressEntity setContext:self.moc]; -// if ([DSTransactionEntity countObjectsMatching:@"transactionHash.txHash == %@", uint256_data(txHash)] == 0) { -// -// DSTransactionEntity * transactionEntity = [transactionEntityClass managedObject]; -// [transactionEntity setAttributesFromTransaction:transaction]; -// [transactionEntityClass saveContext]; -// } -// }]; - -// uint32_t votingIndex; -// DSWallet * votingWallet = [self.simplifiedMasternodeEntry.chain walletHavingProviderVotingAuthenticationHash:self.simplifiedMasternodeEntry.keyIDVoting foundAtIndex:&votingIndex]; -// -// uint32_t operatorIndex; -// DSWallet * operatorWallet = [self.simplifiedMasternodeEntry.chain walletHavingProviderOperatorAuthenticationKey:self.simplifiedMasternodeEntry.operatorPublicKey foundAtIndex:&operatorIndex]; -// - -} - - -@end diff --git a/DashWallet/Masternode Keys/DWMasternodeRootViewController.h b/DashWallet/Masternode Keys/DWMasternodeRootViewController.h deleted file mode 100644 index 25597fd3e..000000000 --- a/DashWallet/Masternode Keys/DWMasternodeRootViewController.h +++ /dev/null @@ -1,28 +0,0 @@ -// -// Created by Sam Westrich -// Copyright © 2019 Dash Core Group. All rights reserved. -// -// Licensed under the MIT License (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// https://opensource.org/licenses/MIT -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// - -#import - -NS_ASSUME_NONNULL_BEGIN - -@interface DWMasternodeRootViewController : UITableViewController - -+ (instancetype)controller; - -@end - -NS_ASSUME_NONNULL_END diff --git a/DashWallet/Masternode Keys/DWMasternodeRootViewController.m b/DashWallet/Masternode Keys/DWMasternodeRootViewController.m deleted file mode 100644 index fdf3e7e9d..000000000 --- a/DashWallet/Masternode Keys/DWMasternodeRootViewController.m +++ /dev/null @@ -1,55 +0,0 @@ -// -// Created by Sam Westrich -// Copyright © 2019 Dash Core Group. All rights reserved. -// -// Licensed under the MIT License (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// https://opensource.org/licenses/MIT -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// - -#import "DWMasternodeRootViewController.h" - -@interface DWMasternodeRootViewController () - -@end - -@implementation DWMasternodeRootViewController - -+ (instancetype)controller { - UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"Masternode" bundle:nil]; - DWMasternodeRootViewController *controller = [storyboard instantiateViewControllerWithIdentifier:@"MasternodeOverviewViewControllerIdentifier"]; - - return controller; -} - -- (void)viewDidLoad { - [super viewDidLoad]; - - // Uncomment the following line to preserve selection between presentations. - // self.clearsSelectionOnViewWillAppear = NO; - - // Uncomment the following line to display an Edit button in the navigation bar for this view controller. - // self.navigationItem.rightBarButtonItem = self.editButtonItem; -} - -#pragma mark - Table view data source - -/* -#pragma mark - Navigation - -// In a storyboard-based application, you will often want to do a little preparation before navigation -- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender { - // Get the new view controller using [segue destinationViewController]. - // Pass the selected object to the new view controller. -} -*/ - -@end diff --git a/DashWallet/Masternode Keys/DWMasternodeViewController.h b/DashWallet/Masternode Keys/DWMasternodeViewController.h deleted file mode 100644 index 0a09df594..000000000 --- a/DashWallet/Masternode Keys/DWMasternodeViewController.h +++ /dev/null @@ -1,14 +0,0 @@ -// -// DWMasternodeViewController.h -// DashWallet -// -// Created by Sam Westrich on 6/10/18. -// Copyright © 2018 Dash Core Group. All rights reserved. -// - -#import "DWBaseMasternodeViewController.h" -#import - -@interface DWMasternodeViewController : DWBaseMasternodeViewController - -@end diff --git a/DashWallet/Masternode Keys/DWMasternodeViewController.m b/DashWallet/Masternode Keys/DWMasternodeViewController.m deleted file mode 100644 index 22cf8d2d4..000000000 --- a/DashWallet/Masternode Keys/DWMasternodeViewController.m +++ /dev/null @@ -1,107 +0,0 @@ -// -// DWMasternodeViewController.m -// DashWallet -// -// Created by Sam Westrich on 6/10/18. -// Copyright © 2018 Dash Core Group. All rights reserved. -// - -#import "DWMasternodeViewController.h" -#import "DWMasternodeTableViewCell.h" -#import -#import -#import "DWRegisterMasternodeViewController.h" -#import "DWMasternodeDetailViewController.h" -#import "DWResultsMasternodeViewController.h" - -static UITextField *TextFieldSubviewOfView(UIView *view) { - if ([view isKindOfClass:UITextField.class]) { - return (UITextField *)view; - } - else { - UITextField *textField = nil; - for (UIView *subview in view.subviews) { - textField = TextFieldSubviewOfView(subview); - if (textField) { - break; - } - } - return textField; - } -} - -@interface DWMasternodeViewController () - -@property (strong, nonatomic) IBOutlet UIBarButtonItem *registerButton; -@property (strong, nonatomic) UISearchController *searchController; -@property (strong, nonatomic) DWResultsMasternodeViewController *searchResultsController; - -@end - -@implementation DWMasternodeViewController - -- (void)viewDidLoad { - [super viewDidLoad]; - - self.definesPresentationContext = YES; - - DWResultsMasternodeViewController *searchResultsController = [[DWResultsMasternodeViewController alloc] initWithStyle:UITableViewStyleGrouped]; - searchResultsController.tableView.delegate = self; - self.searchResultsController = searchResultsController; - - UIColor *dashBlueColor = [UIColor colorWithRed:0.0 green:141.0/255.0 blue:228.0/255.0 alpha:1.0]; - UISearchController *searchController = [[UISearchController alloc] initWithSearchResultsController:searchResultsController]; - searchController.searchResultsUpdater = self; - searchController.searchBar.delegate = self; - searchController.searchBar.autocapitalizationType = UITextAutocapitalizationTypeNone; - searchController.searchBar.searchBarStyle = UISearchBarStyleProminent; - searchController.searchBar.barTintColor = dashBlueColor; - searchController.searchBar.tintColor = [UIColor whiteColor]; - UITextField *searchTextField = TextFieldSubviewOfView(searchController.searchBar); - searchTextField.tintColor = dashBlueColor; - UIView *textfieldBackground = searchTextField.subviews.firstObject; - textfieldBackground.backgroundColor = [UIColor whiteColor]; - textfieldBackground.layer.cornerRadius = 10; - textfieldBackground.clipsToBounds = YES; - if (@available(iOS 11.0, *)) { - self.navigationItem.searchController = searchController; - self.navigationItem.hidesSearchBarWhenScrolling = NO; - } else { - self.tableView.tableHeaderView = searchController.searchBar; - } - self.searchController = searchController; -} - -#pragma mark - Table view data source - -- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath { - [tableView deselectRowAtIndexPath:indexPath animated:YES]; - - DSSimplifiedMasternodeEntryEntity *simplifiedMasternodeEntryEntity = [self.fetchedResultsController objectAtIndexPath:indexPath]; - DWMasternodeDetailViewController * masternodeDetailViewController = (DWMasternodeDetailViewController*)[self.storyboard instantiateViewControllerWithIdentifier:@"DWMasternodeDetailViewControllerId"]; - masternodeDetailViewController.simplifiedMasternodeEntry = simplifiedMasternodeEntryEntity.simplifiedMasternodeEntry; - masternodeDetailViewController.localMasternode = simplifiedMasternodeEntryEntity.localMasternode?[simplifiedMasternodeEntryEntity.localMasternode loadLocalMasternode]:nil; - [self.navigationController pushViewController:masternodeDetailViewController animated:YES]; -} - --(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender { - if ([segue.identifier isEqualToString:@"RegisterMasternodeSegue"]) { - UINavigationController * navigationController = (UINavigationController*)segue.destinationViewController; - DWRegisterMasternodeViewController * registerMasternodeViewController = (DWRegisterMasternodeViewController*)navigationController.topViewController; - registerMasternodeViewController.chain = self.chain; - } -} - -#pragma mark UISearchResultsUpdating - -- (void)updateSearchResultsForSearchController:(UISearchController *)searchController { - [self.searchResultsController updateSearchString:searchController.searchBar.text]; -} - -#pragma mark UISearchBarDelegate - -- (void)searchBarSearchButtonClicked:(UISearchBar *)searchBar { - [searchBar resignFirstResponder]; -} - -@end diff --git a/DashWallet/Masternode Keys/DWProviderUpdateRegistrarTransactionsViewController.h b/DashWallet/Masternode Keys/DWProviderUpdateRegistrarTransactionsViewController.h deleted file mode 100644 index abe2b20b6..000000000 --- a/DashWallet/Masternode Keys/DWProviderUpdateRegistrarTransactionsViewController.h +++ /dev/null @@ -1,21 +0,0 @@ -// -// DWProviderUpdateRegistrarTransactionsViewController.h -// DashWallet -// -// Created by Sam Westrich on 3/3/19. -// Copyright © 2019 Dash Core Group. All rights reserved. -// - -#import - -@class DSLocalMasternode; - -NS_ASSUME_NONNULL_BEGIN - -@interface DWProviderUpdateRegistrarTransactionsViewController : UITableViewController - -@property (nonatomic,strong) DSLocalMasternode * localMasternode; - -@end - -NS_ASSUME_NONNULL_END diff --git a/DashWallet/Masternode Keys/DWProviderUpdateRegistrarTransactionsViewController.m b/DashWallet/Masternode Keys/DWProviderUpdateRegistrarTransactionsViewController.m deleted file mode 100644 index 6eef51ffa..000000000 --- a/DashWallet/Masternode Keys/DWProviderUpdateRegistrarTransactionsViewController.m +++ /dev/null @@ -1,97 +0,0 @@ -// -// DWProviderUpdateRegistrarTransactionsViewController.m -// DashWallet -// -// Created by Sam Westrich on 3/3/19. -// Copyright © 2019 Dash Core Group. All rights reserved. -// - -#import "DWProviderUpdateRegistrarTransactionsViewController.h" -#import "DWProviderUpdateRegistrarTableViewCell.h" - -@interface DWProviderUpdateRegistrarTransactionsViewController () - -@end - -@implementation DWProviderUpdateRegistrarTransactionsViewController - -- (void)viewDidLoad { - [super viewDidLoad]; - - // Uncomment the following line to preserve selection between presentations. - // self.clearsSelectionOnViewWillAppear = NO; - - // Uncomment the following line to display an Edit button in the navigation bar for this view controller. - // self.navigationItem.rightBarButtonItem = self.editButtonItem; -} - -#pragma mark - Table view data source - -- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView { - return 1; -} - -- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section { - return self.localMasternode.providerUpdateRegistrarTransactions.count; -} - - -- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { - static NSString * reuseIdentifier = @"RegistrarTransactionCellIdentifier"; - DWProviderUpdateRegistrarTableViewCell *cell = (DWProviderUpdateRegistrarTableViewCell*)[tableView dequeueReusableCellWithIdentifier:reuseIdentifier forIndexPath:indexPath]; - - DSProviderUpdateRegistrarTransaction * transaction = [self.localMasternode.providerUpdateRegistrarTransactions objectAtIndex:indexPath.row]; - - cell.blockHeightLabel.text = [NSString stringWithFormat:@"%d",transaction.blockHeight]; - cell.operatorKeyLabel.text = [NSData dataWithUInt384:transaction.operatorKey].hexString; - cell.payToAddressLabel.text = [NSString addressWithScriptPubKey:transaction.scriptPayout onChain:transaction.chain]; - - return cell; -} - - -/* -// Override to support conditional editing of the table view. -- (BOOL)tableView:(UITableView *)tableView canEditRowAtIndexPath:(NSIndexPath *)indexPath { - // Return NO if you do not want the specified item to be editable. - return YES; -} -*/ - -/* -// Override to support editing the table view. -- (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath { - if (editingStyle == UITableViewCellEditingStyleDelete) { - // Delete the row from the data source - [tableView deleteRowsAtIndexPaths:@[indexPath] withRowAnimation:UITableViewRowAnimationFade]; - } else if (editingStyle == UITableViewCellEditingStyleInsert) { - // Create a new instance of the appropriate class, insert it into the array, and add a new row to the table view - } -} -*/ - -/* -// Override to support rearranging the table view. -- (void)tableView:(UITableView *)tableView moveRowAtIndexPath:(NSIndexPath *)fromIndexPath toIndexPath:(NSIndexPath *)toIndexPath { -} -*/ - -/* -// Override to support conditional rearranging of the table view. -- (BOOL)tableView:(UITableView *)tableView canMoveRowAtIndexPath:(NSIndexPath *)indexPath { - // Return NO if you do not want the item to be re-orderable. - return YES; -} -*/ - -/* -#pragma mark - Navigation - -// In a storyboard-based application, you will often want to do a little preparation before navigation -- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender { - // Get the new view controller using [segue destinationViewController]. - // Pass the selected object to the new view controller. -} -*/ - -@end diff --git a/DashWallet/Masternode Keys/DWProviderUpdateServiceTransactionsViewController.h b/DashWallet/Masternode Keys/DWProviderUpdateServiceTransactionsViewController.h deleted file mode 100644 index 9576985c4..000000000 --- a/DashWallet/Masternode Keys/DWProviderUpdateServiceTransactionsViewController.h +++ /dev/null @@ -1,21 +0,0 @@ -// -// DWProviderUpdateServiceTransactionsViewController.h -// DashWallet -// -// Created by Sam Westrich on 3/3/19. -// Copyright © 2019 Dash Core Group. All rights reserved. -// - -#import - -@class DSLocalMasternode; - -NS_ASSUME_NONNULL_BEGIN - -@interface DWProviderUpdateServiceTransactionsViewController : UITableViewController - -@property (nonatomic,strong) DSLocalMasternode * localMasternode; - -@end - -NS_ASSUME_NONNULL_END diff --git a/DashWallet/Masternode Keys/DWProviderUpdateServiceTransactionsViewController.m b/DashWallet/Masternode Keys/DWProviderUpdateServiceTransactionsViewController.m deleted file mode 100644 index 30ddd1514..000000000 --- a/DashWallet/Masternode Keys/DWProviderUpdateServiceTransactionsViewController.m +++ /dev/null @@ -1,103 +0,0 @@ -// -// DWProviderUpdateServiceTransactionsViewController.m -// DashWallet -// -// Created by Sam Westrich on 3/3/19. -// Copyright © 2019 Dash Core Group. All rights reserved. -// - -#import "DWProviderUpdateServiceTransactionsViewController.h" -#import "DSLocalMasternode.h" -#import "DWProviderUpdateServiceTableViewCell.h" -#import "DSProviderUpdateServiceTransaction.h" -#import "NSData+Bitcoin.h" -#import "NSString+Dash.h" -#include - -@interface DWProviderUpdateServiceTransactionsViewController () - -@end - -@implementation DWProviderUpdateServiceTransactionsViewController - -- (void)viewDidLoad { - [super viewDidLoad]; - - // Uncomment the following line to preserve selection between presentations. - // self.clearsSelectionOnViewWillAppear = NO; - - // Uncomment the following line to display an Edit button in the navigation bar for this view controller. - // self.navigationItem.rightBarButtonItem = self.editButtonItem; -} - -#pragma mark - Table view data source - -- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView { - return 1; -} - -- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section { - return self.localMasternode.providerUpdateServiceTransactions.count; -} - - -- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { - static NSString * reuseIdentifier = @"ServiceTransactionCellIdentifier"; - DWProviderUpdateServiceTableViewCell *cell = (DWProviderUpdateServiceTableViewCell*)[tableView dequeueReusableCellWithIdentifier:reuseIdentifier forIndexPath:indexPath]; - - DSProviderUpdateServiceTransaction * transaction = [self.localMasternode.providerUpdateServiceTransactions objectAtIndex:indexPath.row]; - - cell.blockHeightLabel.text = [NSString stringWithFormat:@"%d",transaction.blockHeight]; - cell.operatorRewardPayoutAddressLabel.text = (transaction.scriptPayout.length?[NSString addressWithScriptPubKey:transaction.scriptPayout onChain:transaction.chain]:@""); - char s[INET6_ADDRSTRLEN]; - uint32_t ipAddress = transaction.ipAddress.u32[3]; - cell.locationLabel.text = [NSString stringWithFormat:@"%s:%d",inet_ntop(AF_INET, &ipAddress, s, sizeof(s)),self.localMasternode.port]; - return cell; -} - - -/* -// Override to support conditional editing of the table view. -- (BOOL)tableView:(UITableView *)tableView canEditRowAtIndexPath:(NSIndexPath *)indexPath { - // Return NO if you do not want the specified item to be editable. - return YES; -} -*/ - -/* -// Override to support editing the table view. -- (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath { - if (editingStyle == UITableViewCellEditingStyleDelete) { - // Delete the row from the data source - [tableView deleteRowsAtIndexPaths:@[indexPath] withRowAnimation:UITableViewRowAnimationFade]; - } else if (editingStyle == UITableViewCellEditingStyleInsert) { - // Create a new instance of the appropriate class, insert it into the array, and add a new row to the table view - } -} -*/ - -/* -// Override to support rearranging the table view. -- (void)tableView:(UITableView *)tableView moveRowAtIndexPath:(NSIndexPath *)fromIndexPath toIndexPath:(NSIndexPath *)toIndexPath { -} -*/ - -/* -// Override to support conditional rearranging of the table view. -- (BOOL)tableView:(UITableView *)tableView canMoveRowAtIndexPath:(NSIndexPath *)indexPath { - // Return NO if you do not want the item to be re-orderable. - return YES; -} -*/ - -/* -#pragma mark - Navigation - -// In a storyboard-based application, you will often want to do a little preparation before navigation -- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender { - // Get the new view controller using [segue destinationViewController]. - // Pass the selected object to the new view controller. -} -*/ - -@end diff --git a/DashWallet/Masternode Keys/DWReclaimMasternodeViewController.h b/DashWallet/Masternode Keys/DWReclaimMasternodeViewController.h deleted file mode 100644 index 33def175e..000000000 --- a/DashWallet/Masternode Keys/DWReclaimMasternodeViewController.h +++ /dev/null @@ -1,21 +0,0 @@ -// -// DWReclaimMasternodeViewController.h -// DashWallet -// -// Created by Sam Westrich on 2/28/19. -// Copyright © 2019 Dash Core Group. All rights reserved. -// - -#import - -NS_ASSUME_NONNULL_BEGIN - -@class DSLocalMasternode; - -@interface DWReclaimMasternodeViewController : UITableViewController - -@property (nonatomic,strong) DSLocalMasternode * localMasternode; - -@end - -NS_ASSUME_NONNULL_END diff --git a/DashWallet/Masternode Keys/DWReclaimMasternodeViewController.m b/DashWallet/Masternode Keys/DWReclaimMasternodeViewController.m deleted file mode 100644 index b6f91dd88..000000000 --- a/DashWallet/Masternode Keys/DWReclaimMasternodeViewController.m +++ /dev/null @@ -1,88 +0,0 @@ -// -// DWReclaimMasternodeViewController.m -// DashWallet -// -// Created by Sam Westrich on 2/28/19. -// Copyright © 2019 Dash Core Group. All rights reserved. -// - -#import "DWReclaimMasternodeViewController.h" -#import "DWKeyValueTableViewCell.h" -#import "DWEnvironment.h" -#include - -@interface DWReclaimMasternodeViewController () - -@property (nonatomic,strong) DSAccount * account; - -@end - -@implementation DWReclaimMasternodeViewController - -- (void)viewDidLoad { - [super viewDidLoad]; - self.account = [DWEnvironment sharedInstance].currentAccount; -} - -#pragma mark - Table view data source - -- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView { - return 1; -} - -- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section { - return 0; -} - --(UITableViewCell*)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { - switch (indexPath.section) { - case 0: - { - switch (indexPath.row) { - case 0: - return nil; - } - } - } - return nil; -} - --(IBAction)reclaimMasternode:(id)sender { - [self.localMasternode reclaimTransactionToAccount:self.account completion:^(DSTransaction * _Nonnull reclaimTransaction) { - if (reclaimTransaction) { - DSMasternodeHoldingsDerivationPath * derivationPath = [[DSDerivationPathFactory sharedInstance] providerFundsDerivationPathForWallet:self.localMasternode.holdingKeysWallet]; - [derivationPath signTransaction:reclaimTransaction withPrompt:@"Would you like to update this masternode?" completion:^(BOOL signedTransaction, BOOL cancelled) { - if (signedTransaction) { - [self.localMasternode.providerRegistrationTransaction.chain.chainManager.transactionManager publishTransaction:reclaimTransaction completion:^(NSError * _Nullable error) { - if (error) { - [self raiseIssue:@"Error" message:error.localizedDescription]; - } else { - //[masternode registerInWallet]; - [self.presentingViewController dismissViewControllerAnimated:TRUE completion:nil]; - } - }]; - } else { - [self raiseIssue:@"Error" message:@"Transaction was not signed."]; - } - }]; - } else { - [self raiseIssue:@"Error" message:@"Unable to create Reclaim Transaction."]; - } - }]; -} - --(void)raiseIssue:(NSString*)issue message:(NSString*)message { - UIAlertController * alert = [UIAlertController alertControllerWithTitle:issue message:message preferredStyle:UIAlertControllerStyleAlert]; - [alert addAction:[UIAlertAction actionWithTitle:@"Ok" style:UIAlertActionStyleCancel handler:^(UIAlertAction * _Nonnull action) { - - }]]; - [self presentViewController:alert animated:TRUE completion:^{ - - }]; -} - --(IBAction)cancel { - [self.presentingViewController dismissViewControllerAnimated:TRUE completion:nil]; -} - -@end diff --git a/DashWallet/Masternode Keys/DWRegisterMasternodeViewController.h b/DashWallet/Masternode Keys/DWRegisterMasternodeViewController.h deleted file mode 100644 index 0e15ea137..000000000 --- a/DashWallet/Masternode Keys/DWRegisterMasternodeViewController.h +++ /dev/null @@ -1,20 +0,0 @@ -// -// DWRegisterMasternodeViewController.h -// DashWallet -// -// Created by Sam Westrich on 2/9/19. -// Copyright © 2019 Dash Core Group. All rights reserved. -// - -#import -#import "DWSignPayloadViewController.h" - -NS_ASSUME_NONNULL_BEGIN - -@interface DWRegisterMasternodeViewController : UITableViewController - -@property (nonatomic,strong) DSChain * chain; - -@end - -NS_ASSUME_NONNULL_END diff --git a/DashWallet/Masternode Keys/DWRegisterMasternodeViewController.m b/DashWallet/Masternode Keys/DWRegisterMasternodeViewController.m deleted file mode 100644 index 8e494482d..000000000 --- a/DashWallet/Masternode Keys/DWRegisterMasternodeViewController.m +++ /dev/null @@ -1,212 +0,0 @@ -// -// DWRegisterMasternodeViewController.m -// DashWallet -// -// Created by Sam Westrich on 2/9/19. -// Copyright © 2019 Dash Core Group. All rights reserved. -// - -#import "DWRegisterMasternodeViewController.h" -#import "DWKeyValueTableViewCell.h" -#import "DWSignPayloadViewController.h" -#import "DWEnvironment.h" -#include - -@interface DWRegisterMasternodeViewController () - -@property (nonatomic,strong) DWKeyValueTableViewCell * collateralTransactionTableViewCell; -@property (nonatomic,strong) DWKeyValueTableViewCell * collateralIndexTableViewCell; -@property (nonatomic,strong) DWKeyValueTableViewCell * ipAddressTableViewCell; -@property (nonatomic,strong) DWKeyValueTableViewCell * portTableViewCell; -@property (nonatomic,strong) DWKeyValueTableViewCell * payToAddressTableViewCell; -@property (nonatomic,strong) DWKeyValueTableViewCell * ownerIndexTableViewCell; -@property (nonatomic,strong) DWKeyValueTableViewCell * operatorIndexTableViewCell; -@property (nonatomic,strong) DWKeyValueTableViewCell * votingIndexTableViewCell; -@property (nonatomic,strong) DSAccount * account; -@property (nonatomic,strong) DSWallet * wallet; -@property (nonatomic,strong) DSProviderRegistrationTransaction * providerRegistrationTransaction; -@property (nonatomic,strong) DSTransaction * collateralTransaction; - -@end - -@implementation DWRegisterMasternodeViewController - -- (void)viewDidLoad { - [super viewDidLoad]; - self.payToAddressTableViewCell = [self.tableView dequeueReusableCellWithIdentifier:@"MasternodePayoutAddressCellIdentifier"]; - self.collateralTransactionTableViewCell = [self.tableView dequeueReusableCellWithIdentifier:@"MasternodeCollateralTransactionCellIdentifier"]; - self.collateralIndexTableViewCell = [self.tableView dequeueReusableCellWithIdentifier:@"MasternodeCollateralIndexCellIdentifier"]; - self.ipAddressTableViewCell = [self.tableView dequeueReusableCellWithIdentifier:@"MasternodeIPAddressCellIdentifier"]; - self.portTableViewCell = [self.tableView dequeueReusableCellWithIdentifier:@"MasternodePortCellIdentifier"]; - self.portTableViewCell.valueTextField.text = [NSString stringWithFormat:@"%d",self.chain.standardPort]; - self.ownerIndexTableViewCell = [self.tableView dequeueReusableCellWithIdentifier:@"MasternodeOwnerIndexCellIdentifier"]; - self.votingIndexTableViewCell = [self.tableView dequeueReusableCellWithIdentifier:@"MasternodeVotingIndexCellIdentifier"]; - self.operatorIndexTableViewCell = [self.tableView dequeueReusableCellWithIdentifier:@"MasternodeOperatorIndexCellIdentifier"]; - self.wallet = [DWEnvironment sharedInstance].currentWallet; - self.account = [DWEnvironment sharedInstance].currentAccount; -} - -#pragma mark - Table view data source - -- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView { - return 1; -} - -- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section { - return 8; -} - --(UITableViewCell*)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { - switch (indexPath.section) { - case 0: - { - switch (indexPath.row) { - case 0: - return self.collateralTransactionTableViewCell; - case 1: - return self.collateralIndexTableViewCell; - case 2: - return self.ipAddressTableViewCell; - case 3: - return self.portTableViewCell; - case 4: - return self.ownerIndexTableViewCell; - case 5: - return self.operatorIndexTableViewCell; - case 6: - return self.votingIndexTableViewCell; - case 7: - return self.payToAddressTableViewCell; - } - } - } - return nil; -} - --(void)signTransactionInputs:(DSProviderRegistrationTransaction*)providerRegistrationTransaction { - [self.account signTransaction:providerRegistrationTransaction withPrompt:@"Would you like to register this masternode?" completion:^(BOOL signedTransaction, BOOL cancelled) { - if (signedTransaction) { - [self.chain.chainManager.transactionManager publishTransaction:providerRegistrationTransaction completion:^(NSError * _Nullable error) { - if (error) { - [self raiseIssue:@"Error" message:error.localizedDescription]; - } else { - //[masternode registerInWallet]; - [self.presentingViewController dismissViewControllerAnimated:TRUE completion:nil]; - } - }]; - } else { - [self raiseIssue:@"Error" message:@"Transaction was not signed."]; - } - }]; -} - --(IBAction)registerMasternode:(id)sender { - NSString * ipAddressString = [self.ipAddressTableViewCell.valueTextField.text stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]]; - NSString * portString = [self.portTableViewCell.valueTextField.text stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]]; - UInt128 ipAddress = { .u32 = { 0, 0, CFSwapInt32HostToBig(0xffff), 0 } }; - struct in_addr addrV4; - if (inet_aton([ipAddressString UTF8String], &addrV4) != 0) { - uint32_t ip = ntohl(addrV4.s_addr); - ipAddress.u32[3] = CFSwapInt32HostToBig(ip); - DSDLog(@"%08x", ip); - } - uint16_t port = [portString intValue]; - - uint32_t ownerWalletIndex = UINT32_MAX; - uint32_t votingWalletIndex = UINT32_MAX; - uint32_t operatorWalletIndex = UINT32_MAX; - - if (self.ownerIndexTableViewCell.valueTextField.text && ![self.ownerIndexTableViewCell.valueTextField.text isEqualToString:@""]) { - ownerWalletIndex = (uint32_t)[self.ownerIndexTableViewCell.valueTextField.text integerValue]; - } - - if (self.operatorIndexTableViewCell.valueTextField.text && ![self.operatorIndexTableViewCell.valueTextField.text isEqualToString:@""]) { - operatorWalletIndex = (uint32_t)[self.operatorIndexTableViewCell.valueTextField.text integerValue]; - } - - if (self.votingIndexTableViewCell.valueTextField.text && ![self.votingIndexTableViewCell.valueTextField.text isEqualToString:@""]) { - votingWalletIndex = (uint32_t)[self.votingIndexTableViewCell.valueTextField.text integerValue]; - } - - DSLocalMasternode * masternode = [self.chain.chainManager.masternodeManager createNewMasternodeWithIPAddress:ipAddress onPort:port inFundsWallet:self.wallet fundsWalletIndex:UINT32_MAX inOperatorWallet:self.wallet operatorWalletIndex:operatorWalletIndex inOwnerWallet:self.wallet ownerWalletIndex:ownerWalletIndex inVotingWallet:self.wallet votingWalletIndex:votingWalletIndex]; - - NSString * payoutAddress = [self.payToAddressTableViewCell.valueTextField.text isValidDashAddressOnChain:self.chain]?self.payToAddressTableViewCell.textLabel.text:self.account.receiveAddress; - - - DSUTXO collateral = DSUTXO_ZERO; - UInt256 nonReversedCollateralHash = UINT256_ZERO; - NSString * collateralTransactionHash = self.collateralTransactionTableViewCell.valueTextField.text; - if (![collateralTransactionHash isEqual:@""]) { - NSData * collateralTransactionHashData = [collateralTransactionHash hexToData]; - if (collateralTransactionHashData.length != 32) return; - collateral.hash = collateralTransactionHashData.reverse.UInt256; - - nonReversedCollateralHash = collateralTransactionHashData.UInt256; - collateral.n = [self.collateralIndexTableViewCell.valueTextField.text integerValue]; - - } - - - [masternode registrationTransactionFundedByAccount:self.account toAddress:payoutAddress withCollateral:collateral completion:^(DSProviderRegistrationTransaction * _Nonnull providerRegistrationTransaction) { - if (providerRegistrationTransaction) { - if (dsutxo_is_zero(collateral)) { - [self signTransactionInputs:providerRegistrationTransaction]; - } else { - [[DSInsightManager sharedInstance] queryInsightForTransactionWithHash:nonReversedCollateralHash onChain:self.chain completion:^(DSTransaction *transaction, NSError *error) { - NSIndexSet * indexSet = [[transaction outputAmounts] indexesOfObjectsPassingTest:^BOOL(id _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) { - if ([obj isEqual:@(MASTERNODE_COST)]) return TRUE; - return FALSE; - }]; - if ([indexSet containsIndex:collateral.n]) { - self.collateralTransaction = transaction; - self.providerRegistrationTransaction = providerRegistrationTransaction; - dispatch_async(dispatch_get_main_queue(), ^{ - [self performSegueWithIdentifier:@"PayloadSigningSegue" sender:self]; - }); - } else { - dispatch_async(dispatch_get_main_queue(), ^{ - [self raiseIssue:@"Error" message:@"Incorrect collateral index"]; - }); - } - - }]; - - - } - - } else { - [self raiseIssue:@"Error" message:@"Unable to create ProviderRegistrationTransaction."]; - } - }]; -} - --(void)raiseIssue:(NSString*)issue message:(NSString*)message { - UIAlertController * alert = [UIAlertController alertControllerWithTitle:issue message:message preferredStyle:UIAlertControllerStyleAlert]; - [alert addAction:[UIAlertAction actionWithTitle:@"Ok" style:UIAlertActionStyleCancel handler:^(UIAlertAction * _Nonnull action) { - - }]]; - [self presentViewController:alert animated:TRUE completion:^{ - - }]; -} - --(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender { - if ([segue.identifier isEqualToString:@"PayloadSigningSegue"]) { - DWSignPayloadViewController * signPayloadSegue = (DWSignPayloadViewController*)segue.destinationViewController; - signPayloadSegue.collateralAddress = self.collateralTransaction.outputAddresses[self.providerRegistrationTransaction.collateralOutpoint.n]; - signPayloadSegue.providerRegistrationTransaction = self.providerRegistrationTransaction; - signPayloadSegue.delegate = self; - } -} - --(IBAction)cancel { - [self.presentingViewController dismissViewControllerAnimated:TRUE completion:nil]; -} - -- (void)viewController:(nonnull UIViewController *)controller didReturnSignature:(nonnull NSData *)signature { - self.providerRegistrationTransaction.payloadSignature = signature; - [self signTransactionInputs:self.providerRegistrationTransaction]; -} - - -@end diff --git a/DashWallet/Masternode Keys/DWResultsMasternodeViewController.h b/DashWallet/Masternode Keys/DWResultsMasternodeViewController.h deleted file mode 100644 index 2efd91e9d..000000000 --- a/DashWallet/Masternode Keys/DWResultsMasternodeViewController.h +++ /dev/null @@ -1,26 +0,0 @@ -// -// Created by Andrew Podkovyrin -// Copyright © 2019 Dash Core Group. All rights reserved. -// -// Licensed under the MIT License (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// https://opensource.org/licenses/MIT -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// - -#import "DWBaseMasternodeViewController.h" - -NS_ASSUME_NONNULL_BEGIN - -@interface DWResultsMasternodeViewController : DWBaseMasternodeViewController - -@end - -NS_ASSUME_NONNULL_END diff --git a/DashWallet/Masternode Keys/DWResultsMasternodeViewController.m b/DashWallet/Masternode Keys/DWResultsMasternodeViewController.m deleted file mode 100644 index 539ee357c..000000000 --- a/DashWallet/Masternode Keys/DWResultsMasternodeViewController.m +++ /dev/null @@ -1,26 +0,0 @@ -// -// Created by Andrew Podkovyrin -// Copyright © 2019 Dash Core Group. All rights reserved. -// -// Licensed under the MIT License (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// https://opensource.org/licenses/MIT -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// - -#import "DWResultsMasternodeViewController.h" - -NS_ASSUME_NONNULL_BEGIN - -@implementation DWResultsMasternodeViewController - -@end - -NS_ASSUME_NONNULL_END diff --git a/DashWallet/Masternode Keys/DWSignMessageViewController.h b/DashWallet/Masternode Keys/DWSignMessageViewController.h deleted file mode 100644 index 73d4cffb0..000000000 --- a/DashWallet/Masternode Keys/DWSignMessageViewController.h +++ /dev/null @@ -1,28 +0,0 @@ -// -// Created by Sam Westrich -// Copyright © 2019 Dash Core Group. All rights reserved. -// -// Licensed under the MIT License (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// https://opensource.org/licenses/MIT -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// - -#import - -NS_ASSUME_NONNULL_BEGIN - -@interface DWSignMessageViewController : UIViewController - -@property (nonatomic,strong) DSKey * key; - -@end - -NS_ASSUME_NONNULL_END diff --git a/DashWallet/Masternode Keys/DWSignMessageViewController.m b/DashWallet/Masternode Keys/DWSignMessageViewController.m deleted file mode 100644 index 5dbe20f72..000000000 --- a/DashWallet/Masternode Keys/DWSignMessageViewController.m +++ /dev/null @@ -1,54 +0,0 @@ -// -// Created by Sam Westrich -// Copyright © 2019 Dash Core Group. All rights reserved. -// -// Licensed under the MIT License (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// https://opensource.org/licenses/MIT -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// - -#import "DWSignMessageViewController.h" - -@interface DWSignMessageViewController () - -@property (strong, nonatomic) IBOutlet UITextView *signatureMessageInputTextView; -@property (strong, nonatomic) IBOutlet UITextView *signatureMessageResultTextView; - -@end - -@implementation DWSignMessageViewController - -- (void)viewDidLoad { - [super viewDidLoad]; - // Do any additional setup after loading the view. -} - -- (IBAction)sign:(id)sender { - NSMutableData * stringMessageData = [NSMutableData data]; - [stringMessageData appendString:DASH_MESSAGE_MAGIC]; - [stringMessageData appendString:self.signatureMessageInputTextView.text]; - NSData * data = nil; - - if ([self.key isKindOfClass:[DSBLSKey class]]) { - DSBLSKey * blsKey = (DSBLSKey *)_key; - [blsKey signDigest:stringMessageData.SHA256_2]; - } else { - DSECDSAKey * ecdsaKey = (DSECDSAKey *)_key; - data = [ecdsaKey compactSign:stringMessageData.SHA256_2]; - } - - if (data) { - [self.signatureMessageResultTextView setText:[data base64EncodedStringWithOptions:0]]; - } - -} - -@end diff --git a/DashWallet/Masternode Keys/DWSignPayloadViewController.h b/DashWallet/Masternode Keys/DWSignPayloadViewController.h deleted file mode 100644 index a18d6be6b..000000000 --- a/DashWallet/Masternode Keys/DWSignPayloadViewController.h +++ /dev/null @@ -1,30 +0,0 @@ -// -// DWSignPayloadViewController.h -// DashWallet -// -// Created by Sam Westrich on 3/8/19. -// Copyright © 2019 Dash Core Group. All rights reserved. -// - -#import - - -@class DSProviderRegistrationTransaction; - -NS_ASSUME_NONNULL_BEGIN - -@protocol DWSignPayloadDelegate - --(void)viewController:(UIViewController*)controller didReturnSignature:(NSData*)signature; - -@end - -@interface DWSignPayloadViewController : UIViewController - -@property (nonatomic,weak) id delegate; -@property (nonatomic,strong) NSString * collateralAddress; -@property (nonatomic,strong) DSProviderRegistrationTransaction * providerRegistrationTransaction; - -@end - -NS_ASSUME_NONNULL_END diff --git a/DashWallet/Masternode Keys/DWSignPayloadViewController.m b/DashWallet/Masternode Keys/DWSignPayloadViewController.m deleted file mode 100644 index 5eb4d84bb..000000000 --- a/DashWallet/Masternode Keys/DWSignPayloadViewController.m +++ /dev/null @@ -1,78 +0,0 @@ -// -// DWSignPayloadViewController.m -// DashWallet -// -// Created by Sam Westrich on 3/8/19. -// Copyright © 2019 Dash Core Group. All rights reserved. -// - -#import "DWSignPayloadViewController.h" -#import "DSProviderRegistrationTransaction.h" -#import "NSMutableData+Dash.h" -#import "NSData+Bitcoin.h" -#import "NSString+Dash.h" -#import "DSECDSAKey.h" -#import "DSAccount.h" -#import "DSWallet.h" - -@interface DWSignPayloadViewController () -@property (strong, nonatomic) IBOutlet UITextView *signatureMessageInputTextView; -@property (strong, nonatomic) IBOutlet UITextView *signatureMessageResultTextView; -@property (strong, nonatomic) IBOutlet UIButton *signButton; - -@end - -@implementation DWSignPayloadViewController - -- (void)viewDidLoad { - [super viewDidLoad]; - self.signatureMessageInputTextView.text = [NSString stringWithFormat:@"signmessage %@ %@",self.collateralAddress, self.providerRegistrationTransaction.payloadCollateralString]; - - if ([self.providerRegistrationTransaction.chain accountContainingAddress:self.collateralAddress]) { - self.signButton.enabled = TRUE; - } else { - self.signButton.enabled = FALSE; - } -} - -/* -#pragma mark - Navigation - -// In a storyboard-based application, you will often want to do a little preparation before navigation -- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender { - // Get the new view controller using [segue destinationViewController]. - // Pass the selected object to the new view controller. -} -*/ -- (IBAction)sign:(id)sender { - - if (self.signatureMessageResultTextView.text && ![self.signatureMessageResultTextView.text isEqualToString:@""]) { - NSData * signature = [[NSData alloc] initWithBase64EncodedString:self.signatureMessageResultTextView.text options:0]; - DSECDSAKey * key = [DSECDSAKey keyRecoveredFromCompactSig:signature andMessageDigest:self.providerRegistrationTransaction.payloadCollateralDigest]; - NSString * address = [key addressForChain:self.providerRegistrationTransaction.chain]; - if ([address isEqualToString:self.collateralAddress]) { - [self.delegate viewController:self didReturnSignature:signature]; - } else { - NSLog(@"Not matching signature"); - } - } else { - DSAccount * account = [self.providerRegistrationTransaction.chain accountContainingAddress:self.collateralAddress]; - - - - - DSFundsDerivationPath * derivationPath = [account derivationPathContainingAddress:self.collateralAddress]; - - NSIndexPath * indexPath = [derivationPath indexPathForKnownAddress:self.collateralAddress]; - - [account.wallet seedWithPrompt:@"Sign?" forAmount:0 completion:^(NSData * _Nullable seed, BOOL cancelled) { - if (seed && !cancelled) { - DSECDSAKey* key = (DSECDSAKey*)[derivationPath privateKeyAtIndexPath:indexPath fromSeed:seed]; - NSData * data = [key compactSign:self.providerRegistrationTransaction.payloadCollateralDigest]; - [self.delegate viewController:self didReturnSignature:data]; - } - }]; - } -} - -@end diff --git a/DashWallet/Masternode Keys/DWUpdateMasternodeRegistrarViewController.h b/DashWallet/Masternode Keys/DWUpdateMasternodeRegistrarViewController.h deleted file mode 100644 index 64f0f6bc3..000000000 --- a/DashWallet/Masternode Keys/DWUpdateMasternodeRegistrarViewController.h +++ /dev/null @@ -1,20 +0,0 @@ -// -// DWUpdateMasternodeRegistrarViewController.h -// DashWallet -// -// Created by Sam Westrich on 2/22/19. -// Copyright © 2019 Dash Core Group. All rights reserved. -// - -#import - -NS_ASSUME_NONNULL_BEGIN - -@interface DWUpdateMasternodeRegistrarViewController : UITableViewController - -@property (nonatomic,strong) DSLocalMasternode * localMasternode; -@property (nonatomic,strong) DSSimplifiedMasternodeEntry * simplifiedMasternodeEntry; - -@end - -NS_ASSUME_NONNULL_END diff --git a/DashWallet/Masternode Keys/DWUpdateMasternodeRegistrarViewController.m b/DashWallet/Masternode Keys/DWUpdateMasternodeRegistrarViewController.m deleted file mode 100644 index e372537c5..000000000 --- a/DashWallet/Masternode Keys/DWUpdateMasternodeRegistrarViewController.m +++ /dev/null @@ -1,101 +0,0 @@ -// -// DWUpdateMasternodeRegistrarViewController.m -// DashWallet -// -// Created by Sam Westrich on 2/22/19. -// Copyright © 2019 Dash Core Group. All rights reserved. -// - -#import "DWUpdateMasternodeRegistrarViewController.h" -#import "DWKeyValueTableViewCell.h" -#import "DWEnvironment.h" -#include - -@interface DWUpdateMasternodeRegistrarViewController () - -@property (nonatomic,strong) DWKeyValueTableViewCell * payoutTableViewCell; -@property (nonatomic,strong) DSAccount * account; -@property (nonatomic,strong) DSWallet * votingWallet; - -@end - -@implementation DWUpdateMasternodeRegistrarViewController - -- (void)viewDidLoad { - [super viewDidLoad]; - self.payoutTableViewCell = [self.tableView dequeueReusableCellWithIdentifier:@"MasternodePayoutAddressCellIdentifier"]; - self.votingWallet = [DWEnvironment sharedInstance].currentWallet; - self.account = [DWEnvironment sharedInstance].currentAccount; -} - -#pragma mark - Table view data source - -- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView { - return 1; -} - -- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section { - return 1; -} - --(UITableViewCell*)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { - switch (indexPath.section) { - case 0: - { - switch (indexPath.row) { - case 0: - return self.payoutTableViewCell; - } - } - } - return nil; -} - --(IBAction)updateMasternode:(id)sender { - UInt160 votingHash; - if (self.votingWallet) { - DSAuthenticationKeysDerivationPath * providerVotingKeysDerivationPath = [DSAuthenticationKeysDerivationPath providerVotingKeysDerivationPathForWallet:self.votingWallet]; - votingHash = providerVotingKeysDerivationPath.firstUnusedPublicKey.hash160; - } else { - votingHash = self.simplifiedMasternodeEntry.keyIDVoting; - } - NSString * payoutAddress = (self.payoutTableViewCell.valueTextField.text && ![self.payoutTableViewCell.valueTextField.text isEqualToString:@""])?self.payoutTableViewCell.valueTextField.text:self.localMasternode - .payoutAddress; - [self.localMasternode updateTransactionFundedByAccount:self.account changeOperator:self.localMasternode.providerRegistrationTransaction.operatorKey changeVotingKeyHash:votingHash changePayoutAddress:payoutAddress completion:^(DSProviderUpdateRegistrarTransaction * _Nonnull providerUpdateRegistrarTransaction) { - - if (providerUpdateRegistrarTransaction) { - [self.account signTransaction:providerUpdateRegistrarTransaction withPrompt:@"Would you like to update this masternode?" completion:^(BOOL signedTransaction, BOOL cancelled) { - if (signedTransaction) { - [self.localMasternode.providerRegistrationTransaction.chain.chainManager.transactionManager publishTransaction:providerUpdateRegistrarTransaction completion:^(NSError * _Nullable error) { - if (error) { - [self raiseIssue:@"Error" message:error.localizedDescription]; - } else { - //[masternode registerInWallet]; - [self.presentingViewController dismissViewControllerAnimated:TRUE completion:nil]; - } - }]; - } else { - [self raiseIssue:@"Error" message:@"Transaction was not signed."]; - } - }]; - } else { - [self raiseIssue:@"Error" message:@"Unable to create ProviderRegistrationTransaction."]; - } - }]; -} - --(void)raiseIssue:(NSString*)issue message:(NSString*)message { - UIAlertController * alert = [UIAlertController alertControllerWithTitle:issue message:message preferredStyle:UIAlertControllerStyleAlert]; - [alert addAction:[UIAlertAction actionWithTitle:@"Ok" style:UIAlertActionStyleCancel handler:^(UIAlertAction * _Nonnull action) { - - }]]; - [self presentViewController:alert animated:TRUE completion:^{ - - }]; -} - --(IBAction)cancel { - [self.presentingViewController dismissViewControllerAnimated:TRUE completion:nil]; -} - -@end diff --git a/DashWallet/Masternode Keys/DWUpdateMasternodeRevocationViewController.h b/DashWallet/Masternode Keys/DWUpdateMasternodeRevocationViewController.h deleted file mode 100644 index 3acabae16..000000000 --- a/DashWallet/Masternode Keys/DWUpdateMasternodeRevocationViewController.h +++ /dev/null @@ -1,17 +0,0 @@ -// -// DWUpdateMasternodeRevocationViewController.h -// DashWallet -// -// Created by Sam Westrich on 2/26/19. -// Copyright © 2019 Dash Core Group. All rights reserved. -// - -#import - -NS_ASSUME_NONNULL_BEGIN - -@interface DWUpdateMasternodeRevocationViewController : UITableViewController - -@end - -NS_ASSUME_NONNULL_END diff --git a/DashWallet/Masternode Keys/DWUpdateMasternodeRevocationViewController.m b/DashWallet/Masternode Keys/DWUpdateMasternodeRevocationViewController.m deleted file mode 100644 index 11bc7860c..000000000 --- a/DashWallet/Masternode Keys/DWUpdateMasternodeRevocationViewController.m +++ /dev/null @@ -1,27 +0,0 @@ -// -// DWUpdateMasternodeRevocationViewController.m -// DashWallet -// -// Created by Sam Westrich on 2/26/19. -// Copyright © 2019 Dash Core Group. All rights reserved. -// - -#import "DWUpdateMasternodeRevocationViewController.h" - -@interface DWUpdateMasternodeRevocationViewController () - -@end - -@implementation DWUpdateMasternodeRevocationViewController - -- (void)viewDidLoad { - [super viewDidLoad]; - - // Uncomment the following line to preserve selection between presentations. - // self.clearsSelectionOnViewWillAppear = NO; - - // Uncomment the following line to display an Edit button in the navigation bar for this view controller. - // self.navigationItem.rightBarButtonItem = self.editButtonItem; -} - -@end diff --git a/DashWallet/Masternode Keys/DWUpdateMasternodeServiceViewController.h b/DashWallet/Masternode Keys/DWUpdateMasternodeServiceViewController.h deleted file mode 100644 index b8957fe29..000000000 --- a/DashWallet/Masternode Keys/DWUpdateMasternodeServiceViewController.h +++ /dev/null @@ -1,21 +0,0 @@ -// -// DWUpdateMasternodeServiceViewController.h -// DashWallet -// -// Created by Sam Westrich on 2/21/19. -// Copyright © 2019 Dash Core Group. All rights reserved. -// - -#import - -NS_ASSUME_NONNULL_BEGIN - -@class DSLocalMasternode; - -@interface DWUpdateMasternodeServiceViewController : UITableViewController - -@property (nonatomic,strong) DSLocalMasternode * localMasternode; - -@end - -NS_ASSUME_NONNULL_END diff --git a/DashWallet/Masternode Keys/DWUpdateMasternodeServiceViewController.m b/DashWallet/Masternode Keys/DWUpdateMasternodeServiceViewController.m deleted file mode 100644 index 4f5f2d149..000000000 --- a/DashWallet/Masternode Keys/DWUpdateMasternodeServiceViewController.m +++ /dev/null @@ -1,107 +0,0 @@ -// -// DWUpdateMasternodeServiceViewController.m -// DashWallet -// -// Created by Sam Westrich on 2/21/19. -// Copyright © 2019 Dash Core Group. All rights reserved. -// - -#import "DWUpdateMasternodeServiceViewController.h" -#import "DWKeyValueTableViewCell.h" -#import "DWEnvironment.h" -#include - -@interface DWUpdateMasternodeServiceViewController () - -@property (nonatomic,strong) DWKeyValueTableViewCell * ipAddressTableViewCell; -@property (nonatomic,strong) DWKeyValueTableViewCell * portTableViewCell; -@property (nonatomic,strong) DSAccount * account; - -@end - -@implementation DWUpdateMasternodeServiceViewController - -- (void)viewDidLoad { - [super viewDidLoad]; - self.ipAddressTableViewCell = [self.tableView dequeueReusableCellWithIdentifier:@"MasternodeIPAddressCellIdentifier"]; - char s[INET6_ADDRSTRLEN]; - uint32_t ipAddress = self.localMasternode.ipAddress.u32[3]; - self.ipAddressTableViewCell.valueTextField.text = [NSString stringWithFormat:@"%s",inet_ntop(AF_INET, &ipAddress, s, sizeof(s))]; - self.portTableViewCell = [self.tableView dequeueReusableCellWithIdentifier:@"MasternodePortCellIdentifier"]; - self.portTableViewCell.valueTextField.text = [NSString stringWithFormat:@"%d",self.localMasternode.port]; - self.account = [DWEnvironment sharedInstance].currentAccount; -} - -#pragma mark - Table view data source - -- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView { - return 1; -} - -- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section { - return 2; -} - --(UITableViewCell*)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { - switch (indexPath.section) { - case 0: - { - switch (indexPath.row) { - case 0: - return self.ipAddressTableViewCell; - case 1: - return self.portTableViewCell; - } - } - } - return nil; -} - --(IBAction)updateMasternode:(id)sender { - NSString * ipAddressString = self.ipAddressTableViewCell.valueTextField.text; - NSString * portString = self.portTableViewCell.valueTextField.text; - UInt128 ipAddress = { .u32 = { 0, 0, CFSwapInt32HostToBig(0xffff), 0 } }; - struct in_addr addrV4; - if (inet_aton([ipAddressString UTF8String], &addrV4) != 0) { - uint32_t ip = ntohl(addrV4.s_addr); - ipAddress.u32[3] = CFSwapInt32HostToBig(ip); - DSDLog(@"%08x", ip); - } - uint16_t port = [portString intValue]; - [self.localMasternode updateTransactionFundedByAccount:self.account toIPAddress:ipAddress port:port payoutAddress:nil completion:^(DSProviderUpdateServiceTransaction * _Nonnull providerUpdateServiceTransaction) { - if (providerUpdateServiceTransaction) { - [self.account signTransaction:providerUpdateServiceTransaction withPrompt:@"Would you like to update this masternode?" completion:^(BOOL signedTransaction, BOOL cancelled) { - if (signedTransaction) { - [self.localMasternode.providerRegistrationTransaction.chain.chainManager.transactionManager publishTransaction:providerUpdateServiceTransaction completion:^(NSError * _Nullable error) { - if (error) { - [self raiseIssue:@"Error" message:error.localizedDescription]; - } else { - //[masternode registerInWallet]; - [self.presentingViewController dismissViewControllerAnimated:TRUE completion:nil]; - } - }]; - } else { - [self raiseIssue:@"Error" message:@"Transaction was not signed."]; - } - }]; - } else { - [self raiseIssue:@"Error" message:@"Unable to create ProviderRegistrationTransaction."]; - } - }]; -} - --(void)raiseIssue:(NSString*)issue message:(NSString*)message { - UIAlertController * alert = [UIAlertController alertControllerWithTitle:issue message:message preferredStyle:UIAlertControllerStyleAlert]; - [alert addAction:[UIAlertAction actionWithTitle:@"Ok" style:UIAlertActionStyleCancel handler:^(UIAlertAction * _Nonnull action) { - - }]]; - [self presentViewController:alert animated:TRUE completion:^{ - - }]; -} - --(IBAction)cancel { - [self.presentingViewController dismissViewControllerAnimated:TRUE completion:nil]; -} - -@end diff --git a/DashWallet/Masternode Keys/Masternode.storyboard b/DashWallet/Masternode Keys/Masternode.storyboard deleted file mode 100644 index a92d1437a..000000000 --- a/DashWallet/Masternode Keys/Masternode.storyboard +++ /dev/null @@ -1,1673 +0,0 @@ - - - - - - - - - - - - - - Montserrat-Medium - - - Montserrat-Regular - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/DashWallet/Settings/DWSettingsViewController.m b/DashWallet/Settings/DWSettingsViewController.m index 6da2c430e..fd2bb7c0c 100644 --- a/DashWallet/Settings/DWSettingsViewController.m +++ b/DashWallet/Settings/DWSettingsViewController.m @@ -208,7 +208,7 @@ - (DWSettingsControllerModel *)model { } { - DWSelectorFormCellModel *cellModel = [[DWSelectorFormCellModel alloc] initWithTitle:NSLocalizedString(@"Show masternode keys", nil)]; + DWSelectorFormCellModel *cellModel = [[DWSelectorFormCellModel alloc] initWithTitle:NSLocalizedString(@"Masternode control", nil)]; cellModel.accessoryType = UITableViewCellAccessoryDisclosureIndicator; cellModel.didSelectBlock = ^(DWSelectorFormCellModel *_Nonnull cellModel, NSIndexPath *_Nonnull indexPath) { __strong typeof(weakSelf) strongSelf = weakSelf; @@ -474,7 +474,7 @@ - (void)showChangeNetworkFromSourceView:(UIView *)sourceView sourceRect:(CGRect) - (void)showMasternodeKeys { [DSEventManager saveEvent:@"settings:show_masternode_keys"]; DSAuthenticationManager *authenticationManager = [DSAuthenticationManager sharedInstance]; - [authenticationManager authenticateWithPrompt:NSLocalizedString(@"Show masternode keys", nil) andTouchId:YES alertIfLockout:YES completion:^(BOOL authenticated, BOOL cancelled) { + [authenticationManager authenticateWithPrompt:NSLocalizedString(@"Masternode control", nil) andTouchId:YES alertIfLockout:YES completion:^(BOOL authenticated, BOOL cancelled) { if (authenticated) { // DWKeysOverviewViewController *keysViewController = [DWKeysOverviewViewController controller]; // [self.navigationController pushViewController:keysViewController animated:YES]; diff --git a/DashWallet/Sources/UI/Menu/Tools/DWToolsMenuViewController.m b/DashWallet/Sources/UI/Menu/Tools/DWToolsMenuViewController.m index 07d2dbd21..6858af534 100644 --- a/DashWallet/Sources/UI/Menu/Tools/DWToolsMenuViewController.m +++ b/DashWallet/Sources/UI/Menu/Tools/DWToolsMenuViewController.m @@ -84,6 +84,20 @@ - (DWToolsMenuModel *)model { [items addObject:cellModel]; } + { + DWSelectorFormCellModel *cellModel = [[DWSelectorFormCellModel alloc] initWithTitle:NSLocalizedString(@"Masternode Control", nil)]; + cellModel.accessoryType = DWSelectorFormAccessoryType_DisclosureIndicator; + cellModel.didSelectBlock = ^(DWSelectorFormCellModel *_Nonnull cellModel, NSIndexPath *_Nonnull indexPath) { + __strong typeof(weakSelf) strongSelf = weakSelf; + if (!strongSelf) { + return; + } + + [strongSelf showMasternodeControl]; + }; + [items addObject:cellModel]; + } + return items; } @@ -133,6 +147,11 @@ - (void)showMasternodeKeys { [self.navigationController pushViewController:keysViewController animated:YES]; } +- (void)showMasternodeControl { + DWKeysOverviewViewController *keysViewController = [[DWKeysOverviewViewController alloc] init]; + [self.navigationController pushViewController:keysViewController animated:YES]; +} + @end NS_ASSUME_NONNULL_END diff --git a/DashWallet/ar.lproj/Localizable.strings b/DashWallet/ar.lproj/Localizable.strings index 4a44d9a82..6f1acad86 100644 --- a/DashWallet/ar.lproj/Localizable.strings +++ b/DashWallet/ar.lproj/Localizable.strings @@ -464,6 +464,12 @@ /* No comment provided by engineer. */ "Long press to copy ID" = "Long press to copy ID"; +/* No comment provided by engineer. */ +"Masternode control" = "Masternode control"; + +/* No comment provided by engineer. */ +"Masternode Control" = "Masternode Control"; + /* No comment provided by engineer. */ "Masternode holding address" = "Masternode holding address"; @@ -476,6 +482,9 @@ /* No comment provided by engineer. */ "Masternode Update Service Transaction" = "Masternode Update Service Transaction"; +/* No comment provided by engineer. */ +"Masternodes" = "Masternodes"; + /* Contracted variant of 'Maximum' word */ "Max" = "Max"; @@ -497,6 +506,9 @@ /* No comment provided by engineer. */ "Moved to Address" = "Moved to Address"; +/* No comment provided by engineer. */ +"My Masternodes" = "My Masternodes"; + /* No comment provided by engineer. */ "Network" = "Network"; @@ -551,6 +563,9 @@ /* No comment provided by engineer. */ "Not owner" = "Not owner"; +/* No comment provided by engineer. */ +"Not used" = "Not used"; + /* No comment provided by engineer. */ "Not voter" = "Not voter"; @@ -866,9 +881,6 @@ /* No comment provided by engineer. */ "Show Masternode Keys" = "Show Masternode Keys"; -/* No comment provided by engineer. */ -"Show masternode keys" = "Show masternode keys"; - /* No comment provided by engineer. */ "show phrase" = "إظهار الجملة"; @@ -878,6 +890,9 @@ /* No comment provided by engineer. */ "Show Recovery Phrase" = "Show Recovery Phrase"; +/* No comment provided by engineer. */ +"Sign Message" = "Sign Message"; + /* No comment provided by engineer. */ "Size:" = "Size:"; diff --git a/DashWallet/bg.lproj/Localizable.strings b/DashWallet/bg.lproj/Localizable.strings index 2603c8af8..286c863e6 100644 --- a/DashWallet/bg.lproj/Localizable.strings +++ b/DashWallet/bg.lproj/Localizable.strings @@ -464,6 +464,12 @@ /* No comment provided by engineer. */ "Long press to copy ID" = "Long press to copy ID"; +/* No comment provided by engineer. */ +"Masternode control" = "Masternode control"; + +/* No comment provided by engineer. */ +"Masternode Control" = "Masternode Control"; + /* No comment provided by engineer. */ "Masternode holding address" = "Masternode holding address"; @@ -476,6 +482,9 @@ /* No comment provided by engineer. */ "Masternode Update Service Transaction" = "Masternode актуализира обслужващата транзакция"; +/* No comment provided by engineer. */ +"Masternodes" = "Masternodes"; + /* Contracted variant of 'Maximum' word */ "Max" = "Max"; @@ -497,6 +506,9 @@ /* No comment provided by engineer. */ "Moved to Address" = "Moved to Address"; +/* No comment provided by engineer. */ +"My Masternodes" = "My Masternodes"; + /* No comment provided by engineer. */ "Network" = "Мрежа"; @@ -551,6 +563,9 @@ /* No comment provided by engineer. */ "Not owner" = "Not owner"; +/* No comment provided by engineer. */ +"Not used" = "Not used"; + /* No comment provided by engineer. */ "Not voter" = "Not voter"; @@ -866,9 +881,6 @@ /* No comment provided by engineer. */ "Show Masternode Keys" = "Show Masternode Keys"; -/* No comment provided by engineer. */ -"Show masternode keys" = "Покажи masternode ключове"; - /* No comment provided by engineer. */ "show phrase" = "покажи фраза"; @@ -878,6 +890,9 @@ /* No comment provided by engineer. */ "Show Recovery Phrase" = "Show Recovery Phrase"; +/* No comment provided by engineer. */ +"Sign Message" = "Sign Message"; + /* No comment provided by engineer. */ "Size:" = "Size:"; diff --git a/DashWallet/de.lproj/Localizable.strings b/DashWallet/de.lproj/Localizable.strings index c4e4c160b..f556b1d0a 100644 --- a/DashWallet/de.lproj/Localizable.strings +++ b/DashWallet/de.lproj/Localizable.strings @@ -464,6 +464,12 @@ /* No comment provided by engineer. */ "Long press to copy ID" = "Long press to copy ID"; +/* No comment provided by engineer. */ +"Masternode control" = "Masternode control"; + +/* No comment provided by engineer. */ +"Masternode Control" = "Masternode Control"; + /* No comment provided by engineer. */ "Masternode holding address" = "Masternode holding address"; @@ -476,6 +482,9 @@ /* No comment provided by engineer. */ "Masternode Update Service Transaction" = "Masternode Dienst-Aktualisierungs-Transaktion"; +/* No comment provided by engineer. */ +"Masternodes" = "Masternodes"; + /* Contracted variant of 'Maximum' word */ "Max" = "Max"; @@ -497,6 +506,9 @@ /* No comment provided by engineer. */ "Moved to Address" = "Moved to Address"; +/* No comment provided by engineer. */ +"My Masternodes" = "My Masternodes"; + /* No comment provided by engineer. */ "Network" = "Netzwerk"; @@ -551,6 +563,9 @@ /* No comment provided by engineer. */ "Not owner" = "Not owner"; +/* No comment provided by engineer. */ +"Not used" = "Not used"; + /* No comment provided by engineer. */ "Not voter" = "Not voter"; @@ -866,9 +881,6 @@ /* No comment provided by engineer. */ "Show Masternode Keys" = "Show Masternode Keys"; -/* No comment provided by engineer. */ -"Show masternode keys" = "Masternode-Schlüssel anzeigen"; - /* No comment provided by engineer. */ "show phrase" = "Wiederherstellungs-Wortfolge anzeigen"; @@ -878,6 +890,9 @@ /* No comment provided by engineer. */ "Show Recovery Phrase" = "Show Recovery Phrase"; +/* No comment provided by engineer. */ +"Sign Message" = "Sign Message"; + /* No comment provided by engineer. */ "Size:" = "Size:"; diff --git a/DashWallet/el.lproj/Localizable.strings b/DashWallet/el.lproj/Localizable.strings index 82e6cae51..9b6d0b4a3 100644 --- a/DashWallet/el.lproj/Localizable.strings +++ b/DashWallet/el.lproj/Localizable.strings @@ -464,6 +464,12 @@ /* No comment provided by engineer. */ "Long press to copy ID" = "Long press to copy ID"; +/* No comment provided by engineer. */ +"Masternode control" = "Masternode control"; + +/* No comment provided by engineer. */ +"Masternode Control" = "Masternode Control"; + /* No comment provided by engineer. */ "Masternode holding address" = "Masternode holding address"; @@ -476,6 +482,9 @@ /* No comment provided by engineer. */ "Masternode Update Service Transaction" = "Masternode Update Service Transaction"; +/* No comment provided by engineer. */ +"Masternodes" = "Masternodes"; + /* Contracted variant of 'Maximum' word */ "Max" = "Max"; @@ -497,6 +506,9 @@ /* No comment provided by engineer. */ "Moved to Address" = "Moved to Address"; +/* No comment provided by engineer. */ +"My Masternodes" = "My Masternodes"; + /* No comment provided by engineer. */ "Network" = "Network"; @@ -551,6 +563,9 @@ /* No comment provided by engineer. */ "Not owner" = "Not owner"; +/* No comment provided by engineer. */ +"Not used" = "Not used"; + /* No comment provided by engineer. */ "Not voter" = "Not voter"; @@ -866,9 +881,6 @@ /* No comment provided by engineer. */ "Show Masternode Keys" = "Show Masternode Keys"; -/* No comment provided by engineer. */ -"Show masternode keys" = "Show masternode keys"; - /* No comment provided by engineer. */ "show phrase" = "εμφάνιση φράσης"; @@ -878,6 +890,9 @@ /* No comment provided by engineer. */ "Show Recovery Phrase" = "Show Recovery Phrase"; +/* No comment provided by engineer. */ +"Sign Message" = "Sign Message"; + /* No comment provided by engineer. */ "Size:" = "Size:"; diff --git a/DashWallet/en.lproj/Localizable.strings b/DashWallet/en.lproj/Localizable.strings index 7bd1bc695..efa9c1ac9 100644 --- a/DashWallet/en.lproj/Localizable.strings +++ b/DashWallet/en.lproj/Localizable.strings @@ -464,6 +464,12 @@ /* No comment provided by engineer. */ "Long press to copy ID" = "Long press to copy ID"; +/* No comment provided by engineer. */ +"Masternode control" = "Masternode control"; + +/* No comment provided by engineer. */ +"Masternode Control" = "Masternode Control"; + /* No comment provided by engineer. */ "Masternode holding address" = "Masternode holding address"; @@ -476,6 +482,9 @@ /* No comment provided by engineer. */ "Masternode Update Service Transaction" = "Masternode Update Service Transaction"; +/* No comment provided by engineer. */ +"Masternodes" = "Masternodes"; + /* Contracted variant of 'Maximum' word */ "Max" = "Max"; @@ -497,6 +506,9 @@ /* No comment provided by engineer. */ "Moved to Address" = "Moved to Address"; +/* No comment provided by engineer. */ +"My Masternodes" = "My Masternodes"; + /* No comment provided by engineer. */ "Network" = "Network"; @@ -551,6 +563,9 @@ /* No comment provided by engineer. */ "Not owner" = "Not owner"; +/* No comment provided by engineer. */ +"Not used" = "Not used"; + /* No comment provided by engineer. */ "Not voter" = "Not voter"; @@ -866,9 +881,6 @@ /* No comment provided by engineer. */ "Show Masternode Keys" = "Show Masternode Keys"; -/* No comment provided by engineer. */ -"Show masternode keys" = "Show masternode keys"; - /* No comment provided by engineer. */ "show phrase" = "show phrase"; @@ -878,6 +890,9 @@ /* No comment provided by engineer. */ "Show Recovery Phrase" = "Show Recovery Phrase"; +/* No comment provided by engineer. */ +"Sign Message" = "Sign Message"; + /* No comment provided by engineer. */ "Size:" = "Size:"; diff --git a/DashWallet/es.lproj/Localizable.strings b/DashWallet/es.lproj/Localizable.strings index 4e0ed225c..e44260e12 100644 --- a/DashWallet/es.lproj/Localizable.strings +++ b/DashWallet/es.lproj/Localizable.strings @@ -464,6 +464,12 @@ /* No comment provided by engineer. */ "Long press to copy ID" = "Long press to copy ID"; +/* No comment provided by engineer. */ +"Masternode control" = "Masternode control"; + +/* No comment provided by engineer. */ +"Masternode Control" = "Masternode Control"; + /* No comment provided by engineer. */ "Masternode holding address" = "Masternode holding address"; @@ -476,6 +482,9 @@ /* No comment provided by engineer. */ "Masternode Update Service Transaction" = "Transacción del servicio de actualización de Masternode"; +/* No comment provided by engineer. */ +"Masternodes" = "Masternodes"; + /* Contracted variant of 'Maximum' word */ "Max" = "Max"; @@ -497,6 +506,9 @@ /* No comment provided by engineer. */ "Moved to Address" = "Moved to Address"; +/* No comment provided by engineer. */ +"My Masternodes" = "My Masternodes"; + /* No comment provided by engineer. */ "Network" = "Red de trabajo"; @@ -551,6 +563,9 @@ /* No comment provided by engineer. */ "Not owner" = "Not owner"; +/* No comment provided by engineer. */ +"Not used" = "Not used"; + /* No comment provided by engineer. */ "Not voter" = "Not voter"; @@ -866,9 +881,6 @@ /* No comment provided by engineer. */ "Show Masternode Keys" = "Show Masternode Keys"; -/* No comment provided by engineer. */ -"Show masternode keys" = "Mostrar llaves de masternode"; - /* No comment provided by engineer. */ "show phrase" = "mostrar frase"; @@ -878,6 +890,9 @@ /* No comment provided by engineer. */ "Show Recovery Phrase" = "Show Recovery Phrase"; +/* No comment provided by engineer. */ +"Sign Message" = "Sign Message"; + /* No comment provided by engineer. */ "Size:" = "Size:"; diff --git a/DashWallet/fr.lproj/Localizable.strings b/DashWallet/fr.lproj/Localizable.strings index 8e510c5be..d3993104a 100644 --- a/DashWallet/fr.lproj/Localizable.strings +++ b/DashWallet/fr.lproj/Localizable.strings @@ -464,6 +464,12 @@ /* No comment provided by engineer. */ "Long press to copy ID" = "Long press to copy ID"; +/* No comment provided by engineer. */ +"Masternode control" = "Masternode control"; + +/* No comment provided by engineer. */ +"Masternode Control" = "Masternode Control"; + /* No comment provided by engineer. */ "Masternode holding address" = "Masternode holding address"; @@ -476,6 +482,9 @@ /* No comment provided by engineer. */ "Masternode Update Service Transaction" = "Transaction de mise à jour du service de masternode"; +/* No comment provided by engineer. */ +"Masternodes" = "Masternodes"; + /* Contracted variant of 'Maximum' word */ "Max" = "Max"; @@ -497,6 +506,9 @@ /* No comment provided by engineer. */ "Moved to Address" = "Moved to Address"; +/* No comment provided by engineer. */ +"My Masternodes" = "My Masternodes"; + /* No comment provided by engineer. */ "Network" = "Réseau"; @@ -551,6 +563,9 @@ /* No comment provided by engineer. */ "Not owner" = "Not owner"; +/* No comment provided by engineer. */ +"Not used" = "Not used"; + /* No comment provided by engineer. */ "Not voter" = "Not voter"; @@ -866,9 +881,6 @@ /* No comment provided by engineer. */ "Show Masternode Keys" = "Show Masternode Keys"; -/* No comment provided by engineer. */ -"Show masternode keys" = "Voir les clés de masternode"; - /* No comment provided by engineer. */ "show phrase" = "montrer la phrase"; @@ -878,6 +890,9 @@ /* No comment provided by engineer. */ "Show Recovery Phrase" = "Show Recovery Phrase"; +/* No comment provided by engineer. */ +"Sign Message" = "Sign Message"; + /* No comment provided by engineer. */ "Size:" = "Size:"; diff --git a/DashWallet/id.lproj/Localizable.strings b/DashWallet/id.lproj/Localizable.strings index 2a053be66..1c94e1e7f 100644 --- a/DashWallet/id.lproj/Localizable.strings +++ b/DashWallet/id.lproj/Localizable.strings @@ -464,6 +464,12 @@ /* No comment provided by engineer. */ "Long press to copy ID" = "Long press to copy ID"; +/* No comment provided by engineer. */ +"Masternode control" = "Masternode control"; + +/* No comment provided by engineer. */ +"Masternode Control" = "Masternode Control"; + /* No comment provided by engineer. */ "Masternode holding address" = "Masternode holding address"; @@ -476,6 +482,9 @@ /* No comment provided by engineer. */ "Masternode Update Service Transaction" = "Transaksi Layanan Pembaruan Masternode"; +/* No comment provided by engineer. */ +"Masternodes" = "Masternodes"; + /* Contracted variant of 'Maximum' word */ "Max" = "Max"; @@ -497,6 +506,9 @@ /* No comment provided by engineer. */ "Moved to Address" = "Moved to Address"; +/* No comment provided by engineer. */ +"My Masternodes" = "My Masternodes"; + /* No comment provided by engineer. */ "Network" = "Jaringan"; @@ -551,6 +563,9 @@ /* No comment provided by engineer. */ "Not owner" = "Not owner"; +/* No comment provided by engineer. */ +"Not used" = "Not used"; + /* No comment provided by engineer. */ "Not voter" = "Not voter"; @@ -866,9 +881,6 @@ /* No comment provided by engineer. */ "Show Masternode Keys" = "Show Masternode Keys"; -/* No comment provided by engineer. */ -"Show masternode keys" = "Tampilkan kunci masternode"; - /* No comment provided by engineer. */ "show phrase" = "tunjukkan frasa"; @@ -878,6 +890,9 @@ /* No comment provided by engineer. */ "Show Recovery Phrase" = "Show Recovery Phrase"; +/* No comment provided by engineer. */ +"Sign Message" = "Sign Message"; + /* No comment provided by engineer. */ "Size:" = "Size:"; diff --git a/DashWallet/it.lproj/Localizable.strings b/DashWallet/it.lproj/Localizable.strings index 321b14d4a..3a0d5e8ec 100644 --- a/DashWallet/it.lproj/Localizable.strings +++ b/DashWallet/it.lproj/Localizable.strings @@ -464,6 +464,12 @@ /* No comment provided by engineer. */ "Long press to copy ID" = "Long press to copy ID"; +/* No comment provided by engineer. */ +"Masternode control" = "Masternode control"; + +/* No comment provided by engineer. */ +"Masternode Control" = "Masternode Control"; + /* No comment provided by engineer. */ "Masternode holding address" = "Masternode holding address"; @@ -476,6 +482,9 @@ /* No comment provided by engineer. */ "Masternode Update Service Transaction" = "Transazione del servizio di aggiornamento Masternode"; +/* No comment provided by engineer. */ +"Masternodes" = "Masternodes"; + /* Contracted variant of 'Maximum' word */ "Max" = "Max"; @@ -497,6 +506,9 @@ /* No comment provided by engineer. */ "Moved to Address" = "Moved to Address"; +/* No comment provided by engineer. */ +"My Masternodes" = "My Masternodes"; + /* No comment provided by engineer. */ "Network" = "Network"; @@ -551,6 +563,9 @@ /* No comment provided by engineer. */ "Not owner" = "Not owner"; +/* No comment provided by engineer. */ +"Not used" = "Not used"; + /* No comment provided by engineer. */ "Not voter" = "Not voter"; @@ -866,9 +881,6 @@ /* No comment provided by engineer. */ "Show Masternode Keys" = "Show Masternode Keys"; -/* No comment provided by engineer. */ -"Show masternode keys" = "Mostra le chiavi masternode"; - /* No comment provided by engineer. */ "show phrase" = "mostra frase"; @@ -878,6 +890,9 @@ /* No comment provided by engineer. */ "Show Recovery Phrase" = "Show Recovery Phrase"; +/* No comment provided by engineer. */ +"Sign Message" = "Sign Message"; + /* No comment provided by engineer. */ "Size:" = "Size:"; diff --git a/DashWallet/ja.lproj/Localizable.strings b/DashWallet/ja.lproj/Localizable.strings index 3b8ffe24e..028d5a898 100644 --- a/DashWallet/ja.lproj/Localizable.strings +++ b/DashWallet/ja.lproj/Localizable.strings @@ -464,6 +464,12 @@ /* No comment provided by engineer. */ "Long press to copy ID" = "Long press to copy ID"; +/* No comment provided by engineer. */ +"Masternode control" = "Masternode control"; + +/* No comment provided by engineer. */ +"Masternode Control" = "Masternode Control"; + /* No comment provided by engineer. */ "Masternode holding address" = "Masternode holding address"; @@ -476,6 +482,9 @@ /* No comment provided by engineer. */ "Masternode Update Service Transaction" = "マスターノードのサービス取引のアップデート"; +/* No comment provided by engineer. */ +"Masternodes" = "Masternodes"; + /* Contracted variant of 'Maximum' word */ "Max" = "Max"; @@ -497,6 +506,9 @@ /* No comment provided by engineer. */ "Moved to Address" = "Moved to Address"; +/* No comment provided by engineer. */ +"My Masternodes" = "My Masternodes"; + /* No comment provided by engineer. */ "Network" = "ネットワーク"; @@ -551,6 +563,9 @@ /* No comment provided by engineer. */ "Not owner" = "Not owner"; +/* No comment provided by engineer. */ +"Not used" = "Not used"; + /* No comment provided by engineer. */ "Not voter" = "Not voter"; @@ -866,9 +881,6 @@ /* No comment provided by engineer. */ "Show Masternode Keys" = "Show Masternode Keys"; -/* No comment provided by engineer. */ -"Show masternode keys" = "マスターノードキーを表示する"; - /* No comment provided by engineer. */ "show phrase" = "フレーズを表示"; @@ -878,6 +890,9 @@ /* No comment provided by engineer. */ "Show Recovery Phrase" = "Show Recovery Phrase"; +/* No comment provided by engineer. */ +"Sign Message" = "Sign Message"; + /* No comment provided by engineer. */ "Size:" = "Size:"; diff --git a/DashWallet/ko.lproj/Localizable.strings b/DashWallet/ko.lproj/Localizable.strings index e130f3b88..930230199 100644 --- a/DashWallet/ko.lproj/Localizable.strings +++ b/DashWallet/ko.lproj/Localizable.strings @@ -464,6 +464,12 @@ /* No comment provided by engineer. */ "Long press to copy ID" = "Long press to copy ID"; +/* No comment provided by engineer. */ +"Masternode control" = "Masternode control"; + +/* No comment provided by engineer. */ +"Masternode Control" = "Masternode Control"; + /* No comment provided by engineer. */ "Masternode holding address" = "Masternode holding address"; @@ -476,6 +482,9 @@ /* No comment provided by engineer. */ "Masternode Update Service Transaction" = "마스터노드 업데이트 서비스 거래"; +/* No comment provided by engineer. */ +"Masternodes" = "Masternodes"; + /* Contracted variant of 'Maximum' word */ "Max" = "Max"; @@ -497,6 +506,9 @@ /* No comment provided by engineer. */ "Moved to Address" = "Moved to Address"; +/* No comment provided by engineer. */ +"My Masternodes" = "My Masternodes"; + /* No comment provided by engineer. */ "Network" = "네트워크"; @@ -551,6 +563,9 @@ /* No comment provided by engineer. */ "Not owner" = "Not owner"; +/* No comment provided by engineer. */ +"Not used" = "Not used"; + /* No comment provided by engineer. */ "Not voter" = "Not voter"; @@ -866,9 +881,6 @@ /* No comment provided by engineer. */ "Show Masternode Keys" = "Show Masternode Keys"; -/* No comment provided by engineer. */ -"Show masternode keys" = "마스터노드 키 확인하기"; - /* No comment provided by engineer. */ "show phrase" = "문구 보기"; @@ -878,6 +890,9 @@ /* No comment provided by engineer. */ "Show Recovery Phrase" = "Show Recovery Phrase"; +/* No comment provided by engineer. */ +"Sign Message" = "Sign Message"; + /* No comment provided by engineer. */ "Size:" = "Size:"; diff --git a/DashWallet/nb.lproj/Localizable.strings b/DashWallet/nb.lproj/Localizable.strings index 3df1362d4..d5560445f 100644 --- a/DashWallet/nb.lproj/Localizable.strings +++ b/DashWallet/nb.lproj/Localizable.strings @@ -464,6 +464,12 @@ /* No comment provided by engineer. */ "Long press to copy ID" = "Long press to copy ID"; +/* No comment provided by engineer. */ +"Masternode control" = "Masternode control"; + +/* No comment provided by engineer. */ +"Masternode Control" = "Masternode Control"; + /* No comment provided by engineer. */ "Masternode holding address" = "Masternode holding address"; @@ -476,6 +482,9 @@ /* No comment provided by engineer. */ "Masternode Update Service Transaction" = "Masternode Update Service Transaction"; +/* No comment provided by engineer. */ +"Masternodes" = "Masternodes"; + /* Contracted variant of 'Maximum' word */ "Max" = "Max"; @@ -497,6 +506,9 @@ /* No comment provided by engineer. */ "Moved to Address" = "Moved to Address"; +/* No comment provided by engineer. */ +"My Masternodes" = "My Masternodes"; + /* No comment provided by engineer. */ "Network" = "Network"; @@ -551,6 +563,9 @@ /* No comment provided by engineer. */ "Not owner" = "Not owner"; +/* No comment provided by engineer. */ +"Not used" = "Not used"; + /* No comment provided by engineer. */ "Not voter" = "Not voter"; @@ -866,9 +881,6 @@ /* No comment provided by engineer. */ "Show Masternode Keys" = "Show Masternode Keys"; -/* No comment provided by engineer. */ -"Show masternode keys" = "Show masternode keys"; - /* No comment provided by engineer. */ "show phrase" = "vis frase"; @@ -878,6 +890,9 @@ /* No comment provided by engineer. */ "Show Recovery Phrase" = "Show Recovery Phrase"; +/* No comment provided by engineer. */ +"Sign Message" = "Sign Message"; + /* No comment provided by engineer. */ "Size:" = "Size:"; diff --git a/DashWallet/nl.lproj/Localizable.strings b/DashWallet/nl.lproj/Localizable.strings index d10443777..9847aa131 100644 --- a/DashWallet/nl.lproj/Localizable.strings +++ b/DashWallet/nl.lproj/Localizable.strings @@ -464,6 +464,12 @@ /* No comment provided by engineer. */ "Long press to copy ID" = "Long press to copy ID"; +/* No comment provided by engineer. */ +"Masternode control" = "Masternode control"; + +/* No comment provided by engineer. */ +"Masternode Control" = "Masternode Control"; + /* No comment provided by engineer. */ "Masternode holding address" = "Masternode holding address"; @@ -476,6 +482,9 @@ /* No comment provided by engineer. */ "Masternode Update Service Transaction" = "Masternode service update transactie"; +/* No comment provided by engineer. */ +"Masternodes" = "Masternodes"; + /* Contracted variant of 'Maximum' word */ "Max" = "Max"; @@ -497,6 +506,9 @@ /* No comment provided by engineer. */ "Moved to Address" = "Moved to Address"; +/* No comment provided by engineer. */ +"My Masternodes" = "My Masternodes"; + /* No comment provided by engineer. */ "Network" = "Netwerk"; @@ -551,6 +563,9 @@ /* No comment provided by engineer. */ "Not owner" = "Not owner"; +/* No comment provided by engineer. */ +"Not used" = "Not used"; + /* No comment provided by engineer. */ "Not voter" = "Not voter"; @@ -866,9 +881,6 @@ /* No comment provided by engineer. */ "Show Masternode Keys" = "Show Masternode Keys"; -/* No comment provided by engineer. */ -"Show masternode keys" = "Toon masternode sleutels"; - /* No comment provided by engineer. */ "show phrase" = "toon zin"; @@ -878,6 +890,9 @@ /* No comment provided by engineer. */ "Show Recovery Phrase" = "Show Recovery Phrase"; +/* No comment provided by engineer. */ +"Sign Message" = "Sign Message"; + /* No comment provided by engineer. */ "Size:" = "Size:"; diff --git a/DashWallet/pl.lproj/Localizable.strings b/DashWallet/pl.lproj/Localizable.strings index a53219325..c534431ea 100644 --- a/DashWallet/pl.lproj/Localizable.strings +++ b/DashWallet/pl.lproj/Localizable.strings @@ -464,6 +464,12 @@ /* No comment provided by engineer. */ "Long press to copy ID" = "Long press to copy ID"; +/* No comment provided by engineer. */ +"Masternode control" = "Masternode control"; + +/* No comment provided by engineer. */ +"Masternode Control" = "Masternode Control"; + /* No comment provided by engineer. */ "Masternode holding address" = "Masternode holding address"; @@ -476,6 +482,9 @@ /* No comment provided by engineer. */ "Masternode Update Service Transaction" = "Transakcja Aktualizacji Serwisu Masternoda"; +/* No comment provided by engineer. */ +"Masternodes" = "Masternodes"; + /* Contracted variant of 'Maximum' word */ "Max" = "Max"; @@ -497,6 +506,9 @@ /* No comment provided by engineer. */ "Moved to Address" = "Moved to Address"; +/* No comment provided by engineer. */ +"My Masternodes" = "My Masternodes"; + /* No comment provided by engineer. */ "Network" = "Sieć"; @@ -551,6 +563,9 @@ /* No comment provided by engineer. */ "Not owner" = "Not owner"; +/* No comment provided by engineer. */ +"Not used" = "Not used"; + /* No comment provided by engineer. */ "Not voter" = "Not voter"; @@ -866,9 +881,6 @@ /* No comment provided by engineer. */ "Show Masternode Keys" = "Show Masternode Keys"; -/* No comment provided by engineer. */ -"Show masternode keys" = "Pokaż klucze masternoda"; - /* No comment provided by engineer. */ "show phrase" = "pokaż frazę"; @@ -878,6 +890,9 @@ /* No comment provided by engineer. */ "Show Recovery Phrase" = "Show Recovery Phrase"; +/* No comment provided by engineer. */ +"Sign Message" = "Sign Message"; + /* No comment provided by engineer. */ "Size:" = "Size:"; diff --git a/DashWallet/pt.lproj/Localizable.strings b/DashWallet/pt.lproj/Localizable.strings index c68f21146..2a7a6673d 100644 --- a/DashWallet/pt.lproj/Localizable.strings +++ b/DashWallet/pt.lproj/Localizable.strings @@ -464,6 +464,12 @@ /* No comment provided by engineer. */ "Long press to copy ID" = "Long press to copy ID"; +/* No comment provided by engineer. */ +"Masternode control" = "Masternode control"; + +/* No comment provided by engineer. */ +"Masternode Control" = "Masternode Control"; + /* No comment provided by engineer. */ "Masternode holding address" = "Masternode holding address"; @@ -476,6 +482,9 @@ /* No comment provided by engineer. */ "Masternode Update Service Transaction" = "Transação do Serviço de Atualização do Masternode"; +/* No comment provided by engineer. */ +"Masternodes" = "Masternodes"; + /* Contracted variant of 'Maximum' word */ "Max" = "Max"; @@ -497,6 +506,9 @@ /* No comment provided by engineer. */ "Moved to Address" = "Moved to Address"; +/* No comment provided by engineer. */ +"My Masternodes" = "My Masternodes"; + /* No comment provided by engineer. */ "Network" = "Rede"; @@ -551,6 +563,9 @@ /* No comment provided by engineer. */ "Not owner" = "Not owner"; +/* No comment provided by engineer. */ +"Not used" = "Not used"; + /* No comment provided by engineer. */ "Not voter" = "Not voter"; @@ -866,9 +881,6 @@ /* No comment provided by engineer. */ "Show Masternode Keys" = "Show Masternode Keys"; -/* No comment provided by engineer. */ -"Show masternode keys" = "Mostrar chaves do masternode"; - /* No comment provided by engineer. */ "show phrase" = "mostrar a frase"; @@ -878,6 +890,9 @@ /* No comment provided by engineer. */ "Show Recovery Phrase" = "Show Recovery Phrase"; +/* No comment provided by engineer. */ +"Sign Message" = "Sign Message"; + /* No comment provided by engineer. */ "Size:" = "Size:"; diff --git a/DashWallet/ru.lproj/Localizable.strings b/DashWallet/ru.lproj/Localizable.strings index f265c0504..c9f820692 100644 --- a/DashWallet/ru.lproj/Localizable.strings +++ b/DashWallet/ru.lproj/Localizable.strings @@ -464,6 +464,12 @@ /* No comment provided by engineer. */ "Long press to copy ID" = "Long press to copy ID"; +/* No comment provided by engineer. */ +"Masternode control" = "Masternode control"; + +/* No comment provided by engineer. */ +"Masternode Control" = "Masternode Control"; + /* No comment provided by engineer. */ "Masternode holding address" = "Masternode holding address"; @@ -476,6 +482,9 @@ /* No comment provided by engineer. */ "Masternode Update Service Transaction" = "Транзакция обновления услуг мастерноды"; +/* No comment provided by engineer. */ +"Masternodes" = "Masternodes"; + /* Contracted variant of 'Maximum' word */ "Max" = "Max"; @@ -497,6 +506,9 @@ /* No comment provided by engineer. */ "Moved to Address" = "Moved to Address"; +/* No comment provided by engineer. */ +"My Masternodes" = "My Masternodes"; + /* No comment provided by engineer. */ "Network" = "Сеть"; @@ -551,6 +563,9 @@ /* No comment provided by engineer. */ "Not owner" = "Not owner"; +/* No comment provided by engineer. */ +"Not used" = "Not used"; + /* No comment provided by engineer. */ "Not voter" = "Not voter"; @@ -866,9 +881,6 @@ /* No comment provided by engineer. */ "Show Masternode Keys" = "Show Masternode Keys"; -/* No comment provided by engineer. */ -"Show masternode keys" = "Показать ключи мастерноды"; - /* No comment provided by engineer. */ "show phrase" = "Показать фразу"; @@ -878,6 +890,9 @@ /* No comment provided by engineer. */ "Show Recovery Phrase" = "Show Recovery Phrase"; +/* No comment provided by engineer. */ +"Sign Message" = "Sign Message"; + /* No comment provided by engineer. */ "Size:" = "Size:"; diff --git a/DashWallet/sk.lproj/Localizable.strings b/DashWallet/sk.lproj/Localizable.strings index e1cbbef67..f3a2aa64f 100644 --- a/DashWallet/sk.lproj/Localizable.strings +++ b/DashWallet/sk.lproj/Localizable.strings @@ -464,6 +464,12 @@ /* No comment provided by engineer. */ "Long press to copy ID" = "Long press to copy ID"; +/* No comment provided by engineer. */ +"Masternode control" = "Masternode control"; + +/* No comment provided by engineer. */ +"Masternode Control" = "Masternode Control"; + /* No comment provided by engineer. */ "Masternode holding address" = "Masternode holding address"; @@ -476,6 +482,9 @@ /* No comment provided by engineer. */ "Masternode Update Service Transaction" = "Masternode Update Service Transaction"; +/* No comment provided by engineer. */ +"Masternodes" = "Masternodes"; + /* Contracted variant of 'Maximum' word */ "Max" = "Max"; @@ -497,6 +506,9 @@ /* No comment provided by engineer. */ "Moved to Address" = "Moved to Address"; +/* No comment provided by engineer. */ +"My Masternodes" = "My Masternodes"; + /* No comment provided by engineer. */ "Network" = "Network"; @@ -551,6 +563,9 @@ /* No comment provided by engineer. */ "Not owner" = "Not owner"; +/* No comment provided by engineer. */ +"Not used" = "Not used"; + /* No comment provided by engineer. */ "Not voter" = "Not voter"; @@ -866,9 +881,6 @@ /* No comment provided by engineer. */ "Show Masternode Keys" = "Show Masternode Keys"; -/* No comment provided by engineer. */ -"Show masternode keys" = "Show masternode keys"; - /* No comment provided by engineer. */ "show phrase" = "show phrase"; @@ -878,6 +890,9 @@ /* No comment provided by engineer. */ "Show Recovery Phrase" = "Show Recovery Phrase"; +/* No comment provided by engineer. */ +"Sign Message" = "Sign Message"; + /* No comment provided by engineer. */ "Size:" = "Size:"; diff --git a/DashWallet/sq.lproj/Localizable.strings b/DashWallet/sq.lproj/Localizable.strings index 6e4168053..a8c686921 100644 --- a/DashWallet/sq.lproj/Localizable.strings +++ b/DashWallet/sq.lproj/Localizable.strings @@ -464,6 +464,12 @@ /* No comment provided by engineer. */ "Long press to copy ID" = "Long press to copy ID"; +/* No comment provided by engineer. */ +"Masternode control" = "Masternode control"; + +/* No comment provided by engineer. */ +"Masternode Control" = "Masternode Control"; + /* No comment provided by engineer. */ "Masternode holding address" = "Masternode holding address"; @@ -476,6 +482,9 @@ /* No comment provided by engineer. */ "Masternode Update Service Transaction" = "Masternode Update Service Transaction"; +/* No comment provided by engineer. */ +"Masternodes" = "Masternodes"; + /* Contracted variant of 'Maximum' word */ "Max" = "Max"; @@ -497,6 +506,9 @@ /* No comment provided by engineer. */ "Moved to Address" = "Moved to Address"; +/* No comment provided by engineer. */ +"My Masternodes" = "My Masternodes"; + /* No comment provided by engineer. */ "Network" = "Network"; @@ -551,6 +563,9 @@ /* No comment provided by engineer. */ "Not owner" = "Not owner"; +/* No comment provided by engineer. */ +"Not used" = "Not used"; + /* No comment provided by engineer. */ "Not voter" = "Not voter"; @@ -866,9 +881,6 @@ /* No comment provided by engineer. */ "Show Masternode Keys" = "Show Masternode Keys"; -/* No comment provided by engineer. */ -"Show masternode keys" = "Show masternode keys"; - /* No comment provided by engineer. */ "show phrase" = "shfaq frazën"; @@ -878,6 +890,9 @@ /* No comment provided by engineer. */ "Show Recovery Phrase" = "Show Recovery Phrase"; +/* No comment provided by engineer. */ +"Sign Message" = "Sign Message"; + /* No comment provided by engineer. */ "Size:" = "Size:"; diff --git a/DashWallet/sv.lproj/Localizable.strings b/DashWallet/sv.lproj/Localizable.strings index 3e228bc3a..102c8fd29 100644 --- a/DashWallet/sv.lproj/Localizable.strings +++ b/DashWallet/sv.lproj/Localizable.strings @@ -464,6 +464,12 @@ /* No comment provided by engineer. */ "Long press to copy ID" = "Long press to copy ID"; +/* No comment provided by engineer. */ +"Masternode control" = "Masternode control"; + +/* No comment provided by engineer. */ +"Masternode Control" = "Masternode Control"; + /* No comment provided by engineer. */ "Masternode holding address" = "Masternode holding address"; @@ -476,6 +482,9 @@ /* No comment provided by engineer. */ "Masternode Update Service Transaction" = "Masternode Update Service Transaction"; +/* No comment provided by engineer. */ +"Masternodes" = "Masternodes"; + /* Contracted variant of 'Maximum' word */ "Max" = "Max"; @@ -497,6 +506,9 @@ /* No comment provided by engineer. */ "Moved to Address" = "Moved to Address"; +/* No comment provided by engineer. */ +"My Masternodes" = "My Masternodes"; + /* No comment provided by engineer. */ "Network" = "Network"; @@ -551,6 +563,9 @@ /* No comment provided by engineer. */ "Not owner" = "Not owner"; +/* No comment provided by engineer. */ +"Not used" = "Not used"; + /* No comment provided by engineer. */ "Not voter" = "Not voter"; @@ -866,9 +881,6 @@ /* No comment provided by engineer. */ "Show Masternode Keys" = "Show Masternode Keys"; -/* No comment provided by engineer. */ -"Show masternode keys" = "Show masternode keys"; - /* No comment provided by engineer. */ "show phrase" = "visa fras"; @@ -878,6 +890,9 @@ /* No comment provided by engineer. */ "Show Recovery Phrase" = "Show Recovery Phrase"; +/* No comment provided by engineer. */ +"Sign Message" = "Sign Message"; + /* No comment provided by engineer. */ "Size:" = "Size:"; diff --git a/DashWallet/th.lproj/Localizable.strings b/DashWallet/th.lproj/Localizable.strings index 6c5af5b8c..b70bdbafd 100644 --- a/DashWallet/th.lproj/Localizable.strings +++ b/DashWallet/th.lproj/Localizable.strings @@ -464,6 +464,12 @@ /* No comment provided by engineer. */ "Long press to copy ID" = "Long press to copy ID"; +/* No comment provided by engineer. */ +"Masternode control" = "Masternode control"; + +/* No comment provided by engineer. */ +"Masternode Control" = "Masternode Control"; + /* No comment provided by engineer. */ "Masternode holding address" = "Masternode holding address"; @@ -476,6 +482,9 @@ /* No comment provided by engineer. */ "Masternode Update Service Transaction" = "Masternode อัพเดตบริการธุรกรรม"; +/* No comment provided by engineer. */ +"Masternodes" = "Masternodes"; + /* Contracted variant of 'Maximum' word */ "Max" = "Max"; @@ -497,6 +506,9 @@ /* No comment provided by engineer. */ "Moved to Address" = "Moved to Address"; +/* No comment provided by engineer. */ +"My Masternodes" = "My Masternodes"; + /* No comment provided by engineer. */ "Network" = "เครือข่าย"; @@ -551,6 +563,9 @@ /* No comment provided by engineer. */ "Not owner" = "Not owner"; +/* No comment provided by engineer. */ +"Not used" = "Not used"; + /* No comment provided by engineer. */ "Not voter" = "Not voter"; @@ -866,9 +881,6 @@ /* No comment provided by engineer. */ "Show Masternode Keys" = "Show Masternode Keys"; -/* No comment provided by engineer. */ -"Show masternode keys" = "แสดง masternode keys"; - /* No comment provided by engineer. */ "show phrase" = "แสดงวลี"; @@ -878,6 +890,9 @@ /* No comment provided by engineer. */ "Show Recovery Phrase" = "Show Recovery Phrase"; +/* No comment provided by engineer. */ +"Sign Message" = "Sign Message"; + /* No comment provided by engineer. */ "Size:" = "Size:"; diff --git a/DashWallet/tr.lproj/Localizable.strings b/DashWallet/tr.lproj/Localizable.strings index 371d31762..ac7a300bc 100644 --- a/DashWallet/tr.lproj/Localizable.strings +++ b/DashWallet/tr.lproj/Localizable.strings @@ -464,6 +464,12 @@ /* No comment provided by engineer. */ "Long press to copy ID" = "Long press to copy ID"; +/* No comment provided by engineer. */ +"Masternode control" = "Masternode control"; + +/* No comment provided by engineer. */ +"Masternode Control" = "Masternode Control"; + /* No comment provided by engineer. */ "Masternode holding address" = "Masternode holding address"; @@ -476,6 +482,9 @@ /* No comment provided by engineer. */ "Masternode Update Service Transaction" = "Anadüğüm Hizmet Yenileme İşlemi"; +/* No comment provided by engineer. */ +"Masternodes" = "Masternodes"; + /* Contracted variant of 'Maximum' word */ "Max" = "Max"; @@ -497,6 +506,9 @@ /* No comment provided by engineer. */ "Moved to Address" = "Moved to Address"; +/* No comment provided by engineer. */ +"My Masternodes" = "My Masternodes"; + /* No comment provided by engineer. */ "Network" = "Ağ"; @@ -551,6 +563,9 @@ /* No comment provided by engineer. */ "Not owner" = "Not owner"; +/* No comment provided by engineer. */ +"Not used" = "Not used"; + /* No comment provided by engineer. */ "Not voter" = "Not voter"; @@ -866,9 +881,6 @@ /* No comment provided by engineer. */ "Show Masternode Keys" = "Show Masternode Keys"; -/* No comment provided by engineer. */ -"Show masternode keys" = "Anadüğüm anahtarlarını göster"; - /* No comment provided by engineer. */ "show phrase" = "metni göster"; @@ -878,6 +890,9 @@ /* No comment provided by engineer. */ "Show Recovery Phrase" = "Show Recovery Phrase"; +/* No comment provided by engineer. */ +"Sign Message" = "Sign Message"; + /* No comment provided by engineer. */ "Size:" = "Size:"; diff --git a/DashWallet/vi.lproj/Localizable.strings b/DashWallet/vi.lproj/Localizable.strings index 74bc652c0..3bc542001 100644 --- a/DashWallet/vi.lproj/Localizable.strings +++ b/DashWallet/vi.lproj/Localizable.strings @@ -464,6 +464,12 @@ /* No comment provided by engineer. */ "Long press to copy ID" = "Long press to copy ID"; +/* No comment provided by engineer. */ +"Masternode control" = "Masternode control"; + +/* No comment provided by engineer. */ +"Masternode Control" = "Masternode Control"; + /* No comment provided by engineer. */ "Masternode holding address" = "Masternode holding address"; @@ -476,6 +482,9 @@ /* No comment provided by engineer. */ "Masternode Update Service Transaction" = "Giao dịch cập nhật dịch vụ Masternode"; +/* No comment provided by engineer. */ +"Masternodes" = "Masternodes"; + /* Contracted variant of 'Maximum' word */ "Max" = "Max"; @@ -497,6 +506,9 @@ /* No comment provided by engineer. */ "Moved to Address" = "Moved to Address"; +/* No comment provided by engineer. */ +"My Masternodes" = "My Masternodes"; + /* No comment provided by engineer. */ "Network" = "Mạng"; @@ -551,6 +563,9 @@ /* No comment provided by engineer. */ "Not owner" = "Not owner"; +/* No comment provided by engineer. */ +"Not used" = "Not used"; + /* No comment provided by engineer. */ "Not voter" = "Not voter"; @@ -866,9 +881,6 @@ /* No comment provided by engineer. */ "Show Masternode Keys" = "Show Masternode Keys"; -/* No comment provided by engineer. */ -"Show masternode keys" = "Hiển thị các khoá của masternode"; - /* No comment provided by engineer. */ "show phrase" = "hiển thị cụm từ"; @@ -878,6 +890,9 @@ /* No comment provided by engineer. */ "Show Recovery Phrase" = "Show Recovery Phrase"; +/* No comment provided by engineer. */ +"Sign Message" = "Sign Message"; + /* No comment provided by engineer. */ "Size:" = "Size:"; diff --git a/DashWallet/zh-Hans.lproj/Localizable.strings b/DashWallet/zh-Hans.lproj/Localizable.strings index bef5de6a1..4c57e6dfd 100644 --- a/DashWallet/zh-Hans.lproj/Localizable.strings +++ b/DashWallet/zh-Hans.lproj/Localizable.strings @@ -464,6 +464,12 @@ /* No comment provided by engineer. */ "Long press to copy ID" = "Long press to copy ID"; +/* No comment provided by engineer. */ +"Masternode control" = "Masternode control"; + +/* No comment provided by engineer. */ +"Masternode Control" = "Masternode Control"; + /* No comment provided by engineer. */ "Masternode holding address" = "Masternode holding address"; @@ -476,6 +482,9 @@ /* No comment provided by engineer. */ "Masternode Update Service Transaction" = "Masternode Update Service Transaction"; +/* No comment provided by engineer. */ +"Masternodes" = "Masternodes"; + /* Contracted variant of 'Maximum' word */ "Max" = "Max"; @@ -497,6 +506,9 @@ /* No comment provided by engineer. */ "Moved to Address" = "Moved to Address"; +/* No comment provided by engineer. */ +"My Masternodes" = "My Masternodes"; + /* No comment provided by engineer. */ "Network" = "Network"; @@ -551,6 +563,9 @@ /* No comment provided by engineer. */ "Not owner" = "Not owner"; +/* No comment provided by engineer. */ +"Not used" = "Not used"; + /* No comment provided by engineer. */ "Not voter" = "Not voter"; @@ -866,9 +881,6 @@ /* No comment provided by engineer. */ "Show Masternode Keys" = "Show Masternode Keys"; -/* No comment provided by engineer. */ -"Show masternode keys" = "Show masternode keys"; - /* No comment provided by engineer. */ "show phrase" = "显示密语"; @@ -878,6 +890,9 @@ /* No comment provided by engineer. */ "Show Recovery Phrase" = "Show Recovery Phrase"; +/* No comment provided by engineer. */ +"Sign Message" = "Sign Message"; + /* No comment provided by engineer. */ "Size:" = "Size:"; diff --git a/DashWallet/zh-Hant-TW.lproj/Localizable.strings b/DashWallet/zh-Hant-TW.lproj/Localizable.strings index 5a0c10e0d..9a732408f 100644 --- a/DashWallet/zh-Hant-TW.lproj/Localizable.strings +++ b/DashWallet/zh-Hant-TW.lproj/Localizable.strings @@ -464,6 +464,12 @@ /* No comment provided by engineer. */ "Long press to copy ID" = "Long press to copy ID"; +/* No comment provided by engineer. */ +"Masternode control" = "Masternode control"; + +/* No comment provided by engineer. */ +"Masternode Control" = "Masternode Control"; + /* No comment provided by engineer. */ "Masternode holding address" = "Masternode holding address"; @@ -476,6 +482,9 @@ /* No comment provided by engineer. */ "Masternode Update Service Transaction" = "Masternode Update Service Transaction"; +/* No comment provided by engineer. */ +"Masternodes" = "Masternodes"; + /* Contracted variant of 'Maximum' word */ "Max" = "Max"; @@ -497,6 +506,9 @@ /* No comment provided by engineer. */ "Moved to Address" = "Moved to Address"; +/* No comment provided by engineer. */ +"My Masternodes" = "My Masternodes"; + /* No comment provided by engineer. */ "Network" = "Network"; @@ -551,6 +563,9 @@ /* No comment provided by engineer. */ "Not owner" = "Not owner"; +/* No comment provided by engineer. */ +"Not used" = "Not used"; + /* No comment provided by engineer. */ "Not voter" = "Not voter"; @@ -866,9 +881,6 @@ /* No comment provided by engineer. */ "Show Masternode Keys" = "Show Masternode Keys"; -/* No comment provided by engineer. */ -"Show masternode keys" = "Show masternode keys"; - /* No comment provided by engineer. */ "show phrase" = "顯示詞組"; @@ -878,6 +890,9 @@ /* No comment provided by engineer. */ "Show Recovery Phrase" = "Show Recovery Phrase"; +/* No comment provided by engineer. */ +"Sign Message" = "Sign Message"; + /* No comment provided by engineer. */ "Size:" = "Size:"; From 1ffcfacc0168e93a30ef8837337ce38d81431c61 Mon Sep 17 00:00:00 2001 From: Quantum Explorer Date: Sun, 27 Oct 2019 19:57:25 +0700 Subject: [PATCH 11/34] cleanup --- .../DWBaseMasternodeViewController.h | 33 + .../DWBaseMasternodeViewController.m | 162 ++ .../DWDerivationPathKeysViewController.h | 30 + .../DWDerivationPathKeysViewController.m | 174 ++ .../DWKeysOverviewViewController.h | 28 + .../DWKeysOverviewViewController.m | 99 + .../DWMasternodeDetailViewController.h | 23 + .../DWMasternodeDetailViewController.m | 181 ++ .../DWMasternodeRootViewController.h | 28 + .../DWMasternodeRootViewController.m | 55 + .../DWMasternodeViewController.h | 14 + .../DWMasternodeViewController.m | 108 ++ ...pdateRegistrarTransactionsViewController.h | 21 + ...pdateRegistrarTransactionsViewController.m | 97 + ...rUpdateServiceTransactionsViewController.h | 21 + ...rUpdateServiceTransactionsViewController.m | 103 + .../DWReclaimMasternodeViewController.h | 21 + .../DWReclaimMasternodeViewController.m | 98 + .../DWRegisterMasternodeViewController.h | 20 + .../DWRegisterMasternodeViewController.m | 225 +++ .../DWResultsMasternodeViewController.h | 26 + .../DWResultsMasternodeViewController.m | 26 + .../DWSignMessageViewController.h | 28 + .../DWSignMessageViewController.m | 54 + .../DWSignPayloadViewController.h | 30 + .../DWSignPayloadViewController.m | 81 + ...WUpdateMasternodeRegistrarViewController.h | 20 + ...WUpdateMasternodeRegistrarViewController.m | 113 ++ ...UpdateMasternodeRevocationViewController.h | 17 + ...UpdateMasternodeRevocationViewController.m | 27 + .../DWUpdateMasternodeServiceViewController.h | 21 + .../DWUpdateMasternodeServiceViewController.m | 120 ++ .../Masternode Keys/Masternode.storyboard | 1673 +++++++++++++++++ 33 files changed, 3777 insertions(+) create mode 100644 DashWallet/Sources/UI/Menu/Tools/Masternode Keys/DWBaseMasternodeViewController.h create mode 100644 DashWallet/Sources/UI/Menu/Tools/Masternode Keys/DWBaseMasternodeViewController.m create mode 100644 DashWallet/Sources/UI/Menu/Tools/Masternode Keys/DWDerivationPathKeysViewController.h create mode 100644 DashWallet/Sources/UI/Menu/Tools/Masternode Keys/DWDerivationPathKeysViewController.m create mode 100644 DashWallet/Sources/UI/Menu/Tools/Masternode Keys/DWKeysOverviewViewController.h create mode 100644 DashWallet/Sources/UI/Menu/Tools/Masternode Keys/DWKeysOverviewViewController.m create mode 100644 DashWallet/Sources/UI/Menu/Tools/Masternode Keys/DWMasternodeDetailViewController.h create mode 100644 DashWallet/Sources/UI/Menu/Tools/Masternode Keys/DWMasternodeDetailViewController.m create mode 100644 DashWallet/Sources/UI/Menu/Tools/Masternode Keys/DWMasternodeRootViewController.h create mode 100644 DashWallet/Sources/UI/Menu/Tools/Masternode Keys/DWMasternodeRootViewController.m create mode 100644 DashWallet/Sources/UI/Menu/Tools/Masternode Keys/DWMasternodeViewController.h create mode 100644 DashWallet/Sources/UI/Menu/Tools/Masternode Keys/DWMasternodeViewController.m create mode 100644 DashWallet/Sources/UI/Menu/Tools/Masternode Keys/DWProviderUpdateRegistrarTransactionsViewController.h create mode 100644 DashWallet/Sources/UI/Menu/Tools/Masternode Keys/DWProviderUpdateRegistrarTransactionsViewController.m create mode 100644 DashWallet/Sources/UI/Menu/Tools/Masternode Keys/DWProviderUpdateServiceTransactionsViewController.h create mode 100644 DashWallet/Sources/UI/Menu/Tools/Masternode Keys/DWProviderUpdateServiceTransactionsViewController.m create mode 100644 DashWallet/Sources/UI/Menu/Tools/Masternode Keys/DWReclaimMasternodeViewController.h create mode 100644 DashWallet/Sources/UI/Menu/Tools/Masternode Keys/DWReclaimMasternodeViewController.m create mode 100644 DashWallet/Sources/UI/Menu/Tools/Masternode Keys/DWRegisterMasternodeViewController.h create mode 100644 DashWallet/Sources/UI/Menu/Tools/Masternode Keys/DWRegisterMasternodeViewController.m create mode 100644 DashWallet/Sources/UI/Menu/Tools/Masternode Keys/DWResultsMasternodeViewController.h create mode 100644 DashWallet/Sources/UI/Menu/Tools/Masternode Keys/DWResultsMasternodeViewController.m create mode 100644 DashWallet/Sources/UI/Menu/Tools/Masternode Keys/DWSignMessageViewController.h create mode 100644 DashWallet/Sources/UI/Menu/Tools/Masternode Keys/DWSignMessageViewController.m create mode 100644 DashWallet/Sources/UI/Menu/Tools/Masternode Keys/DWSignPayloadViewController.h create mode 100644 DashWallet/Sources/UI/Menu/Tools/Masternode Keys/DWSignPayloadViewController.m create mode 100644 DashWallet/Sources/UI/Menu/Tools/Masternode Keys/DWUpdateMasternodeRegistrarViewController.h create mode 100644 DashWallet/Sources/UI/Menu/Tools/Masternode Keys/DWUpdateMasternodeRegistrarViewController.m create mode 100644 DashWallet/Sources/UI/Menu/Tools/Masternode Keys/DWUpdateMasternodeRevocationViewController.h create mode 100644 DashWallet/Sources/UI/Menu/Tools/Masternode Keys/DWUpdateMasternodeRevocationViewController.m create mode 100644 DashWallet/Sources/UI/Menu/Tools/Masternode Keys/DWUpdateMasternodeServiceViewController.h create mode 100644 DashWallet/Sources/UI/Menu/Tools/Masternode Keys/DWUpdateMasternodeServiceViewController.m create mode 100644 DashWallet/Sources/UI/Menu/Tools/Masternode Keys/Masternode.storyboard diff --git a/DashWallet/Sources/UI/Menu/Tools/Masternode Keys/DWBaseMasternodeViewController.h b/DashWallet/Sources/UI/Menu/Tools/Masternode Keys/DWBaseMasternodeViewController.h new file mode 100644 index 000000000..cfab7e34a --- /dev/null +++ b/DashWallet/Sources/UI/Menu/Tools/Masternode Keys/DWBaseMasternodeViewController.h @@ -0,0 +1,33 @@ +// +// Created by Andrew Podkovyrin +// Copyright © 2019 Dash Core Group. All rights reserved. +// +// Licensed under the MIT License (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://opensource.org/licenses/MIT +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// + +#import + +NS_ASSUME_NONNULL_BEGIN + +@class DSChain; + +@interface DWBaseMasternodeViewController : UITableViewController + +@property (nonatomic, strong) DSChain *chain; +@property (nonatomic, strong) NSFetchedResultsController *fetchedResultsController; + +- (void)updateSearchString:(NSString *)searchString; + +@end + +NS_ASSUME_NONNULL_END diff --git a/DashWallet/Sources/UI/Menu/Tools/Masternode Keys/DWBaseMasternodeViewController.m b/DashWallet/Sources/UI/Menu/Tools/Masternode Keys/DWBaseMasternodeViewController.m new file mode 100644 index 000000000..7cbd2adc6 --- /dev/null +++ b/DashWallet/Sources/UI/Menu/Tools/Masternode Keys/DWBaseMasternodeViewController.m @@ -0,0 +1,162 @@ +// +// Created by Andrew Podkovyrin +// Copyright © 2019 Dash Core Group. All rights reserved. +// +// Licensed under the MIT License (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://opensource.org/licenses/MIT +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// + +#import "DWBaseMasternodeViewController.h" + +#import "DWEnvironment.h" +#import "DWMasternodeTableViewCell.h" +#import + +NS_ASSUME_NONNULL_BEGIN + +static NSString *const DWBaseMasternodeViewControllerCellId = @"MasternodeTableViewCellIdentifier"; + +@interface DWBaseMasternodeViewController () + +@property (nullable, copy, nonatomic) NSString *searchString; + +@end + +@implementation DWBaseMasternodeViewController + +- (void)viewDidLoad { + [super viewDidLoad]; + + self.chain = [DWEnvironment sharedInstance].currentChain; + + self.tableView.rowHeight = 93.0; + + UINib *nib = [UINib nibWithNibName:@"DWMasternodeTableViewCell" bundle:nil]; + NSParameterAssert(nib); + [self.tableView registerNib:nib forCellReuseIdentifier:DWBaseMasternodeViewControllerCellId]; +} + +- (void)updateSearchString:(NSString *)searchString { + self.searchString = searchString; + _fetchedResultsController = nil; + [self.tableView reloadData]; +} + +#pragma mark - FRC + +- (NSManagedObjectContext *)managedObjectContext { + return [NSManagedObject context]; +} + +- (NSPredicate *)searchPredicate { + // Get all shapeshifts that have been received by shapeshift.io or all shapeshifts that have no deposits but where we can verify a transaction has been pushed on the blockchain + if (self.searchString && ![self.searchString isEqualToString:@""]) { + if ([self.searchString isEqualToString:@"0"] || [self.searchString longLongValue]) { + NSArray *ipArray = [self.searchString componentsSeparatedByString:@"."]; + NSMutableArray *partPredicates = [NSMutableArray array]; + NSPredicate *chainPredicate = [NSPredicate predicateWithFormat:@"chain == %@", self.chain.chainEntity]; + [partPredicates addObject:chainPredicate]; + for (int i = 0; i < MIN(ipArray.count, 4); i++) { + if ([ipArray[i] isEqualToString:@""]) + break; + NSPredicate *currentPartPredicate = [NSPredicate predicateWithFormat:@"(((address >> %@) & 255) == %@)", @(24 - i * 8), @([ipArray[i] integerValue])]; + [partPredicates addObject:currentPartPredicate]; + } + + return [NSCompoundPredicate andPredicateWithSubpredicates:partPredicates]; + } + else { + return [NSPredicate predicateWithFormat:@"chain == %@", self.chain.chainEntity]; + } + } + else { + return [NSPredicate predicateWithFormat:@"chain == %@", self.chain.chainEntity]; + } +} + +- (NSFetchedResultsController *)fetchedResultsController { + if (_fetchedResultsController) + return _fetchedResultsController; + NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init]; + // Edit the entity name as appropriate. + NSEntityDescription *entity = [NSEntityDescription entityForName:@"DSSimplifiedMasternodeEntryEntity" inManagedObjectContext:self.managedObjectContext]; + [fetchRequest setEntity:entity]; + + // Set the batch size to a suitable number. + [fetchRequest setFetchBatchSize:20]; + + // Edit the sort key as appropriate. + NSSortDescriptor *claimSortDescriptor = [[NSSortDescriptor alloc] initWithKey:@"localMasternode" ascending:NO]; + NSSortDescriptor *addressSortDescriptor = [[NSSortDescriptor alloc] initWithKey:@"address" ascending:YES]; + NSSortDescriptor *portSortDescriptor = [[NSSortDescriptor alloc] initWithKey:@"port" ascending:YES]; + NSArray *sortDescriptors = @[ claimSortDescriptor, addressSortDescriptor, portSortDescriptor ]; + + [fetchRequest setSortDescriptors:sortDescriptors]; + + NSPredicate *filterPredicate = [self searchPredicate]; + [fetchRequest setPredicate:filterPredicate]; + + // Edit the section name key path and cache name if appropriate. + // nil for section name key path means "no sections". + NSFetchedResultsController *aFetchedResultsController = [[NSFetchedResultsController alloc] initWithFetchRequest:fetchRequest managedObjectContext:self.managedObjectContext sectionNameKeyPath:@"localMasternode" cacheName:nil]; + _fetchedResultsController = aFetchedResultsController; + NSError *error = nil; + if (![aFetchedResultsController performFetch:&error]) { + // Replace this implementation with code to handle the error appropriately. + // abort() causes the application to generate a crash log and terminate. You should not use this function in a shipping application, although it may be useful during development. + NSLog(@"Unresolved error %@, %@", error, [error userInfo]); + abort(); + } + + return aFetchedResultsController; +} + + +#pragma mark - TableView + +- (nullable NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section { + if ([self.fetchedResultsController sections].count == 1 || section) { + return NSLocalizedString(@"Masternodes", nil); + } + else { + return NSLocalizedString(@"My Masternodes", nil); + } +} + +- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView { + return [[self.fetchedResultsController sections] count]; +} + +- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section { + id sectionInfo = [[self.fetchedResultsController sections] objectAtIndex:section]; + return [sectionInfo numberOfObjects]; +} + +- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { + DWMasternodeTableViewCell *cell = (DWMasternodeTableViewCell *)[tableView dequeueReusableCellWithIdentifier:DWBaseMasternodeViewControllerCellId forIndexPath:indexPath]; + + [self configureCell:cell atIndexPath:indexPath]; + + return cell; +} + +- (void)configureCell:(DWMasternodeTableViewCell *)cell atIndexPath:(NSIndexPath *)indexPath { + DSSimplifiedMasternodeEntryEntity *simplifiedMasternodeEntryEntity = [self.fetchedResultsController objectAtIndexPath:indexPath]; + char s[INET6_ADDRSTRLEN]; + uint32_t ipAddress = CFSwapInt32BigToHost(simplifiedMasternodeEntryEntity.address); + cell.masternodeLocationLabel.text = [NSString stringWithFormat:@"%s:%d", inet_ntop(AF_INET, &ipAddress, s, sizeof(s)), simplifiedMasternodeEntryEntity.port]; + cell.outputLabel.text = [NSString stringWithFormat:@"%@", simplifiedMasternodeEntryEntity.providerRegistrationTransactionHash]; +} + +@end + +NS_ASSUME_NONNULL_END diff --git a/DashWallet/Sources/UI/Menu/Tools/Masternode Keys/DWDerivationPathKeysViewController.h b/DashWallet/Sources/UI/Menu/Tools/Masternode Keys/DWDerivationPathKeysViewController.h new file mode 100644 index 000000000..56796ee5a --- /dev/null +++ b/DashWallet/Sources/UI/Menu/Tools/Masternode Keys/DWDerivationPathKeysViewController.h @@ -0,0 +1,30 @@ +// +// Created by Sam Westrich +// Copyright © 2019 Dash Core Group. All rights reserved. +// +// Licensed under the MIT License (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://opensource.org/licenses/MIT +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// + +#import + +NS_ASSUME_NONNULL_BEGIN + +@class DSAuthenticationKeysDerivationPath; + +@interface DWDerivationPathKeysViewController : UITableViewController + +@property (nonatomic, strong) DSAuthenticationKeysDerivationPath *derivationPath; + +@end + +NS_ASSUME_NONNULL_END diff --git a/DashWallet/Sources/UI/Menu/Tools/Masternode Keys/DWDerivationPathKeysViewController.m b/DashWallet/Sources/UI/Menu/Tools/Masternode Keys/DWDerivationPathKeysViewController.m new file mode 100644 index 000000000..7081b22e3 --- /dev/null +++ b/DashWallet/Sources/UI/Menu/Tools/Masternode Keys/DWDerivationPathKeysViewController.m @@ -0,0 +1,174 @@ +// +// Created by Sam Westrich +// Copyright © 2019 Dash Core Group. All rights reserved. +// +// Licensed under the MIT License (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://opensource.org/licenses/MIT +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// + +#import "DWDerivationPathKeysViewController.h" +#import "DWSignMessageViewController.h" + +#import +#import + +static NSString *const KeyInfoCellId = @"KeyInfoCell"; +static NSString *const LoadMoreCellId = @"LoadMoreCell"; +static NSString *const SignMessageCellId = @"SignMessageCell"; + +typedef NS_ENUM(NSUInteger, DWDerivationPathInfo) { + DWDerivationPathInfo_Address, + DWDerivationPathInfo_PublicKey, + DWDerivationPathInfo_PrivateKey, + DWDerivationPathInfo_UsedOrNot, + DWDerivationPathInfo_SignMessage, + _DWDerivationPathInfo_Count, +}; + +@interface DWDerivationPathKeysViewController () + +@property (nonatomic, assign) NSInteger visibleIndexes; + +@end + +@implementation DWDerivationPathKeysViewController + +- (void)viewDidLoad { + [super viewDidLoad]; + + self.tableView.tableFooterView = [[UIView alloc] init]; + + self.visibleIndexes = [self.derivationPath firstUnusedIndex] + 1; +} + +#pragma mark - Table view data source + +- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView { + return self.visibleIndexes + 1; +} + +- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section { + if (section == self.visibleIndexes) { + return 1; + } + else { + return _DWDerivationPathInfo_Count; + } +} + +- (NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section { + if (section == self.visibleIndexes) { + return @""; + } + else { + return [NSString stringWithFormat:@"%ld", section]; + } +} + +- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { + if (indexPath.section == self.visibleIndexes) { + UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:LoadMoreCellId forIndexPath:indexPath]; + cell.textLabel.text = NSLocalizedString(@"Load more", nil); + return cell; + } + else { + UITableViewCell *cell; + + DSWallet *wallet = [DWEnvironment sharedInstance].currentWallet; + NSInteger index = indexPath.section; + DWDerivationPathInfo info = indexPath.row; + switch (info) { + case DWDerivationPathInfo_Address: { + cell = [tableView dequeueReusableCellWithIdentifier:KeyInfoCellId forIndexPath:indexPath]; + cell.textLabel.text = NSLocalizedString(@"Address", nil); + cell.detailTextLabel.text = [self.derivationPath addressAtIndex:index]; + + break; + } + case DWDerivationPathInfo_PublicKey: { + cell = [tableView dequeueReusableCellWithIdentifier:KeyInfoCellId forIndexPath:indexPath]; + cell.textLabel.text = NSLocalizedString(@"Public key", nil); + cell.detailTextLabel.text = [self.derivationPath publicKeyDataAtIndex:index].hexString; + + break; + } + case DWDerivationPathInfo_PrivateKey: { + cell = [tableView dequeueReusableCellWithIdentifier:KeyInfoCellId forIndexPath:indexPath]; + cell.textLabel.text = NSLocalizedString(@"Private key", nil); + @autoreleasepool { + + NSData *seed = [[DSBIP39Mnemonic sharedInstance] deriveKeyFromPhrase:wallet.seedPhraseIfAuthenticated withPassphrase:nil]; + DSKey *key = [self.derivationPath privateKeyAtIndex:index fromSeed:seed]; + if ([key isKindOfClass:[DSECDSAKey class]]) { + cell.detailTextLabel.text = [((DSECDSAKey *)key) privateKeyStringForChain:self.derivationPath.chain]; + } + else { + cell.detailTextLabel.text = key.secretKeyString; + } + } + break; + } + case DWDerivationPathInfo_UsedOrNot: { + cell = [tableView dequeueReusableCellWithIdentifier:KeyInfoCellId forIndexPath:indexPath]; + BOOL used = [self.derivationPath addressIsUsedAtIndex:index]; + cell.textLabel.text = used ? NSLocalizedString(@"Used", nil) : NSLocalizedString(@"Not used", nil); + if (used) { + DSLocalMasternode *localMasternode = [self.derivationPath.chain.chainManager.masternodeManager localMasternodeUsingIndex:index atDerivationPath:self.derivationPath]; + cell.detailTextLabel.text = localMasternode.ipAddressString; + } + else { + cell.detailTextLabel.text = nil; + } + + + break; + } + case DWDerivationPathInfo_SignMessage: { + cell = [tableView dequeueReusableCellWithIdentifier:SignMessageCellId forIndexPath:indexPath]; + cell.textLabel.text = NSLocalizedString(@"Sign Message", nil); + + break; + } + + default: + break; + } + + return cell; + } +} + +- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath { + if (indexPath.section == self.visibleIndexes) { + [tableView deselectRowAtIndexPath:indexPath animated:YES]; + + self.visibleIndexes += 1; + [tableView beginUpdates]; + [tableView insertSections:[NSIndexSet indexSetWithIndex:self.visibleIndexes - 1] withRowAnimation:UITableViewRowAnimationAutomatic]; + [tableView endUpdates]; + + [tableView scrollToRowAtIndexPath:[NSIndexPath indexPathForRow:0 inSection:self.visibleIndexes - 1] atScrollPosition:UITableViewScrollPositionMiddle animated:YES]; + } +} + +- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender { + if ([segue.identifier isEqualToString:@"SignMessageSegue"]) { + DWSignMessageViewController *signMessageViewController = (DWSignMessageViewController *)segue.destinationViewController; + DSWallet *wallet = [DWEnvironment sharedInstance].currentWallet; + NSData *seed = [[DSBIP39Mnemonic sharedInstance] deriveKeyFromPhrase:wallet.seedPhraseIfAuthenticated withPassphrase:nil]; + DSKey *key = [self.derivationPath privateKeyAtIndex:self.tableView.indexPathForSelectedRow.section fromSeed:seed]; + signMessageViewController.key = key; + } +} + + +@end diff --git a/DashWallet/Sources/UI/Menu/Tools/Masternode Keys/DWKeysOverviewViewController.h b/DashWallet/Sources/UI/Menu/Tools/Masternode Keys/DWKeysOverviewViewController.h new file mode 100644 index 000000000..4e4754beb --- /dev/null +++ b/DashWallet/Sources/UI/Menu/Tools/Masternode Keys/DWKeysOverviewViewController.h @@ -0,0 +1,28 @@ +// +// Created by Sam Westrich +// Copyright © 2019 Dash Core Group. All rights reserved. +// +// Licensed under the MIT License (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://opensource.org/licenses/MIT +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// + +#import + +NS_ASSUME_NONNULL_BEGIN + +@interface DWKeysOverviewViewController : UITableViewController + ++ (instancetype)controller; + +@end + +NS_ASSUME_NONNULL_END diff --git a/DashWallet/Sources/UI/Menu/Tools/Masternode Keys/DWKeysOverviewViewController.m b/DashWallet/Sources/UI/Menu/Tools/Masternode Keys/DWKeysOverviewViewController.m new file mode 100644 index 000000000..ca2f7d612 --- /dev/null +++ b/DashWallet/Sources/UI/Menu/Tools/Masternode Keys/DWKeysOverviewViewController.m @@ -0,0 +1,99 @@ +// +// Created by Sam Westrich +// Copyright © 2019 Dash Core Group. All rights reserved. +// +// Licensed under the MIT License (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://opensource.org/licenses/MIT +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// + +#import "DWKeysOverviewViewController.h" + +#import "DWDerivationPathKeysViewController.h" +#import +#import +#import + +static NSString *const OwnerKeysSegueId = @"OwnerKeysSegue"; +static NSString *const VotingKeysSegueId = @"VotingKeysSegue"; +static NSString *const OperatorKeysSegueId = @"OperatorKeysSegue"; + +@interface DWKeysOverviewViewController () + +@property (strong, nonatomic) IBOutlet UILabel *ownerKeysTitleLabel; +@property (strong, nonatomic) IBOutlet UILabel *votingKeysTitleLabel; +@property (strong, nonatomic) IBOutlet UILabel *operatorKeysTitleLabel; +@property (strong, nonatomic) IBOutlet UILabel *ownerKeysDetailLabel; +@property (strong, nonatomic) IBOutlet UILabel *votingKeysDetailLabel; +@property (strong, nonatomic) IBOutlet UILabel *operatorKeysDetailLabel; + +@property (strong, nonatomic) DSAuthenticationKeysDerivationPath *ownerDerivationPath; +@property (strong, nonatomic) DSAuthenticationKeysDerivationPath *votingDerivationPath; +@property (strong, nonatomic) DSAuthenticationKeysDerivationPath *operatorDerivationPath; + +@end + +@implementation DWKeysOverviewViewController + + ++ (instancetype)controller { + UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"Masternode" bundle:nil]; + DWKeysOverviewViewController *controller = [storyboard instantiateViewControllerWithIdentifier:@"KeysOverviewViewControllerIdentifier"]; + + return controller; +} + +- (void)viewDidLoad { + [super viewDidLoad]; + + self.title = NSLocalizedString(@"Wallet Keys", nil); + + DSWallet *wallet = [DWEnvironment sharedInstance].currentWallet; + DSDerivationPathFactory *factory = [DSDerivationPathFactory sharedInstance]; + self.ownerDerivationPath = [factory providerOwnerKeysDerivationPathForWallet:wallet]; + self.votingDerivationPath = [factory providerVotingKeysDerivationPathForWallet:wallet]; + self.operatorDerivationPath = [factory providerOperatorKeysDerivationPathForWallet:wallet]; + + self.tableView.tableFooterView = [[UIView alloc] init]; + + self.ownerKeysTitleLabel.text = NSLocalizedString(@"Owner Keys", nil); + self.votingKeysTitleLabel.text = NSLocalizedString(@"Voting Keys", nil); + self.operatorKeysTitleLabel.text = NSLocalizedString(@"Operator Keys", nil); + self.ownerKeysDetailLabel.text = [NSString stringWithFormat:NSLocalizedString(@"%ld used", nil), + self.ownerDerivationPath.usedAddresses.count]; + self.votingKeysDetailLabel.text = [NSString stringWithFormat:NSLocalizedString(@"%ld used", nil), + self.votingDerivationPath.usedAddresses.count]; + self.operatorKeysDetailLabel.text = [NSString stringWithFormat:NSLocalizedString(@"%ld used", nil), + self.operatorDerivationPath.usedAddresses.count]; +} + +- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender { + DSAuthenticationKeysDerivationPath *derivationPath = nil; + NSString *title = nil; + if ([segue.identifier isEqualToString:OwnerKeysSegueId]) { + derivationPath = self.ownerDerivationPath; + title = NSLocalizedString(@"Owner Keys", nil); + } + else if ([segue.identifier isEqualToString:VotingKeysSegueId]) { + derivationPath = self.votingDerivationPath; + title = NSLocalizedString(@"Voting Keys", nil); + } + else if ([segue.identifier isEqualToString:OperatorKeysSegueId]) { + derivationPath = self.operatorDerivationPath; + title = NSLocalizedString(@"Operator Keys", nil); + } + NSParameterAssert(derivationPath); + DWDerivationPathKeysViewController *controller = (DWDerivationPathKeysViewController *)segue.destinationViewController; + controller.derivationPath = derivationPath; + controller.title = title; +} + +@end diff --git a/DashWallet/Sources/UI/Menu/Tools/Masternode Keys/DWMasternodeDetailViewController.h b/DashWallet/Sources/UI/Menu/Tools/Masternode Keys/DWMasternodeDetailViewController.h new file mode 100644 index 000000000..442ffb671 --- /dev/null +++ b/DashWallet/Sources/UI/Menu/Tools/Masternode Keys/DWMasternodeDetailViewController.h @@ -0,0 +1,23 @@ +// +// DWMasternodeDetailViewController.h +// DashWallet +// +// Created by Sam Westrich on 2/21/19. +// Copyright © 2019 Dash Core Group. All rights reserved. +// + +#import + +NS_ASSUME_NONNULL_BEGIN + +@class DSLocalMasternode, DSSimplifiedMasternodeEntry; + +@interface DWMasternodeDetailViewController : UITableViewController + +@property (nonatomic, strong) DSLocalMasternode *localMasternode; +@property (nonatomic, strong) DSSimplifiedMasternodeEntry *simplifiedMasternodeEntry; + + +@end + +NS_ASSUME_NONNULL_END diff --git a/DashWallet/Sources/UI/Menu/Tools/Masternode Keys/DWMasternodeDetailViewController.m b/DashWallet/Sources/UI/Menu/Tools/Masternode Keys/DWMasternodeDetailViewController.m new file mode 100644 index 000000000..8b4852365 --- /dev/null +++ b/DashWallet/Sources/UI/Menu/Tools/Masternode Keys/DWMasternodeDetailViewController.m @@ -0,0 +1,181 @@ +// +// DWMasternodeDetailViewController.m +// DashWallet +// +// Created by Sam Westrich on 2/21/19. +// Copyright © 2019 Dash Core Group. All rights reserved. +// + +#import "DWMasternodeDetailViewController.h" +#import "BRCopyLabel.h" +#import "DSLocalMasternode.h" +#import "DSSimplifiedMasternodeEntry.h" +#import "DWEnvironment.h" +#import "DWProviderUpdateRegistrarTransactionsViewController.h" +#import "DWProviderUpdateServiceTransactionsViewController.h" +#import "DWReclaimMasternodeViewController.h" +#import "DWUpdateMasternodeRegistrarViewController.h" +#import "DWUpdateMasternodeServiceViewController.h" +#import + +@interface DWMasternodeDetailViewController () +@property (strong, nonatomic) IBOutlet UILabel *locationLabel; +@property (strong, nonatomic) IBOutlet UILabel *operatorKeyLabel; +@property (strong, nonatomic) IBOutlet UILabel *operatorPublicKeyLabel; +@property (strong, nonatomic) IBOutlet UILabel *ownerKeyLabel; +@property (strong, nonatomic) IBOutlet UILabel *votingKeyLabel; +@property (strong, nonatomic) IBOutlet UILabel *votingAddressLabel; +@property (strong, nonatomic) IBOutlet UILabel *fundsInHoldingLabel; +@property (strong, nonatomic) IBOutlet UILabel *activeLabel; +@property (strong, nonatomic) IBOutlet UILabel *payToAddress; +@property (strong, nonatomic) IBOutlet BRCopyLabel *proRegTxLabel; +@property (strong, nonatomic) IBOutlet BRCopyLabel *proUpRegTxLabel; +@property (strong, nonatomic) IBOutlet BRCopyLabel *proUpServTxLabel; +@property (strong, nonatomic) DSChain *chain; + +@end + +@implementation DWMasternodeDetailViewController + +- (void)viewDidLoad { + [super viewDidLoad]; + + char s[INET6_ADDRSTRLEN]; + uint32_t ipAddress = self.simplifiedMasternodeEntry.address.u32[3]; + + self.locationLabel.text = [NSString stringWithFormat:@"%s:%d", inet_ntop(AF_INET, &ipAddress, s, sizeof(s)), self.simplifiedMasternodeEntry.port]; + self.ownerKeyLabel.text = self.localMasternode.ownerKeysWallet ? @"SHOW" : @"NO"; + self.operatorKeyLabel.text = self.localMasternode.operatorKeysWallet ? @"SHOW" : @"NO"; + self.operatorPublicKeyLabel.text = uint384_hex(self.simplifiedMasternodeEntry.operatorPublicKey); + self.votingAddressLabel.text = self.simplifiedMasternodeEntry.votingAddress; + self.votingKeyLabel.text = self.localMasternode.votingKeysWallet ? @"SHOW" : @"NO"; + self.fundsInHoldingLabel.text = self.localMasternode.holdingKeysWallet ? @"YES" : @"NO"; + self.activeLabel.text = self.simplifiedMasternodeEntry.isValid ? @"YES" : @"NO"; + self.payToAddress.text = self.localMasternode.payoutAddress ? self.localMasternode.payoutAddress : @"Unknown"; + self.proRegTxLabel.text = uint256_hex(self.localMasternode.providerRegistrationTransaction.txHash); + self.proUpRegTxLabel.text = [NSString stringWithFormat:@"%lu", (unsigned long)self.localMasternode.providerUpdateRegistrarTransactions.count]; + self.proUpServTxLabel.text = [NSString stringWithFormat:@"%lu", (unsigned long)self.localMasternode.providerUpdateServiceTransactions.count]; + self.chain = [DWEnvironment sharedInstance].currentChain; +} + +- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender { + if ([segue.identifier isEqualToString:@"UpdateMasternodeServiceSegue"]) { + UINavigationController *navigationController = (UINavigationController *)segue.destinationViewController; + DWUpdateMasternodeServiceViewController *updateMasternodeServiceViewController = (DWUpdateMasternodeServiceViewController *)navigationController.topViewController; + updateMasternodeServiceViewController.localMasternode = self.localMasternode; + } + else if ([segue.identifier isEqualToString:@"UpdateMasternodeRegistrarSegue"]) { + UINavigationController *navigationController = (UINavigationController *)segue.destinationViewController; + DWUpdateMasternodeRegistrarViewController *updateMasternodeRegistrarViewController = (DWUpdateMasternodeRegistrarViewController *)navigationController.topViewController; + updateMasternodeRegistrarViewController.localMasternode = self.localMasternode; + updateMasternodeRegistrarViewController.simplifiedMasternodeEntry = self.simplifiedMasternodeEntry; + } + else if ([segue.identifier isEqualToString:@"ReclaimMasternodeSegue"]) { + UINavigationController *navigationController = (UINavigationController *)segue.destinationViewController; + DWReclaimMasternodeViewController *reclaimMasternodeViewController = (DWReclaimMasternodeViewController *)navigationController.topViewController; + reclaimMasternodeViewController.localMasternode = self.localMasternode; + } + else if ([segue.identifier isEqualToString:@"ShowProviderUpdateRegistrarTransactionsSegue"]) { + DWProviderUpdateRegistrarTransactionsViewController *providerUpdateRegistrarTransactionsViewController = segue.destinationViewController; + providerUpdateRegistrarTransactionsViewController.localMasternode = self.localMasternode; + } + else if ([segue.identifier isEqualToString:@"ShowProviderUpdateServiceTransactionsSegue"]) { + DWProviderUpdateServiceTransactionsViewController *providerUpdateServiceTransactionsViewController = segue.destinationViewController; + providerUpdateServiceTransactionsViewController.localMasternode = self.localMasternode; + } +} + +- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath { + switch (indexPath.section) { + case 0: { + switch (indexPath.row) { + case 2: + if (self.localMasternode.ownerKeysWallet && [self.ownerKeyLabel.text isEqualToString:@"SHOW"]) { + [self.localMasternode.ownerKeysWallet seedWithPrompt:@"Show owner key?" + forAmount:0 + completion:^(NSData *_Nullable seed, BOOL cancelled) { + if (seed) { + self.ownerKeyLabel.text = [[self.localMasternode ownerKeyFromSeed:seed] privateKeyStringForChain:self.chain]; + } + }]; + } + break; + case 3: + if (self.localMasternode.operatorKeysWallet && [self.operatorKeyLabel.text isEqualToString:@"SHOW"]) { + [self.localMasternode.operatorKeysWallet seedWithPrompt:@"Show operator key?" + forAmount:0 + completion:^(NSData *_Nullable seed, BOOL cancelled) { + if (seed) { + self.operatorKeyLabel.text = [self.localMasternode operatorKeyStringFromSeed:seed]; + } + }]; + } + break; + case 4: + if (self.localMasternode.operatorKeysWallet && [self.votingKeyLabel.text isEqualToString:@"SHOW"]) { + [self.localMasternode.operatorKeysWallet seedWithPrompt:@"Show voting key?" + forAmount:0 + completion:^(NSData *_Nullable seed, BOOL cancelled) { + if (seed) { + self.votingKeyLabel.text = [[self.localMasternode votingKeyFromSeed:seed] privateKeyStringForChain:self.chain]; + } + }]; + } + break; + + default: + break; + } + + } break; + case 1: { + switch (indexPath.row) { + case 0: { + if (!self.localMasternode) { + [self claimSimplifiedMasternodeEntry]; + } + } + default: + break; + } + } + default: + break; + } +} + +- (void)claimSimplifiedMasternodeEntry { + [[DSInsightManager sharedInstance] queryInsightForTransactionWithHash:[NSData dataWithUInt256:self.simplifiedMasternodeEntry.providerRegistrationTransactionHash].reverse.UInt256 + onChain:self.simplifiedMasternodeEntry.chain + completion:^(DSTransaction *transaction, NSError *error) { + if ([transaction isKindOfClass:[DSProviderRegistrationTransaction class]]) { + DSProviderRegistrationTransaction *providerRegistrationTransaction = (DSProviderRegistrationTransaction *)transaction; + DSLocalMasternode *localMasternode = [self.simplifiedMasternodeEntry.chain.chainManager.masternodeManager localMasternodeFromProviderRegistrationTransaction:providerRegistrationTransaction save:TRUE]; + } + }]; + + + // [self.moc performBlockAndWait:^{ // add the transaction to core data + // [DSChainEntity setContext:self.moc]; + // Class transactionEntityClass = [transaction entityClass]; + // [transactionEntityClass setContext:self.moc]; + // [DSTransactionHashEntity setContext:self.moc]; + // [DSAddressEntity setContext:self.moc]; + // if ([DSTransactionEntity countObjectsMatching:@"transactionHash.txHash == %@", uint256_data(txHash)] == 0) { + // + // DSTransactionEntity * transactionEntity = [transactionEntityClass managedObject]; + // [transactionEntity setAttributesFromTransaction:transaction]; + // [transactionEntityClass saveContext]; + // } + // }]; + + // uint32_t votingIndex; + // DSWallet * votingWallet = [self.simplifiedMasternodeEntry.chain walletHavingProviderVotingAuthenticationHash:self.simplifiedMasternodeEntry.keyIDVoting foundAtIndex:&votingIndex]; + // + // uint32_t operatorIndex; + // DSWallet * operatorWallet = [self.simplifiedMasternodeEntry.chain walletHavingProviderOperatorAuthenticationKey:self.simplifiedMasternodeEntry.operatorPublicKey foundAtIndex:&operatorIndex]; + // +} + + +@end diff --git a/DashWallet/Sources/UI/Menu/Tools/Masternode Keys/DWMasternodeRootViewController.h b/DashWallet/Sources/UI/Menu/Tools/Masternode Keys/DWMasternodeRootViewController.h new file mode 100644 index 000000000..6bc561674 --- /dev/null +++ b/DashWallet/Sources/UI/Menu/Tools/Masternode Keys/DWMasternodeRootViewController.h @@ -0,0 +1,28 @@ +// +// Created by Sam Westrich +// Copyright © 2019 Dash Core Group. All rights reserved. +// +// Licensed under the MIT License (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://opensource.org/licenses/MIT +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// + +#import + +NS_ASSUME_NONNULL_BEGIN + +@interface DWMasternodeRootViewController : UITableViewController + ++ (instancetype)controller; + +@end + +NS_ASSUME_NONNULL_END diff --git a/DashWallet/Sources/UI/Menu/Tools/Masternode Keys/DWMasternodeRootViewController.m b/DashWallet/Sources/UI/Menu/Tools/Masternode Keys/DWMasternodeRootViewController.m new file mode 100644 index 000000000..d6f443d61 --- /dev/null +++ b/DashWallet/Sources/UI/Menu/Tools/Masternode Keys/DWMasternodeRootViewController.m @@ -0,0 +1,55 @@ +// +// Created by Sam Westrich +// Copyright © 2019 Dash Core Group. All rights reserved. +// +// Licensed under the MIT License (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://opensource.org/licenses/MIT +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// + +#import "DWMasternodeRootViewController.h" + +@interface DWMasternodeRootViewController () + +@end + +@implementation DWMasternodeRootViewController + ++ (instancetype)controller { + UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"Masternode" bundle:nil]; + DWMasternodeRootViewController *controller = [storyboard instantiateViewControllerWithIdentifier:@"MasternodeOverviewViewControllerIdentifier"]; + + return controller; +} + +- (void)viewDidLoad { + [super viewDidLoad]; + + // Uncomment the following line to preserve selection between presentations. + // self.clearsSelectionOnViewWillAppear = NO; + + // Uncomment the following line to display an Edit button in the navigation bar for this view controller. + // self.navigationItem.rightBarButtonItem = self.editButtonItem; +} + +#pragma mark - Table view data source + +/* +#pragma mark - Navigation + +// In a storyboard-based application, you will often want to do a little preparation before navigation +- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender { + // Get the new view controller using [segue destinationViewController]. + // Pass the selected object to the new view controller. +} +*/ + +@end diff --git a/DashWallet/Sources/UI/Menu/Tools/Masternode Keys/DWMasternodeViewController.h b/DashWallet/Sources/UI/Menu/Tools/Masternode Keys/DWMasternodeViewController.h new file mode 100644 index 000000000..0a09df594 --- /dev/null +++ b/DashWallet/Sources/UI/Menu/Tools/Masternode Keys/DWMasternodeViewController.h @@ -0,0 +1,14 @@ +// +// DWMasternodeViewController.h +// DashWallet +// +// Created by Sam Westrich on 6/10/18. +// Copyright © 2018 Dash Core Group. All rights reserved. +// + +#import "DWBaseMasternodeViewController.h" +#import + +@interface DWMasternodeViewController : DWBaseMasternodeViewController + +@end diff --git a/DashWallet/Sources/UI/Menu/Tools/Masternode Keys/DWMasternodeViewController.m b/DashWallet/Sources/UI/Menu/Tools/Masternode Keys/DWMasternodeViewController.m new file mode 100644 index 000000000..ff28a208f --- /dev/null +++ b/DashWallet/Sources/UI/Menu/Tools/Masternode Keys/DWMasternodeViewController.m @@ -0,0 +1,108 @@ +// +// DWMasternodeViewController.m +// DashWallet +// +// Created by Sam Westrich on 6/10/18. +// Copyright © 2018 Dash Core Group. All rights reserved. +// + +#import "DWMasternodeViewController.h" +#import "DWMasternodeDetailViewController.h" +#import "DWMasternodeTableViewCell.h" +#import "DWRegisterMasternodeViewController.h" +#import "DWResultsMasternodeViewController.h" +#import +#import + +static UITextField *TextFieldSubviewOfView(UIView *view) { + if ([view isKindOfClass:UITextField.class]) { + return (UITextField *)view; + } + else { + UITextField *textField = nil; + for (UIView *subview in view.subviews) { + textField = TextFieldSubviewOfView(subview); + if (textField) { + break; + } + } + return textField; + } +} + +@interface DWMasternodeViewController () + +@property (strong, nonatomic) IBOutlet UIBarButtonItem *registerButton; +@property (strong, nonatomic) UISearchController *searchController; +@property (strong, nonatomic) DWResultsMasternodeViewController *searchResultsController; + +@end + +@implementation DWMasternodeViewController + +- (void)viewDidLoad { + [super viewDidLoad]; + + self.definesPresentationContext = YES; + + DWResultsMasternodeViewController *searchResultsController = [[DWResultsMasternodeViewController alloc] initWithStyle:UITableViewStyleGrouped]; + searchResultsController.tableView.delegate = self; + self.searchResultsController = searchResultsController; + + UIColor *dashBlueColor = [UIColor colorWithRed:0.0 green:141.0 / 255.0 blue:228.0 / 255.0 alpha:1.0]; + UISearchController *searchController = [[UISearchController alloc] initWithSearchResultsController:searchResultsController]; + searchController.searchResultsUpdater = self; + searchController.searchBar.delegate = self; + searchController.searchBar.autocapitalizationType = UITextAutocapitalizationTypeNone; + searchController.searchBar.searchBarStyle = UISearchBarStyleProminent; + searchController.searchBar.barTintColor = dashBlueColor; + searchController.searchBar.tintColor = [UIColor whiteColor]; + UITextField *searchTextField = TextFieldSubviewOfView(searchController.searchBar); + searchTextField.tintColor = dashBlueColor; + UIView *textfieldBackground = searchTextField.subviews.firstObject; + textfieldBackground.backgroundColor = [UIColor whiteColor]; + textfieldBackground.layer.cornerRadius = 10; + textfieldBackground.clipsToBounds = YES; + if (@available(iOS 11.0, *)) { + self.navigationItem.searchController = searchController; + self.navigationItem.hidesSearchBarWhenScrolling = NO; + } + else { + self.tableView.tableHeaderView = searchController.searchBar; + } + self.searchController = searchController; +} + +#pragma mark - Table view data source + +- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath { + [tableView deselectRowAtIndexPath:indexPath animated:YES]; + + DSSimplifiedMasternodeEntryEntity *simplifiedMasternodeEntryEntity = [self.fetchedResultsController objectAtIndexPath:indexPath]; + DWMasternodeDetailViewController *masternodeDetailViewController = (DWMasternodeDetailViewController *)[self.storyboard instantiateViewControllerWithIdentifier:@"DWMasternodeDetailViewControllerId"]; + masternodeDetailViewController.simplifiedMasternodeEntry = simplifiedMasternodeEntryEntity.simplifiedMasternodeEntry; + masternodeDetailViewController.localMasternode = simplifiedMasternodeEntryEntity.localMasternode ? [simplifiedMasternodeEntryEntity.localMasternode loadLocalMasternode] : nil; + [self.navigationController pushViewController:masternodeDetailViewController animated:YES]; +} + +- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender { + if ([segue.identifier isEqualToString:@"RegisterMasternodeSegue"]) { + UINavigationController *navigationController = (UINavigationController *)segue.destinationViewController; + DWRegisterMasternodeViewController *registerMasternodeViewController = (DWRegisterMasternodeViewController *)navigationController.topViewController; + registerMasternodeViewController.chain = self.chain; + } +} + +#pragma mark UISearchResultsUpdating + +- (void)updateSearchResultsForSearchController:(UISearchController *)searchController { + [self.searchResultsController updateSearchString:searchController.searchBar.text]; +} + +#pragma mark UISearchBarDelegate + +- (void)searchBarSearchButtonClicked:(UISearchBar *)searchBar { + [searchBar resignFirstResponder]; +} + +@end diff --git a/DashWallet/Sources/UI/Menu/Tools/Masternode Keys/DWProviderUpdateRegistrarTransactionsViewController.h b/DashWallet/Sources/UI/Menu/Tools/Masternode Keys/DWProviderUpdateRegistrarTransactionsViewController.h new file mode 100644 index 000000000..b699c95cd --- /dev/null +++ b/DashWallet/Sources/UI/Menu/Tools/Masternode Keys/DWProviderUpdateRegistrarTransactionsViewController.h @@ -0,0 +1,21 @@ +// +// DWProviderUpdateRegistrarTransactionsViewController.h +// DashWallet +// +// Created by Sam Westrich on 3/3/19. +// Copyright © 2019 Dash Core Group. All rights reserved. +// + +#import + +@class DSLocalMasternode; + +NS_ASSUME_NONNULL_BEGIN + +@interface DWProviderUpdateRegistrarTransactionsViewController : UITableViewController + +@property (nonatomic, strong) DSLocalMasternode *localMasternode; + +@end + +NS_ASSUME_NONNULL_END diff --git a/DashWallet/Sources/UI/Menu/Tools/Masternode Keys/DWProviderUpdateRegistrarTransactionsViewController.m b/DashWallet/Sources/UI/Menu/Tools/Masternode Keys/DWProviderUpdateRegistrarTransactionsViewController.m new file mode 100644 index 000000000..b925b4161 --- /dev/null +++ b/DashWallet/Sources/UI/Menu/Tools/Masternode Keys/DWProviderUpdateRegistrarTransactionsViewController.m @@ -0,0 +1,97 @@ +// +// DWProviderUpdateRegistrarTransactionsViewController.m +// DashWallet +// +// Created by Sam Westrich on 3/3/19. +// Copyright © 2019 Dash Core Group. All rights reserved. +// + +#import "DWProviderUpdateRegistrarTransactionsViewController.h" +#import "DWProviderUpdateRegistrarTableViewCell.h" + +@interface DWProviderUpdateRegistrarTransactionsViewController () + +@end + +@implementation DWProviderUpdateRegistrarTransactionsViewController + +- (void)viewDidLoad { + [super viewDidLoad]; + + // Uncomment the following line to preserve selection between presentations. + // self.clearsSelectionOnViewWillAppear = NO; + + // Uncomment the following line to display an Edit button in the navigation bar for this view controller. + // self.navigationItem.rightBarButtonItem = self.editButtonItem; +} + +#pragma mark - Table view data source + +- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView { + return 1; +} + +- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section { + return self.localMasternode.providerUpdateRegistrarTransactions.count; +} + + +- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { + static NSString *reuseIdentifier = @"RegistrarTransactionCellIdentifier"; + DWProviderUpdateRegistrarTableViewCell *cell = (DWProviderUpdateRegistrarTableViewCell *)[tableView dequeueReusableCellWithIdentifier:reuseIdentifier forIndexPath:indexPath]; + + DSProviderUpdateRegistrarTransaction *transaction = [self.localMasternode.providerUpdateRegistrarTransactions objectAtIndex:indexPath.row]; + + cell.blockHeightLabel.text = [NSString stringWithFormat:@"%d", transaction.blockHeight]; + cell.operatorKeyLabel.text = [NSData dataWithUInt384:transaction.operatorKey].hexString; + cell.payToAddressLabel.text = [NSString addressWithScriptPubKey:transaction.scriptPayout onChain:transaction.chain]; + + return cell; +} + + +/* +// Override to support conditional editing of the table view. +- (BOOL)tableView:(UITableView *)tableView canEditRowAtIndexPath:(NSIndexPath *)indexPath { + // Return NO if you do not want the specified item to be editable. + return YES; +} +*/ + +/* +// Override to support editing the table view. +- (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath { + if (editingStyle == UITableViewCellEditingStyleDelete) { + // Delete the row from the data source + [tableView deleteRowsAtIndexPaths:@[indexPath] withRowAnimation:UITableViewRowAnimationFade]; + } else if (editingStyle == UITableViewCellEditingStyleInsert) { + // Create a new instance of the appropriate class, insert it into the array, and add a new row to the table view + } +} +*/ + +/* +// Override to support rearranging the table view. +- (void)tableView:(UITableView *)tableView moveRowAtIndexPath:(NSIndexPath *)fromIndexPath toIndexPath:(NSIndexPath *)toIndexPath { +} +*/ + +/* +// Override to support conditional rearranging of the table view. +- (BOOL)tableView:(UITableView *)tableView canMoveRowAtIndexPath:(NSIndexPath *)indexPath { + // Return NO if you do not want the item to be re-orderable. + return YES; +} +*/ + +/* +#pragma mark - Navigation + +// In a storyboard-based application, you will often want to do a little preparation before navigation +- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender { + // Get the new view controller using [segue destinationViewController]. + // Pass the selected object to the new view controller. +} +*/ + +@end diff --git a/DashWallet/Sources/UI/Menu/Tools/Masternode Keys/DWProviderUpdateServiceTransactionsViewController.h b/DashWallet/Sources/UI/Menu/Tools/Masternode Keys/DWProviderUpdateServiceTransactionsViewController.h new file mode 100644 index 000000000..8c8957dd9 --- /dev/null +++ b/DashWallet/Sources/UI/Menu/Tools/Masternode Keys/DWProviderUpdateServiceTransactionsViewController.h @@ -0,0 +1,21 @@ +// +// DWProviderUpdateServiceTransactionsViewController.h +// DashWallet +// +// Created by Sam Westrich on 3/3/19. +// Copyright © 2019 Dash Core Group. All rights reserved. +// + +#import + +@class DSLocalMasternode; + +NS_ASSUME_NONNULL_BEGIN + +@interface DWProviderUpdateServiceTransactionsViewController : UITableViewController + +@property (nonatomic, strong) DSLocalMasternode *localMasternode; + +@end + +NS_ASSUME_NONNULL_END diff --git a/DashWallet/Sources/UI/Menu/Tools/Masternode Keys/DWProviderUpdateServiceTransactionsViewController.m b/DashWallet/Sources/UI/Menu/Tools/Masternode Keys/DWProviderUpdateServiceTransactionsViewController.m new file mode 100644 index 000000000..c08f47fab --- /dev/null +++ b/DashWallet/Sources/UI/Menu/Tools/Masternode Keys/DWProviderUpdateServiceTransactionsViewController.m @@ -0,0 +1,103 @@ +// +// DWProviderUpdateServiceTransactionsViewController.m +// DashWallet +// +// Created by Sam Westrich on 3/3/19. +// Copyright © 2019 Dash Core Group. All rights reserved. +// + +#import "DWProviderUpdateServiceTransactionsViewController.h" +#import "DSLocalMasternode.h" +#import "DSProviderUpdateServiceTransaction.h" +#import "DWProviderUpdateServiceTableViewCell.h" +#import "NSData+Bitcoin.h" +#import "NSString+Dash.h" +#include + +@interface DWProviderUpdateServiceTransactionsViewController () + +@end + +@implementation DWProviderUpdateServiceTransactionsViewController + +- (void)viewDidLoad { + [super viewDidLoad]; + + // Uncomment the following line to preserve selection between presentations. + // self.clearsSelectionOnViewWillAppear = NO; + + // Uncomment the following line to display an Edit button in the navigation bar for this view controller. + // self.navigationItem.rightBarButtonItem = self.editButtonItem; +} + +#pragma mark - Table view data source + +- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView { + return 1; +} + +- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section { + return self.localMasternode.providerUpdateServiceTransactions.count; +} + + +- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { + static NSString *reuseIdentifier = @"ServiceTransactionCellIdentifier"; + DWProviderUpdateServiceTableViewCell *cell = (DWProviderUpdateServiceTableViewCell *)[tableView dequeueReusableCellWithIdentifier:reuseIdentifier forIndexPath:indexPath]; + + DSProviderUpdateServiceTransaction *transaction = [self.localMasternode.providerUpdateServiceTransactions objectAtIndex:indexPath.row]; + + cell.blockHeightLabel.text = [NSString stringWithFormat:@"%d", transaction.blockHeight]; + cell.operatorRewardPayoutAddressLabel.text = (transaction.scriptPayout.length ? [NSString addressWithScriptPubKey:transaction.scriptPayout onChain:transaction.chain] : @""); + char s[INET6_ADDRSTRLEN]; + uint32_t ipAddress = transaction.ipAddress.u32[3]; + cell.locationLabel.text = [NSString stringWithFormat:@"%s:%d", inet_ntop(AF_INET, &ipAddress, s, sizeof(s)), self.localMasternode.port]; + return cell; +} + + +/* +// Override to support conditional editing of the table view. +- (BOOL)tableView:(UITableView *)tableView canEditRowAtIndexPath:(NSIndexPath *)indexPath { + // Return NO if you do not want the specified item to be editable. + return YES; +} +*/ + +/* +// Override to support editing the table view. +- (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath { + if (editingStyle == UITableViewCellEditingStyleDelete) { + // Delete the row from the data source + [tableView deleteRowsAtIndexPaths:@[indexPath] withRowAnimation:UITableViewRowAnimationFade]; + } else if (editingStyle == UITableViewCellEditingStyleInsert) { + // Create a new instance of the appropriate class, insert it into the array, and add a new row to the table view + } +} +*/ + +/* +// Override to support rearranging the table view. +- (void)tableView:(UITableView *)tableView moveRowAtIndexPath:(NSIndexPath *)fromIndexPath toIndexPath:(NSIndexPath *)toIndexPath { +} +*/ + +/* +// Override to support conditional rearranging of the table view. +- (BOOL)tableView:(UITableView *)tableView canMoveRowAtIndexPath:(NSIndexPath *)indexPath { + // Return NO if you do not want the item to be re-orderable. + return YES; +} +*/ + +/* +#pragma mark - Navigation + +// In a storyboard-based application, you will often want to do a little preparation before navigation +- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender { + // Get the new view controller using [segue destinationViewController]. + // Pass the selected object to the new view controller. +} +*/ + +@end diff --git a/DashWallet/Sources/UI/Menu/Tools/Masternode Keys/DWReclaimMasternodeViewController.h b/DashWallet/Sources/UI/Menu/Tools/Masternode Keys/DWReclaimMasternodeViewController.h new file mode 100644 index 000000000..1431d2bd7 --- /dev/null +++ b/DashWallet/Sources/UI/Menu/Tools/Masternode Keys/DWReclaimMasternodeViewController.h @@ -0,0 +1,21 @@ +// +// DWReclaimMasternodeViewController.h +// DashWallet +// +// Created by Sam Westrich on 2/28/19. +// Copyright © 2019 Dash Core Group. All rights reserved. +// + +#import + +NS_ASSUME_NONNULL_BEGIN + +@class DSLocalMasternode; + +@interface DWReclaimMasternodeViewController : UITableViewController + +@property (nonatomic, strong) DSLocalMasternode *localMasternode; + +@end + +NS_ASSUME_NONNULL_END diff --git a/DashWallet/Sources/UI/Menu/Tools/Masternode Keys/DWReclaimMasternodeViewController.m b/DashWallet/Sources/UI/Menu/Tools/Masternode Keys/DWReclaimMasternodeViewController.m new file mode 100644 index 000000000..d705f1796 --- /dev/null +++ b/DashWallet/Sources/UI/Menu/Tools/Masternode Keys/DWReclaimMasternodeViewController.m @@ -0,0 +1,98 @@ +// +// DWReclaimMasternodeViewController.m +// DashWallet +// +// Created by Sam Westrich on 2/28/19. +// Copyright © 2019 Dash Core Group. All rights reserved. +// + +#import "DWReclaimMasternodeViewController.h" +#import "DWEnvironment.h" +#import "DWKeyValueTableViewCell.h" +#include + +@interface DWReclaimMasternodeViewController () + +@property (nonatomic, strong) DSAccount *account; + +@end + +@implementation DWReclaimMasternodeViewController + +- (void)viewDidLoad { + [super viewDidLoad]; + self.account = [DWEnvironment sharedInstance].currentAccount; +} + +#pragma mark - Table view data source + +- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView { + return 1; +} + +- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section { + return 0; +} + +- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { + switch (indexPath.section) { + case 0: { + switch (indexPath.row) { + case 0: + return nil; + } + } + } + return nil; +} + +- (IBAction)reclaimMasternode:(id)sender { + [self.localMasternode reclaimTransactionToAccount:self.account + completion:^(DSTransaction *_Nonnull reclaimTransaction) { + if (reclaimTransaction) { + DSMasternodeHoldingsDerivationPath *derivationPath = [[DSDerivationPathFactory sharedInstance] providerFundsDerivationPathForWallet:self.localMasternode.holdingKeysWallet]; + [derivationPath signTransaction:reclaimTransaction + withPrompt:@"Would you like to update this masternode?" + completion:^(BOOL signedTransaction, BOOL cancelled) { + if (signedTransaction) { + [self.localMasternode.providerRegistrationTransaction.chain.chainManager.transactionManager publishTransaction:reclaimTransaction + completion:^(NSError *_Nullable error) { + if (error) { + [self raiseIssue:@"Error" message:error.localizedDescription]; + } + else { + //[masternode registerInWallet]; + [self.presentingViewController dismissViewControllerAnimated:TRUE completion:nil]; + } + }]; + } + else { + [self raiseIssue:@"Error" message:@"Transaction was not signed."]; + } + }]; + } + else { + [self raiseIssue:@"Error" message:@"Unable to create Reclaim Transaction."]; + } + }]; +} + +- (void)raiseIssue:(NSString *)issue message:(NSString *)message { + UIAlertController *alert = [UIAlertController alertControllerWithTitle:issue message:message preferredStyle:UIAlertControllerStyleAlert]; + [alert addAction:[UIAlertAction actionWithTitle:@"Ok" + style:UIAlertActionStyleCancel + handler:^(UIAlertAction *_Nonnull action){ + + }]]; + [self presentViewController:alert + animated:TRUE + completion:^{ + + }]; +} + +- (IBAction)cancel { + [self.presentingViewController dismissViewControllerAnimated:TRUE completion:nil]; +} + +@end diff --git a/DashWallet/Sources/UI/Menu/Tools/Masternode Keys/DWRegisterMasternodeViewController.h b/DashWallet/Sources/UI/Menu/Tools/Masternode Keys/DWRegisterMasternodeViewController.h new file mode 100644 index 000000000..4a927d0cd --- /dev/null +++ b/DashWallet/Sources/UI/Menu/Tools/Masternode Keys/DWRegisterMasternodeViewController.h @@ -0,0 +1,20 @@ +// +// DWRegisterMasternodeViewController.h +// DashWallet +// +// Created by Sam Westrich on 2/9/19. +// Copyright © 2019 Dash Core Group. All rights reserved. +// + +#import "DWSignPayloadViewController.h" +#import + +NS_ASSUME_NONNULL_BEGIN + +@interface DWRegisterMasternodeViewController : UITableViewController + +@property (nonatomic, strong) DSChain *chain; + +@end + +NS_ASSUME_NONNULL_END diff --git a/DashWallet/Sources/UI/Menu/Tools/Masternode Keys/DWRegisterMasternodeViewController.m b/DashWallet/Sources/UI/Menu/Tools/Masternode Keys/DWRegisterMasternodeViewController.m new file mode 100644 index 000000000..2dbd7b588 --- /dev/null +++ b/DashWallet/Sources/UI/Menu/Tools/Masternode Keys/DWRegisterMasternodeViewController.m @@ -0,0 +1,225 @@ +// +// DWRegisterMasternodeViewController.m +// DashWallet +// +// Created by Sam Westrich on 2/9/19. +// Copyright © 2019 Dash Core Group. All rights reserved. +// + +#import "DWRegisterMasternodeViewController.h" +#import "DWEnvironment.h" +#import "DWKeyValueTableViewCell.h" +#import "DWSignPayloadViewController.h" +#include + +@interface DWRegisterMasternodeViewController () + +@property (nonatomic, strong) DWKeyValueTableViewCell *collateralTransactionTableViewCell; +@property (nonatomic, strong) DWKeyValueTableViewCell *collateralIndexTableViewCell; +@property (nonatomic, strong) DWKeyValueTableViewCell *ipAddressTableViewCell; +@property (nonatomic, strong) DWKeyValueTableViewCell *portTableViewCell; +@property (nonatomic, strong) DWKeyValueTableViewCell *payToAddressTableViewCell; +@property (nonatomic, strong) DWKeyValueTableViewCell *ownerIndexTableViewCell; +@property (nonatomic, strong) DWKeyValueTableViewCell *operatorIndexTableViewCell; +@property (nonatomic, strong) DWKeyValueTableViewCell *votingIndexTableViewCell; +@property (nonatomic, strong) DSAccount *account; +@property (nonatomic, strong) DSWallet *wallet; +@property (nonatomic, strong) DSProviderRegistrationTransaction *providerRegistrationTransaction; +@property (nonatomic, strong) DSTransaction *collateralTransaction; + +@end + +@implementation DWRegisterMasternodeViewController + +- (void)viewDidLoad { + [super viewDidLoad]; + self.payToAddressTableViewCell = [self.tableView dequeueReusableCellWithIdentifier:@"MasternodePayoutAddressCellIdentifier"]; + self.collateralTransactionTableViewCell = [self.tableView dequeueReusableCellWithIdentifier:@"MasternodeCollateralTransactionCellIdentifier"]; + self.collateralIndexTableViewCell = [self.tableView dequeueReusableCellWithIdentifier:@"MasternodeCollateralIndexCellIdentifier"]; + self.ipAddressTableViewCell = [self.tableView dequeueReusableCellWithIdentifier:@"MasternodeIPAddressCellIdentifier"]; + self.portTableViewCell = [self.tableView dequeueReusableCellWithIdentifier:@"MasternodePortCellIdentifier"]; + self.portTableViewCell.valueTextField.text = [NSString stringWithFormat:@"%d", self.chain.standardPort]; + self.ownerIndexTableViewCell = [self.tableView dequeueReusableCellWithIdentifier:@"MasternodeOwnerIndexCellIdentifier"]; + self.votingIndexTableViewCell = [self.tableView dequeueReusableCellWithIdentifier:@"MasternodeVotingIndexCellIdentifier"]; + self.operatorIndexTableViewCell = [self.tableView dequeueReusableCellWithIdentifier:@"MasternodeOperatorIndexCellIdentifier"]; + self.wallet = [DWEnvironment sharedInstance].currentWallet; + self.account = [DWEnvironment sharedInstance].currentAccount; +} + +#pragma mark - Table view data source + +- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView { + return 1; +} + +- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section { + return 8; +} + +- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { + switch (indexPath.section) { + case 0: { + switch (indexPath.row) { + case 0: + return self.collateralTransactionTableViewCell; + case 1: + return self.collateralIndexTableViewCell; + case 2: + return self.ipAddressTableViewCell; + case 3: + return self.portTableViewCell; + case 4: + return self.ownerIndexTableViewCell; + case 5: + return self.operatorIndexTableViewCell; + case 6: + return self.votingIndexTableViewCell; + case 7: + return self.payToAddressTableViewCell; + } + } + } + return nil; +} + +- (void)signTransactionInputs:(DSProviderRegistrationTransaction *)providerRegistrationTransaction { + [self.account signTransaction:providerRegistrationTransaction + withPrompt:@"Would you like to register this masternode?" + completion:^(BOOL signedTransaction, BOOL cancelled) { + if (signedTransaction) { + [self.chain.chainManager.transactionManager publishTransaction:providerRegistrationTransaction + completion:^(NSError *_Nullable error) { + if (error) { + [self raiseIssue:@"Error" message:error.localizedDescription]; + } + else { + //[masternode registerInWallet]; + [self.presentingViewController dismissViewControllerAnimated:TRUE completion:nil]; + } + }]; + } + else { + [self raiseIssue:@"Error" message:@"Transaction was not signed."]; + } + }]; +} + +- (IBAction)registerMasternode:(id)sender { + NSString *ipAddressString = [self.ipAddressTableViewCell.valueTextField.text stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]]; + NSString *portString = [self.portTableViewCell.valueTextField.text stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]]; + UInt128 ipAddress = {.u32 = {0, 0, CFSwapInt32HostToBig(0xffff), 0}}; + struct in_addr addrV4; + if (inet_aton([ipAddressString UTF8String], &addrV4) != 0) { + uint32_t ip = ntohl(addrV4.s_addr); + ipAddress.u32[3] = CFSwapInt32HostToBig(ip); + DSDLog(@"%08x", ip); + } + uint16_t port = [portString intValue]; + + uint32_t ownerWalletIndex = UINT32_MAX; + uint32_t votingWalletIndex = UINT32_MAX; + uint32_t operatorWalletIndex = UINT32_MAX; + + if (self.ownerIndexTableViewCell.valueTextField.text && ![self.ownerIndexTableViewCell.valueTextField.text isEqualToString:@""]) { + ownerWalletIndex = (uint32_t)[self.ownerIndexTableViewCell.valueTextField.text integerValue]; + } + + if (self.operatorIndexTableViewCell.valueTextField.text && ![self.operatorIndexTableViewCell.valueTextField.text isEqualToString:@""]) { + operatorWalletIndex = (uint32_t)[self.operatorIndexTableViewCell.valueTextField.text integerValue]; + } + + if (self.votingIndexTableViewCell.valueTextField.text && ![self.votingIndexTableViewCell.valueTextField.text isEqualToString:@""]) { + votingWalletIndex = (uint32_t)[self.votingIndexTableViewCell.valueTextField.text integerValue]; + } + + DSLocalMasternode *masternode = [self.chain.chainManager.masternodeManager createNewMasternodeWithIPAddress:ipAddress onPort:port inFundsWallet:self.wallet fundsWalletIndex:UINT32_MAX inOperatorWallet:self.wallet operatorWalletIndex:operatorWalletIndex inOwnerWallet:self.wallet ownerWalletIndex:ownerWalletIndex inVotingWallet:self.wallet votingWalletIndex:votingWalletIndex]; + + NSString *payoutAddress = [self.payToAddressTableViewCell.valueTextField.text isValidDashAddressOnChain:self.chain] ? self.payToAddressTableViewCell.textLabel.text : self.account.receiveAddress; + + + DSUTXO collateral = DSUTXO_ZERO; + UInt256 nonReversedCollateralHash = UINT256_ZERO; + NSString *collateralTransactionHash = self.collateralTransactionTableViewCell.valueTextField.text; + if (![collateralTransactionHash isEqual:@""]) { + NSData *collateralTransactionHashData = [collateralTransactionHash hexToData]; + if (collateralTransactionHashData.length != 32) + return; + collateral.hash = collateralTransactionHashData.reverse.UInt256; + + nonReversedCollateralHash = collateralTransactionHashData.UInt256; + collateral.n = [self.collateralIndexTableViewCell.valueTextField.text integerValue]; + } + + + [masternode registrationTransactionFundedByAccount:self.account + toAddress:payoutAddress + withCollateral:collateral + completion:^(DSProviderRegistrationTransaction *_Nonnull providerRegistrationTransaction) { + if (providerRegistrationTransaction) { + if (dsutxo_is_zero(collateral)) { + [self signTransactionInputs:providerRegistrationTransaction]; + } + else { + [[DSInsightManager sharedInstance] queryInsightForTransactionWithHash:nonReversedCollateralHash + onChain:self.chain + completion:^(DSTransaction *transaction, NSError *error) { + NSIndexSet *indexSet = [[transaction outputAmounts] indexesOfObjectsPassingTest:^BOOL(id _Nonnull obj, NSUInteger idx, BOOL *_Nonnull stop) { + if ([obj isEqual:@(MASTERNODE_COST)]) + return TRUE; + return FALSE; + }]; + if ([indexSet containsIndex:collateral.n]) { + self.collateralTransaction = transaction; + self.providerRegistrationTransaction = providerRegistrationTransaction; + dispatch_async(dispatch_get_main_queue(), ^{ + [self performSegueWithIdentifier:@"PayloadSigningSegue" sender:self]; + }); + } + else { + dispatch_async(dispatch_get_main_queue(), ^{ + [self raiseIssue:@"Error" message:@"Incorrect collateral index"]; + }); + } + }]; + } + } + else { + [self raiseIssue:@"Error" message:@"Unable to create ProviderRegistrationTransaction."]; + } + }]; +} + +- (void)raiseIssue:(NSString *)issue message:(NSString *)message { + UIAlertController *alert = [UIAlertController alertControllerWithTitle:issue message:message preferredStyle:UIAlertControllerStyleAlert]; + [alert addAction:[UIAlertAction actionWithTitle:@"Ok" + style:UIAlertActionStyleCancel + handler:^(UIAlertAction *_Nonnull action){ + + }]]; + [self presentViewController:alert + animated:TRUE + completion:^{ + + }]; +} + +- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender { + if ([segue.identifier isEqualToString:@"PayloadSigningSegue"]) { + DWSignPayloadViewController *signPayloadSegue = (DWSignPayloadViewController *)segue.destinationViewController; + signPayloadSegue.collateralAddress = self.collateralTransaction.outputAddresses[self.providerRegistrationTransaction.collateralOutpoint.n]; + signPayloadSegue.providerRegistrationTransaction = self.providerRegistrationTransaction; + signPayloadSegue.delegate = self; + } +} + +- (IBAction)cancel { + [self.presentingViewController dismissViewControllerAnimated:TRUE completion:nil]; +} + +- (void)viewController:(nonnull UIViewController *)controller didReturnSignature:(nonnull NSData *)signature { + self.providerRegistrationTransaction.payloadSignature = signature; + [self signTransactionInputs:self.providerRegistrationTransaction]; +} + + +@end diff --git a/DashWallet/Sources/UI/Menu/Tools/Masternode Keys/DWResultsMasternodeViewController.h b/DashWallet/Sources/UI/Menu/Tools/Masternode Keys/DWResultsMasternodeViewController.h new file mode 100644 index 000000000..83dabcb38 --- /dev/null +++ b/DashWallet/Sources/UI/Menu/Tools/Masternode Keys/DWResultsMasternodeViewController.h @@ -0,0 +1,26 @@ +// +// Created by Andrew Podkovyrin +// Copyright © 2019 Dash Core Group. All rights reserved. +// +// Licensed under the MIT License (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://opensource.org/licenses/MIT +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// + +#import "DWBaseMasternodeViewController.h" + +NS_ASSUME_NONNULL_BEGIN + +@interface DWResultsMasternodeViewController : DWBaseMasternodeViewController + +@end + +NS_ASSUME_NONNULL_END diff --git a/DashWallet/Sources/UI/Menu/Tools/Masternode Keys/DWResultsMasternodeViewController.m b/DashWallet/Sources/UI/Menu/Tools/Masternode Keys/DWResultsMasternodeViewController.m new file mode 100644 index 000000000..e5369cdd1 --- /dev/null +++ b/DashWallet/Sources/UI/Menu/Tools/Masternode Keys/DWResultsMasternodeViewController.m @@ -0,0 +1,26 @@ +// +// Created by Andrew Podkovyrin +// Copyright © 2019 Dash Core Group. All rights reserved. +// +// Licensed under the MIT License (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://opensource.org/licenses/MIT +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// + +#import "DWResultsMasternodeViewController.h" + +NS_ASSUME_NONNULL_BEGIN + +@implementation DWResultsMasternodeViewController + +@end + +NS_ASSUME_NONNULL_END diff --git a/DashWallet/Sources/UI/Menu/Tools/Masternode Keys/DWSignMessageViewController.h b/DashWallet/Sources/UI/Menu/Tools/Masternode Keys/DWSignMessageViewController.h new file mode 100644 index 000000000..8f071ff6b --- /dev/null +++ b/DashWallet/Sources/UI/Menu/Tools/Masternode Keys/DWSignMessageViewController.h @@ -0,0 +1,28 @@ +// +// Created by Sam Westrich +// Copyright © 2019 Dash Core Group. All rights reserved. +// +// Licensed under the MIT License (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://opensource.org/licenses/MIT +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// + +#import + +NS_ASSUME_NONNULL_BEGIN + +@interface DWSignMessageViewController : UIViewController + +@property (nonatomic, strong) DSKey *key; + +@end + +NS_ASSUME_NONNULL_END diff --git a/DashWallet/Sources/UI/Menu/Tools/Masternode Keys/DWSignMessageViewController.m b/DashWallet/Sources/UI/Menu/Tools/Masternode Keys/DWSignMessageViewController.m new file mode 100644 index 000000000..504c4ad68 --- /dev/null +++ b/DashWallet/Sources/UI/Menu/Tools/Masternode Keys/DWSignMessageViewController.m @@ -0,0 +1,54 @@ +// +// Created by Sam Westrich +// Copyright © 2019 Dash Core Group. All rights reserved. +// +// Licensed under the MIT License (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://opensource.org/licenses/MIT +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// + +#import "DWSignMessageViewController.h" + +@interface DWSignMessageViewController () + +@property (strong, nonatomic) IBOutlet UITextView *signatureMessageInputTextView; +@property (strong, nonatomic) IBOutlet UITextView *signatureMessageResultTextView; + +@end + +@implementation DWSignMessageViewController + +- (void)viewDidLoad { + [super viewDidLoad]; + // Do any additional setup after loading the view. +} + +- (IBAction)sign:(id)sender { + NSMutableData *stringMessageData = [NSMutableData data]; + [stringMessageData appendString:DASH_MESSAGE_MAGIC]; + [stringMessageData appendString:self.signatureMessageInputTextView.text]; + NSData *data = nil; + + if ([self.key isKindOfClass:[DSBLSKey class]]) { + DSBLSKey *blsKey = (DSBLSKey *)_key; + [blsKey signDigest:stringMessageData.SHA256_2]; + } + else { + DSECDSAKey *ecdsaKey = (DSECDSAKey *)_key; + data = [ecdsaKey compactSign:stringMessageData.SHA256_2]; + } + + if (data) { + [self.signatureMessageResultTextView setText:[data base64EncodedStringWithOptions:0]]; + } +} + +@end diff --git a/DashWallet/Sources/UI/Menu/Tools/Masternode Keys/DWSignPayloadViewController.h b/DashWallet/Sources/UI/Menu/Tools/Masternode Keys/DWSignPayloadViewController.h new file mode 100644 index 000000000..241c89273 --- /dev/null +++ b/DashWallet/Sources/UI/Menu/Tools/Masternode Keys/DWSignPayloadViewController.h @@ -0,0 +1,30 @@ +// +// DWSignPayloadViewController.h +// DashWallet +// +// Created by Sam Westrich on 3/8/19. +// Copyright © 2019 Dash Core Group. All rights reserved. +// + +#import + + +@class DSProviderRegistrationTransaction; + +NS_ASSUME_NONNULL_BEGIN + +@protocol DWSignPayloadDelegate + +- (void)viewController:(UIViewController *)controller didReturnSignature:(NSData *)signature; + +@end + +@interface DWSignPayloadViewController : UIViewController + +@property (nonatomic, weak) id delegate; +@property (nonatomic, strong) NSString *collateralAddress; +@property (nonatomic, strong) DSProviderRegistrationTransaction *providerRegistrationTransaction; + +@end + +NS_ASSUME_NONNULL_END diff --git a/DashWallet/Sources/UI/Menu/Tools/Masternode Keys/DWSignPayloadViewController.m b/DashWallet/Sources/UI/Menu/Tools/Masternode Keys/DWSignPayloadViewController.m new file mode 100644 index 000000000..18f056f79 --- /dev/null +++ b/DashWallet/Sources/UI/Menu/Tools/Masternode Keys/DWSignPayloadViewController.m @@ -0,0 +1,81 @@ +// +// DWSignPayloadViewController.m +// DashWallet +// +// Created by Sam Westrich on 3/8/19. +// Copyright © 2019 Dash Core Group. All rights reserved. +// + +#import "DWSignPayloadViewController.h" +#import "DSAccount.h" +#import "DSECDSAKey.h" +#import "DSProviderRegistrationTransaction.h" +#import "DSWallet.h" +#import "NSData+Bitcoin.h" +#import "NSMutableData+Dash.h" +#import "NSString+Dash.h" + +@interface DWSignPayloadViewController () +@property (strong, nonatomic) IBOutlet UITextView *signatureMessageInputTextView; +@property (strong, nonatomic) IBOutlet UITextView *signatureMessageResultTextView; +@property (strong, nonatomic) IBOutlet UIButton *signButton; + +@end + +@implementation DWSignPayloadViewController + +- (void)viewDidLoad { + [super viewDidLoad]; + self.signatureMessageInputTextView.text = [NSString stringWithFormat:@"signmessage %@ %@", self.collateralAddress, self.providerRegistrationTransaction.payloadCollateralString]; + + if ([self.providerRegistrationTransaction.chain accountContainingAddress:self.collateralAddress]) { + self.signButton.enabled = TRUE; + } + else { + self.signButton.enabled = FALSE; + } +} + +/* +#pragma mark - Navigation + +// In a storyboard-based application, you will often want to do a little preparation before navigation +- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender { + // Get the new view controller using [segue destinationViewController]. + // Pass the selected object to the new view controller. +} +*/ +- (IBAction)sign:(id)sender { + + if (self.signatureMessageResultTextView.text && ![self.signatureMessageResultTextView.text isEqualToString:@""]) { + NSData *signature = [[NSData alloc] initWithBase64EncodedString:self.signatureMessageResultTextView.text options:0]; + DSECDSAKey *key = [DSECDSAKey keyRecoveredFromCompactSig:signature andMessageDigest:self.providerRegistrationTransaction.payloadCollateralDigest]; + NSString *address = [key addressForChain:self.providerRegistrationTransaction.chain]; + if ([address isEqualToString:self.collateralAddress]) { + [self.delegate viewController:self didReturnSignature:signature]; + } + else { + NSLog(@"Not matching signature"); + } + } + else { + DSAccount *account = [self.providerRegistrationTransaction.chain accountContainingAddress:self.collateralAddress]; + + + DSFundsDerivationPath *derivationPath = [account derivationPathContainingAddress:self.collateralAddress]; + + NSIndexPath *indexPath = [derivationPath indexPathForKnownAddress:self.collateralAddress]; + + [account.wallet seedWithPrompt:@"Sign?" + forAmount:0 + completion:^(NSData *_Nullable seed, BOOL cancelled) { + if (seed && !cancelled) { + DSECDSAKey *key = (DSECDSAKey *)[derivationPath privateKeyAtIndexPath:indexPath fromSeed:seed]; + NSData *data = [key compactSign:self.providerRegistrationTransaction.payloadCollateralDigest]; + [self.delegate viewController:self didReturnSignature:data]; + } + }]; + } +} + +@end diff --git a/DashWallet/Sources/UI/Menu/Tools/Masternode Keys/DWUpdateMasternodeRegistrarViewController.h b/DashWallet/Sources/UI/Menu/Tools/Masternode Keys/DWUpdateMasternodeRegistrarViewController.h new file mode 100644 index 000000000..5b6416db8 --- /dev/null +++ b/DashWallet/Sources/UI/Menu/Tools/Masternode Keys/DWUpdateMasternodeRegistrarViewController.h @@ -0,0 +1,20 @@ +// +// DWUpdateMasternodeRegistrarViewController.h +// DashWallet +// +// Created by Sam Westrich on 2/22/19. +// Copyright © 2019 Dash Core Group. All rights reserved. +// + +#import + +NS_ASSUME_NONNULL_BEGIN + +@interface DWUpdateMasternodeRegistrarViewController : UITableViewController + +@property (nonatomic, strong) DSLocalMasternode *localMasternode; +@property (nonatomic, strong) DSSimplifiedMasternodeEntry *simplifiedMasternodeEntry; + +@end + +NS_ASSUME_NONNULL_END diff --git a/DashWallet/Sources/UI/Menu/Tools/Masternode Keys/DWUpdateMasternodeRegistrarViewController.m b/DashWallet/Sources/UI/Menu/Tools/Masternode Keys/DWUpdateMasternodeRegistrarViewController.m new file mode 100644 index 000000000..7a68d0934 --- /dev/null +++ b/DashWallet/Sources/UI/Menu/Tools/Masternode Keys/DWUpdateMasternodeRegistrarViewController.m @@ -0,0 +1,113 @@ +// +// DWUpdateMasternodeRegistrarViewController.m +// DashWallet +// +// Created by Sam Westrich on 2/22/19. +// Copyright © 2019 Dash Core Group. All rights reserved. +// + +#import "DWUpdateMasternodeRegistrarViewController.h" +#import "DWEnvironment.h" +#import "DWKeyValueTableViewCell.h" +#include + +@interface DWUpdateMasternodeRegistrarViewController () + +@property (nonatomic, strong) DWKeyValueTableViewCell *payoutTableViewCell; +@property (nonatomic, strong) DSAccount *account; +@property (nonatomic, strong) DSWallet *votingWallet; + +@end + +@implementation DWUpdateMasternodeRegistrarViewController + +- (void)viewDidLoad { + [super viewDidLoad]; + self.payoutTableViewCell = [self.tableView dequeueReusableCellWithIdentifier:@"MasternodePayoutAddressCellIdentifier"]; + self.votingWallet = [DWEnvironment sharedInstance].currentWallet; + self.account = [DWEnvironment sharedInstance].currentAccount; +} + +#pragma mark - Table view data source + +- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView { + return 1; +} + +- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section { + return 1; +} + +- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { + switch (indexPath.section) { + case 0: { + switch (indexPath.row) { + case 0: + return self.payoutTableViewCell; + } + } + } + return nil; +} + +- (IBAction)updateMasternode:(id)sender { + UInt160 votingHash; + if (self.votingWallet) { + DSAuthenticationKeysDerivationPath *providerVotingKeysDerivationPath = [DSAuthenticationKeysDerivationPath providerVotingKeysDerivationPathForWallet:self.votingWallet]; + votingHash = providerVotingKeysDerivationPath.firstUnusedPublicKey.hash160; + } + else { + votingHash = self.simplifiedMasternodeEntry.keyIDVoting; + } + NSString *payoutAddress = (self.payoutTableViewCell.valueTextField.text && ![self.payoutTableViewCell.valueTextField.text isEqualToString:@""]) ? self.payoutTableViewCell.valueTextField.text : self.localMasternode.payoutAddress; + [self.localMasternode updateTransactionFundedByAccount:self.account + changeOperator:self.localMasternode.providerRegistrationTransaction.operatorKey + changeVotingKeyHash:votingHash + changePayoutAddress:payoutAddress + completion:^(DSProviderUpdateRegistrarTransaction *_Nonnull providerUpdateRegistrarTransaction) { + if (providerUpdateRegistrarTransaction) { + [self.account signTransaction:providerUpdateRegistrarTransaction + withPrompt:@"Would you like to update this masternode?" + completion:^(BOOL signedTransaction, BOOL cancelled) { + if (signedTransaction) { + [self.localMasternode.providerRegistrationTransaction.chain.chainManager.transactionManager publishTransaction:providerUpdateRegistrarTransaction + completion:^(NSError *_Nullable error) { + if (error) { + [self raiseIssue:@"Error" message:error.localizedDescription]; + } + else { + //[masternode registerInWallet]; + [self.presentingViewController dismissViewControllerAnimated:TRUE completion:nil]; + } + }]; + } + else { + [self raiseIssue:@"Error" message:@"Transaction was not signed."]; + } + }]; + } + else { + [self raiseIssue:@"Error" message:@"Unable to create ProviderRegistrationTransaction."]; + } + }]; +} + +- (void)raiseIssue:(NSString *)issue message:(NSString *)message { + UIAlertController *alert = [UIAlertController alertControllerWithTitle:issue message:message preferredStyle:UIAlertControllerStyleAlert]; + [alert addAction:[UIAlertAction actionWithTitle:@"Ok" + style:UIAlertActionStyleCancel + handler:^(UIAlertAction *_Nonnull action){ + + }]]; + [self presentViewController:alert + animated:TRUE + completion:^{ + + }]; +} + +- (IBAction)cancel { + [self.presentingViewController dismissViewControllerAnimated:TRUE completion:nil]; +} + +@end diff --git a/DashWallet/Sources/UI/Menu/Tools/Masternode Keys/DWUpdateMasternodeRevocationViewController.h b/DashWallet/Sources/UI/Menu/Tools/Masternode Keys/DWUpdateMasternodeRevocationViewController.h new file mode 100644 index 000000000..3acabae16 --- /dev/null +++ b/DashWallet/Sources/UI/Menu/Tools/Masternode Keys/DWUpdateMasternodeRevocationViewController.h @@ -0,0 +1,17 @@ +// +// DWUpdateMasternodeRevocationViewController.h +// DashWallet +// +// Created by Sam Westrich on 2/26/19. +// Copyright © 2019 Dash Core Group. All rights reserved. +// + +#import + +NS_ASSUME_NONNULL_BEGIN + +@interface DWUpdateMasternodeRevocationViewController : UITableViewController + +@end + +NS_ASSUME_NONNULL_END diff --git a/DashWallet/Sources/UI/Menu/Tools/Masternode Keys/DWUpdateMasternodeRevocationViewController.m b/DashWallet/Sources/UI/Menu/Tools/Masternode Keys/DWUpdateMasternodeRevocationViewController.m new file mode 100644 index 000000000..06edaf7e1 --- /dev/null +++ b/DashWallet/Sources/UI/Menu/Tools/Masternode Keys/DWUpdateMasternodeRevocationViewController.m @@ -0,0 +1,27 @@ +// +// DWUpdateMasternodeRevocationViewController.m +// DashWallet +// +// Created by Sam Westrich on 2/26/19. +// Copyright © 2019 Dash Core Group. All rights reserved. +// + +#import "DWUpdateMasternodeRevocationViewController.h" + +@interface DWUpdateMasternodeRevocationViewController () + +@end + +@implementation DWUpdateMasternodeRevocationViewController + +- (void)viewDidLoad { + [super viewDidLoad]; + + // Uncomment the following line to preserve selection between presentations. + // self.clearsSelectionOnViewWillAppear = NO; + + // Uncomment the following line to display an Edit button in the navigation bar for this view controller. + // self.navigationItem.rightBarButtonItem = self.editButtonItem; +} + +@end diff --git a/DashWallet/Sources/UI/Menu/Tools/Masternode Keys/DWUpdateMasternodeServiceViewController.h b/DashWallet/Sources/UI/Menu/Tools/Masternode Keys/DWUpdateMasternodeServiceViewController.h new file mode 100644 index 000000000..579adf8a6 --- /dev/null +++ b/DashWallet/Sources/UI/Menu/Tools/Masternode Keys/DWUpdateMasternodeServiceViewController.h @@ -0,0 +1,21 @@ +// +// DWUpdateMasternodeServiceViewController.h +// DashWallet +// +// Created by Sam Westrich on 2/21/19. +// Copyright © 2019 Dash Core Group. All rights reserved. +// + +#import + +NS_ASSUME_NONNULL_BEGIN + +@class DSLocalMasternode; + +@interface DWUpdateMasternodeServiceViewController : UITableViewController + +@property (nonatomic, strong) DSLocalMasternode *localMasternode; + +@end + +NS_ASSUME_NONNULL_END diff --git a/DashWallet/Sources/UI/Menu/Tools/Masternode Keys/DWUpdateMasternodeServiceViewController.m b/DashWallet/Sources/UI/Menu/Tools/Masternode Keys/DWUpdateMasternodeServiceViewController.m new file mode 100644 index 000000000..d078a9adf --- /dev/null +++ b/DashWallet/Sources/UI/Menu/Tools/Masternode Keys/DWUpdateMasternodeServiceViewController.m @@ -0,0 +1,120 @@ +// +// DWUpdateMasternodeServiceViewController.m +// DashWallet +// +// Created by Sam Westrich on 2/21/19. +// Copyright © 2019 Dash Core Group. All rights reserved. +// + +#import "DWUpdateMasternodeServiceViewController.h" +#import "DWEnvironment.h" +#import "DWKeyValueTableViewCell.h" +#include + +@interface DWUpdateMasternodeServiceViewController () + +@property (nonatomic, strong) DWKeyValueTableViewCell *ipAddressTableViewCell; +@property (nonatomic, strong) DWKeyValueTableViewCell *portTableViewCell; +@property (nonatomic, strong) DSAccount *account; + +@end + +@implementation DWUpdateMasternodeServiceViewController + +- (void)viewDidLoad { + [super viewDidLoad]; + self.ipAddressTableViewCell = [self.tableView dequeueReusableCellWithIdentifier:@"MasternodeIPAddressCellIdentifier"]; + char s[INET6_ADDRSTRLEN]; + uint32_t ipAddress = self.localMasternode.ipAddress.u32[3]; + self.ipAddressTableViewCell.valueTextField.text = [NSString stringWithFormat:@"%s", inet_ntop(AF_INET, &ipAddress, s, sizeof(s))]; + self.portTableViewCell = [self.tableView dequeueReusableCellWithIdentifier:@"MasternodePortCellIdentifier"]; + self.portTableViewCell.valueTextField.text = [NSString stringWithFormat:@"%d", self.localMasternode.port]; + self.account = [DWEnvironment sharedInstance].currentAccount; +} + +#pragma mark - Table view data source + +- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView { + return 1; +} + +- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section { + return 2; +} + +- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { + switch (indexPath.section) { + case 0: { + switch (indexPath.row) { + case 0: + return self.ipAddressTableViewCell; + case 1: + return self.portTableViewCell; + } + } + } + return nil; +} + +- (IBAction)updateMasternode:(id)sender { + NSString *ipAddressString = self.ipAddressTableViewCell.valueTextField.text; + NSString *portString = self.portTableViewCell.valueTextField.text; + UInt128 ipAddress = {.u32 = {0, 0, CFSwapInt32HostToBig(0xffff), 0}}; + struct in_addr addrV4; + if (inet_aton([ipAddressString UTF8String], &addrV4) != 0) { + uint32_t ip = ntohl(addrV4.s_addr); + ipAddress.u32[3] = CFSwapInt32HostToBig(ip); + DSDLog(@"%08x", ip); + } + uint16_t port = [portString intValue]; + [self.localMasternode updateTransactionFundedByAccount:self.account + toIPAddress:ipAddress + port:port + payoutAddress:nil + completion:^(DSProviderUpdateServiceTransaction *_Nonnull providerUpdateServiceTransaction) { + if (providerUpdateServiceTransaction) { + [self.account signTransaction:providerUpdateServiceTransaction + withPrompt:@"Would you like to update this masternode?" + completion:^(BOOL signedTransaction, BOOL cancelled) { + if (signedTransaction) { + [self.localMasternode.providerRegistrationTransaction.chain.chainManager.transactionManager publishTransaction:providerUpdateServiceTransaction + completion:^(NSError *_Nullable error) { + if (error) { + [self raiseIssue:@"Error" message:error.localizedDescription]; + } + else { + //[masternode registerInWallet]; + [self.presentingViewController dismissViewControllerAnimated:TRUE completion:nil]; + } + }]; + } + else { + [self raiseIssue:@"Error" message:@"Transaction was not signed."]; + } + }]; + } + else { + [self raiseIssue:@"Error" message:@"Unable to create ProviderRegistrationTransaction."]; + } + }]; +} + +- (void)raiseIssue:(NSString *)issue message:(NSString *)message { + UIAlertController *alert = [UIAlertController alertControllerWithTitle:issue message:message preferredStyle:UIAlertControllerStyleAlert]; + [alert addAction:[UIAlertAction actionWithTitle:@"Ok" + style:UIAlertActionStyleCancel + handler:^(UIAlertAction *_Nonnull action){ + + }]]; + [self presentViewController:alert + animated:TRUE + completion:^{ + + }]; +} + +- (IBAction)cancel { + [self.presentingViewController dismissViewControllerAnimated:TRUE completion:nil]; +} + +@end diff --git a/DashWallet/Sources/UI/Menu/Tools/Masternode Keys/Masternode.storyboard b/DashWallet/Sources/UI/Menu/Tools/Masternode Keys/Masternode.storyboard new file mode 100644 index 000000000..a92d1437a --- /dev/null +++ b/DashWallet/Sources/UI/Menu/Tools/Masternode Keys/Masternode.storyboard @@ -0,0 +1,1673 @@ + + + + + + + + + + + + + + Montserrat-Medium + + + Montserrat-Regular + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + From e77c0bdb99ab9bf5b3256b7db133bcdb9d01efce Mon Sep 17 00:00:00 2001 From: Quantum Explorer Date: Sun, 27 Oct 2019 20:00:55 +0700 Subject: [PATCH 12/34] cleanup --- .../DWKeysOverviewViewController.m | 173 ++++++++++++------ 1 file changed, 120 insertions(+), 53 deletions(-) diff --git a/DashWallet/Sources/UI/Menu/Tools/Masternode Keys/DWKeysOverviewViewController.m b/DashWallet/Sources/UI/Menu/Tools/Masternode Keys/DWKeysOverviewViewController.m index ca2f7d612..568ab6d03 100644 --- a/DashWallet/Sources/UI/Menu/Tools/Masternode Keys/DWKeysOverviewViewController.m +++ b/DashWallet/Sources/UI/Menu/Tools/Masternode Keys/DWKeysOverviewViewController.m @@ -18,82 +18,149 @@ #import "DWKeysOverviewViewController.h" #import "DWDerivationPathKeysViewController.h" +#import "DWFormTableViewController.h" +#import "DWUIKit.h" +#import "DWWalletKeysOverviewModel.h" #import #import #import -static NSString *const OwnerKeysSegueId = @"OwnerKeysSegue"; -static NSString *const VotingKeysSegueId = @"VotingKeysSegue"; -static NSString *const OperatorKeysSegueId = @"OperatorKeysSegue"; +NS_ASSUME_NONNULL_BEGIN @interface DWKeysOverviewViewController () -@property (strong, nonatomic) IBOutlet UILabel *ownerKeysTitleLabel; -@property (strong, nonatomic) IBOutlet UILabel *votingKeysTitleLabel; -@property (strong, nonatomic) IBOutlet UILabel *operatorKeysTitleLabel; -@property (strong, nonatomic) IBOutlet UILabel *ownerKeysDetailLabel; -@property (strong, nonatomic) IBOutlet UILabel *votingKeysDetailLabel; -@property (strong, nonatomic) IBOutlet UILabel *operatorKeysDetailLabel; - -@property (strong, nonatomic) DSAuthenticationKeysDerivationPath *ownerDerivationPath; -@property (strong, nonatomic) DSAuthenticationKeysDerivationPath *votingDerivationPath; -@property (strong, nonatomic) DSAuthenticationKeysDerivationPath *operatorDerivationPath; +@property (null_resettable, nonatomic, strong) DWWalletKeysOverviewModel *model; +@property (nonatomic, strong) DWFormTableViewController *formController; @end @implementation DWKeysOverviewViewController -+ (instancetype)controller { - UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"Masternode" bundle:nil]; - DWKeysOverviewViewController *controller = [storyboard instantiateViewControllerWithIdentifier:@"KeysOverviewViewControllerIdentifier"]; +- (instancetype)initWithNibName:(nullable NSString *)nibNameOrNil bundle:(nullable NSBundle *)nibBundleOrNil { + if (self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil]) { + self.title = NSLocalizedString(@"Wallet Keys", nil); + self.hidesBottomBarWhenPushed = YES; + } - return controller; + return self; } -- (void)viewDidLoad { - [super viewDidLoad]; +- (DWWalletKeysOverviewModel *)model { + if (_model == nil) { + _model = [[DWWalletKeysOverviewModel alloc] init]; + } - self.title = NSLocalizedString(@"Wallet Keys", nil); - - DSWallet *wallet = [DWEnvironment sharedInstance].currentWallet; - DSDerivationPathFactory *factory = [DSDerivationPathFactory sharedInstance]; - self.ownerDerivationPath = [factory providerOwnerKeysDerivationPathForWallet:wallet]; - self.votingDerivationPath = [factory providerVotingKeysDerivationPathForWallet:wallet]; - self.operatorDerivationPath = [factory providerOperatorKeysDerivationPathForWallet:wallet]; - - self.tableView.tableFooterView = [[UIView alloc] init]; - - self.ownerKeysTitleLabel.text = NSLocalizedString(@"Owner Keys", nil); - self.votingKeysTitleLabel.text = NSLocalizedString(@"Voting Keys", nil); - self.operatorKeysTitleLabel.text = NSLocalizedString(@"Operator Keys", nil); - self.ownerKeysDetailLabel.text = [NSString stringWithFormat:NSLocalizedString(@"%ld used", nil), - self.ownerDerivationPath.usedAddresses.count]; - self.votingKeysDetailLabel.text = [NSString stringWithFormat:NSLocalizedString(@"%ld used", nil), - self.votingDerivationPath.usedAddresses.count]; - self.operatorKeysDetailLabel.text = [NSString stringWithFormat:NSLocalizedString(@"%ld used", nil), - self.operatorDerivationPath.usedAddresses.count]; + return _model; } -- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender { - DSAuthenticationKeysDerivationPath *derivationPath = nil; - NSString *title = nil; - if ([segue.identifier isEqualToString:OwnerKeysSegueId]) { - derivationPath = self.ownerDerivationPath; - title = NSLocalizedString(@"Owner Keys", nil); + +- (NSArray *)items { + __weak typeof(self) weakSelf = self; + + NSMutableArray *items = [NSMutableArray array]; + + { + DWSelectorFormCellModel *cellModel = [[DWSelectorFormCellModel alloc] initWithTitle:NSLocalizedString(@"Owner Keys", nil)]; + cellModel.subTitle = [NSString stringWithFormat:NSLocalizedString(@"%ld used", nil), + self.model.ownerDerivationPath.usedAddresses.count]; + cellModel.accessoryType = DWSelectorFormAccessoryType_DisclosureIndicator; + cellModel.didSelectBlock = ^(DWSelectorFormCellModel *_Nonnull cellModel, NSIndexPath *_Nonnull indexPath) { + __strong typeof(weakSelf) strongSelf = weakSelf; + if (!strongSelf) { + return; + } + + [strongSelf showOwnerKeys]; + }; + [items addObject:cellModel]; } - else if ([segue.identifier isEqualToString:VotingKeysSegueId]) { - derivationPath = self.votingDerivationPath; - title = NSLocalizedString(@"Voting Keys", nil); + + { + DWSelectorFormCellModel *cellModel = [[DWSelectorFormCellModel alloc] initWithTitle:NSLocalizedString(@"Voting Keys", nil)]; + cellModel.subTitle = [NSString stringWithFormat:NSLocalizedString(@"%ld used", nil), + self.model.votingDerivationPath.usedAddresses.count]; + cellModel.accessoryType = DWSelectorFormAccessoryType_DisclosureIndicator; + cellModel.didSelectBlock = ^(DWSelectorFormCellModel *_Nonnull cellModel, NSIndexPath *_Nonnull indexPath) { + __strong typeof(weakSelf) strongSelf = weakSelf; + if (!strongSelf) { + return; + } + + [strongSelf showVotingKeys]; + }; + [items addObject:cellModel]; } - else if ([segue.identifier isEqualToString:OperatorKeysSegueId]) { - derivationPath = self.operatorDerivationPath; - title = NSLocalizedString(@"Operator Keys", nil); + + { + DWSelectorFormCellModel *cellModel = [[DWSelectorFormCellModel alloc] initWithTitle:NSLocalizedString(@"Operator Keys", nil)]; + cellModel.subTitle = [NSString stringWithFormat:NSLocalizedString(@"%ld used", nil), + self.model.operatorDerivationPath.usedAddresses.count]; + cellModel.accessoryType = DWSelectorFormAccessoryType_DisclosureIndicator; + cellModel.didSelectBlock = ^(DWSelectorFormCellModel *_Nonnull cellModel, NSIndexPath *_Nonnull indexPath) { + __strong typeof(weakSelf) strongSelf = weakSelf; + if (!strongSelf) { + return; + } + + [strongSelf showOperatorKeys]; + }; + [items addObject:cellModel]; } - NSParameterAssert(derivationPath); - DWDerivationPathKeysViewController *controller = (DWDerivationPathKeysViewController *)segue.destinationViewController; - controller.derivationPath = derivationPath; + + return items; +} + +- (NSArray *)sections { + DWFormSectionModel *section = [[DWFormSectionModel alloc] init]; + section.items = [self items]; + + return @[ section ]; +} + +- (void)viewDidLoad { + [super viewDidLoad]; + + self.view.backgroundColor = [UIColor dw_secondaryBackgroundColor]; + + DWFormTableViewController *formController = [[DWFormTableViewController alloc] initWithStyle:UITableViewStylePlain]; + [formController setSections:[self sections] placeholderText:nil]; + + [self addChildViewController:formController]; + formController.view.frame = self.view.bounds; + formController.view.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight; + [self.view addSubview:formController.view]; + [formController didMoveToParentViewController:self]; + self.formController = formController; +} + +- (UIStatusBarStyle)preferredStatusBarStyle { + return UIStatusBarStyleLightContent; +} + +#pragma mark - Private + +- (void)showOwnerKeys { + [self showDerivationPathKeysViewControllerWithDerivationPath:self.model.ownerDerivationPath + title:NSLocalizedString(@"Owner Keys", nil)]; +} + +- (void)showVotingKeys { + [self showDerivationPathKeysViewControllerWithDerivationPath:self.model.votingDerivationPath + title:NSLocalizedString(@"Voting Keys", nil)]; +} + +- (void)showOperatorKeys { + [self showDerivationPathKeysViewControllerWithDerivationPath:self.model.operatorDerivationPath + title:NSLocalizedString(@"Operator Keys", nil)]; +} + +- (void)showDerivationPathKeysViewControllerWithDerivationPath:(DSAuthenticationKeysDerivationPath *)derivationPath title:(NSString *)title { + DWDerivationPathKeysViewController *controller = [[DWDerivationPathKeysViewController alloc] initWithDerivationPath:derivationPath]; controller.title = title; + [self.navigationController pushViewController:controller animated:YES]; } @end + +NS_ASSUME_NONNULL_END From d926ac91b1f60b849d50f111d642444c561f01c7 Mon Sep 17 00:00:00 2001 From: Quantum Explorer Date: Sun, 27 Oct 2019 20:02:34 +0700 Subject: [PATCH 13/34] cleanup --- .../DWDerivationPathKeysViewController.m | 160 ++++++++---------- 1 file changed, 70 insertions(+), 90 deletions(-) diff --git a/DashWallet/Sources/UI/Menu/Tools/Masternode Keys/DWDerivationPathKeysViewController.m b/DashWallet/Sources/UI/Menu/Tools/Masternode Keys/DWDerivationPathKeysViewController.m index 7081b22e3..974c032d7 100644 --- a/DashWallet/Sources/UI/Menu/Tools/Masternode Keys/DWDerivationPathKeysViewController.m +++ b/DashWallet/Sources/UI/Menu/Tools/Masternode Keys/DWDerivationPathKeysViewController.m @@ -16,41 +16,61 @@ // #import "DWDerivationPathKeysViewController.h" -#import "DWSignMessageViewController.h" -#import -#import +#import "DWDerivationPathKeysModel.h" +#import "DWDerivationPathKeysTableViewCell.h" +#import "DWSelectorFormTableViewCell.h" +#import "DWUIKit.h" +#import "UIView+DWHUD.h" -static NSString *const KeyInfoCellId = @"KeyInfoCell"; -static NSString *const LoadMoreCellId = @"LoadMoreCell"; -static NSString *const SignMessageCellId = @"SignMessageCell"; - -typedef NS_ENUM(NSUInteger, DWDerivationPathInfo) { - DWDerivationPathInfo_Address, - DWDerivationPathInfo_PublicKey, - DWDerivationPathInfo_PrivateKey, - DWDerivationPathInfo_UsedOrNot, - DWDerivationPathInfo_SignMessage, - _DWDerivationPathInfo_Count, -}; +NS_ASSUME_NONNULL_BEGIN @interface DWDerivationPathKeysViewController () +@property (readonly, nonatomic, strong) DWDerivationPathKeysModel *model; @property (nonatomic, assign) NSInteger visibleIndexes; @end @implementation DWDerivationPathKeysViewController +- (instancetype)initWithDerivationPath:(DSAuthenticationKeysDerivationPath *)derivationPath { + self = [super initWithStyle:UITableViewStylePlain]; + if (self) { + _model = [[DWDerivationPathKeysModel alloc] initWithDerivationPath:derivationPath]; + self.derivationPath = derivationPath; + self.hidesBottomBarWhenPushed = YES; + } + return self; +} + - (void)viewDidLoad { [super viewDidLoad]; + self.view.backgroundColor = [UIColor dw_secondaryBackgroundColor]; + self.tableView.rowHeight = UITableViewAutomaticDimension; + self.tableView.separatorStyle = UITableViewCellSeparatorStyleNone; self.tableView.tableFooterView = [[UIView alloc] init]; + self.tableView.sectionHeaderHeight = UITableViewAutomaticDimension; + self.tableView.estimatedSectionHeaderHeight = 30.0; + + NSArray *cellClasses = @[ + DWSelectorFormTableViewCell.class, + DWDerivationPathKeysTableViewCell.class, + ]; + + for (Class cellClass in cellClasses) { + [self.tableView registerClass:cellClass forCellReuseIdentifier:NSStringFromClass(cellClass)]; + } self.visibleIndexes = [self.derivationPath firstUnusedIndex] + 1; } -#pragma mark - Table view data source +- (UIStatusBarStyle)preferredStatusBarStyle { + return UIStatusBarStyleLightContent; +} + +#pragma mark - UITableViewDataSource - (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView { return self.visibleIndexes + 1; @@ -65,110 +85,70 @@ - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger } } -- (NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section { +- (nullable UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section { + UITextView *labelTextView = [[UITextView alloc] initWithFrame:CGRectZero]; + labelTextView.backgroundColor = [UIColor dw_secondaryBackgroundColor]; + labelTextView.textColor = [UIColor dw_darkTitleColor]; + labelTextView.userInteractionEnabled = FALSE; + labelTextView.font = [UIFont dw_fontForTextStyle:UIFontTextStyleHeadline]; + labelTextView.adjustsFontForContentSizeCategory = YES; + labelTextView.textAlignment = NSTextAlignmentCenter; + labelTextView.textContainerInset = UIEdgeInsetsMake(10, 0, 10, 0); if (section == self.visibleIndexes) { - return @""; + labelTextView.text = @" "; } else { - return [NSString stringWithFormat:@"%ld", section]; + labelTextView.text = [NSString stringWithFormat:NSLocalizedString(@"Keypair %ld", nil), section]; } + return labelTextView; } - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { if (indexPath.section == self.visibleIndexes) { - UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:LoadMoreCellId forIndexPath:indexPath]; - cell.textLabel.text = NSLocalizedString(@"Load more", nil); + NSString *cellId = DWSelectorFormTableViewCell.dw_reuseIdentifier; + DWSelectorFormTableViewCell *cell = (DWSelectorFormTableViewCell *)[tableView dequeueReusableCellWithIdentifier:cellId forIndexPath:indexPath]; + cell.cellModel = self.model.loadMoreItem; return cell; } else { - UITableViewCell *cell; + NSString *cellId = DWDerivationPathKeysTableViewCell.dw_reuseIdentifier; + DWDerivationPathKeysTableViewCell *cell = + (DWDerivationPathKeysTableViewCell *)[tableView dequeueReusableCellWithIdentifier:cellId + forIndexPath:indexPath]; - DSWallet *wallet = [DWEnvironment sharedInstance].currentWallet; NSInteger index = indexPath.section; DWDerivationPathInfo info = indexPath.row; - switch (info) { - case DWDerivationPathInfo_Address: { - cell = [tableView dequeueReusableCellWithIdentifier:KeyInfoCellId forIndexPath:indexPath]; - cell.textLabel.text = NSLocalizedString(@"Address", nil); - cell.detailTextLabel.text = [self.derivationPath addressAtIndex:index]; - - break; - } - case DWDerivationPathInfo_PublicKey: { - cell = [tableView dequeueReusableCellWithIdentifier:KeyInfoCellId forIndexPath:indexPath]; - cell.textLabel.text = NSLocalizedString(@"Public key", nil); - cell.detailTextLabel.text = [self.derivationPath publicKeyDataAtIndex:index].hexString; - - break; - } - case DWDerivationPathInfo_PrivateKey: { - cell = [tableView dequeueReusableCellWithIdentifier:KeyInfoCellId forIndexPath:indexPath]; - cell.textLabel.text = NSLocalizedString(@"Private key", nil); - @autoreleasepool { - - NSData *seed = [[DSBIP39Mnemonic sharedInstance] deriveKeyFromPhrase:wallet.seedPhraseIfAuthenticated withPassphrase:nil]; - DSKey *key = [self.derivationPath privateKeyAtIndex:index fromSeed:seed]; - if ([key isKindOfClass:[DSECDSAKey class]]) { - cell.detailTextLabel.text = [((DSECDSAKey *)key) privateKeyStringForChain:self.derivationPath.chain]; - } - else { - cell.detailTextLabel.text = key.secretKeyString; - } - } - break; - } - case DWDerivationPathInfo_UsedOrNot: { - cell = [tableView dequeueReusableCellWithIdentifier:KeyInfoCellId forIndexPath:indexPath]; - BOOL used = [self.derivationPath addressIsUsedAtIndex:index]; - cell.textLabel.text = used ? NSLocalizedString(@"Used", nil) : NSLocalizedString(@"Not used", nil); - if (used) { - DSLocalMasternode *localMasternode = [self.derivationPath.chain.chainManager.masternodeManager localMasternodeUsingIndex:index atDerivationPath:self.derivationPath]; - cell.detailTextLabel.text = localMasternode.ipAddressString; - } - else { - cell.detailTextLabel.text = nil; - } - - - break; - } - case DWDerivationPathInfo_SignMessage: { - cell = [tableView dequeueReusableCellWithIdentifier:SignMessageCellId forIndexPath:indexPath]; - cell.textLabel.text = NSLocalizedString(@"Sign Message", nil); - - break; - } - - default: - break; - } + id item = [self.model itemForInfo:info atIndex:index]; + cell.item = item; return cell; } } +#pragma mark - UITableViewDataDelegate + - (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath { - if (indexPath.section == self.visibleIndexes) { - [tableView deselectRowAtIndexPath:indexPath animated:YES]; + [tableView deselectRowAtIndexPath:indexPath animated:YES]; + if (indexPath.section == self.visibleIndexes) { self.visibleIndexes += 1; + [tableView beginUpdates]; [tableView insertSections:[NSIndexSet indexSetWithIndex:self.visibleIndexes - 1] withRowAnimation:UITableViewRowAnimationAutomatic]; [tableView endUpdates]; [tableView scrollToRowAtIndexPath:[NSIndexPath indexPathForRow:0 inSection:self.visibleIndexes - 1] atScrollPosition:UITableViewScrollPositionMiddle animated:YES]; } -} + else { + DWDerivationPathKeysTableViewCell *cell = + (DWDerivationPathKeysTableViewCell *)[tableView cellForRowAtIndexPath:indexPath]; + id item = cell.item; + [UIPasteboard generalPasteboard].string = item.detail; -- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender { - if ([segue.identifier isEqualToString:@"SignMessageSegue"]) { - DWSignMessageViewController *signMessageViewController = (DWSignMessageViewController *)segue.destinationViewController; - DSWallet *wallet = [DWEnvironment sharedInstance].currentWallet; - NSData *seed = [[DSBIP39Mnemonic sharedInstance] deriveKeyFromPhrase:wallet.seedPhraseIfAuthenticated withPassphrase:nil]; - DSKey *key = [self.derivationPath privateKeyAtIndex:self.tableView.indexPathForSelectedRow.section fromSeed:seed]; - signMessageViewController.key = key; + [self.view dw_showInfoHUDWithText:NSLocalizedString(@"Copied", nil)]; } } - @end + +NS_ASSUME_NONNULL_END From e67a9912cd805631d02c9fdadba2a82131d41001 Mon Sep 17 00:00:00 2001 From: Quantum Explorer Date: Sun, 27 Oct 2019 20:06:13 +0700 Subject: [PATCH 14/34] cleanup --- DashWallet.xcodeproj/project.pbxproj | 16 ++++++++-------- .../Models}/DWDerivationPathKeysViewController.h | 6 ++++++ .../Models}/DWDerivationPathKeysViewController.m | 0 DashWallet/ar.lproj/Localizable.strings | 6 ------ DashWallet/bg.lproj/Localizable.strings | 6 ------ DashWallet/de.lproj/Localizable.strings | 6 ------ DashWallet/el.lproj/Localizable.strings | 6 ------ DashWallet/en.lproj/Localizable.strings | 6 ------ DashWallet/es.lproj/Localizable.strings | 6 ------ DashWallet/fr.lproj/Localizable.strings | 6 ------ DashWallet/id.lproj/Localizable.strings | 6 ------ DashWallet/it.lproj/Localizable.strings | 6 ------ DashWallet/ja.lproj/Localizable.strings | 6 ------ DashWallet/ko.lproj/Localizable.strings | 6 ------ DashWallet/nb.lproj/Localizable.strings | 6 ------ DashWallet/nl.lproj/Localizable.strings | 6 ------ DashWallet/pl.lproj/Localizable.strings | 6 ------ DashWallet/pt.lproj/Localizable.strings | 6 ------ DashWallet/ru.lproj/Localizable.strings | 6 ------ DashWallet/sk.lproj/Localizable.strings | 6 ------ DashWallet/sq.lproj/Localizable.strings | 6 ------ DashWallet/sv.lproj/Localizable.strings | 6 ------ DashWallet/th.lproj/Localizable.strings | 6 ------ DashWallet/tr.lproj/Localizable.strings | 6 ------ DashWallet/vi.lproj/Localizable.strings | 6 ------ DashWallet/zh-Hans.lproj/Localizable.strings | 6 ------ DashWallet/zh-Hant-TW.lproj/Localizable.strings | 6 ------ 27 files changed, 14 insertions(+), 152 deletions(-) rename DashWallet/Sources/UI/Menu/Tools/Masternode Keys/{ => DerivationPathKeys/Models}/DWDerivationPathKeysViewController.h (73%) rename DashWallet/Sources/UI/Menu/Tools/Masternode Keys/{ => DerivationPathKeys/Models}/DWDerivationPathKeysViewController.m (100%) diff --git a/DashWallet.xcodeproj/project.pbxproj b/DashWallet.xcodeproj/project.pbxproj index f678f31dc..afebe9491 100644 --- a/DashWallet.xcodeproj/project.pbxproj +++ b/DashWallet.xcodeproj/project.pbxproj @@ -1313,10 +1313,10 @@ FB31C268223BD9F400BD0868 /* DWMasternodeTableViewCell.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DWMasternodeTableViewCell.h; sourceTree = ""; }; FB3E9F612365C8DE00C09C5C /* DWSeedPhraseView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DWSeedPhraseView.h; sourceTree = ""; }; FB3FF0B12226416A0059A9A5 /* Masternode.storyboard */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; path = Masternode.storyboard; sourceTree = ""; }; - FB3FF0B3222642FB0059A9A5 /* DWKeysOverviewViewController.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = DWKeysOverviewViewController.h; sourceTree = ""; }; - FB3FF0B4222642FB0059A9A5 /* DWKeysOverviewViewController.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = DWKeysOverviewViewController.m; sourceTree = ""; }; - FB3FF0B622264DC60059A9A5 /* DWDerivationPathKeysViewController.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = DWDerivationPathKeysViewController.h; sourceTree = ""; }; - FB3FF0B722264DC60059A9A5 /* DWDerivationPathKeysViewController.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = DWDerivationPathKeysViewController.m; sourceTree = ""; }; + FB3FF0B3222642FB0059A9A5 /* DWKeysOverviewViewController.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = DWKeysOverviewViewController.h; path = ../DWKeysOverviewViewController.h; sourceTree = ""; }; + FB3FF0B4222642FB0059A9A5 /* DWKeysOverviewViewController.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; name = DWKeysOverviewViewController.m; path = ../DWKeysOverviewViewController.m; sourceTree = ""; }; + FB3FF0B622264DC60059A9A5 /* DWDerivationPathKeysViewController.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = DWDerivationPathKeysViewController.h; path = Models/DWDerivationPathKeysViewController.h; sourceTree = ""; }; + FB3FF0B722264DC60059A9A5 /* DWDerivationPathKeysViewController.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; name = DWDerivationPathKeysViewController.m; path = Models/DWDerivationPathKeysViewController.m; sourceTree = ""; }; FB4310ED1FA027DB00784EBC /* th */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = th; path = th.lproj/BREventConfirmView.strings; sourceTree = ""; }; FB4310EE1FA027DB00784EBC /* th */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = th; path = th.lproj/Main.strings; sourceTree = ""; }; FB4310F01FA027DB00784EBC /* th */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = th; path = th.lproj/Interface.strings; sourceTree = ""; }; @@ -2738,6 +2738,8 @@ 2AB66E0723572379007BE825 /* Overview */ = { isa = PBXGroup; children = ( + FB3FF0B3222642FB0059A9A5 /* DWKeysOverviewViewController.h */, + FB3FF0B4222642FB0059A9A5 /* DWKeysOverviewViewController.m */, 2AB66E00235711FA007BE825 /* DWWalletKeysOverviewModel.h */, 2AB66E01235711FA007BE825 /* DWWalletKeysOverviewModel.m */, ); @@ -2747,6 +2749,8 @@ 2AB66E0823572389007BE825 /* DerivationPathKeys */ = { isa = PBXGroup; children = ( + FB3FF0B622264DC60059A9A5 /* DWDerivationPathKeysViewController.h */, + FB3FF0B722264DC60059A9A5 /* DWDerivationPathKeysViewController.m */, 2AB66E0923572572007BE825 /* Models */, 2AB66E03235722E0007BE825 /* Cells */, ); @@ -3263,10 +3267,6 @@ isa = PBXGroup; children = ( FB3FF0B12226416A0059A9A5 /* Masternode.storyboard */, - FB3FF0B3222642FB0059A9A5 /* DWKeysOverviewViewController.h */, - FB3FF0B4222642FB0059A9A5 /* DWKeysOverviewViewController.m */, - FB3FF0B622264DC60059A9A5 /* DWDerivationPathKeysViewController.h */, - FB3FF0B722264DC60059A9A5 /* DWDerivationPathKeysViewController.m */, FB31C23A223BCFAA00BD0868 /* DWMasternodeRootViewController.h */, FB31C23B223BCFAA00BD0868 /* DWMasternodeRootViewController.m */, FB31C251223BD3F600BD0868 /* DWMasternodeDetailViewController.h */, diff --git a/DashWallet/Sources/UI/Menu/Tools/Masternode Keys/DWDerivationPathKeysViewController.h b/DashWallet/Sources/UI/Menu/Tools/Masternode Keys/DerivationPathKeys/Models/DWDerivationPathKeysViewController.h similarity index 73% rename from DashWallet/Sources/UI/Menu/Tools/Masternode Keys/DWDerivationPathKeysViewController.h rename to DashWallet/Sources/UI/Menu/Tools/Masternode Keys/DerivationPathKeys/Models/DWDerivationPathKeysViewController.h index 56796ee5a..b6a9d9dcb 100644 --- a/DashWallet/Sources/UI/Menu/Tools/Masternode Keys/DWDerivationPathKeysViewController.h +++ b/DashWallet/Sources/UI/Menu/Tools/Masternode Keys/DerivationPathKeys/Models/DWDerivationPathKeysViewController.h @@ -25,6 +25,12 @@ NS_ASSUME_NONNULL_BEGIN @property (nonatomic, strong) DSAuthenticationKeysDerivationPath *derivationPath; +- (instancetype)initWithDerivationPath:(DSAuthenticationKeysDerivationPath *)derivationPath; + +- (instancetype)initWithNibName:(nullable NSString *)nibNameOrNil bundle:(nullable NSBundle *)nibBundleOrNil NS_UNAVAILABLE; +- (nullable instancetype)initWithCoder:(NSCoder *)coder NS_UNAVAILABLE; +- (instancetype)init NS_UNAVAILABLE; + @end NS_ASSUME_NONNULL_END diff --git a/DashWallet/Sources/UI/Menu/Tools/Masternode Keys/DWDerivationPathKeysViewController.m b/DashWallet/Sources/UI/Menu/Tools/Masternode Keys/DerivationPathKeys/Models/DWDerivationPathKeysViewController.m similarity index 100% rename from DashWallet/Sources/UI/Menu/Tools/Masternode Keys/DWDerivationPathKeysViewController.m rename to DashWallet/Sources/UI/Menu/Tools/Masternode Keys/DerivationPathKeys/Models/DWDerivationPathKeysViewController.m diff --git a/DashWallet/ar.lproj/Localizable.strings b/DashWallet/ar.lproj/Localizable.strings index 6f1acad86..e9493481f 100644 --- a/DashWallet/ar.lproj/Localizable.strings +++ b/DashWallet/ar.lproj/Localizable.strings @@ -563,9 +563,6 @@ /* No comment provided by engineer. */ "Not owner" = "Not owner"; -/* No comment provided by engineer. */ -"Not used" = "Not used"; - /* No comment provided by engineer. */ "Not voter" = "Not voter"; @@ -890,9 +887,6 @@ /* No comment provided by engineer. */ "Show Recovery Phrase" = "Show Recovery Phrase"; -/* No comment provided by engineer. */ -"Sign Message" = "Sign Message"; - /* No comment provided by engineer. */ "Size:" = "Size:"; diff --git a/DashWallet/bg.lproj/Localizable.strings b/DashWallet/bg.lproj/Localizable.strings index 286c863e6..d5c93ca8b 100644 --- a/DashWallet/bg.lproj/Localizable.strings +++ b/DashWallet/bg.lproj/Localizable.strings @@ -563,9 +563,6 @@ /* No comment provided by engineer. */ "Not owner" = "Not owner"; -/* No comment provided by engineer. */ -"Not used" = "Not used"; - /* No comment provided by engineer. */ "Not voter" = "Not voter"; @@ -890,9 +887,6 @@ /* No comment provided by engineer. */ "Show Recovery Phrase" = "Show Recovery Phrase"; -/* No comment provided by engineer. */ -"Sign Message" = "Sign Message"; - /* No comment provided by engineer. */ "Size:" = "Size:"; diff --git a/DashWallet/de.lproj/Localizable.strings b/DashWallet/de.lproj/Localizable.strings index f556b1d0a..f00547e09 100644 --- a/DashWallet/de.lproj/Localizable.strings +++ b/DashWallet/de.lproj/Localizable.strings @@ -563,9 +563,6 @@ /* No comment provided by engineer. */ "Not owner" = "Not owner"; -/* No comment provided by engineer. */ -"Not used" = "Not used"; - /* No comment provided by engineer. */ "Not voter" = "Not voter"; @@ -890,9 +887,6 @@ /* No comment provided by engineer. */ "Show Recovery Phrase" = "Show Recovery Phrase"; -/* No comment provided by engineer. */ -"Sign Message" = "Sign Message"; - /* No comment provided by engineer. */ "Size:" = "Size:"; diff --git a/DashWallet/el.lproj/Localizable.strings b/DashWallet/el.lproj/Localizable.strings index 9b6d0b4a3..f5cabfbed 100644 --- a/DashWallet/el.lproj/Localizable.strings +++ b/DashWallet/el.lproj/Localizable.strings @@ -563,9 +563,6 @@ /* No comment provided by engineer. */ "Not owner" = "Not owner"; -/* No comment provided by engineer. */ -"Not used" = "Not used"; - /* No comment provided by engineer. */ "Not voter" = "Not voter"; @@ -890,9 +887,6 @@ /* No comment provided by engineer. */ "Show Recovery Phrase" = "Show Recovery Phrase"; -/* No comment provided by engineer. */ -"Sign Message" = "Sign Message"; - /* No comment provided by engineer. */ "Size:" = "Size:"; diff --git a/DashWallet/en.lproj/Localizable.strings b/DashWallet/en.lproj/Localizable.strings index efa9c1ac9..dbc9a4555 100644 --- a/DashWallet/en.lproj/Localizable.strings +++ b/DashWallet/en.lproj/Localizable.strings @@ -563,9 +563,6 @@ /* No comment provided by engineer. */ "Not owner" = "Not owner"; -/* No comment provided by engineer. */ -"Not used" = "Not used"; - /* No comment provided by engineer. */ "Not voter" = "Not voter"; @@ -890,9 +887,6 @@ /* No comment provided by engineer. */ "Show Recovery Phrase" = "Show Recovery Phrase"; -/* No comment provided by engineer. */ -"Sign Message" = "Sign Message"; - /* No comment provided by engineer. */ "Size:" = "Size:"; diff --git a/DashWallet/es.lproj/Localizable.strings b/DashWallet/es.lproj/Localizable.strings index e44260e12..ade9a4cca 100644 --- a/DashWallet/es.lproj/Localizable.strings +++ b/DashWallet/es.lproj/Localizable.strings @@ -563,9 +563,6 @@ /* No comment provided by engineer. */ "Not owner" = "Not owner"; -/* No comment provided by engineer. */ -"Not used" = "Not used"; - /* No comment provided by engineer. */ "Not voter" = "Not voter"; @@ -890,9 +887,6 @@ /* No comment provided by engineer. */ "Show Recovery Phrase" = "Show Recovery Phrase"; -/* No comment provided by engineer. */ -"Sign Message" = "Sign Message"; - /* No comment provided by engineer. */ "Size:" = "Size:"; diff --git a/DashWallet/fr.lproj/Localizable.strings b/DashWallet/fr.lproj/Localizable.strings index d3993104a..e692d09bc 100644 --- a/DashWallet/fr.lproj/Localizable.strings +++ b/DashWallet/fr.lproj/Localizable.strings @@ -563,9 +563,6 @@ /* No comment provided by engineer. */ "Not owner" = "Not owner"; -/* No comment provided by engineer. */ -"Not used" = "Not used"; - /* No comment provided by engineer. */ "Not voter" = "Not voter"; @@ -890,9 +887,6 @@ /* No comment provided by engineer. */ "Show Recovery Phrase" = "Show Recovery Phrase"; -/* No comment provided by engineer. */ -"Sign Message" = "Sign Message"; - /* No comment provided by engineer. */ "Size:" = "Size:"; diff --git a/DashWallet/id.lproj/Localizable.strings b/DashWallet/id.lproj/Localizable.strings index 1c94e1e7f..4341c24a0 100644 --- a/DashWallet/id.lproj/Localizable.strings +++ b/DashWallet/id.lproj/Localizable.strings @@ -563,9 +563,6 @@ /* No comment provided by engineer. */ "Not owner" = "Not owner"; -/* No comment provided by engineer. */ -"Not used" = "Not used"; - /* No comment provided by engineer. */ "Not voter" = "Not voter"; @@ -890,9 +887,6 @@ /* No comment provided by engineer. */ "Show Recovery Phrase" = "Show Recovery Phrase"; -/* No comment provided by engineer. */ -"Sign Message" = "Sign Message"; - /* No comment provided by engineer. */ "Size:" = "Size:"; diff --git a/DashWallet/it.lproj/Localizable.strings b/DashWallet/it.lproj/Localizable.strings index 3a0d5e8ec..e05d901cb 100644 --- a/DashWallet/it.lproj/Localizable.strings +++ b/DashWallet/it.lproj/Localizable.strings @@ -563,9 +563,6 @@ /* No comment provided by engineer. */ "Not owner" = "Not owner"; -/* No comment provided by engineer. */ -"Not used" = "Not used"; - /* No comment provided by engineer. */ "Not voter" = "Not voter"; @@ -890,9 +887,6 @@ /* No comment provided by engineer. */ "Show Recovery Phrase" = "Show Recovery Phrase"; -/* No comment provided by engineer. */ -"Sign Message" = "Sign Message"; - /* No comment provided by engineer. */ "Size:" = "Size:"; diff --git a/DashWallet/ja.lproj/Localizable.strings b/DashWallet/ja.lproj/Localizable.strings index 028d5a898..ca5e3b0f0 100644 --- a/DashWallet/ja.lproj/Localizable.strings +++ b/DashWallet/ja.lproj/Localizable.strings @@ -563,9 +563,6 @@ /* No comment provided by engineer. */ "Not owner" = "Not owner"; -/* No comment provided by engineer. */ -"Not used" = "Not used"; - /* No comment provided by engineer. */ "Not voter" = "Not voter"; @@ -890,9 +887,6 @@ /* No comment provided by engineer. */ "Show Recovery Phrase" = "Show Recovery Phrase"; -/* No comment provided by engineer. */ -"Sign Message" = "Sign Message"; - /* No comment provided by engineer. */ "Size:" = "Size:"; diff --git a/DashWallet/ko.lproj/Localizable.strings b/DashWallet/ko.lproj/Localizable.strings index 930230199..03d61761c 100644 --- a/DashWallet/ko.lproj/Localizable.strings +++ b/DashWallet/ko.lproj/Localizable.strings @@ -563,9 +563,6 @@ /* No comment provided by engineer. */ "Not owner" = "Not owner"; -/* No comment provided by engineer. */ -"Not used" = "Not used"; - /* No comment provided by engineer. */ "Not voter" = "Not voter"; @@ -890,9 +887,6 @@ /* No comment provided by engineer. */ "Show Recovery Phrase" = "Show Recovery Phrase"; -/* No comment provided by engineer. */ -"Sign Message" = "Sign Message"; - /* No comment provided by engineer. */ "Size:" = "Size:"; diff --git a/DashWallet/nb.lproj/Localizable.strings b/DashWallet/nb.lproj/Localizable.strings index d5560445f..4f2395ff9 100644 --- a/DashWallet/nb.lproj/Localizable.strings +++ b/DashWallet/nb.lproj/Localizable.strings @@ -563,9 +563,6 @@ /* No comment provided by engineer. */ "Not owner" = "Not owner"; -/* No comment provided by engineer. */ -"Not used" = "Not used"; - /* No comment provided by engineer. */ "Not voter" = "Not voter"; @@ -890,9 +887,6 @@ /* No comment provided by engineer. */ "Show Recovery Phrase" = "Show Recovery Phrase"; -/* No comment provided by engineer. */ -"Sign Message" = "Sign Message"; - /* No comment provided by engineer. */ "Size:" = "Size:"; diff --git a/DashWallet/nl.lproj/Localizable.strings b/DashWallet/nl.lproj/Localizable.strings index 9847aa131..7c53c1b78 100644 --- a/DashWallet/nl.lproj/Localizable.strings +++ b/DashWallet/nl.lproj/Localizable.strings @@ -563,9 +563,6 @@ /* No comment provided by engineer. */ "Not owner" = "Not owner"; -/* No comment provided by engineer. */ -"Not used" = "Not used"; - /* No comment provided by engineer. */ "Not voter" = "Not voter"; @@ -890,9 +887,6 @@ /* No comment provided by engineer. */ "Show Recovery Phrase" = "Show Recovery Phrase"; -/* No comment provided by engineer. */ -"Sign Message" = "Sign Message"; - /* No comment provided by engineer. */ "Size:" = "Size:"; diff --git a/DashWallet/pl.lproj/Localizable.strings b/DashWallet/pl.lproj/Localizable.strings index c534431ea..4068cd8ec 100644 --- a/DashWallet/pl.lproj/Localizable.strings +++ b/DashWallet/pl.lproj/Localizable.strings @@ -563,9 +563,6 @@ /* No comment provided by engineer. */ "Not owner" = "Not owner"; -/* No comment provided by engineer. */ -"Not used" = "Not used"; - /* No comment provided by engineer. */ "Not voter" = "Not voter"; @@ -890,9 +887,6 @@ /* No comment provided by engineer. */ "Show Recovery Phrase" = "Show Recovery Phrase"; -/* No comment provided by engineer. */ -"Sign Message" = "Sign Message"; - /* No comment provided by engineer. */ "Size:" = "Size:"; diff --git a/DashWallet/pt.lproj/Localizable.strings b/DashWallet/pt.lproj/Localizable.strings index 2a7a6673d..a2a545cb4 100644 --- a/DashWallet/pt.lproj/Localizable.strings +++ b/DashWallet/pt.lproj/Localizable.strings @@ -563,9 +563,6 @@ /* No comment provided by engineer. */ "Not owner" = "Not owner"; -/* No comment provided by engineer. */ -"Not used" = "Not used"; - /* No comment provided by engineer. */ "Not voter" = "Not voter"; @@ -890,9 +887,6 @@ /* No comment provided by engineer. */ "Show Recovery Phrase" = "Show Recovery Phrase"; -/* No comment provided by engineer. */ -"Sign Message" = "Sign Message"; - /* No comment provided by engineer. */ "Size:" = "Size:"; diff --git a/DashWallet/ru.lproj/Localizable.strings b/DashWallet/ru.lproj/Localizable.strings index c9f820692..ac3241fb8 100644 --- a/DashWallet/ru.lproj/Localizable.strings +++ b/DashWallet/ru.lproj/Localizable.strings @@ -563,9 +563,6 @@ /* No comment provided by engineer. */ "Not owner" = "Not owner"; -/* No comment provided by engineer. */ -"Not used" = "Not used"; - /* No comment provided by engineer. */ "Not voter" = "Not voter"; @@ -890,9 +887,6 @@ /* No comment provided by engineer. */ "Show Recovery Phrase" = "Show Recovery Phrase"; -/* No comment provided by engineer. */ -"Sign Message" = "Sign Message"; - /* No comment provided by engineer. */ "Size:" = "Size:"; diff --git a/DashWallet/sk.lproj/Localizable.strings b/DashWallet/sk.lproj/Localizable.strings index f3a2aa64f..7871ccabe 100644 --- a/DashWallet/sk.lproj/Localizable.strings +++ b/DashWallet/sk.lproj/Localizable.strings @@ -563,9 +563,6 @@ /* No comment provided by engineer. */ "Not owner" = "Not owner"; -/* No comment provided by engineer. */ -"Not used" = "Not used"; - /* No comment provided by engineer. */ "Not voter" = "Not voter"; @@ -890,9 +887,6 @@ /* No comment provided by engineer. */ "Show Recovery Phrase" = "Show Recovery Phrase"; -/* No comment provided by engineer. */ -"Sign Message" = "Sign Message"; - /* No comment provided by engineer. */ "Size:" = "Size:"; diff --git a/DashWallet/sq.lproj/Localizable.strings b/DashWallet/sq.lproj/Localizable.strings index a8c686921..da01a9c10 100644 --- a/DashWallet/sq.lproj/Localizable.strings +++ b/DashWallet/sq.lproj/Localizable.strings @@ -563,9 +563,6 @@ /* No comment provided by engineer. */ "Not owner" = "Not owner"; -/* No comment provided by engineer. */ -"Not used" = "Not used"; - /* No comment provided by engineer. */ "Not voter" = "Not voter"; @@ -890,9 +887,6 @@ /* No comment provided by engineer. */ "Show Recovery Phrase" = "Show Recovery Phrase"; -/* No comment provided by engineer. */ -"Sign Message" = "Sign Message"; - /* No comment provided by engineer. */ "Size:" = "Size:"; diff --git a/DashWallet/sv.lproj/Localizable.strings b/DashWallet/sv.lproj/Localizable.strings index 102c8fd29..604628a12 100644 --- a/DashWallet/sv.lproj/Localizable.strings +++ b/DashWallet/sv.lproj/Localizable.strings @@ -563,9 +563,6 @@ /* No comment provided by engineer. */ "Not owner" = "Not owner"; -/* No comment provided by engineer. */ -"Not used" = "Not used"; - /* No comment provided by engineer. */ "Not voter" = "Not voter"; @@ -890,9 +887,6 @@ /* No comment provided by engineer. */ "Show Recovery Phrase" = "Show Recovery Phrase"; -/* No comment provided by engineer. */ -"Sign Message" = "Sign Message"; - /* No comment provided by engineer. */ "Size:" = "Size:"; diff --git a/DashWallet/th.lproj/Localizable.strings b/DashWallet/th.lproj/Localizable.strings index b70bdbafd..05272f71f 100644 --- a/DashWallet/th.lproj/Localizable.strings +++ b/DashWallet/th.lproj/Localizable.strings @@ -563,9 +563,6 @@ /* No comment provided by engineer. */ "Not owner" = "Not owner"; -/* No comment provided by engineer. */ -"Not used" = "Not used"; - /* No comment provided by engineer. */ "Not voter" = "Not voter"; @@ -890,9 +887,6 @@ /* No comment provided by engineer. */ "Show Recovery Phrase" = "Show Recovery Phrase"; -/* No comment provided by engineer. */ -"Sign Message" = "Sign Message"; - /* No comment provided by engineer. */ "Size:" = "Size:"; diff --git a/DashWallet/tr.lproj/Localizable.strings b/DashWallet/tr.lproj/Localizable.strings index ac7a300bc..2364ef9b1 100644 --- a/DashWallet/tr.lproj/Localizable.strings +++ b/DashWallet/tr.lproj/Localizable.strings @@ -563,9 +563,6 @@ /* No comment provided by engineer. */ "Not owner" = "Not owner"; -/* No comment provided by engineer. */ -"Not used" = "Not used"; - /* No comment provided by engineer. */ "Not voter" = "Not voter"; @@ -890,9 +887,6 @@ /* No comment provided by engineer. */ "Show Recovery Phrase" = "Show Recovery Phrase"; -/* No comment provided by engineer. */ -"Sign Message" = "Sign Message"; - /* No comment provided by engineer. */ "Size:" = "Size:"; diff --git a/DashWallet/vi.lproj/Localizable.strings b/DashWallet/vi.lproj/Localizable.strings index 3bc542001..98a8f1cf1 100644 --- a/DashWallet/vi.lproj/Localizable.strings +++ b/DashWallet/vi.lproj/Localizable.strings @@ -563,9 +563,6 @@ /* No comment provided by engineer. */ "Not owner" = "Not owner"; -/* No comment provided by engineer. */ -"Not used" = "Not used"; - /* No comment provided by engineer. */ "Not voter" = "Not voter"; @@ -890,9 +887,6 @@ /* No comment provided by engineer. */ "Show Recovery Phrase" = "Show Recovery Phrase"; -/* No comment provided by engineer. */ -"Sign Message" = "Sign Message"; - /* No comment provided by engineer. */ "Size:" = "Size:"; diff --git a/DashWallet/zh-Hans.lproj/Localizable.strings b/DashWallet/zh-Hans.lproj/Localizable.strings index 4c57e6dfd..8adc65037 100644 --- a/DashWallet/zh-Hans.lproj/Localizable.strings +++ b/DashWallet/zh-Hans.lproj/Localizable.strings @@ -563,9 +563,6 @@ /* No comment provided by engineer. */ "Not owner" = "Not owner"; -/* No comment provided by engineer. */ -"Not used" = "Not used"; - /* No comment provided by engineer. */ "Not voter" = "Not voter"; @@ -890,9 +887,6 @@ /* No comment provided by engineer. */ "Show Recovery Phrase" = "Show Recovery Phrase"; -/* No comment provided by engineer. */ -"Sign Message" = "Sign Message"; - /* No comment provided by engineer. */ "Size:" = "Size:"; diff --git a/DashWallet/zh-Hant-TW.lproj/Localizable.strings b/DashWallet/zh-Hant-TW.lproj/Localizable.strings index 9a732408f..e12050f1e 100644 --- a/DashWallet/zh-Hant-TW.lproj/Localizable.strings +++ b/DashWallet/zh-Hant-TW.lproj/Localizable.strings @@ -563,9 +563,6 @@ /* No comment provided by engineer. */ "Not owner" = "Not owner"; -/* No comment provided by engineer. */ -"Not used" = "Not used"; - /* No comment provided by engineer. */ "Not voter" = "Not voter"; @@ -890,9 +887,6 @@ /* No comment provided by engineer. */ "Show Recovery Phrase" = "Show Recovery Phrase"; -/* No comment provided by engineer. */ -"Sign Message" = "Sign Message"; - /* No comment provided by engineer. */ "Size:" = "Size:"; From 67219c3e9dc42a7e29fdb8f97503e159097dbfc5 Mon Sep 17 00:00:00 2001 From: Quantum Explorer Date: Sun, 27 Oct 2019 21:12:42 +0700 Subject: [PATCH 15/34] cleanup --- DashWallet.xcodeproj/project.pbxproj | 16 +- .../UI/Menu/Tools/DWToolsMenuViewController.m | 5 +- .../Masternode Keys/Masternode.storyboard | 409 +++--------------- .../DWSignMessageViewController.h | 0 .../DWSignMessageViewController.m | 0 .../DWSignPayloadViewController.h | 0 .../DWSignPayloadViewController.m | 0 7 files changed, 77 insertions(+), 353 deletions(-) rename DashWallet/Sources/UI/Menu/Tools/Masternode Keys/{ => Signing}/DWSignMessageViewController.h (100%) rename DashWallet/Sources/UI/Menu/Tools/Masternode Keys/{ => Signing}/DWSignMessageViewController.m (100%) rename DashWallet/Sources/UI/Menu/Tools/Masternode Keys/{ => Signing}/DWSignPayloadViewController.h (100%) rename DashWallet/Sources/UI/Menu/Tools/Masternode Keys/{ => Signing}/DWSignPayloadViewController.m (100%) diff --git a/DashWallet.xcodeproj/project.pbxproj b/DashWallet.xcodeproj/project.pbxproj index afebe9491..33227ced6 100644 --- a/DashWallet.xcodeproj/project.pbxproj +++ b/DashWallet.xcodeproj/project.pbxproj @@ -3263,9 +3263,21 @@ path = FBShimmering; sourceTree = SOURCE_ROOT; }; + FB3E9F622365D55700C09C5C /* Signing */ = { + isa = PBXGroup; + children = ( + FB1BF8C522C6F4B7003413C6 /* DWSignMessageViewController.h */, + FB1BF8C622C6F4B7003413C6 /* DWSignMessageViewController.m */, + FB31C24F223BD3F500BD0868 /* DWSignPayloadViewController.h */, + FB31C246223BD3F200BD0868 /* DWSignPayloadViewController.m */, + ); + path = Signing; + sourceTree = ""; + }; FB3FF0B0222641210059A9A5 /* Masternode Keys */ = { isa = PBXGroup; children = ( + FB3E9F622365D55700C09C5C /* Signing */, FB3FF0B12226416A0059A9A5 /* Masternode.storyboard */, FB31C23A223BCFAA00BD0868 /* DWMasternodeRootViewController.h */, FB31C23B223BCFAA00BD0868 /* DWMasternodeRootViewController.m */, @@ -3281,8 +3293,6 @@ FB31C23D223BD3F000BD0868 /* DWReclaimMasternodeViewController.m */, FB31C23F223BD3F100BD0868 /* DWRegisterMasternodeViewController.h */, FB31C247223BD3F200BD0868 /* DWRegisterMasternodeViewController.m */, - FB31C24F223BD3F500BD0868 /* DWSignPayloadViewController.h */, - FB31C246223BD3F200BD0868 /* DWSignPayloadViewController.m */, FB31C241223BD3F100BD0868 /* DWUpdateMasternodeRegistrarViewController.h */, FB31C250223BD3F500BD0868 /* DWUpdateMasternodeRegistrarViewController.m */, FB31C244223BD3F200BD0868 /* DWUpdateMasternodeRevocationViewController.h */, @@ -3293,8 +3303,6 @@ 2AE125F7224113C600379C6F /* DWBaseMasternodeViewController.m */, 2AE125FE2241342900379C6F /* DWResultsMasternodeViewController.h */, 2AE125FF2241342900379C6F /* DWResultsMasternodeViewController.m */, - FB1BF8C522C6F4B7003413C6 /* DWSignMessageViewController.h */, - FB1BF8C622C6F4B7003413C6 /* DWSignMessageViewController.m */, 2AB66E0823572389007BE825 /* DerivationPathKeys */, 2AB66E0723572379007BE825 /* Overview */, ); diff --git a/DashWallet/Sources/UI/Menu/Tools/DWToolsMenuViewController.m b/DashWallet/Sources/UI/Menu/Tools/DWToolsMenuViewController.m index 6858af534..5575bedc2 100644 --- a/DashWallet/Sources/UI/Menu/Tools/DWToolsMenuViewController.m +++ b/DashWallet/Sources/UI/Menu/Tools/DWToolsMenuViewController.m @@ -20,6 +20,7 @@ #import "DWFormTableViewController.h" #import "DWImportWalletInfoViewController.h" #import "DWKeysOverviewViewController.h" +#import "DWMasternodeViewController.h" #import "DWToolsMenuModel.h" #import "DWUIKit.h" @@ -148,8 +149,8 @@ - (void)showMasternodeKeys { } - (void)showMasternodeControl { - DWKeysOverviewViewController *keysViewController = [[DWKeysOverviewViewController alloc] init]; - [self.navigationController pushViewController:keysViewController animated:YES]; + DWMasternodeViewController *masternodeViewController = [[DWMasternodeViewController alloc] init]; + [self.navigationController pushViewController:masternodeViewController animated:YES]; } @end diff --git a/DashWallet/Sources/UI/Menu/Tools/Masternode Keys/Masternode.storyboard b/DashWallet/Sources/UI/Menu/Tools/Masternode Keys/Masternode.storyboard index a92d1437a..de3ece039 100644 --- a/DashWallet/Sources/UI/Menu/Tools/Masternode Keys/Masternode.storyboard +++ b/DashWallet/Sources/UI/Menu/Tools/Masternode Keys/Masternode.storyboard @@ -1,289 +1,18 @@ - - - - + + - + - - Montserrat-Medium - Montserrat-Regular - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - @@ -325,7 +54,7 @@ - + - - - diff --git a/DashWallet/Sources/UI/Menu/Tools/Masternode Keys/DWSignMessageViewController.h b/DashWallet/Sources/UI/Menu/Tools/Masternode Keys/Signing/DWSignMessageViewController.h similarity index 100% rename from DashWallet/Sources/UI/Menu/Tools/Masternode Keys/DWSignMessageViewController.h rename to DashWallet/Sources/UI/Menu/Tools/Masternode Keys/Signing/DWSignMessageViewController.h diff --git a/DashWallet/Sources/UI/Menu/Tools/Masternode Keys/DWSignMessageViewController.m b/DashWallet/Sources/UI/Menu/Tools/Masternode Keys/Signing/DWSignMessageViewController.m similarity index 100% rename from DashWallet/Sources/UI/Menu/Tools/Masternode Keys/DWSignMessageViewController.m rename to DashWallet/Sources/UI/Menu/Tools/Masternode Keys/Signing/DWSignMessageViewController.m diff --git a/DashWallet/Sources/UI/Menu/Tools/Masternode Keys/DWSignPayloadViewController.h b/DashWallet/Sources/UI/Menu/Tools/Masternode Keys/Signing/DWSignPayloadViewController.h similarity index 100% rename from DashWallet/Sources/UI/Menu/Tools/Masternode Keys/DWSignPayloadViewController.h rename to DashWallet/Sources/UI/Menu/Tools/Masternode Keys/Signing/DWSignPayloadViewController.h diff --git a/DashWallet/Sources/UI/Menu/Tools/Masternode Keys/DWSignPayloadViewController.m b/DashWallet/Sources/UI/Menu/Tools/Masternode Keys/Signing/DWSignPayloadViewController.m similarity index 100% rename from DashWallet/Sources/UI/Menu/Tools/Masternode Keys/DWSignPayloadViewController.m rename to DashWallet/Sources/UI/Menu/Tools/Masternode Keys/Signing/DWSignPayloadViewController.m From d27c4f0e808ccc7e438aac351c630c6bd81d4558 Mon Sep 17 00:00:00 2001 From: Quantum Explorer Date: Sun, 3 Nov 2019 07:34:37 +0700 Subject: [PATCH 16/34] create registration model --- DashSyncCurrentCommit | 2 +- DashWallet.xcodeproj/project.pbxproj | 86 ++++++-- .../DWPublicKeyGenerationTableViewCell.h | 39 ++++ .../DWPublicKeyGenerationTableViewCell.m | 33 +++ .../UI/Menu/Tools/DWToolsMenuViewController.m | 32 +-- .../DWMasternodeFeaturesMenuViewController.h | 26 +++ .../DWMasternodeFeaturesMenuViewController.m | 144 +++++++++++++ .../DWBaseMasternodeViewController.h | 0 .../DWBaseMasternodeViewController.m | 0 .../DWMasternodeDetailViewController.h | 0 .../DWMasternodeDetailViewController.m | 0 .../DWMasternodeRootViewController.h | 0 .../DWMasternodeRootViewController.m | 0 .../DWMasternodeViewController.h | 0 .../DWMasternodeViewController.m | 0 ...pdateRegistrarTransactionsViewController.h | 0 ...pdateRegistrarTransactionsViewController.m | 0 ...rUpdateServiceTransactionsViewController.h | 0 ...rUpdateServiceTransactionsViewController.m | 0 .../DWReclaimMasternodeViewController.h | 0 .../DWReclaimMasternodeViewController.m | 0 .../DWResultsMasternodeViewController.h | 0 .../DWResultsMasternodeViewController.m | 0 ...WUpdateMasternodeRegistrarViewController.h | 0 ...WUpdateMasternodeRegistrarViewController.m | 0 ...UpdateMasternodeRevocationViewController.h | 0 ...UpdateMasternodeRevocationViewController.m | 0 .../DWUpdateMasternodeServiceViewController.h | 0 .../DWUpdateMasternodeServiceViewController.m | 0 .../DWKeysOverviewViewController.h | 0 .../DWKeysOverviewViewController.m | 0 .../Cells/DWDerivationPathKeysTableViewCell.h | 0 .../Cells/DWDerivationPathKeysTableViewCell.m | 0 .../DWDerivationPathKeysViewController.h | 0 .../DWDerivationPathKeysViewController.m | 0 .../Models/DWDerivationPathKeysItem.h | 0 .../Models/DWDerivationPathKeysModel.h | 0 .../Models/DWDerivationPathKeysModel.m | 0 .../DWDerivationPathKeysViewController.h | 0 .../DWDerivationPathKeysViewController.m | 0 .../Overview/DWKeysOverviewViewController.h | 0 .../Overview/DWKeysOverviewViewController.m | 0 .../Overview/DWWalletKeysOverviewModel.h | 0 .../Overview/DWWalletKeysOverviewModel.m | 0 .../Signing/DWSignMessageViewController.h | 0 .../Signing/DWSignMessageViewController.m | 0 .../Signing/DWSignPayloadViewController.h | 0 .../Signing/DWSignPayloadViewController.m | 0 .../DWRegisterMasternodeViewController.h | 2 + .../DWRegisterMasternodeViewController.m | 63 ++++-- .../Models/DWMasternodeRegistrationModel.h | 46 ++++ .../Models/DWMasternodeRegistrationModel.m | 78 +++++++ .../Masternode.storyboard | 197 ++++++++++-------- DashWallet/ar.lproj/Localizable.strings | 17 +- DashWallet/bg.lproj/Localizable.strings | 17 +- DashWallet/de.lproj/Localizable.strings | 17 +- DashWallet/el.lproj/Localizable.strings | 17 +- DashWallet/en.lproj/Localizable.strings | 17 +- DashWallet/es.lproj/Localizable.strings | 17 +- DashWallet/fr.lproj/Localizable.strings | 17 +- DashWallet/id.lproj/Localizable.strings | 17 +- DashWallet/it.lproj/Localizable.strings | 17 +- DashWallet/ja.lproj/Localizable.strings | 17 +- DashWallet/ko.lproj/Localizable.strings | 17 +- DashWallet/nb.lproj/Localizable.strings | 17 +- DashWallet/nl.lproj/Localizable.strings | 17 +- DashWallet/pl.lproj/Localizable.strings | 17 +- DashWallet/pt.lproj/Localizable.strings | 17 +- DashWallet/ru.lproj/Localizable.strings | 17 +- DashWallet/sk.lproj/Localizable.strings | 17 +- DashWallet/sq.lproj/Localizable.strings | 17 +- DashWallet/sv.lproj/Localizable.strings | 17 +- DashWallet/th.lproj/Localizable.strings | 17 +- DashWallet/tr.lproj/Localizable.strings | 17 +- DashWallet/vi.lproj/Localizable.strings | 17 +- DashWallet/zh-Hans.lproj/Localizable.strings | 17 +- .../zh-Hant-TW.lproj/Localizable.strings | 17 +- 77 files changed, 985 insertions(+), 171 deletions(-) create mode 100644 DashWallet/DWPublicKeyGenerationTableViewCell.h create mode 100644 DashWallet/DWPublicKeyGenerationTableViewCell.m create mode 100644 DashWallet/Sources/UI/Menu/Tools/Masternode/DWMasternodeFeaturesMenuViewController.h create mode 100644 DashWallet/Sources/UI/Menu/Tools/Masternode/DWMasternodeFeaturesMenuViewController.m rename DashWallet/Sources/UI/Menu/Tools/{Masternode Keys => Masternode/Masternode Control}/DWBaseMasternodeViewController.h (100%) rename DashWallet/Sources/UI/Menu/Tools/{Masternode Keys => Masternode/Masternode Control}/DWBaseMasternodeViewController.m (100%) rename DashWallet/Sources/UI/Menu/Tools/{Masternode Keys => Masternode/Masternode Control}/DWMasternodeDetailViewController.h (100%) rename DashWallet/Sources/UI/Menu/Tools/{Masternode Keys => Masternode/Masternode Control}/DWMasternodeDetailViewController.m (100%) rename DashWallet/Sources/UI/Menu/Tools/{Masternode Keys => Masternode/Masternode Control}/DWMasternodeRootViewController.h (100%) rename DashWallet/Sources/UI/Menu/Tools/{Masternode Keys => Masternode/Masternode Control}/DWMasternodeRootViewController.m (100%) rename DashWallet/Sources/UI/Menu/Tools/{Masternode Keys => Masternode/Masternode Control}/DWMasternodeViewController.h (100%) rename DashWallet/Sources/UI/Menu/Tools/{Masternode Keys => Masternode/Masternode Control}/DWMasternodeViewController.m (100%) rename DashWallet/Sources/UI/Menu/Tools/{Masternode Keys => Masternode/Masternode Control}/DWProviderUpdateRegistrarTransactionsViewController.h (100%) rename DashWallet/Sources/UI/Menu/Tools/{Masternode Keys => Masternode/Masternode Control}/DWProviderUpdateRegistrarTransactionsViewController.m (100%) rename DashWallet/Sources/UI/Menu/Tools/{Masternode Keys => Masternode/Masternode Control}/DWProviderUpdateServiceTransactionsViewController.h (100%) rename DashWallet/Sources/UI/Menu/Tools/{Masternode Keys => Masternode/Masternode Control}/DWProviderUpdateServiceTransactionsViewController.m (100%) rename DashWallet/Sources/UI/Menu/Tools/{Masternode Keys => Masternode/Masternode Control}/DWReclaimMasternodeViewController.h (100%) rename DashWallet/Sources/UI/Menu/Tools/{Masternode Keys => Masternode/Masternode Control}/DWReclaimMasternodeViewController.m (100%) rename DashWallet/Sources/UI/Menu/Tools/{Masternode Keys => Masternode/Masternode Control}/DWResultsMasternodeViewController.h (100%) rename DashWallet/Sources/UI/Menu/Tools/{Masternode Keys => Masternode/Masternode Control}/DWResultsMasternodeViewController.m (100%) rename DashWallet/Sources/UI/Menu/Tools/{Masternode Keys => Masternode/Masternode Control}/DWUpdateMasternodeRegistrarViewController.h (100%) rename DashWallet/Sources/UI/Menu/Tools/{Masternode Keys => Masternode/Masternode Control}/DWUpdateMasternodeRegistrarViewController.m (100%) rename DashWallet/Sources/UI/Menu/Tools/{Masternode Keys => Masternode/Masternode Control}/DWUpdateMasternodeRevocationViewController.h (100%) rename DashWallet/Sources/UI/Menu/Tools/{Masternode Keys => Masternode/Masternode Control}/DWUpdateMasternodeRevocationViewController.m (100%) rename DashWallet/Sources/UI/Menu/Tools/{Masternode Keys => Masternode/Masternode Control}/DWUpdateMasternodeServiceViewController.h (100%) rename DashWallet/Sources/UI/Menu/Tools/{Masternode Keys => Masternode/Masternode Control}/DWUpdateMasternodeServiceViewController.m (100%) rename DashWallet/Sources/UI/Menu/Tools/{ => Masternode}/Masternode Keys/DWKeysOverviewViewController.h (100%) rename DashWallet/Sources/UI/Menu/Tools/{ => Masternode}/Masternode Keys/DWKeysOverviewViewController.m (100%) rename DashWallet/Sources/UI/Menu/Tools/{ => Masternode}/Masternode Keys/DerivationPathKeys/Cells/DWDerivationPathKeysTableViewCell.h (100%) rename DashWallet/Sources/UI/Menu/Tools/{ => Masternode}/Masternode Keys/DerivationPathKeys/Cells/DWDerivationPathKeysTableViewCell.m (100%) rename DashWallet/Sources/UI/Menu/Tools/{ => Masternode}/Masternode Keys/DerivationPathKeys/DWDerivationPathKeysViewController.h (100%) rename DashWallet/Sources/UI/Menu/Tools/{ => Masternode}/Masternode Keys/DerivationPathKeys/DWDerivationPathKeysViewController.m (100%) rename DashWallet/Sources/UI/Menu/Tools/{ => Masternode}/Masternode Keys/DerivationPathKeys/Models/DWDerivationPathKeysItem.h (100%) rename DashWallet/Sources/UI/Menu/Tools/{ => Masternode}/Masternode Keys/DerivationPathKeys/Models/DWDerivationPathKeysModel.h (100%) rename DashWallet/Sources/UI/Menu/Tools/{ => Masternode}/Masternode Keys/DerivationPathKeys/Models/DWDerivationPathKeysModel.m (100%) rename DashWallet/Sources/UI/Menu/Tools/{ => Masternode}/Masternode Keys/DerivationPathKeys/Models/DWDerivationPathKeysViewController.h (100%) rename DashWallet/Sources/UI/Menu/Tools/{ => Masternode}/Masternode Keys/DerivationPathKeys/Models/DWDerivationPathKeysViewController.m (100%) rename DashWallet/Sources/UI/Menu/Tools/{ => Masternode}/Masternode Keys/Overview/DWKeysOverviewViewController.h (100%) rename DashWallet/Sources/UI/Menu/Tools/{ => Masternode}/Masternode Keys/Overview/DWKeysOverviewViewController.m (100%) rename DashWallet/Sources/UI/Menu/Tools/{ => Masternode}/Masternode Keys/Overview/DWWalletKeysOverviewModel.h (100%) rename DashWallet/Sources/UI/Menu/Tools/{ => Masternode}/Masternode Keys/Overview/DWWalletKeysOverviewModel.m (100%) rename DashWallet/Sources/UI/Menu/Tools/{ => Masternode}/Masternode Keys/Signing/DWSignMessageViewController.h (100%) rename DashWallet/Sources/UI/Menu/Tools/{ => Masternode}/Masternode Keys/Signing/DWSignMessageViewController.m (100%) rename DashWallet/Sources/UI/Menu/Tools/{ => Masternode}/Masternode Keys/Signing/DWSignPayloadViewController.h (100%) rename DashWallet/Sources/UI/Menu/Tools/{ => Masternode}/Masternode Keys/Signing/DWSignPayloadViewController.m (100%) rename DashWallet/Sources/UI/Menu/Tools/{Masternode Keys => Masternode/Masternode Registration}/DWRegisterMasternodeViewController.h (91%) rename DashWallet/Sources/UI/Menu/Tools/{Masternode Keys => Masternode/Masternode Registration}/DWRegisterMasternodeViewController.m (86%) create mode 100644 DashWallet/Sources/UI/Menu/Tools/Masternode/Masternode Registration/Models/DWMasternodeRegistrationModel.h create mode 100644 DashWallet/Sources/UI/Menu/Tools/Masternode/Masternode Registration/Models/DWMasternodeRegistrationModel.m rename DashWallet/Sources/UI/Menu/Tools/{Masternode Keys => Masternode}/Masternode.storyboard (94%) diff --git a/DashSyncCurrentCommit b/DashSyncCurrentCommit index 7781db10c..fa6f04ea2 100644 --- a/DashSyncCurrentCommit +++ b/DashSyncCurrentCommit @@ -1 +1 @@ -a3c84bb0976ca031ee5551de9f3696160dff393d +dbe77f019ad0d745c22f7f9b18db0dcae0b645ab diff --git a/DashWallet.xcodeproj/project.pbxproj b/DashWallet.xcodeproj/project.pbxproj index 33227ced6..3702695e9 100644 --- a/DashWallet.xcodeproj/project.pbxproj +++ b/DashWallet.xcodeproj/project.pbxproj @@ -381,6 +381,8 @@ FB1BF8C722C6F4B7003413C6 /* DWSignMessageViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = FB1BF8C622C6F4B7003413C6 /* DWSignMessageViewController.m */; }; FB1BF8C822C7FBD0003413C6 /* DWAmountInputValidator.m in Sources */ = {isa = PBXBuildFile; fileRef = 2A2120E92214566A009906DC /* DWAmountInputValidator.m */; }; FB1BF8C922C7FBD4003413C6 /* DWAmountObject.m in Sources */ = {isa = PBXBuildFile; fileRef = 2A2120EF22147A40009906DC /* DWAmountObject.m */; }; + FB1C3DC5236AD433004C2B05 /* DWMasternodeFeaturesMenuViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = FB1C3DC4236AD433004C2B05 /* DWMasternodeFeaturesMenuViewController.m */; }; + FB1C3DC6236C89CC004C2B05 /* DWKeyValueTableViewCell.m in Sources */ = {isa = PBXBuildFile; fileRef = FB31C265223BD6FB00BD0868 /* DWKeyValueTableViewCell.m */; }; FB248B5D1F73803100405AE0 /* UserNotifications.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FB248B5C1F73803100405AE0 /* UserNotifications.framework */; }; FB248B631F79BB7C00405AE0 /* SafariServices.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FB248B621F79BB7C00405AE0 /* SafariServices.framework */; }; FB2E5537218BA161003A1B7C /* DWVersionManager.m in Sources */ = {isa = PBXBuildFile; fileRef = FB2E5536218BA161003A1B7C /* DWVersionManager.m */; }; @@ -414,8 +416,10 @@ FB66977F212C0B940034BE4F /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = FB66977E212C0B940034BE4F /* LaunchScreen.storyboard */; }; FB6B7D612180F6E100147CEB /* BRAppleWatchData.m in Sources */ = {isa = PBXBuildFile; fileRef = BA7B534F1BDA9A2800355E8D /* BRAppleWatchData.m */; }; FB6B7D622180F6E500147CEB /* BRAppleWatchTransactionData.m in Sources */ = {isa = PBXBuildFile; fileRef = BA7B53531BDAA0A800355E8D /* BRAppleWatchTransactionData.m */; }; + FB83F3DF236E4C9D0039ED1B /* DWPublicKeyGenerationTableViewCell.m in Sources */ = {isa = PBXBuildFile; fileRef = FB83F3DE236E4C9D0039ED1B /* DWPublicKeyGenerationTableViewCell.m */; }; FB8ACEB622E0502200EE5035 /* DWUpholdMainnetConstants.m in Sources */ = {isa = PBXBuildFile; fileRef = FB8ACEB522E0502100EE5035 /* DWUpholdMainnetConstants.m */; }; FB9CC2711F8E27B80079309F /* DWGenerateViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = FB9CC2701F8E27B80079309F /* DWGenerateViewController.m */; }; + FBCFEDEE236E50CD0086DE07 /* DWMasternodeRegistrationModel.m in Sources */ = {isa = PBXBuildFile; fileRef = FBCFEDED236E50CD0086DE07 /* DWMasternodeRegistrationModel.m */; }; FBEF3AF121823CD800917AB6 /* DWEnvironment.m in Sources */ = {isa = PBXBuildFile; fileRef = FBEF3AF021823CD800917AB6 /* DWEnvironment.m */; }; FBF3F42B1E42AF8F00C7248E /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FBF3F42A1E42AF8F00C7248E /* QuartzCore.framework */; }; FBF3F42D1E42B00C00C7248E /* UIKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FBF3F42C1E42B00C00C7248E /* UIKit.framework */; }; @@ -1277,6 +1281,8 @@ FB1212A91FFFB0F3000E407E /* dashwalletTodayExtension.entitlements */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.entitlements; name = dashwalletTodayExtension.entitlements; path = DashWallet/dashwalletTodayExtension.entitlements; sourceTree = SOURCE_ROOT; }; FB1BF8C522C6F4B7003413C6 /* DWSignMessageViewController.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = DWSignMessageViewController.h; sourceTree = ""; }; FB1BF8C622C6F4B7003413C6 /* DWSignMessageViewController.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = DWSignMessageViewController.m; sourceTree = ""; }; + FB1C3DC3236AD433004C2B05 /* DWMasternodeFeaturesMenuViewController.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = DWMasternodeFeaturesMenuViewController.h; sourceTree = ""; }; + FB1C3DC4236AD433004C2B05 /* DWMasternodeFeaturesMenuViewController.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = DWMasternodeFeaturesMenuViewController.m; sourceTree = ""; }; FB248B5C1F73803100405AE0 /* UserNotifications.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = UserNotifications.framework; path = System/Library/Frameworks/UserNotifications.framework; sourceTree = SDKROOT; }; FB248B621F79BB7C00405AE0 /* SafariServices.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = SafariServices.framework; path = System/Library/Frameworks/SafariServices.framework; sourceTree = SDKROOT; }; FB2E5535218BA161003A1B7C /* DWVersionManager.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = DWVersionManager.h; sourceTree = ""; }; @@ -1368,10 +1374,14 @@ FB586CD4213D659F00836ACC /* tr */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = tr; path = tr.lproj/Interface.strings; sourceTree = ""; }; FB66977E212C0B940034BE4F /* LaunchScreen.storyboard */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; path = LaunchScreen.storyboard; sourceTree = ""; }; FB6DD3811F7FA48500BC1E4D /* dashwallet.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = dashwallet.entitlements; sourceTree = ""; }; + FB83F3DD236E4C9D0039ED1B /* DWPublicKeyGenerationTableViewCell.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = DWPublicKeyGenerationTableViewCell.h; sourceTree = ""; }; + FB83F3DE236E4C9D0039ED1B /* DWPublicKeyGenerationTableViewCell.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = DWPublicKeyGenerationTableViewCell.m; sourceTree = ""; }; FB8ACEB422E0502100EE5035 /* DWUpholdMainnetConstants.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DWUpholdMainnetConstants.h; sourceTree = ""; }; FB8ACEB522E0502100EE5035 /* DWUpholdMainnetConstants.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = DWUpholdMainnetConstants.m; sourceTree = ""; }; FB9CC26F1F8E27B80079309F /* DWGenerateViewController.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = DWGenerateViewController.h; sourceTree = ""; }; FB9CC2701F8E27B80079309F /* DWGenerateViewController.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = DWGenerateViewController.m; sourceTree = ""; }; + FBCFEDEC236E50CD0086DE07 /* DWMasternodeRegistrationModel.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = DWMasternodeRegistrationModel.h; sourceTree = ""; }; + FBCFEDED236E50CD0086DE07 /* DWMasternodeRegistrationModel.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = DWMasternodeRegistrationModel.m; sourceTree = ""; }; FBEF3AED2182395800917AB6 /* DashSync.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; path = DashSync.framework; sourceTree = BUILT_PRODUCTS_DIR; }; FBEF3AEF21823CD800917AB6 /* DWEnvironment.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = DWEnvironment.h; sourceTree = ""; }; FBEF3AF021823CD800917AB6 /* DWEnvironment.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = DWEnvironment.m; sourceTree = ""; }; @@ -2175,8 +2185,8 @@ 2A7A7BDA2348DBE700451078 /* Tools */ = { isa = PBXGroup; children = ( + FB1C3DC2236AD3C7004C2B05 /* Masternode */, 2A10EB322358994400C38B61 /* ImportWallet */, - FB3FF0B0222641210059A9A5 /* Masternode Keys */, 2A7A7BDB2348DC0A00451078 /* DWToolsMenuModel.h */, 2A7A7BDC2348DC0A00451078 /* DWToolsMenuModel.m */, 2A7A7BDE2348DC1900451078 /* DWToolsMenuViewController.h */, @@ -3263,22 +3273,9 @@ path = FBShimmering; sourceTree = SOURCE_ROOT; }; - FB3E9F622365D55700C09C5C /* Signing */ = { - isa = PBXGroup; - children = ( - FB1BF8C522C6F4B7003413C6 /* DWSignMessageViewController.h */, - FB1BF8C622C6F4B7003413C6 /* DWSignMessageViewController.m */, - FB31C24F223BD3F500BD0868 /* DWSignPayloadViewController.h */, - FB31C246223BD3F200BD0868 /* DWSignPayloadViewController.m */, - ); - path = Signing; - sourceTree = ""; - }; - FB3FF0B0222641210059A9A5 /* Masternode Keys */ = { + FB1C3DC1236AD2B1004C2B05 /* Masternode Control */ = { isa = PBXGroup; children = ( - FB3E9F622365D55700C09C5C /* Signing */, - FB3FF0B12226416A0059A9A5 /* Masternode.storyboard */, FB31C23A223BCFAA00BD0868 /* DWMasternodeRootViewController.h */, FB31C23B223BCFAA00BD0868 /* DWMasternodeRootViewController.m */, FB31C251223BD3F600BD0868 /* DWMasternodeDetailViewController.h */, @@ -3291,8 +3288,6 @@ FB31C249223BD3F300BD0868 /* DWProviderUpdateServiceTransactionsViewController.m */, FB31C242223BD3F100BD0868 /* DWReclaimMasternodeViewController.h */, FB31C23D223BD3F000BD0868 /* DWReclaimMasternodeViewController.m */, - FB31C23F223BD3F100BD0868 /* DWRegisterMasternodeViewController.h */, - FB31C247223BD3F200BD0868 /* DWRegisterMasternodeViewController.m */, FB31C241223BD3F100BD0868 /* DWUpdateMasternodeRegistrarViewController.h */, FB31C250223BD3F500BD0868 /* DWUpdateMasternodeRegistrarViewController.m */, FB31C244223BD3F200BD0868 /* DWUpdateMasternodeRevocationViewController.h */, @@ -3303,6 +3298,38 @@ 2AE125F7224113C600379C6F /* DWBaseMasternodeViewController.m */, 2AE125FE2241342900379C6F /* DWResultsMasternodeViewController.h */, 2AE125FF2241342900379C6F /* DWResultsMasternodeViewController.m */, + ); + path = "Masternode Control"; + sourceTree = ""; + }; + FB1C3DC2236AD3C7004C2B05 /* Masternode */ = { + isa = PBXGroup; + children = ( + FB3FF0B12226416A0059A9A5 /* Masternode.storyboard */, + FBCFEDEA236E50410086DE07 /* Masternode Registration */, + FB3FF0B0222641210059A9A5 /* Masternode Keys */, + FB1C3DC1236AD2B1004C2B05 /* Masternode Control */, + FB1C3DC3236AD433004C2B05 /* DWMasternodeFeaturesMenuViewController.h */, + FB1C3DC4236AD433004C2B05 /* DWMasternodeFeaturesMenuViewController.m */, + ); + path = Masternode; + sourceTree = ""; + }; + FB3E9F622365D55700C09C5C /* Signing */ = { + isa = PBXGroup; + children = ( + FB1BF8C522C6F4B7003413C6 /* DWSignMessageViewController.h */, + FB1BF8C622C6F4B7003413C6 /* DWSignMessageViewController.m */, + FB31C24F223BD3F500BD0868 /* DWSignPayloadViewController.h */, + FB31C246223BD3F200BD0868 /* DWSignPayloadViewController.m */, + ); + path = Signing; + sourceTree = ""; + }; + FB3FF0B0222641210059A9A5 /* Masternode Keys */ = { + isa = PBXGroup; + children = ( + FB3E9F622365D55700C09C5C /* Signing */, 2AB66E0823572389007BE825 /* DerivationPathKeys */, 2AB66E0723572379007BE825 /* Overview */, ); @@ -3325,6 +3352,8 @@ FB31C268223BD9F400BD0868 /* DWMasternodeTableViewCell.h */, FB31C267223BD9F400BD0868 /* DWMasternodeTableViewCell.m */, 2AE125FB2241151B00379C6F /* DWMasternodeTableViewCell.xib */, + FB83F3DD236E4C9D0039ED1B /* DWPublicKeyGenerationTableViewCell.h */, + FB83F3DE236E4C9D0039ED1B /* DWPublicKeyGenerationTableViewCell.m */, ); name = Cells; sourceTree = ""; @@ -3367,6 +3396,25 @@ name = "View Extensions"; sourceTree = ""; }; + FBCFEDEA236E50410086DE07 /* Masternode Registration */ = { + isa = PBXGroup; + children = ( + FBCFEDEB236E50AF0086DE07 /* Models */, + FB31C23F223BD3F100BD0868 /* DWRegisterMasternodeViewController.h */, + FB31C247223BD3F200BD0868 /* DWRegisterMasternodeViewController.m */, + ); + path = "Masternode Registration"; + sourceTree = ""; + }; + FBCFEDEB236E50AF0086DE07 /* Models */ = { + isa = PBXGroup; + children = ( + FBCFEDEC236E50CD0086DE07 /* DWMasternodeRegistrationModel.h */, + FBCFEDED236E50CD0086DE07 /* DWMasternodeRegistrationModel.m */, + ); + path = Models; + sourceTree = ""; + }; FBFC2E9E21137A4200D20C57 /* Montserrat */ = { isa = PBXGroup; children = ( @@ -4080,6 +4128,7 @@ 2A9FFE032230FF2B00956D5F /* DWUpholdTransactionObject.m in Sources */, BAC7B6BE1BD9C29900165B84 /* DWPhoneWCSessionManager.m in Sources */, 2A9FFF1A2233E56E00956D5F /* DWUpholdCardTableViewCell.m in Sources */, + FB1C3DC5236AD433004C2B05 /* DWMasternodeFeaturesMenuViewController.m in Sources */, 2AF26F3B230C0E4C007F9228 /* DWBaseSeedViewController.m in Sources */, 2A8B9E4D22FEBF7A00FF8653 /* DWProgressAnimator.mm in Sources */, 2A4431E222D7219E009BAF7F /* DWSeedWordView.m in Sources */, @@ -4161,6 +4210,7 @@ FB31C262223BD62D00BD0868 /* DWProviderUpdateServiceTableViewCell.m in Sources */, 2A7A7BB22347927700451078 /* DWMainMenuViewController.m in Sources */, 2ACCD8F0231ECDE000A96B62 /* DWPinField.m in Sources */, + FB83F3DF236E4C9D0039ED1B /* DWPublicKeyGenerationTableViewCell.m in Sources */, 2AD1CEA222DFC80900C99324 /* DWCenteredScrollView.m in Sources */, 2A44314C22CF8801009BAF7F /* DWBiometricAuthModel.m in Sources */, 2ACCD8ED231ECCF000A96B62 /* DWNumberKeyboardInputViewAudioFeedback.m in Sources */, @@ -4210,6 +4260,7 @@ 2A9FFF1F2233E56E00956D5F /* DWUpholdBuyViewController.m in Sources */, 75D5F3D2191EC270004AB296 /* DWAppDelegate.m in Sources */, 2A2CD70F22F97AC6008C7BC9 /* DWShortcutCollectionViewCell.m in Sources */, + FB1C3DC6236C89CC004C2B05 /* DWKeyValueTableViewCell.m in Sources */, 2A4E531822EA381F00E5168A /* DWSyncView.m in Sources */, 2A6300452328D07500827825 /* DWLockPinInputView.m in Sources */, 2A392565234CD21300316EA6 /* DWTabBarButton.m in Sources */, @@ -4227,6 +4278,7 @@ FB31C259223BD3F600BD0868 /* DWUpdateMasternodeRevocationViewController.m in Sources */, FB31C254223BD3F600BD0868 /* DWMasternodeViewController.m in Sources */, FB8ACEB622E0502200EE5035 /* DWUpholdMainnetConstants.m in Sources */, + FBCFEDEE236E50CD0086DE07 /* DWMasternodeRegistrationModel.m in Sources */, 759FBB36193290F600AB4465 /* DWRootViewController.m in Sources */, 2A1B7D81232151D400BA8C6A /* DWTxDetailViewController.m in Sources */, 2A9FFE822230FF4700956D5F /* DWSwitcherFormCellModel.m in Sources */, diff --git a/DashWallet/DWPublicKeyGenerationTableViewCell.h b/DashWallet/DWPublicKeyGenerationTableViewCell.h new file mode 100644 index 000000000..8b795fde4 --- /dev/null +++ b/DashWallet/DWPublicKeyGenerationTableViewCell.h @@ -0,0 +1,39 @@ +// +// Created by Sam Westrich +// Copyright © 2019 Dash Core Group. All rights reserved. +// +// Licensed under the MIT License (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://opensource.org/licenses/MIT +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// + +#import + +NS_ASSUME_NONNULL_BEGIN + +@protocol DWPublicKeyGenerationTableViewCellDelegate; + +@interface DWPublicKeyGenerationTableViewCell : UITableViewCell +@property (strong, nonatomic) IBOutlet UITextField *publicKeyTextField; +@property (strong, nonatomic) IBOutlet UITextField *indexTextField; + +@property (weak, nonatomic) IBOutlet id generationDelegate; + +@end + +@protocol DWPublicKeyGenerationTableViewCellDelegate + +-(void)publicKeyGenerationTableViewCell:(DWPublicKeyGenerationTableViewCell*)cell didChangeToIndex:(uint32_t)index; +-(void)publicKeyGenerationTableViewCell:(DWPublicKeyGenerationTableViewCell*)cell didInputPublicKeyString:(NSString*)publicKeyString; + +@end + +NS_ASSUME_NONNULL_END diff --git a/DashWallet/DWPublicKeyGenerationTableViewCell.m b/DashWallet/DWPublicKeyGenerationTableViewCell.m new file mode 100644 index 000000000..7edf96ee9 --- /dev/null +++ b/DashWallet/DWPublicKeyGenerationTableViewCell.m @@ -0,0 +1,33 @@ +// +// Created by Sam Westrich +// Copyright © 2019 Dash Core Group. All rights reserved. +// +// Licensed under the MIT License (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://opensource.org/licenses/MIT +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// + +#import "DWPublicKeyGenerationTableViewCell.h" + +@implementation DWPublicKeyGenerationTableViewCell + +- (void)awakeFromNib { + [super awakeFromNib]; + // Initialization code +} + +- (void)setSelected:(BOOL)selected animated:(BOOL)animated { + [super setSelected:selected animated:animated]; + + // Configure the view for the selected state +} + +@end diff --git a/DashWallet/Sources/UI/Menu/Tools/DWToolsMenuViewController.m b/DashWallet/Sources/UI/Menu/Tools/DWToolsMenuViewController.m index 5575bedc2..ea9d768d3 100644 --- a/DashWallet/Sources/UI/Menu/Tools/DWToolsMenuViewController.m +++ b/DashWallet/Sources/UI/Menu/Tools/DWToolsMenuViewController.m @@ -19,8 +19,7 @@ #import "DWFormTableViewController.h" #import "DWImportWalletInfoViewController.h" -#import "DWKeysOverviewViewController.h" -#import "DWMasternodeViewController.h" +#import "DWMasternodeFeaturesMenuViewController.h" #import "DWToolsMenuModel.h" #import "DWUIKit.h" @@ -72,7 +71,7 @@ - (DWToolsMenuModel *)model { } { - DWSelectorFormCellModel *cellModel = [[DWSelectorFormCellModel alloc] initWithTitle:NSLocalizedString(@"Show Masternode Keys", nil)]; + DWSelectorFormCellModel *cellModel = [[DWSelectorFormCellModel alloc] initWithTitle:NSLocalizedString(@"Masternode Features", nil)]; cellModel.accessoryType = DWSelectorFormAccessoryType_DisclosureIndicator; cellModel.didSelectBlock = ^(DWSelectorFormCellModel *_Nonnull cellModel, NSIndexPath *_Nonnull indexPath) { __strong typeof(weakSelf) strongSelf = weakSelf; @@ -80,21 +79,7 @@ - (DWToolsMenuModel *)model { return; } - [strongSelf showMasternodeKeys]; - }; - [items addObject:cellModel]; - } - - { - DWSelectorFormCellModel *cellModel = [[DWSelectorFormCellModel alloc] initWithTitle:NSLocalizedString(@"Masternode Control", nil)]; - cellModel.accessoryType = DWSelectorFormAccessoryType_DisclosureIndicator; - cellModel.didSelectBlock = ^(DWSelectorFormCellModel *_Nonnull cellModel, NSIndexPath *_Nonnull indexPath) { - __strong typeof(weakSelf) strongSelf = weakSelf; - if (!strongSelf) { - return; - } - - [strongSelf showMasternodeControl]; + [strongSelf showMasternodeFeatures]; }; [items addObject:cellModel]; } @@ -143,14 +128,9 @@ - (void)showImportPrivateKey { [self.navigationController pushViewController:controller animated:YES]; } -- (void)showMasternodeKeys { - DWKeysOverviewViewController *keysViewController = [[DWKeysOverviewViewController alloc] init]; - [self.navigationController pushViewController:keysViewController animated:YES]; -} - -- (void)showMasternodeControl { - DWMasternodeViewController *masternodeViewController = [[DWMasternodeViewController alloc] init]; - [self.navigationController pushViewController:masternodeViewController animated:YES]; +- (void)showMasternodeFeatures { + DWMasternodeFeaturesMenuViewController *masternodeFeaturesMenuViewController = [[DWMasternodeFeaturesMenuViewController alloc] init]; + [self.navigationController pushViewController:masternodeFeaturesMenuViewController animated:YES]; } @end diff --git a/DashWallet/Sources/UI/Menu/Tools/Masternode/DWMasternodeFeaturesMenuViewController.h b/DashWallet/Sources/UI/Menu/Tools/Masternode/DWMasternodeFeaturesMenuViewController.h new file mode 100644 index 000000000..569032747 --- /dev/null +++ b/DashWallet/Sources/UI/Menu/Tools/Masternode/DWMasternodeFeaturesMenuViewController.h @@ -0,0 +1,26 @@ +// +// Created by Sam Westrich +// Copyright © 2019 Dash Core Group. All rights reserved. +// +// Licensed under the MIT License (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://opensource.org/licenses/MIT +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// + +#import + +NS_ASSUME_NONNULL_BEGIN + +@interface DWMasternodeFeaturesMenuViewController : UIViewController + +@end + +NS_ASSUME_NONNULL_END diff --git a/DashWallet/Sources/UI/Menu/Tools/Masternode/DWMasternodeFeaturesMenuViewController.m b/DashWallet/Sources/UI/Menu/Tools/Masternode/DWMasternodeFeaturesMenuViewController.m new file mode 100644 index 000000000..153a59276 --- /dev/null +++ b/DashWallet/Sources/UI/Menu/Tools/Masternode/DWMasternodeFeaturesMenuViewController.m @@ -0,0 +1,144 @@ +// +// Created by Sam Westrich +// Copyright © 2019 Dash Core Group. All rights reserved. +// +// Licensed under the MIT License (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://opensource.org/licenses/MIT +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// + +#import "DWMasternodeFeaturesMenuViewController.h" + +#import "DWFormTableViewController.h" +#import "DWImportWalletInfoViewController.h" +#import "DWKeysOverviewViewController.h" +#import "DWMasternodeViewController.h" +#import "DWRegisterMasternodeViewController.h" +#import "DWToolsMenuModel.h" +#import "DWUIKit.h" + +NS_ASSUME_NONNULL_BEGIN + +@interface DWMasternodeFeaturesMenuViewController () + +@property (nonatomic, strong) DWFormTableViewController *formController; + +@end + +@implementation DWMasternodeFeaturesMenuViewController + +- (instancetype)initWithNibName:(nullable NSString *)nibNameOrNil bundle:(nullable NSBundle *)nibBundleOrNil { + if (self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil]) { + self.title = NSLocalizedString(@"Masternode Features", nil); + self.hidesBottomBarWhenPushed = YES; + } + + return self; +} + +- (NSArray *)items { + __weak typeof(self) weakSelf = self; + + NSMutableArray *items = [NSMutableArray array]; + + { + DWSelectorFormCellModel *cellModel = [[DWSelectorFormCellModel alloc] initWithTitle:NSLocalizedString(@"Show Masternode Keys", nil)]; + cellModel.accessoryType = DWSelectorFormAccessoryType_DisclosureIndicator; + cellModel.didSelectBlock = ^(DWSelectorFormCellModel *_Nonnull cellModel, NSIndexPath *_Nonnull indexPath) { + __strong typeof(weakSelf) strongSelf = weakSelf; + if (!strongSelf) { + return; + } + + [strongSelf showMasternodeKeys]; + }; + [items addObject:cellModel]; + } + + { + DWSelectorFormCellModel *cellModel = [[DWSelectorFormCellModel alloc] initWithTitle:NSLocalizedString(@"Register Masternode", nil)]; + cellModel.accessoryType = DWSelectorFormAccessoryType_DisclosureIndicator; + cellModel.didSelectBlock = ^(DWSelectorFormCellModel *_Nonnull cellModel, NSIndexPath *_Nonnull indexPath) { + __strong typeof(weakSelf) strongSelf = weakSelf; + if (!strongSelf) { + return; + } + + [strongSelf showRegisterMasternode]; + }; + [items addObject:cellModel]; + } + + { + DWSelectorFormCellModel *cellModel = [[DWSelectorFormCellModel alloc] initWithTitle:NSLocalizedString(@"Masternode List", nil)]; + cellModel.accessoryType = DWSelectorFormAccessoryType_DisclosureIndicator; + cellModel.didSelectBlock = ^(DWSelectorFormCellModel *_Nonnull cellModel, NSIndexPath *_Nonnull indexPath) { + __strong typeof(weakSelf) strongSelf = weakSelf; + if (!strongSelf) { + return; + } + + [strongSelf showMasternodeControl]; + }; + [items addObject:cellModel]; + } + + return items; +} + +- (NSArray *)sections { + DWFormSectionModel *section = [[DWFormSectionModel alloc] init]; + section.items = [self items]; + + return @[ section ]; +} + +- (void)viewDidLoad { + [super viewDidLoad]; + + self.view.backgroundColor = [UIColor dw_secondaryBackgroundColor]; + + DWFormTableViewController *formController = [[DWFormTableViewController alloc] initWithStyle:UITableViewStylePlain]; + [formController setSections:[self sections] placeholderText:nil]; + + [self addChildViewController:formController]; + formController.view.frame = self.view.bounds; + formController.view.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight; + [self.view addSubview:formController.view]; + [formController didMoveToParentViewController:self]; + self.formController = formController; +} + +- (UIStatusBarStyle)preferredStatusBarStyle { + return UIStatusBarStyleLightContent; +} + +#pragma mark - Private + +- (void)showMasternodeKeys { + DWKeysOverviewViewController *keysViewController = [[DWKeysOverviewViewController alloc] init]; + [self.navigationController pushViewController:keysViewController animated:YES]; +} + +- (void)showRegisterMasternode { + UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"Masternode" bundle:nil]; + DWRegisterMasternodeViewController *registerMasternodeViewController = [storyboard instantiateViewControllerWithIdentifier:@"RegisterMasternodeViewControllerIdentifier"]; + [self.navigationController pushViewController:registerMasternodeViewController animated:YES]; +} + +- (void)showMasternodeControl { + DWMasternodeViewController *masternodeViewController = [[DWMasternodeViewController alloc] init]; + [self.navigationController pushViewController:masternodeViewController animated:YES]; +} + +@end + +NS_ASSUME_NONNULL_END diff --git a/DashWallet/Sources/UI/Menu/Tools/Masternode Keys/DWBaseMasternodeViewController.h b/DashWallet/Sources/UI/Menu/Tools/Masternode/Masternode Control/DWBaseMasternodeViewController.h similarity index 100% rename from DashWallet/Sources/UI/Menu/Tools/Masternode Keys/DWBaseMasternodeViewController.h rename to DashWallet/Sources/UI/Menu/Tools/Masternode/Masternode Control/DWBaseMasternodeViewController.h diff --git a/DashWallet/Sources/UI/Menu/Tools/Masternode Keys/DWBaseMasternodeViewController.m b/DashWallet/Sources/UI/Menu/Tools/Masternode/Masternode Control/DWBaseMasternodeViewController.m similarity index 100% rename from DashWallet/Sources/UI/Menu/Tools/Masternode Keys/DWBaseMasternodeViewController.m rename to DashWallet/Sources/UI/Menu/Tools/Masternode/Masternode Control/DWBaseMasternodeViewController.m diff --git a/DashWallet/Sources/UI/Menu/Tools/Masternode Keys/DWMasternodeDetailViewController.h b/DashWallet/Sources/UI/Menu/Tools/Masternode/Masternode Control/DWMasternodeDetailViewController.h similarity index 100% rename from DashWallet/Sources/UI/Menu/Tools/Masternode Keys/DWMasternodeDetailViewController.h rename to DashWallet/Sources/UI/Menu/Tools/Masternode/Masternode Control/DWMasternodeDetailViewController.h diff --git a/DashWallet/Sources/UI/Menu/Tools/Masternode Keys/DWMasternodeDetailViewController.m b/DashWallet/Sources/UI/Menu/Tools/Masternode/Masternode Control/DWMasternodeDetailViewController.m similarity index 100% rename from DashWallet/Sources/UI/Menu/Tools/Masternode Keys/DWMasternodeDetailViewController.m rename to DashWallet/Sources/UI/Menu/Tools/Masternode/Masternode Control/DWMasternodeDetailViewController.m diff --git a/DashWallet/Sources/UI/Menu/Tools/Masternode Keys/DWMasternodeRootViewController.h b/DashWallet/Sources/UI/Menu/Tools/Masternode/Masternode Control/DWMasternodeRootViewController.h similarity index 100% rename from DashWallet/Sources/UI/Menu/Tools/Masternode Keys/DWMasternodeRootViewController.h rename to DashWallet/Sources/UI/Menu/Tools/Masternode/Masternode Control/DWMasternodeRootViewController.h diff --git a/DashWallet/Sources/UI/Menu/Tools/Masternode Keys/DWMasternodeRootViewController.m b/DashWallet/Sources/UI/Menu/Tools/Masternode/Masternode Control/DWMasternodeRootViewController.m similarity index 100% rename from DashWallet/Sources/UI/Menu/Tools/Masternode Keys/DWMasternodeRootViewController.m rename to DashWallet/Sources/UI/Menu/Tools/Masternode/Masternode Control/DWMasternodeRootViewController.m diff --git a/DashWallet/Sources/UI/Menu/Tools/Masternode Keys/DWMasternodeViewController.h b/DashWallet/Sources/UI/Menu/Tools/Masternode/Masternode Control/DWMasternodeViewController.h similarity index 100% rename from DashWallet/Sources/UI/Menu/Tools/Masternode Keys/DWMasternodeViewController.h rename to DashWallet/Sources/UI/Menu/Tools/Masternode/Masternode Control/DWMasternodeViewController.h diff --git a/DashWallet/Sources/UI/Menu/Tools/Masternode Keys/DWMasternodeViewController.m b/DashWallet/Sources/UI/Menu/Tools/Masternode/Masternode Control/DWMasternodeViewController.m similarity index 100% rename from DashWallet/Sources/UI/Menu/Tools/Masternode Keys/DWMasternodeViewController.m rename to DashWallet/Sources/UI/Menu/Tools/Masternode/Masternode Control/DWMasternodeViewController.m diff --git a/DashWallet/Sources/UI/Menu/Tools/Masternode Keys/DWProviderUpdateRegistrarTransactionsViewController.h b/DashWallet/Sources/UI/Menu/Tools/Masternode/Masternode Control/DWProviderUpdateRegistrarTransactionsViewController.h similarity index 100% rename from DashWallet/Sources/UI/Menu/Tools/Masternode Keys/DWProviderUpdateRegistrarTransactionsViewController.h rename to DashWallet/Sources/UI/Menu/Tools/Masternode/Masternode Control/DWProviderUpdateRegistrarTransactionsViewController.h diff --git a/DashWallet/Sources/UI/Menu/Tools/Masternode Keys/DWProviderUpdateRegistrarTransactionsViewController.m b/DashWallet/Sources/UI/Menu/Tools/Masternode/Masternode Control/DWProviderUpdateRegistrarTransactionsViewController.m similarity index 100% rename from DashWallet/Sources/UI/Menu/Tools/Masternode Keys/DWProviderUpdateRegistrarTransactionsViewController.m rename to DashWallet/Sources/UI/Menu/Tools/Masternode/Masternode Control/DWProviderUpdateRegistrarTransactionsViewController.m diff --git a/DashWallet/Sources/UI/Menu/Tools/Masternode Keys/DWProviderUpdateServiceTransactionsViewController.h b/DashWallet/Sources/UI/Menu/Tools/Masternode/Masternode Control/DWProviderUpdateServiceTransactionsViewController.h similarity index 100% rename from DashWallet/Sources/UI/Menu/Tools/Masternode Keys/DWProviderUpdateServiceTransactionsViewController.h rename to DashWallet/Sources/UI/Menu/Tools/Masternode/Masternode Control/DWProviderUpdateServiceTransactionsViewController.h diff --git a/DashWallet/Sources/UI/Menu/Tools/Masternode Keys/DWProviderUpdateServiceTransactionsViewController.m b/DashWallet/Sources/UI/Menu/Tools/Masternode/Masternode Control/DWProviderUpdateServiceTransactionsViewController.m similarity index 100% rename from DashWallet/Sources/UI/Menu/Tools/Masternode Keys/DWProviderUpdateServiceTransactionsViewController.m rename to DashWallet/Sources/UI/Menu/Tools/Masternode/Masternode Control/DWProviderUpdateServiceTransactionsViewController.m diff --git a/DashWallet/Sources/UI/Menu/Tools/Masternode Keys/DWReclaimMasternodeViewController.h b/DashWallet/Sources/UI/Menu/Tools/Masternode/Masternode Control/DWReclaimMasternodeViewController.h similarity index 100% rename from DashWallet/Sources/UI/Menu/Tools/Masternode Keys/DWReclaimMasternodeViewController.h rename to DashWallet/Sources/UI/Menu/Tools/Masternode/Masternode Control/DWReclaimMasternodeViewController.h diff --git a/DashWallet/Sources/UI/Menu/Tools/Masternode Keys/DWReclaimMasternodeViewController.m b/DashWallet/Sources/UI/Menu/Tools/Masternode/Masternode Control/DWReclaimMasternodeViewController.m similarity index 100% rename from DashWallet/Sources/UI/Menu/Tools/Masternode Keys/DWReclaimMasternodeViewController.m rename to DashWallet/Sources/UI/Menu/Tools/Masternode/Masternode Control/DWReclaimMasternodeViewController.m diff --git a/DashWallet/Sources/UI/Menu/Tools/Masternode Keys/DWResultsMasternodeViewController.h b/DashWallet/Sources/UI/Menu/Tools/Masternode/Masternode Control/DWResultsMasternodeViewController.h similarity index 100% rename from DashWallet/Sources/UI/Menu/Tools/Masternode Keys/DWResultsMasternodeViewController.h rename to DashWallet/Sources/UI/Menu/Tools/Masternode/Masternode Control/DWResultsMasternodeViewController.h diff --git a/DashWallet/Sources/UI/Menu/Tools/Masternode Keys/DWResultsMasternodeViewController.m b/DashWallet/Sources/UI/Menu/Tools/Masternode/Masternode Control/DWResultsMasternodeViewController.m similarity index 100% rename from DashWallet/Sources/UI/Menu/Tools/Masternode Keys/DWResultsMasternodeViewController.m rename to DashWallet/Sources/UI/Menu/Tools/Masternode/Masternode Control/DWResultsMasternodeViewController.m diff --git a/DashWallet/Sources/UI/Menu/Tools/Masternode Keys/DWUpdateMasternodeRegistrarViewController.h b/DashWallet/Sources/UI/Menu/Tools/Masternode/Masternode Control/DWUpdateMasternodeRegistrarViewController.h similarity index 100% rename from DashWallet/Sources/UI/Menu/Tools/Masternode Keys/DWUpdateMasternodeRegistrarViewController.h rename to DashWallet/Sources/UI/Menu/Tools/Masternode/Masternode Control/DWUpdateMasternodeRegistrarViewController.h diff --git a/DashWallet/Sources/UI/Menu/Tools/Masternode Keys/DWUpdateMasternodeRegistrarViewController.m b/DashWallet/Sources/UI/Menu/Tools/Masternode/Masternode Control/DWUpdateMasternodeRegistrarViewController.m similarity index 100% rename from DashWallet/Sources/UI/Menu/Tools/Masternode Keys/DWUpdateMasternodeRegistrarViewController.m rename to DashWallet/Sources/UI/Menu/Tools/Masternode/Masternode Control/DWUpdateMasternodeRegistrarViewController.m diff --git a/DashWallet/Sources/UI/Menu/Tools/Masternode Keys/DWUpdateMasternodeRevocationViewController.h b/DashWallet/Sources/UI/Menu/Tools/Masternode/Masternode Control/DWUpdateMasternodeRevocationViewController.h similarity index 100% rename from DashWallet/Sources/UI/Menu/Tools/Masternode Keys/DWUpdateMasternodeRevocationViewController.h rename to DashWallet/Sources/UI/Menu/Tools/Masternode/Masternode Control/DWUpdateMasternodeRevocationViewController.h diff --git a/DashWallet/Sources/UI/Menu/Tools/Masternode Keys/DWUpdateMasternodeRevocationViewController.m b/DashWallet/Sources/UI/Menu/Tools/Masternode/Masternode Control/DWUpdateMasternodeRevocationViewController.m similarity index 100% rename from DashWallet/Sources/UI/Menu/Tools/Masternode Keys/DWUpdateMasternodeRevocationViewController.m rename to DashWallet/Sources/UI/Menu/Tools/Masternode/Masternode Control/DWUpdateMasternodeRevocationViewController.m diff --git a/DashWallet/Sources/UI/Menu/Tools/Masternode Keys/DWUpdateMasternodeServiceViewController.h b/DashWallet/Sources/UI/Menu/Tools/Masternode/Masternode Control/DWUpdateMasternodeServiceViewController.h similarity index 100% rename from DashWallet/Sources/UI/Menu/Tools/Masternode Keys/DWUpdateMasternodeServiceViewController.h rename to DashWallet/Sources/UI/Menu/Tools/Masternode/Masternode Control/DWUpdateMasternodeServiceViewController.h diff --git a/DashWallet/Sources/UI/Menu/Tools/Masternode Keys/DWUpdateMasternodeServiceViewController.m b/DashWallet/Sources/UI/Menu/Tools/Masternode/Masternode Control/DWUpdateMasternodeServiceViewController.m similarity index 100% rename from DashWallet/Sources/UI/Menu/Tools/Masternode Keys/DWUpdateMasternodeServiceViewController.m rename to DashWallet/Sources/UI/Menu/Tools/Masternode/Masternode Control/DWUpdateMasternodeServiceViewController.m diff --git a/DashWallet/Sources/UI/Menu/Tools/Masternode Keys/DWKeysOverviewViewController.h b/DashWallet/Sources/UI/Menu/Tools/Masternode/Masternode Keys/DWKeysOverviewViewController.h similarity index 100% rename from DashWallet/Sources/UI/Menu/Tools/Masternode Keys/DWKeysOverviewViewController.h rename to DashWallet/Sources/UI/Menu/Tools/Masternode/Masternode Keys/DWKeysOverviewViewController.h diff --git a/DashWallet/Sources/UI/Menu/Tools/Masternode Keys/DWKeysOverviewViewController.m b/DashWallet/Sources/UI/Menu/Tools/Masternode/Masternode Keys/DWKeysOverviewViewController.m similarity index 100% rename from DashWallet/Sources/UI/Menu/Tools/Masternode Keys/DWKeysOverviewViewController.m rename to DashWallet/Sources/UI/Menu/Tools/Masternode/Masternode Keys/DWKeysOverviewViewController.m diff --git a/DashWallet/Sources/UI/Menu/Tools/Masternode Keys/DerivationPathKeys/Cells/DWDerivationPathKeysTableViewCell.h b/DashWallet/Sources/UI/Menu/Tools/Masternode/Masternode Keys/DerivationPathKeys/Cells/DWDerivationPathKeysTableViewCell.h similarity index 100% rename from DashWallet/Sources/UI/Menu/Tools/Masternode Keys/DerivationPathKeys/Cells/DWDerivationPathKeysTableViewCell.h rename to DashWallet/Sources/UI/Menu/Tools/Masternode/Masternode Keys/DerivationPathKeys/Cells/DWDerivationPathKeysTableViewCell.h diff --git a/DashWallet/Sources/UI/Menu/Tools/Masternode Keys/DerivationPathKeys/Cells/DWDerivationPathKeysTableViewCell.m b/DashWallet/Sources/UI/Menu/Tools/Masternode/Masternode Keys/DerivationPathKeys/Cells/DWDerivationPathKeysTableViewCell.m similarity index 100% rename from DashWallet/Sources/UI/Menu/Tools/Masternode Keys/DerivationPathKeys/Cells/DWDerivationPathKeysTableViewCell.m rename to DashWallet/Sources/UI/Menu/Tools/Masternode/Masternode Keys/DerivationPathKeys/Cells/DWDerivationPathKeysTableViewCell.m diff --git a/DashWallet/Sources/UI/Menu/Tools/Masternode Keys/DerivationPathKeys/DWDerivationPathKeysViewController.h b/DashWallet/Sources/UI/Menu/Tools/Masternode/Masternode Keys/DerivationPathKeys/DWDerivationPathKeysViewController.h similarity index 100% rename from DashWallet/Sources/UI/Menu/Tools/Masternode Keys/DerivationPathKeys/DWDerivationPathKeysViewController.h rename to DashWallet/Sources/UI/Menu/Tools/Masternode/Masternode Keys/DerivationPathKeys/DWDerivationPathKeysViewController.h diff --git a/DashWallet/Sources/UI/Menu/Tools/Masternode Keys/DerivationPathKeys/DWDerivationPathKeysViewController.m b/DashWallet/Sources/UI/Menu/Tools/Masternode/Masternode Keys/DerivationPathKeys/DWDerivationPathKeysViewController.m similarity index 100% rename from DashWallet/Sources/UI/Menu/Tools/Masternode Keys/DerivationPathKeys/DWDerivationPathKeysViewController.m rename to DashWallet/Sources/UI/Menu/Tools/Masternode/Masternode Keys/DerivationPathKeys/DWDerivationPathKeysViewController.m diff --git a/DashWallet/Sources/UI/Menu/Tools/Masternode Keys/DerivationPathKeys/Models/DWDerivationPathKeysItem.h b/DashWallet/Sources/UI/Menu/Tools/Masternode/Masternode Keys/DerivationPathKeys/Models/DWDerivationPathKeysItem.h similarity index 100% rename from DashWallet/Sources/UI/Menu/Tools/Masternode Keys/DerivationPathKeys/Models/DWDerivationPathKeysItem.h rename to DashWallet/Sources/UI/Menu/Tools/Masternode/Masternode Keys/DerivationPathKeys/Models/DWDerivationPathKeysItem.h diff --git a/DashWallet/Sources/UI/Menu/Tools/Masternode Keys/DerivationPathKeys/Models/DWDerivationPathKeysModel.h b/DashWallet/Sources/UI/Menu/Tools/Masternode/Masternode Keys/DerivationPathKeys/Models/DWDerivationPathKeysModel.h similarity index 100% rename from DashWallet/Sources/UI/Menu/Tools/Masternode Keys/DerivationPathKeys/Models/DWDerivationPathKeysModel.h rename to DashWallet/Sources/UI/Menu/Tools/Masternode/Masternode Keys/DerivationPathKeys/Models/DWDerivationPathKeysModel.h diff --git a/DashWallet/Sources/UI/Menu/Tools/Masternode Keys/DerivationPathKeys/Models/DWDerivationPathKeysModel.m b/DashWallet/Sources/UI/Menu/Tools/Masternode/Masternode Keys/DerivationPathKeys/Models/DWDerivationPathKeysModel.m similarity index 100% rename from DashWallet/Sources/UI/Menu/Tools/Masternode Keys/DerivationPathKeys/Models/DWDerivationPathKeysModel.m rename to DashWallet/Sources/UI/Menu/Tools/Masternode/Masternode Keys/DerivationPathKeys/Models/DWDerivationPathKeysModel.m diff --git a/DashWallet/Sources/UI/Menu/Tools/Masternode Keys/DerivationPathKeys/Models/DWDerivationPathKeysViewController.h b/DashWallet/Sources/UI/Menu/Tools/Masternode/Masternode Keys/DerivationPathKeys/Models/DWDerivationPathKeysViewController.h similarity index 100% rename from DashWallet/Sources/UI/Menu/Tools/Masternode Keys/DerivationPathKeys/Models/DWDerivationPathKeysViewController.h rename to DashWallet/Sources/UI/Menu/Tools/Masternode/Masternode Keys/DerivationPathKeys/Models/DWDerivationPathKeysViewController.h diff --git a/DashWallet/Sources/UI/Menu/Tools/Masternode Keys/DerivationPathKeys/Models/DWDerivationPathKeysViewController.m b/DashWallet/Sources/UI/Menu/Tools/Masternode/Masternode Keys/DerivationPathKeys/Models/DWDerivationPathKeysViewController.m similarity index 100% rename from DashWallet/Sources/UI/Menu/Tools/Masternode Keys/DerivationPathKeys/Models/DWDerivationPathKeysViewController.m rename to DashWallet/Sources/UI/Menu/Tools/Masternode/Masternode Keys/DerivationPathKeys/Models/DWDerivationPathKeysViewController.m diff --git a/DashWallet/Sources/UI/Menu/Tools/Masternode Keys/Overview/DWKeysOverviewViewController.h b/DashWallet/Sources/UI/Menu/Tools/Masternode/Masternode Keys/Overview/DWKeysOverviewViewController.h similarity index 100% rename from DashWallet/Sources/UI/Menu/Tools/Masternode Keys/Overview/DWKeysOverviewViewController.h rename to DashWallet/Sources/UI/Menu/Tools/Masternode/Masternode Keys/Overview/DWKeysOverviewViewController.h diff --git a/DashWallet/Sources/UI/Menu/Tools/Masternode Keys/Overview/DWKeysOverviewViewController.m b/DashWallet/Sources/UI/Menu/Tools/Masternode/Masternode Keys/Overview/DWKeysOverviewViewController.m similarity index 100% rename from DashWallet/Sources/UI/Menu/Tools/Masternode Keys/Overview/DWKeysOverviewViewController.m rename to DashWallet/Sources/UI/Menu/Tools/Masternode/Masternode Keys/Overview/DWKeysOverviewViewController.m diff --git a/DashWallet/Sources/UI/Menu/Tools/Masternode Keys/Overview/DWWalletKeysOverviewModel.h b/DashWallet/Sources/UI/Menu/Tools/Masternode/Masternode Keys/Overview/DWWalletKeysOverviewModel.h similarity index 100% rename from DashWallet/Sources/UI/Menu/Tools/Masternode Keys/Overview/DWWalletKeysOverviewModel.h rename to DashWallet/Sources/UI/Menu/Tools/Masternode/Masternode Keys/Overview/DWWalletKeysOverviewModel.h diff --git a/DashWallet/Sources/UI/Menu/Tools/Masternode Keys/Overview/DWWalletKeysOverviewModel.m b/DashWallet/Sources/UI/Menu/Tools/Masternode/Masternode Keys/Overview/DWWalletKeysOverviewModel.m similarity index 100% rename from DashWallet/Sources/UI/Menu/Tools/Masternode Keys/Overview/DWWalletKeysOverviewModel.m rename to DashWallet/Sources/UI/Menu/Tools/Masternode/Masternode Keys/Overview/DWWalletKeysOverviewModel.m diff --git a/DashWallet/Sources/UI/Menu/Tools/Masternode Keys/Signing/DWSignMessageViewController.h b/DashWallet/Sources/UI/Menu/Tools/Masternode/Masternode Keys/Signing/DWSignMessageViewController.h similarity index 100% rename from DashWallet/Sources/UI/Menu/Tools/Masternode Keys/Signing/DWSignMessageViewController.h rename to DashWallet/Sources/UI/Menu/Tools/Masternode/Masternode Keys/Signing/DWSignMessageViewController.h diff --git a/DashWallet/Sources/UI/Menu/Tools/Masternode Keys/Signing/DWSignMessageViewController.m b/DashWallet/Sources/UI/Menu/Tools/Masternode/Masternode Keys/Signing/DWSignMessageViewController.m similarity index 100% rename from DashWallet/Sources/UI/Menu/Tools/Masternode Keys/Signing/DWSignMessageViewController.m rename to DashWallet/Sources/UI/Menu/Tools/Masternode/Masternode Keys/Signing/DWSignMessageViewController.m diff --git a/DashWallet/Sources/UI/Menu/Tools/Masternode Keys/Signing/DWSignPayloadViewController.h b/DashWallet/Sources/UI/Menu/Tools/Masternode/Masternode Keys/Signing/DWSignPayloadViewController.h similarity index 100% rename from DashWallet/Sources/UI/Menu/Tools/Masternode Keys/Signing/DWSignPayloadViewController.h rename to DashWallet/Sources/UI/Menu/Tools/Masternode/Masternode Keys/Signing/DWSignPayloadViewController.h diff --git a/DashWallet/Sources/UI/Menu/Tools/Masternode Keys/Signing/DWSignPayloadViewController.m b/DashWallet/Sources/UI/Menu/Tools/Masternode/Masternode Keys/Signing/DWSignPayloadViewController.m similarity index 100% rename from DashWallet/Sources/UI/Menu/Tools/Masternode Keys/Signing/DWSignPayloadViewController.m rename to DashWallet/Sources/UI/Menu/Tools/Masternode/Masternode Keys/Signing/DWSignPayloadViewController.m diff --git a/DashWallet/Sources/UI/Menu/Tools/Masternode Keys/DWRegisterMasternodeViewController.h b/DashWallet/Sources/UI/Menu/Tools/Masternode/Masternode Registration/DWRegisterMasternodeViewController.h similarity index 91% rename from DashWallet/Sources/UI/Menu/Tools/Masternode Keys/DWRegisterMasternodeViewController.h rename to DashWallet/Sources/UI/Menu/Tools/Masternode/Masternode Registration/DWRegisterMasternodeViewController.h index 4a927d0cd..e45ad8870 100644 --- a/DashWallet/Sources/UI/Menu/Tools/Masternode Keys/DWRegisterMasternodeViewController.h +++ b/DashWallet/Sources/UI/Menu/Tools/Masternode/Masternode Registration/DWRegisterMasternodeViewController.h @@ -15,6 +15,8 @@ NS_ASSUME_NONNULL_BEGIN @property (nonatomic, strong) DSChain *chain; +- (instancetype)init NS_UNAVAILABLE; + @end NS_ASSUME_NONNULL_END diff --git a/DashWallet/Sources/UI/Menu/Tools/Masternode Keys/DWRegisterMasternodeViewController.m b/DashWallet/Sources/UI/Menu/Tools/Masternode/Masternode Registration/DWRegisterMasternodeViewController.m similarity index 86% rename from DashWallet/Sources/UI/Menu/Tools/Masternode Keys/DWRegisterMasternodeViewController.m rename to DashWallet/Sources/UI/Menu/Tools/Masternode/Masternode Registration/DWRegisterMasternodeViewController.m index 2dbd7b588..780cd0aed 100644 --- a/DashWallet/Sources/UI/Menu/Tools/Masternode Keys/DWRegisterMasternodeViewController.m +++ b/DashWallet/Sources/UI/Menu/Tools/Masternode/Masternode Registration/DWRegisterMasternodeViewController.m @@ -9,9 +9,15 @@ #import "DWRegisterMasternodeViewController.h" #import "DWEnvironment.h" #import "DWKeyValueTableViewCell.h" +#import "DWMasternodeRegistrationModel.h" +#import "DWPublicKeyGenerationTableViewCell.h" #import "DWSignPayloadViewController.h" +#import "DWUIKit.h" #include +#define INPUT_CELL_HEIGHT 75 +#define PUBLIC_KEY_CELL_HEIGHT 150 + @interface DWRegisterMasternodeViewController () @property (nonatomic, strong) DWKeyValueTableViewCell *collateralTransactionTableViewCell; @@ -19,13 +25,14 @@ @interface DWRegisterMasternodeViewController () @property (nonatomic, strong) DWKeyValueTableViewCell *ipAddressTableViewCell; @property (nonatomic, strong) DWKeyValueTableViewCell *portTableViewCell; @property (nonatomic, strong) DWKeyValueTableViewCell *payToAddressTableViewCell; -@property (nonatomic, strong) DWKeyValueTableViewCell *ownerIndexTableViewCell; -@property (nonatomic, strong) DWKeyValueTableViewCell *operatorIndexTableViewCell; -@property (nonatomic, strong) DWKeyValueTableViewCell *votingIndexTableViewCell; +@property (nonatomic, strong) DWPublicKeyGenerationTableViewCell *ownerIndexTableViewCell; +@property (nonatomic, strong) DWPublicKeyGenerationTableViewCell *operatorIndexTableViewCell; +@property (nonatomic, strong) DWPublicKeyGenerationTableViewCell *votingIndexTableViewCell; @property (nonatomic, strong) DSAccount *account; @property (nonatomic, strong) DSWallet *wallet; @property (nonatomic, strong) DSProviderRegistrationTransaction *providerRegistrationTransaction; @property (nonatomic, strong) DSTransaction *collateralTransaction; +@property (readonly, nonatomic, strong) DWMasternodeRegistrationModel *model; @end @@ -33,6 +40,10 @@ @implementation DWRegisterMasternodeViewController - (void)viewDidLoad { [super viewDidLoad]; + + _model = [[DWMasternodeRegistrationModel alloc] initWithWallet:self.wallet]; + self.view.backgroundColor = [UIColor dw_secondaryBackgroundColor]; + self.payToAddressTableViewCell = [self.tableView dequeueReusableCellWithIdentifier:@"MasternodePayoutAddressCellIdentifier"]; self.collateralTransactionTableViewCell = [self.tableView dequeueReusableCellWithIdentifier:@"MasternodeCollateralTransactionCellIdentifier"]; self.collateralIndexTableViewCell = [self.tableView dequeueReusableCellWithIdentifier:@"MasternodeCollateralIndexCellIdentifier"]; @@ -56,6 +67,32 @@ - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger return 8; } +- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath { + switch (indexPath.section) { + case 0: { + switch (indexPath.row) { + case 0: + return INPUT_CELL_HEIGHT; + case 1: + return INPUT_CELL_HEIGHT; + case 2: + return INPUT_CELL_HEIGHT; + case 3: + return INPUT_CELL_HEIGHT; + case 4: + return PUBLIC_KEY_CELL_HEIGHT; + case 5: + return PUBLIC_KEY_CELL_HEIGHT; + case 6: + return PUBLIC_KEY_CELL_HEIGHT; + case 7: + return INPUT_CELL_HEIGHT; + } + } + } + return 0; +} + - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { switch (indexPath.section) { case 0: { @@ -120,16 +157,16 @@ - (IBAction)registerMasternode:(id)sender { uint32_t votingWalletIndex = UINT32_MAX; uint32_t operatorWalletIndex = UINT32_MAX; - if (self.ownerIndexTableViewCell.valueTextField.text && ![self.ownerIndexTableViewCell.valueTextField.text isEqualToString:@""]) { - ownerWalletIndex = (uint32_t)[self.ownerIndexTableViewCell.valueTextField.text integerValue]; + if (self.ownerIndexTableViewCell.publicKeyTextField.text && ![self.ownerIndexTableViewCell.publicKeyTextField.text isEqualToString:@""]) { + ownerWalletIndex = (uint32_t)[self.ownerIndexTableViewCell.publicKeyTextField.text integerValue]; } - if (self.operatorIndexTableViewCell.valueTextField.text && ![self.operatorIndexTableViewCell.valueTextField.text isEqualToString:@""]) { - operatorWalletIndex = (uint32_t)[self.operatorIndexTableViewCell.valueTextField.text integerValue]; + if (self.operatorIndexTableViewCell.publicKeyTextField.text && ![self.operatorIndexTableViewCell.publicKeyTextField.text isEqualToString:@""]) { + operatorWalletIndex = (uint32_t)[self.operatorIndexTableViewCell.publicKeyTextField.text integerValue]; } - if (self.votingIndexTableViewCell.valueTextField.text && ![self.votingIndexTableViewCell.valueTextField.text isEqualToString:@""]) { - votingWalletIndex = (uint32_t)[self.votingIndexTableViewCell.valueTextField.text integerValue]; + if (self.votingIndexTableViewCell.publicKeyTextField.text && ![self.votingIndexTableViewCell.publicKeyTextField.text isEqualToString:@""]) { + votingWalletIndex = (uint32_t)[self.votingIndexTableViewCell.publicKeyTextField.text integerValue]; } DSLocalMasternode *masternode = [self.chain.chainManager.masternodeManager createNewMasternodeWithIPAddress:ipAddress onPort:port inFundsWallet:self.wallet fundsWalletIndex:UINT32_MAX inOperatorWallet:self.wallet operatorWalletIndex:operatorWalletIndex inOwnerWallet:self.wallet ownerWalletIndex:ownerWalletIndex inVotingWallet:self.wallet votingWalletIndex:votingWalletIndex]; @@ -203,6 +240,10 @@ - (void)raiseIssue:(NSString *)issue message:(NSString *)message { }]; } +- (UIStatusBarStyle)preferredStatusBarStyle { + return UIStatusBarStyleLightContent; +} + - (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender { if ([segue.identifier isEqualToString:@"PayloadSigningSegue"]) { DWSignPayloadViewController *signPayloadSegue = (DWSignPayloadViewController *)segue.destinationViewController; @@ -212,10 +253,6 @@ - (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender { } } -- (IBAction)cancel { - [self.presentingViewController dismissViewControllerAnimated:TRUE completion:nil]; -} - - (void)viewController:(nonnull UIViewController *)controller didReturnSignature:(nonnull NSData *)signature { self.providerRegistrationTransaction.payloadSignature = signature; [self signTransactionInputs:self.providerRegistrationTransaction]; diff --git a/DashWallet/Sources/UI/Menu/Tools/Masternode/Masternode Registration/Models/DWMasternodeRegistrationModel.h b/DashWallet/Sources/UI/Menu/Tools/Masternode/Masternode Registration/Models/DWMasternodeRegistrationModel.h new file mode 100644 index 000000000..5e3dadaf6 --- /dev/null +++ b/DashWallet/Sources/UI/Menu/Tools/Masternode/Masternode Registration/Models/DWMasternodeRegistrationModel.h @@ -0,0 +1,46 @@ +// +// Created by Sam Westrich +// Copyright © 2019 Dash Core Group. All rights reserved. +// +// Licensed under the MIT License (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://opensource.org/licenses/MIT +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// + +#import + +NS_ASSUME_NONNULL_BEGIN + +@interface DWMasternodeRegistrationModel : NSObject + +@property (nonatomic,strong) NSData* ownerPublicKeyData; +@property (nonatomic,strong) NSData* operatorPublicKeyData; +@property (nonatomic,strong) NSData* votingPublicKeyData; + +@property (nonatomic,assign) uint32_t ownerPublicKeyIndex; +@property (nonatomic,assign) uint32_t operatorPublicKeyIndex; +@property (nonatomic,assign) uint32_t votingPublicKeyIndex; + +@property (nonatomic,assign) NSString * ipAddress; +@property (nonatomic,assign) uint16_t port; + +@property (nonatomic,strong) NSData * collateralTransactionHashData; +@property (nonatomic,assign) uint16_t collateralIndex; + +@property (nonatomic,strong) NSString * payoutAddress; + +- (instancetype)initForWallet:(DSWallet*)wallet NS_DESIGNATED_INITIALIZER; + +- (instancetype)init NS_UNAVAILABLE; + +@end + +NS_ASSUME_NONNULL_END diff --git a/DashWallet/Sources/UI/Menu/Tools/Masternode/Masternode Registration/Models/DWMasternodeRegistrationModel.m b/DashWallet/Sources/UI/Menu/Tools/Masternode/Masternode Registration/Models/DWMasternodeRegistrationModel.m new file mode 100644 index 000000000..6d6350c06 --- /dev/null +++ b/DashWallet/Sources/UI/Menu/Tools/Masternode/Masternode Registration/Models/DWMasternodeRegistrationModel.m @@ -0,0 +1,78 @@ +// +// Created by Sam Westrich +// Copyright © 2019 Dash Core Group. All rights reserved. +// +// Licensed under the MIT License (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://opensource.org/licenses/MIT +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// + +#import "DWMasternodeRegistrationModel.h" + +@interface DWMasternodeRegistrationModel() + +@property (nonatomic,strong) DSWallet* wallet; +@property (readonly, nonatomic, strong) DSAuthenticationKeysDerivationPath *ownerDerivationPath; +@property (readonly, nonatomic, strong) DSAuthenticationKeysDerivationPath *votingDerivationPath; +@property (readonly, nonatomic, strong) DSAuthenticationKeysDerivationPath *operatorDerivationPath; + +@end + +@implementation DWMasternodeRegistrationModel + +- (instancetype)initForWallet:(DSWallet*)wallet { + self = [super init]; + if (self) { + _wallet = wallet; + _port = wallet.chain.standardPort; + DSDerivationPathFactory *factory = [DSDerivationPathFactory sharedInstance]; + _ownerDerivationPath = [factory providerOwnerKeysDerivationPathForWallet:wallet]; + _votingDerivationPath = [factory providerVotingKeysDerivationPathForWallet:wallet]; + _operatorDerivationPath = [factory providerOperatorKeysDerivationPathForWallet:wallet]; + } + return self; +} + +-(void)setOperatorPublicKeyIndex:(uint32_t)operatorPublicKeyIndex { + _operatorPublicKeyIndex = operatorPublicKeyIndex; + _operatorPublicKeyData = [self.operatorDerivationPath publicKeyDataAtIndex:operatorPublicKeyIndex]; +} + +-(void)setOwnerPublicKeyIndex:(uint32_t)ownerPublicKeyIndex { + _ownerPublicKeyIndex = ownerPublicKeyIndex; + _ownerPublicKeyData = [self.ownerDerivationPath publicKeyDataAtIndex:ownerPublicKeyIndex]; +} + +-(void)setVotingPublicKeyIndex:(uint32_t)votingPublicKeyIndex { + _votingPublicKeyIndex = votingPublicKeyIndex; + _votingPublicKeyData = [self.votingDerivationPath publicKeyDataAtIndex:votingPublicKeyIndex]; +} + +-(void)setOperatorPublicKeyData:(NSData *)operatorPublicKeyData { + _operatorPublicKeyData = operatorPublicKeyData; + NSString * address = [DSKey addressWithPublicKeyData:operatorPublicKeyData forChain:_wallet.chain]; + _operatorPublicKeyIndex = [self.operatorDerivationPath indexOfKnownAddress:address]; +} + +-(void)setOwnerPublicKeyData:(NSData *)ownerPublicKeyData { + _ownerPublicKeyData = ownerPublicKeyData; + NSString * address = [DSKey addressWithPublicKeyData:ownerPublicKeyData forChain:_wallet.chain]; + _ownerPublicKeyIndex = [self.ownerDerivationPath indexOfKnownAddress:address]; +} + +-(void)setVotingPublicKeyData:(NSData *)votingPublicKeyData { + _votingPublicKeyData = votingPublicKeyData; + NSString * address = [DSKey addressWithPublicKeyData:votingPublicKeyData forChain:_wallet.chain]; + _votingPublicKeyIndex = [self.votingDerivationPath indexOfKnownAddress:address]; +} + + +@end diff --git a/DashWallet/Sources/UI/Menu/Tools/Masternode Keys/Masternode.storyboard b/DashWallet/Sources/UI/Menu/Tools/Masternode/Masternode.storyboard similarity index 94% rename from DashWallet/Sources/UI/Menu/Tools/Masternode Keys/Masternode.storyboard rename to DashWallet/Sources/UI/Menu/Tools/Masternode/Masternode.storyboard index de3ece039..98ecedc3b 100644 --- a/DashWallet/Sources/UI/Menu/Tools/Masternode Keys/Masternode.storyboard +++ b/DashWallet/Sources/UI/Menu/Tools/Masternode/Masternode.storyboard @@ -24,16 +24,8 @@ - - - - - - - - @@ -489,11 +481,11 @@ - + - + @@ -502,7 +494,7 @@ - + @@ -629,9 +621,9 @@ - + - + @@ -737,49 +729,126 @@ - + - + - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - + + + + + + + + + + + + - + - + + + - + - - + - - + @@ -873,40 +942,6 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - @@ -914,14 +949,8 @@ - + - - - - - - @@ -929,31 +958,14 @@ + - - - - - - - - - - - - - - - - - - - + @@ -1385,4 +1397,9 @@ + + + + + diff --git a/DashWallet/ar.lproj/Localizable.strings b/DashWallet/ar.lproj/Localizable.strings index 6df58b477..d50bf0e7b 100644 --- a/DashWallet/ar.lproj/Localizable.strings +++ b/DashWallet/ar.lproj/Localizable.strings @@ -471,14 +471,26 @@ "Masternode control" = "Masternode control"; /* No comment provided by engineer. */ -"Masternode Control" = "Masternode Control"; +"Masternode Features" = "Masternode Features"; /* No comment provided by engineer. */ "Masternode holding address" = "Masternode holding address"; +/* No comment provided by engineer. */ +"Masternode List" = "Masternode List"; + +/* No comment provided by engineer. */ +"Masternode Registration" = "Masternode Registration"; + /* No comment provided by engineer. */ "Masternode Registration Transaction" = "Masternode Registration Transaction"; +/* No comment provided by engineer. */ +"Masternode Revoked" = "Masternode Revoked"; + +/* No comment provided by engineer. */ +"Masternode Update" = "Masternode Update"; + /* No comment provided by engineer. */ "Masternode Update Registrar Transaction" = "Masternode Update Registrar Transaction"; @@ -731,6 +743,9 @@ /* No comment provided by engineer. */ "Recovery phrase must have %d words" = "Recovery phrase must have %d words"; +/* No comment provided by engineer. */ +"Register Masternode" = "Register Masternode"; + /* No comment provided by engineer. */ "Registered from" = "Registered from"; diff --git a/DashWallet/bg.lproj/Localizable.strings b/DashWallet/bg.lproj/Localizable.strings index 8b700ca7f..1295ffdba 100644 --- a/DashWallet/bg.lproj/Localizable.strings +++ b/DashWallet/bg.lproj/Localizable.strings @@ -471,14 +471,26 @@ "Masternode control" = "Masternode control"; /* No comment provided by engineer. */ -"Masternode Control" = "Masternode Control"; +"Masternode Features" = "Masternode Features"; /* No comment provided by engineer. */ "Masternode holding address" = "Masternode holding address"; +/* No comment provided by engineer. */ +"Masternode List" = "Masternode List"; + +/* No comment provided by engineer. */ +"Masternode Registration" = "Masternode Registration"; + /* No comment provided by engineer. */ "Masternode Registration Transaction" = "Masternode регистрираща транзакция"; +/* No comment provided by engineer. */ +"Masternode Revoked" = "Masternode Revoked"; + +/* No comment provided by engineer. */ +"Masternode Update" = "Masternode Update"; + /* No comment provided by engineer. */ "Masternode Update Registrar Transaction" = "Masternode актуализира регистрационната транзакция "; @@ -731,6 +743,9 @@ /* No comment provided by engineer. */ "Recovery phrase must have %d words" = "Recovery phrase must have %d words"; +/* No comment provided by engineer. */ +"Register Masternode" = "Register Masternode"; + /* No comment provided by engineer. */ "Registered from" = "Registered from"; diff --git a/DashWallet/de.lproj/Localizable.strings b/DashWallet/de.lproj/Localizable.strings index 4b47a0b15..6f5798efb 100644 --- a/DashWallet/de.lproj/Localizable.strings +++ b/DashWallet/de.lproj/Localizable.strings @@ -471,14 +471,26 @@ "Masternode control" = "Masternode control"; /* No comment provided by engineer. */ -"Masternode Control" = "Masternode Control"; +"Masternode Features" = "Masternode Features"; /* No comment provided by engineer. */ "Masternode holding address" = "Masternode holding address"; +/* No comment provided by engineer. */ +"Masternode List" = "Masternode List"; + +/* No comment provided by engineer. */ +"Masternode Registration" = "Masternode Registration"; + /* No comment provided by engineer. */ "Masternode Registration Transaction" = "Masternode Registrierungs-Transaktion"; +/* No comment provided by engineer. */ +"Masternode Revoked" = "Masternode Revoked"; + +/* No comment provided by engineer. */ +"Masternode Update" = "Masternode Update"; + /* No comment provided by engineer. */ "Masternode Update Registrar Transaction" = "Masternode Registrar-Aktualisierungs-Transaktion"; @@ -731,6 +743,9 @@ /* No comment provided by engineer. */ "Recovery phrase must have %d words" = "Recovery phrase must have %d words"; +/* No comment provided by engineer. */ +"Register Masternode" = "Register Masternode"; + /* No comment provided by engineer. */ "Registered from" = "Registered from"; diff --git a/DashWallet/el.lproj/Localizable.strings b/DashWallet/el.lproj/Localizable.strings index e9fc1bd31..e5b9e277f 100644 --- a/DashWallet/el.lproj/Localizable.strings +++ b/DashWallet/el.lproj/Localizable.strings @@ -471,14 +471,26 @@ "Masternode control" = "Masternode control"; /* No comment provided by engineer. */ -"Masternode Control" = "Masternode Control"; +"Masternode Features" = "Masternode Features"; /* No comment provided by engineer. */ "Masternode holding address" = "Masternode holding address"; +/* No comment provided by engineer. */ +"Masternode List" = "Masternode List"; + +/* No comment provided by engineer. */ +"Masternode Registration" = "Masternode Registration"; + /* No comment provided by engineer. */ "Masternode Registration Transaction" = "Masternode Registration Transaction"; +/* No comment provided by engineer. */ +"Masternode Revoked" = "Masternode Revoked"; + +/* No comment provided by engineer. */ +"Masternode Update" = "Masternode Update"; + /* No comment provided by engineer. */ "Masternode Update Registrar Transaction" = "Masternode Update Registrar Transaction"; @@ -731,6 +743,9 @@ /* No comment provided by engineer. */ "Recovery phrase must have %d words" = "Recovery phrase must have %d words"; +/* No comment provided by engineer. */ +"Register Masternode" = "Register Masternode"; + /* No comment provided by engineer. */ "Registered from" = "Registered from"; diff --git a/DashWallet/en.lproj/Localizable.strings b/DashWallet/en.lproj/Localizable.strings index fffc56004..fa0607068 100644 --- a/DashWallet/en.lproj/Localizable.strings +++ b/DashWallet/en.lproj/Localizable.strings @@ -471,14 +471,26 @@ "Masternode control" = "Masternode control"; /* No comment provided by engineer. */ -"Masternode Control" = "Masternode Control"; +"Masternode Features" = "Masternode Features"; /* No comment provided by engineer. */ "Masternode holding address" = "Masternode holding address"; +/* No comment provided by engineer. */ +"Masternode List" = "Masternode List"; + +/* No comment provided by engineer. */ +"Masternode Registration" = "Masternode Registration"; + /* No comment provided by engineer. */ "Masternode Registration Transaction" = "Masternode Registration Transaction"; +/* No comment provided by engineer. */ +"Masternode Revoked" = "Masternode Revoked"; + +/* No comment provided by engineer. */ +"Masternode Update" = "Masternode Update"; + /* No comment provided by engineer. */ "Masternode Update Registrar Transaction" = "Masternode Update Registrar Transaction"; @@ -731,6 +743,9 @@ /* No comment provided by engineer. */ "Recovery phrase must have %d words" = "Recovery phrase must have %d words"; +/* No comment provided by engineer. */ +"Register Masternode" = "Register Masternode"; + /* No comment provided by engineer. */ "Registered from" = "Registered from"; diff --git a/DashWallet/es.lproj/Localizable.strings b/DashWallet/es.lproj/Localizable.strings index 641708c2b..1e75bc7eb 100644 --- a/DashWallet/es.lproj/Localizable.strings +++ b/DashWallet/es.lproj/Localizable.strings @@ -471,14 +471,26 @@ "Masternode control" = "Masternode control"; /* No comment provided by engineer. */ -"Masternode Control" = "Masternode Control"; +"Masternode Features" = "Masternode Features"; /* No comment provided by engineer. */ "Masternode holding address" = "Masternode holding address"; +/* No comment provided by engineer. */ +"Masternode List" = "Masternode List"; + +/* No comment provided by engineer. */ +"Masternode Registration" = "Masternode Registration"; + /* No comment provided by engineer. */ "Masternode Registration Transaction" = "Transacción de registro de Masternode"; +/* No comment provided by engineer. */ +"Masternode Revoked" = "Masternode Revoked"; + +/* No comment provided by engineer. */ +"Masternode Update" = "Masternode Update"; + /* No comment provided by engineer. */ "Masternode Update Registrar Transaction" = "Transacción del servicio de registro de Masternode"; @@ -731,6 +743,9 @@ /* No comment provided by engineer. */ "Recovery phrase must have %d words" = "Recovery phrase must have %d words"; +/* No comment provided by engineer. */ +"Register Masternode" = "Register Masternode"; + /* No comment provided by engineer. */ "Registered from" = "Registered from"; diff --git a/DashWallet/fr.lproj/Localizable.strings b/DashWallet/fr.lproj/Localizable.strings index 49695443e..da813259e 100644 --- a/DashWallet/fr.lproj/Localizable.strings +++ b/DashWallet/fr.lproj/Localizable.strings @@ -471,14 +471,26 @@ "Masternode control" = "Masternode control"; /* No comment provided by engineer. */ -"Masternode Control" = "Masternode Control"; +"Masternode Features" = "Masternode Features"; /* No comment provided by engineer. */ "Masternode holding address" = "Masternode holding address"; +/* No comment provided by engineer. */ +"Masternode List" = "Masternode List"; + +/* No comment provided by engineer. */ +"Masternode Registration" = "Masternode Registration"; + /* No comment provided by engineer. */ "Masternode Registration Transaction" = "Transaction d'enregistrement de masternode"; +/* No comment provided by engineer. */ +"Masternode Revoked" = "Masternode Revoked"; + +/* No comment provided by engineer. */ +"Masternode Update" = "Masternode Update"; + /* No comment provided by engineer. */ "Masternode Update Registrar Transaction" = "Transaction de mise à jour du registraire de masternode"; @@ -731,6 +743,9 @@ /* No comment provided by engineer. */ "Recovery phrase must have %d words" = "Recovery phrase must have %d words"; +/* No comment provided by engineer. */ +"Register Masternode" = "Register Masternode"; + /* No comment provided by engineer. */ "Registered from" = "Registered from"; diff --git a/DashWallet/id.lproj/Localizable.strings b/DashWallet/id.lproj/Localizable.strings index f6d35978d..31bdbc37e 100644 --- a/DashWallet/id.lproj/Localizable.strings +++ b/DashWallet/id.lproj/Localizable.strings @@ -471,14 +471,26 @@ "Masternode control" = "Masternode control"; /* No comment provided by engineer. */ -"Masternode Control" = "Masternode Control"; +"Masternode Features" = "Masternode Features"; /* No comment provided by engineer. */ "Masternode holding address" = "Masternode holding address"; +/* No comment provided by engineer. */ +"Masternode List" = "Masternode List"; + +/* No comment provided by engineer. */ +"Masternode Registration" = "Masternode Registration"; + /* No comment provided by engineer. */ "Masternode Registration Transaction" = "Transaksi Pendaftaran Masternode"; +/* No comment provided by engineer. */ +"Masternode Revoked" = "Masternode Revoked"; + +/* No comment provided by engineer. */ +"Masternode Update" = "Masternode Update"; + /* No comment provided by engineer. */ "Masternode Update Registrar Transaction" = "Perbarui Registrasi Pendaftar Masternode"; @@ -731,6 +743,9 @@ /* No comment provided by engineer. */ "Recovery phrase must have %d words" = "Recovery phrase must have %d words"; +/* No comment provided by engineer. */ +"Register Masternode" = "Register Masternode"; + /* No comment provided by engineer. */ "Registered from" = "Registered from"; diff --git a/DashWallet/it.lproj/Localizable.strings b/DashWallet/it.lproj/Localizable.strings index 9133feb25..49172cddc 100644 --- a/DashWallet/it.lproj/Localizable.strings +++ b/DashWallet/it.lproj/Localizable.strings @@ -471,14 +471,26 @@ "Masternode control" = "Masternode control"; /* No comment provided by engineer. */ -"Masternode Control" = "Masternode Control"; +"Masternode Features" = "Masternode Features"; /* No comment provided by engineer. */ "Masternode holding address" = "Masternode holding address"; +/* No comment provided by engineer. */ +"Masternode List" = "Masternode List"; + +/* No comment provided by engineer. */ +"Masternode Registration" = "Masternode Registration"; + /* No comment provided by engineer. */ "Masternode Registration Transaction" = "Transazione di registrazione Masternode"; +/* No comment provided by engineer. */ +"Masternode Revoked" = "Masternode Revoked"; + +/* No comment provided by engineer. */ +"Masternode Update" = "Masternode Update"; + /* No comment provided by engineer. */ "Masternode Update Registrar Transaction" = "Transazione del registro di aggiornamento Masternode"; @@ -731,6 +743,9 @@ /* No comment provided by engineer. */ "Recovery phrase must have %d words" = "Recovery phrase must have %d words"; +/* No comment provided by engineer. */ +"Register Masternode" = "Register Masternode"; + /* No comment provided by engineer. */ "Registered from" = "Registered from"; diff --git a/DashWallet/ja.lproj/Localizable.strings b/DashWallet/ja.lproj/Localizable.strings index 0d8748b72..ce306a0be 100644 --- a/DashWallet/ja.lproj/Localizable.strings +++ b/DashWallet/ja.lproj/Localizable.strings @@ -471,14 +471,26 @@ "Masternode control" = "Masternode control"; /* No comment provided by engineer. */ -"Masternode Control" = "Masternode Control"; +"Masternode Features" = "Masternode Features"; /* No comment provided by engineer. */ "Masternode holding address" = "Masternode holding address"; +/* No comment provided by engineer. */ +"Masternode List" = "Masternode List"; + +/* No comment provided by engineer. */ +"Masternode Registration" = "Masternode Registration"; + /* No comment provided by engineer. */ "Masternode Registration Transaction" = "マスターノードの取引の登録"; +/* No comment provided by engineer. */ +"Masternode Revoked" = "Masternode Revoked"; + +/* No comment provided by engineer. */ +"Masternode Update" = "Masternode Update"; + /* No comment provided by engineer. */ "Masternode Update Registrar Transaction" = "マスターノードの取引の登録のアップデート"; @@ -731,6 +743,9 @@ /* No comment provided by engineer. */ "Recovery phrase must have %d words" = "Recovery phrase must have %d words"; +/* No comment provided by engineer. */ +"Register Masternode" = "Register Masternode"; + /* No comment provided by engineer. */ "Registered from" = "Registered from"; diff --git a/DashWallet/ko.lproj/Localizable.strings b/DashWallet/ko.lproj/Localizable.strings index ffeb1c3ff..656f636c7 100644 --- a/DashWallet/ko.lproj/Localizable.strings +++ b/DashWallet/ko.lproj/Localizable.strings @@ -471,14 +471,26 @@ "Masternode control" = "Masternode control"; /* No comment provided by engineer. */ -"Masternode Control" = "Masternode Control"; +"Masternode Features" = "Masternode Features"; /* No comment provided by engineer. */ "Masternode holding address" = "Masternode holding address"; +/* No comment provided by engineer. */ +"Masternode List" = "Masternode List"; + +/* No comment provided by engineer. */ +"Masternode Registration" = "Masternode Registration"; + /* No comment provided by engineer. */ "Masternode Registration Transaction" = "마스터노드 등록 거래"; +/* No comment provided by engineer. */ +"Masternode Revoked" = "Masternode Revoked"; + +/* No comment provided by engineer. */ +"Masternode Update" = "Masternode Update"; + /* No comment provided by engineer. */ "Masternode Update Registrar Transaction" = "마스터노드 업데이트 담당 거래"; @@ -731,6 +743,9 @@ /* No comment provided by engineer. */ "Recovery phrase must have %d words" = "Recovery phrase must have %d words"; +/* No comment provided by engineer. */ +"Register Masternode" = "Register Masternode"; + /* No comment provided by engineer. */ "Registered from" = "Registered from"; diff --git a/DashWallet/nb.lproj/Localizable.strings b/DashWallet/nb.lproj/Localizable.strings index 75b36d3f0..1b37eabd3 100644 --- a/DashWallet/nb.lproj/Localizable.strings +++ b/DashWallet/nb.lproj/Localizable.strings @@ -471,14 +471,26 @@ "Masternode control" = "Masternode control"; /* No comment provided by engineer. */ -"Masternode Control" = "Masternode Control"; +"Masternode Features" = "Masternode Features"; /* No comment provided by engineer. */ "Masternode holding address" = "Masternode holding address"; +/* No comment provided by engineer. */ +"Masternode List" = "Masternode List"; + +/* No comment provided by engineer. */ +"Masternode Registration" = "Masternode Registration"; + /* No comment provided by engineer. */ "Masternode Registration Transaction" = "Masternode Registration Transaction"; +/* No comment provided by engineer. */ +"Masternode Revoked" = "Masternode Revoked"; + +/* No comment provided by engineer. */ +"Masternode Update" = "Masternode Update"; + /* No comment provided by engineer. */ "Masternode Update Registrar Transaction" = "Masternode Update Registrar Transaction"; @@ -731,6 +743,9 @@ /* No comment provided by engineer. */ "Recovery phrase must have %d words" = "Recovery phrase must have %d words"; +/* No comment provided by engineer. */ +"Register Masternode" = "Register Masternode"; + /* No comment provided by engineer. */ "Registered from" = "Registered from"; diff --git a/DashWallet/nl.lproj/Localizable.strings b/DashWallet/nl.lproj/Localizable.strings index 28161aa64..ae98e34a9 100644 --- a/DashWallet/nl.lproj/Localizable.strings +++ b/DashWallet/nl.lproj/Localizable.strings @@ -471,14 +471,26 @@ "Masternode control" = "Masternode control"; /* No comment provided by engineer. */ -"Masternode Control" = "Masternode Control"; +"Masternode Features" = "Masternode Features"; /* No comment provided by engineer. */ "Masternode holding address" = "Masternode holding address"; +/* No comment provided by engineer. */ +"Masternode List" = "Masternode List"; + +/* No comment provided by engineer. */ +"Masternode Registration" = "Masternode Registration"; + /* No comment provided by engineer. */ "Masternode Registration Transaction" = "Masternode registratie transactie"; +/* No comment provided by engineer. */ +"Masternode Revoked" = "Masternode Revoked"; + +/* No comment provided by engineer. */ +"Masternode Update" = "Masternode Update"; + /* No comment provided by engineer. */ "Masternode Update Registrar Transaction" = "Masternode registratie update transactie"; @@ -731,6 +743,9 @@ /* No comment provided by engineer. */ "Recovery phrase must have %d words" = "Recovery phrase must have %d words"; +/* No comment provided by engineer. */ +"Register Masternode" = "Register Masternode"; + /* No comment provided by engineer. */ "Registered from" = "Registered from"; diff --git a/DashWallet/pl.lproj/Localizable.strings b/DashWallet/pl.lproj/Localizable.strings index d1ab82dbc..3aa80666a 100644 --- a/DashWallet/pl.lproj/Localizable.strings +++ b/DashWallet/pl.lproj/Localizable.strings @@ -471,14 +471,26 @@ "Masternode control" = "Masternode control"; /* No comment provided by engineer. */ -"Masternode Control" = "Masternode Control"; +"Masternode Features" = "Masternode Features"; /* No comment provided by engineer. */ "Masternode holding address" = "Masternode holding address"; +/* No comment provided by engineer. */ +"Masternode List" = "Masternode List"; + +/* No comment provided by engineer. */ +"Masternode Registration" = "Masternode Registration"; + /* No comment provided by engineer. */ "Masternode Registration Transaction" = "Transakcja Rejestrująca Masternoda"; +/* No comment provided by engineer. */ +"Masternode Revoked" = "Masternode Revoked"; + +/* No comment provided by engineer. */ +"Masternode Update" = "Masternode Update"; + /* No comment provided by engineer. */ "Masternode Update Registrar Transaction" = "Transakcja Aktualizacji Rejestru Masternoda"; @@ -731,6 +743,9 @@ /* No comment provided by engineer. */ "Recovery phrase must have %d words" = "Recovery phrase must have %d words"; +/* No comment provided by engineer. */ +"Register Masternode" = "Register Masternode"; + /* No comment provided by engineer. */ "Registered from" = "Registered from"; diff --git a/DashWallet/pt.lproj/Localizable.strings b/DashWallet/pt.lproj/Localizable.strings index a6dd54e34..763e6679e 100644 --- a/DashWallet/pt.lproj/Localizable.strings +++ b/DashWallet/pt.lproj/Localizable.strings @@ -471,14 +471,26 @@ "Masternode control" = "Masternode control"; /* No comment provided by engineer. */ -"Masternode Control" = "Masternode Control"; +"Masternode Features" = "Masternode Features"; /* No comment provided by engineer. */ "Masternode holding address" = "Masternode holding address"; +/* No comment provided by engineer. */ +"Masternode List" = "Masternode List"; + +/* No comment provided by engineer. */ +"Masternode Registration" = "Masternode Registration"; + /* No comment provided by engineer. */ "Masternode Registration Transaction" = "Transação para Registrar Masternode"; +/* No comment provided by engineer. */ +"Masternode Revoked" = "Masternode Revoked"; + +/* No comment provided by engineer. */ +"Masternode Update" = "Masternode Update"; + /* No comment provided by engineer. */ "Masternode Update Registrar Transaction" = "Atualizar Transação para Registrar Masternode"; @@ -731,6 +743,9 @@ /* No comment provided by engineer. */ "Recovery phrase must have %d words" = "Recovery phrase must have %d words"; +/* No comment provided by engineer. */ +"Register Masternode" = "Register Masternode"; + /* No comment provided by engineer. */ "Registered from" = "Registered from"; diff --git a/DashWallet/ru.lproj/Localizable.strings b/DashWallet/ru.lproj/Localizable.strings index dd222fd55..9958c3511 100644 --- a/DashWallet/ru.lproj/Localizable.strings +++ b/DashWallet/ru.lproj/Localizable.strings @@ -471,14 +471,26 @@ "Masternode control" = "Masternode control"; /* No comment provided by engineer. */ -"Masternode Control" = "Masternode Control"; +"Masternode Features" = "Masternode Features"; /* No comment provided by engineer. */ "Masternode holding address" = "Masternode holding address"; +/* No comment provided by engineer. */ +"Masternode List" = "Masternode List"; + +/* No comment provided by engineer. */ +"Masternode Registration" = "Masternode Registration"; + /* No comment provided by engineer. */ "Masternode Registration Transaction" = "Транзакция регистрации мастерноды"; +/* No comment provided by engineer. */ +"Masternode Revoked" = "Masternode Revoked"; + +/* No comment provided by engineer. */ +"Masternode Update" = "Masternode Update"; + /* No comment provided by engineer. */ "Masternode Update Registrar Transaction" = "Транзакция обновления регистрации мастерноды"; @@ -731,6 +743,9 @@ /* No comment provided by engineer. */ "Recovery phrase must have %d words" = "Recovery phrase must have %d words"; +/* No comment provided by engineer. */ +"Register Masternode" = "Register Masternode"; + /* No comment provided by engineer. */ "Registered from" = "Registered from"; diff --git a/DashWallet/sk.lproj/Localizable.strings b/DashWallet/sk.lproj/Localizable.strings index 032d8e9e0..46f89d33c 100644 --- a/DashWallet/sk.lproj/Localizable.strings +++ b/DashWallet/sk.lproj/Localizable.strings @@ -471,14 +471,26 @@ "Masternode control" = "Masternode control"; /* No comment provided by engineer. */ -"Masternode Control" = "Masternode Control"; +"Masternode Features" = "Masternode Features"; /* No comment provided by engineer. */ "Masternode holding address" = "Masternode holding address"; +/* No comment provided by engineer. */ +"Masternode List" = "Masternode List"; + +/* No comment provided by engineer. */ +"Masternode Registration" = "Masternode Registration"; + /* No comment provided by engineer. */ "Masternode Registration Transaction" = "Masternode Registration Transaction"; +/* No comment provided by engineer. */ +"Masternode Revoked" = "Masternode Revoked"; + +/* No comment provided by engineer. */ +"Masternode Update" = "Masternode Update"; + /* No comment provided by engineer. */ "Masternode Update Registrar Transaction" = "Masternode Update Registrar Transaction"; @@ -731,6 +743,9 @@ /* No comment provided by engineer. */ "Recovery phrase must have %d words" = "Recovery phrase must have %d words"; +/* No comment provided by engineer. */ +"Register Masternode" = "Register Masternode"; + /* No comment provided by engineer. */ "Registered from" = "Registered from"; diff --git a/DashWallet/sq.lproj/Localizable.strings b/DashWallet/sq.lproj/Localizable.strings index 22c811de2..e8992916a 100644 --- a/DashWallet/sq.lproj/Localizable.strings +++ b/DashWallet/sq.lproj/Localizable.strings @@ -471,14 +471,26 @@ "Masternode control" = "Masternode control"; /* No comment provided by engineer. */ -"Masternode Control" = "Masternode Control"; +"Masternode Features" = "Masternode Features"; /* No comment provided by engineer. */ "Masternode holding address" = "Masternode holding address"; +/* No comment provided by engineer. */ +"Masternode List" = "Masternode List"; + +/* No comment provided by engineer. */ +"Masternode Registration" = "Masternode Registration"; + /* No comment provided by engineer. */ "Masternode Registration Transaction" = "Masternode Registration Transaction"; +/* No comment provided by engineer. */ +"Masternode Revoked" = "Masternode Revoked"; + +/* No comment provided by engineer. */ +"Masternode Update" = "Masternode Update"; + /* No comment provided by engineer. */ "Masternode Update Registrar Transaction" = "Masternode Update Registrar Transaction"; @@ -731,6 +743,9 @@ /* No comment provided by engineer. */ "Recovery phrase must have %d words" = "Recovery phrase must have %d words"; +/* No comment provided by engineer. */ +"Register Masternode" = "Register Masternode"; + /* No comment provided by engineer. */ "Registered from" = "Registered from"; diff --git a/DashWallet/sv.lproj/Localizable.strings b/DashWallet/sv.lproj/Localizable.strings index 4d37d906b..8135999d6 100644 --- a/DashWallet/sv.lproj/Localizable.strings +++ b/DashWallet/sv.lproj/Localizable.strings @@ -471,14 +471,26 @@ "Masternode control" = "Masternode control"; /* No comment provided by engineer. */ -"Masternode Control" = "Masternode Control"; +"Masternode Features" = "Masternode Features"; /* No comment provided by engineer. */ "Masternode holding address" = "Masternode holding address"; +/* No comment provided by engineer. */ +"Masternode List" = "Masternode List"; + +/* No comment provided by engineer. */ +"Masternode Registration" = "Masternode Registration"; + /* No comment provided by engineer. */ "Masternode Registration Transaction" = "Masternode Registration Transaction"; +/* No comment provided by engineer. */ +"Masternode Revoked" = "Masternode Revoked"; + +/* No comment provided by engineer. */ +"Masternode Update" = "Masternode Update"; + /* No comment provided by engineer. */ "Masternode Update Registrar Transaction" = "Masternode Update Registrar Transaction"; @@ -731,6 +743,9 @@ /* No comment provided by engineer. */ "Recovery phrase must have %d words" = "Recovery phrase must have %d words"; +/* No comment provided by engineer. */ +"Register Masternode" = "Register Masternode"; + /* No comment provided by engineer. */ "Registered from" = "Registered from"; diff --git a/DashWallet/th.lproj/Localizable.strings b/DashWallet/th.lproj/Localizable.strings index bd5a2a6c1..29ec0771d 100644 --- a/DashWallet/th.lproj/Localizable.strings +++ b/DashWallet/th.lproj/Localizable.strings @@ -471,14 +471,26 @@ "Masternode control" = "Masternode control"; /* No comment provided by engineer. */ -"Masternode Control" = "Masternode Control"; +"Masternode Features" = "Masternode Features"; /* No comment provided by engineer. */ "Masternode holding address" = "Masternode holding address"; +/* No comment provided by engineer. */ +"Masternode List" = "Masternode List"; + +/* No comment provided by engineer. */ +"Masternode Registration" = "Masternode Registration"; + /* No comment provided by engineer. */ "Masternode Registration Transaction" = "Masternode การลงทะเบียนธุรกรรม"; +/* No comment provided by engineer. */ +"Masternode Revoked" = "Masternode Revoked"; + +/* No comment provided by engineer. */ +"Masternode Update" = "Masternode Update"; + /* No comment provided by engineer. */ "Masternode Update Registrar Transaction" = "Masternode อัพเดตลงทะเบีนธุรกรรม"; @@ -731,6 +743,9 @@ /* No comment provided by engineer. */ "Recovery phrase must have %d words" = "Recovery phrase must have %d words"; +/* No comment provided by engineer. */ +"Register Masternode" = "Register Masternode"; + /* No comment provided by engineer. */ "Registered from" = "Registered from"; diff --git a/DashWallet/tr.lproj/Localizable.strings b/DashWallet/tr.lproj/Localizable.strings index 539535dc8..495197227 100644 --- a/DashWallet/tr.lproj/Localizable.strings +++ b/DashWallet/tr.lproj/Localizable.strings @@ -471,14 +471,26 @@ "Masternode control" = "Masternode control"; /* No comment provided by engineer. */ -"Masternode Control" = "Masternode Control"; +"Masternode Features" = "Masternode Features"; /* No comment provided by engineer. */ "Masternode holding address" = "Masternode holding address"; +/* No comment provided by engineer. */ +"Masternode List" = "Masternode List"; + +/* No comment provided by engineer. */ +"Masternode Registration" = "Masternode Registration"; + /* No comment provided by engineer. */ "Masternode Registration Transaction" = "Anadüğüm Kayıt İşlemi"; +/* No comment provided by engineer. */ +"Masternode Revoked" = "Masternode Revoked"; + +/* No comment provided by engineer. */ +"Masternode Update" = "Masternode Update"; + /* No comment provided by engineer. */ "Masternode Update Registrar Transaction" = "Anadüğüm Kayıt Yenileme İşlemi"; @@ -731,6 +743,9 @@ /* No comment provided by engineer. */ "Recovery phrase must have %d words" = "Recovery phrase must have %d words"; +/* No comment provided by engineer. */ +"Register Masternode" = "Register Masternode"; + /* No comment provided by engineer. */ "Registered from" = "Registered from"; diff --git a/DashWallet/vi.lproj/Localizable.strings b/DashWallet/vi.lproj/Localizable.strings index 6317b728a..b2e883a20 100644 --- a/DashWallet/vi.lproj/Localizable.strings +++ b/DashWallet/vi.lproj/Localizable.strings @@ -471,14 +471,26 @@ "Masternode control" = "Masternode control"; /* No comment provided by engineer. */ -"Masternode Control" = "Masternode Control"; +"Masternode Features" = "Masternode Features"; /* No comment provided by engineer. */ "Masternode holding address" = "Masternode holding address"; +/* No comment provided by engineer. */ +"Masternode List" = "Masternode List"; + +/* No comment provided by engineer. */ +"Masternode Registration" = "Masternode Registration"; + /* No comment provided by engineer. */ "Masternode Registration Transaction" = "Giao dịch đăng ký Masternode"; +/* No comment provided by engineer. */ +"Masternode Revoked" = "Masternode Revoked"; + +/* No comment provided by engineer. */ +"Masternode Update" = "Masternode Update"; + /* No comment provided by engineer. */ "Masternode Update Registrar Transaction" = "Giao dịch cập nhật đăng ký Masternode"; @@ -731,6 +743,9 @@ /* No comment provided by engineer. */ "Recovery phrase must have %d words" = "Recovery phrase must have %d words"; +/* No comment provided by engineer. */ +"Register Masternode" = "Register Masternode"; + /* No comment provided by engineer. */ "Registered from" = "Registered from"; diff --git a/DashWallet/zh-Hans.lproj/Localizable.strings b/DashWallet/zh-Hans.lproj/Localizable.strings index 21380cd73..c8b1abfcc 100644 --- a/DashWallet/zh-Hans.lproj/Localizable.strings +++ b/DashWallet/zh-Hans.lproj/Localizable.strings @@ -471,14 +471,26 @@ "Masternode control" = "Masternode control"; /* No comment provided by engineer. */ -"Masternode Control" = "Masternode Control"; +"Masternode Features" = "Masternode Features"; /* No comment provided by engineer. */ "Masternode holding address" = "Masternode holding address"; +/* No comment provided by engineer. */ +"Masternode List" = "Masternode List"; + +/* No comment provided by engineer. */ +"Masternode Registration" = "Masternode Registration"; + /* No comment provided by engineer. */ "Masternode Registration Transaction" = "Masternode Registration Transaction"; +/* No comment provided by engineer. */ +"Masternode Revoked" = "Masternode Revoked"; + +/* No comment provided by engineer. */ +"Masternode Update" = "Masternode Update"; + /* No comment provided by engineer. */ "Masternode Update Registrar Transaction" = "Masternode Update Registrar Transaction"; @@ -731,6 +743,9 @@ /* No comment provided by engineer. */ "Recovery phrase must have %d words" = "Recovery phrase must have %d words"; +/* No comment provided by engineer. */ +"Register Masternode" = "Register Masternode"; + /* No comment provided by engineer. */ "Registered from" = "Registered from"; diff --git a/DashWallet/zh-Hant-TW.lproj/Localizable.strings b/DashWallet/zh-Hant-TW.lproj/Localizable.strings index 7c7bd17cc..a03729ca6 100644 --- a/DashWallet/zh-Hant-TW.lproj/Localizable.strings +++ b/DashWallet/zh-Hant-TW.lproj/Localizable.strings @@ -471,14 +471,26 @@ "Masternode control" = "Masternode control"; /* No comment provided by engineer. */ -"Masternode Control" = "Masternode Control"; +"Masternode Features" = "Masternode Features"; /* No comment provided by engineer. */ "Masternode holding address" = "Masternode holding address"; +/* No comment provided by engineer. */ +"Masternode List" = "Masternode List"; + +/* No comment provided by engineer. */ +"Masternode Registration" = "Masternode Registration"; + /* No comment provided by engineer. */ "Masternode Registration Transaction" = "Masternode Registration Transaction"; +/* No comment provided by engineer. */ +"Masternode Revoked" = "Masternode Revoked"; + +/* No comment provided by engineer. */ +"Masternode Update" = "Masternode Update"; + /* No comment provided by engineer. */ "Masternode Update Registrar Transaction" = "Masternode Update Registrar Transaction"; @@ -731,6 +743,9 @@ /* No comment provided by engineer. */ "Recovery phrase must have %d words" = "Recovery phrase must have %d words"; +/* No comment provided by engineer. */ +"Register Masternode" = "Register Masternode"; + /* No comment provided by engineer. */ "Registered from" = "Registered from"; From 1bb4a890d80e5ea468a2035617b33f489b859221 Mon Sep 17 00:00:00 2001 From: Quantum Explorer Date: Mon, 4 Nov 2019 11:51:08 +0700 Subject: [PATCH 17/34] updating for kvo model without storyboards --- DashWallet.xcodeproj/project.pbxproj | 46 +- .../UI/Menu/Forms/DWFormTableViewController.h | 2 + .../UI/Menu/Forms/DWFormTableViewController.m | 22 + .../Forms/KeyValue/DWKeyValueFormCellModel.h | 31 ++ .../Forms/KeyValue/DWKeyValueFormCellModel.m | 38 ++ .../KeyValue/DWKeyValueFormTableViewCell.h} | 20 +- .../KeyValue/DWKeyValueFormTableViewCell.m | 113 +++++ .../DWPublicKeyGenerationCellModel.h | 33 ++ .../DWPublicKeyGenerationCellModel.m | 39 ++ .../DWPublicKeyGenerationTableViewCell.h | 19 +- .../DWPublicKeyGenerationTableViewCell.m | 117 +++++ .../DWMasternodeFeaturesMenuViewController.m | 3 +- .../DWMasternodeViewController.m | 1 - .../DWKeysOverviewViewController.h | 4 +- .../DWRegisterMasternodeViewController.h | 7 +- .../DWRegisterMasternodeViewController.m | 473 ++++++++++++------ .../Models/DWMasternodeRegistrationModel.h | 24 +- .../Models/DWMasternodeRegistrationModel.m | 24 +- DashWallet/ar.lproj/Localizable.strings | 24 + DashWallet/bg.lproj/Localizable.strings | 24 + DashWallet/de.lproj/Localizable.strings | 24 + DashWallet/el.lproj/Localizable.strings | 24 + DashWallet/en.lproj/Localizable.strings | 24 + DashWallet/es.lproj/Localizable.strings | 24 + DashWallet/fr.lproj/Localizable.strings | 24 + DashWallet/id.lproj/Localizable.strings | 24 + DashWallet/it.lproj/Localizable.strings | 24 + DashWallet/ja.lproj/Localizable.strings | 24 + DashWallet/ko.lproj/Localizable.strings | 24 + DashWallet/nb.lproj/Localizable.strings | 24 + DashWallet/nl.lproj/Localizable.strings | 24 + DashWallet/pl.lproj/Localizable.strings | 24 + DashWallet/pt.lproj/Localizable.strings | 24 + DashWallet/ru.lproj/Localizable.strings | 24 + DashWallet/sk.lproj/Localizable.strings | 24 + DashWallet/sq.lproj/Localizable.strings | 24 + DashWallet/sv.lproj/Localizable.strings | 24 + DashWallet/th.lproj/Localizable.strings | 24 + DashWallet/tr.lproj/Localizable.strings | 24 + DashWallet/vi.lproj/Localizable.strings | 24 + DashWallet/zh-Hans.lproj/Localizable.strings | 24 + .../zh-Hant-TW.lproj/Localizable.strings | 24 + 42 files changed, 1365 insertions(+), 227 deletions(-) create mode 100644 DashWallet/Sources/UI/Menu/Forms/KeyValue/DWKeyValueFormCellModel.h create mode 100644 DashWallet/Sources/UI/Menu/Forms/KeyValue/DWKeyValueFormCellModel.m rename DashWallet/{DWPublicKeyGenerationTableViewCell.m => Sources/UI/Menu/Forms/KeyValue/DWKeyValueFormTableViewCell.h} (65%) create mode 100644 DashWallet/Sources/UI/Menu/Forms/KeyValue/DWKeyValueFormTableViewCell.m create mode 100644 DashWallet/Sources/UI/Menu/Forms/PublicKeyGeneration/DWPublicKeyGenerationCellModel.h create mode 100644 DashWallet/Sources/UI/Menu/Forms/PublicKeyGeneration/DWPublicKeyGenerationCellModel.m rename DashWallet/{ => Sources/UI/Menu/Forms/PublicKeyGeneration}/DWPublicKeyGenerationTableViewCell.h (50%) create mode 100644 DashWallet/Sources/UI/Menu/Forms/PublicKeyGeneration/DWPublicKeyGenerationTableViewCell.m diff --git a/DashWallet.xcodeproj/project.pbxproj b/DashWallet.xcodeproj/project.pbxproj index 3702695e9..a086cd5a8 100644 --- a/DashWallet.xcodeproj/project.pbxproj +++ b/DashWallet.xcodeproj/project.pbxproj @@ -420,6 +420,9 @@ FB8ACEB622E0502200EE5035 /* DWUpholdMainnetConstants.m in Sources */ = {isa = PBXBuildFile; fileRef = FB8ACEB522E0502100EE5035 /* DWUpholdMainnetConstants.m */; }; FB9CC2711F8E27B80079309F /* DWGenerateViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = FB9CC2701F8E27B80079309F /* DWGenerateViewController.m */; }; FBCFEDEE236E50CD0086DE07 /* DWMasternodeRegistrationModel.m in Sources */ = {isa = PBXBuildFile; fileRef = FBCFEDED236E50CD0086DE07 /* DWMasternodeRegistrationModel.m */; }; + FBCFEDF3236F8CF70086DE07 /* DWKeyValueFormCellModel.m in Sources */ = {isa = PBXBuildFile; fileRef = FBCFEDF2236F8CF70086DE07 /* DWKeyValueFormCellModel.m */; }; + FBCFEDF6236F8D3D0086DE07 /* DWKeyValueFormTableViewCell.m in Sources */ = {isa = PBXBuildFile; fileRef = FBCFEDF5236F8D3D0086DE07 /* DWKeyValueFormTableViewCell.m */; }; + FBCFEDFA236FCE2E0086DE07 /* DWPublicKeyGenerationCellModel.m in Sources */ = {isa = PBXBuildFile; fileRef = FBCFEDF9236FCE2E0086DE07 /* DWPublicKeyGenerationCellModel.m */; }; FBEF3AF121823CD800917AB6 /* DWEnvironment.m in Sources */ = {isa = PBXBuildFile; fileRef = FBEF3AF021823CD800917AB6 /* DWEnvironment.m */; }; FBF3F42B1E42AF8F00C7248E /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FBF3F42A1E42AF8F00C7248E /* QuartzCore.framework */; }; FBF3F42D1E42B00C00C7248E /* UIKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FBF3F42C1E42B00C00C7248E /* UIKit.framework */; }; @@ -1382,6 +1385,12 @@ FB9CC2701F8E27B80079309F /* DWGenerateViewController.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = DWGenerateViewController.m; sourceTree = ""; }; FBCFEDEC236E50CD0086DE07 /* DWMasternodeRegistrationModel.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = DWMasternodeRegistrationModel.h; sourceTree = ""; }; FBCFEDED236E50CD0086DE07 /* DWMasternodeRegistrationModel.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = DWMasternodeRegistrationModel.m; sourceTree = ""; }; + FBCFEDF1236F8CF70086DE07 /* DWKeyValueFormCellModel.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = DWKeyValueFormCellModel.h; sourceTree = ""; }; + FBCFEDF2236F8CF70086DE07 /* DWKeyValueFormCellModel.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = DWKeyValueFormCellModel.m; sourceTree = ""; }; + FBCFEDF4236F8D3D0086DE07 /* DWKeyValueFormTableViewCell.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = DWKeyValueFormTableViewCell.h; sourceTree = ""; }; + FBCFEDF5236F8D3D0086DE07 /* DWKeyValueFormTableViewCell.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = DWKeyValueFormTableViewCell.m; sourceTree = ""; }; + FBCFEDF8236FCE2E0086DE07 /* DWPublicKeyGenerationCellModel.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = DWPublicKeyGenerationCellModel.h; sourceTree = ""; }; + FBCFEDF9236FCE2E0086DE07 /* DWPublicKeyGenerationCellModel.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = DWPublicKeyGenerationCellModel.m; sourceTree = ""; }; FBEF3AED2182395800917AB6 /* DashSync.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; path = DashSync.framework; sourceTree = BUILT_PRODUCTS_DIR; }; FBEF3AEF21823CD800917AB6 /* DWEnvironment.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = DWEnvironment.h; sourceTree = ""; }; FBEF3AF021823CD800917AB6 /* DWEnvironment.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = DWEnvironment.m; sourceTree = ""; }; @@ -2480,6 +2489,8 @@ 2A9FFE262230FF4600956D5F /* Forms */ = { isa = PBXGroup; children = ( + FBCFEDF7236FCDE50086DE07 /* PublicKeyGeneration */, + FBCFEDF0236F8C770086DE07 /* KeyValue */, 2A9FFE382230FF4600956D5F /* Placeholder */, 2A9FFE272230FF4600956D5F /* Selector */, 2A9FFE2F2230FF4600956D5F /* Switcher */, @@ -3352,8 +3363,6 @@ FB31C268223BD9F400BD0868 /* DWMasternodeTableViewCell.h */, FB31C267223BD9F400BD0868 /* DWMasternodeTableViewCell.m */, 2AE125FB2241151B00379C6F /* DWMasternodeTableViewCell.xib */, - FB83F3DD236E4C9D0039ED1B /* DWPublicKeyGenerationTableViewCell.h */, - FB83F3DE236E4C9D0039ED1B /* DWPublicKeyGenerationTableViewCell.m */, ); name = Cells; sourceTree = ""; @@ -3399,6 +3408,7 @@ FBCFEDEA236E50410086DE07 /* Masternode Registration */ = { isa = PBXGroup; children = ( + FBCFEDEF236E58940086DE07 /* Cells */, FBCFEDEB236E50AF0086DE07 /* Models */, FB31C23F223BD3F100BD0868 /* DWRegisterMasternodeViewController.h */, FB31C247223BD3F200BD0868 /* DWRegisterMasternodeViewController.m */, @@ -3415,6 +3425,35 @@ path = Models; sourceTree = ""; }; + FBCFEDEF236E58940086DE07 /* Cells */ = { + isa = PBXGroup; + children = ( + ); + path = Cells; + sourceTree = ""; + }; + FBCFEDF0236F8C770086DE07 /* KeyValue */ = { + isa = PBXGroup; + children = ( + FBCFEDF1236F8CF70086DE07 /* DWKeyValueFormCellModel.h */, + FBCFEDF2236F8CF70086DE07 /* DWKeyValueFormCellModel.m */, + FBCFEDF4236F8D3D0086DE07 /* DWKeyValueFormTableViewCell.h */, + FBCFEDF5236F8D3D0086DE07 /* DWKeyValueFormTableViewCell.m */, + ); + path = KeyValue; + sourceTree = ""; + }; + FBCFEDF7236FCDE50086DE07 /* PublicKeyGeneration */ = { + isa = PBXGroup; + children = ( + FBCFEDF8236FCE2E0086DE07 /* DWPublicKeyGenerationCellModel.h */, + FBCFEDF9236FCE2E0086DE07 /* DWPublicKeyGenerationCellModel.m */, + FB83F3DD236E4C9D0039ED1B /* DWPublicKeyGenerationTableViewCell.h */, + FB83F3DE236E4C9D0039ED1B /* DWPublicKeyGenerationTableViewCell.m */, + ); + path = PublicKeyGeneration; + sourceTree = ""; + }; FBFC2E9E21137A4200D20C57 /* Montserrat */ = { isa = PBXGroup; children = ( @@ -4027,6 +4066,7 @@ 2A4E531522E9F0A200E5168A /* DWStartModel.m in Sources */, 2A9FFE872230FF4700956D5F /* DWPlaceholderFormTableViewCell.m in Sources */, 2A4E532022EB2DF400E5168A /* DWHomeHeaderView.m in Sources */, + FBCFEDFA236FCE2E0086DE07 /* DWPublicKeyGenerationCellModel.m in Sources */, 2A0C69F22316B93F001B8C90 /* DWTitleDetailCellView.m in Sources */, 2AAEF5402216BE77000FC092 /* DWAmountSendingOptionsModel.m in Sources */, 2A392768235732E9004E9A96 /* DWDerivationPathKeysModel.m in Sources */, @@ -4123,6 +4163,7 @@ 2A9FFE052230FF2B00956D5F /* DWUpholdAPIProvider.m in Sources */, 2A0C69EF2316B7F5001B8C90 /* DWConfirmPaymentContentView.m in Sources */, 2A9FFF1B2233E56E00956D5F /* DWUpholdSelectCardViewController.m in Sources */, + FBCFEDF6236F8D3D0086DE07 /* DWKeyValueFormTableViewCell.m in Sources */, 220460551BA0BEEE00D07B61 /* BREventConfirmView.m in Sources */, 2A1B7DBC2326187D00BA8C6A /* DWTxDetailFullscreenViewController.m in Sources */, 2A9FFE032230FF2B00956D5F /* DWUpholdTransactionObject.m in Sources */, @@ -4266,6 +4307,7 @@ 2A392565234CD21300316EA6 /* DWTabBarButton.m in Sources */, 2A0C69AC23125074001B8C90 /* UIView+DWHUD.m in Sources */, 2A8B9E6822FFE4CC00FF8653 /* DWPayOptionModel.m in Sources */, + FBCFEDF3236F8CF70086DE07 /* DWKeyValueFormCellModel.m in Sources */, 2A7A7BAE234770C900451078 /* DWCaptureSessionManager.m in Sources */, 2A11F59F2194BD6200E7B563 /* DWDataMigrationManager.m in Sources */, 2A11F59921947CBE00E7B563 /* BRAddressEntity.m in Sources */, diff --git a/DashWallet/Sources/UI/Menu/Forms/DWFormTableViewController.h b/DashWallet/Sources/UI/Menu/Forms/DWFormTableViewController.h index 1c2c1d36d..f28c261ef 100644 --- a/DashWallet/Sources/UI/Menu/Forms/DWFormTableViewController.h +++ b/DashWallet/Sources/UI/Menu/Forms/DWFormTableViewController.h @@ -17,6 +17,8 @@ #import #import "DWFormSectionModel.h" +#import "DWKeyValueFormCellModel.h" +#import "DWPublicKeyGenerationCellModel.h" #import "DWSelectorFormCellModel.h" #import "DWSwitcherFormCellModel.h" diff --git a/DashWallet/Sources/UI/Menu/Forms/DWFormTableViewController.m b/DashWallet/Sources/UI/Menu/Forms/DWFormTableViewController.m index 31c855456..875d11481 100644 --- a/DashWallet/Sources/UI/Menu/Forms/DWFormTableViewController.m +++ b/DashWallet/Sources/UI/Menu/Forms/DWFormTableViewController.m @@ -17,7 +17,9 @@ #import "DWFormTableViewController.h" +#import "DWKeyValueFormTableViewCell.h" #import "DWPlaceholderFormTableViewCell.h" +#import "DWPublicKeyGenerationTableViewCell.h" #import "DWSelectorFormTableViewCell.h" #import "DWSharedUIConstants.h" #import "DWSwitcherFormTableViewCell.h" @@ -26,6 +28,7 @@ NS_ASSUME_NONNULL_BEGIN static CGFloat const DEFAULT_CELL_HEIGHT = 74.0; +static CGFloat const PUBLIC_KEY_GENERATION_CELL_HEIGHT = 124.0; @interface DWFormTableViewController () @@ -49,6 +52,8 @@ - (void)viewDidLoad { DWSelectorFormTableViewCell.class, DWSwitcherFormTableViewCell.class, DWPlaceholderFormTableViewCell.class, + DWKeyValueFormTableViewCell.class, + DWPublicKeyGenerationTableViewCell.class, ]; for (Class cellClass in cellClasses) { @@ -114,6 +119,20 @@ - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(N cell.cellModel = (DWSwitcherFormCellModel *)cellModel; return cell; } + else if ([cellModel isKindOfClass:DWKeyValueFormCellModel.class]) { + NSString *cellId = NSStringFromClass(DWKeyValueFormTableViewCell.class); + DWKeyValueFormTableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:cellId + forIndexPath:indexPath]; + cell.cellModel = (DWKeyValueFormCellModel *)cellModel; + return cell; + } + else if ([cellModel isKindOfClass:DWPublicKeyGenerationCellModel.class]) { + NSString *cellId = NSStringFromClass(DWPublicKeyGenerationTableViewCell.class); + DWPublicKeyGenerationTableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:cellId + forIndexPath:indexPath]; + cell.cellModel = (DWPublicKeyGenerationCellModel *)cellModel; + return cell; + } else if ([cellModel isKindOfClass:DWPlaceholderFormCellModel.class]) { NSString *cellId = NSStringFromClass(DWPlaceholderFormTableViewCell.class); DWPlaceholderFormTableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:cellId @@ -138,6 +157,9 @@ - (CGFloat)tableView:(UITableView *)tableView estimatedHeightForRowAtIndexPath:( if ([cellModel isKindOfClass:DWPlaceholderFormCellModel.class]) { return CGRectGetHeight(tableView.bounds); } + else if ([cellModel isKindOfClass:DWPublicKeyGenerationTableViewCell.class]) { + return PUBLIC_KEY_GENERATION_CELL_HEIGHT; + } else { return DEFAULT_CELL_HEIGHT; } diff --git a/DashWallet/Sources/UI/Menu/Forms/KeyValue/DWKeyValueFormCellModel.h b/DashWallet/Sources/UI/Menu/Forms/KeyValue/DWKeyValueFormCellModel.h new file mode 100644 index 000000000..0b1df69c7 --- /dev/null +++ b/DashWallet/Sources/UI/Menu/Forms/KeyValue/DWKeyValueFormCellModel.h @@ -0,0 +1,31 @@ +// +// Created by Sam Westrich +// Copyright © 2019 Dash Core Group. All rights reserved. +// +// Licensed under the MIT License (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://opensource.org/licenses/MIT +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// + +#import "DWBaseFormCellModel.h" + +NS_ASSUME_NONNULL_BEGIN + +@interface DWKeyValueFormCellModel : DWBaseFormCellModel + +@property (copy, nonatomic) NSString *valueText; +@property (nullable, copy, nonatomic) void (^didChangeValueBlock)(DWKeyValueFormCellModel *cellModel); + +- (instancetype)initWithTitle:(nullable NSString *)title valueText:(NSString *)valueText NS_DESIGNATED_INITIALIZER; + +@end + +NS_ASSUME_NONNULL_END diff --git a/DashWallet/Sources/UI/Menu/Forms/KeyValue/DWKeyValueFormCellModel.m b/DashWallet/Sources/UI/Menu/Forms/KeyValue/DWKeyValueFormCellModel.m new file mode 100644 index 000000000..b51d4e8bc --- /dev/null +++ b/DashWallet/Sources/UI/Menu/Forms/KeyValue/DWKeyValueFormCellModel.m @@ -0,0 +1,38 @@ +// +// Created by Sam Westrich +// Copyright © 2019 Dash Core Group. All rights reserved. +// +// Licensed under the MIT License (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://opensource.org/licenses/MIT +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// + +#import "DWKeyValueFormCellModel.h" + +NS_ASSUME_NONNULL_BEGIN + +@implementation DWKeyValueFormCellModel + +- (instancetype)initWithTitle:(nullable NSString *)title valueText:(NSString *)valueText { + self = [super initWithTitle:title]; + if (self) { + _valueText = valueText; + } + return self; +} + +- (instancetype)initWithTitle:(nullable NSString *)title { + return [self initWithTitle:title valueText:@""]; +} + +@end + +NS_ASSUME_NONNULL_END diff --git a/DashWallet/DWPublicKeyGenerationTableViewCell.m b/DashWallet/Sources/UI/Menu/Forms/KeyValue/DWKeyValueFormTableViewCell.h similarity index 65% rename from DashWallet/DWPublicKeyGenerationTableViewCell.m rename to DashWallet/Sources/UI/Menu/Forms/KeyValue/DWKeyValueFormTableViewCell.h index 7edf96ee9..dc6efdd54 100644 --- a/DashWallet/DWPublicKeyGenerationTableViewCell.m +++ b/DashWallet/Sources/UI/Menu/Forms/KeyValue/DWKeyValueFormTableViewCell.h @@ -1,4 +1,4 @@ -// +// // Created by Sam Westrich // Copyright © 2019 Dash Core Group. All rights reserved. // @@ -15,19 +15,15 @@ // limitations under the License. // -#import "DWPublicKeyGenerationTableViewCell.h" - -@implementation DWPublicKeyGenerationTableViewCell +#import "DWBaseFormTableViewCell.h" +#import "DWKeyValueFormCellModel.h" -- (void)awakeFromNib { - [super awakeFromNib]; - // Initialization code -} +NS_ASSUME_NONNULL_BEGIN -- (void)setSelected:(BOOL)selected animated:(BOOL)animated { - [super setSelected:selected animated:animated]; +@interface DWKeyValueFormTableViewCell : DWBaseFormTableViewCell - // Configure the view for the selected state -} +@property (nullable, strong, nonatomic) DWKeyValueFormCellModel *cellModel; @end + +NS_ASSUME_NONNULL_END diff --git a/DashWallet/Sources/UI/Menu/Forms/KeyValue/DWKeyValueFormTableViewCell.m b/DashWallet/Sources/UI/Menu/Forms/KeyValue/DWKeyValueFormTableViewCell.m new file mode 100644 index 000000000..6bfc144ea --- /dev/null +++ b/DashWallet/Sources/UI/Menu/Forms/KeyValue/DWKeyValueFormTableViewCell.m @@ -0,0 +1,113 @@ +// +// Created by Sam Westrich +// Copyright © 2019 Dash Core Group. All rights reserved. +// +// Licensed under the MIT License (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://opensource.org/licenses/MIT +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// + +#import "DWKeyValueFormTableViewCell.h" + +#import "DWSharedUIConstants.h" +#import "DWUIKit.h" + +NS_ASSUME_NONNULL_BEGIN + +@interface DWKeyValueFormTableViewCell () + +@property (readonly, nonatomic, strong) UILabel *titleLabel; +@property (readonly, nonatomic, strong) UITextField *valueTextField; + +@end + +@implementation DWKeyValueFormTableViewCell + +- (instancetype)initWithStyle:(UITableViewCellStyle)style + reuseIdentifier:(nullable NSString *)reuseIdentifier { + self = [super initWithStyle:style reuseIdentifier:reuseIdentifier]; + if (self) { + UIView *contentView = self.roundedContentView; + NSParameterAssert(contentView); + + UILabel *titleLabel = [[UILabel alloc] initWithFrame:CGRectZero]; + titleLabel.translatesAutoresizingMaskIntoConstraints = NO; + titleLabel.backgroundColor = [UIColor dw_backgroundColor]; + titleLabel.textColor = [UIColor dw_darkTitleColor]; + titleLabel.numberOfLines = 0; + titleLabel.lineBreakMode = NSLineBreakByWordWrapping; + titleLabel.font = [UIFont dw_fontForTextStyle:UIFontTextStyleCallout]; + titleLabel.adjustsFontForContentSizeCategory = YES; + titleLabel.minimumScaleFactor = 0.5; + titleLabel.adjustsFontSizeToFitWidth = YES; + [titleLabel setContentCompressionResistancePriority:UILayoutPriorityRequired + forAxis:UILayoutConstraintAxisVertical]; + [contentView addSubview:titleLabel]; + _titleLabel = titleLabel; + + UITextField *valueTextField = [[UITextField alloc] initWithFrame:CGRectZero]; + valueTextField.translatesAutoresizingMaskIntoConstraints = NO; + valueTextField.backgroundColor = [UIColor dw_backgroundColor]; + valueTextField.textColor = [UIColor dw_darkTitleColor]; + valueTextField.font = [UIFont dw_fontForTextStyle:UIFontTextStyleCallout]; + valueTextField.delegate = self; + [contentView addSubview:valueTextField]; + _valueTextField = valueTextField; + + const CGFloat margin = DWDefaultMargin(); + const CGFloat padding = DW_FORM_CELL_VERTICAL_PADDING; + + [NSLayoutConstraint activateConstraints:@[ + [titleLabel.topAnchor constraintEqualToAnchor:contentView.topAnchor + constant:padding], + [titleLabel.leadingAnchor constraintEqualToAnchor:contentView.leadingAnchor + constant:margin], + [titleLabel.bottomAnchor constraintEqualToAnchor:contentView.bottomAnchor + constant:-padding], + + [valueTextField.leadingAnchor constraintEqualToAnchor:titleLabel.trailingAnchor + constant:DW_FORM_CELL_SPACING], + [valueTextField.trailingAnchor constraintEqualToAnchor:contentView.trailingAnchor + constant:-margin], + [valueTextField.centerYAnchor constraintEqualToAnchor:contentView.centerYAnchor], + ]]; + + [self setupObserving]; + } + + return self; +} +- (void)setupObserving { + [self mvvm_observe:DW_KEYPATH(self, cellModel.title) + with:^(__typeof(self) self, NSString *value) { + self.titleLabel.text = value ?: @" "; + }]; + + [self mvvm_observe:DW_KEYPATH(self, cellModel.valueText) + with:^(__typeof(self) self, NSString *value) { + const BOOL animated = self.window != nil; + [self.valueTextField setText:value]; + }]; +} + +- (BOOL)shouldAnimatePressWhenHighlighted { + return NO; +} + +#pragma mark - Private + +- (void)textFieldDidEndEditing:(UITextField *)textField { + self.cellModel.valueText = textField.text; +} + +@end + +NS_ASSUME_NONNULL_END diff --git a/DashWallet/Sources/UI/Menu/Forms/PublicKeyGeneration/DWPublicKeyGenerationCellModel.h b/DashWallet/Sources/UI/Menu/Forms/PublicKeyGeneration/DWPublicKeyGenerationCellModel.h new file mode 100644 index 000000000..9aeda1940 --- /dev/null +++ b/DashWallet/Sources/UI/Menu/Forms/PublicKeyGeneration/DWPublicKeyGenerationCellModel.h @@ -0,0 +1,33 @@ +// +// Created by Sam Westrich +// Copyright © 2019 Dash Core Group. All rights reserved. +// +// Licensed under the MIT License (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://opensource.org/licenses/MIT +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// + +#import "DWBaseFormCellModel.h" + +NS_ASSUME_NONNULL_BEGIN + +@interface DWPublicKeyGenerationCellModel : DWBaseFormCellModel + +@property (strong, nonatomic) NSData *publicKeyData; +@property (assign, nonatomic) uint32_t keyIndex; + +@property (nullable, copy, nonatomic) void (^didChangeValueBlock)(DWPublicKeyGenerationCellModel *cellModel); + +- (instancetype)initWithTitle:(nullable NSString *)title publicKeyData:(NSData *)publicKeyData withIndex:(uint32_t)keyIndex NS_DESIGNATED_INITIALIZER; + +@end + +NS_ASSUME_NONNULL_END diff --git a/DashWallet/Sources/UI/Menu/Forms/PublicKeyGeneration/DWPublicKeyGenerationCellModel.m b/DashWallet/Sources/UI/Menu/Forms/PublicKeyGeneration/DWPublicKeyGenerationCellModel.m new file mode 100644 index 000000000..8bad7d737 --- /dev/null +++ b/DashWallet/Sources/UI/Menu/Forms/PublicKeyGeneration/DWPublicKeyGenerationCellModel.m @@ -0,0 +1,39 @@ +// +// Created by Sam Westrich +// Copyright © 2019 Dash Core Group. All rights reserved. +// +// Licensed under the MIT License (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://opensource.org/licenses/MIT +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// + +#import "DWPublicKeyGenerationCellModel.h" + +NS_ASSUME_NONNULL_BEGIN + +@implementation DWPublicKeyGenerationCellModel + +- (instancetype)initWithTitle:(nullable NSString *)title publicKeyData:(NSData *)publicKeyData withIndex:(uint32_t)keyIndex { + self = [super initWithTitle:title]; + if (self) { + _publicKeyData = publicKeyData; + _keyIndex = keyIndex; + } + return self; +} + +- (instancetype)initWithTitle:(nullable NSString *)title { + return [self initWithTitle:title publicKeyData:[NSData data] withIndex:UINT32_MAX]; +} + +@end + +NS_ASSUME_NONNULL_END diff --git a/DashWallet/DWPublicKeyGenerationTableViewCell.h b/DashWallet/Sources/UI/Menu/Forms/PublicKeyGeneration/DWPublicKeyGenerationTableViewCell.h similarity index 50% rename from DashWallet/DWPublicKeyGenerationTableViewCell.h rename to DashWallet/Sources/UI/Menu/Forms/PublicKeyGeneration/DWPublicKeyGenerationTableViewCell.h index 8b795fde4..b8cd4d75c 100644 --- a/DashWallet/DWPublicKeyGenerationTableViewCell.h +++ b/DashWallet/Sources/UI/Menu/Forms/PublicKeyGeneration/DWPublicKeyGenerationTableViewCell.h @@ -1,4 +1,4 @@ -// +// // Created by Sam Westrich // Copyright © 2019 Dash Core Group. All rights reserved. // @@ -15,24 +15,15 @@ // limitations under the License. // +#import "DWBaseFormTableViewCell.h" +#import "DWPublicKeyGenerationCellModel.h" #import NS_ASSUME_NONNULL_BEGIN -@protocol DWPublicKeyGenerationTableViewCellDelegate; - -@interface DWPublicKeyGenerationTableViewCell : UITableViewCell -@property (strong, nonatomic) IBOutlet UITextField *publicKeyTextField; -@property (strong, nonatomic) IBOutlet UITextField *indexTextField; - -@property (weak, nonatomic) IBOutlet id generationDelegate; - -@end - -@protocol DWPublicKeyGenerationTableViewCellDelegate +@interface DWPublicKeyGenerationTableViewCell : DWBaseFormTableViewCell --(void)publicKeyGenerationTableViewCell:(DWPublicKeyGenerationTableViewCell*)cell didChangeToIndex:(uint32_t)index; --(void)publicKeyGenerationTableViewCell:(DWPublicKeyGenerationTableViewCell*)cell didInputPublicKeyString:(NSString*)publicKeyString; +@property (nullable, strong, nonatomic) DWPublicKeyGenerationCellModel *cellModel; @end diff --git a/DashWallet/Sources/UI/Menu/Forms/PublicKeyGeneration/DWPublicKeyGenerationTableViewCell.m b/DashWallet/Sources/UI/Menu/Forms/PublicKeyGeneration/DWPublicKeyGenerationTableViewCell.m new file mode 100644 index 000000000..fbaef4d88 --- /dev/null +++ b/DashWallet/Sources/UI/Menu/Forms/PublicKeyGeneration/DWPublicKeyGenerationTableViewCell.m @@ -0,0 +1,117 @@ +// +// Created by Sam Westrich +// Copyright © 2019 Dash Core Group. All rights reserved. +// +// Licensed under the MIT License (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://opensource.org/licenses/MIT +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// + +#import "DWPublicKeyGenerationTableViewCell.h" + +#import "DWSharedUIConstants.h" +#import "DWUIKit.h" + +NS_ASSUME_NONNULL_BEGIN + +@interface DWPublicKeyGenerationTableViewCell () + +@property (readonly, nonatomic, strong) UILabel *titleLabel; +@property (readonly, nonatomic, strong) UITextField *publicKeyTextField; +@property (readonly, nonatomic, strong) UITextField *indexTextField; + +@end + +@implementation DWPublicKeyGenerationTableViewCell + +- (instancetype)initWithStyle:(UITableViewCellStyle)style + reuseIdentifier:(nullable NSString *)reuseIdentifier { + self = [super initWithStyle:style reuseIdentifier:reuseIdentifier]; + if (self) { + UIView *contentView = self.roundedContentView; + NSParameterAssert(contentView); + + UILabel *titleLabel = [[UILabel alloc] initWithFrame:CGRectZero]; + titleLabel.translatesAutoresizingMaskIntoConstraints = NO; + titleLabel.backgroundColor = [UIColor dw_backgroundColor]; + titleLabel.textColor = [UIColor dw_darkTitleColor]; + titleLabel.numberOfLines = 0; + titleLabel.lineBreakMode = NSLineBreakByWordWrapping; + titleLabel.font = [UIFont dw_fontForTextStyle:UIFontTextStyleCallout]; + titleLabel.adjustsFontForContentSizeCategory = YES; + titleLabel.minimumScaleFactor = 0.5; + titleLabel.adjustsFontSizeToFitWidth = YES; + [titleLabel setContentCompressionResistancePriority:UILayoutPriorityRequired + forAxis:UILayoutConstraintAxisVertical]; + [contentView addSubview:titleLabel]; + _titleLabel = titleLabel; + + UITextField *publicKeyTextField = [[UITextField alloc] initWithFrame:CGRectZero]; + publicKeyTextField.translatesAutoresizingMaskIntoConstraints = NO; + publicKeyTextField.backgroundColor = [UIColor dw_backgroundColor]; + publicKeyTextField.textColor = [UIColor dw_darkTitleColor]; + publicKeyTextField.font = [UIFont dw_fontForTextStyle:UIFontTextStyleCallout]; + publicKeyTextField.delegate = self; + [contentView addSubview:publicKeyTextField]; + _publicKeyTextField = publicKeyTextField; + + const CGFloat margin = DWDefaultMargin(); + const CGFloat padding = DW_FORM_CELL_VERTICAL_PADDING; + + [NSLayoutConstraint activateConstraints:@[ + [titleLabel.topAnchor constraintEqualToAnchor:contentView.topAnchor + constant:padding], + [titleLabel.leadingAnchor constraintEqualToAnchor:contentView.leadingAnchor + constant:margin], + [titleLabel.bottomAnchor constraintEqualToAnchor:contentView.bottomAnchor + constant:-padding], + + [publicKeyTextField.leadingAnchor constraintEqualToAnchor:titleLabel.trailingAnchor + constant:DW_FORM_CELL_SPACING], + [publicKeyTextField.trailingAnchor constraintEqualToAnchor:contentView.trailingAnchor + constant:-margin], + [publicKeyTextField.centerYAnchor constraintEqualToAnchor:contentView.centerYAnchor], + ]]; + + [self setupObserving]; + } + + return self; +} +- (void)setupObserving { + [self mvvm_observe:DW_KEYPATH(self, cellModel.title) + with:^(__typeof(self) self, NSString *value) { + self.titleLabel.text = value ?: @" "; + }]; + + [self mvvm_observe:DW_KEYPATH(self, cellModel.publicKeyData) + with:^(__typeof(self) self, NSData *value) { + [self.publicKeyTextField setText:value.hexString]; + }]; +} + +- (BOOL)shouldAnimatePressWhenHighlighted { + return NO; +} + +#pragma mark - Private + +- (void)textFieldDidEndEditing:(UITextField *)textField { + if (textField && [textField isEqual:_publicKeyTextField]) { + self.cellModel.publicKeyData = [textField.text hexToData]; + } + else { + } +} + +@end + +NS_ASSUME_NONNULL_END diff --git a/DashWallet/Sources/UI/Menu/Tools/Masternode/DWMasternodeFeaturesMenuViewController.m b/DashWallet/Sources/UI/Menu/Tools/Masternode/DWMasternodeFeaturesMenuViewController.m index 153a59276..eb807508c 100644 --- a/DashWallet/Sources/UI/Menu/Tools/Masternode/DWMasternodeFeaturesMenuViewController.m +++ b/DashWallet/Sources/UI/Menu/Tools/Masternode/DWMasternodeFeaturesMenuViewController.m @@ -129,8 +129,7 @@ - (void)showMasternodeKeys { } - (void)showRegisterMasternode { - UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"Masternode" bundle:nil]; - DWRegisterMasternodeViewController *registerMasternodeViewController = [storyboard instantiateViewControllerWithIdentifier:@"RegisterMasternodeViewControllerIdentifier"]; + DWRegisterMasternodeViewController *registerMasternodeViewController = [[DWRegisterMasternodeViewController alloc] init]; [self.navigationController pushViewController:registerMasternodeViewController animated:YES]; } diff --git a/DashWallet/Sources/UI/Menu/Tools/Masternode/Masternode Control/DWMasternodeViewController.m b/DashWallet/Sources/UI/Menu/Tools/Masternode/Masternode Control/DWMasternodeViewController.m index ff28a208f..8c0727718 100644 --- a/DashWallet/Sources/UI/Menu/Tools/Masternode/Masternode Control/DWMasternodeViewController.m +++ b/DashWallet/Sources/UI/Menu/Tools/Masternode/Masternode Control/DWMasternodeViewController.m @@ -89,7 +89,6 @@ - (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender { if ([segue.identifier isEqualToString:@"RegisterMasternodeSegue"]) { UINavigationController *navigationController = (UINavigationController *)segue.destinationViewController; DWRegisterMasternodeViewController *registerMasternodeViewController = (DWRegisterMasternodeViewController *)navigationController.topViewController; - registerMasternodeViewController.chain = self.chain; } } diff --git a/DashWallet/Sources/UI/Menu/Tools/Masternode/Masternode Keys/DWKeysOverviewViewController.h b/DashWallet/Sources/UI/Menu/Tools/Masternode/Masternode Keys/DWKeysOverviewViewController.h index 4e4754beb..9bd6bcb06 100644 --- a/DashWallet/Sources/UI/Menu/Tools/Masternode/Masternode Keys/DWKeysOverviewViewController.h +++ b/DashWallet/Sources/UI/Menu/Tools/Masternode/Masternode Keys/DWKeysOverviewViewController.h @@ -19,9 +19,9 @@ NS_ASSUME_NONNULL_BEGIN -@interface DWKeysOverviewViewController : UITableViewController +@interface DWKeysOverviewViewController : UIViewController -+ (instancetype)controller; +//+ (instancetype)controller; @end diff --git a/DashWallet/Sources/UI/Menu/Tools/Masternode/Masternode Registration/DWRegisterMasternodeViewController.h b/DashWallet/Sources/UI/Menu/Tools/Masternode/Masternode Registration/DWRegisterMasternodeViewController.h index e45ad8870..f33a80d12 100644 --- a/DashWallet/Sources/UI/Menu/Tools/Masternode/Masternode Registration/DWRegisterMasternodeViewController.h +++ b/DashWallet/Sources/UI/Menu/Tools/Masternode/Masternode Registration/DWRegisterMasternodeViewController.h @@ -11,11 +11,10 @@ NS_ASSUME_NONNULL_BEGIN -@interface DWRegisterMasternodeViewController : UITableViewController +@interface DWRegisterMasternodeViewController : UIViewController -@property (nonatomic, strong) DSChain *chain; - -- (instancetype)init NS_UNAVAILABLE; +- (instancetype)initWithNibName:(nullable NSString *)nibNameOrNil bundle:(nullable NSBundle *)nibBundleOrNil NS_UNAVAILABLE; +- (nullable instancetype)initWithCoder:(NSCoder *)coder NS_UNAVAILABLE; @end diff --git a/DashWallet/Sources/UI/Menu/Tools/Masternode/Masternode Registration/DWRegisterMasternodeViewController.m b/DashWallet/Sources/UI/Menu/Tools/Masternode/Masternode Registration/DWRegisterMasternodeViewController.m index 780cd0aed..b2ec2f3c2 100644 --- a/DashWallet/Sources/UI/Menu/Tools/Masternode/Masternode Registration/DWRegisterMasternodeViewController.m +++ b/DashWallet/Sources/UI/Menu/Tools/Masternode/Masternode Registration/DWRegisterMasternodeViewController.m @@ -8,7 +8,8 @@ #import "DWRegisterMasternodeViewController.h" #import "DWEnvironment.h" -#import "DWKeyValueTableViewCell.h" +#import "DWFormTableViewController.h" +#import "DWKeyValueFormTableViewCell.h" #import "DWMasternodeRegistrationModel.h" #import "DWPublicKeyGenerationTableViewCell.h" #import "DWSignPayloadViewController.h" @@ -18,104 +19,198 @@ #define INPUT_CELL_HEIGHT 75 #define PUBLIC_KEY_CELL_HEIGHT 150 +typedef NS_ENUM(NSUInteger, DWMasternodeRegistrationCell) { + DWMasternodeRegistrationCell_CollateralTx, + DWMasternodeRegistrationCell_CollateralIndex, + DWMasternodeRegistrationCell_IPAddress, + DWMasternodeRegistrationCell_Port, + DWMasternodeRegistrationCell_PayoutAddress, + DWMasternodeRegistrationCell_OwnerKey, + DWMasternodeRegistrationCell_OperatorKey, + DWMasternodeRegistrationCell_VotingKey, + _DWMasternodeRegistrationCell_Count, +}; + +typedef NS_ENUM(NSUInteger, DWMasternodeRegistrationCellType) { + DWMasternodeRegistrationCellType_InputValue, + DWMasternodeRegistrationCellType_PublicKey, +}; + @interface DWRegisterMasternodeViewController () -@property (nonatomic, strong) DWKeyValueTableViewCell *collateralTransactionTableViewCell; -@property (nonatomic, strong) DWKeyValueTableViewCell *collateralIndexTableViewCell; -@property (nonatomic, strong) DWKeyValueTableViewCell *ipAddressTableViewCell; -@property (nonatomic, strong) DWKeyValueTableViewCell *portTableViewCell; -@property (nonatomic, strong) DWKeyValueTableViewCell *payToAddressTableViewCell; -@property (nonatomic, strong) DWPublicKeyGenerationTableViewCell *ownerIndexTableViewCell; -@property (nonatomic, strong) DWPublicKeyGenerationTableViewCell *operatorIndexTableViewCell; -@property (nonatomic, strong) DWPublicKeyGenerationTableViewCell *votingIndexTableViewCell; @property (nonatomic, strong) DSAccount *account; -@property (nonatomic, strong) DSWallet *wallet; @property (nonatomic, strong) DSProviderRegistrationTransaction *providerRegistrationTransaction; @property (nonatomic, strong) DSTransaction *collateralTransaction; -@property (readonly, nonatomic, strong) DWMasternodeRegistrationModel *model; +@property (null_resettable, nonatomic, strong) DWMasternodeRegistrationModel *model; +@property (nonatomic, strong) DWFormTableViewController *formController; @end @implementation DWRegisterMasternodeViewController +- (instancetype)initWithNibName:(nullable NSString *)nibNameOrNil bundle:(nullable NSBundle *)nibBundleOrNil { + if (self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil]) { + _model = [[DWMasternodeRegistrationModel alloc] initForWallet:[DWEnvironment sharedInstance].currentWallet]; + self.account = [DWEnvironment sharedInstance].currentAccount; + self.title = NSLocalizedString(@"Registration", nil); + self.hidesBottomBarWhenPushed = YES; + } + return self; +} + - (void)viewDidLoad { [super viewDidLoad]; - _model = [[DWMasternodeRegistrationModel alloc] initWithWallet:self.wallet]; self.view.backgroundColor = [UIColor dw_secondaryBackgroundColor]; - self.payToAddressTableViewCell = [self.tableView dequeueReusableCellWithIdentifier:@"MasternodePayoutAddressCellIdentifier"]; - self.collateralTransactionTableViewCell = [self.tableView dequeueReusableCellWithIdentifier:@"MasternodeCollateralTransactionCellIdentifier"]; - self.collateralIndexTableViewCell = [self.tableView dequeueReusableCellWithIdentifier:@"MasternodeCollateralIndexCellIdentifier"]; - self.ipAddressTableViewCell = [self.tableView dequeueReusableCellWithIdentifier:@"MasternodeIPAddressCellIdentifier"]; - self.portTableViewCell = [self.tableView dequeueReusableCellWithIdentifier:@"MasternodePortCellIdentifier"]; - self.portTableViewCell.valueTextField.text = [NSString stringWithFormat:@"%d", self.chain.standardPort]; - self.ownerIndexTableViewCell = [self.tableView dequeueReusableCellWithIdentifier:@"MasternodeOwnerIndexCellIdentifier"]; - self.votingIndexTableViewCell = [self.tableView dequeueReusableCellWithIdentifier:@"MasternodeVotingIndexCellIdentifier"]; - self.operatorIndexTableViewCell = [self.tableView dequeueReusableCellWithIdentifier:@"MasternodeOperatorIndexCellIdentifier"]; - self.wallet = [DWEnvironment sharedInstance].currentWallet; - self.account = [DWEnvironment sharedInstance].currentAccount; + DWFormTableViewController *formController = [[DWFormTableViewController alloc] initWithStyle:UITableViewStylePlain]; + [formController setSections:[self sections] placeholderText:nil]; + + [self addChildViewController:formController]; + formController.view.frame = self.view.bounds; + formController.view.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight; + [self.view addSubview:formController.view]; + [formController didMoveToParentViewController:self]; + self.formController = formController; + + + // self.view.backgroundColor = [UIColor dw_secondaryBackgroundColor]; + // self.tableView.rowHeight = UITableViewAutomaticDimension; + // self.tableView.separatorStyle = UITableViewCellSeparatorStyleNone; + // self.tableView.tableFooterView = [[UIView alloc] init]; + // self.tableView.sectionHeaderHeight = UITableViewAutomaticDimension; + // self.tableView.estimatedSectionHeaderHeight = 30.0; + // + // NSArray *cellClasses = @[ + // DWKeyValueFormTableViewCell.class, + // DWPublicKeyGenerationTableViewCell.class, + // ]; + // + // for (Class cellClass in cellClasses) { + // [self.tableView registerClass:cellClass forCellReuseIdentifier:NSStringFromClass(cellClass)]; + // } +} + +- (UIStatusBarStyle)preferredStatusBarStyle { + return UIStatusBarStyleLightContent; +} + +#pragma mark - Data Source + +- (NSString *)titleForCellAtRow:(NSUInteger)row { + switch (row) { + case DWMasternodeRegistrationCell_CollateralTx: + return NSLocalizedString(@"Collateral Tx", nil); + case DWMasternodeRegistrationCell_CollateralIndex: + return NSLocalizedString(@"Collateral Index", nil); + case DWMasternodeRegistrationCell_IPAddress: + return NSLocalizedString(@"IP Address", nil); + case DWMasternodeRegistrationCell_Port: + return NSLocalizedString(@"Port", nil); + case DWMasternodeRegistrationCell_PayoutAddress: + return NSLocalizedString(@"Payout Address", nil); + case DWMasternodeRegistrationCell_OwnerKey: + return NSLocalizedString(@"Owner Public Key", nil); + case DWMasternodeRegistrationCell_OperatorKey: + return NSLocalizedString(@"Operator Public Key", nil); + case DWMasternodeRegistrationCell_VotingKey: + return NSLocalizedString(@"Voting Public Key", nil); + } + return @""; +} + +- (DWMasternodeRegistrationCellType)typeForCellAtRow:(NSUInteger)row { + switch (row) { + case DWMasternodeRegistrationCell_CollateralTx: + case DWMasternodeRegistrationCell_CollateralIndex: + case DWMasternodeRegistrationCell_IPAddress: + case DWMasternodeRegistrationCell_Port: + case DWMasternodeRegistrationCell_PayoutAddress: + return DWMasternodeRegistrationCellType_InputValue; + case DWMasternodeRegistrationCell_OwnerKey: + case DWMasternodeRegistrationCell_OperatorKey: + case DWMasternodeRegistrationCell_VotingKey: + return DWMasternodeRegistrationCellType_PublicKey; + } + return DWMasternodeRegistrationCellType_InputValue; +} + +- (DWBaseFormCellModel *)modelForRow:(NSUInteger)row { + switch ([self typeForCellAtRow:row]) { + case DWMasternodeRegistrationCellType_InputValue: + return [[DWKeyValueFormCellModel alloc] initWithTitle:[self titleForCellAtRow:row]]; + case DWMasternodeRegistrationCellType_PublicKey: + return [[DWPublicKeyGenerationCellModel alloc] initWithTitle:[self titleForCellAtRow:row]]; + } +} + +- (NSArray *)items { + __weak typeof(self) weakSelf = self; + + NSMutableArray *items = [NSMutableArray array]; + + for (NSUInteger i = 0; i < _DWMasternodeRegistrationCell_Count; i++) { + [items addObject:[self modelForRow:i]]; + } + return items; } -#pragma mark - Table view data source +- (NSArray *)sections { + DWFormSectionModel *section = [[DWFormSectionModel alloc] init]; + section.items = [self items]; + + return @[ section ]; +} + +#pragma mark - UITableViewDataSource - (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView { return 1; } - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section { - return 8; + return _DWMasternodeRegistrationCell_Count; } - (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath { - switch (indexPath.section) { - case 0: { - switch (indexPath.row) { - case 0: - return INPUT_CELL_HEIGHT; - case 1: - return INPUT_CELL_HEIGHT; - case 2: - return INPUT_CELL_HEIGHT; - case 3: - return INPUT_CELL_HEIGHT; - case 4: - return PUBLIC_KEY_CELL_HEIGHT; - case 5: - return PUBLIC_KEY_CELL_HEIGHT; - case 6: - return PUBLIC_KEY_CELL_HEIGHT; - case 7: - return INPUT_CELL_HEIGHT; - } - } + switch ([self typeForCellAtRow:indexPath.row]) { + case DWMasternodeRegistrationCellType_InputValue: + return INPUT_CELL_HEIGHT; + case DWMasternodeRegistrationCellType_PublicKey: + return PUBLIC_KEY_CELL_HEIGHT; } return 0; } - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { + NSString *cellId; switch (indexPath.section) { case 0: { switch (indexPath.row) { case 0: - return self.collateralTransactionTableViewCell; case 1: - return self.collateralIndexTableViewCell; case 2: - return self.ipAddressTableViewCell; case 3: - return self.portTableViewCell; - case 4: - return self.ownerIndexTableViewCell; + case 4: { + cellId = DWKeyValueFormTableViewCell.dw_reuseIdentifier; + DWKeyValueFormTableViewCell *cell = + (DWKeyValueFormTableViewCell *)[tableView dequeueReusableCellWithIdentifier:cellId + forIndexPath:indexPath]; + return cell; + } case 5: - return self.operatorIndexTableViewCell; case 6: - return self.votingIndexTableViewCell; - case 7: - return self.payToAddressTableViewCell; + case 7: { + cellId = DWPublicKeyGenerationTableViewCell.dw_reuseIdentifier; + DWPublicKeyGenerationTableViewCell *cell = + (DWPublicKeyGenerationTableViewCell *)[tableView dequeueReusableCellWithIdentifier:cellId + forIndexPath:indexPath]; + return cell; + } } } } + return nil; } @@ -124,16 +219,16 @@ - (void)signTransactionInputs:(DSProviderRegistrationTransaction *)providerRegis withPrompt:@"Would you like to register this masternode?" completion:^(BOOL signedTransaction, BOOL cancelled) { if (signedTransaction) { - [self.chain.chainManager.transactionManager publishTransaction:providerRegistrationTransaction - completion:^(NSError *_Nullable error) { - if (error) { - [self raiseIssue:@"Error" message:error.localizedDescription]; - } - else { - //[masternode registerInWallet]; - [self.presentingViewController dismissViewControllerAnimated:TRUE completion:nil]; - } - }]; + [self.account.wallet.chain.chainManager.transactionManager publishTransaction:providerRegistrationTransaction + completion:^(NSError *_Nullable error) { + if (error) { + [self raiseIssue:@"Error" message:error.localizedDescription]; + } + else { + //[masternode registerInWallet]; + [self.presentingViewController dismissViewControllerAnimated:TRUE completion:nil]; + } + }]; } else { [self raiseIssue:@"Error" message:@"Transaction was not signed."]; @@ -141,91 +236,6 @@ - (void)signTransactionInputs:(DSProviderRegistrationTransaction *)providerRegis }]; } -- (IBAction)registerMasternode:(id)sender { - NSString *ipAddressString = [self.ipAddressTableViewCell.valueTextField.text stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]]; - NSString *portString = [self.portTableViewCell.valueTextField.text stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]]; - UInt128 ipAddress = {.u32 = {0, 0, CFSwapInt32HostToBig(0xffff), 0}}; - struct in_addr addrV4; - if (inet_aton([ipAddressString UTF8String], &addrV4) != 0) { - uint32_t ip = ntohl(addrV4.s_addr); - ipAddress.u32[3] = CFSwapInt32HostToBig(ip); - DSDLog(@"%08x", ip); - } - uint16_t port = [portString intValue]; - - uint32_t ownerWalletIndex = UINT32_MAX; - uint32_t votingWalletIndex = UINT32_MAX; - uint32_t operatorWalletIndex = UINT32_MAX; - - if (self.ownerIndexTableViewCell.publicKeyTextField.text && ![self.ownerIndexTableViewCell.publicKeyTextField.text isEqualToString:@""]) { - ownerWalletIndex = (uint32_t)[self.ownerIndexTableViewCell.publicKeyTextField.text integerValue]; - } - - if (self.operatorIndexTableViewCell.publicKeyTextField.text && ![self.operatorIndexTableViewCell.publicKeyTextField.text isEqualToString:@""]) { - operatorWalletIndex = (uint32_t)[self.operatorIndexTableViewCell.publicKeyTextField.text integerValue]; - } - - if (self.votingIndexTableViewCell.publicKeyTextField.text && ![self.votingIndexTableViewCell.publicKeyTextField.text isEqualToString:@""]) { - votingWalletIndex = (uint32_t)[self.votingIndexTableViewCell.publicKeyTextField.text integerValue]; - } - - DSLocalMasternode *masternode = [self.chain.chainManager.masternodeManager createNewMasternodeWithIPAddress:ipAddress onPort:port inFundsWallet:self.wallet fundsWalletIndex:UINT32_MAX inOperatorWallet:self.wallet operatorWalletIndex:operatorWalletIndex inOwnerWallet:self.wallet ownerWalletIndex:ownerWalletIndex inVotingWallet:self.wallet votingWalletIndex:votingWalletIndex]; - - NSString *payoutAddress = [self.payToAddressTableViewCell.valueTextField.text isValidDashAddressOnChain:self.chain] ? self.payToAddressTableViewCell.textLabel.text : self.account.receiveAddress; - - - DSUTXO collateral = DSUTXO_ZERO; - UInt256 nonReversedCollateralHash = UINT256_ZERO; - NSString *collateralTransactionHash = self.collateralTransactionTableViewCell.valueTextField.text; - if (![collateralTransactionHash isEqual:@""]) { - NSData *collateralTransactionHashData = [collateralTransactionHash hexToData]; - if (collateralTransactionHashData.length != 32) - return; - collateral.hash = collateralTransactionHashData.reverse.UInt256; - - nonReversedCollateralHash = collateralTransactionHashData.UInt256; - collateral.n = [self.collateralIndexTableViewCell.valueTextField.text integerValue]; - } - - - [masternode registrationTransactionFundedByAccount:self.account - toAddress:payoutAddress - withCollateral:collateral - completion:^(DSProviderRegistrationTransaction *_Nonnull providerRegistrationTransaction) { - if (providerRegistrationTransaction) { - if (dsutxo_is_zero(collateral)) { - [self signTransactionInputs:providerRegistrationTransaction]; - } - else { - [[DSInsightManager sharedInstance] queryInsightForTransactionWithHash:nonReversedCollateralHash - onChain:self.chain - completion:^(DSTransaction *transaction, NSError *error) { - NSIndexSet *indexSet = [[transaction outputAmounts] indexesOfObjectsPassingTest:^BOOL(id _Nonnull obj, NSUInteger idx, BOOL *_Nonnull stop) { - if ([obj isEqual:@(MASTERNODE_COST)]) - return TRUE; - return FALSE; - }]; - if ([indexSet containsIndex:collateral.n]) { - self.collateralTransaction = transaction; - self.providerRegistrationTransaction = providerRegistrationTransaction; - dispatch_async(dispatch_get_main_queue(), ^{ - [self performSegueWithIdentifier:@"PayloadSigningSegue" sender:self]; - }); - } - else { - dispatch_async(dispatch_get_main_queue(), ^{ - [self raiseIssue:@"Error" message:@"Incorrect collateral index"]; - }); - } - }]; - } - } - else { - [self raiseIssue:@"Error" message:@"Unable to create ProviderRegistrationTransaction."]; - } - }]; -} - - (void)raiseIssue:(NSString *)issue message:(NSString *)message { UIAlertController *alert = [UIAlertController alertControllerWithTitle:issue message:message preferredStyle:UIAlertControllerStyleAlert]; [alert addAction:[UIAlertAction actionWithTitle:@"Ok" @@ -240,23 +250,154 @@ - (void)raiseIssue:(NSString *)issue message:(NSString *)message { }]; } -- (UIStatusBarStyle)preferredStatusBarStyle { - return UIStatusBarStyleLightContent; -} -- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender { - if ([segue.identifier isEqualToString:@"PayloadSigningSegue"]) { - DWSignPayloadViewController *signPayloadSegue = (DWSignPayloadViewController *)segue.destinationViewController; - signPayloadSegue.collateralAddress = self.collateralTransaction.outputAddresses[self.providerRegistrationTransaction.collateralOutpoint.n]; - signPayloadSegue.providerRegistrationTransaction = self.providerRegistrationTransaction; - signPayloadSegue.delegate = self; - } -} +// +//------ +// +// -(void)viewDidLoad { +// [super viewDidLoad]; +// +// _model = [[DWMasternodeRegistrationModel alloc] initWithWallet:self.wallet]; +// self.view.backgroundColor = [UIColor dw_secondaryBackgroundColor]; +// +// +// self.wallet = [DWEnvironment sharedInstance].currentWallet; +// self.account = [DWEnvironment sharedInstance].currentAccount; +//} +// +//#pragma mark - Table view data source +// +//- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { +// switch (indexPath.section) { +// case 0: { +// switch (indexPath.row) { +// case 0: +// return self.collateralTransactionTableViewCell; +// case 1: +// return self.collateralIndexTableViewCell; +// case 2: +// return self.ipAddressTableViewCell; +// case 3: +// return self.portTableViewCell; +// case 4: +// return self.ownerIndexTableViewCell; +// case 5: +// return self.operatorIndexTableViewCell; +// case 6: +// return self.votingIndexTableViewCell; +// case 7: +// return self.payToAddressTableViewCell; +// } +// } +// } +// return nil; +//} +// -- (void)viewController:(nonnull UIViewController *)controller didReturnSignature:(nonnull NSData *)signature { - self.providerRegistrationTransaction.payloadSignature = signature; - [self signTransactionInputs:self.providerRegistrationTransaction]; -} +//- (IBAction)registerMasternode:(id)sender { +// NSString *ipAddressString = [self.ipAddressTableViewCell.valueTextField.text stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]]; +// NSString *portString = [self.portTableViewCell.valueTextField.text stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]]; +// UInt128 ipAddress = {.u32 = {0, 0, CFSwapInt32HostToBig(0xffff), 0}}; +// struct in_addr addrV4; +// if (inet_aton([ipAddressString UTF8String], &addrV4) != 0) { +// uint32_t ip = ntohl(addrV4.s_addr); +// ipAddress.u32[3] = CFSwapInt32HostToBig(ip); +// DSDLog(@"%08x", ip); +// } +// uint16_t port = [portString intValue]; +// +// uint32_t ownerWalletIndex = UINT32_MAX; +// uint32_t votingWalletIndex = UINT32_MAX; +// uint32_t operatorWalletIndex = UINT32_MAX; +// +// if (self.ownerIndexTableViewCell.publicKeyTextField.text && ![self.ownerIndexTableViewCell.publicKeyTextField.text isEqualToString:@""]) { +// ownerWalletIndex = (uint32_t)[self.ownerIndexTableViewCell.publicKeyTextField.text integerValue]; +// } +// +// if (self.operatorIndexTableViewCell.publicKeyTextField.text && ![self.operatorIndexTableViewCell.publicKeyTextField.text isEqualToString:@""]) { +// operatorWalletIndex = (uint32_t)[self.operatorIndexTableViewCell.publicKeyTextField.text integerValue]; +// } +// +// if (self.votingIndexTableViewCell.publicKeyTextField.text && ![self.votingIndexTableViewCell.publicKeyTextField.text isEqualToString:@""]) { +// votingWalletIndex = (uint32_t)[self.votingIndexTableViewCell.publicKeyTextField.text integerValue]; +// } +// +// DSLocalMasternode *masternode = [self.chain.chainManager.masternodeManager createNewMasternodeWithIPAddress:ipAddress onPort:port inFundsWallet:self.wallet fundsWalletIndex:UINT32_MAX inOperatorWallet:self.wallet operatorWalletIndex:operatorWalletIndex inOwnerWallet:self.wallet ownerWalletIndex:ownerWalletIndex inVotingWallet:self.wallet votingWalletIndex:votingWalletIndex]; +// +// NSString *payoutAddress = [self.payToAddressTableViewCell.valueTextField.text isValidDashAddressOnChain:self.chain] ? self.payToAddressTableViewCell.textLabel.text : self.account.receiveAddress; +// +// +// DSUTXO collateral = DSUTXO_ZERO; +// UInt256 nonReversedCollateralHash = UINT256_ZERO; +// NSString *collateralTransactionHash = self.collateralTransactionTableViewCell.valueTextField.text; +// if (![collateralTransactionHash isEqual:@""]) { +// NSData *collateralTransactionHashData = [collateralTransactionHash hexToData]; +// if (collateralTransactionHashData.length != 32) +// return; +// collateral.hash = collateralTransactionHashData.reverse.UInt256; +// +// nonReversedCollateralHash = collateralTransactionHashData.UInt256; +// collateral.n = [self.collateralIndexTableViewCell.valueTextField.text integerValue]; +// } +// +// +// [masternode registrationTransactionFundedByAccount:self.account +// toAddress:payoutAddress +// withCollateral:collateral +// completion:^(DSProviderRegistrationTransaction *_Nonnull providerRegistrationTransaction) { +// if (providerRegistrationTransaction) { +// if (dsutxo_is_zero(collateral)) { +// [self signTransactionInputs:providerRegistrationTransaction]; +// } +// else { +// [[DSInsightManager sharedInstance] queryInsightForTransactionWithHash:nonReversedCollateralHash +// onChain:self.chain +// completion:^(DSTransaction *transaction, NSError *error) { +// NSIndexSet *indexSet = [[transaction outputAmounts] indexesOfObjectsPassingTest:^BOOL(id _Nonnull obj, NSUInteger idx, BOOL *_Nonnull stop) { +// if ([obj isEqual:@(MASTERNODE_COST)]) +// return TRUE; +// return FALSE; +// }]; +// if ([indexSet containsIndex:collateral.n]) { +// self.collateralTransaction = transaction; +// self.providerRegistrationTransaction = providerRegistrationTransaction; +// dispatch_async(dispatch_get_main_queue(), ^{ +// [self performSegueWithIdentifier:@"PayloadSigningSegue" sender:self]; +// }); +// } +// else { +// dispatch_async(dispatch_get_main_queue(), ^{ +// [self raiseIssue:@"Error" message:@"Incorrect collateral index"]; +// }); +// } +// }]; +// } +// } +// else { +// [self raiseIssue:@"Error" message:@"Unable to create ProviderRegistrationTransaction."]; +// } +// }]; +//} +// + +// +//- (UIStatusBarStyle)preferredStatusBarStyle { +// return UIStatusBarStyleLightContent; +//} +// +//- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender { +// if ([segue.identifier isEqualToString:@"PayloadSigningSegue"]) { +// DWSignPayloadViewController *signPayloadSegue = (DWSignPayloadViewController *)segue.destinationViewController; +// signPayloadSegue.collateralAddress = self.collateralTransaction.outputAddresses[self.providerRegistrationTransaction.collateralOutpoint.n]; +// signPayloadSegue.providerRegistrationTransaction = self.providerRegistrationTransaction; +// signPayloadSegue.delegate = self; +// } +//} +// +//- (void)viewController:(nonnull UIViewController *)controller didReturnSignature:(nonnull NSData *)signature { +// self.providerRegistrationTransaction.payloadSignature = signature; +// [self signTransactionInputs:self.providerRegistrationTransaction]; +//} @end diff --git a/DashWallet/Sources/UI/Menu/Tools/Masternode/Masternode Registration/Models/DWMasternodeRegistrationModel.h b/DashWallet/Sources/UI/Menu/Tools/Masternode/Masternode Registration/Models/DWMasternodeRegistrationModel.h index 5e3dadaf6..98324f163 100644 --- a/DashWallet/Sources/UI/Menu/Tools/Masternode/Masternode Registration/Models/DWMasternodeRegistrationModel.h +++ b/DashWallet/Sources/UI/Menu/Tools/Masternode/Masternode Registration/Models/DWMasternodeRegistrationModel.h @@ -21,23 +21,23 @@ NS_ASSUME_NONNULL_BEGIN @interface DWMasternodeRegistrationModel : NSObject -@property (nonatomic,strong) NSData* ownerPublicKeyData; -@property (nonatomic,strong) NSData* operatorPublicKeyData; -@property (nonatomic,strong) NSData* votingPublicKeyData; +@property (nonatomic, strong) NSData *ownerPublicKeyData; +@property (nonatomic, strong) NSData *operatorPublicKeyData; +@property (nonatomic, strong) NSData *votingPublicKeyData; -@property (nonatomic,assign) uint32_t ownerPublicKeyIndex; -@property (nonatomic,assign) uint32_t operatorPublicKeyIndex; -@property (nonatomic,assign) uint32_t votingPublicKeyIndex; +@property (nonatomic, assign) uint32_t ownerPublicKeyIndex; +@property (nonatomic, assign) uint32_t operatorPublicKeyIndex; +@property (nonatomic, assign) uint32_t votingPublicKeyIndex; -@property (nonatomic,assign) NSString * ipAddress; -@property (nonatomic,assign) uint16_t port; +@property (nonatomic, assign) NSString *ipAddress; +@property (nonatomic, assign) uint16_t port; -@property (nonatomic,strong) NSData * collateralTransactionHashData; -@property (nonatomic,assign) uint16_t collateralIndex; +@property (nonatomic, strong) NSData *collateralTransactionHashData; +@property (nonatomic, assign) uint16_t collateralIndex; -@property (nonatomic,strong) NSString * payoutAddress; +@property (nonatomic, strong) NSString *payoutAddress; -- (instancetype)initForWallet:(DSWallet*)wallet NS_DESIGNATED_INITIALIZER; +- (instancetype)initForWallet:(DSWallet *)wallet NS_DESIGNATED_INITIALIZER; - (instancetype)init NS_UNAVAILABLE; diff --git a/DashWallet/Sources/UI/Menu/Tools/Masternode/Masternode Registration/Models/DWMasternodeRegistrationModel.m b/DashWallet/Sources/UI/Menu/Tools/Masternode/Masternode Registration/Models/DWMasternodeRegistrationModel.m index 6d6350c06..5c64acb26 100644 --- a/DashWallet/Sources/UI/Menu/Tools/Masternode/Masternode Registration/Models/DWMasternodeRegistrationModel.m +++ b/DashWallet/Sources/UI/Menu/Tools/Masternode/Masternode Registration/Models/DWMasternodeRegistrationModel.m @@ -17,9 +17,9 @@ #import "DWMasternodeRegistrationModel.h" -@interface DWMasternodeRegistrationModel() +@interface DWMasternodeRegistrationModel () -@property (nonatomic,strong) DSWallet* wallet; +@property (nonatomic, strong) DSWallet *wallet; @property (readonly, nonatomic, strong) DSAuthenticationKeysDerivationPath *ownerDerivationPath; @property (readonly, nonatomic, strong) DSAuthenticationKeysDerivationPath *votingDerivationPath; @property (readonly, nonatomic, strong) DSAuthenticationKeysDerivationPath *operatorDerivationPath; @@ -28,7 +28,7 @@ @interface DWMasternodeRegistrationModel() @implementation DWMasternodeRegistrationModel -- (instancetype)initForWallet:(DSWallet*)wallet { +- (instancetype)initForWallet:(DSWallet *)wallet { self = [super init]; if (self) { _wallet = wallet; @@ -41,36 +41,36 @@ - (instancetype)initForWallet:(DSWallet*)wallet { return self; } --(void)setOperatorPublicKeyIndex:(uint32_t)operatorPublicKeyIndex { +- (void)setOperatorPublicKeyIndex:(uint32_t)operatorPublicKeyIndex { _operatorPublicKeyIndex = operatorPublicKeyIndex; _operatorPublicKeyData = [self.operatorDerivationPath publicKeyDataAtIndex:operatorPublicKeyIndex]; } --(void)setOwnerPublicKeyIndex:(uint32_t)ownerPublicKeyIndex { +- (void)setOwnerPublicKeyIndex:(uint32_t)ownerPublicKeyIndex { _ownerPublicKeyIndex = ownerPublicKeyIndex; _ownerPublicKeyData = [self.ownerDerivationPath publicKeyDataAtIndex:ownerPublicKeyIndex]; } --(void)setVotingPublicKeyIndex:(uint32_t)votingPublicKeyIndex { +- (void)setVotingPublicKeyIndex:(uint32_t)votingPublicKeyIndex { _votingPublicKeyIndex = votingPublicKeyIndex; _votingPublicKeyData = [self.votingDerivationPath publicKeyDataAtIndex:votingPublicKeyIndex]; } --(void)setOperatorPublicKeyData:(NSData *)operatorPublicKeyData { +- (void)setOperatorPublicKeyData:(NSData *)operatorPublicKeyData { _operatorPublicKeyData = operatorPublicKeyData; - NSString * address = [DSKey addressWithPublicKeyData:operatorPublicKeyData forChain:_wallet.chain]; + NSString *address = [DSKey addressWithPublicKeyData:operatorPublicKeyData forChain:_wallet.chain]; _operatorPublicKeyIndex = [self.operatorDerivationPath indexOfKnownAddress:address]; } --(void)setOwnerPublicKeyData:(NSData *)ownerPublicKeyData { +- (void)setOwnerPublicKeyData:(NSData *)ownerPublicKeyData { _ownerPublicKeyData = ownerPublicKeyData; - NSString * address = [DSKey addressWithPublicKeyData:ownerPublicKeyData forChain:_wallet.chain]; + NSString *address = [DSKey addressWithPublicKeyData:ownerPublicKeyData forChain:_wallet.chain]; _ownerPublicKeyIndex = [self.ownerDerivationPath indexOfKnownAddress:address]; } --(void)setVotingPublicKeyData:(NSData *)votingPublicKeyData { +- (void)setVotingPublicKeyData:(NSData *)votingPublicKeyData { _votingPublicKeyData = votingPublicKeyData; - NSString * address = [DSKey addressWithPublicKeyData:votingPublicKeyData forChain:_wallet.chain]; + NSString *address = [DSKey addressWithPublicKeyData:votingPublicKeyData forChain:_wallet.chain]; _votingPublicKeyIndex = [self.votingDerivationPath indexOfKnownAddress:address]; } diff --git a/DashWallet/ar.lproj/Localizable.strings b/DashWallet/ar.lproj/Localizable.strings index d50bf0e7b..1b30636f0 100644 --- a/DashWallet/ar.lproj/Localizable.strings +++ b/DashWallet/ar.lproj/Localizable.strings @@ -185,6 +185,12 @@ /* No comment provided by engineer. */ "Coinbase Transaction" = "Coinbase Transaction"; +/* No comment provided by engineer. */ +"Collateral Index" = "Collateral Index"; + +/* No comment provided by engineer. */ +"Collateral Tx" = "Collateral Tx"; + /* Confirm */ "Confirm" = "تأكد"; @@ -419,6 +425,9 @@ /* No comment provided by engineer. */ "Invalid amount" = "Invalid amount"; +/* No comment provided by engineer. */ +"IP Address" = "IP Address"; + /* No comment provided by engineer. */ "IP address/port:" = "IP address/port:"; @@ -602,6 +611,9 @@ /* No comment provided by engineer. */ "Operator Keys" = "Operator Keys"; +/* No comment provided by engineer. */ +"Operator Public Key" = "Operator Public Key"; + /* No comment provided by engineer. */ "Owner Address" = "Owner Address"; @@ -614,6 +626,9 @@ /* No comment provided by engineer. */ "Owner Keys" = "Owner Keys"; +/* No comment provided by engineer. */ +"Owner Public Key" = "Owner Public Key"; + /* No comment provided by engineer. */ "Paid successfully" = "Paid successfully"; @@ -677,6 +692,9 @@ /* No comment provided by engineer. */ "Please write it down" = "Please write it down"; +/* No comment provided by engineer. */ +"Port" = "Port"; + /* No comment provided by engineer. */ "Previously last used at IP address" = "Previously last used at IP address"; @@ -752,6 +770,9 @@ /* No comment provided by engineer. */ "Registered Masternode" = "Registered Masternode"; +/* No comment provided by engineer. */ +"Registration" = "Registration"; + /* No comment provided by engineer. */ "Registration tx:" = "Registration tx:"; @@ -1130,6 +1151,9 @@ /* No comment provided by engineer. */ "Voting Keys" = "Voting Keys"; +/* No comment provided by engineer. */ +"Voting Public Key" = "Voting Public Key"; + /* No comment provided by engineer. */ "Wallet address" = "Wallet address"; diff --git a/DashWallet/bg.lproj/Localizable.strings b/DashWallet/bg.lproj/Localizable.strings index 1295ffdba..2e793ccff 100644 --- a/DashWallet/bg.lproj/Localizable.strings +++ b/DashWallet/bg.lproj/Localizable.strings @@ -185,6 +185,12 @@ /* No comment provided by engineer. */ "Coinbase Transaction" = "Coinbase транзакция"; +/* No comment provided by engineer. */ +"Collateral Index" = "Collateral Index"; + +/* No comment provided by engineer. */ +"Collateral Tx" = "Collateral Tx"; + /* Confirm */ "Confirm" = "Потвърди"; @@ -419,6 +425,9 @@ /* No comment provided by engineer. */ "Invalid amount" = "Невалидна сума"; +/* No comment provided by engineer. */ +"IP Address" = "IP Address"; + /* No comment provided by engineer. */ "IP address/port:" = "IP адрес/порт:"; @@ -602,6 +611,9 @@ /* No comment provided by engineer. */ "Operator Keys" = "Операторски ключове"; +/* No comment provided by engineer. */ +"Operator Public Key" = "Operator Public Key"; + /* No comment provided by engineer. */ "Owner Address" = "Owner Address"; @@ -614,6 +626,9 @@ /* No comment provided by engineer. */ "Owner Keys" = "Ключове на собственика"; +/* No comment provided by engineer. */ +"Owner Public Key" = "Owner Public Key"; + /* No comment provided by engineer. */ "Paid successfully" = "Paid successfully"; @@ -677,6 +692,9 @@ /* No comment provided by engineer. */ "Please write it down" = "Please write it down"; +/* No comment provided by engineer. */ +"Port" = "Port"; + /* No comment provided by engineer. */ "Previously last used at IP address" = "Previously last used at IP address"; @@ -752,6 +770,9 @@ /* No comment provided by engineer. */ "Registered Masternode" = "Registered Masternode"; +/* No comment provided by engineer. */ +"Registration" = "Registration"; + /* No comment provided by engineer. */ "Registration tx:" = "Registration tx:"; @@ -1130,6 +1151,9 @@ /* No comment provided by engineer. */ "Voting Keys" = "Ключове за гласуване"; +/* No comment provided by engineer. */ +"Voting Public Key" = "Voting Public Key"; + /* No comment provided by engineer. */ "Wallet address" = "Wallet address"; diff --git a/DashWallet/de.lproj/Localizable.strings b/DashWallet/de.lproj/Localizable.strings index 6f5798efb..aeffa47c9 100644 --- a/DashWallet/de.lproj/Localizable.strings +++ b/DashWallet/de.lproj/Localizable.strings @@ -185,6 +185,12 @@ /* No comment provided by engineer. */ "Coinbase Transaction" = "Coinbase-Transaktion"; +/* No comment provided by engineer. */ +"Collateral Index" = "Collateral Index"; + +/* No comment provided by engineer. */ +"Collateral Tx" = "Collateral Tx"; + /* Confirm */ "Confirm" = "Bestätigen"; @@ -419,6 +425,9 @@ /* No comment provided by engineer. */ "Invalid amount" = "Ungültiger Betrag"; +/* No comment provided by engineer. */ +"IP Address" = "IP Address"; + /* No comment provided by engineer. */ "IP address/port:" = "IP-Adresse/Port:"; @@ -602,6 +611,9 @@ /* No comment provided by engineer. */ "Operator Keys" = "Betreiber-Schlüssel"; +/* No comment provided by engineer. */ +"Operator Public Key" = "Operator Public Key"; + /* No comment provided by engineer. */ "Owner Address" = "Owner Address"; @@ -614,6 +626,9 @@ /* No comment provided by engineer. */ "Owner Keys" = "Besitzer-Schlüssel"; +/* No comment provided by engineer. */ +"Owner Public Key" = "Owner Public Key"; + /* No comment provided by engineer. */ "Paid successfully" = "Paid successfully"; @@ -677,6 +692,9 @@ /* No comment provided by engineer. */ "Please write it down" = "Please write it down"; +/* No comment provided by engineer. */ +"Port" = "Port"; + /* No comment provided by engineer. */ "Previously last used at IP address" = "Previously last used at IP address"; @@ -752,6 +770,9 @@ /* No comment provided by engineer. */ "Registered Masternode" = "Registered Masternode"; +/* No comment provided by engineer. */ +"Registration" = "Registration"; + /* No comment provided by engineer. */ "Registration tx:" = "Registration tx:"; @@ -1130,6 +1151,9 @@ /* No comment provided by engineer. */ "Voting Keys" = "Abstimmungs-Schlüssel"; +/* No comment provided by engineer. */ +"Voting Public Key" = "Voting Public Key"; + /* No comment provided by engineer. */ "Wallet address" = "Wallet address"; diff --git a/DashWallet/el.lproj/Localizable.strings b/DashWallet/el.lproj/Localizable.strings index e5b9e277f..a8388954e 100644 --- a/DashWallet/el.lproj/Localizable.strings +++ b/DashWallet/el.lproj/Localizable.strings @@ -185,6 +185,12 @@ /* No comment provided by engineer. */ "Coinbase Transaction" = "Coinbase Transaction"; +/* No comment provided by engineer. */ +"Collateral Index" = "Collateral Index"; + +/* No comment provided by engineer. */ +"Collateral Tx" = "Collateral Tx"; + /* Confirm */ "Confirm" = "Confirm"; @@ -419,6 +425,9 @@ /* No comment provided by engineer. */ "Invalid amount" = "Invalid amount"; +/* No comment provided by engineer. */ +"IP Address" = "IP Address"; + /* No comment provided by engineer. */ "IP address/port:" = "IP address/port:"; @@ -602,6 +611,9 @@ /* No comment provided by engineer. */ "Operator Keys" = "Operator Keys"; +/* No comment provided by engineer. */ +"Operator Public Key" = "Operator Public Key"; + /* No comment provided by engineer. */ "Owner Address" = "Owner Address"; @@ -614,6 +626,9 @@ /* No comment provided by engineer. */ "Owner Keys" = "Owner Keys"; +/* No comment provided by engineer. */ +"Owner Public Key" = "Owner Public Key"; + /* No comment provided by engineer. */ "Paid successfully" = "Paid successfully"; @@ -677,6 +692,9 @@ /* No comment provided by engineer. */ "Please write it down" = "Please write it down"; +/* No comment provided by engineer. */ +"Port" = "Port"; + /* No comment provided by engineer. */ "Previously last used at IP address" = "Previously last used at IP address"; @@ -752,6 +770,9 @@ /* No comment provided by engineer. */ "Registered Masternode" = "Registered Masternode"; +/* No comment provided by engineer. */ +"Registration" = "Registration"; + /* No comment provided by engineer. */ "Registration tx:" = "Registration tx:"; @@ -1130,6 +1151,9 @@ /* No comment provided by engineer. */ "Voting Keys" = "Voting Keys"; +/* No comment provided by engineer. */ +"Voting Public Key" = "Voting Public Key"; + /* No comment provided by engineer. */ "Wallet address" = "Wallet address"; diff --git a/DashWallet/en.lproj/Localizable.strings b/DashWallet/en.lproj/Localizable.strings index fa0607068..e106687f4 100644 --- a/DashWallet/en.lproj/Localizable.strings +++ b/DashWallet/en.lproj/Localizable.strings @@ -185,6 +185,12 @@ /* No comment provided by engineer. */ "Coinbase Transaction" = "Coinbase Transaction"; +/* No comment provided by engineer. */ +"Collateral Index" = "Collateral Index"; + +/* No comment provided by engineer. */ +"Collateral Tx" = "Collateral Tx"; + /* Confirm */ "Confirm" = "Confirm"; @@ -419,6 +425,9 @@ /* No comment provided by engineer. */ "Invalid amount" = "Invalid amount"; +/* No comment provided by engineer. */ +"IP Address" = "IP Address"; + /* No comment provided by engineer. */ "IP address/port:" = "IP address/port:"; @@ -602,6 +611,9 @@ /* No comment provided by engineer. */ "Operator Keys" = "Operator Keys"; +/* No comment provided by engineer. */ +"Operator Public Key" = "Operator Public Key"; + /* No comment provided by engineer. */ "Owner Address" = "Owner Address"; @@ -614,6 +626,9 @@ /* No comment provided by engineer. */ "Owner Keys" = "Owner Keys"; +/* No comment provided by engineer. */ +"Owner Public Key" = "Owner Public Key"; + /* No comment provided by engineer. */ "Paid successfully" = "Paid successfully"; @@ -677,6 +692,9 @@ /* No comment provided by engineer. */ "Please write it down" = "Please write it down"; +/* No comment provided by engineer. */ +"Port" = "Port"; + /* No comment provided by engineer. */ "Previously last used at IP address" = "Previously last used at IP address"; @@ -752,6 +770,9 @@ /* No comment provided by engineer. */ "Registered Masternode" = "Registered Masternode"; +/* No comment provided by engineer. */ +"Registration" = "Registration"; + /* No comment provided by engineer. */ "Registration tx:" = "Registration tx:"; @@ -1130,6 +1151,9 @@ /* No comment provided by engineer. */ "Voting Keys" = "Voting Keys"; +/* No comment provided by engineer. */ +"Voting Public Key" = "Voting Public Key"; + /* No comment provided by engineer. */ "Wallet address" = "Wallet address"; diff --git a/DashWallet/es.lproj/Localizable.strings b/DashWallet/es.lproj/Localizable.strings index 1e75bc7eb..6ea013e1e 100644 --- a/DashWallet/es.lproj/Localizable.strings +++ b/DashWallet/es.lproj/Localizable.strings @@ -185,6 +185,12 @@ /* No comment provided by engineer. */ "Coinbase Transaction" = "Transacción de Coinbase"; +/* No comment provided by engineer. */ +"Collateral Index" = "Collateral Index"; + +/* No comment provided by engineer. */ +"Collateral Tx" = "Collateral Tx"; + /* Confirm */ "Confirm" = "Confirmar"; @@ -419,6 +425,9 @@ /* No comment provided by engineer. */ "Invalid amount" = "Monto inválido"; +/* No comment provided by engineer. */ +"IP Address" = "IP Address"; + /* No comment provided by engineer. */ "IP address/port:" = "Dirección IP/puerto:"; @@ -602,6 +611,9 @@ /* No comment provided by engineer. */ "Operator Keys" = "Llaves de operador"; +/* No comment provided by engineer. */ +"Operator Public Key" = "Operator Public Key"; + /* No comment provided by engineer. */ "Owner Address" = "Owner Address"; @@ -614,6 +626,9 @@ /* No comment provided by engineer. */ "Owner Keys" = "Llaves del propietario"; +/* No comment provided by engineer. */ +"Owner Public Key" = "Owner Public Key"; + /* No comment provided by engineer. */ "Paid successfully" = "Paid successfully"; @@ -677,6 +692,9 @@ /* No comment provided by engineer. */ "Please write it down" = "Please write it down"; +/* No comment provided by engineer. */ +"Port" = "Port"; + /* No comment provided by engineer. */ "Previously last used at IP address" = "Previously last used at IP address"; @@ -752,6 +770,9 @@ /* No comment provided by engineer. */ "Registered Masternode" = "Registered Masternode"; +/* No comment provided by engineer. */ +"Registration" = "Registration"; + /* No comment provided by engineer. */ "Registration tx:" = "Registration tx:"; @@ -1130,6 +1151,9 @@ /* No comment provided by engineer. */ "Voting Keys" = "Llaves para votar"; +/* No comment provided by engineer. */ +"Voting Public Key" = "Voting Public Key"; + /* No comment provided by engineer. */ "Wallet address" = "Wallet address"; diff --git a/DashWallet/fr.lproj/Localizable.strings b/DashWallet/fr.lproj/Localizable.strings index da813259e..73a086393 100644 --- a/DashWallet/fr.lproj/Localizable.strings +++ b/DashWallet/fr.lproj/Localizable.strings @@ -185,6 +185,12 @@ /* No comment provided by engineer. */ "Coinbase Transaction" = "Transaction coinbase"; +/* No comment provided by engineer. */ +"Collateral Index" = "Collateral Index"; + +/* No comment provided by engineer. */ +"Collateral Tx" = "Collateral Tx"; + /* Confirm */ "Confirm" = "Confirmer"; @@ -419,6 +425,9 @@ /* No comment provided by engineer. */ "Invalid amount" = "Montant invalide"; +/* No comment provided by engineer. */ +"IP Address" = "IP Address"; + /* No comment provided by engineer. */ "IP address/port:" = "Adresse IP/port :"; @@ -602,6 +611,9 @@ /* No comment provided by engineer. */ "Operator Keys" = "Clés d'opérateur"; +/* No comment provided by engineer. */ +"Operator Public Key" = "Operator Public Key"; + /* No comment provided by engineer. */ "Owner Address" = "Owner Address"; @@ -614,6 +626,9 @@ /* No comment provided by engineer. */ "Owner Keys" = "Clés de propriétaire"; +/* No comment provided by engineer. */ +"Owner Public Key" = "Owner Public Key"; + /* No comment provided by engineer. */ "Paid successfully" = "Paid successfully"; @@ -677,6 +692,9 @@ /* No comment provided by engineer. */ "Please write it down" = "Please write it down"; +/* No comment provided by engineer. */ +"Port" = "Port"; + /* No comment provided by engineer. */ "Previously last used at IP address" = "Previously last used at IP address"; @@ -752,6 +770,9 @@ /* No comment provided by engineer. */ "Registered Masternode" = "Registered Masternode"; +/* No comment provided by engineer. */ +"Registration" = "Registration"; + /* No comment provided by engineer. */ "Registration tx:" = "Registration tx:"; @@ -1130,6 +1151,9 @@ /* No comment provided by engineer. */ "Voting Keys" = "Clés de vote"; +/* No comment provided by engineer. */ +"Voting Public Key" = "Voting Public Key"; + /* No comment provided by engineer. */ "Wallet address" = "Wallet address"; diff --git a/DashWallet/id.lproj/Localizable.strings b/DashWallet/id.lproj/Localizable.strings index 31bdbc37e..eb20d3ff7 100644 --- a/DashWallet/id.lproj/Localizable.strings +++ b/DashWallet/id.lproj/Localizable.strings @@ -185,6 +185,12 @@ /* No comment provided by engineer. */ "Coinbase Transaction" = "Transaksi Coinbase"; +/* No comment provided by engineer. */ +"Collateral Index" = "Collateral Index"; + +/* No comment provided by engineer. */ +"Collateral Tx" = "Collateral Tx"; + /* Confirm */ "Confirm" = "Memastikan"; @@ -419,6 +425,9 @@ /* No comment provided by engineer. */ "Invalid amount" = "Jumlah tidak valid"; +/* No comment provided by engineer. */ +"IP Address" = "IP Address"; + /* No comment provided by engineer. */ "IP address/port:" = "Alamat IP/port:"; @@ -602,6 +611,9 @@ /* No comment provided by engineer. */ "Operator Keys" = "Kunci Operator"; +/* No comment provided by engineer. */ +"Operator Public Key" = "Operator Public Key"; + /* No comment provided by engineer. */ "Owner Address" = "Owner Address"; @@ -614,6 +626,9 @@ /* No comment provided by engineer. */ "Owner Keys" = "Kunci Pemilik"; +/* No comment provided by engineer. */ +"Owner Public Key" = "Owner Public Key"; + /* No comment provided by engineer. */ "Paid successfully" = "Paid successfully"; @@ -677,6 +692,9 @@ /* No comment provided by engineer. */ "Please write it down" = "Please write it down"; +/* No comment provided by engineer. */ +"Port" = "Port"; + /* No comment provided by engineer. */ "Previously last used at IP address" = "Previously last used at IP address"; @@ -752,6 +770,9 @@ /* No comment provided by engineer. */ "Registered Masternode" = "Registered Masternode"; +/* No comment provided by engineer. */ +"Registration" = "Registration"; + /* No comment provided by engineer. */ "Registration tx:" = "Registration tx:"; @@ -1130,6 +1151,9 @@ /* No comment provided by engineer. */ "Voting Keys" = "Kunci pemungutan suara"; +/* No comment provided by engineer. */ +"Voting Public Key" = "Voting Public Key"; + /* No comment provided by engineer. */ "Wallet address" = "Wallet address"; diff --git a/DashWallet/it.lproj/Localizable.strings b/DashWallet/it.lproj/Localizable.strings index 49172cddc..6757d32f9 100644 --- a/DashWallet/it.lproj/Localizable.strings +++ b/DashWallet/it.lproj/Localizable.strings @@ -185,6 +185,12 @@ /* No comment provided by engineer. */ "Coinbase Transaction" = "Transazione Coinbase"; +/* No comment provided by engineer. */ +"Collateral Index" = "Collateral Index"; + +/* No comment provided by engineer. */ +"Collateral Tx" = "Collateral Tx"; + /* Confirm */ "Confirm" = "Conferma"; @@ -419,6 +425,9 @@ /* No comment provided by engineer. */ "Invalid amount" = "Importo non valido"; +/* No comment provided by engineer. */ +"IP Address" = "IP Address"; + /* No comment provided by engineer. */ "IP address/port:" = "IP address/port:"; @@ -602,6 +611,9 @@ /* No comment provided by engineer. */ "Operator Keys" = "Chiavi operatore:"; +/* No comment provided by engineer. */ +"Operator Public Key" = "Operator Public Key"; + /* No comment provided by engineer. */ "Owner Address" = "Owner Address"; @@ -614,6 +626,9 @@ /* No comment provided by engineer. */ "Owner Keys" = "Chiavi proprietario"; +/* No comment provided by engineer. */ +"Owner Public Key" = "Owner Public Key"; + /* No comment provided by engineer. */ "Paid successfully" = "Paid successfully"; @@ -677,6 +692,9 @@ /* No comment provided by engineer. */ "Please write it down" = "Please write it down"; +/* No comment provided by engineer. */ +"Port" = "Port"; + /* No comment provided by engineer. */ "Previously last used at IP address" = "Previously last used at IP address"; @@ -752,6 +770,9 @@ /* No comment provided by engineer. */ "Registered Masternode" = "Registered Masternode"; +/* No comment provided by engineer. */ +"Registration" = "Registration"; + /* No comment provided by engineer. */ "Registration tx:" = "Registration tx:"; @@ -1130,6 +1151,9 @@ /* No comment provided by engineer. */ "Voting Keys" = "Chiavi di Voto"; +/* No comment provided by engineer. */ +"Voting Public Key" = "Voting Public Key"; + /* No comment provided by engineer. */ "Wallet address" = "Wallet address"; diff --git a/DashWallet/ja.lproj/Localizable.strings b/DashWallet/ja.lproj/Localizable.strings index ce306a0be..787ca4089 100644 --- a/DashWallet/ja.lproj/Localizable.strings +++ b/DashWallet/ja.lproj/Localizable.strings @@ -185,6 +185,12 @@ /* No comment provided by engineer. */ "Coinbase Transaction" = "コインベースの取引"; +/* No comment provided by engineer. */ +"Collateral Index" = "Collateral Index"; + +/* No comment provided by engineer. */ +"Collateral Tx" = "Collateral Tx"; + /* Confirm */ "Confirm" = "承認"; @@ -419,6 +425,9 @@ /* No comment provided by engineer. */ "Invalid amount" = "無効な金額"; +/* No comment provided by engineer. */ +"IP Address" = "IP Address"; + /* No comment provided by engineer. */ "IP address/port:" = "IP アドレス/ポート:"; @@ -602,6 +611,9 @@ /* No comment provided by engineer. */ "Operator Keys" = "運用者の諸々のキー"; +/* No comment provided by engineer. */ +"Operator Public Key" = "Operator Public Key"; + /* No comment provided by engineer. */ "Owner Address" = "Owner Address"; @@ -614,6 +626,9 @@ /* No comment provided by engineer. */ "Owner Keys" = "所有者の諸々のキー"; +/* No comment provided by engineer. */ +"Owner Public Key" = "Owner Public Key"; + /* No comment provided by engineer. */ "Paid successfully" = "Paid successfully"; @@ -677,6 +692,9 @@ /* No comment provided by engineer. */ "Please write it down" = "Please write it down"; +/* No comment provided by engineer. */ +"Port" = "Port"; + /* No comment provided by engineer. */ "Previously last used at IP address" = "Previously last used at IP address"; @@ -752,6 +770,9 @@ /* No comment provided by engineer. */ "Registered Masternode" = "Registered Masternode"; +/* No comment provided by engineer. */ +"Registration" = "Registration"; + /* No comment provided by engineer. */ "Registration tx:" = "Registration tx:"; @@ -1130,6 +1151,9 @@ /* No comment provided by engineer. */ "Voting Keys" = "投票の諸々のキー"; +/* No comment provided by engineer. */ +"Voting Public Key" = "Voting Public Key"; + /* No comment provided by engineer. */ "Wallet address" = "Wallet address"; diff --git a/DashWallet/ko.lproj/Localizable.strings b/DashWallet/ko.lproj/Localizable.strings index 656f636c7..8b45ffa5b 100644 --- a/DashWallet/ko.lproj/Localizable.strings +++ b/DashWallet/ko.lproj/Localizable.strings @@ -185,6 +185,12 @@ /* No comment provided by engineer. */ "Coinbase Transaction" = "코인베이스 거래"; +/* No comment provided by engineer. */ +"Collateral Index" = "Collateral Index"; + +/* No comment provided by engineer. */ +"Collateral Tx" = "Collateral Tx"; + /* Confirm */ "Confirm" = "승인"; @@ -419,6 +425,9 @@ /* No comment provided by engineer. */ "Invalid amount" = "유효하지 않은 금액"; +/* No comment provided by engineer. */ +"IP Address" = "IP Address"; + /* No comment provided by engineer. */ "IP address/port:" = "IP 주소/포트:"; @@ -602,6 +611,9 @@ /* No comment provided by engineer. */ "Operator Keys" = "운영자 키"; +/* No comment provided by engineer. */ +"Operator Public Key" = "Operator Public Key"; + /* No comment provided by engineer. */ "Owner Address" = "Owner Address"; @@ -614,6 +626,9 @@ /* No comment provided by engineer. */ "Owner Keys" = "소유자 키"; +/* No comment provided by engineer. */ +"Owner Public Key" = "Owner Public Key"; + /* No comment provided by engineer. */ "Paid successfully" = "Paid successfully"; @@ -677,6 +692,9 @@ /* No comment provided by engineer. */ "Please write it down" = "Please write it down"; +/* No comment provided by engineer. */ +"Port" = "Port"; + /* No comment provided by engineer. */ "Previously last used at IP address" = "Previously last used at IP address"; @@ -752,6 +770,9 @@ /* No comment provided by engineer. */ "Registered Masternode" = "Registered Masternode"; +/* No comment provided by engineer. */ +"Registration" = "Registration"; + /* No comment provided by engineer. */ "Registration tx:" = "Registration tx:"; @@ -1130,6 +1151,9 @@ /* No comment provided by engineer. */ "Voting Keys" = "투표 키"; +/* No comment provided by engineer. */ +"Voting Public Key" = "Voting Public Key"; + /* No comment provided by engineer. */ "Wallet address" = "Wallet address"; diff --git a/DashWallet/nb.lproj/Localizable.strings b/DashWallet/nb.lproj/Localizable.strings index 1b37eabd3..f37d2f109 100644 --- a/DashWallet/nb.lproj/Localizable.strings +++ b/DashWallet/nb.lproj/Localizable.strings @@ -185,6 +185,12 @@ /* No comment provided by engineer. */ "Coinbase Transaction" = "Coinbase Transaction"; +/* No comment provided by engineer. */ +"Collateral Index" = "Collateral Index"; + +/* No comment provided by engineer. */ +"Collateral Tx" = "Collateral Tx"; + /* Confirm */ "Confirm" = "Confirm"; @@ -419,6 +425,9 @@ /* No comment provided by engineer. */ "Invalid amount" = "Invalid amount"; +/* No comment provided by engineer. */ +"IP Address" = "IP Address"; + /* No comment provided by engineer. */ "IP address/port:" = "IP address/port:"; @@ -602,6 +611,9 @@ /* No comment provided by engineer. */ "Operator Keys" = "Operator Keys"; +/* No comment provided by engineer. */ +"Operator Public Key" = "Operator Public Key"; + /* No comment provided by engineer. */ "Owner Address" = "Owner Address"; @@ -614,6 +626,9 @@ /* No comment provided by engineer. */ "Owner Keys" = "Owner Keys"; +/* No comment provided by engineer. */ +"Owner Public Key" = "Owner Public Key"; + /* No comment provided by engineer. */ "Paid successfully" = "Paid successfully"; @@ -677,6 +692,9 @@ /* No comment provided by engineer. */ "Please write it down" = "Please write it down"; +/* No comment provided by engineer. */ +"Port" = "Port"; + /* No comment provided by engineer. */ "Previously last used at IP address" = "Previously last used at IP address"; @@ -752,6 +770,9 @@ /* No comment provided by engineer. */ "Registered Masternode" = "Registered Masternode"; +/* No comment provided by engineer. */ +"Registration" = "Registration"; + /* No comment provided by engineer. */ "Registration tx:" = "Registration tx:"; @@ -1130,6 +1151,9 @@ /* No comment provided by engineer. */ "Voting Keys" = "Voting Keys"; +/* No comment provided by engineer. */ +"Voting Public Key" = "Voting Public Key"; + /* No comment provided by engineer. */ "Wallet address" = "Wallet address"; diff --git a/DashWallet/nl.lproj/Localizable.strings b/DashWallet/nl.lproj/Localizable.strings index ae98e34a9..e27629615 100644 --- a/DashWallet/nl.lproj/Localizable.strings +++ b/DashWallet/nl.lproj/Localizable.strings @@ -185,6 +185,12 @@ /* No comment provided by engineer. */ "Coinbase Transaction" = "Coinbase Transaction"; +/* No comment provided by engineer. */ +"Collateral Index" = "Collateral Index"; + +/* No comment provided by engineer. */ +"Collateral Tx" = "Collateral Tx"; + /* Confirm */ "Confirm" = "Bevestig"; @@ -419,6 +425,9 @@ /* No comment provided by engineer. */ "Invalid amount" = "Ongeldig bedrag"; +/* No comment provided by engineer. */ +"IP Address" = "IP Address"; + /* No comment provided by engineer. */ "IP address/port:" = "IP adres/port:"; @@ -602,6 +611,9 @@ /* No comment provided by engineer. */ "Operator Keys" = "Operator sleutels"; +/* No comment provided by engineer. */ +"Operator Public Key" = "Operator Public Key"; + /* No comment provided by engineer. */ "Owner Address" = "Owner Address"; @@ -614,6 +626,9 @@ /* No comment provided by engineer. */ "Owner Keys" = "Eigenaar sleutels"; +/* No comment provided by engineer. */ +"Owner Public Key" = "Owner Public Key"; + /* No comment provided by engineer. */ "Paid successfully" = "Paid successfully"; @@ -677,6 +692,9 @@ /* No comment provided by engineer. */ "Please write it down" = "Please write it down"; +/* No comment provided by engineer. */ +"Port" = "Port"; + /* No comment provided by engineer. */ "Previously last used at IP address" = "Previously last used at IP address"; @@ -752,6 +770,9 @@ /* No comment provided by engineer. */ "Registered Masternode" = "Registered Masternode"; +/* No comment provided by engineer. */ +"Registration" = "Registration"; + /* No comment provided by engineer. */ "Registration tx:" = "Registration tx:"; @@ -1130,6 +1151,9 @@ /* No comment provided by engineer. */ "Voting Keys" = "Stem sleutels"; +/* No comment provided by engineer. */ +"Voting Public Key" = "Voting Public Key"; + /* No comment provided by engineer. */ "Wallet address" = "Wallet address"; diff --git a/DashWallet/pl.lproj/Localizable.strings b/DashWallet/pl.lproj/Localizable.strings index 3aa80666a..09fc46069 100644 --- a/DashWallet/pl.lproj/Localizable.strings +++ b/DashWallet/pl.lproj/Localizable.strings @@ -185,6 +185,12 @@ /* No comment provided by engineer. */ "Coinbase Transaction" = "Transakcja coinbase"; +/* No comment provided by engineer. */ +"Collateral Index" = "Collateral Index"; + +/* No comment provided by engineer. */ +"Collateral Tx" = "Collateral Tx"; + /* Confirm */ "Confirm" = "Potwierdź"; @@ -419,6 +425,9 @@ /* No comment provided by engineer. */ "Invalid amount" = "Niewłaściwa ilość"; +/* No comment provided by engineer. */ +"IP Address" = "IP Address"; + /* No comment provided by engineer. */ "IP address/port:" = "IP adres/port:"; @@ -602,6 +611,9 @@ /* No comment provided by engineer. */ "Operator Keys" = "Klucze operatora"; +/* No comment provided by engineer. */ +"Operator Public Key" = "Operator Public Key"; + /* No comment provided by engineer. */ "Owner Address" = "Owner Address"; @@ -614,6 +626,9 @@ /* No comment provided by engineer. */ "Owner Keys" = "Klucze właściciela"; +/* No comment provided by engineer. */ +"Owner Public Key" = "Owner Public Key"; + /* No comment provided by engineer. */ "Paid successfully" = "Paid successfully"; @@ -677,6 +692,9 @@ /* No comment provided by engineer. */ "Please write it down" = "Please write it down"; +/* No comment provided by engineer. */ +"Port" = "Port"; + /* No comment provided by engineer. */ "Previously last used at IP address" = "Previously last used at IP address"; @@ -752,6 +770,9 @@ /* No comment provided by engineer. */ "Registered Masternode" = "Registered Masternode"; +/* No comment provided by engineer. */ +"Registration" = "Registration"; + /* No comment provided by engineer. */ "Registration tx:" = "Registration tx:"; @@ -1130,6 +1151,9 @@ /* No comment provided by engineer. */ "Voting Keys" = "Klucze głosujące"; +/* No comment provided by engineer. */ +"Voting Public Key" = "Voting Public Key"; + /* No comment provided by engineer. */ "Wallet address" = "Wallet address"; diff --git a/DashWallet/pt.lproj/Localizable.strings b/DashWallet/pt.lproj/Localizable.strings index 763e6679e..3832f64a2 100644 --- a/DashWallet/pt.lproj/Localizable.strings +++ b/DashWallet/pt.lproj/Localizable.strings @@ -185,6 +185,12 @@ /* No comment provided by engineer. */ "Coinbase Transaction" = "Transação Minerada"; +/* No comment provided by engineer. */ +"Collateral Index" = "Collateral Index"; + +/* No comment provided by engineer. */ +"Collateral Tx" = "Collateral Tx"; + /* Confirm */ "Confirm" = "Confirme"; @@ -419,6 +425,9 @@ /* No comment provided by engineer. */ "Invalid amount" = "Valor inválido"; +/* No comment provided by engineer. */ +"IP Address" = "IP Address"; + /* No comment provided by engineer. */ "IP address/port:" = "IP endereço/porta:"; @@ -602,6 +611,9 @@ /* No comment provided by engineer. */ "Operator Keys" = "Chaves do Operador"; +/* No comment provided by engineer. */ +"Operator Public Key" = "Operator Public Key"; + /* No comment provided by engineer. */ "Owner Address" = "Owner Address"; @@ -614,6 +626,9 @@ /* No comment provided by engineer. */ "Owner Keys" = "Chaves do Proprietário"; +/* No comment provided by engineer. */ +"Owner Public Key" = "Owner Public Key"; + /* No comment provided by engineer. */ "Paid successfully" = "Paid successfully"; @@ -677,6 +692,9 @@ /* No comment provided by engineer. */ "Please write it down" = "Please write it down"; +/* No comment provided by engineer. */ +"Port" = "Port"; + /* No comment provided by engineer. */ "Previously last used at IP address" = "Previously last used at IP address"; @@ -752,6 +770,9 @@ /* No comment provided by engineer. */ "Registered Masternode" = "Registered Masternode"; +/* No comment provided by engineer. */ +"Registration" = "Registration"; + /* No comment provided by engineer. */ "Registration tx:" = "Registration tx:"; @@ -1130,6 +1151,9 @@ /* No comment provided by engineer. */ "Voting Keys" = "Chaves de Votação"; +/* No comment provided by engineer. */ +"Voting Public Key" = "Voting Public Key"; + /* No comment provided by engineer. */ "Wallet address" = "Wallet address"; diff --git a/DashWallet/ru.lproj/Localizable.strings b/DashWallet/ru.lproj/Localizable.strings index 9958c3511..6ee2d5e05 100644 --- a/DashWallet/ru.lproj/Localizable.strings +++ b/DashWallet/ru.lproj/Localizable.strings @@ -185,6 +185,12 @@ /* No comment provided by engineer. */ "Coinbase Transaction" = "Транзакция Coinbase"; +/* No comment provided by engineer. */ +"Collateral Index" = "Collateral Index"; + +/* No comment provided by engineer. */ +"Collateral Tx" = "Collateral Tx"; + /* Confirm */ "Confirm" = "Подтвердить"; @@ -419,6 +425,9 @@ /* No comment provided by engineer. */ "Invalid amount" = "Некорректная сумма"; +/* No comment provided by engineer. */ +"IP Address" = "IP Address"; + /* No comment provided by engineer. */ "IP address/port:" = "IP-адрес/порт:"; @@ -602,6 +611,9 @@ /* No comment provided by engineer. */ "Operator Keys" = "Ключи оператора"; +/* No comment provided by engineer. */ +"Operator Public Key" = "Operator Public Key"; + /* No comment provided by engineer. */ "Owner Address" = "Owner Address"; @@ -614,6 +626,9 @@ /* No comment provided by engineer. */ "Owner Keys" = "Ключи владельца"; +/* No comment provided by engineer. */ +"Owner Public Key" = "Owner Public Key"; + /* No comment provided by engineer. */ "Paid successfully" = "Paid successfully"; @@ -677,6 +692,9 @@ /* No comment provided by engineer. */ "Please write it down" = "Please write it down"; +/* No comment provided by engineer. */ +"Port" = "Port"; + /* No comment provided by engineer. */ "Previously last used at IP address" = "Previously last used at IP address"; @@ -752,6 +770,9 @@ /* No comment provided by engineer. */ "Registered Masternode" = "Registered Masternode"; +/* No comment provided by engineer. */ +"Registration" = "Registration"; + /* No comment provided by engineer. */ "Registration tx:" = "Registration tx:"; @@ -1130,6 +1151,9 @@ /* No comment provided by engineer. */ "Voting Keys" = "Ключи голосования"; +/* No comment provided by engineer. */ +"Voting Public Key" = "Voting Public Key"; + /* No comment provided by engineer. */ "Wallet address" = "Wallet address"; diff --git a/DashWallet/sk.lproj/Localizable.strings b/DashWallet/sk.lproj/Localizable.strings index 46f89d33c..d24e6acbe 100644 --- a/DashWallet/sk.lproj/Localizable.strings +++ b/DashWallet/sk.lproj/Localizable.strings @@ -185,6 +185,12 @@ /* No comment provided by engineer. */ "Coinbase Transaction" = "Coinbase Transaction"; +/* No comment provided by engineer. */ +"Collateral Index" = "Collateral Index"; + +/* No comment provided by engineer. */ +"Collateral Tx" = "Collateral Tx"; + /* Confirm */ "Confirm" = "Potvrdiť"; @@ -419,6 +425,9 @@ /* No comment provided by engineer. */ "Invalid amount" = "Invalid amount"; +/* No comment provided by engineer. */ +"IP Address" = "IP Address"; + /* No comment provided by engineer. */ "IP address/port:" = "IP address/port:"; @@ -602,6 +611,9 @@ /* No comment provided by engineer. */ "Operator Keys" = "Operator Keys"; +/* No comment provided by engineer. */ +"Operator Public Key" = "Operator Public Key"; + /* No comment provided by engineer. */ "Owner Address" = "Owner Address"; @@ -614,6 +626,9 @@ /* No comment provided by engineer. */ "Owner Keys" = "Owner Keys"; +/* No comment provided by engineer. */ +"Owner Public Key" = "Owner Public Key"; + /* No comment provided by engineer. */ "Paid successfully" = "Paid successfully"; @@ -677,6 +692,9 @@ /* No comment provided by engineer. */ "Please write it down" = "Please write it down"; +/* No comment provided by engineer. */ +"Port" = "Port"; + /* No comment provided by engineer. */ "Previously last used at IP address" = "Previously last used at IP address"; @@ -752,6 +770,9 @@ /* No comment provided by engineer. */ "Registered Masternode" = "Registered Masternode"; +/* No comment provided by engineer. */ +"Registration" = "Registration"; + /* No comment provided by engineer. */ "Registration tx:" = "Registration tx:"; @@ -1130,6 +1151,9 @@ /* No comment provided by engineer. */ "Voting Keys" = "Voting Keys"; +/* No comment provided by engineer. */ +"Voting Public Key" = "Voting Public Key"; + /* No comment provided by engineer. */ "Wallet address" = "Wallet address"; diff --git a/DashWallet/sq.lproj/Localizable.strings b/DashWallet/sq.lproj/Localizable.strings index e8992916a..e2a652fa2 100644 --- a/DashWallet/sq.lproj/Localizable.strings +++ b/DashWallet/sq.lproj/Localizable.strings @@ -185,6 +185,12 @@ /* No comment provided by engineer. */ "Coinbase Transaction" = "Coinbase Transaction"; +/* No comment provided by engineer. */ +"Collateral Index" = "Collateral Index"; + +/* No comment provided by engineer. */ +"Collateral Tx" = "Collateral Tx"; + /* Confirm */ "Confirm" = "Confirm"; @@ -419,6 +425,9 @@ /* No comment provided by engineer. */ "Invalid amount" = "Invalid amount"; +/* No comment provided by engineer. */ +"IP Address" = "IP Address"; + /* No comment provided by engineer. */ "IP address/port:" = "IP address/port:"; @@ -602,6 +611,9 @@ /* No comment provided by engineer. */ "Operator Keys" = "Operator Keys"; +/* No comment provided by engineer. */ +"Operator Public Key" = "Operator Public Key"; + /* No comment provided by engineer. */ "Owner Address" = "Owner Address"; @@ -614,6 +626,9 @@ /* No comment provided by engineer. */ "Owner Keys" = "Owner Keys"; +/* No comment provided by engineer. */ +"Owner Public Key" = "Owner Public Key"; + /* No comment provided by engineer. */ "Paid successfully" = "Paid successfully"; @@ -677,6 +692,9 @@ /* No comment provided by engineer. */ "Please write it down" = "Please write it down"; +/* No comment provided by engineer. */ +"Port" = "Port"; + /* No comment provided by engineer. */ "Previously last used at IP address" = "Previously last used at IP address"; @@ -752,6 +770,9 @@ /* No comment provided by engineer. */ "Registered Masternode" = "Registered Masternode"; +/* No comment provided by engineer. */ +"Registration" = "Registration"; + /* No comment provided by engineer. */ "Registration tx:" = "Registration tx:"; @@ -1130,6 +1151,9 @@ /* No comment provided by engineer. */ "Voting Keys" = "Voting Keys"; +/* No comment provided by engineer. */ +"Voting Public Key" = "Voting Public Key"; + /* No comment provided by engineer. */ "Wallet address" = "Wallet address"; diff --git a/DashWallet/sv.lproj/Localizable.strings b/DashWallet/sv.lproj/Localizable.strings index 8135999d6..f99a1f74e 100644 --- a/DashWallet/sv.lproj/Localizable.strings +++ b/DashWallet/sv.lproj/Localizable.strings @@ -185,6 +185,12 @@ /* No comment provided by engineer. */ "Coinbase Transaction" = "Coinbase Transaction"; +/* No comment provided by engineer. */ +"Collateral Index" = "Collateral Index"; + +/* No comment provided by engineer. */ +"Collateral Tx" = "Collateral Tx"; + /* Confirm */ "Confirm" = "Bekräfta"; @@ -419,6 +425,9 @@ /* No comment provided by engineer. */ "Invalid amount" = "Invalid amount"; +/* No comment provided by engineer. */ +"IP Address" = "IP Address"; + /* No comment provided by engineer. */ "IP address/port:" = "IP address/port:"; @@ -602,6 +611,9 @@ /* No comment provided by engineer. */ "Operator Keys" = "Operator Keys"; +/* No comment provided by engineer. */ +"Operator Public Key" = "Operator Public Key"; + /* No comment provided by engineer. */ "Owner Address" = "Owner Address"; @@ -614,6 +626,9 @@ /* No comment provided by engineer. */ "Owner Keys" = "Owner Keys"; +/* No comment provided by engineer. */ +"Owner Public Key" = "Owner Public Key"; + /* No comment provided by engineer. */ "Paid successfully" = "Paid successfully"; @@ -677,6 +692,9 @@ /* No comment provided by engineer. */ "Please write it down" = "Please write it down"; +/* No comment provided by engineer. */ +"Port" = "Port"; + /* No comment provided by engineer. */ "Previously last used at IP address" = "Previously last used at IP address"; @@ -752,6 +770,9 @@ /* No comment provided by engineer. */ "Registered Masternode" = "Registered Masternode"; +/* No comment provided by engineer. */ +"Registration" = "Registration"; + /* No comment provided by engineer. */ "Registration tx:" = "Registration tx:"; @@ -1130,6 +1151,9 @@ /* No comment provided by engineer. */ "Voting Keys" = "Voting Keys"; +/* No comment provided by engineer. */ +"Voting Public Key" = "Voting Public Key"; + /* No comment provided by engineer. */ "Wallet address" = "Wallet address"; diff --git a/DashWallet/th.lproj/Localizable.strings b/DashWallet/th.lproj/Localizable.strings index 29ec0771d..b8fdad123 100644 --- a/DashWallet/th.lproj/Localizable.strings +++ b/DashWallet/th.lproj/Localizable.strings @@ -185,6 +185,12 @@ /* No comment provided by engineer. */ "Coinbase Transaction" = "ธุรกรรม Coinbase"; +/* No comment provided by engineer. */ +"Collateral Index" = "Collateral Index"; + +/* No comment provided by engineer. */ +"Collateral Tx" = "Collateral Tx"; + /* Confirm */ "Confirm" = "ยืนยัน"; @@ -419,6 +425,9 @@ /* No comment provided by engineer. */ "Invalid amount" = "จำนวนเงินไม่ถูกต้อง"; +/* No comment provided by engineer. */ +"IP Address" = "IP Address"; + /* No comment provided by engineer. */ "IP address/port:" = "ที่อยู่ IP / พอร์ต"; @@ -602,6 +611,9 @@ /* No comment provided by engineer. */ "Operator Keys" = "ตัวดำเนินการ Keys"; +/* No comment provided by engineer. */ +"Operator Public Key" = "Operator Public Key"; + /* No comment provided by engineer. */ "Owner Address" = "Owner Address"; @@ -614,6 +626,9 @@ /* No comment provided by engineer. */ "Owner Keys" = "เจ้าของ Keys"; +/* No comment provided by engineer. */ +"Owner Public Key" = "Owner Public Key"; + /* No comment provided by engineer. */ "Paid successfully" = "Paid successfully"; @@ -677,6 +692,9 @@ /* No comment provided by engineer. */ "Please write it down" = "Please write it down"; +/* No comment provided by engineer. */ +"Port" = "Port"; + /* No comment provided by engineer. */ "Previously last used at IP address" = "Previously last used at IP address"; @@ -752,6 +770,9 @@ /* No comment provided by engineer. */ "Registered Masternode" = "Registered Masternode"; +/* No comment provided by engineer. */ +"Registration" = "Registration"; + /* No comment provided by engineer. */ "Registration tx:" = "Registration tx:"; @@ -1130,6 +1151,9 @@ /* No comment provided by engineer. */ "Voting Keys" = "Voting Keys"; +/* No comment provided by engineer. */ +"Voting Public Key" = "Voting Public Key"; + /* No comment provided by engineer. */ "Wallet address" = "Wallet address"; diff --git a/DashWallet/tr.lproj/Localizable.strings b/DashWallet/tr.lproj/Localizable.strings index 495197227..80e9695bf 100644 --- a/DashWallet/tr.lproj/Localizable.strings +++ b/DashWallet/tr.lproj/Localizable.strings @@ -185,6 +185,12 @@ /* No comment provided by engineer. */ "Coinbase Transaction" = "Coinbase İşlemi"; +/* No comment provided by engineer. */ +"Collateral Index" = "Collateral Index"; + +/* No comment provided by engineer. */ +"Collateral Tx" = "Collateral Tx"; + /* Confirm */ "Confirm" = "Onayla"; @@ -419,6 +425,9 @@ /* No comment provided by engineer. */ "Invalid amount" = "Geçersiz tutar"; +/* No comment provided by engineer. */ +"IP Address" = "IP Address"; + /* No comment provided by engineer. */ "IP address/port:" = "IP adresi/port:"; @@ -602,6 +611,9 @@ /* No comment provided by engineer. */ "Operator Keys" = "Operatör Anahtarları"; +/* No comment provided by engineer. */ +"Operator Public Key" = "Operator Public Key"; + /* No comment provided by engineer. */ "Owner Address" = "Owner Address"; @@ -614,6 +626,9 @@ /* No comment provided by engineer. */ "Owner Keys" = "Sahip Anahtarları"; +/* No comment provided by engineer. */ +"Owner Public Key" = "Owner Public Key"; + /* No comment provided by engineer. */ "Paid successfully" = "Paid successfully"; @@ -677,6 +692,9 @@ /* No comment provided by engineer. */ "Please write it down" = "Please write it down"; +/* No comment provided by engineer. */ +"Port" = "Port"; + /* No comment provided by engineer. */ "Previously last used at IP address" = "Previously last used at IP address"; @@ -752,6 +770,9 @@ /* No comment provided by engineer. */ "Registered Masternode" = "Registered Masternode"; +/* No comment provided by engineer. */ +"Registration" = "Registration"; + /* No comment provided by engineer. */ "Registration tx:" = "Registration tx:"; @@ -1130,6 +1151,9 @@ /* No comment provided by engineer. */ "Voting Keys" = "Oy Verme Anahtarları"; +/* No comment provided by engineer. */ +"Voting Public Key" = "Voting Public Key"; + /* No comment provided by engineer. */ "Wallet address" = "Wallet address"; diff --git a/DashWallet/vi.lproj/Localizable.strings b/DashWallet/vi.lproj/Localizable.strings index b2e883a20..4a93afc2a 100644 --- a/DashWallet/vi.lproj/Localizable.strings +++ b/DashWallet/vi.lproj/Localizable.strings @@ -185,6 +185,12 @@ /* No comment provided by engineer. */ "Coinbase Transaction" = "Giao dịch sinh coin"; +/* No comment provided by engineer. */ +"Collateral Index" = "Collateral Index"; + +/* No comment provided by engineer. */ +"Collateral Tx" = "Collateral Tx"; + /* Confirm */ "Confirm" = "Xác thực"; @@ -419,6 +425,9 @@ /* No comment provided by engineer. */ "Invalid amount" = "Số tiền không hợp lệ"; +/* No comment provided by engineer. */ +"IP Address" = "IP Address"; + /* No comment provided by engineer. */ "IP address/port:" = "Địa chỉ IP/cổng:"; @@ -602,6 +611,9 @@ /* No comment provided by engineer. */ "Operator Keys" = "Chìa khoá của người vận hành"; +/* No comment provided by engineer. */ +"Operator Public Key" = "Operator Public Key"; + /* No comment provided by engineer. */ "Owner Address" = "Owner Address"; @@ -614,6 +626,9 @@ /* No comment provided by engineer. */ "Owner Keys" = "Khoá của chủ sở hữu"; +/* No comment provided by engineer. */ +"Owner Public Key" = "Owner Public Key"; + /* No comment provided by engineer. */ "Paid successfully" = "Paid successfully"; @@ -677,6 +692,9 @@ /* No comment provided by engineer. */ "Please write it down" = "Please write it down"; +/* No comment provided by engineer. */ +"Port" = "Port"; + /* No comment provided by engineer. */ "Previously last used at IP address" = "Previously last used at IP address"; @@ -752,6 +770,9 @@ /* No comment provided by engineer. */ "Registered Masternode" = "Registered Masternode"; +/* No comment provided by engineer. */ +"Registration" = "Registration"; + /* No comment provided by engineer. */ "Registration tx:" = "Registration tx:"; @@ -1130,6 +1151,9 @@ /* No comment provided by engineer. */ "Voting Keys" = "Khoá bỏ phiếu"; +/* No comment provided by engineer. */ +"Voting Public Key" = "Voting Public Key"; + /* No comment provided by engineer. */ "Wallet address" = "Wallet address"; diff --git a/DashWallet/zh-Hans.lproj/Localizable.strings b/DashWallet/zh-Hans.lproj/Localizable.strings index c8b1abfcc..ce2c0e42d 100644 --- a/DashWallet/zh-Hans.lproj/Localizable.strings +++ b/DashWallet/zh-Hans.lproj/Localizable.strings @@ -185,6 +185,12 @@ /* No comment provided by engineer. */ "Coinbase Transaction" = "Coinbase Transaction"; +/* No comment provided by engineer. */ +"Collateral Index" = "Collateral Index"; + +/* No comment provided by engineer. */ +"Collateral Tx" = "Collateral Tx"; + /* Confirm */ "Confirm" = "确认"; @@ -419,6 +425,9 @@ /* No comment provided by engineer. */ "Invalid amount" = "Invalid amount"; +/* No comment provided by engineer. */ +"IP Address" = "IP Address"; + /* No comment provided by engineer. */ "IP address/port:" = "IP address/port:"; @@ -602,6 +611,9 @@ /* No comment provided by engineer. */ "Operator Keys" = "Operator Keys"; +/* No comment provided by engineer. */ +"Operator Public Key" = "Operator Public Key"; + /* No comment provided by engineer. */ "Owner Address" = "Owner Address"; @@ -614,6 +626,9 @@ /* No comment provided by engineer. */ "Owner Keys" = "Owner Keys"; +/* No comment provided by engineer. */ +"Owner Public Key" = "Owner Public Key"; + /* No comment provided by engineer. */ "Paid successfully" = "Paid successfully"; @@ -677,6 +692,9 @@ /* No comment provided by engineer. */ "Please write it down" = "Please write it down"; +/* No comment provided by engineer. */ +"Port" = "Port"; + /* No comment provided by engineer. */ "Previously last used at IP address" = "Previously last used at IP address"; @@ -752,6 +770,9 @@ /* No comment provided by engineer. */ "Registered Masternode" = "Registered Masternode"; +/* No comment provided by engineer. */ +"Registration" = "Registration"; + /* No comment provided by engineer. */ "Registration tx:" = "Registration tx:"; @@ -1130,6 +1151,9 @@ /* No comment provided by engineer. */ "Voting Keys" = "Voting Keys"; +/* No comment provided by engineer. */ +"Voting Public Key" = "Voting Public Key"; + /* No comment provided by engineer. */ "Wallet address" = "Wallet address"; diff --git a/DashWallet/zh-Hant-TW.lproj/Localizable.strings b/DashWallet/zh-Hant-TW.lproj/Localizable.strings index a03729ca6..bf375bbea 100644 --- a/DashWallet/zh-Hant-TW.lproj/Localizable.strings +++ b/DashWallet/zh-Hant-TW.lproj/Localizable.strings @@ -185,6 +185,12 @@ /* No comment provided by engineer. */ "Coinbase Transaction" = "Coinbase Transaction"; +/* No comment provided by engineer. */ +"Collateral Index" = "Collateral Index"; + +/* No comment provided by engineer. */ +"Collateral Tx" = "Collateral Tx"; + /* Confirm */ "Confirm" = "確認:"; @@ -419,6 +425,9 @@ /* No comment provided by engineer. */ "Invalid amount" = "Invalid amount"; +/* No comment provided by engineer. */ +"IP Address" = "IP Address"; + /* No comment provided by engineer. */ "IP address/port:" = "IP address/port:"; @@ -602,6 +611,9 @@ /* No comment provided by engineer. */ "Operator Keys" = "Operator Keys"; +/* No comment provided by engineer. */ +"Operator Public Key" = "Operator Public Key"; + /* No comment provided by engineer. */ "Owner Address" = "Owner Address"; @@ -614,6 +626,9 @@ /* No comment provided by engineer. */ "Owner Keys" = "Owner Keys"; +/* No comment provided by engineer. */ +"Owner Public Key" = "Owner Public Key"; + /* No comment provided by engineer. */ "Paid successfully" = "Paid successfully"; @@ -677,6 +692,9 @@ /* No comment provided by engineer. */ "Please write it down" = "Please write it down"; +/* No comment provided by engineer. */ +"Port" = "Port"; + /* No comment provided by engineer. */ "Previously last used at IP address" = "Previously last used at IP address"; @@ -752,6 +770,9 @@ /* No comment provided by engineer. */ "Registered Masternode" = "Registered Masternode"; +/* No comment provided by engineer. */ +"Registration" = "Registration"; + /* No comment provided by engineer. */ "Registration tx:" = "Registration tx:"; @@ -1130,6 +1151,9 @@ /* No comment provided by engineer. */ "Voting Keys" = "Voting Keys"; +/* No comment provided by engineer. */ +"Voting Public Key" = "Voting Public Key"; + /* No comment provided by engineer. */ "Wallet address" = "Wallet address"; From 4b1aaa03317cae9b017a031c518d4a60c786f7ce Mon Sep 17 00:00:00 2001 From: Quantum Explorer Date: Mon, 11 Nov 2019 08:04:31 +0800 Subject: [PATCH 18/34] registration screen initial draft --- DashWallet.xcodeproj/project.pbxproj | 20 + .../Menu/Forms/Action/DWActionFormCellModel.h | 28 ++ .../Menu/Forms/Action/DWActionFormCellModel.m | 26 ++ .../Forms/Action/DWActionFormTableViewCell.h | 29 ++ .../Forms/Action/DWActionFormTableViewCell.m | 86 +++++ .../UI/Menu/Forms/DWBaseFormTableViewCell.h | 3 + .../UI/Menu/Forms/DWBaseFormTableViewCell.m | 3 + .../UI/Menu/Forms/DWFormTableViewController.h | 1 + .../UI/Menu/Forms/DWFormTableViewController.m | 15 + .../Forms/KeyValue/DWKeyValueFormCellModel.h | 4 + .../Forms/KeyValue/DWKeyValueFormCellModel.m | 9 + .../KeyValue/DWKeyValueFormTableViewCell.m | 66 +++- .../ImportWallet/ImportWalletInfo.storyboard | 6 +- .../DWRegisterMasternodeViewController.h | 3 +- .../DWRegisterMasternodeViewController.m | 356 ++++++------------ .../Models/DWMasternodeRegistrationModel.h | 25 +- .../Models/DWMasternodeRegistrationModel.m | 198 ++++++++-- DashWallet/ar.lproj/Localizable.strings | 52 ++- DashWallet/bg.lproj/Localizable.strings | 52 ++- DashWallet/de.lproj/Localizable.strings | 52 ++- DashWallet/el.lproj/Localizable.strings | 52 ++- DashWallet/en.lproj/Localizable.strings | 52 ++- DashWallet/es.lproj/Localizable.strings | 52 ++- DashWallet/fr.lproj/Localizable.strings | 52 ++- DashWallet/id.lproj/Localizable.strings | 52 ++- DashWallet/it.lproj/Localizable.strings | 52 ++- DashWallet/ja.lproj/Localizable.strings | 52 ++- DashWallet/ko.lproj/Localizable.strings | 52 ++- DashWallet/nb.lproj/Localizable.strings | 52 ++- DashWallet/nl.lproj/Localizable.strings | 52 ++- DashWallet/pl.lproj/Localizable.strings | 52 ++- DashWallet/pt.lproj/Localizable.strings | 52 ++- DashWallet/ru.lproj/Localizable.strings | 52 ++- DashWallet/sk.lproj/Localizable.strings | 52 ++- DashWallet/sq.lproj/Localizable.strings | 52 ++- DashWallet/sv.lproj/Localizable.strings | 52 ++- DashWallet/th.lproj/Localizable.strings | 52 ++- DashWallet/tr.lproj/Localizable.strings | 52 ++- DashWallet/vi.lproj/Localizable.strings | 52 ++- DashWallet/zh-Hans.lproj/Localizable.strings | 52 ++- .../zh-Hant-TW.lproj/Localizable.strings | 52 ++- 41 files changed, 1785 insertions(+), 341 deletions(-) create mode 100644 DashWallet/Sources/UI/Menu/Forms/Action/DWActionFormCellModel.h create mode 100644 DashWallet/Sources/UI/Menu/Forms/Action/DWActionFormCellModel.m create mode 100644 DashWallet/Sources/UI/Menu/Forms/Action/DWActionFormTableViewCell.h create mode 100644 DashWallet/Sources/UI/Menu/Forms/Action/DWActionFormTableViewCell.m diff --git a/DashWallet.xcodeproj/project.pbxproj b/DashWallet.xcodeproj/project.pbxproj index a086cd5a8..ad26daa05 100644 --- a/DashWallet.xcodeproj/project.pbxproj +++ b/DashWallet.xcodeproj/project.pbxproj @@ -378,6 +378,8 @@ EDB1F696FF79C137CE47192F /* libPods-WatchApp Extension.a in Frameworks */ = {isa = PBXBuildFile; fileRef = C47D5A9D319D41B450A9B96B /* libPods-WatchApp Extension.a */; }; FB021E561E47E17200D17638 /* FBShimmeringLayer.m in Sources */ = {isa = PBXBuildFile; fileRef = FB021E531E47E17200D17638 /* FBShimmeringLayer.m */; }; FB021E571E47E17200D17638 /* FBShimmeringView.m in Sources */ = {isa = PBXBuildFile; fileRef = FB021E551E47E17200D17638 /* FBShimmeringView.m */; }; + FB031ADB2378832100EF564B /* DWActionFormCellModel.m in Sources */ = {isa = PBXBuildFile; fileRef = FB031AD72378832100EF564B /* DWActionFormCellModel.m */; }; + FB031ADE2378834200EF564B /* DWActionFormTableViewCell.m in Sources */ = {isa = PBXBuildFile; fileRef = FB031ADD2378834200EF564B /* DWActionFormTableViewCell.m */; }; FB1BF8C722C6F4B7003413C6 /* DWSignMessageViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = FB1BF8C622C6F4B7003413C6 /* DWSignMessageViewController.m */; }; FB1BF8C822C7FBD0003413C6 /* DWAmountInputValidator.m in Sources */ = {isa = PBXBuildFile; fileRef = 2A2120E92214566A009906DC /* DWAmountInputValidator.m */; }; FB1BF8C922C7FBD4003413C6 /* DWAmountObject.m in Sources */ = {isa = PBXBuildFile; fileRef = 2A2120EF22147A40009906DC /* DWAmountObject.m */; }; @@ -1277,6 +1279,10 @@ FB021E531E47E17200D17638 /* FBShimmeringLayer.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = FBShimmeringLayer.m; sourceTree = ""; }; FB021E541E47E17200D17638 /* FBShimmeringView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = FBShimmeringView.h; sourceTree = ""; }; FB021E551E47E17200D17638 /* FBShimmeringView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = FBShimmeringView.m; sourceTree = ""; }; + FB031AD72378832100EF564B /* DWActionFormCellModel.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = DWActionFormCellModel.m; sourceTree = ""; }; + FB031AD82378832100EF564B /* DWActionFormTableViewCell.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DWActionFormTableViewCell.h; sourceTree = ""; }; + FB031AD92378832100EF564B /* DWActionFormCellModel.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DWActionFormCellModel.h; sourceTree = ""; }; + FB031ADD2378834200EF564B /* DWActionFormTableViewCell.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = DWActionFormTableViewCell.m; sourceTree = ""; }; FB0ACB9D1F9AB76800F4AB52 /* bg */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = bg; path = bg.lproj/Main.strings; sourceTree = ""; }; FB0ACB9E1F9AB76800F4AB52 /* bg */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.strings; name = bg; path = bg.lproj/Localizable.strings; sourceTree = ""; }; FB0ACB9F1F9ABB6200F4AB52 /* vi */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = vi; path = vi.lproj/Main.strings; sourceTree = ""; }; @@ -2489,6 +2495,7 @@ 2A9FFE262230FF4600956D5F /* Forms */ = { isa = PBXGroup; children = ( + FB031AD62378832100EF564B /* Action */, FBCFEDF7236FCDE50086DE07 /* PublicKeyGeneration */, FBCFEDF0236F8C770086DE07 /* KeyValue */, 2A9FFE382230FF4600956D5F /* Placeholder */, @@ -3284,6 +3291,17 @@ path = FBShimmering; sourceTree = SOURCE_ROOT; }; + FB031AD62378832100EF564B /* Action */ = { + isa = PBXGroup; + children = ( + FB031AD92378832100EF564B /* DWActionFormCellModel.h */, + FB031AD72378832100EF564B /* DWActionFormCellModel.m */, + FB031AD82378832100EF564B /* DWActionFormTableViewCell.h */, + FB031ADD2378834200EF564B /* DWActionFormTableViewCell.m */, + ); + path = Action; + sourceTree = ""; + }; FB1C3DC1236AD2B1004C2B05 /* Masternode Control */ = { isa = PBXGroup; children = ( @@ -4200,6 +4218,7 @@ FB31C256223BD3F600BD0868 /* DWRegisterMasternodeViewController.m in Sources */, 2A9FFE8D2230FF4700956D5F /* DWSettingsViewController.m in Sources */, 2A0C69C623142AA4001B8C90 /* DWModalPresentationController.m in Sources */, + FB031ADB2378832100EF564B /* DWActionFormCellModel.m in Sources */, 2A9FFF1C2233E56E00956D5F /* DWUpholdCardCellModel.m in Sources */, 2ACCD86823195A3600A96B62 /* DWAmountPreviewView.m in Sources */, 2A7A7BC92347E0D700451078 /* DWBaseFormTableViewCell.m in Sources */, @@ -4358,6 +4377,7 @@ 2AD1CE9722DD0E8E00C99324 /* DWSeedWordModel+DWLayoutSupport.m in Sources */, 2A8F420F21BEE95D00858B91 /* DWAboutViewController.m in Sources */, 2A7A7BCD2347F01B00451078 /* DWSecurityMenuViewController.m in Sources */, + FB031ADE2378834200EF564B /* DWActionFormTableViewCell.m in Sources */, 2A4E534B22F03A9E00E5168A /* DWTxListHeaderView.m in Sources */, 759FBB37193290F600AB4465 /* DWSendViewController.m in Sources */, 2AB66DD223546746007BE825 /* DWTxDetailListView.m in Sources */, diff --git a/DashWallet/Sources/UI/Menu/Forms/Action/DWActionFormCellModel.h b/DashWallet/Sources/UI/Menu/Forms/Action/DWActionFormCellModel.h new file mode 100644 index 000000000..17f5a1fe7 --- /dev/null +++ b/DashWallet/Sources/UI/Menu/Forms/Action/DWActionFormCellModel.h @@ -0,0 +1,28 @@ +// +// Created by Andrew Podkovyrin +// Copyright © 2018 Dash Core Group. All rights reserved. +// +// Licensed under the MIT License (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://opensource.org/licenses/MIT +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// + +#import "DWBaseFormCellModel.h" + +NS_ASSUME_NONNULL_BEGIN + +@interface DWActionFormCellModel : DWBaseFormCellModel + +@property (nullable, copy, nonatomic) void (^didSelectBlock)(DWActionFormCellModel *cellModel, NSIndexPath *indexPath); + +@end + +NS_ASSUME_NONNULL_END diff --git a/DashWallet/Sources/UI/Menu/Forms/Action/DWActionFormCellModel.m b/DashWallet/Sources/UI/Menu/Forms/Action/DWActionFormCellModel.m new file mode 100644 index 000000000..2f7198c5c --- /dev/null +++ b/DashWallet/Sources/UI/Menu/Forms/Action/DWActionFormCellModel.m @@ -0,0 +1,26 @@ +// +// Created by Andrew Podkovyrin +// Copyright © 2018 Dash Core Group. All rights reserved. +// +// Licensed under the MIT License (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://opensource.org/licenses/MIT +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// + +#import "DWActionFormCellModel.h" + +NS_ASSUME_NONNULL_BEGIN + +@implementation DWActionFormCellModel + +@end + +NS_ASSUME_NONNULL_END diff --git a/DashWallet/Sources/UI/Menu/Forms/Action/DWActionFormTableViewCell.h b/DashWallet/Sources/UI/Menu/Forms/Action/DWActionFormTableViewCell.h new file mode 100644 index 000000000..22bac8756 --- /dev/null +++ b/DashWallet/Sources/UI/Menu/Forms/Action/DWActionFormTableViewCell.h @@ -0,0 +1,29 @@ +// +// Created by Andrew Podkovyrin +// Copyright © 2018 Dash Core Group. All rights reserved. +// +// Licensed under the MIT License (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://opensource.org/licenses/MIT +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// + +#import "DWActionFormCellModel.h" +#import "DWBaseFormTableViewCell.h" + +NS_ASSUME_NONNULL_BEGIN + +@interface DWActionFormTableViewCell : DWBaseFormTableViewCell + +@property (nullable, strong, nonatomic) DWActionFormCellModel *cellModel; + +@end + +NS_ASSUME_NONNULL_END diff --git a/DashWallet/Sources/UI/Menu/Forms/Action/DWActionFormTableViewCell.m b/DashWallet/Sources/UI/Menu/Forms/Action/DWActionFormTableViewCell.m new file mode 100644 index 000000000..2f57e0e55 --- /dev/null +++ b/DashWallet/Sources/UI/Menu/Forms/Action/DWActionFormTableViewCell.m @@ -0,0 +1,86 @@ +// +// Created by Andrew Podkovyrin +// Copyright © 2018 Dash Core Group. All rights reserved. +// +// Licensed under the MIT License (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://opensource.org/licenses/MIT +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// + +#import "DWActionFormTableViewCell.h" + +#import "DWSharedUIConstants.h" +#import "DWUIKit.h" + +NS_ASSUME_NONNULL_BEGIN + +@interface DWActionFormTableViewCell () + +@property (readonly, nonatomic, strong) UILabel *titleLabel; + +@end + +@implementation DWActionFormTableViewCell + +- (instancetype)initWithStyle:(UITableViewCellStyle)style + reuseIdentifier:(nullable NSString *)reuseIdentifier { + self = [super initWithStyle:style reuseIdentifier:reuseIdentifier]; + if (self) { + UIView *contentView = self.roundedContentView; + contentView.backgroundColor = [UIColor dw_dashBlueColor]; + NSParameterAssert(contentView); + + UILabel *titleLabel = [[UILabel alloc] initWithFrame:CGRectZero]; + titleLabel.translatesAutoresizingMaskIntoConstraints = NO; + titleLabel.backgroundColor = [UIColor clearColor]; + titleLabel.textAlignment = NSTextAlignmentCenter; + titleLabel.textColor = [UIColor dw_lightTitleColor]; + titleLabel.numberOfLines = 0; + titleLabel.lineBreakMode = NSLineBreakByWordWrapping; + titleLabel.font = [UIFont dw_fontForTextStyle:UIFontTextStyleSubheadline]; + titleLabel.adjustsFontForContentSizeCategory = YES; + titleLabel.minimumScaleFactor = 0.5; + titleLabel.adjustsFontSizeToFitWidth = YES; + [titleLabel setContentCompressionResistancePriority:UILayoutPriorityRequired - 2 + forAxis:UILayoutConstraintAxisVertical]; + [contentView addSubview:titleLabel]; + _titleLabel = titleLabel; + + const CGFloat margin = DWDefaultMargin(); + const CGFloat padding = DW_FORM_CELL_VERTICAL_PADDING; + + [NSLayoutConstraint activateConstraints:@[ + [titleLabel.topAnchor constraintEqualToAnchor:contentView.topAnchor + constant:padding], + [titleLabel.leadingAnchor constraintEqualToAnchor:contentView.leadingAnchor + constant:margin], + [titleLabel.bottomAnchor constraintEqualToAnchor:contentView.bottomAnchor + constant:-padding], + [titleLabel.trailingAnchor constraintEqualToAnchor:contentView.trailingAnchor + constant:-margin], + ]]; + + [self setupObserving]; + } + + return self; +} + +- (void)setupObserving { + [self mvvm_observe:DW_KEYPATH(self, cellModel.title) + with:^(__typeof(self) self, NSString *value) { + self.titleLabel.text = value ?: @" "; + }]; +} + +@end + +NS_ASSUME_NONNULL_END diff --git a/DashWallet/Sources/UI/Menu/Forms/DWBaseFormTableViewCell.h b/DashWallet/Sources/UI/Menu/Forms/DWBaseFormTableViewCell.h index 9157636e2..60dba928d 100644 --- a/DashWallet/Sources/UI/Menu/Forms/DWBaseFormTableViewCell.h +++ b/DashWallet/Sources/UI/Menu/Forms/DWBaseFormTableViewCell.h @@ -20,7 +20,10 @@ NS_ASSUME_NONNULL_BEGIN extern CGFloat const DW_FORM_CELL_VERTICAL_PADDING; +extern CGFloat const DW_FORM_CELL_TWOLINE_VERTICAL_PADDING; extern CGFloat const DW_FORM_CELL_SPACING; +extern CGFloat const DW_FORM_CELL_TWOLINE_CONTENT_VERTICAL_SPACING; + @interface DWBaseFormTableViewCell : KVOUITableViewCell diff --git a/DashWallet/Sources/UI/Menu/Forms/DWBaseFormTableViewCell.m b/DashWallet/Sources/UI/Menu/Forms/DWBaseFormTableViewCell.m index f2735b501..cd342fdd9 100644 --- a/DashWallet/Sources/UI/Menu/Forms/DWBaseFormTableViewCell.m +++ b/DashWallet/Sources/UI/Menu/Forms/DWBaseFormTableViewCell.m @@ -25,6 +25,9 @@ CGFloat const DW_FORM_CELL_VERTICAL_PADDING = 24.0; CGFloat const DW_FORM_CELL_SPACING = 10.0; +CGFloat const DW_FORM_CELL_TWOLINE_VERTICAL_PADDING = 16.0; +CGFloat const DW_FORM_CELL_TWOLINE_CONTENT_VERTICAL_SPACING = 8.0; + static CGFloat const CORNER_RADIUS = 8.0; static CGFloat const CONTENT_VERTICAL_PADDING = 5.0; diff --git a/DashWallet/Sources/UI/Menu/Forms/DWFormTableViewController.h b/DashWallet/Sources/UI/Menu/Forms/DWFormTableViewController.h index f28c261ef..297ca0d58 100644 --- a/DashWallet/Sources/UI/Menu/Forms/DWFormTableViewController.h +++ b/DashWallet/Sources/UI/Menu/Forms/DWFormTableViewController.h @@ -16,6 +16,7 @@ // #import +#import "DWActionFormCellModel.h" #import "DWFormSectionModel.h" #import "DWKeyValueFormCellModel.h" #import "DWPublicKeyGenerationCellModel.h" diff --git a/DashWallet/Sources/UI/Menu/Forms/DWFormTableViewController.m b/DashWallet/Sources/UI/Menu/Forms/DWFormTableViewController.m index 875d11481..69fb81799 100644 --- a/DashWallet/Sources/UI/Menu/Forms/DWFormTableViewController.m +++ b/DashWallet/Sources/UI/Menu/Forms/DWFormTableViewController.m @@ -17,6 +17,7 @@ #import "DWFormTableViewController.h" +#import "DWActionFormTableViewCell.h" #import "DWKeyValueFormTableViewCell.h" #import "DWPlaceholderFormTableViewCell.h" #import "DWPublicKeyGenerationTableViewCell.h" @@ -54,6 +55,7 @@ - (void)viewDidLoad { DWPlaceholderFormTableViewCell.class, DWKeyValueFormTableViewCell.class, DWPublicKeyGenerationTableViewCell.class, + DWActionFormTableViewCell.class, ]; for (Class cellClass in cellClasses) { @@ -140,6 +142,13 @@ - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(N cell.cellModel = (DWPlaceholderFormCellModel *)cellModel; return cell; } + else if ([cellModel isKindOfClass:DWActionFormCellModel.class]) { + NSString *cellId = NSStringFromClass(DWActionFormTableViewCell.class); + DWActionFormTableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:cellId + forIndexPath:indexPath]; + cell.cellModel = (DWActionFormCellModel *)cellModel; + return cell; + } else { NSAssert(NO, @"Unknown cell model %@", cellModel); @@ -178,6 +187,12 @@ - (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath selectorCellModel.didSelectBlock(selectorCellModel, indexPath); } } + else if ([cellModel isKindOfClass:DWActionFormCellModel.class]) { + DWActionFormCellModel *actionCellModel = (DWActionFormCellModel *)cellModel; + if (actionCellModel.didSelectBlock) { + actionCellModel.didSelectBlock(actionCellModel, indexPath); + } + } else if ([cellModel isKindOfClass:DWSwitcherFormCellModel.class]) { DWSwitcherFormCellModel *switcherCellModel = (DWSwitcherFormCellModel *)cellModel; switcherCellModel.on = !switcherCellModel.on; diff --git a/DashWallet/Sources/UI/Menu/Forms/KeyValue/DWKeyValueFormCellModel.h b/DashWallet/Sources/UI/Menu/Forms/KeyValue/DWKeyValueFormCellModel.h index 0b1df69c7..01c16b249 100644 --- a/DashWallet/Sources/UI/Menu/Forms/KeyValue/DWKeyValueFormCellModel.h +++ b/DashWallet/Sources/UI/Menu/Forms/KeyValue/DWKeyValueFormCellModel.h @@ -21,10 +21,14 @@ NS_ASSUME_NONNULL_BEGIN @interface DWKeyValueFormCellModel : DWBaseFormCellModel +@property (readonly, nonatomic) NSString *placeholderText; @property (copy, nonatomic) NSString *valueText; +@property (copy, nonatomic) NSAttributedString *actionText; @property (nullable, copy, nonatomic) void (^didChangeValueBlock)(DWKeyValueFormCellModel *cellModel); +@property (nullable, copy, nonatomic) void (^actionBlock)(void); - (instancetype)initWithTitle:(nullable NSString *)title valueText:(NSString *)valueText NS_DESIGNATED_INITIALIZER; +- (instancetype)initWithTitle:(nullable NSString *)title valueText:(NSString *)valueText placeholderText:(NSString *)placeholderText actionText:(NSAttributedString *)actionText; @end diff --git a/DashWallet/Sources/UI/Menu/Forms/KeyValue/DWKeyValueFormCellModel.m b/DashWallet/Sources/UI/Menu/Forms/KeyValue/DWKeyValueFormCellModel.m index b51d4e8bc..2781be0dc 100644 --- a/DashWallet/Sources/UI/Menu/Forms/KeyValue/DWKeyValueFormCellModel.m +++ b/DashWallet/Sources/UI/Menu/Forms/KeyValue/DWKeyValueFormCellModel.m @@ -21,6 +21,15 @@ @implementation DWKeyValueFormCellModel +- (instancetype)initWithTitle:(nullable NSString *)title valueText:(NSString *)valueText placeholderText:(NSString *)placeholderText actionText:(nonnull NSAttributedString *)actionText { + self = [self initWithTitle:title valueText:valueText]; + if (self) { + _placeholderText = placeholderText; + _actionText = actionText; + } + return self; +} + - (instancetype)initWithTitle:(nullable NSString *)title valueText:(NSString *)valueText { self = [super initWithTitle:title]; if (self) { diff --git a/DashWallet/Sources/UI/Menu/Forms/KeyValue/DWKeyValueFormTableViewCell.m b/DashWallet/Sources/UI/Menu/Forms/KeyValue/DWKeyValueFormTableViewCell.m index 6bfc144ea..c60143012 100644 --- a/DashWallet/Sources/UI/Menu/Forms/KeyValue/DWKeyValueFormTableViewCell.m +++ b/DashWallet/Sources/UI/Menu/Forms/KeyValue/DWKeyValueFormTableViewCell.m @@ -22,9 +22,12 @@ NS_ASSUME_NONNULL_BEGIN +static CGSize const ACCESSORY_SIZE = {26.0, 26.0}; + @interface DWKeyValueFormTableViewCell () @property (readonly, nonatomic, strong) UILabel *titleLabel; +@property (readonly, nonatomic, strong) UILabel *actionLabel; @property (readonly, nonatomic, strong) UITextField *valueTextField; @end @@ -56,28 +59,59 @@ - (instancetype)initWithStyle:(UITableViewCellStyle)style UITextField *valueTextField = [[UITextField alloc] initWithFrame:CGRectZero]; valueTextField.translatesAutoresizingMaskIntoConstraints = NO; valueTextField.backgroundColor = [UIColor dw_backgroundColor]; - valueTextField.textColor = [UIColor dw_darkTitleColor]; - valueTextField.font = [UIFont dw_fontForTextStyle:UIFontTextStyleCallout]; + valueTextField.textColor = [UIColor dw_tertiaryTextColor]; + valueTextField.font = [UIFont dw_fontForTextStyle:UIFontTextStyleSubheadline]; valueTextField.delegate = self; [contentView addSubview:valueTextField]; _valueTextField = valueTextField; + UILabel *actionLabel = [[UILabel alloc] initWithFrame:CGRectZero]; + actionLabel.translatesAutoresizingMaskIntoConstraints = NO; + actionLabel.backgroundColor = [UIColor dw_backgroundColor]; + actionLabel.textAlignment = NSTextAlignmentRight; + actionLabel.textColor = [UIColor dw_dashBlueColor]; + actionLabel.numberOfLines = 0; + actionLabel.lineBreakMode = NSLineBreakByWordWrapping; + actionLabel.font = [UIFont dw_fontForTextStyle:UIFontTextStyleCallout]; + actionLabel.adjustsFontForContentSizeCategory = YES; + actionLabel.minimumScaleFactor = 0.5; + actionLabel.adjustsFontSizeToFitWidth = YES; + [actionLabel setContentCompressionResistancePriority:UILayoutPriorityRequired - 1 + forAxis:UILayoutConstraintAxisHorizontal]; + [actionLabel setContentCompressionResistancePriority:UILayoutPriorityRequired - 1 + forAxis:UILayoutConstraintAxisVertical]; + [actionLabel setContentHuggingPriority:UILayoutPriorityDefaultLow - 1 + forAxis:UILayoutConstraintAxisHorizontal]; + [contentView addSubview:actionLabel]; + _actionLabel = actionLabel; + const CGFloat margin = DWDefaultMargin(); - const CGFloat padding = DW_FORM_CELL_VERTICAL_PADDING; + const CGFloat padding = DW_FORM_CELL_TWOLINE_VERTICAL_PADDING; [NSLayoutConstraint activateConstraints:@[ [titleLabel.topAnchor constraintEqualToAnchor:contentView.topAnchor constant:padding], [titleLabel.leadingAnchor constraintEqualToAnchor:contentView.leadingAnchor constant:margin], - [titleLabel.bottomAnchor constraintEqualToAnchor:contentView.bottomAnchor - constant:-padding], - [valueTextField.leadingAnchor constraintEqualToAnchor:titleLabel.trailingAnchor - constant:DW_FORM_CELL_SPACING], + [valueTextField.topAnchor constraintEqualToAnchor:titleLabel.bottomAnchor + constant:DW_FORM_CELL_TWOLINE_CONTENT_VERTICAL_SPACING - 4], + [valueTextField.leadingAnchor constraintEqualToAnchor:contentView.leadingAnchor + constant:margin], + [valueTextField.bottomAnchor constraintEqualToAnchor:contentView.bottomAnchor + constant:-padding], [valueTextField.trailingAnchor constraintEqualToAnchor:contentView.trailingAnchor constant:-margin], - [valueTextField.centerYAnchor constraintEqualToAnchor:contentView.centerYAnchor], + + [actionLabel.topAnchor constraintEqualToAnchor:titleLabel.topAnchor + constant:0], + [actionLabel.leadingAnchor constraintEqualToAnchor:titleLabel.trailingAnchor + constant:DW_FORM_CELL_SPACING], + [actionLabel.bottomAnchor constraintEqualToAnchor:titleLabel.bottomAnchor + constant:0], + [actionLabel.trailingAnchor constraintEqualToAnchor:contentView.trailingAnchor + constant:-margin], + ]]; [self setupObserving]; @@ -93,9 +127,23 @@ - (void)setupObserving { [self mvvm_observe:DW_KEYPATH(self, cellModel.valueText) with:^(__typeof(self) self, NSString *value) { - const BOOL animated = self.window != nil; [self.valueTextField setText:value]; }]; + + [self mvvm_observe:DW_KEYPATH(self, cellModel.actionText) + with:^(__typeof(self) self, NSAttributedString *value) { + [self.actionLabel setAttributedText:value]; + }]; +} + +- (void)setCellModel:(nullable DWKeyValueFormCellModel *)cellModel { + _cellModel = cellModel; + if (cellModel.placeholderText) { + [self.valueTextField setPlaceholder:cellModel.placeholderText]; + } + if (cellModel.actionText) { + [self.actionLabel setAttributedText:cellModel.actionText]; + } } - (BOOL)shouldAnimatePressWhenHighlighted { diff --git a/DashWallet/Sources/UI/Menu/Tools/ImportWallet/ImportWalletInfo.storyboard b/DashWallet/Sources/UI/Menu/Tools/ImportWallet/ImportWalletInfo.storyboard index 22179b1c1..a0ec562cd 100644 --- a/DashWallet/Sources/UI/Menu/Tools/ImportWallet/ImportWalletInfo.storyboard +++ b/DashWallet/Sources/UI/Menu/Tools/ImportWallet/ImportWalletInfo.storyboard @@ -1,9 +1,9 @@ - + - + @@ -89,7 +89,7 @@ - + diff --git a/DashWallet/Sources/UI/Menu/Tools/Masternode/Masternode Registration/DWRegisterMasternodeViewController.h b/DashWallet/Sources/UI/Menu/Tools/Masternode/Masternode Registration/DWRegisterMasternodeViewController.h index f33a80d12..21aba4c7f 100644 --- a/DashWallet/Sources/UI/Menu/Tools/Masternode/Masternode Registration/DWRegisterMasternodeViewController.h +++ b/DashWallet/Sources/UI/Menu/Tools/Masternode/Masternode Registration/DWRegisterMasternodeViewController.h @@ -7,11 +7,12 @@ // #import "DWSignPayloadViewController.h" +#import #import NS_ASSUME_NONNULL_BEGIN -@interface DWRegisterMasternodeViewController : UIViewController +@interface DWRegisterMasternodeViewController : KVOUIViewController - (instancetype)initWithNibName:(nullable NSString *)nibNameOrNil bundle:(nullable NSBundle *)nibBundleOrNil NS_UNAVAILABLE; - (nullable instancetype)initWithCoder:(NSCoder *)coder NS_UNAVAILABLE; diff --git a/DashWallet/Sources/UI/Menu/Tools/Masternode/Masternode Registration/DWRegisterMasternodeViewController.m b/DashWallet/Sources/UI/Menu/Tools/Masternode/Masternode Registration/DWRegisterMasternodeViewController.m index b2ec2f3c2..08c4c44b2 100644 --- a/DashWallet/Sources/UI/Menu/Tools/Masternode/Masternode Registration/DWRegisterMasternodeViewController.m +++ b/DashWallet/Sources/UI/Menu/Tools/Masternode/Masternode Registration/DWRegisterMasternodeViewController.m @@ -14,7 +14,6 @@ #import "DWPublicKeyGenerationTableViewCell.h" #import "DWSignPayloadViewController.h" #import "DWUIKit.h" -#include #define INPUT_CELL_HEIGHT 75 #define PUBLIC_KEY_CELL_HEIGHT 150 @@ -50,7 +49,6 @@ @implementation DWRegisterMasternodeViewController - (instancetype)initWithNibName:(nullable NSString *)nibNameOrNil bundle:(nullable NSBundle *)nibBundleOrNil { if (self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil]) { - _model = [[DWMasternodeRegistrationModel alloc] initForWallet:[DWEnvironment sharedInstance].currentWallet]; self.account = [DWEnvironment sharedInstance].currentAccount; self.title = NSLocalizedString(@"Registration", nil); self.hidesBottomBarWhenPushed = YES; @@ -58,6 +56,14 @@ - (instancetype)initWithNibName:(nullable NSString *)nibNameOrNil bundle:(nullab return self; } +- (DWMasternodeRegistrationModel *)model { + if (_model == nil) { + _model = [[DWMasternodeRegistrationModel alloc] initForAccount:[DWEnvironment sharedInstance].currentAccount]; + } + + return _model; +} + - (void)viewDidLoad { [super viewDidLoad]; @@ -72,23 +78,6 @@ - (void)viewDidLoad { [self.view addSubview:formController.view]; [formController didMoveToParentViewController:self]; self.formController = formController; - - - // self.view.backgroundColor = [UIColor dw_secondaryBackgroundColor]; - // self.tableView.rowHeight = UITableViewAutomaticDimension; - // self.tableView.separatorStyle = UITableViewCellSeparatorStyleNone; - // self.tableView.tableFooterView = [[UIView alloc] init]; - // self.tableView.sectionHeaderHeight = UITableViewAutomaticDimension; - // self.tableView.estimatedSectionHeaderHeight = 30.0; - // - // NSArray *cellClasses = @[ - // DWKeyValueFormTableViewCell.class, - // DWPublicKeyGenerationTableViewCell.class, - // ]; - // - // for (Class cellClass in cellClasses) { - // [self.tableView registerClass:cellClass forCellReuseIdentifier:NSStringFromClass(cellClass)]; - // } } - (UIStatusBarStyle)preferredStatusBarStyle { @@ -119,6 +108,45 @@ - (NSString *)titleForCellAtRow:(NSUInteger)row { return @""; } +- (NSString *)placeholderForCellAtRow:(NSUInteger)row { + switch (row) { + case DWMasternodeRegistrationCell_CollateralTx: + return NSLocalizedString(@"Enter Transaction Hash", nil); + case DWMasternodeRegistrationCell_CollateralIndex: + return NSLocalizedString(@"Enter Transaction Index", nil); + case DWMasternodeRegistrationCell_IPAddress: + return NSLocalizedString(@"Enter IP Address of Masternode", nil); + case DWMasternodeRegistrationCell_Port: + return NSLocalizedString(@"Enter Port of Masternode", nil); + case DWMasternodeRegistrationCell_PayoutAddress: + return NSLocalizedString(@"Enter Payout Address", nil); + case DWMasternodeRegistrationCell_OwnerKey: + return NSLocalizedString(@"Enter Owner Public Key", nil); + case DWMasternodeRegistrationCell_OperatorKey: + return NSLocalizedString(@"Enter Operator Public Key", nil); + case DWMasternodeRegistrationCell_VotingKey: + return NSLocalizedString(@"Enter Voting Public Key", nil); + } + return @""; +} + +- (NSString *)actionForCellAtRow:(NSUInteger)row { + switch (row) { + case DWMasternodeRegistrationCell_CollateralIndex: + return NSLocalizedString(@"Lookup", nil); + case DWMasternodeRegistrationCell_Port: + return NSLocalizedString(@"Default", nil); + case DWMasternodeRegistrationCell_OwnerKey: + return NSLocalizedString(@"Using Index 0", nil); + case DWMasternodeRegistrationCell_OperatorKey: + return NSLocalizedString(@"Using Index 0", nil); + case DWMasternodeRegistrationCell_VotingKey: + return NSLocalizedString(@"Using Index 0", nil); + default: + return nil; + } +} + - (DWMasternodeRegistrationCellType)typeForCellAtRow:(NSUInteger)row { switch (row) { case DWMasternodeRegistrationCell_CollateralTx: @@ -137,10 +165,48 @@ - (DWMasternodeRegistrationCellType)typeForCellAtRow:(NSUInteger)row { - (DWBaseFormCellModel *)modelForRow:(NSUInteger)row { switch ([self typeForCellAtRow:row]) { - case DWMasternodeRegistrationCellType_InputValue: - return [[DWKeyValueFormCellModel alloc] initWithTitle:[self titleForCellAtRow:row]]; - case DWMasternodeRegistrationCellType_PublicKey: - return [[DWPublicKeyGenerationCellModel alloc] initWithTitle:[self titleForCellAtRow:row]]; + case DWMasternodeRegistrationCellType_InputValue: { + NSString *actionText = [self actionForCellAtRow:row]; + DWKeyValueFormCellModel *model = [[DWKeyValueFormCellModel alloc] initWithTitle:[self titleForCellAtRow:row] valueText:@"" placeholderText:[self placeholderForCellAtRow:row] actionText:actionText ? [[NSAttributedString alloc] initWithString:actionText] : nil]; + if (row == DWMasternodeRegistrationCell_Port) { + __weak __typeof(model) weakModel = model; + model.actionBlock = ^{ + __strong __typeof(weakModel) strongModel = weakModel; + if (!strongModel) { + return; + } + strongModel.valueText = [NSString stringWithFormat:@"%d", [DWEnvironment sharedInstance].currentChain.standardPort]; + }; + } else if (row == DWMasternodeRegistrationCell_CollateralIndex) { + __weak __typeof(self) weakSelf = self; + __weak __typeof(model) weakModel = model; + model.actionBlock = ^{ + __strong __typeof(weakSelf) strongSelf = weakSelf; + + if (!strongSelf) { + return; + } + [strongSelf.model lookupIndexesForCollateralHash:strongSelf.model.collateral.hash completion:^(DSTransaction * _Nonnull transaction, NSIndexSet * _Nonnull indexSet, NSError * _Nonnull error) { + __strong __typeof(weakModel) strongModel = weakModel; + if (!strongModel) { + return; + } + strongModel.valueText = [NSString stringWithFormat:@"%lu",(unsigned long)[indexSet firstIndex]]; + }]; + + }; + } + return model; + } + case DWMasternodeRegistrationCellType_PublicKey: { + NSTextAttachment *attachment = [[NSTextAttachment alloc] init]; + attachment.image = [UIImage imageNamed:@"icon_disclosure_indicator"]; + + NSAttributedString *attachmentString = [NSAttributedString attributedStringWithAttachment:attachment]; + NSMutableAttributedString *indexString = [[NSMutableAttributedString alloc] initWithString:[self actionForCellAtRow:row]]; + [indexString appendAttributedString:attachmentString]; + return [[DWKeyValueFormCellModel alloc] initWithTitle:[self titleForCellAtRow:row] valueText:@"" placeholderText:[self placeholderForCellAtRow:row] actionText:indexString]; + } } } @@ -155,85 +221,22 @@ - (DWBaseFormCellModel *)modelForRow:(NSUInteger)row { return items; } +- (DWBaseFormCellModel *)registerActionModel { + DWActionFormCellModel *registerModel = [[DWActionFormCellModel alloc] initWithTitle:NSLocalizedString(@"Register", nil)]; + registerModel.didSelectBlock = ^(DWActionFormCellModel *_Nonnull cellModel, NSIndexPath *_Nonnull indexPath) { + [self showPayloadSigning]; + }; + return registerModel; +} + - (NSArray *)sections { DWFormSectionModel *section = [[DWFormSectionModel alloc] init]; section.items = [self items]; - return @[ section ]; -} - -#pragma mark - UITableViewDataSource - -- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView { - return 1; -} - -- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section { - return _DWMasternodeRegistrationCell_Count; -} - -- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath { - switch ([self typeForCellAtRow:indexPath.row]) { - case DWMasternodeRegistrationCellType_InputValue: - return INPUT_CELL_HEIGHT; - case DWMasternodeRegistrationCellType_PublicKey: - return PUBLIC_KEY_CELL_HEIGHT; - } - return 0; -} - -- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { - NSString *cellId; - switch (indexPath.section) { - case 0: { - switch (indexPath.row) { - case 0: - case 1: - case 2: - case 3: - case 4: { - cellId = DWKeyValueFormTableViewCell.dw_reuseIdentifier; - DWKeyValueFormTableViewCell *cell = - (DWKeyValueFormTableViewCell *)[tableView dequeueReusableCellWithIdentifier:cellId - forIndexPath:indexPath]; - return cell; - } - case 5: - case 6: - case 7: { - cellId = DWPublicKeyGenerationTableViewCell.dw_reuseIdentifier; - DWPublicKeyGenerationTableViewCell *cell = - (DWPublicKeyGenerationTableViewCell *)[tableView dequeueReusableCellWithIdentifier:cellId - forIndexPath:indexPath]; - return cell; - } - } - } - } + DWFormSectionModel *registerSection = [[DWFormSectionModel alloc] init]; + registerSection.items = @[ [self registerActionModel] ]; - return nil; -} - -- (void)signTransactionInputs:(DSProviderRegistrationTransaction *)providerRegistrationTransaction { - [self.account signTransaction:providerRegistrationTransaction - withPrompt:@"Would you like to register this masternode?" - completion:^(BOOL signedTransaction, BOOL cancelled) { - if (signedTransaction) { - [self.account.wallet.chain.chainManager.transactionManager publishTransaction:providerRegistrationTransaction - completion:^(NSError *_Nullable error) { - if (error) { - [self raiseIssue:@"Error" message:error.localizedDescription]; - } - else { - //[masternode registerInWallet]; - [self.presentingViewController dismissViewControllerAnimated:TRUE completion:nil]; - } - }]; - } - else { - [self raiseIssue:@"Error" message:@"Transaction was not signed."]; - } - }]; + return @[ section, registerSection ]; } - (void)raiseIssue:(NSString *)issue message:(NSString *)message { @@ -250,154 +253,21 @@ - (void)raiseIssue:(NSString *)issue message:(NSString *)message { }]; } +- (void)showPayloadSigning { + DWSignPayloadViewController *signPayloadViewController = [[DWSignPayloadViewController alloc] init]; + signPayloadViewController.collateralAddress = self.collateralTransaction.outputAddresses[self.providerRegistrationTransaction.collateralOutpoint.n]; + signPayloadViewController.providerRegistrationTransaction = self.providerRegistrationTransaction; + signPayloadViewController.delegate = self; + [self.navigationController pushViewController:signPayloadViewController animated:YES]; +} -// -//------ -// -// -(void)viewDidLoad { -// [super viewDidLoad]; -// -// _model = [[DWMasternodeRegistrationModel alloc] initWithWallet:self.wallet]; -// self.view.backgroundColor = [UIColor dw_secondaryBackgroundColor]; -// -// -// self.wallet = [DWEnvironment sharedInstance].currentWallet; -// self.account = [DWEnvironment sharedInstance].currentAccount; -//} -// -//#pragma mark - Table view data source -// -//- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { -// switch (indexPath.section) { -// case 0: { -// switch (indexPath.row) { -// case 0: -// return self.collateralTransactionTableViewCell; -// case 1: -// return self.collateralIndexTableViewCell; -// case 2: -// return self.ipAddressTableViewCell; -// case 3: -// return self.portTableViewCell; -// case 4: -// return self.ownerIndexTableViewCell; -// case 5: -// return self.operatorIndexTableViewCell; -// case 6: -// return self.votingIndexTableViewCell; -// case 7: -// return self.payToAddressTableViewCell; -// } -// } -// } -// return nil; -//} -// - -//- (IBAction)registerMasternode:(id)sender { -// NSString *ipAddressString = [self.ipAddressTableViewCell.valueTextField.text stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]]; -// NSString *portString = [self.portTableViewCell.valueTextField.text stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]]; -// UInt128 ipAddress = {.u32 = {0, 0, CFSwapInt32HostToBig(0xffff), 0}}; -// struct in_addr addrV4; -// if (inet_aton([ipAddressString UTF8String], &addrV4) != 0) { -// uint32_t ip = ntohl(addrV4.s_addr); -// ipAddress.u32[3] = CFSwapInt32HostToBig(ip); -// DSDLog(@"%08x", ip); -// } -// uint16_t port = [portString intValue]; -// -// uint32_t ownerWalletIndex = UINT32_MAX; -// uint32_t votingWalletIndex = UINT32_MAX; -// uint32_t operatorWalletIndex = UINT32_MAX; -// -// if (self.ownerIndexTableViewCell.publicKeyTextField.text && ![self.ownerIndexTableViewCell.publicKeyTextField.text isEqualToString:@""]) { -// ownerWalletIndex = (uint32_t)[self.ownerIndexTableViewCell.publicKeyTextField.text integerValue]; -// } -// -// if (self.operatorIndexTableViewCell.publicKeyTextField.text && ![self.operatorIndexTableViewCell.publicKeyTextField.text isEqualToString:@""]) { -// operatorWalletIndex = (uint32_t)[self.operatorIndexTableViewCell.publicKeyTextField.text integerValue]; -// } -// -// if (self.votingIndexTableViewCell.publicKeyTextField.text && ![self.votingIndexTableViewCell.publicKeyTextField.text isEqualToString:@""]) { -// votingWalletIndex = (uint32_t)[self.votingIndexTableViewCell.publicKeyTextField.text integerValue]; -// } -// -// DSLocalMasternode *masternode = [self.chain.chainManager.masternodeManager createNewMasternodeWithIPAddress:ipAddress onPort:port inFundsWallet:self.wallet fundsWalletIndex:UINT32_MAX inOperatorWallet:self.wallet operatorWalletIndex:operatorWalletIndex inOwnerWallet:self.wallet ownerWalletIndex:ownerWalletIndex inVotingWallet:self.wallet votingWalletIndex:votingWalletIndex]; -// -// NSString *payoutAddress = [self.payToAddressTableViewCell.valueTextField.text isValidDashAddressOnChain:self.chain] ? self.payToAddressTableViewCell.textLabel.text : self.account.receiveAddress; -// -// -// DSUTXO collateral = DSUTXO_ZERO; -// UInt256 nonReversedCollateralHash = UINT256_ZERO; -// NSString *collateralTransactionHash = self.collateralTransactionTableViewCell.valueTextField.text; -// if (![collateralTransactionHash isEqual:@""]) { -// NSData *collateralTransactionHashData = [collateralTransactionHash hexToData]; -// if (collateralTransactionHashData.length != 32) -// return; -// collateral.hash = collateralTransactionHashData.reverse.UInt256; -// -// nonReversedCollateralHash = collateralTransactionHashData.UInt256; -// collateral.n = [self.collateralIndexTableViewCell.valueTextField.text integerValue]; -// } -// -// -// [masternode registrationTransactionFundedByAccount:self.account -// toAddress:payoutAddress -// withCollateral:collateral -// completion:^(DSProviderRegistrationTransaction *_Nonnull providerRegistrationTransaction) { -// if (providerRegistrationTransaction) { -// if (dsutxo_is_zero(collateral)) { -// [self signTransactionInputs:providerRegistrationTransaction]; -// } -// else { -// [[DSInsightManager sharedInstance] queryInsightForTransactionWithHash:nonReversedCollateralHash -// onChain:self.chain -// completion:^(DSTransaction *transaction, NSError *error) { -// NSIndexSet *indexSet = [[transaction outputAmounts] indexesOfObjectsPassingTest:^BOOL(id _Nonnull obj, NSUInteger idx, BOOL *_Nonnull stop) { -// if ([obj isEqual:@(MASTERNODE_COST)]) -// return TRUE; -// return FALSE; -// }]; -// if ([indexSet containsIndex:collateral.n]) { -// self.collateralTransaction = transaction; -// self.providerRegistrationTransaction = providerRegistrationTransaction; -// dispatch_async(dispatch_get_main_queue(), ^{ -// [self performSegueWithIdentifier:@"PayloadSigningSegue" sender:self]; -// }); -// } -// else { -// dispatch_async(dispatch_get_main_queue(), ^{ -// [self raiseIssue:@"Error" message:@"Incorrect collateral index"]; -// }); -// } -// }]; -// } -// } -// else { -// [self raiseIssue:@"Error" message:@"Unable to create ProviderRegistrationTransaction."]; -// } -// }]; -//} -// +- (void)viewController:(nonnull UIViewController *)controller didReturnSignature:(nonnull NSData *)signature { + self.providerRegistrationTransaction.payloadSignature = signature; + [self.model signTransactionInputs:self.providerRegistrationTransaction + completion:^(NSError *_Nonnull error){ -// -//- (UIStatusBarStyle)preferredStatusBarStyle { -// return UIStatusBarStyleLightContent; -//} -// -//- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender { -// if ([segue.identifier isEqualToString:@"PayloadSigningSegue"]) { -// DWSignPayloadViewController *signPayloadSegue = (DWSignPayloadViewController *)segue.destinationViewController; -// signPayloadSegue.collateralAddress = self.collateralTransaction.outputAddresses[self.providerRegistrationTransaction.collateralOutpoint.n]; -// signPayloadSegue.providerRegistrationTransaction = self.providerRegistrationTransaction; -// signPayloadSegue.delegate = self; -// } -//} -// -//- (void)viewController:(nonnull UIViewController *)controller didReturnSignature:(nonnull NSData *)signature { -// self.providerRegistrationTransaction.payloadSignature = signature; -// [self signTransactionInputs:self.providerRegistrationTransaction]; -//} + }]; +} @end diff --git a/DashWallet/Sources/UI/Menu/Tools/Masternode/Masternode Registration/Models/DWMasternodeRegistrationModel.h b/DashWallet/Sources/UI/Menu/Tools/Masternode/Masternode Registration/Models/DWMasternodeRegistrationModel.h index 98324f163..75ff7dea8 100644 --- a/DashWallet/Sources/UI/Menu/Tools/Masternode/Masternode Registration/Models/DWMasternodeRegistrationModel.h +++ b/DashWallet/Sources/UI/Menu/Tools/Masternode/Masternode Registration/Models/DWMasternodeRegistrationModel.h @@ -21,26 +21,31 @@ NS_ASSUME_NONNULL_BEGIN @interface DWMasternodeRegistrationModel : NSObject -@property (nonatomic, strong) NSData *ownerPublicKeyData; -@property (nonatomic, strong) NSData *operatorPublicKeyData; -@property (nonatomic, strong) NSData *votingPublicKeyData; +@property (nonatomic, strong) DSECDSAKey *ownerKey; +@property (nonatomic, strong) DSBLSKey *operatorKey; +@property (nonatomic, strong) DSECDSAKey *votingKey; -@property (nonatomic, assign) uint32_t ownerPublicKeyIndex; -@property (nonatomic, assign) uint32_t operatorPublicKeyIndex; -@property (nonatomic, assign) uint32_t votingPublicKeyIndex; +@property (nonatomic, assign) uint32_t ownerKeyIndex; +@property (nonatomic, assign) uint32_t operatorKeyIndex; +@property (nonatomic, assign) uint32_t votingKeyIndex; -@property (nonatomic, assign) NSString *ipAddress; +@property (nonatomic, assign) UInt128 ipAddress; @property (nonatomic, assign) uint16_t port; -@property (nonatomic, strong) NSData *collateralTransactionHashData; -@property (nonatomic, assign) uint16_t collateralIndex; +@property (nonatomic, assign) DSUTXO collateral; @property (nonatomic, strong) NSString *payoutAddress; -- (instancetype)initForWallet:(DSWallet *)wallet NS_DESIGNATED_INITIALIZER; +- (instancetype)initForAccount:(DSAccount *)account NS_DESIGNATED_INITIALIZER; - (instancetype)init NS_UNAVAILABLE; +- (void)registerMasternode:(id)sender requestsPayloadSigning:(void (^_Nullable)(void))payloadSigningRequest completion:(void (^_Nullable)(NSError *error))completion; + +- (void)signTransactionInputs:(DSProviderRegistrationTransaction *)providerRegistrationTransaction completion:(void (^_Nullable)(NSError *error))completion; + +-(void)lookupIndexesForCollateralHash:(UInt256)collateralHash completion:(void (^_Nullable)(DSTransaction* transaction, NSIndexSet *indexSet, NSError *error))completion; + @end NS_ASSUME_NONNULL_END diff --git a/DashWallet/Sources/UI/Menu/Tools/Masternode/Masternode Registration/Models/DWMasternodeRegistrationModel.m b/DashWallet/Sources/UI/Menu/Tools/Masternode/Masternode Registration/Models/DWMasternodeRegistrationModel.m index 5c64acb26..68d99ab19 100644 --- a/DashWallet/Sources/UI/Menu/Tools/Masternode/Masternode Registration/Models/DWMasternodeRegistrationModel.m +++ b/DashWallet/Sources/UI/Menu/Tools/Masternode/Masternode Registration/Models/DWMasternodeRegistrationModel.m @@ -16,10 +16,17 @@ // #import "DWMasternodeRegistrationModel.h" +#include @interface DWMasternodeRegistrationModel () @property (nonatomic, strong) DSWallet *wallet; +@property (nonatomic, strong) DSAccount *account; + +@property (nonatomic, strong) DSTransaction *collateralTransaction; + +@property (nonatomic, strong) DSTransaction *providerRegistrationTransaction; + @property (readonly, nonatomic, strong) DSAuthenticationKeysDerivationPath *ownerDerivationPath; @property (readonly, nonatomic, strong) DSAuthenticationKeysDerivationPath *votingDerivationPath; @property (readonly, nonatomic, strong) DSAuthenticationKeysDerivationPath *operatorDerivationPath; @@ -28,50 +35,187 @@ @interface DWMasternodeRegistrationModel () @implementation DWMasternodeRegistrationModel -- (instancetype)initForWallet:(DSWallet *)wallet { +- (instancetype)initForAccount:(DSAccount *)account { self = [super init]; if (self) { - _wallet = wallet; - _port = wallet.chain.standardPort; + _wallet = account.wallet; + _account = account; + _port = _wallet.chain.standardPort; DSDerivationPathFactory *factory = [DSDerivationPathFactory sharedInstance]; - _ownerDerivationPath = [factory providerOwnerKeysDerivationPathForWallet:wallet]; - _votingDerivationPath = [factory providerVotingKeysDerivationPathForWallet:wallet]; - _operatorDerivationPath = [factory providerOperatorKeysDerivationPathForWallet:wallet]; + _ownerDerivationPath = [factory providerOwnerKeysDerivationPathForWallet:_wallet]; + _votingDerivationPath = [factory providerVotingKeysDerivationPathForWallet:_wallet]; + _operatorDerivationPath = [factory providerOperatorKeysDerivationPathForWallet:_wallet]; } return self; } -- (void)setOperatorPublicKeyIndex:(uint32_t)operatorPublicKeyIndex { - _operatorPublicKeyIndex = operatorPublicKeyIndex; - _operatorPublicKeyData = [self.operatorDerivationPath publicKeyDataAtIndex:operatorPublicKeyIndex]; +- (void)setOperatorKeyIndex:(uint32_t)operatorKeyIndex { + _operatorKeyIndex = operatorKeyIndex; + @autoreleasepool { + NSData *seed = [[DSBIP39Mnemonic sharedInstance] deriveKeyFromPhrase:_wallet.seedPhraseIfAuthenticated + withPassphrase:nil]; + _operatorKey = (DSBLSKey *)[self.operatorDerivationPath privateKeyAtIndex:operatorKeyIndex fromSeed:seed]; + } +} + +- (void)setOwnerKeyIndex:(uint32_t)ownerKeyIndex { + _ownerKeyIndex = ownerKeyIndex; + @autoreleasepool { + NSData *seed = [[DSBIP39Mnemonic sharedInstance] deriveKeyFromPhrase:_wallet.seedPhraseIfAuthenticated + withPassphrase:nil]; + _ownerKey = (DSECDSAKey *)[self.ownerDerivationPath privateKeyAtIndex:ownerKeyIndex fromSeed:seed]; + } } -- (void)setOwnerPublicKeyIndex:(uint32_t)ownerPublicKeyIndex { - _ownerPublicKeyIndex = ownerPublicKeyIndex; - _ownerPublicKeyData = [self.ownerDerivationPath publicKeyDataAtIndex:ownerPublicKeyIndex]; +- (void)setVotingKeyIndex:(uint32_t)votingKeyIndex { + _votingKeyIndex = votingKeyIndex; + @autoreleasepool { + NSData *seed = [[DSBIP39Mnemonic sharedInstance] deriveKeyFromPhrase:_wallet.seedPhraseIfAuthenticated + withPassphrase:nil]; + _votingKey = (DSECDSAKey *)[self.votingDerivationPath privateKeyAtIndex:votingKeyIndex fromSeed:seed]; + } } -- (void)setVotingPublicKeyIndex:(uint32_t)votingPublicKeyIndex { - _votingPublicKeyIndex = votingPublicKeyIndex; - _votingPublicKeyData = [self.votingDerivationPath publicKeyDataAtIndex:votingPublicKeyIndex]; +- (void)setOperatorKey:(DSBLSKey *)operatorKey { + _operatorKey = operatorKey; + NSString *address = [operatorKey addressForChain:_wallet.chain]; + _operatorKeyIndex = [self.operatorDerivationPath indexOfKnownAddress:address]; +} + +- (void)setOwnerKey:(DSECDSAKey *)ownerKey { + _ownerKey = ownerKey; + NSString *address = [ownerKey addressForChain:_wallet.chain]; + _ownerKeyIndex = [self.ownerDerivationPath indexOfKnownAddress:address]; +} + +- (void)setVotingKey:(DSECDSAKey *)votingKey { + _votingKey = votingKey; + NSString *address = [votingKey addressForChain:_wallet.chain]; + _votingKeyIndex = [self.votingDerivationPath indexOfKnownAddress:address]; +} + +- (void)setIpAddressFromString:(NSString *)ipAddressString { + UInt128 ipAddress = {.u32 = {0, 0, CFSwapInt32HostToBig(0xffff), 0}}; + struct in_addr addrV4; + if (inet_aton([ipAddressString UTF8String], &addrV4) != 0) { + uint32_t ip = ntohl(addrV4.s_addr); + ipAddress.u32[3] = CFSwapInt32HostToBig(ip); + DSDLog(@"%08x", ip); + } + self.ipAddress = ipAddress; } -- (void)setOperatorPublicKeyData:(NSData *)operatorPublicKeyData { - _operatorPublicKeyData = operatorPublicKeyData; - NSString *address = [DSKey addressWithPublicKeyData:operatorPublicKeyData forChain:_wallet.chain]; - _operatorPublicKeyIndex = [self.operatorDerivationPath indexOfKnownAddress:address]; +-(void)lookupIndexesForCollateralHash:(UInt256)collateralHash completion:(void (^_Nullable)(DSTransaction* transaction, NSIndexSet *indexSet, NSError *error))completion { + [[DSInsightManager sharedInstance] queryInsightForTransactionWithHash:uint256_reverse(self.collateral.hash) + onChain:self.account.wallet.chain + completion:^(DSTransaction *transaction, NSError *error) { + if (error) { + dispatch_async(dispatch_get_main_queue(), ^{ + completion(transaction,nil,[NSError errorWithDomain:@"Dashwallet" code:500 userInfo:@{NSLocalizedDescriptionKey : NSLocalizedString(@"Network error", nil)}]); + }); + return; + } + if (!transaction) { + dispatch_async(dispatch_get_main_queue(), ^{ + completion(nil,nil,[NSError errorWithDomain:@"Dashwallet" code:500 userInfo:@{NSLocalizedDescriptionKey : NSLocalizedString(@"Transaction could not be found", nil)}]); + }); + return; + } + NSIndexSet *indexSet = [[transaction outputAmounts] indexesOfObjectsPassingTest:^BOOL(id _Nonnull obj, NSUInteger idx, BOOL *_Nonnull stop) { + if ([obj isEqual:@(MASTERNODE_COST)]) + return TRUE; + return FALSE; + }]; + if ([indexSet count]) { + dispatch_async(dispatch_get_main_queue(), ^{ + completion(transaction,indexSet,nil); + }); + } + else { + dispatch_async(dispatch_get_main_queue(), ^{ + completion(transaction,nil,nil); + }); + } + }]; } -- (void)setOwnerPublicKeyData:(NSData *)ownerPublicKeyData { - _ownerPublicKeyData = ownerPublicKeyData; - NSString *address = [DSKey addressWithPublicKeyData:ownerPublicKeyData forChain:_wallet.chain]; - _ownerPublicKeyIndex = [self.ownerDerivationPath indexOfKnownAddress:address]; +- (void)registerMasternode:(id)sender requestsPayloadSigning:(void (^_Nullable)(void))payloadSigningRequest completion:(void (^_Nullable)(NSError *error))completion { + + + DSMasternodeManager *masternodeManager = self.wallet.chain.chainManager.masternodeManager; + + DSLocalMasternode *masternode = [masternodeManager createNewMasternodeWithIPAddress:self.ipAddress onPort:self.port inFundsWallet:self.wallet fundsWalletIndex:UINT32_MAX inOperatorWallet:self.wallet operatorWalletIndex:self.operatorKeyIndex operatorPublicKey:self.operatorKey inOwnerWallet:self.wallet ownerWalletIndex:self.ownerKeyIndex ownerPrivateKey:self.ownerKey inVotingWallet:self.wallet votingWalletIndex:self.votingKeyIndex votingKey:self.votingKey]; + + // NSString *payoutAddress = [self.payToAddressTableViewCell.valueTextField.text isValidDashAddressOnChain:self.chain] ? self.payToAddressTableViewCell.textLabel.text : self.account.receiveAddress; + + + // DSUTXO collateral = DSUTXO_ZERO; + // UInt256 nonReversedCollateralHash = UINT256_ZERO; + // NSString *collateralTransactionHash = self.collateralTransactionTableViewCell.valueTextField.text; + // if (![collateralTransactionHash isEqual:@""]) { + // NSData *collateralTransactionHashData = [collateralTransactionHash hexToData]; + // if (collateralTransactionHashData.length != 32) + // return; + // collateral.hash = collateralTransactionHashData.reverse.UInt256; + // + // nonReversedCollateralHash = collateralTransactionHashData.UInt256; + // collateral.n = [self.collateralIndexTableViewCell.valueTextField.text integerValue]; + // } + + + [masternode registrationTransactionFundedByAccount:self.account + toAddress:self.payoutAddress + withCollateral:self.collateral + completion:^(DSProviderRegistrationTransaction *_Nonnull providerRegistrationTransaction) { + if (providerRegistrationTransaction) { + if (dsutxo_is_zero(self.collateral)) { + [self signTransactionInputs:providerRegistrationTransaction completion:completion]; + } + else { + [self lookupIndexesForCollateralHash:self.collateral.hash completion:^(DSTransaction * _Nonnull transaction, NSIndexSet * _Nonnull indexSet, NSError * _Nonnull error) { + if (error) { + completion(error); + return; + } + if ([indexSet containsIndex:self.collateral.n]) { + self.collateralTransaction = transaction; + self.providerRegistrationTransaction = providerRegistrationTransaction; + if (payloadSigningRequest) { + payloadSigningRequest(); + } + } + else { + if (completion) { + completion([NSError errorWithDomain:@"Dashwallet" code:500 userInfo:@{NSLocalizedDescriptionKey : NSLocalizedString(@"Incorrect collateral index", nil)}]); + } + } + }]; + } + } + else { + if (completion) { + completion([NSError errorWithDomain:@"Dashwallet" code:500 userInfo:@{NSLocalizedDescriptionKey : NSLocalizedString(@"Unable to create ProviderRegistrationTransaction.", nil)}]); + } + } + }]; } -- (void)setVotingPublicKeyData:(NSData *)votingPublicKeyData { - _votingPublicKeyData = votingPublicKeyData; - NSString *address = [DSKey addressWithPublicKeyData:votingPublicKeyData forChain:_wallet.chain]; - _votingPublicKeyIndex = [self.votingDerivationPath indexOfKnownAddress:address]; +- (void)signTransactionInputs:(DSProviderRegistrationTransaction *)providerRegistrationTransaction completion:(void (^_Nullable)(NSError *error))completion { + [self.account signTransaction:providerRegistrationTransaction + withPrompt:NSLocalizedString(@"Would you like to register this masternode?", nil) + completion:^(BOOL signedTransaction, BOOL cancelled) { + if (signedTransaction) { + [self.account.wallet.chain.chainManager.transactionManager publishTransaction:providerRegistrationTransaction + completion:^(NSError *_Nullable error) { + completion(error); + }]; + } + else { + if (completion) { + completion([NSError errorWithDomain:@"Dashwallet" code:500 userInfo:@{NSLocalizedDescriptionKey : NSLocalizedString(@"Transaction was not signed.", nil)}]); + } + } + }]; } diff --git a/DashWallet/ar.lproj/Localizable.strings b/DashWallet/ar.lproj/Localizable.strings index 1b30636f0..39f7e5752 100644 --- a/DashWallet/ar.lproj/Localizable.strings +++ b/DashWallet/ar.lproj/Localizable.strings @@ -266,6 +266,9 @@ /* No comment provided by engineer. */ "Date" = "Date"; +/* No comment provided by engineer. */ +"Default" = "Default"; + /* No comment provided by engineer. */ "Default currency, shortcuts, about…" = "Default currency, shortcuts, about…"; @@ -320,15 +323,39 @@ /* No comment provided by engineer. */ "Enter" = "Enter"; +/* No comment provided by engineer. */ +"Enter IP Address of Masternode" = "Enter IP Address of Masternode"; + +/* No comment provided by engineer. */ +"Enter Operator Public Key" = "Enter Operator Public Key"; + +/* No comment provided by engineer. */ +"Enter Owner Public Key" = "Enter Owner Public Key"; + +/* No comment provided by engineer. */ +"Enter Payout Address" = "Enter Payout Address"; + /* No comment provided by engineer. */ "Enter PIN" = "Enter PIN"; +/* No comment provided by engineer. */ +"Enter Port of Masternode" = "Enter Port of Masternode"; + /* No comment provided by engineer. */ "Enter Recovery Phrase" = "Enter Recovery Phrase"; /* No comment provided by engineer. */ "Enter the amount to transfer below" = "Enter the amount to transfer below"; +/* No comment provided by engineer. */ +"Enter Transaction Hash" = "Enter Transaction Hash"; + +/* No comment provided by engineer. */ +"Enter Transaction Index" = "Enter Transaction Index"; + +/* No comment provided by engineer. */ +"Enter Voting Public Key" = "Enter Voting Public Key"; + /* No comment provided by engineer. */ "Enter your 2FA code below" = "Enter your 2FA code below"; @@ -413,6 +440,9 @@ /* No comment provided by engineer. */ "Incase if this device is lost / damaged, incase if the dash wallet is uninstalled accidently from this device, you will need this recovery phrase to access your funds." = "Incase if this device is lost / damaged, incase if the dash wallet is uninstalled accidently from this device, you will need this recovery phrase to access your funds."; +/* No comment provided by engineer. */ +"Incorrect collateral index" = "Incorrect collateral index"; + /* No comment provided by engineer. */ "Insufficient Funds" = "Insufficient Funds"; @@ -476,6 +506,9 @@ /* No comment provided by engineer. */ "Long press to copy ID" = "Long press to copy ID"; +/* No comment provided by engineer. */ +"Lookup" = "Lookup"; + /* No comment provided by engineer. */ "Masternode control" = "Masternode control"; @@ -761,6 +794,9 @@ /* No comment provided by engineer. */ "Recovery phrase must have %d words" = "Recovery phrase must have %d words"; +/* No comment provided by engineer. */ +"Register" = "Register"; + /* No comment provided by engineer. */ "Register Masternode" = "Register Masternode"; @@ -1052,6 +1088,9 @@ /* No comment provided by engineer. */ "Transaction id" = "Transaction id"; +/* No comment provided by engineer. */ +"Transaction was not signed." = "Transaction was not signed."; + /* No comment provided by engineer. */ "Transfer" = "Transfer"; @@ -1079,6 +1118,9 @@ /* No comment provided by engineer. */ "Unable to connect" = "Unable to connect"; +/* No comment provided by engineer. */ +"Unable to create ProviderRegistrationTransaction." = "Unable to create ProviderRegistrationTransaction."; + /* No comment provided by engineer. */ "Unable to get new qr code" = "غير قادر على الحصول على كود QR جديد"; @@ -1118,6 +1160,9 @@ /* No comment provided by engineer. */ "Username:" = "Username:"; +/* No comment provided by engineer. */ +"Using Index 0" = "Using Index 0"; + /* No comment provided by engineer. */ "Verified Successfully" = "Verified Successfully"; @@ -1164,10 +1209,10 @@ "Wallet Keys" = "Wallet Keys"; /* No comment provided by engineer. */ -"Warning" = "Warning"; +"WARNING" = "تحذير"; /* No comment provided by engineer. */ -"WARNING" = "تحذير"; +"Warning" = "Warning"; /* No comment provided by engineer. */ "Watch only" = "Watch only"; @@ -1196,6 +1241,9 @@ /* No comment provided by engineer. */ "with Dash blockchain" = "with Dash blockchain"; +/* No comment provided by engineer. */ +"Would you like to register this masternode?" = "Would you like to register this masternode?"; + /* No comment provided by engineer. */ "WRITE DOWN YOUR RECOVERY PHRASE" = "أكتب كلمة إسترجاعك في الأسفل"; diff --git a/DashWallet/bg.lproj/Localizable.strings b/DashWallet/bg.lproj/Localizable.strings index 2e793ccff..30dac35c7 100644 --- a/DashWallet/bg.lproj/Localizable.strings +++ b/DashWallet/bg.lproj/Localizable.strings @@ -266,6 +266,9 @@ /* No comment provided by engineer. */ "Date" = "Date"; +/* No comment provided by engineer. */ +"Default" = "Default"; + /* No comment provided by engineer. */ "Default currency, shortcuts, about…" = "Default currency, shortcuts, about…"; @@ -320,15 +323,39 @@ /* No comment provided by engineer. */ "Enter" = "Enter"; +/* No comment provided by engineer. */ +"Enter IP Address of Masternode" = "Enter IP Address of Masternode"; + +/* No comment provided by engineer. */ +"Enter Operator Public Key" = "Enter Operator Public Key"; + +/* No comment provided by engineer. */ +"Enter Owner Public Key" = "Enter Owner Public Key"; + +/* No comment provided by engineer. */ +"Enter Payout Address" = "Enter Payout Address"; + /* No comment provided by engineer. */ "Enter PIN" = "Enter PIN"; +/* No comment provided by engineer. */ +"Enter Port of Masternode" = "Enter Port of Masternode"; + /* No comment provided by engineer. */ "Enter Recovery Phrase" = "Enter Recovery Phrase"; /* No comment provided by engineer. */ "Enter the amount to transfer below" = "Въведете сумата за трансфер по-долу"; +/* No comment provided by engineer. */ +"Enter Transaction Hash" = "Enter Transaction Hash"; + +/* No comment provided by engineer. */ +"Enter Transaction Index" = "Enter Transaction Index"; + +/* No comment provided by engineer. */ +"Enter Voting Public Key" = "Enter Voting Public Key"; + /* No comment provided by engineer. */ "Enter your 2FA code below" = "Въведете вашият 2FA код по-долу"; @@ -413,6 +440,9 @@ /* No comment provided by engineer. */ "Incase if this device is lost / damaged, incase if the dash wallet is uninstalled accidently from this device, you will need this recovery phrase to access your funds." = "Incase if this device is lost / damaged, incase if the dash wallet is uninstalled accidently from this device, you will need this recovery phrase to access your funds."; +/* No comment provided by engineer. */ +"Incorrect collateral index" = "Incorrect collateral index"; + /* No comment provided by engineer. */ "Insufficient Funds" = "Недостатъчни средства"; @@ -476,6 +506,9 @@ /* No comment provided by engineer. */ "Long press to copy ID" = "Long press to copy ID"; +/* No comment provided by engineer. */ +"Lookup" = "Lookup"; + /* No comment provided by engineer. */ "Masternode control" = "Masternode control"; @@ -761,6 +794,9 @@ /* No comment provided by engineer. */ "Recovery phrase must have %d words" = "Recovery phrase must have %d words"; +/* No comment provided by engineer. */ +"Register" = "Register"; + /* No comment provided by engineer. */ "Register Masternode" = "Register Masternode"; @@ -1052,6 +1088,9 @@ /* No comment provided by engineer. */ "Transaction id" = "Транзакция id"; +/* No comment provided by engineer. */ +"Transaction was not signed." = "Transaction was not signed."; + /* No comment provided by engineer. */ "Transfer" = "Прехвърляне"; @@ -1079,6 +1118,9 @@ /* No comment provided by engineer. */ "Unable to connect" = "Unable to connect"; +/* No comment provided by engineer. */ +"Unable to create ProviderRegistrationTransaction." = "Unable to create ProviderRegistrationTransaction."; + /* No comment provided by engineer. */ "Unable to get new qr code" = "Не може да се получи нов qr код"; @@ -1118,6 +1160,9 @@ /* No comment provided by engineer. */ "Username:" = "Username:"; +/* No comment provided by engineer. */ +"Using Index 0" = "Using Index 0"; + /* No comment provided by engineer. */ "Verified Successfully" = "Verified Successfully"; @@ -1164,10 +1209,10 @@ "Wallet Keys" = "Ключове на портфейла"; /* No comment provided by engineer. */ -"Warning" = "Warning"; +"WARNING" = "ВНИМАНИЕ"; /* No comment provided by engineer. */ -"WARNING" = "ВНИМАНИЕ"; +"Warning" = "Warning"; /* No comment provided by engineer. */ "Watch only" = "Watch only"; @@ -1196,6 +1241,9 @@ /* No comment provided by engineer. */ "with Dash blockchain" = "with Dash blockchain"; +/* No comment provided by engineer. */ +"Would you like to register this masternode?" = "Would you like to register this masternode?"; + /* No comment provided by engineer. */ "WRITE DOWN YOUR RECOVERY PHRASE" = "ЗАПИШИ ОТДОЛУ СВОЯТА ФРАЗА ЗА ВЪЗСТАНОВЯВАНЕ"; diff --git a/DashWallet/de.lproj/Localizable.strings b/DashWallet/de.lproj/Localizable.strings index aeffa47c9..9c23cf68e 100644 --- a/DashWallet/de.lproj/Localizable.strings +++ b/DashWallet/de.lproj/Localizable.strings @@ -266,6 +266,9 @@ /* No comment provided by engineer. */ "Date" = "Date"; +/* No comment provided by engineer. */ +"Default" = "Default"; + /* No comment provided by engineer. */ "Default currency, shortcuts, about…" = "Default currency, shortcuts, about…"; @@ -320,15 +323,39 @@ /* No comment provided by engineer. */ "Enter" = "Enter"; +/* No comment provided by engineer. */ +"Enter IP Address of Masternode" = "Enter IP Address of Masternode"; + +/* No comment provided by engineer. */ +"Enter Operator Public Key" = "Enter Operator Public Key"; + +/* No comment provided by engineer. */ +"Enter Owner Public Key" = "Enter Owner Public Key"; + +/* No comment provided by engineer. */ +"Enter Payout Address" = "Enter Payout Address"; + /* No comment provided by engineer. */ "Enter PIN" = "Enter PIN"; +/* No comment provided by engineer. */ +"Enter Port of Masternode" = "Enter Port of Masternode"; + /* No comment provided by engineer. */ "Enter Recovery Phrase" = "Enter Recovery Phrase"; /* No comment provided by engineer. */ "Enter the amount to transfer below" = "Trage den Transaktionsbetrag unten ein"; +/* No comment provided by engineer. */ +"Enter Transaction Hash" = "Enter Transaction Hash"; + +/* No comment provided by engineer. */ +"Enter Transaction Index" = "Enter Transaction Index"; + +/* No comment provided by engineer. */ +"Enter Voting Public Key" = "Enter Voting Public Key"; + /* No comment provided by engineer. */ "Enter your 2FA code below" = "Trage den 2FA-Code unten ein"; @@ -413,6 +440,9 @@ /* No comment provided by engineer. */ "Incase if this device is lost / damaged, incase if the dash wallet is uninstalled accidently from this device, you will need this recovery phrase to access your funds." = "Incase if this device is lost / damaged, incase if the dash wallet is uninstalled accidently from this device, you will need this recovery phrase to access your funds."; +/* No comment provided by engineer. */ +"Incorrect collateral index" = "Incorrect collateral index"; + /* No comment provided by engineer. */ "Insufficient Funds" = "Guthaben nicht ausreichend"; @@ -476,6 +506,9 @@ /* No comment provided by engineer. */ "Long press to copy ID" = "Long press to copy ID"; +/* No comment provided by engineer. */ +"Lookup" = "Lookup"; + /* No comment provided by engineer. */ "Masternode control" = "Masternode control"; @@ -761,6 +794,9 @@ /* No comment provided by engineer. */ "Recovery phrase must have %d words" = "Recovery phrase must have %d words"; +/* No comment provided by engineer. */ +"Register" = "Register"; + /* No comment provided by engineer. */ "Register Masternode" = "Register Masternode"; @@ -1052,6 +1088,9 @@ /* No comment provided by engineer. */ "Transaction id" = "Transaktions-ID"; +/* No comment provided by engineer. */ +"Transaction was not signed." = "Transaction was not signed."; + /* No comment provided by engineer. */ "Transfer" = "Transferieren"; @@ -1079,6 +1118,9 @@ /* No comment provided by engineer. */ "Unable to connect" = "Unable to connect"; +/* No comment provided by engineer. */ +"Unable to create ProviderRegistrationTransaction." = "Unable to create ProviderRegistrationTransaction."; + /* No comment provided by engineer. */ "Unable to get new qr code" = "Kann keinen neuen QR-Code erzeugen"; @@ -1118,6 +1160,9 @@ /* No comment provided by engineer. */ "Username:" = "Username:"; +/* No comment provided by engineer. */ +"Using Index 0" = "Using Index 0"; + /* No comment provided by engineer. */ "Verified Successfully" = "Verified Successfully"; @@ -1164,10 +1209,10 @@ "Wallet Keys" = "Wallet-Schlüssel"; /* No comment provided by engineer. */ -"Warning" = "Warning"; +"WARNING" = "WARNUNG"; /* No comment provided by engineer. */ -"WARNING" = "WARNUNG"; +"Warning" = "Warning"; /* No comment provided by engineer. */ "Watch only" = "Watch only"; @@ -1196,6 +1241,9 @@ /* No comment provided by engineer. */ "with Dash blockchain" = "with Dash blockchain"; +/* No comment provided by engineer. */ +"Would you like to register this masternode?" = "Would you like to register this masternode?"; + /* No comment provided by engineer. */ "WRITE DOWN YOUR RECOVERY PHRASE" = "NOTIEREN SIE IHRE WIEDERHERSTELLUNGS-WORTFOLGE"; diff --git a/DashWallet/el.lproj/Localizable.strings b/DashWallet/el.lproj/Localizable.strings index a8388954e..41a8f9c85 100644 --- a/DashWallet/el.lproj/Localizable.strings +++ b/DashWallet/el.lproj/Localizable.strings @@ -266,6 +266,9 @@ /* No comment provided by engineer. */ "Date" = "Date"; +/* No comment provided by engineer. */ +"Default" = "Default"; + /* No comment provided by engineer. */ "Default currency, shortcuts, about…" = "Default currency, shortcuts, about…"; @@ -320,15 +323,39 @@ /* No comment provided by engineer. */ "Enter" = "Enter"; +/* No comment provided by engineer. */ +"Enter IP Address of Masternode" = "Enter IP Address of Masternode"; + +/* No comment provided by engineer. */ +"Enter Operator Public Key" = "Enter Operator Public Key"; + +/* No comment provided by engineer. */ +"Enter Owner Public Key" = "Enter Owner Public Key"; + +/* No comment provided by engineer. */ +"Enter Payout Address" = "Enter Payout Address"; + /* No comment provided by engineer. */ "Enter PIN" = "Enter PIN"; +/* No comment provided by engineer. */ +"Enter Port of Masternode" = "Enter Port of Masternode"; + /* No comment provided by engineer. */ "Enter Recovery Phrase" = "Enter Recovery Phrase"; /* No comment provided by engineer. */ "Enter the amount to transfer below" = "Enter the amount to transfer below"; +/* No comment provided by engineer. */ +"Enter Transaction Hash" = "Enter Transaction Hash"; + +/* No comment provided by engineer. */ +"Enter Transaction Index" = "Enter Transaction Index"; + +/* No comment provided by engineer. */ +"Enter Voting Public Key" = "Enter Voting Public Key"; + /* No comment provided by engineer. */ "Enter your 2FA code below" = "Enter your 2FA code below"; @@ -413,6 +440,9 @@ /* No comment provided by engineer. */ "Incase if this device is lost / damaged, incase if the dash wallet is uninstalled accidently from this device, you will need this recovery phrase to access your funds." = "Incase if this device is lost / damaged, incase if the dash wallet is uninstalled accidently from this device, you will need this recovery phrase to access your funds."; +/* No comment provided by engineer. */ +"Incorrect collateral index" = "Incorrect collateral index"; + /* No comment provided by engineer. */ "Insufficient Funds" = "Insufficient Funds"; @@ -476,6 +506,9 @@ /* No comment provided by engineer. */ "Long press to copy ID" = "Long press to copy ID"; +/* No comment provided by engineer. */ +"Lookup" = "Lookup"; + /* No comment provided by engineer. */ "Masternode control" = "Masternode control"; @@ -761,6 +794,9 @@ /* No comment provided by engineer. */ "Recovery phrase must have %d words" = "Recovery phrase must have %d words"; +/* No comment provided by engineer. */ +"Register" = "Register"; + /* No comment provided by engineer. */ "Register Masternode" = "Register Masternode"; @@ -1052,6 +1088,9 @@ /* No comment provided by engineer. */ "Transaction id" = "Transaction id"; +/* No comment provided by engineer. */ +"Transaction was not signed." = "Transaction was not signed."; + /* No comment provided by engineer. */ "Transfer" = "Transfer"; @@ -1079,6 +1118,9 @@ /* No comment provided by engineer. */ "Unable to connect" = "Unable to connect"; +/* No comment provided by engineer. */ +"Unable to create ProviderRegistrationTransaction." = "Unable to create ProviderRegistrationTransaction."; + /* No comment provided by engineer. */ "Unable to get new qr code" = "Unable to get new qr code"; @@ -1118,6 +1160,9 @@ /* No comment provided by engineer. */ "Username:" = "Username:"; +/* No comment provided by engineer. */ +"Using Index 0" = "Using Index 0"; + /* No comment provided by engineer. */ "Verified Successfully" = "Verified Successfully"; @@ -1164,10 +1209,10 @@ "Wallet Keys" = "Wallet Keys"; /* No comment provided by engineer. */ -"Warning" = "Warning"; +"WARNING" = "ΠΡΟΕΙΔΟΠΟΙΗΣΗ"; /* No comment provided by engineer. */ -"WARNING" = "ΠΡΟΕΙΔΟΠΟΙΗΣΗ"; +"Warning" = "Warning"; /* No comment provided by engineer. */ "Watch only" = "Watch only"; @@ -1196,6 +1241,9 @@ /* No comment provided by engineer. */ "with Dash blockchain" = "with Dash blockchain"; +/* No comment provided by engineer. */ +"Would you like to register this masternode?" = "Would you like to register this masternode?"; + /* No comment provided by engineer. */ "WRITE DOWN YOUR RECOVERY PHRASE" = "ΓΡΑΨΤΕ ΤΗΝ ΦΡΑΣΗ ΑΝΑΚΤΗΣΗΣ ΣΑΣ"; diff --git a/DashWallet/en.lproj/Localizable.strings b/DashWallet/en.lproj/Localizable.strings index e106687f4..531eab8c9 100644 --- a/DashWallet/en.lproj/Localizable.strings +++ b/DashWallet/en.lproj/Localizable.strings @@ -266,6 +266,9 @@ /* No comment provided by engineer. */ "Date" = "Date"; +/* No comment provided by engineer. */ +"Default" = "Default"; + /* No comment provided by engineer. */ "Default currency, shortcuts, about…" = "Default currency, shortcuts, about…"; @@ -320,15 +323,39 @@ /* No comment provided by engineer. */ "Enter" = "Enter"; +/* No comment provided by engineer. */ +"Enter IP Address of Masternode" = "Enter IP Address of Masternode"; + +/* No comment provided by engineer. */ +"Enter Operator Public Key" = "Enter Operator Public Key"; + +/* No comment provided by engineer. */ +"Enter Owner Public Key" = "Enter Owner Public Key"; + +/* No comment provided by engineer. */ +"Enter Payout Address" = "Enter Payout Address"; + /* No comment provided by engineer. */ "Enter PIN" = "Enter PIN"; +/* No comment provided by engineer. */ +"Enter Port of Masternode" = "Enter Port of Masternode"; + /* No comment provided by engineer. */ "Enter Recovery Phrase" = "Enter Recovery Phrase"; /* No comment provided by engineer. */ "Enter the amount to transfer below" = "Enter the amount to transfer below"; +/* No comment provided by engineer. */ +"Enter Transaction Hash" = "Enter Transaction Hash"; + +/* No comment provided by engineer. */ +"Enter Transaction Index" = "Enter Transaction Index"; + +/* No comment provided by engineer. */ +"Enter Voting Public Key" = "Enter Voting Public Key"; + /* No comment provided by engineer. */ "Enter your 2FA code below" = "Enter your 2FA code below"; @@ -413,6 +440,9 @@ /* No comment provided by engineer. */ "Incase if this device is lost / damaged, incase if the dash wallet is uninstalled accidently from this device, you will need this recovery phrase to access your funds." = "Incase if this device is lost / damaged, incase if the dash wallet is uninstalled accidently from this device, you will need this recovery phrase to access your funds."; +/* No comment provided by engineer. */ +"Incorrect collateral index" = "Incorrect collateral index"; + /* No comment provided by engineer. */ "Insufficient Funds" = "Insufficient Funds"; @@ -476,6 +506,9 @@ /* No comment provided by engineer. */ "Long press to copy ID" = "Long press to copy ID"; +/* No comment provided by engineer. */ +"Lookup" = "Lookup"; + /* No comment provided by engineer. */ "Masternode control" = "Masternode control"; @@ -761,6 +794,9 @@ /* No comment provided by engineer. */ "Recovery phrase must have %d words" = "Recovery phrase must have %d words"; +/* No comment provided by engineer. */ +"Register" = "Register"; + /* No comment provided by engineer. */ "Register Masternode" = "Register Masternode"; @@ -1052,6 +1088,9 @@ /* No comment provided by engineer. */ "Transaction id" = "Transaction id"; +/* No comment provided by engineer. */ +"Transaction was not signed." = "Transaction was not signed."; + /* No comment provided by engineer. */ "Transfer" = "Transfer"; @@ -1079,6 +1118,9 @@ /* No comment provided by engineer. */ "Unable to connect" = "Unable to connect"; +/* No comment provided by engineer. */ +"Unable to create ProviderRegistrationTransaction." = "Unable to create ProviderRegistrationTransaction."; + /* No comment provided by engineer. */ "Unable to get new qr code" = "Unable to get new qr code"; @@ -1118,6 +1160,9 @@ /* No comment provided by engineer. */ "Username:" = "Username:"; +/* No comment provided by engineer. */ +"Using Index 0" = "Using Index 0"; + /* No comment provided by engineer. */ "Verified Successfully" = "Verified Successfully"; @@ -1164,10 +1209,10 @@ "Wallet Keys" = "Wallet Keys"; /* No comment provided by engineer. */ -"Warning" = "Warning"; +"WARNING" = "WARNING"; /* No comment provided by engineer. */ -"WARNING" = "WARNING"; +"Warning" = "Warning"; /* No comment provided by engineer. */ "Watch only" = "Watch only"; @@ -1196,6 +1241,9 @@ /* No comment provided by engineer. */ "with Dash blockchain" = "with Dash blockchain"; +/* No comment provided by engineer. */ +"Would you like to register this masternode?" = "Would you like to register this masternode?"; + /* No comment provided by engineer. */ "WRITE DOWN YOUR RECOVERY PHRASE" = "WRITE DOWN YOUR RECOVERY PHRASE"; diff --git a/DashWallet/es.lproj/Localizable.strings b/DashWallet/es.lproj/Localizable.strings index 6ea013e1e..fb04decd4 100644 --- a/DashWallet/es.lproj/Localizable.strings +++ b/DashWallet/es.lproj/Localizable.strings @@ -266,6 +266,9 @@ /* No comment provided by engineer. */ "Date" = "Date"; +/* No comment provided by engineer. */ +"Default" = "Default"; + /* No comment provided by engineer. */ "Default currency, shortcuts, about…" = "Default currency, shortcuts, about…"; @@ -320,15 +323,39 @@ /* No comment provided by engineer. */ "Enter" = "Enter"; +/* No comment provided by engineer. */ +"Enter IP Address of Masternode" = "Enter IP Address of Masternode"; + +/* No comment provided by engineer. */ +"Enter Operator Public Key" = "Enter Operator Public Key"; + +/* No comment provided by engineer. */ +"Enter Owner Public Key" = "Enter Owner Public Key"; + +/* No comment provided by engineer. */ +"Enter Payout Address" = "Enter Payout Address"; + /* No comment provided by engineer. */ "Enter PIN" = "Enter PIN"; +/* No comment provided by engineer. */ +"Enter Port of Masternode" = "Enter Port of Masternode"; + /* No comment provided by engineer. */ "Enter Recovery Phrase" = "Enter Recovery Phrase"; /* No comment provided by engineer. */ "Enter the amount to transfer below" = "Ingresa el monto a transferir debajo"; +/* No comment provided by engineer. */ +"Enter Transaction Hash" = "Enter Transaction Hash"; + +/* No comment provided by engineer. */ +"Enter Transaction Index" = "Enter Transaction Index"; + +/* No comment provided by engineer. */ +"Enter Voting Public Key" = "Enter Voting Public Key"; + /* No comment provided by engineer. */ "Enter your 2FA code below" = "Ingresa tu código 2FA debajo"; @@ -413,6 +440,9 @@ /* No comment provided by engineer. */ "Incase if this device is lost / damaged, incase if the dash wallet is uninstalled accidently from this device, you will need this recovery phrase to access your funds." = "Incase if this device is lost / damaged, incase if the dash wallet is uninstalled accidently from this device, you will need this recovery phrase to access your funds."; +/* No comment provided by engineer. */ +"Incorrect collateral index" = "Incorrect collateral index"; + /* No comment provided by engineer. */ "Insufficient Funds" = "Fondos insuficientes"; @@ -476,6 +506,9 @@ /* No comment provided by engineer. */ "Long press to copy ID" = "Long press to copy ID"; +/* No comment provided by engineer. */ +"Lookup" = "Lookup"; + /* No comment provided by engineer. */ "Masternode control" = "Masternode control"; @@ -761,6 +794,9 @@ /* No comment provided by engineer. */ "Recovery phrase must have %d words" = "Recovery phrase must have %d words"; +/* No comment provided by engineer. */ +"Register" = "Register"; + /* No comment provided by engineer. */ "Register Masternode" = "Register Masternode"; @@ -1052,6 +1088,9 @@ /* No comment provided by engineer. */ "Transaction id" = "id de transacción"; +/* No comment provided by engineer. */ +"Transaction was not signed." = "Transaction was not signed."; + /* No comment provided by engineer. */ "Transfer" = "Transferencia"; @@ -1079,6 +1118,9 @@ /* No comment provided by engineer. */ "Unable to connect" = "Unable to connect"; +/* No comment provided by engineer. */ +"Unable to create ProviderRegistrationTransaction." = "Unable to create ProviderRegistrationTransaction."; + /* No comment provided by engineer. */ "Unable to get new qr code" = "No se puede obtener un nuevo código QR"; @@ -1118,6 +1160,9 @@ /* No comment provided by engineer. */ "Username:" = "Username:"; +/* No comment provided by engineer. */ +"Using Index 0" = "Using Index 0"; + /* No comment provided by engineer. */ "Verified Successfully" = "Verified Successfully"; @@ -1164,10 +1209,10 @@ "Wallet Keys" = "Llaves de billetera"; /* No comment provided by engineer. */ -"Warning" = "Warning"; +"WARNING" = "ADVERTENCIA"; /* No comment provided by engineer. */ -"WARNING" = "ADVERTENCIA"; +"Warning" = "Warning"; /* No comment provided by engineer. */ "Watch only" = "Watch only"; @@ -1196,6 +1241,9 @@ /* No comment provided by engineer. */ "with Dash blockchain" = "with Dash blockchain"; +/* No comment provided by engineer. */ +"Would you like to register this masternode?" = "Would you like to register this masternode?"; + /* No comment provided by engineer. */ "WRITE DOWN YOUR RECOVERY PHRASE" = "ANOTE SU FRASE DE RECUPERACIÓN"; diff --git a/DashWallet/fr.lproj/Localizable.strings b/DashWallet/fr.lproj/Localizable.strings index 73a086393..67b11410d 100644 --- a/DashWallet/fr.lproj/Localizable.strings +++ b/DashWallet/fr.lproj/Localizable.strings @@ -266,6 +266,9 @@ /* No comment provided by engineer. */ "Date" = "Date"; +/* No comment provided by engineer. */ +"Default" = "Default"; + /* No comment provided by engineer. */ "Default currency, shortcuts, about…" = "Default currency, shortcuts, about…"; @@ -320,15 +323,39 @@ /* No comment provided by engineer. */ "Enter" = "Enter"; +/* No comment provided by engineer. */ +"Enter IP Address of Masternode" = "Enter IP Address of Masternode"; + +/* No comment provided by engineer. */ +"Enter Operator Public Key" = "Enter Operator Public Key"; + +/* No comment provided by engineer. */ +"Enter Owner Public Key" = "Enter Owner Public Key"; + +/* No comment provided by engineer. */ +"Enter Payout Address" = "Enter Payout Address"; + /* No comment provided by engineer. */ "Enter PIN" = "Enter PIN"; +/* No comment provided by engineer. */ +"Enter Port of Masternode" = "Enter Port of Masternode"; + /* No comment provided by engineer. */ "Enter Recovery Phrase" = "Enter Recovery Phrase"; /* No comment provided by engineer. */ "Enter the amount to transfer below" = "Indiquez ci-dessous le montant à transférer"; +/* No comment provided by engineer. */ +"Enter Transaction Hash" = "Enter Transaction Hash"; + +/* No comment provided by engineer. */ +"Enter Transaction Index" = "Enter Transaction Index"; + +/* No comment provided by engineer. */ +"Enter Voting Public Key" = "Enter Voting Public Key"; + /* No comment provided by engineer. */ "Enter your 2FA code below" = "Tapez ci-dessous votre code 2FA"; @@ -413,6 +440,9 @@ /* No comment provided by engineer. */ "Incase if this device is lost / damaged, incase if the dash wallet is uninstalled accidently from this device, you will need this recovery phrase to access your funds." = "Incase if this device is lost / damaged, incase if the dash wallet is uninstalled accidently from this device, you will need this recovery phrase to access your funds."; +/* No comment provided by engineer. */ +"Incorrect collateral index" = "Incorrect collateral index"; + /* No comment provided by engineer. */ "Insufficient Funds" = "Fonds insuffisants"; @@ -476,6 +506,9 @@ /* No comment provided by engineer. */ "Long press to copy ID" = "Long press to copy ID"; +/* No comment provided by engineer. */ +"Lookup" = "Lookup"; + /* No comment provided by engineer. */ "Masternode control" = "Masternode control"; @@ -761,6 +794,9 @@ /* No comment provided by engineer. */ "Recovery phrase must have %d words" = "Recovery phrase must have %d words"; +/* No comment provided by engineer. */ +"Register" = "Register"; + /* No comment provided by engineer. */ "Register Masternode" = "Register Masternode"; @@ -1052,6 +1088,9 @@ /* No comment provided by engineer. */ "Transaction id" = "Identifiant de transaction"; +/* No comment provided by engineer. */ +"Transaction was not signed." = "Transaction was not signed."; + /* No comment provided by engineer. */ "Transfer" = "Transférer"; @@ -1079,6 +1118,9 @@ /* No comment provided by engineer. */ "Unable to connect" = "Unable to connect"; +/* No comment provided by engineer. */ +"Unable to create ProviderRegistrationTransaction." = "Unable to create ProviderRegistrationTransaction."; + /* No comment provided by engineer. */ "Unable to get new qr code" = "Impossible de générer un nouveau code qr"; @@ -1118,6 +1160,9 @@ /* No comment provided by engineer. */ "Username:" = "Username:"; +/* No comment provided by engineer. */ +"Using Index 0" = "Using Index 0"; + /* No comment provided by engineer. */ "Verified Successfully" = "Verified Successfully"; @@ -1164,10 +1209,10 @@ "Wallet Keys" = "Clés de portefeuille"; /* No comment provided by engineer. */ -"Warning" = "Warning"; +"WARNING" = "AVERTISSEMENT"; /* No comment provided by engineer. */ -"WARNING" = "AVERTISSEMENT"; +"Warning" = "Warning"; /* No comment provided by engineer. */ "Watch only" = "Watch only"; @@ -1196,6 +1241,9 @@ /* No comment provided by engineer. */ "with Dash blockchain" = "with Dash blockchain"; +/* No comment provided by engineer. */ +"Would you like to register this masternode?" = "Would you like to register this masternode?"; + /* No comment provided by engineer. */ "WRITE DOWN YOUR RECOVERY PHRASE" = "ÉCRIVEZ SUR PAPIER VOTRE PHRASE DE RÉCUPÉRATION"; diff --git a/DashWallet/id.lproj/Localizable.strings b/DashWallet/id.lproj/Localizable.strings index eb20d3ff7..2fb3807e6 100644 --- a/DashWallet/id.lproj/Localizable.strings +++ b/DashWallet/id.lproj/Localizable.strings @@ -266,6 +266,9 @@ /* No comment provided by engineer. */ "Date" = "Date"; +/* No comment provided by engineer. */ +"Default" = "Default"; + /* No comment provided by engineer. */ "Default currency, shortcuts, about…" = "Default currency, shortcuts, about…"; @@ -320,15 +323,39 @@ /* No comment provided by engineer. */ "Enter" = "Enter"; +/* No comment provided by engineer. */ +"Enter IP Address of Masternode" = "Enter IP Address of Masternode"; + +/* No comment provided by engineer. */ +"Enter Operator Public Key" = "Enter Operator Public Key"; + +/* No comment provided by engineer. */ +"Enter Owner Public Key" = "Enter Owner Public Key"; + +/* No comment provided by engineer. */ +"Enter Payout Address" = "Enter Payout Address"; + /* No comment provided by engineer. */ "Enter PIN" = "Enter PIN"; +/* No comment provided by engineer. */ +"Enter Port of Masternode" = "Enter Port of Masternode"; + /* No comment provided by engineer. */ "Enter Recovery Phrase" = "Enter Recovery Phrase"; /* No comment provided by engineer. */ "Enter the amount to transfer below" = "Masukkan jumlah yang akan ditransfer di bawah ini"; +/* No comment provided by engineer. */ +"Enter Transaction Hash" = "Enter Transaction Hash"; + +/* No comment provided by engineer. */ +"Enter Transaction Index" = "Enter Transaction Index"; + +/* No comment provided by engineer. */ +"Enter Voting Public Key" = "Enter Voting Public Key"; + /* No comment provided by engineer. */ "Enter your 2FA code below" = "Masukkan kode 2FA Anda di bawah ini"; @@ -413,6 +440,9 @@ /* No comment provided by engineer. */ "Incase if this device is lost / damaged, incase if the dash wallet is uninstalled accidently from this device, you will need this recovery phrase to access your funds." = "Incase if this device is lost / damaged, incase if the dash wallet is uninstalled accidently from this device, you will need this recovery phrase to access your funds."; +/* No comment provided by engineer. */ +"Incorrect collateral index" = "Incorrect collateral index"; + /* No comment provided by engineer. */ "Insufficient Funds" = "Dana tidak mencukupi"; @@ -476,6 +506,9 @@ /* No comment provided by engineer. */ "Long press to copy ID" = "Long press to copy ID"; +/* No comment provided by engineer. */ +"Lookup" = "Lookup"; + /* No comment provided by engineer. */ "Masternode control" = "Masternode control"; @@ -761,6 +794,9 @@ /* No comment provided by engineer. */ "Recovery phrase must have %d words" = "Recovery phrase must have %d words"; +/* No comment provided by engineer. */ +"Register" = "Register"; + /* No comment provided by engineer. */ "Register Masternode" = "Register Masternode"; @@ -1052,6 +1088,9 @@ /* No comment provided by engineer. */ "Transaction id" = "ID transaksi"; +/* No comment provided by engineer. */ +"Transaction was not signed." = "Transaction was not signed."; + /* No comment provided by engineer. */ "Transfer" = "Transfer"; @@ -1079,6 +1118,9 @@ /* No comment provided by engineer. */ "Unable to connect" = "Unable to connect"; +/* No comment provided by engineer. */ +"Unable to create ProviderRegistrationTransaction." = "Unable to create ProviderRegistrationTransaction."; + /* No comment provided by engineer. */ "Unable to get new qr code" = "Tiadak dapat mendapatkan kode qr baru"; @@ -1118,6 +1160,9 @@ /* No comment provided by engineer. */ "Username:" = "Username:"; +/* No comment provided by engineer. */ +"Using Index 0" = "Using Index 0"; + /* No comment provided by engineer. */ "Verified Successfully" = "Verified Successfully"; @@ -1164,10 +1209,10 @@ "Wallet Keys" = "Kunci Dompet"; /* No comment provided by engineer. */ -"Warning" = "Warning"; +"WARNING" = "PERINGATAN"; /* No comment provided by engineer. */ -"WARNING" = "PERINGATAN"; +"Warning" = "Warning"; /* No comment provided by engineer. */ "Watch only" = "Watch only"; @@ -1196,6 +1241,9 @@ /* No comment provided by engineer. */ "with Dash blockchain" = "with Dash blockchain"; +/* No comment provided by engineer. */ +"Would you like to register this masternode?" = "Would you like to register this masternode?"; + /* No comment provided by engineer. */ "WRITE DOWN YOUR RECOVERY PHRASE" = "CATAT FRASA PEMULIHAN ANDA"; diff --git a/DashWallet/it.lproj/Localizable.strings b/DashWallet/it.lproj/Localizable.strings index 6757d32f9..dbcb589c8 100644 --- a/DashWallet/it.lproj/Localizable.strings +++ b/DashWallet/it.lproj/Localizable.strings @@ -266,6 +266,9 @@ /* No comment provided by engineer. */ "Date" = "Date"; +/* No comment provided by engineer. */ +"Default" = "Default"; + /* No comment provided by engineer. */ "Default currency, shortcuts, about…" = "Default currency, shortcuts, about…"; @@ -320,15 +323,39 @@ /* No comment provided by engineer. */ "Enter" = "Enter"; +/* No comment provided by engineer. */ +"Enter IP Address of Masternode" = "Enter IP Address of Masternode"; + +/* No comment provided by engineer. */ +"Enter Operator Public Key" = "Enter Operator Public Key"; + +/* No comment provided by engineer. */ +"Enter Owner Public Key" = "Enter Owner Public Key"; + +/* No comment provided by engineer. */ +"Enter Payout Address" = "Enter Payout Address"; + /* No comment provided by engineer. */ "Enter PIN" = "Enter PIN"; +/* No comment provided by engineer. */ +"Enter Port of Masternode" = "Enter Port of Masternode"; + /* No comment provided by engineer. */ "Enter Recovery Phrase" = "Enter Recovery Phrase"; /* No comment provided by engineer. */ "Enter the amount to transfer below" = "Inserisci l'importo da trasferire di seguito"; +/* No comment provided by engineer. */ +"Enter Transaction Hash" = "Enter Transaction Hash"; + +/* No comment provided by engineer. */ +"Enter Transaction Index" = "Enter Transaction Index"; + +/* No comment provided by engineer. */ +"Enter Voting Public Key" = "Enter Voting Public Key"; + /* No comment provided by engineer. */ "Enter your 2FA code below" = "Inserisci il tuo codice 2FA di seguito"; @@ -413,6 +440,9 @@ /* No comment provided by engineer. */ "Incase if this device is lost / damaged, incase if the dash wallet is uninstalled accidently from this device, you will need this recovery phrase to access your funds." = "Incase if this device is lost / damaged, incase if the dash wallet is uninstalled accidently from this device, you will need this recovery phrase to access your funds."; +/* No comment provided by engineer. */ +"Incorrect collateral index" = "Incorrect collateral index"; + /* No comment provided by engineer. */ "Insufficient Funds" = "Fondi insufficenti"; @@ -476,6 +506,9 @@ /* No comment provided by engineer. */ "Long press to copy ID" = "Long press to copy ID"; +/* No comment provided by engineer. */ +"Lookup" = "Lookup"; + /* No comment provided by engineer. */ "Masternode control" = "Masternode control"; @@ -761,6 +794,9 @@ /* No comment provided by engineer. */ "Recovery phrase must have %d words" = "Recovery phrase must have %d words"; +/* No comment provided by engineer. */ +"Register" = "Register"; + /* No comment provided by engineer. */ "Register Masternode" = "Register Masternode"; @@ -1052,6 +1088,9 @@ /* No comment provided by engineer. */ "Transaction id" = "id Transazione"; +/* No comment provided by engineer. */ +"Transaction was not signed." = "Transaction was not signed."; + /* No comment provided by engineer. */ "Transfer" = "Trasferimento"; @@ -1079,6 +1118,9 @@ /* No comment provided by engineer. */ "Unable to connect" = "Unable to connect"; +/* No comment provided by engineer. */ +"Unable to create ProviderRegistrationTransaction." = "Unable to create ProviderRegistrationTransaction."; + /* No comment provided by engineer. */ "Unable to get new qr code" = "Impossibile ottenere un nuovo codice QR"; @@ -1118,6 +1160,9 @@ /* No comment provided by engineer. */ "Username:" = "Username:"; +/* No comment provided by engineer. */ +"Using Index 0" = "Using Index 0"; + /* No comment provided by engineer. */ "Verified Successfully" = "Verified Successfully"; @@ -1164,10 +1209,10 @@ "Wallet Keys" = "Chiavi Portafoglio"; /* No comment provided by engineer. */ -"Warning" = "Warning"; +"WARNING" = "ATTENZIONE"; /* No comment provided by engineer. */ -"WARNING" = "ATTENZIONE"; +"Warning" = "Warning"; /* No comment provided by engineer. */ "Watch only" = "Watch only"; @@ -1196,6 +1241,9 @@ /* No comment provided by engineer. */ "with Dash blockchain" = "with Dash blockchain"; +/* No comment provided by engineer. */ +"Would you like to register this masternode?" = "Would you like to register this masternode?"; + /* No comment provided by engineer. */ "WRITE DOWN YOUR RECOVERY PHRASE" = "SCRIVI LA TUA FRASE DI RECUPERO"; diff --git a/DashWallet/ja.lproj/Localizable.strings b/DashWallet/ja.lproj/Localizable.strings index 787ca4089..42c9cc3e6 100644 --- a/DashWallet/ja.lproj/Localizable.strings +++ b/DashWallet/ja.lproj/Localizable.strings @@ -266,6 +266,9 @@ /* No comment provided by engineer. */ "Date" = "Date"; +/* No comment provided by engineer. */ +"Default" = "Default"; + /* No comment provided by engineer. */ "Default currency, shortcuts, about…" = "Default currency, shortcuts, about…"; @@ -320,15 +323,39 @@ /* No comment provided by engineer. */ "Enter" = "Enter"; +/* No comment provided by engineer. */ +"Enter IP Address of Masternode" = "Enter IP Address of Masternode"; + +/* No comment provided by engineer. */ +"Enter Operator Public Key" = "Enter Operator Public Key"; + +/* No comment provided by engineer. */ +"Enter Owner Public Key" = "Enter Owner Public Key"; + +/* No comment provided by engineer. */ +"Enter Payout Address" = "Enter Payout Address"; + /* No comment provided by engineer. */ "Enter PIN" = "Enter PIN"; +/* No comment provided by engineer. */ +"Enter Port of Masternode" = "Enter Port of Masternode"; + /* No comment provided by engineer. */ "Enter Recovery Phrase" = "Enter Recovery Phrase"; /* No comment provided by engineer. */ "Enter the amount to transfer below" = "下に送金額を入力してください"; +/* No comment provided by engineer. */ +"Enter Transaction Hash" = "Enter Transaction Hash"; + +/* No comment provided by engineer. */ +"Enter Transaction Index" = "Enter Transaction Index"; + +/* No comment provided by engineer. */ +"Enter Voting Public Key" = "Enter Voting Public Key"; + /* No comment provided by engineer. */ "Enter your 2FA code below" = "下に2FAコードを入力してください"; @@ -413,6 +440,9 @@ /* No comment provided by engineer. */ "Incase if this device is lost / damaged, incase if the dash wallet is uninstalled accidently from this device, you will need this recovery phrase to access your funds." = "Incase if this device is lost / damaged, incase if the dash wallet is uninstalled accidently from this device, you will need this recovery phrase to access your funds."; +/* No comment provided by engineer. */ +"Incorrect collateral index" = "Incorrect collateral index"; + /* No comment provided by engineer. */ "Insufficient Funds" = "資金不足"; @@ -476,6 +506,9 @@ /* No comment provided by engineer. */ "Long press to copy ID" = "Long press to copy ID"; +/* No comment provided by engineer. */ +"Lookup" = "Lookup"; + /* No comment provided by engineer. */ "Masternode control" = "Masternode control"; @@ -761,6 +794,9 @@ /* No comment provided by engineer. */ "Recovery phrase must have %d words" = "Recovery phrase must have %d words"; +/* No comment provided by engineer. */ +"Register" = "Register"; + /* No comment provided by engineer. */ "Register Masternode" = "Register Masternode"; @@ -1052,6 +1088,9 @@ /* No comment provided by engineer. */ "Transaction id" = "取引のid"; +/* No comment provided by engineer. */ +"Transaction was not signed." = "Transaction was not signed."; + /* No comment provided by engineer. */ "Transfer" = "送金"; @@ -1079,6 +1118,9 @@ /* No comment provided by engineer. */ "Unable to connect" = "Unable to connect"; +/* No comment provided by engineer. */ +"Unable to create ProviderRegistrationTransaction." = "Unable to create ProviderRegistrationTransaction."; + /* No comment provided by engineer. */ "Unable to get new qr code" = "新しいQRコードが取得できません"; @@ -1118,6 +1160,9 @@ /* No comment provided by engineer. */ "Username:" = "Username:"; +/* No comment provided by engineer. */ +"Using Index 0" = "Using Index 0"; + /* No comment provided by engineer. */ "Verified Successfully" = "Verified Successfully"; @@ -1164,10 +1209,10 @@ "Wallet Keys" = "ウォレットの諸々のキー"; /* No comment provided by engineer. */ -"Warning" = "Warning"; +"WARNING" = "警告"; /* No comment provided by engineer. */ -"WARNING" = "警告"; +"Warning" = "Warning"; /* No comment provided by engineer. */ "Watch only" = "Watch only"; @@ -1196,6 +1241,9 @@ /* No comment provided by engineer. */ "with Dash blockchain" = "with Dash blockchain"; +/* No comment provided by engineer. */ +"Would you like to register this masternode?" = "Would you like to register this masternode?"; + /* No comment provided by engineer. */ "WRITE DOWN YOUR RECOVERY PHRASE" = "復元フレーズを書き留めて下さい!"; diff --git a/DashWallet/ko.lproj/Localizable.strings b/DashWallet/ko.lproj/Localizable.strings index 8b45ffa5b..03600d02e 100644 --- a/DashWallet/ko.lproj/Localizable.strings +++ b/DashWallet/ko.lproj/Localizable.strings @@ -266,6 +266,9 @@ /* No comment provided by engineer. */ "Date" = "Date"; +/* No comment provided by engineer. */ +"Default" = "Default"; + /* No comment provided by engineer. */ "Default currency, shortcuts, about…" = "Default currency, shortcuts, about…"; @@ -320,15 +323,39 @@ /* No comment provided by engineer. */ "Enter" = "Enter"; +/* No comment provided by engineer. */ +"Enter IP Address of Masternode" = "Enter IP Address of Masternode"; + +/* No comment provided by engineer. */ +"Enter Operator Public Key" = "Enter Operator Public Key"; + +/* No comment provided by engineer. */ +"Enter Owner Public Key" = "Enter Owner Public Key"; + +/* No comment provided by engineer. */ +"Enter Payout Address" = "Enter Payout Address"; + /* No comment provided by engineer. */ "Enter PIN" = "Enter PIN"; +/* No comment provided by engineer. */ +"Enter Port of Masternode" = "Enter Port of Masternode"; + /* No comment provided by engineer. */ "Enter Recovery Phrase" = "Enter Recovery Phrase"; /* No comment provided by engineer. */ "Enter the amount to transfer below" = "아래에 송금할 금액을 입력하세요"; +/* No comment provided by engineer. */ +"Enter Transaction Hash" = "Enter Transaction Hash"; + +/* No comment provided by engineer. */ +"Enter Transaction Index" = "Enter Transaction Index"; + +/* No comment provided by engineer. */ +"Enter Voting Public Key" = "Enter Voting Public Key"; + /* No comment provided by engineer. */ "Enter your 2FA code below" = "아래에 귀하의 2FA 코드를 입력하세요"; @@ -413,6 +440,9 @@ /* No comment provided by engineer. */ "Incase if this device is lost / damaged, incase if the dash wallet is uninstalled accidently from this device, you will need this recovery phrase to access your funds." = "Incase if this device is lost / damaged, incase if the dash wallet is uninstalled accidently from this device, you will need this recovery phrase to access your funds."; +/* No comment provided by engineer. */ +"Incorrect collateral index" = "Incorrect collateral index"; + /* No comment provided by engineer. */ "Insufficient Funds" = "잔액 부족"; @@ -476,6 +506,9 @@ /* No comment provided by engineer. */ "Long press to copy ID" = "Long press to copy ID"; +/* No comment provided by engineer. */ +"Lookup" = "Lookup"; + /* No comment provided by engineer. */ "Masternode control" = "Masternode control"; @@ -761,6 +794,9 @@ /* No comment provided by engineer. */ "Recovery phrase must have %d words" = "Recovery phrase must have %d words"; +/* No comment provided by engineer. */ +"Register" = "Register"; + /* No comment provided by engineer. */ "Register Masternode" = "Register Masternode"; @@ -1052,6 +1088,9 @@ /* No comment provided by engineer. */ "Transaction id" = "거래 ID"; +/* No comment provided by engineer. */ +"Transaction was not signed." = "Transaction was not signed."; + /* No comment provided by engineer. */ "Transfer" = "송금"; @@ -1079,6 +1118,9 @@ /* No comment provided by engineer. */ "Unable to connect" = "Unable to connect"; +/* No comment provided by engineer. */ +"Unable to create ProviderRegistrationTransaction." = "Unable to create ProviderRegistrationTransaction."; + /* No comment provided by engineer. */ "Unable to get new qr code" = "새 QR코드를 불러올 수 없습니다"; @@ -1118,6 +1160,9 @@ /* No comment provided by engineer. */ "Username:" = "Username:"; +/* No comment provided by engineer. */ +"Using Index 0" = "Using Index 0"; + /* No comment provided by engineer. */ "Verified Successfully" = "Verified Successfully"; @@ -1164,10 +1209,10 @@ "Wallet Keys" = "지갑 키"; /* No comment provided by engineer. */ -"Warning" = "Warning"; +"WARNING" = "경고"; /* No comment provided by engineer. */ -"WARNING" = "경고"; +"Warning" = "Warning"; /* No comment provided by engineer. */ "Watch only" = "Watch only"; @@ -1196,6 +1241,9 @@ /* No comment provided by engineer. */ "with Dash blockchain" = "with Dash blockchain"; +/* No comment provided by engineer. */ +"Would you like to register this masternode?" = "Would you like to register this masternode?"; + /* No comment provided by engineer. */ "WRITE DOWN YOUR RECOVERY PHRASE" = "복원 문구를 옮겨 적어주세요"; diff --git a/DashWallet/nb.lproj/Localizable.strings b/DashWallet/nb.lproj/Localizable.strings index f37d2f109..8bf62d3cc 100644 --- a/DashWallet/nb.lproj/Localizable.strings +++ b/DashWallet/nb.lproj/Localizable.strings @@ -266,6 +266,9 @@ /* No comment provided by engineer. */ "Date" = "Date"; +/* No comment provided by engineer. */ +"Default" = "Default"; + /* No comment provided by engineer. */ "Default currency, shortcuts, about…" = "Default currency, shortcuts, about…"; @@ -320,15 +323,39 @@ /* No comment provided by engineer. */ "Enter" = "Enter"; +/* No comment provided by engineer. */ +"Enter IP Address of Masternode" = "Enter IP Address of Masternode"; + +/* No comment provided by engineer. */ +"Enter Operator Public Key" = "Enter Operator Public Key"; + +/* No comment provided by engineer. */ +"Enter Owner Public Key" = "Enter Owner Public Key"; + +/* No comment provided by engineer. */ +"Enter Payout Address" = "Enter Payout Address"; + /* No comment provided by engineer. */ "Enter PIN" = "Enter PIN"; +/* No comment provided by engineer. */ +"Enter Port of Masternode" = "Enter Port of Masternode"; + /* No comment provided by engineer. */ "Enter Recovery Phrase" = "Enter Recovery Phrase"; /* No comment provided by engineer. */ "Enter the amount to transfer below" = "Enter the amount to transfer below"; +/* No comment provided by engineer. */ +"Enter Transaction Hash" = "Enter Transaction Hash"; + +/* No comment provided by engineer. */ +"Enter Transaction Index" = "Enter Transaction Index"; + +/* No comment provided by engineer. */ +"Enter Voting Public Key" = "Enter Voting Public Key"; + /* No comment provided by engineer. */ "Enter your 2FA code below" = "Enter your 2FA code below"; @@ -413,6 +440,9 @@ /* No comment provided by engineer. */ "Incase if this device is lost / damaged, incase if the dash wallet is uninstalled accidently from this device, you will need this recovery phrase to access your funds." = "Incase if this device is lost / damaged, incase if the dash wallet is uninstalled accidently from this device, you will need this recovery phrase to access your funds."; +/* No comment provided by engineer. */ +"Incorrect collateral index" = "Incorrect collateral index"; + /* No comment provided by engineer. */ "Insufficient Funds" = "Insufficient Funds"; @@ -476,6 +506,9 @@ /* No comment provided by engineer. */ "Long press to copy ID" = "Long press to copy ID"; +/* No comment provided by engineer. */ +"Lookup" = "Lookup"; + /* No comment provided by engineer. */ "Masternode control" = "Masternode control"; @@ -761,6 +794,9 @@ /* No comment provided by engineer. */ "Recovery phrase must have %d words" = "Recovery phrase must have %d words"; +/* No comment provided by engineer. */ +"Register" = "Register"; + /* No comment provided by engineer. */ "Register Masternode" = "Register Masternode"; @@ -1052,6 +1088,9 @@ /* No comment provided by engineer. */ "Transaction id" = "Transaction id"; +/* No comment provided by engineer. */ +"Transaction was not signed." = "Transaction was not signed."; + /* No comment provided by engineer. */ "Transfer" = "Transfer"; @@ -1079,6 +1118,9 @@ /* No comment provided by engineer. */ "Unable to connect" = "Unable to connect"; +/* No comment provided by engineer. */ +"Unable to create ProviderRegistrationTransaction." = "Unable to create ProviderRegistrationTransaction."; + /* No comment provided by engineer. */ "Unable to get new qr code" = "Unable to get new qr code"; @@ -1118,6 +1160,9 @@ /* No comment provided by engineer. */ "Username:" = "Username:"; +/* No comment provided by engineer. */ +"Using Index 0" = "Using Index 0"; + /* No comment provided by engineer. */ "Verified Successfully" = "Verified Successfully"; @@ -1164,10 +1209,10 @@ "Wallet Keys" = "Wallet Keys"; /* No comment provided by engineer. */ -"Warning" = "Warning"; +"WARNING" = "ADVARSEL"; /* No comment provided by engineer. */ -"WARNING" = "ADVARSEL"; +"Warning" = "Warning"; /* No comment provided by engineer. */ "Watch only" = "Watch only"; @@ -1196,6 +1241,9 @@ /* No comment provided by engineer. */ "with Dash blockchain" = "with Dash blockchain"; +/* No comment provided by engineer. */ +"Would you like to register this masternode?" = "Would you like to register this masternode?"; + /* No comment provided by engineer. */ "WRITE DOWN YOUR RECOVERY PHRASE" = "SKRIV NED DIN GJENOPPRETTINGSFRASE"; diff --git a/DashWallet/nl.lproj/Localizable.strings b/DashWallet/nl.lproj/Localizable.strings index e27629615..522576927 100644 --- a/DashWallet/nl.lproj/Localizable.strings +++ b/DashWallet/nl.lproj/Localizable.strings @@ -266,6 +266,9 @@ /* No comment provided by engineer. */ "Date" = "Date"; +/* No comment provided by engineer. */ +"Default" = "Default"; + /* No comment provided by engineer. */ "Default currency, shortcuts, about…" = "Default currency, shortcuts, about…"; @@ -320,15 +323,39 @@ /* No comment provided by engineer. */ "Enter" = "Enter"; +/* No comment provided by engineer. */ +"Enter IP Address of Masternode" = "Enter IP Address of Masternode"; + +/* No comment provided by engineer. */ +"Enter Operator Public Key" = "Enter Operator Public Key"; + +/* No comment provided by engineer. */ +"Enter Owner Public Key" = "Enter Owner Public Key"; + +/* No comment provided by engineer. */ +"Enter Payout Address" = "Enter Payout Address"; + /* No comment provided by engineer. */ "Enter PIN" = "Enter PIN"; +/* No comment provided by engineer. */ +"Enter Port of Masternode" = "Enter Port of Masternode"; + /* No comment provided by engineer. */ "Enter Recovery Phrase" = "Enter Recovery Phrase"; /* No comment provided by engineer. */ "Enter the amount to transfer below" = "Voer hieronder het bedrag in dat moet worden overgemaakt"; +/* No comment provided by engineer. */ +"Enter Transaction Hash" = "Enter Transaction Hash"; + +/* No comment provided by engineer. */ +"Enter Transaction Index" = "Enter Transaction Index"; + +/* No comment provided by engineer. */ +"Enter Voting Public Key" = "Enter Voting Public Key"; + /* No comment provided by engineer. */ "Enter your 2FA code below" = "Voer hieronder uw 2FA code in"; @@ -413,6 +440,9 @@ /* No comment provided by engineer. */ "Incase if this device is lost / damaged, incase if the dash wallet is uninstalled accidently from this device, you will need this recovery phrase to access your funds." = "Incase if this device is lost / damaged, incase if the dash wallet is uninstalled accidently from this device, you will need this recovery phrase to access your funds."; +/* No comment provided by engineer. */ +"Incorrect collateral index" = "Incorrect collateral index"; + /* No comment provided by engineer. */ "Insufficient Funds" = "Saldo niet toereikend"; @@ -476,6 +506,9 @@ /* No comment provided by engineer. */ "Long press to copy ID" = "Long press to copy ID"; +/* No comment provided by engineer. */ +"Lookup" = "Lookup"; + /* No comment provided by engineer. */ "Masternode control" = "Masternode control"; @@ -761,6 +794,9 @@ /* No comment provided by engineer. */ "Recovery phrase must have %d words" = "Recovery phrase must have %d words"; +/* No comment provided by engineer. */ +"Register" = "Register"; + /* No comment provided by engineer. */ "Register Masternode" = "Register Masternode"; @@ -1052,6 +1088,9 @@ /* No comment provided by engineer. */ "Transaction id" = "Transactie id"; +/* No comment provided by engineer. */ +"Transaction was not signed." = "Transaction was not signed."; + /* No comment provided by engineer. */ "Transfer" = "overdracht"; @@ -1079,6 +1118,9 @@ /* No comment provided by engineer. */ "Unable to connect" = "Unable to connect"; +/* No comment provided by engineer. */ +"Unable to create ProviderRegistrationTransaction." = "Unable to create ProviderRegistrationTransaction."; + /* No comment provided by engineer. */ "Unable to get new qr code" = "Verkrijgen van nieuwe QR-code is mislukt"; @@ -1118,6 +1160,9 @@ /* No comment provided by engineer. */ "Username:" = "Username:"; +/* No comment provided by engineer. */ +"Using Index 0" = "Using Index 0"; + /* No comment provided by engineer. */ "Verified Successfully" = "Verified Successfully"; @@ -1164,10 +1209,10 @@ "Wallet Keys" = "Portemonnee sleutels"; /* No comment provided by engineer. */ -"Warning" = "Warning"; +"WARNING" = "WAARSCHUWING"; /* No comment provided by engineer. */ -"WARNING" = "WAARSCHUWING"; +"Warning" = "Warning"; /* No comment provided by engineer. */ "Watch only" = "Watch only"; @@ -1196,6 +1241,9 @@ /* No comment provided by engineer. */ "with Dash blockchain" = "with Dash blockchain"; +/* No comment provided by engineer. */ +"Would you like to register this masternode?" = "Would you like to register this masternode?"; + /* No comment provided by engineer. */ "WRITE DOWN YOUR RECOVERY PHRASE" = "SCHRIJF JE HERSTELZIN OP"; diff --git a/DashWallet/pl.lproj/Localizable.strings b/DashWallet/pl.lproj/Localizable.strings index 09fc46069..4d3bfb7b6 100644 --- a/DashWallet/pl.lproj/Localizable.strings +++ b/DashWallet/pl.lproj/Localizable.strings @@ -266,6 +266,9 @@ /* No comment provided by engineer. */ "Date" = "Date"; +/* No comment provided by engineer. */ +"Default" = "Default"; + /* No comment provided by engineer. */ "Default currency, shortcuts, about…" = "Default currency, shortcuts, about…"; @@ -320,15 +323,39 @@ /* No comment provided by engineer. */ "Enter" = "Enter"; +/* No comment provided by engineer. */ +"Enter IP Address of Masternode" = "Enter IP Address of Masternode"; + +/* No comment provided by engineer. */ +"Enter Operator Public Key" = "Enter Operator Public Key"; + +/* No comment provided by engineer. */ +"Enter Owner Public Key" = "Enter Owner Public Key"; + +/* No comment provided by engineer. */ +"Enter Payout Address" = "Enter Payout Address"; + /* No comment provided by engineer. */ "Enter PIN" = "Enter PIN"; +/* No comment provided by engineer. */ +"Enter Port of Masternode" = "Enter Port of Masternode"; + /* No comment provided by engineer. */ "Enter Recovery Phrase" = "Enter Recovery Phrase"; /* No comment provided by engineer. */ "Enter the amount to transfer below" = "Poniżej wpisz kwotę do wysłania"; +/* No comment provided by engineer. */ +"Enter Transaction Hash" = "Enter Transaction Hash"; + +/* No comment provided by engineer. */ +"Enter Transaction Index" = "Enter Transaction Index"; + +/* No comment provided by engineer. */ +"Enter Voting Public Key" = "Enter Voting Public Key"; + /* No comment provided by engineer. */ "Enter your 2FA code below" = "Poniżej wpisz swój kod 2FA"; @@ -413,6 +440,9 @@ /* No comment provided by engineer. */ "Incase if this device is lost / damaged, incase if the dash wallet is uninstalled accidently from this device, you will need this recovery phrase to access your funds." = "Incase if this device is lost / damaged, incase if the dash wallet is uninstalled accidently from this device, you will need this recovery phrase to access your funds."; +/* No comment provided by engineer. */ +"Incorrect collateral index" = "Incorrect collateral index"; + /* No comment provided by engineer. */ "Insufficient Funds" = "Niewystarczająca ilość środków"; @@ -476,6 +506,9 @@ /* No comment provided by engineer. */ "Long press to copy ID" = "Long press to copy ID"; +/* No comment provided by engineer. */ +"Lookup" = "Lookup"; + /* No comment provided by engineer. */ "Masternode control" = "Masternode control"; @@ -761,6 +794,9 @@ /* No comment provided by engineer. */ "Recovery phrase must have %d words" = "Recovery phrase must have %d words"; +/* No comment provided by engineer. */ +"Register" = "Register"; + /* No comment provided by engineer. */ "Register Masternode" = "Register Masternode"; @@ -1052,6 +1088,9 @@ /* No comment provided by engineer. */ "Transaction id" = "Transakcja id"; +/* No comment provided by engineer. */ +"Transaction was not signed." = "Transaction was not signed."; + /* No comment provided by engineer. */ "Transfer" = "Prześlij"; @@ -1079,6 +1118,9 @@ /* No comment provided by engineer. */ "Unable to connect" = "Unable to connect"; +/* No comment provided by engineer. */ +"Unable to create ProviderRegistrationTransaction." = "Unable to create ProviderRegistrationTransaction."; + /* No comment provided by engineer. */ "Unable to get new qr code" = "Pobranie nowego kodu QR niemożliwe"; @@ -1118,6 +1160,9 @@ /* No comment provided by engineer. */ "Username:" = "Username:"; +/* No comment provided by engineer. */ +"Using Index 0" = "Using Index 0"; + /* No comment provided by engineer. */ "Verified Successfully" = "Verified Successfully"; @@ -1164,10 +1209,10 @@ "Wallet Keys" = "Klucze portfela"; /* No comment provided by engineer. */ -"Warning" = "Warning"; +"WARNING" = "UWAGA"; /* No comment provided by engineer. */ -"WARNING" = "UWAGA"; +"Warning" = "Warning"; /* No comment provided by engineer. */ "Watch only" = "Watch only"; @@ -1196,6 +1241,9 @@ /* No comment provided by engineer. */ "with Dash blockchain" = "with Dash blockchain"; +/* No comment provided by engineer. */ +"Would you like to register this masternode?" = "Would you like to register this masternode?"; + /* No comment provided by engineer. */ "WRITE DOWN YOUR RECOVERY PHRASE" = "ZAPISZ FRAZĘ ODZYSKIWANIA DANYCH"; diff --git a/DashWallet/pt.lproj/Localizable.strings b/DashWallet/pt.lproj/Localizable.strings index 3832f64a2..fdabca8d8 100644 --- a/DashWallet/pt.lproj/Localizable.strings +++ b/DashWallet/pt.lproj/Localizable.strings @@ -266,6 +266,9 @@ /* No comment provided by engineer. */ "Date" = "Date"; +/* No comment provided by engineer. */ +"Default" = "Default"; + /* No comment provided by engineer. */ "Default currency, shortcuts, about…" = "Default currency, shortcuts, about…"; @@ -320,15 +323,39 @@ /* No comment provided by engineer. */ "Enter" = "Enter"; +/* No comment provided by engineer. */ +"Enter IP Address of Masternode" = "Enter IP Address of Masternode"; + +/* No comment provided by engineer. */ +"Enter Operator Public Key" = "Enter Operator Public Key"; + +/* No comment provided by engineer. */ +"Enter Owner Public Key" = "Enter Owner Public Key"; + +/* No comment provided by engineer. */ +"Enter Payout Address" = "Enter Payout Address"; + /* No comment provided by engineer. */ "Enter PIN" = "Enter PIN"; +/* No comment provided by engineer. */ +"Enter Port of Masternode" = "Enter Port of Masternode"; + /* No comment provided by engineer. */ "Enter Recovery Phrase" = "Enter Recovery Phrase"; /* No comment provided by engineer. */ "Enter the amount to transfer below" = "Digite abaixo o valor para transferir"; +/* No comment provided by engineer. */ +"Enter Transaction Hash" = "Enter Transaction Hash"; + +/* No comment provided by engineer. */ +"Enter Transaction Index" = "Enter Transaction Index"; + +/* No comment provided by engineer. */ +"Enter Voting Public Key" = "Enter Voting Public Key"; + /* No comment provided by engineer. */ "Enter your 2FA code below" = "Digite abaixo seu código de autenticação de dois fatores \"2FA\""; @@ -413,6 +440,9 @@ /* No comment provided by engineer. */ "Incase if this device is lost / damaged, incase if the dash wallet is uninstalled accidently from this device, you will need this recovery phrase to access your funds." = "Incase if this device is lost / damaged, incase if the dash wallet is uninstalled accidently from this device, you will need this recovery phrase to access your funds."; +/* No comment provided by engineer. */ +"Incorrect collateral index" = "Incorrect collateral index"; + /* No comment provided by engineer. */ "Insufficient Funds" = "Saldo Insuficiente"; @@ -476,6 +506,9 @@ /* No comment provided by engineer. */ "Long press to copy ID" = "Long press to copy ID"; +/* No comment provided by engineer. */ +"Lookup" = "Lookup"; + /* No comment provided by engineer. */ "Masternode control" = "Masternode control"; @@ -761,6 +794,9 @@ /* No comment provided by engineer. */ "Recovery phrase must have %d words" = "Recovery phrase must have %d words"; +/* No comment provided by engineer. */ +"Register" = "Register"; + /* No comment provided by engineer. */ "Register Masternode" = "Register Masternode"; @@ -1052,6 +1088,9 @@ /* No comment provided by engineer. */ "Transaction id" = "Id da transação"; +/* No comment provided by engineer. */ +"Transaction was not signed." = "Transaction was not signed."; + /* No comment provided by engineer. */ "Transfer" = "Transferir"; @@ -1079,6 +1118,9 @@ /* No comment provided by engineer. */ "Unable to connect" = "Unable to connect"; +/* No comment provided by engineer. */ +"Unable to create ProviderRegistrationTransaction." = "Unable to create ProviderRegistrationTransaction."; + /* No comment provided by engineer. */ "Unable to get new qr code" = "Incapaz de pegar novo código qr"; @@ -1118,6 +1160,9 @@ /* No comment provided by engineer. */ "Username:" = "Username:"; +/* No comment provided by engineer. */ +"Using Index 0" = "Using Index 0"; + /* No comment provided by engineer. */ "Verified Successfully" = "Verified Successfully"; @@ -1164,10 +1209,10 @@ "Wallet Keys" = "Chaves da Carteira"; /* No comment provided by engineer. */ -"Warning" = "Warning"; +"WARNING" = "AVISO"; /* No comment provided by engineer. */ -"WARNING" = "AVISO"; +"Warning" = "Warning"; /* No comment provided by engineer. */ "Watch only" = "Watch only"; @@ -1196,6 +1241,9 @@ /* No comment provided by engineer. */ "with Dash blockchain" = "with Dash blockchain"; +/* No comment provided by engineer. */ +"Would you like to register this masternode?" = "Would you like to register this masternode?"; + /* No comment provided by engineer. */ "WRITE DOWN YOUR RECOVERY PHRASE" = "ANOTE SUA FRASE DE RECUPERAÇÃO"; diff --git a/DashWallet/ru.lproj/Localizable.strings b/DashWallet/ru.lproj/Localizable.strings index 6ee2d5e05..5de44da4a 100644 --- a/DashWallet/ru.lproj/Localizable.strings +++ b/DashWallet/ru.lproj/Localizable.strings @@ -266,6 +266,9 @@ /* No comment provided by engineer. */ "Date" = "Date"; +/* No comment provided by engineer. */ +"Default" = "Default"; + /* No comment provided by engineer. */ "Default currency, shortcuts, about…" = "Default currency, shortcuts, about…"; @@ -320,15 +323,39 @@ /* No comment provided by engineer. */ "Enter" = "Enter"; +/* No comment provided by engineer. */ +"Enter IP Address of Masternode" = "Enter IP Address of Masternode"; + +/* No comment provided by engineer. */ +"Enter Operator Public Key" = "Enter Operator Public Key"; + +/* No comment provided by engineer. */ +"Enter Owner Public Key" = "Enter Owner Public Key"; + +/* No comment provided by engineer. */ +"Enter Payout Address" = "Enter Payout Address"; + /* No comment provided by engineer. */ "Enter PIN" = "Enter PIN"; +/* No comment provided by engineer. */ +"Enter Port of Masternode" = "Enter Port of Masternode"; + /* No comment provided by engineer. */ "Enter Recovery Phrase" = "Enter Recovery Phrase"; /* No comment provided by engineer. */ "Enter the amount to transfer below" = "Введите сумму для отправки ниже"; +/* No comment provided by engineer. */ +"Enter Transaction Hash" = "Enter Transaction Hash"; + +/* No comment provided by engineer. */ +"Enter Transaction Index" = "Enter Transaction Index"; + +/* No comment provided by engineer. */ +"Enter Voting Public Key" = "Enter Voting Public Key"; + /* No comment provided by engineer. */ "Enter your 2FA code below" = "Введите код аутентификации 2FA ниже"; @@ -413,6 +440,9 @@ /* No comment provided by engineer. */ "Incase if this device is lost / damaged, incase if the dash wallet is uninstalled accidently from this device, you will need this recovery phrase to access your funds." = "Incase if this device is lost / damaged, incase if the dash wallet is uninstalled accidently from this device, you will need this recovery phrase to access your funds."; +/* No comment provided by engineer. */ +"Incorrect collateral index" = "Incorrect collateral index"; + /* No comment provided by engineer. */ "Insufficient Funds" = "Недостаточно средств"; @@ -476,6 +506,9 @@ /* No comment provided by engineer. */ "Long press to copy ID" = "Long press to copy ID"; +/* No comment provided by engineer. */ +"Lookup" = "Lookup"; + /* No comment provided by engineer. */ "Masternode control" = "Masternode control"; @@ -761,6 +794,9 @@ /* No comment provided by engineer. */ "Recovery phrase must have %d words" = "Recovery phrase must have %d words"; +/* No comment provided by engineer. */ +"Register" = "Register"; + /* No comment provided by engineer. */ "Register Masternode" = "Register Masternode"; @@ -1052,6 +1088,9 @@ /* No comment provided by engineer. */ "Transaction id" = "id транзакции"; +/* No comment provided by engineer. */ +"Transaction was not signed." = "Transaction was not signed."; + /* No comment provided by engineer. */ "Transfer" = "Перевод средств"; @@ -1079,6 +1118,9 @@ /* No comment provided by engineer. */ "Unable to connect" = "Unable to connect"; +/* No comment provided by engineer. */ +"Unable to create ProviderRegistrationTransaction." = "Unable to create ProviderRegistrationTransaction."; + /* No comment provided by engineer. */ "Unable to get new qr code" = "Не удалось получить новый QR-код"; @@ -1118,6 +1160,9 @@ /* No comment provided by engineer. */ "Username:" = "Username:"; +/* No comment provided by engineer. */ +"Using Index 0" = "Using Index 0"; + /* No comment provided by engineer. */ "Verified Successfully" = "Verified Successfully"; @@ -1164,10 +1209,10 @@ "Wallet Keys" = "Ключи кошелька"; /* No comment provided by engineer. */ -"Warning" = "Warning"; +"WARNING" = "ВНИМАНИЕ"; /* No comment provided by engineer. */ -"WARNING" = "ВНИМАНИЕ"; +"Warning" = "Warning"; /* No comment provided by engineer. */ "Watch only" = "Watch only"; @@ -1196,6 +1241,9 @@ /* No comment provided by engineer. */ "with Dash blockchain" = "with Dash blockchain"; +/* No comment provided by engineer. */ +"Would you like to register this masternode?" = "Would you like to register this masternode?"; + /* No comment provided by engineer. */ "WRITE DOWN YOUR RECOVERY PHRASE" = "ЗАПИШИТЕ ВАШУ ФРАЗУ ВОССТАНОВЛЕНИЯ"; diff --git a/DashWallet/sk.lproj/Localizable.strings b/DashWallet/sk.lproj/Localizable.strings index d24e6acbe..3b3b35e28 100644 --- a/DashWallet/sk.lproj/Localizable.strings +++ b/DashWallet/sk.lproj/Localizable.strings @@ -266,6 +266,9 @@ /* No comment provided by engineer. */ "Date" = "Date"; +/* No comment provided by engineer. */ +"Default" = "Default"; + /* No comment provided by engineer. */ "Default currency, shortcuts, about…" = "Default currency, shortcuts, about…"; @@ -320,15 +323,39 @@ /* No comment provided by engineer. */ "Enter" = "Enter"; +/* No comment provided by engineer. */ +"Enter IP Address of Masternode" = "Enter IP Address of Masternode"; + +/* No comment provided by engineer. */ +"Enter Operator Public Key" = "Enter Operator Public Key"; + +/* No comment provided by engineer. */ +"Enter Owner Public Key" = "Enter Owner Public Key"; + +/* No comment provided by engineer. */ +"Enter Payout Address" = "Enter Payout Address"; + /* No comment provided by engineer. */ "Enter PIN" = "Enter PIN"; +/* No comment provided by engineer. */ +"Enter Port of Masternode" = "Enter Port of Masternode"; + /* No comment provided by engineer. */ "Enter Recovery Phrase" = "Enter Recovery Phrase"; /* No comment provided by engineer. */ "Enter the amount to transfer below" = "Enter the amount to transfer below"; +/* No comment provided by engineer. */ +"Enter Transaction Hash" = "Enter Transaction Hash"; + +/* No comment provided by engineer. */ +"Enter Transaction Index" = "Enter Transaction Index"; + +/* No comment provided by engineer. */ +"Enter Voting Public Key" = "Enter Voting Public Key"; + /* No comment provided by engineer. */ "Enter your 2FA code below" = "Enter your 2FA code below"; @@ -413,6 +440,9 @@ /* No comment provided by engineer. */ "Incase if this device is lost / damaged, incase if the dash wallet is uninstalled accidently from this device, you will need this recovery phrase to access your funds." = "Incase if this device is lost / damaged, incase if the dash wallet is uninstalled accidently from this device, you will need this recovery phrase to access your funds."; +/* No comment provided by engineer. */ +"Incorrect collateral index" = "Incorrect collateral index"; + /* No comment provided by engineer. */ "Insufficient Funds" = "Insufficient Funds"; @@ -476,6 +506,9 @@ /* No comment provided by engineer. */ "Long press to copy ID" = "Long press to copy ID"; +/* No comment provided by engineer. */ +"Lookup" = "Lookup"; + /* No comment provided by engineer. */ "Masternode control" = "Masternode control"; @@ -761,6 +794,9 @@ /* No comment provided by engineer. */ "Recovery phrase must have %d words" = "Recovery phrase must have %d words"; +/* No comment provided by engineer. */ +"Register" = "Register"; + /* No comment provided by engineer. */ "Register Masternode" = "Register Masternode"; @@ -1052,6 +1088,9 @@ /* No comment provided by engineer. */ "Transaction id" = "Transaction id"; +/* No comment provided by engineer. */ +"Transaction was not signed." = "Transaction was not signed."; + /* No comment provided by engineer. */ "Transfer" = "Transfer"; @@ -1079,6 +1118,9 @@ /* No comment provided by engineer. */ "Unable to connect" = "Unable to connect"; +/* No comment provided by engineer. */ +"Unable to create ProviderRegistrationTransaction." = "Unable to create ProviderRegistrationTransaction."; + /* No comment provided by engineer. */ "Unable to get new qr code" = "Unable to get new qr code"; @@ -1118,6 +1160,9 @@ /* No comment provided by engineer. */ "Username:" = "Username:"; +/* No comment provided by engineer. */ +"Using Index 0" = "Using Index 0"; + /* No comment provided by engineer. */ "Verified Successfully" = "Verified Successfully"; @@ -1164,10 +1209,10 @@ "Wallet Keys" = "Wallet Keys"; /* No comment provided by engineer. */ -"Warning" = "Warning"; +"WARNING" = "UPOZORNENIE"; /* No comment provided by engineer. */ -"WARNING" = "UPOZORNENIE"; +"Warning" = "Warning"; /* No comment provided by engineer. */ "Watch only" = "Watch only"; @@ -1196,6 +1241,9 @@ /* No comment provided by engineer. */ "with Dash blockchain" = "with Dash blockchain"; +/* No comment provided by engineer. */ +"Would you like to register this masternode?" = "Would you like to register this masternode?"; + /* No comment provided by engineer. */ "WRITE DOWN YOUR RECOVERY PHRASE" = "WRITE DOWN YOUR RECOVERY PHRASE"; diff --git a/DashWallet/sq.lproj/Localizable.strings b/DashWallet/sq.lproj/Localizable.strings index e2a652fa2..b079084b6 100644 --- a/DashWallet/sq.lproj/Localizable.strings +++ b/DashWallet/sq.lproj/Localizable.strings @@ -266,6 +266,9 @@ /* No comment provided by engineer. */ "Date" = "Date"; +/* No comment provided by engineer. */ +"Default" = "Default"; + /* No comment provided by engineer. */ "Default currency, shortcuts, about…" = "Default currency, shortcuts, about…"; @@ -320,15 +323,39 @@ /* No comment provided by engineer. */ "Enter" = "Enter"; +/* No comment provided by engineer. */ +"Enter IP Address of Masternode" = "Enter IP Address of Masternode"; + +/* No comment provided by engineer. */ +"Enter Operator Public Key" = "Enter Operator Public Key"; + +/* No comment provided by engineer. */ +"Enter Owner Public Key" = "Enter Owner Public Key"; + +/* No comment provided by engineer. */ +"Enter Payout Address" = "Enter Payout Address"; + /* No comment provided by engineer. */ "Enter PIN" = "Enter PIN"; +/* No comment provided by engineer. */ +"Enter Port of Masternode" = "Enter Port of Masternode"; + /* No comment provided by engineer. */ "Enter Recovery Phrase" = "Enter Recovery Phrase"; /* No comment provided by engineer. */ "Enter the amount to transfer below" = "Enter the amount to transfer below"; +/* No comment provided by engineer. */ +"Enter Transaction Hash" = "Enter Transaction Hash"; + +/* No comment provided by engineer. */ +"Enter Transaction Index" = "Enter Transaction Index"; + +/* No comment provided by engineer. */ +"Enter Voting Public Key" = "Enter Voting Public Key"; + /* No comment provided by engineer. */ "Enter your 2FA code below" = "Enter your 2FA code below"; @@ -413,6 +440,9 @@ /* No comment provided by engineer. */ "Incase if this device is lost / damaged, incase if the dash wallet is uninstalled accidently from this device, you will need this recovery phrase to access your funds." = "Incase if this device is lost / damaged, incase if the dash wallet is uninstalled accidently from this device, you will need this recovery phrase to access your funds."; +/* No comment provided by engineer. */ +"Incorrect collateral index" = "Incorrect collateral index"; + /* No comment provided by engineer. */ "Insufficient Funds" = "Insufficient Funds"; @@ -476,6 +506,9 @@ /* No comment provided by engineer. */ "Long press to copy ID" = "Long press to copy ID"; +/* No comment provided by engineer. */ +"Lookup" = "Lookup"; + /* No comment provided by engineer. */ "Masternode control" = "Masternode control"; @@ -761,6 +794,9 @@ /* No comment provided by engineer. */ "Recovery phrase must have %d words" = "Recovery phrase must have %d words"; +/* No comment provided by engineer. */ +"Register" = "Register"; + /* No comment provided by engineer. */ "Register Masternode" = "Register Masternode"; @@ -1052,6 +1088,9 @@ /* No comment provided by engineer. */ "Transaction id" = "Transaction id"; +/* No comment provided by engineer. */ +"Transaction was not signed." = "Transaction was not signed."; + /* No comment provided by engineer. */ "Transfer" = "Transfer"; @@ -1079,6 +1118,9 @@ /* No comment provided by engineer. */ "Unable to connect" = "Unable to connect"; +/* No comment provided by engineer. */ +"Unable to create ProviderRegistrationTransaction." = "Unable to create ProviderRegistrationTransaction."; + /* No comment provided by engineer. */ "Unable to get new qr code" = "Unable to get new qr code"; @@ -1118,6 +1160,9 @@ /* No comment provided by engineer. */ "Username:" = "Username:"; +/* No comment provided by engineer. */ +"Using Index 0" = "Using Index 0"; + /* No comment provided by engineer. */ "Verified Successfully" = "Verified Successfully"; @@ -1164,10 +1209,10 @@ "Wallet Keys" = "Wallet Keys"; /* No comment provided by engineer. */ -"Warning" = "Warning"; +"WARNING" = "PARALAJMËRIM"; /* No comment provided by engineer. */ -"WARNING" = "PARALAJMËRIM"; +"Warning" = "Warning"; /* No comment provided by engineer. */ "Watch only" = "Watch only"; @@ -1196,6 +1241,9 @@ /* No comment provided by engineer. */ "with Dash blockchain" = "with Dash blockchain"; +/* No comment provided by engineer. */ +"Would you like to register this masternode?" = "Would you like to register this masternode?"; + /* No comment provided by engineer. */ "WRITE DOWN YOUR RECOVERY PHRASE" = "SHKRUAJE FRAZËN RIKTHYESE DIKU SIGURTË"; diff --git a/DashWallet/sv.lproj/Localizable.strings b/DashWallet/sv.lproj/Localizable.strings index f99a1f74e..ca22ff9f8 100644 --- a/DashWallet/sv.lproj/Localizable.strings +++ b/DashWallet/sv.lproj/Localizable.strings @@ -266,6 +266,9 @@ /* No comment provided by engineer. */ "Date" = "Date"; +/* No comment provided by engineer. */ +"Default" = "Default"; + /* No comment provided by engineer. */ "Default currency, shortcuts, about…" = "Default currency, shortcuts, about…"; @@ -320,15 +323,39 @@ /* No comment provided by engineer. */ "Enter" = "Enter"; +/* No comment provided by engineer. */ +"Enter IP Address of Masternode" = "Enter IP Address of Masternode"; + +/* No comment provided by engineer. */ +"Enter Operator Public Key" = "Enter Operator Public Key"; + +/* No comment provided by engineer. */ +"Enter Owner Public Key" = "Enter Owner Public Key"; + +/* No comment provided by engineer. */ +"Enter Payout Address" = "Enter Payout Address"; + /* No comment provided by engineer. */ "Enter PIN" = "Enter PIN"; +/* No comment provided by engineer. */ +"Enter Port of Masternode" = "Enter Port of Masternode"; + /* No comment provided by engineer. */ "Enter Recovery Phrase" = "Enter Recovery Phrase"; /* No comment provided by engineer. */ "Enter the amount to transfer below" = "Enter the amount to transfer below"; +/* No comment provided by engineer. */ +"Enter Transaction Hash" = "Enter Transaction Hash"; + +/* No comment provided by engineer. */ +"Enter Transaction Index" = "Enter Transaction Index"; + +/* No comment provided by engineer. */ +"Enter Voting Public Key" = "Enter Voting Public Key"; + /* No comment provided by engineer. */ "Enter your 2FA code below" = "Enter your 2FA code below"; @@ -413,6 +440,9 @@ /* No comment provided by engineer. */ "Incase if this device is lost / damaged, incase if the dash wallet is uninstalled accidently from this device, you will need this recovery phrase to access your funds." = "Incase if this device is lost / damaged, incase if the dash wallet is uninstalled accidently from this device, you will need this recovery phrase to access your funds."; +/* No comment provided by engineer. */ +"Incorrect collateral index" = "Incorrect collateral index"; + /* No comment provided by engineer. */ "Insufficient Funds" = "Insufficient Funds"; @@ -476,6 +506,9 @@ /* No comment provided by engineer. */ "Long press to copy ID" = "Long press to copy ID"; +/* No comment provided by engineer. */ +"Lookup" = "Lookup"; + /* No comment provided by engineer. */ "Masternode control" = "Masternode control"; @@ -761,6 +794,9 @@ /* No comment provided by engineer. */ "Recovery phrase must have %d words" = "Recovery phrase must have %d words"; +/* No comment provided by engineer. */ +"Register" = "Register"; + /* No comment provided by engineer. */ "Register Masternode" = "Register Masternode"; @@ -1052,6 +1088,9 @@ /* No comment provided by engineer. */ "Transaction id" = "Transaction id"; +/* No comment provided by engineer. */ +"Transaction was not signed." = "Transaction was not signed."; + /* No comment provided by engineer. */ "Transfer" = "Transfer"; @@ -1079,6 +1118,9 @@ /* No comment provided by engineer. */ "Unable to connect" = "Unable to connect"; +/* No comment provided by engineer. */ +"Unable to create ProviderRegistrationTransaction." = "Unable to create ProviderRegistrationTransaction."; + /* No comment provided by engineer. */ "Unable to get new qr code" = "Kunde inte få en ny qr kod"; @@ -1118,6 +1160,9 @@ /* No comment provided by engineer. */ "Username:" = "Username:"; +/* No comment provided by engineer. */ +"Using Index 0" = "Using Index 0"; + /* No comment provided by engineer. */ "Verified Successfully" = "Verified Successfully"; @@ -1164,10 +1209,10 @@ "Wallet Keys" = "Wallet Keys"; /* No comment provided by engineer. */ -"Warning" = "Warning"; +"WARNING" = "VARNING"; /* No comment provided by engineer. */ -"WARNING" = "VARNING"; +"Warning" = "Warning"; /* No comment provided by engineer. */ "Watch only" = "Watch only"; @@ -1196,6 +1241,9 @@ /* No comment provided by engineer. */ "with Dash blockchain" = "with Dash blockchain"; +/* No comment provided by engineer. */ +"Would you like to register this masternode?" = "Would you like to register this masternode?"; + /* No comment provided by engineer. */ "WRITE DOWN YOUR RECOVERY PHRASE" = "skriv ner din återställnings fras"; diff --git a/DashWallet/th.lproj/Localizable.strings b/DashWallet/th.lproj/Localizable.strings index b8fdad123..4eaf7c5e0 100644 --- a/DashWallet/th.lproj/Localizable.strings +++ b/DashWallet/th.lproj/Localizable.strings @@ -266,6 +266,9 @@ /* No comment provided by engineer. */ "Date" = "Date"; +/* No comment provided by engineer. */ +"Default" = "Default"; + /* No comment provided by engineer. */ "Default currency, shortcuts, about…" = "Default currency, shortcuts, about…"; @@ -320,15 +323,39 @@ /* No comment provided by engineer. */ "Enter" = "Enter"; +/* No comment provided by engineer. */ +"Enter IP Address of Masternode" = "Enter IP Address of Masternode"; + +/* No comment provided by engineer. */ +"Enter Operator Public Key" = "Enter Operator Public Key"; + +/* No comment provided by engineer. */ +"Enter Owner Public Key" = "Enter Owner Public Key"; + +/* No comment provided by engineer. */ +"Enter Payout Address" = "Enter Payout Address"; + /* No comment provided by engineer. */ "Enter PIN" = "Enter PIN"; +/* No comment provided by engineer. */ +"Enter Port of Masternode" = "Enter Port of Masternode"; + /* No comment provided by engineer. */ "Enter Recovery Phrase" = "Enter Recovery Phrase"; /* No comment provided by engineer. */ "Enter the amount to transfer below" = "ป้อนจำนวนเงินที่ต้องการโอนด้านล่าง"; +/* No comment provided by engineer. */ +"Enter Transaction Hash" = "Enter Transaction Hash"; + +/* No comment provided by engineer. */ +"Enter Transaction Index" = "Enter Transaction Index"; + +/* No comment provided by engineer. */ +"Enter Voting Public Key" = "Enter Voting Public Key"; + /* No comment provided by engineer. */ "Enter your 2FA code below" = "ป้อนรหัส 2FA ของคุณด้านล่าง"; @@ -413,6 +440,9 @@ /* No comment provided by engineer. */ "Incase if this device is lost / damaged, incase if the dash wallet is uninstalled accidently from this device, you will need this recovery phrase to access your funds." = "Incase if this device is lost / damaged, incase if the dash wallet is uninstalled accidently from this device, you will need this recovery phrase to access your funds."; +/* No comment provided by engineer. */ +"Incorrect collateral index" = "Incorrect collateral index"; + /* No comment provided by engineer. */ "Insufficient Funds" = "กองทุนไม่เพียงพอ"; @@ -476,6 +506,9 @@ /* No comment provided by engineer. */ "Long press to copy ID" = "Long press to copy ID"; +/* No comment provided by engineer. */ +"Lookup" = "Lookup"; + /* No comment provided by engineer. */ "Masternode control" = "Masternode control"; @@ -761,6 +794,9 @@ /* No comment provided by engineer. */ "Recovery phrase must have %d words" = "Recovery phrase must have %d words"; +/* No comment provided by engineer. */ +"Register" = "Register"; + /* No comment provided by engineer. */ "Register Masternode" = "Register Masternode"; @@ -1052,6 +1088,9 @@ /* No comment provided by engineer. */ "Transaction id" = "id ธุรกรรม"; +/* No comment provided by engineer. */ +"Transaction was not signed." = "Transaction was not signed."; + /* No comment provided by engineer. */ "Transfer" = "โอน"; @@ -1079,6 +1118,9 @@ /* No comment provided by engineer. */ "Unable to connect" = "Unable to connect"; +/* No comment provided by engineer. */ +"Unable to create ProviderRegistrationTransaction." = "Unable to create ProviderRegistrationTransaction."; + /* No comment provided by engineer. */ "Unable to get new qr code" = "ไม่สามารถรับโค้ด QR ใหม่"; @@ -1118,6 +1160,9 @@ /* No comment provided by engineer. */ "Username:" = "Username:"; +/* No comment provided by engineer. */ +"Using Index 0" = "Using Index 0"; + /* No comment provided by engineer. */ "Verified Successfully" = "Verified Successfully"; @@ -1164,10 +1209,10 @@ "Wallet Keys" = "Wallet Keys"; /* No comment provided by engineer. */ -"Warning" = "Warning"; +"WARNING" = "คำเตือน"; /* No comment provided by engineer. */ -"WARNING" = "คำเตือน"; +"Warning" = "Warning"; /* No comment provided by engineer. */ "Watch only" = "Watch only"; @@ -1196,6 +1241,9 @@ /* No comment provided by engineer. */ "with Dash blockchain" = "with Dash blockchain"; +/* No comment provided by engineer. */ +"Would you like to register this masternode?" = "Would you like to register this masternode?"; + /* No comment provided by engineer. */ "WRITE DOWN YOUR RECOVERY PHRASE" = "เขียนวลีการกู้คืนของคุณ"; diff --git a/DashWallet/tr.lproj/Localizable.strings b/DashWallet/tr.lproj/Localizable.strings index 80e9695bf..8cf92b2cf 100644 --- a/DashWallet/tr.lproj/Localizable.strings +++ b/DashWallet/tr.lproj/Localizable.strings @@ -266,6 +266,9 @@ /* No comment provided by engineer. */ "Date" = "Date"; +/* No comment provided by engineer. */ +"Default" = "Default"; + /* No comment provided by engineer. */ "Default currency, shortcuts, about…" = "Default currency, shortcuts, about…"; @@ -320,15 +323,39 @@ /* No comment provided by engineer. */ "Enter" = "Enter"; +/* No comment provided by engineer. */ +"Enter IP Address of Masternode" = "Enter IP Address of Masternode"; + +/* No comment provided by engineer. */ +"Enter Operator Public Key" = "Enter Operator Public Key"; + +/* No comment provided by engineer. */ +"Enter Owner Public Key" = "Enter Owner Public Key"; + +/* No comment provided by engineer. */ +"Enter Payout Address" = "Enter Payout Address"; + /* No comment provided by engineer. */ "Enter PIN" = "Enter PIN"; +/* No comment provided by engineer. */ +"Enter Port of Masternode" = "Enter Port of Masternode"; + /* No comment provided by engineer. */ "Enter Recovery Phrase" = "Enter Recovery Phrase"; /* No comment provided by engineer. */ "Enter the amount to transfer below" = "Aktarılacak tutarı aşağıya girin"; +/* No comment provided by engineer. */ +"Enter Transaction Hash" = "Enter Transaction Hash"; + +/* No comment provided by engineer. */ +"Enter Transaction Index" = "Enter Transaction Index"; + +/* No comment provided by engineer. */ +"Enter Voting Public Key" = "Enter Voting Public Key"; + /* No comment provided by engineer. */ "Enter your 2FA code below" = "2FA kodunu aşağıya girin"; @@ -413,6 +440,9 @@ /* No comment provided by engineer. */ "Incase if this device is lost / damaged, incase if the dash wallet is uninstalled accidently from this device, you will need this recovery phrase to access your funds." = "Incase if this device is lost / damaged, incase if the dash wallet is uninstalled accidently from this device, you will need this recovery phrase to access your funds."; +/* No comment provided by engineer. */ +"Incorrect collateral index" = "Incorrect collateral index"; + /* No comment provided by engineer. */ "Insufficient Funds" = "Yetersiz Bakiye"; @@ -476,6 +506,9 @@ /* No comment provided by engineer. */ "Long press to copy ID" = "Long press to copy ID"; +/* No comment provided by engineer. */ +"Lookup" = "Lookup"; + /* No comment provided by engineer. */ "Masternode control" = "Masternode control"; @@ -761,6 +794,9 @@ /* No comment provided by engineer. */ "Recovery phrase must have %d words" = "Recovery phrase must have %d words"; +/* No comment provided by engineer. */ +"Register" = "Register"; + /* No comment provided by engineer. */ "Register Masternode" = "Register Masternode"; @@ -1052,6 +1088,9 @@ /* No comment provided by engineer. */ "Transaction id" = "İşlem kimliği"; +/* No comment provided by engineer. */ +"Transaction was not signed." = "Transaction was not signed."; + /* No comment provided by engineer. */ "Transfer" = "Aktarma"; @@ -1079,6 +1118,9 @@ /* No comment provided by engineer. */ "Unable to connect" = "Unable to connect"; +/* No comment provided by engineer. */ +"Unable to create ProviderRegistrationTransaction." = "Unable to create ProviderRegistrationTransaction."; + /* No comment provided by engineer. */ "Unable to get new qr code" = "Yeni qr kod alınamıyor"; @@ -1118,6 +1160,9 @@ /* No comment provided by engineer. */ "Username:" = "Username:"; +/* No comment provided by engineer. */ +"Using Index 0" = "Using Index 0"; + /* No comment provided by engineer. */ "Verified Successfully" = "Verified Successfully"; @@ -1164,10 +1209,10 @@ "Wallet Keys" = "Cüzdan Anahtarları"; /* No comment provided by engineer. */ -"Warning" = "Warning"; +"WARNING" = "UYARI"; /* No comment provided by engineer. */ -"WARNING" = "UYARI"; +"Warning" = "Warning"; /* No comment provided by engineer. */ "Watch only" = "Watch only"; @@ -1196,6 +1241,9 @@ /* No comment provided by engineer. */ "with Dash blockchain" = "with Dash blockchain"; +/* No comment provided by engineer. */ +"Would you like to register this masternode?" = "Would you like to register this masternode?"; + /* No comment provided by engineer. */ "WRITE DOWN YOUR RECOVERY PHRASE" = "KURTARMA METNİNİZİ NOT EDİNİZ"; diff --git a/DashWallet/vi.lproj/Localizable.strings b/DashWallet/vi.lproj/Localizable.strings index 4a93afc2a..17c427dd2 100644 --- a/DashWallet/vi.lproj/Localizable.strings +++ b/DashWallet/vi.lproj/Localizable.strings @@ -266,6 +266,9 @@ /* No comment provided by engineer. */ "Date" = "Date"; +/* No comment provided by engineer. */ +"Default" = "Default"; + /* No comment provided by engineer. */ "Default currency, shortcuts, about…" = "Default currency, shortcuts, about…"; @@ -320,15 +323,39 @@ /* No comment provided by engineer. */ "Enter" = "Enter"; +/* No comment provided by engineer. */ +"Enter IP Address of Masternode" = "Enter IP Address of Masternode"; + +/* No comment provided by engineer. */ +"Enter Operator Public Key" = "Enter Operator Public Key"; + +/* No comment provided by engineer. */ +"Enter Owner Public Key" = "Enter Owner Public Key"; + +/* No comment provided by engineer. */ +"Enter Payout Address" = "Enter Payout Address"; + /* No comment provided by engineer. */ "Enter PIN" = "Enter PIN"; +/* No comment provided by engineer. */ +"Enter Port of Masternode" = "Enter Port of Masternode"; + /* No comment provided by engineer. */ "Enter Recovery Phrase" = "Enter Recovery Phrase"; /* No comment provided by engineer. */ "Enter the amount to transfer below" = "Hãy nhập số tiền cần chuyển vào dưới đây"; +/* No comment provided by engineer. */ +"Enter Transaction Hash" = "Enter Transaction Hash"; + +/* No comment provided by engineer. */ +"Enter Transaction Index" = "Enter Transaction Index"; + +/* No comment provided by engineer. */ +"Enter Voting Public Key" = "Enter Voting Public Key"; + /* No comment provided by engineer. */ "Enter your 2FA code below" = "Hãy nhập mà xác thực 2 lớp vào dưới đây"; @@ -413,6 +440,9 @@ /* No comment provided by engineer. */ "Incase if this device is lost / damaged, incase if the dash wallet is uninstalled accidently from this device, you will need this recovery phrase to access your funds." = "Incase if this device is lost / damaged, incase if the dash wallet is uninstalled accidently from this device, you will need this recovery phrase to access your funds."; +/* No comment provided by engineer. */ +"Incorrect collateral index" = "Incorrect collateral index"; + /* No comment provided by engineer. */ "Insufficient Funds" = "Không đủ tiền"; @@ -476,6 +506,9 @@ /* No comment provided by engineer. */ "Long press to copy ID" = "Long press to copy ID"; +/* No comment provided by engineer. */ +"Lookup" = "Lookup"; + /* No comment provided by engineer. */ "Masternode control" = "Masternode control"; @@ -761,6 +794,9 @@ /* No comment provided by engineer. */ "Recovery phrase must have %d words" = "Recovery phrase must have %d words"; +/* No comment provided by engineer. */ +"Register" = "Register"; + /* No comment provided by engineer. */ "Register Masternode" = "Register Masternode"; @@ -1052,6 +1088,9 @@ /* No comment provided by engineer. */ "Transaction id" = "Mã giao dịch"; +/* No comment provided by engineer. */ +"Transaction was not signed." = "Transaction was not signed."; + /* No comment provided by engineer. */ "Transfer" = "Chuyển"; @@ -1079,6 +1118,9 @@ /* No comment provided by engineer. */ "Unable to connect" = "Unable to connect"; +/* No comment provided by engineer. */ +"Unable to create ProviderRegistrationTransaction." = "Unable to create ProviderRegistrationTransaction."; + /* No comment provided by engineer. */ "Unable to get new qr code" = "Không thể lấy mã QR mới"; @@ -1118,6 +1160,9 @@ /* No comment provided by engineer. */ "Username:" = "Username:"; +/* No comment provided by engineer. */ +"Using Index 0" = "Using Index 0"; + /* No comment provided by engineer. */ "Verified Successfully" = "Verified Successfully"; @@ -1164,10 +1209,10 @@ "Wallet Keys" = "Khoá của ví"; /* No comment provided by engineer. */ -"Warning" = "Warning"; +"WARNING" = "CẢNH BÁO"; /* No comment provided by engineer. */ -"WARNING" = "CẢNH BÁO"; +"Warning" = "Warning"; /* No comment provided by engineer. */ "Watch only" = "Watch only"; @@ -1196,6 +1241,9 @@ /* No comment provided by engineer. */ "with Dash blockchain" = "with Dash blockchain"; +/* No comment provided by engineer. */ +"Would you like to register this masternode?" = "Would you like to register this masternode?"; + /* No comment provided by engineer. */ "WRITE DOWN YOUR RECOVERY PHRASE" = "HÃY GHI LẠI CỤM TỪ PHỤC HỒI"; diff --git a/DashWallet/zh-Hans.lproj/Localizable.strings b/DashWallet/zh-Hans.lproj/Localizable.strings index ce2c0e42d..0ead89cb7 100644 --- a/DashWallet/zh-Hans.lproj/Localizable.strings +++ b/DashWallet/zh-Hans.lproj/Localizable.strings @@ -266,6 +266,9 @@ /* No comment provided by engineer. */ "Date" = "Date"; +/* No comment provided by engineer. */ +"Default" = "Default"; + /* No comment provided by engineer. */ "Default currency, shortcuts, about…" = "Default currency, shortcuts, about…"; @@ -320,15 +323,39 @@ /* No comment provided by engineer. */ "Enter" = "Enter"; +/* No comment provided by engineer. */ +"Enter IP Address of Masternode" = "Enter IP Address of Masternode"; + +/* No comment provided by engineer. */ +"Enter Operator Public Key" = "Enter Operator Public Key"; + +/* No comment provided by engineer. */ +"Enter Owner Public Key" = "Enter Owner Public Key"; + +/* No comment provided by engineer. */ +"Enter Payout Address" = "Enter Payout Address"; + /* No comment provided by engineer. */ "Enter PIN" = "Enter PIN"; +/* No comment provided by engineer. */ +"Enter Port of Masternode" = "Enter Port of Masternode"; + /* No comment provided by engineer. */ "Enter Recovery Phrase" = "Enter Recovery Phrase"; /* No comment provided by engineer. */ "Enter the amount to transfer below" = "Enter the amount to transfer below"; +/* No comment provided by engineer. */ +"Enter Transaction Hash" = "Enter Transaction Hash"; + +/* No comment provided by engineer. */ +"Enter Transaction Index" = "Enter Transaction Index"; + +/* No comment provided by engineer. */ +"Enter Voting Public Key" = "Enter Voting Public Key"; + /* No comment provided by engineer. */ "Enter your 2FA code below" = "Enter your 2FA code below"; @@ -413,6 +440,9 @@ /* No comment provided by engineer. */ "Incase if this device is lost / damaged, incase if the dash wallet is uninstalled accidently from this device, you will need this recovery phrase to access your funds." = "Incase if this device is lost / damaged, incase if the dash wallet is uninstalled accidently from this device, you will need this recovery phrase to access your funds."; +/* No comment provided by engineer. */ +"Incorrect collateral index" = "Incorrect collateral index"; + /* No comment provided by engineer. */ "Insufficient Funds" = "Insufficient Funds"; @@ -476,6 +506,9 @@ /* No comment provided by engineer. */ "Long press to copy ID" = "Long press to copy ID"; +/* No comment provided by engineer. */ +"Lookup" = "Lookup"; + /* No comment provided by engineer. */ "Masternode control" = "Masternode control"; @@ -761,6 +794,9 @@ /* No comment provided by engineer. */ "Recovery phrase must have %d words" = "Recovery phrase must have %d words"; +/* No comment provided by engineer. */ +"Register" = "Register"; + /* No comment provided by engineer. */ "Register Masternode" = "Register Masternode"; @@ -1052,6 +1088,9 @@ /* No comment provided by engineer. */ "Transaction id" = "Transaction id"; +/* No comment provided by engineer. */ +"Transaction was not signed." = "Transaction was not signed."; + /* No comment provided by engineer. */ "Transfer" = "Transfer"; @@ -1079,6 +1118,9 @@ /* No comment provided by engineer. */ "Unable to connect" = "Unable to connect"; +/* No comment provided by engineer. */ +"Unable to create ProviderRegistrationTransaction." = "Unable to create ProviderRegistrationTransaction."; + /* No comment provided by engineer. */ "Unable to get new qr code" = "未能获得新的QR码"; @@ -1118,6 +1160,9 @@ /* No comment provided by engineer. */ "Username:" = "Username:"; +/* No comment provided by engineer. */ +"Using Index 0" = "Using Index 0"; + /* No comment provided by engineer. */ "Verified Successfully" = "Verified Successfully"; @@ -1164,10 +1209,10 @@ "Wallet Keys" = "Wallet Keys"; /* No comment provided by engineer. */ -"Warning" = "Warning"; +"WARNING" = "警告"; /* No comment provided by engineer. */ -"WARNING" = "警告"; +"Warning" = "Warning"; /* No comment provided by engineer. */ "Watch only" = "Watch only"; @@ -1196,6 +1241,9 @@ /* No comment provided by engineer. */ "with Dash blockchain" = "with Dash blockchain"; +/* No comment provided by engineer. */ +"Would you like to register this masternode?" = "Would you like to register this masternode?"; + /* No comment provided by engineer. */ "WRITE DOWN YOUR RECOVERY PHRASE" = "写下你的恢复密语"; diff --git a/DashWallet/zh-Hant-TW.lproj/Localizable.strings b/DashWallet/zh-Hant-TW.lproj/Localizable.strings index bf375bbea..c95ca2df9 100644 --- a/DashWallet/zh-Hant-TW.lproj/Localizable.strings +++ b/DashWallet/zh-Hant-TW.lproj/Localizable.strings @@ -266,6 +266,9 @@ /* No comment provided by engineer. */ "Date" = "Date"; +/* No comment provided by engineer. */ +"Default" = "Default"; + /* No comment provided by engineer. */ "Default currency, shortcuts, about…" = "Default currency, shortcuts, about…"; @@ -320,15 +323,39 @@ /* No comment provided by engineer. */ "Enter" = "Enter"; +/* No comment provided by engineer. */ +"Enter IP Address of Masternode" = "Enter IP Address of Masternode"; + +/* No comment provided by engineer. */ +"Enter Operator Public Key" = "Enter Operator Public Key"; + +/* No comment provided by engineer. */ +"Enter Owner Public Key" = "Enter Owner Public Key"; + +/* No comment provided by engineer. */ +"Enter Payout Address" = "Enter Payout Address"; + /* No comment provided by engineer. */ "Enter PIN" = "Enter PIN"; +/* No comment provided by engineer. */ +"Enter Port of Masternode" = "Enter Port of Masternode"; + /* No comment provided by engineer. */ "Enter Recovery Phrase" = "Enter Recovery Phrase"; /* No comment provided by engineer. */ "Enter the amount to transfer below" = "Enter the amount to transfer below"; +/* No comment provided by engineer. */ +"Enter Transaction Hash" = "Enter Transaction Hash"; + +/* No comment provided by engineer. */ +"Enter Transaction Index" = "Enter Transaction Index"; + +/* No comment provided by engineer. */ +"Enter Voting Public Key" = "Enter Voting Public Key"; + /* No comment provided by engineer. */ "Enter your 2FA code below" = "Enter your 2FA code below"; @@ -413,6 +440,9 @@ /* No comment provided by engineer. */ "Incase if this device is lost / damaged, incase if the dash wallet is uninstalled accidently from this device, you will need this recovery phrase to access your funds." = "Incase if this device is lost / damaged, incase if the dash wallet is uninstalled accidently from this device, you will need this recovery phrase to access your funds."; +/* No comment provided by engineer. */ +"Incorrect collateral index" = "Incorrect collateral index"; + /* No comment provided by engineer. */ "Insufficient Funds" = "Insufficient Funds"; @@ -476,6 +506,9 @@ /* No comment provided by engineer. */ "Long press to copy ID" = "Long press to copy ID"; +/* No comment provided by engineer. */ +"Lookup" = "Lookup"; + /* No comment provided by engineer. */ "Masternode control" = "Masternode control"; @@ -761,6 +794,9 @@ /* No comment provided by engineer. */ "Recovery phrase must have %d words" = "Recovery phrase must have %d words"; +/* No comment provided by engineer. */ +"Register" = "Register"; + /* No comment provided by engineer. */ "Register Masternode" = "Register Masternode"; @@ -1052,6 +1088,9 @@ /* No comment provided by engineer. */ "Transaction id" = "Transaction id"; +/* No comment provided by engineer. */ +"Transaction was not signed." = "Transaction was not signed."; + /* No comment provided by engineer. */ "Transfer" = "Transfer"; @@ -1079,6 +1118,9 @@ /* No comment provided by engineer. */ "Unable to connect" = "Unable to connect"; +/* No comment provided by engineer. */ +"Unable to create ProviderRegistrationTransaction." = "Unable to create ProviderRegistrationTransaction."; + /* No comment provided by engineer. */ "Unable to get new qr code" = "無法獲取新的二維碼"; @@ -1118,6 +1160,9 @@ /* No comment provided by engineer. */ "Username:" = "Username:"; +/* No comment provided by engineer. */ +"Using Index 0" = "Using Index 0"; + /* No comment provided by engineer. */ "Verified Successfully" = "Verified Successfully"; @@ -1164,10 +1209,10 @@ "Wallet Keys" = "Wallet Keys"; /* No comment provided by engineer. */ -"Warning" = "Warning"; +"WARNING" = "警告"; /* No comment provided by engineer. */ -"WARNING" = "警告"; +"Warning" = "Warning"; /* No comment provided by engineer. */ "Watch only" = "Watch only"; @@ -1196,6 +1241,9 @@ /* No comment provided by engineer. */ "with Dash blockchain" = "with Dash blockchain"; +/* No comment provided by engineer. */ +"Would you like to register this masternode?" = "Would you like to register this masternode?"; + /* No comment provided by engineer. */ "WRITE DOWN YOUR RECOVERY PHRASE" = "寫下你的恢復詞組"; From 86026bed74f1a70f4723ccc39e77ae8d4519823d Mon Sep 17 00:00:00 2001 From: Quantum Explorer Date: Mon, 11 Nov 2019 12:02:07 +0800 Subject: [PATCH 19/34] registration screen and partial signing screen --- DashWallet.xcodeproj/project.pbxproj | 48 +++- .../UI/Menu/Forms/DWBaseFormCellModel.h | 3 +- .../UI/Menu/Forms/DWFormTableViewController.m | 10 + .../KeyValue/DWKeyValueFormTableViewCell.m | 9 + .../ResetWalletInfo.storyboard | 14 +- .../Signing/DWSignPayloadViewController.h | 30 --- .../Signing/DWSignPayloadViewController.m | 81 ------ .../DWRegisterMasternodeViewController.m | 255 ++++++++++++++---- .../Models/DWMasternodeRegistrationModel.h | 9 +- .../Models/DWMasternodeRegistrationModel.m | 168 ++++++------ .../DWSignPayloadViewController.h | 47 ++++ .../DWSignPayloadViewController.m | 110 ++++++++ .../Models/DWSignPayloadModel.h | 34 +++ .../Models/DWSignPayloadModel.m | 43 +++ .../Payload Signing/Views/DWSignPayloadView.h | 26 ++ .../Payload Signing/Views/DWSignPayloadView.m | 30 +++ DashWallet/ar.lproj/Localizable.strings | 16 +- DashWallet/bg.lproj/Localizable.strings | 16 +- DashWallet/de.lproj/Localizable.strings | 16 +- DashWallet/el.lproj/Localizable.strings | 16 +- DashWallet/en.lproj/Localizable.strings | 16 +- DashWallet/es.lproj/Localizable.strings | 16 +- DashWallet/fr.lproj/Localizable.strings | 16 +- DashWallet/id.lproj/Localizable.strings | 16 +- DashWallet/it.lproj/Localizable.strings | 16 +- DashWallet/ja.lproj/Localizable.strings | 16 +- DashWallet/ko.lproj/Localizable.strings | 16 +- DashWallet/nb.lproj/Localizable.strings | 16 +- DashWallet/nl.lproj/Localizable.strings | 16 +- DashWallet/pl.lproj/Localizable.strings | 16 +- DashWallet/pt.lproj/Localizable.strings | 16 +- DashWallet/ru.lproj/Localizable.strings | 16 +- DashWallet/sk.lproj/Localizable.strings | 16 +- DashWallet/sq.lproj/Localizable.strings | 16 +- DashWallet/sv.lproj/Localizable.strings | 16 +- DashWallet/th.lproj/Localizable.strings | 16 +- DashWallet/tr.lproj/Localizable.strings | 16 +- DashWallet/vi.lproj/Localizable.strings | 16 +- DashWallet/zh-Hans.lproj/Localizable.strings | 16 +- .../zh-Hant-TW.lproj/Localizable.strings | 16 +- 40 files changed, 909 insertions(+), 392 deletions(-) delete mode 100644 DashWallet/Sources/UI/Menu/Tools/Masternode/Masternode Keys/Signing/DWSignPayloadViewController.h delete mode 100644 DashWallet/Sources/UI/Menu/Tools/Masternode/Masternode Keys/Signing/DWSignPayloadViewController.m create mode 100644 DashWallet/Sources/UI/Menu/Tools/Masternode/Payload Signing/DWSignPayloadViewController.h create mode 100644 DashWallet/Sources/UI/Menu/Tools/Masternode/Payload Signing/DWSignPayloadViewController.m create mode 100644 DashWallet/Sources/UI/Menu/Tools/Masternode/Payload Signing/Models/DWSignPayloadModel.h create mode 100644 DashWallet/Sources/UI/Menu/Tools/Masternode/Payload Signing/Models/DWSignPayloadModel.m create mode 100644 DashWallet/Sources/UI/Menu/Tools/Masternode/Payload Signing/Views/DWSignPayloadView.h create mode 100644 DashWallet/Sources/UI/Menu/Tools/Masternode/Payload Signing/Views/DWSignPayloadView.m diff --git a/DashWallet.xcodeproj/project.pbxproj b/DashWallet.xcodeproj/project.pbxproj index ad26daa05..16d6cd54d 100644 --- a/DashWallet.xcodeproj/project.pbxproj +++ b/DashWallet.xcodeproj/project.pbxproj @@ -380,6 +380,8 @@ FB021E571E47E17200D17638 /* FBShimmeringView.m in Sources */ = {isa = PBXBuildFile; fileRef = FB021E551E47E17200D17638 /* FBShimmeringView.m */; }; FB031ADB2378832100EF564B /* DWActionFormCellModel.m in Sources */ = {isa = PBXBuildFile; fileRef = FB031AD72378832100EF564B /* DWActionFormCellModel.m */; }; FB031ADE2378834200EF564B /* DWActionFormTableViewCell.m in Sources */ = {isa = PBXBuildFile; fileRef = FB031ADD2378834200EF564B /* DWActionFormTableViewCell.m */; }; + FB031AE32379003D00EF564B /* DWSignPayloadModel.m in Sources */ = {isa = PBXBuildFile; fileRef = FB031AE22379003D00EF564B /* DWSignPayloadModel.m */; }; + FB031AE7237911F200EF564B /* DWSignPayloadView.m in Sources */ = {isa = PBXBuildFile; fileRef = FB031AE6237911F200EF564B /* DWSignPayloadView.m */; }; FB1BF8C722C6F4B7003413C6 /* DWSignMessageViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = FB1BF8C622C6F4B7003413C6 /* DWSignMessageViewController.m */; }; FB1BF8C822C7FBD0003413C6 /* DWAmountInputValidator.m in Sources */ = {isa = PBXBuildFile; fileRef = 2A2120E92214566A009906DC /* DWAmountInputValidator.m */; }; FB1BF8C922C7FBD4003413C6 /* DWAmountObject.m in Sources */ = {isa = PBXBuildFile; fileRef = 2A2120EF22147A40009906DC /* DWAmountObject.m */; }; @@ -1283,6 +1285,10 @@ FB031AD82378832100EF564B /* DWActionFormTableViewCell.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DWActionFormTableViewCell.h; sourceTree = ""; }; FB031AD92378832100EF564B /* DWActionFormCellModel.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DWActionFormCellModel.h; sourceTree = ""; }; FB031ADD2378834200EF564B /* DWActionFormTableViewCell.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = DWActionFormTableViewCell.m; sourceTree = ""; }; + FB031AE12379003D00EF564B /* DWSignPayloadModel.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = DWSignPayloadModel.h; sourceTree = ""; }; + FB031AE22379003D00EF564B /* DWSignPayloadModel.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = DWSignPayloadModel.m; sourceTree = ""; }; + FB031AE5237911F200EF564B /* DWSignPayloadView.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = DWSignPayloadView.h; sourceTree = ""; }; + FB031AE6237911F200EF564B /* DWSignPayloadView.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = DWSignPayloadView.m; sourceTree = ""; }; FB0ACB9D1F9AB76800F4AB52 /* bg */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = bg; path = bg.lproj/Main.strings; sourceTree = ""; }; FB0ACB9E1F9AB76800F4AB52 /* bg */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.strings; name = bg; path = bg.lproj/Localizable.strings; sourceTree = ""; }; FB0ACB9F1F9ABB6200F4AB52 /* vi */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = vi; path = vi.lproj/Main.strings; sourceTree = ""; }; @@ -3302,6 +3308,35 @@ path = Action; sourceTree = ""; }; + FB031ADF2378FFAE00EF564B /* Payload Signing */ = { + isa = PBXGroup; + children = ( + FB031AE42379118E00EF564B /* Views */, + FB031AE02379000400EF564B /* Models */, + FB31C24F223BD3F500BD0868 /* DWSignPayloadViewController.h */, + FB31C246223BD3F200BD0868 /* DWSignPayloadViewController.m */, + ); + path = "Payload Signing"; + sourceTree = ""; + }; + FB031AE02379000400EF564B /* Models */ = { + isa = PBXGroup; + children = ( + FB031AE12379003D00EF564B /* DWSignPayloadModel.h */, + FB031AE22379003D00EF564B /* DWSignPayloadModel.m */, + ); + path = Models; + sourceTree = ""; + }; + FB031AE42379118E00EF564B /* Views */ = { + isa = PBXGroup; + children = ( + FB031AE5237911F200EF564B /* DWSignPayloadView.h */, + FB031AE6237911F200EF564B /* DWSignPayloadView.m */, + ); + path = Views; + sourceTree = ""; + }; FB1C3DC1236AD2B1004C2B05 /* Masternode Control */ = { isa = PBXGroup; children = ( @@ -3334,6 +3369,7 @@ FB1C3DC2236AD3C7004C2B05 /* Masternode */ = { isa = PBXGroup; children = ( + FB031ADF2378FFAE00EF564B /* Payload Signing */, FB3FF0B12226416A0059A9A5 /* Masternode.storyboard */, FBCFEDEA236E50410086DE07 /* Masternode Registration */, FB3FF0B0222641210059A9A5 /* Masternode Keys */, @@ -3349,8 +3385,6 @@ children = ( FB1BF8C522C6F4B7003413C6 /* DWSignMessageViewController.h */, FB1BF8C622C6F4B7003413C6 /* DWSignMessageViewController.m */, - FB31C24F223BD3F500BD0868 /* DWSignPayloadViewController.h */, - FB31C246223BD3F200BD0868 /* DWSignPayloadViewController.m */, ); path = Signing; sourceTree = ""; @@ -3426,7 +3460,6 @@ FBCFEDEA236E50410086DE07 /* Masternode Registration */ = { isa = PBXGroup; children = ( - FBCFEDEF236E58940086DE07 /* Cells */, FBCFEDEB236E50AF0086DE07 /* Models */, FB31C23F223BD3F100BD0868 /* DWRegisterMasternodeViewController.h */, FB31C247223BD3F200BD0868 /* DWRegisterMasternodeViewController.m */, @@ -3443,13 +3476,6 @@ path = Models; sourceTree = ""; }; - FBCFEDEF236E58940086DE07 /* Cells */ = { - isa = PBXGroup; - children = ( - ); - path = Cells; - sourceTree = ""; - }; FBCFEDF0236F8C770086DE07 /* KeyValue */ = { isa = PBXGroup; children = ( @@ -4084,6 +4110,7 @@ 2A4E531522E9F0A200E5168A /* DWStartModel.m in Sources */, 2A9FFE872230FF4700956D5F /* DWPlaceholderFormTableViewCell.m in Sources */, 2A4E532022EB2DF400E5168A /* DWHomeHeaderView.m in Sources */, + FB031AE7237911F200EF564B /* DWSignPayloadView.m in Sources */, FBCFEDFA236FCE2E0086DE07 /* DWPublicKeyGenerationCellModel.m in Sources */, 2A0C69F22316B93F001B8C90 /* DWTitleDetailCellView.m in Sources */, 2AAEF5402216BE77000FC092 /* DWAmountSendingOptionsModel.m in Sources */, @@ -4182,6 +4209,7 @@ 2A0C69EF2316B7F5001B8C90 /* DWConfirmPaymentContentView.m in Sources */, 2A9FFF1B2233E56E00956D5F /* DWUpholdSelectCardViewController.m in Sources */, FBCFEDF6236F8D3D0086DE07 /* DWKeyValueFormTableViewCell.m in Sources */, + FB031AE32379003D00EF564B /* DWSignPayloadModel.m in Sources */, 220460551BA0BEEE00D07B61 /* BREventConfirmView.m in Sources */, 2A1B7DBC2326187D00BA8C6A /* DWTxDetailFullscreenViewController.m in Sources */, 2A9FFE032230FF2B00956D5F /* DWUpholdTransactionObject.m in Sources */, diff --git a/DashWallet/Sources/UI/Menu/Forms/DWBaseFormCellModel.h b/DashWallet/Sources/UI/Menu/Forms/DWBaseFormCellModel.h index 9424d1f6f..e64c2bde5 100644 --- a/DashWallet/Sources/UI/Menu/Forms/DWBaseFormCellModel.h +++ b/DashWallet/Sources/UI/Menu/Forms/DWBaseFormCellModel.h @@ -16,10 +16,11 @@ // #import +#import NS_ASSUME_NONNULL_BEGIN -@interface DWBaseFormCellModel : NSObject +@interface DWBaseFormCellModel : KVONSObject @property (nullable, copy, nonatomic) NSString *title; @property (assign, nonatomic) NSUInteger tag; diff --git a/DashWallet/Sources/UI/Menu/Forms/DWFormTableViewController.m b/DashWallet/Sources/UI/Menu/Forms/DWFormTableViewController.m index 69fb81799..b9ffb4eca 100644 --- a/DashWallet/Sources/UI/Menu/Forms/DWFormTableViewController.m +++ b/DashWallet/Sources/UI/Menu/Forms/DWFormTableViewController.m @@ -193,6 +193,16 @@ - (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath actionCellModel.didSelectBlock(actionCellModel, indexPath); } } + else if ([cellModel isKindOfClass:DWKeyValueFormCellModel.class]) { + DWKeyValueFormCellModel *keyValueCellModel = (DWKeyValueFormCellModel *)cellModel; + DWKeyValueFormTableViewCell *cell = [self.tableView cellForRowAtIndexPath:indexPath]; + if (cell) { + [cell resignFirstResponder]; + } + if (keyValueCellModel.actionBlock) { + keyValueCellModel.actionBlock(); + } + } else if ([cellModel isKindOfClass:DWSwitcherFormCellModel.class]) { DWSwitcherFormCellModel *switcherCellModel = (DWSwitcherFormCellModel *)cellModel; switcherCellModel.on = !switcherCellModel.on; diff --git a/DashWallet/Sources/UI/Menu/Forms/KeyValue/DWKeyValueFormTableViewCell.m b/DashWallet/Sources/UI/Menu/Forms/KeyValue/DWKeyValueFormTableViewCell.m index c60143012..986a82490 100644 --- a/DashWallet/Sources/UI/Menu/Forms/KeyValue/DWKeyValueFormTableViewCell.m +++ b/DashWallet/Sources/UI/Menu/Forms/KeyValue/DWKeyValueFormTableViewCell.m @@ -119,6 +119,7 @@ - (instancetype)initWithStyle:(UITableViewCellStyle)style return self; } + - (void)setupObserving { [self mvvm_observe:DW_KEYPATH(self, cellModel.title) with:^(__typeof(self) self, NSString *value) { @@ -156,6 +157,14 @@ - (void)textFieldDidEndEditing:(UITextField *)textField { self.cellModel.valueText = textField.text; } +- (BOOL)resignFirstResponder { + BOOL resigned = [super resignFirstResponder]; + if ([self.valueTextField isFirstResponder]) { + resigned |= [self.valueTextField resignFirstResponder]; + } + return resigned; +} + @end NS_ASSUME_NONNULL_END diff --git a/DashWallet/Sources/UI/Menu/Security/ResetWalletInfo/ResetWalletInfo.storyboard b/DashWallet/Sources/UI/Menu/Security/ResetWalletInfo/ResetWalletInfo.storyboard index cbac2ce2c..75513df56 100644 --- a/DashWallet/Sources/UI/Menu/Security/ResetWalletInfo/ResetWalletInfo.storyboard +++ b/DashWallet/Sources/UI/Menu/Security/ResetWalletInfo/ResetWalletInfo.storyboard @@ -1,9 +1,9 @@ - + - + @@ -21,20 +21,20 @@ - + diff --git a/DashWallet/Sources/UI/Menu/Tools/Masternode/Masternode Keys/Signing/DWSignPayloadViewController.h b/DashWallet/Sources/UI/Menu/Tools/Masternode/Masternode Keys/Signing/DWSignPayloadViewController.h deleted file mode 100644 index 241c89273..000000000 --- a/DashWallet/Sources/UI/Menu/Tools/Masternode/Masternode Keys/Signing/DWSignPayloadViewController.h +++ /dev/null @@ -1,30 +0,0 @@ -// -// DWSignPayloadViewController.h -// DashWallet -// -// Created by Sam Westrich on 3/8/19. -// Copyright © 2019 Dash Core Group. All rights reserved. -// - -#import - - -@class DSProviderRegistrationTransaction; - -NS_ASSUME_NONNULL_BEGIN - -@protocol DWSignPayloadDelegate - -- (void)viewController:(UIViewController *)controller didReturnSignature:(NSData *)signature; - -@end - -@interface DWSignPayloadViewController : UIViewController - -@property (nonatomic, weak) id delegate; -@property (nonatomic, strong) NSString *collateralAddress; -@property (nonatomic, strong) DSProviderRegistrationTransaction *providerRegistrationTransaction; - -@end - -NS_ASSUME_NONNULL_END diff --git a/DashWallet/Sources/UI/Menu/Tools/Masternode/Masternode Keys/Signing/DWSignPayloadViewController.m b/DashWallet/Sources/UI/Menu/Tools/Masternode/Masternode Keys/Signing/DWSignPayloadViewController.m deleted file mode 100644 index 18f056f79..000000000 --- a/DashWallet/Sources/UI/Menu/Tools/Masternode/Masternode Keys/Signing/DWSignPayloadViewController.m +++ /dev/null @@ -1,81 +0,0 @@ -// -// DWSignPayloadViewController.m -// DashWallet -// -// Created by Sam Westrich on 3/8/19. -// Copyright © 2019 Dash Core Group. All rights reserved. -// - -#import "DWSignPayloadViewController.h" -#import "DSAccount.h" -#import "DSECDSAKey.h" -#import "DSProviderRegistrationTransaction.h" -#import "DSWallet.h" -#import "NSData+Bitcoin.h" -#import "NSMutableData+Dash.h" -#import "NSString+Dash.h" - -@interface DWSignPayloadViewController () -@property (strong, nonatomic) IBOutlet UITextView *signatureMessageInputTextView; -@property (strong, nonatomic) IBOutlet UITextView *signatureMessageResultTextView; -@property (strong, nonatomic) IBOutlet UIButton *signButton; - -@end - -@implementation DWSignPayloadViewController - -- (void)viewDidLoad { - [super viewDidLoad]; - self.signatureMessageInputTextView.text = [NSString stringWithFormat:@"signmessage %@ %@", self.collateralAddress, self.providerRegistrationTransaction.payloadCollateralString]; - - if ([self.providerRegistrationTransaction.chain accountContainingAddress:self.collateralAddress]) { - self.signButton.enabled = TRUE; - } - else { - self.signButton.enabled = FALSE; - } -} - -/* -#pragma mark - Navigation - -// In a storyboard-based application, you will often want to do a little preparation before navigation -- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender { - // Get the new view controller using [segue destinationViewController]. - // Pass the selected object to the new view controller. -} -*/ -- (IBAction)sign:(id)sender { - - if (self.signatureMessageResultTextView.text && ![self.signatureMessageResultTextView.text isEqualToString:@""]) { - NSData *signature = [[NSData alloc] initWithBase64EncodedString:self.signatureMessageResultTextView.text options:0]; - DSECDSAKey *key = [DSECDSAKey keyRecoveredFromCompactSig:signature andMessageDigest:self.providerRegistrationTransaction.payloadCollateralDigest]; - NSString *address = [key addressForChain:self.providerRegistrationTransaction.chain]; - if ([address isEqualToString:self.collateralAddress]) { - [self.delegate viewController:self didReturnSignature:signature]; - } - else { - NSLog(@"Not matching signature"); - } - } - else { - DSAccount *account = [self.providerRegistrationTransaction.chain accountContainingAddress:self.collateralAddress]; - - - DSFundsDerivationPath *derivationPath = [account derivationPathContainingAddress:self.collateralAddress]; - - NSIndexPath *indexPath = [derivationPath indexPathForKnownAddress:self.collateralAddress]; - - [account.wallet seedWithPrompt:@"Sign?" - forAmount:0 - completion:^(NSData *_Nullable seed, BOOL cancelled) { - if (seed && !cancelled) { - DSECDSAKey *key = (DSECDSAKey *)[derivationPath privateKeyAtIndexPath:indexPath fromSeed:seed]; - NSData *data = [key compactSign:self.providerRegistrationTransaction.payloadCollateralDigest]; - [self.delegate viewController:self didReturnSignature:data]; - } - }]; - } -} - -@end diff --git a/DashWallet/Sources/UI/Menu/Tools/Masternode/Masternode Registration/DWRegisterMasternodeViewController.m b/DashWallet/Sources/UI/Menu/Tools/Masternode/Masternode Registration/DWRegisterMasternodeViewController.m index 08c4c44b2..de60ad9d4 100644 --- a/DashWallet/Sources/UI/Menu/Tools/Masternode/Masternode Registration/DWRegisterMasternodeViewController.m +++ b/DashWallet/Sources/UI/Menu/Tools/Masternode/Masternode Registration/DWRegisterMasternodeViewController.m @@ -12,6 +12,7 @@ #import "DWKeyValueFormTableViewCell.h" #import "DWMasternodeRegistrationModel.h" #import "DWPublicKeyGenerationTableViewCell.h" +#import "DWSignPayloadModel.h" #import "DWSignPayloadViewController.h" #import "DWUIKit.h" @@ -37,9 +38,6 @@ typedef NS_ENUM(NSUInteger, DWMasternodeRegistrationCellType) { @interface DWRegisterMasternodeViewController () -@property (nonatomic, strong) DSAccount *account; -@property (nonatomic, strong) DSProviderRegistrationTransaction *providerRegistrationTransaction; -@property (nonatomic, strong) DSTransaction *collateralTransaction; @property (null_resettable, nonatomic, strong) DWMasternodeRegistrationModel *model; @property (nonatomic, strong) DWFormTableViewController *formController; @@ -49,7 +47,6 @@ @implementation DWRegisterMasternodeViewController - (instancetype)initWithNibName:(nullable NSString *)nibNameOrNil bundle:(nullable NSBundle *)nibBundleOrNil { if (self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil]) { - self.account = [DWEnvironment sharedInstance].currentAccount; self.title = NSLocalizedString(@"Registration", nil); self.hidesBottomBarWhenPushed = YES; } @@ -99,7 +96,7 @@ - (NSString *)titleForCellAtRow:(NSUInteger)row { case DWMasternodeRegistrationCell_PayoutAddress: return NSLocalizedString(@"Payout Address", nil); case DWMasternodeRegistrationCell_OwnerKey: - return NSLocalizedString(@"Owner Public Key", nil); + return NSLocalizedString(@"Owner Private Key", nil); case DWMasternodeRegistrationCell_OperatorKey: return NSLocalizedString(@"Operator Public Key", nil); case DWMasternodeRegistrationCell_VotingKey: @@ -121,7 +118,7 @@ - (NSString *)placeholderForCellAtRow:(NSUInteger)row { case DWMasternodeRegistrationCell_PayoutAddress: return NSLocalizedString(@"Enter Payout Address", nil); case DWMasternodeRegistrationCell_OwnerKey: - return NSLocalizedString(@"Enter Owner Public Key", nil); + return NSLocalizedString(@"Enter Owner Private Key", nil); case DWMasternodeRegistrationCell_OperatorKey: return NSLocalizedString(@"Enter Operator Public Key", nil); case DWMasternodeRegistrationCell_VotingKey: @@ -136,78 +133,212 @@ - (NSString *)actionForCellAtRow:(NSUInteger)row { return NSLocalizedString(@"Lookup", nil); case DWMasternodeRegistrationCell_Port: return NSLocalizedString(@"Default", nil); + case DWMasternodeRegistrationCell_PayoutAddress: + return NSLocalizedString(@"Use Wallet", nil); case DWMasternodeRegistrationCell_OwnerKey: - return NSLocalizedString(@"Using Index 0", nil); + return NSLocalizedString(@"Use Wallet", nil); case DWMasternodeRegistrationCell_OperatorKey: - return NSLocalizedString(@"Using Index 0", nil); + return NSLocalizedString(@"Use Wallet", nil); case DWMasternodeRegistrationCell_VotingKey: - return NSLocalizedString(@"Using Index 0", nil); + return NSLocalizedString(@"Use Wallet", nil); default: return nil; } } -- (DWMasternodeRegistrationCellType)typeForCellAtRow:(NSUInteger)row { +- (void (^)(void))actionBlockForModel:(DWKeyValueFormCellModel *)model forCellAtRow:(NSUInteger)row { + __weak __typeof(self) weakSelf = self; + __weak __typeof(model) weakModel = model; switch (row) { - case DWMasternodeRegistrationCell_CollateralTx: case DWMasternodeRegistrationCell_CollateralIndex: - case DWMasternodeRegistrationCell_IPAddress: + return ^{ + __strong __typeof(weakSelf) strongSelf = weakSelf; + + if (!strongSelf) { + return; + } + [[strongSelf.formController.tableView cellForRowAtIndexPath:[NSIndexPath indexPathForRow:DWMasternodeRegistrationCell_CollateralTx inSection:0]] resignFirstResponder]; + [strongSelf.model lookupIndexesForCollateralHash:strongSelf.model.collateral.hash + completion:^(DSTransaction *_Nonnull transaction, NSIndexSet *_Nonnull indexSet, NSError *_Nonnull error) { + __strong __typeof(weakModel) strongModel = weakModel; + if (!strongModel) { + return; + } + if (error) { + //todo display error message + } + else if ([indexSet count] == 0) { + } + else { + strongModel.valueText = [NSString stringWithFormat:@"%lu", (unsigned long)[indexSet firstIndex]]; + } + }]; + }; case DWMasternodeRegistrationCell_Port: + return ^{ + __strong __typeof(weakModel) strongModel = weakModel; + if (!strongModel) { + return; + } + strongModel.valueText = [NSString stringWithFormat:@"%d", [DWEnvironment sharedInstance].currentChain.standardPort]; + }; case DWMasternodeRegistrationCell_PayoutAddress: - return DWMasternodeRegistrationCellType_InputValue; + return ^{ + __strong __typeof(weakModel) strongModel = weakModel; + if (!strongModel) { + return; + } + strongModel.valueText = [[DWEnvironment sharedInstance].currentAccount receiveAddress]; + }; case DWMasternodeRegistrationCell_OwnerKey: + return ^{ + __strong __typeof(weakModel) strongModel = weakModel; + if (!strongModel) { + return; + } + @autoreleasepool { + DSWallet *wallet = [DWEnvironment sharedInstance].currentWallet; + DSDerivationPathFactory *factory = [DSDerivationPathFactory sharedInstance]; + DSAuthenticationKeysDerivationPath *ownerDerivationPath = [factory providerOwnerKeysDerivationPathForWallet:wallet]; + NSData *seed = [[DSBIP39Mnemonic sharedInstance] deriveKeyFromPhrase:wallet.seedPhraseIfAuthenticated + withPassphrase:nil]; + DSKey *key = [ownerDerivationPath firstUnusedPrivateKeyFromSeed:seed]; + if ([key isKindOfClass:[DSECDSAKey class]]) { + strongModel.valueText = [((DSECDSAKey *)key) privateKeyStringForChain:ownerDerivationPath.chain]; + } + else { + strongModel.valueText = key.secretKeyString; + } + } + }; case DWMasternodeRegistrationCell_OperatorKey: + return ^{ + __strong __typeof(weakModel) strongModel = weakModel; + if (!strongModel) { + return; + } + DSWallet *wallet = [DWEnvironment sharedInstance].currentWallet; + DSDerivationPathFactory *factory = [DSDerivationPathFactory sharedInstance]; + DSAuthenticationKeysDerivationPath *operatorDerivationPath = [factory providerOperatorKeysDerivationPathForWallet:wallet]; + NSData *key = [operatorDerivationPath firstUnusedPublicKey]; + strongModel.valueText = key.hexString; + }; case DWMasternodeRegistrationCell_VotingKey: - return DWMasternodeRegistrationCellType_PublicKey; + return ^{ + __strong __typeof(weakModel) strongModel = weakModel; + if (!strongModel) { + return; + } + DSWallet *wallet = [DWEnvironment sharedInstance].currentWallet; + DSDerivationPathFactory *factory = [DSDerivationPathFactory sharedInstance]; + DSAuthenticationKeysDerivationPath *voterDerivationPath = [factory providerVotingKeysDerivationPathForWallet:wallet]; + NSData *key = [voterDerivationPath firstUnusedPublicKey]; + strongModel.valueText = key.hexString; + }; + default: + return nil; } - return DWMasternodeRegistrationCellType_InputValue; } - (DWBaseFormCellModel *)modelForRow:(NSUInteger)row { - switch ([self typeForCellAtRow:row]) { - case DWMasternodeRegistrationCellType_InputValue: { - NSString *actionText = [self actionForCellAtRow:row]; - DWKeyValueFormCellModel *model = [[DWKeyValueFormCellModel alloc] initWithTitle:[self titleForCellAtRow:row] valueText:@"" placeholderText:[self placeholderForCellAtRow:row] actionText:actionText ? [[NSAttributedString alloc] initWithString:actionText] : nil]; - if (row == DWMasternodeRegistrationCell_Port) { - __weak __typeof(model) weakModel = model; - model.actionBlock = ^{ - __strong __typeof(weakModel) strongModel = weakModel; - if (!strongModel) { - return; - } - strongModel.valueText = [NSString stringWithFormat:@"%d", [DWEnvironment sharedInstance].currentChain.standardPort]; - }; - } else if (row == DWMasternodeRegistrationCell_CollateralIndex) { - __weak __typeof(self) weakSelf = self; - __weak __typeof(model) weakModel = model; - model.actionBlock = ^{ - __strong __typeof(weakSelf) strongSelf = weakSelf; - - if (!strongSelf) { - return; - } - [strongSelf.model lookupIndexesForCollateralHash:strongSelf.model.collateral.hash completion:^(DSTransaction * _Nonnull transaction, NSIndexSet * _Nonnull indexSet, NSError * _Nonnull error) { - __strong __typeof(weakModel) strongModel = weakModel; - if (!strongModel) { - return; - } - strongModel.valueText = [NSString stringWithFormat:@"%lu",(unsigned long)[indexSet firstIndex]]; - }]; - - }; - } - return model; + NSString *actionText = [self actionForCellAtRow:row]; + DWKeyValueFormCellModel *model = [[DWKeyValueFormCellModel alloc] initWithTitle:[self titleForCellAtRow:row] valueText:@"" placeholderText:[self placeholderForCellAtRow:row] actionText:actionText ? [[NSAttributedString alloc] initWithString:actionText] : nil]; + if (actionText) { + model.actionBlock = [self actionBlockForModel:model forCellAtRow:row]; + } + __weak __typeof(self.model) weakModel = self.model; + switch (row) { + case DWMasternodeRegistrationCell_CollateralTx: { + [model mvvm_observe:DW_KEYPATH(model, valueText) + with:^(__typeof(self) self, NSString *value) { + __strong __typeof(weakModel) strongModel = weakModel; + if (!strongModel) { + return; + } + strongModel.collateral = ((DSUTXO){.hash = [value hexToData].UInt256, .n = strongModel.collateral.n}); + }]; + break; + } + case DWMasternodeRegistrationCell_CollateralIndex: { + [model mvvm_observe:DW_KEYPATH(model, valueText) + with:^(__typeof(self) self, NSString *value) { + __strong __typeof(weakModel) strongModel = weakModel; + if (!strongModel) { + return; + } + strongModel.collateral = ((DSUTXO){.hash = strongModel.collateral.hash, .n = [value intValue]}); + }]; + break; + } + case DWMasternodeRegistrationCell_IPAddress: { + [model mvvm_observe:DW_KEYPATH(model, valueText) + with:^(__typeof(self) self, NSString *value) { + __strong __typeof(weakModel) strongModel = weakModel; + if (!strongModel) { + return; + } + [strongModel setIpAddressFromString:value]; + }]; + break; + } + case DWMasternodeRegistrationCell_Port: { + [model mvvm_observe:DW_KEYPATH(model, valueText) + with:^(__typeof(self) self, NSString *value) { + __strong __typeof(weakModel) strongModel = weakModel; + if (!strongModel) { + return; + } + strongModel.port = value.intValue; + }]; + break; + } + case DWMasternodeRegistrationCell_PayoutAddress: { + [model mvvm_observe:DW_KEYPATH(model, valueText) + with:^(__typeof(self) self, NSString *value) { + __strong __typeof(weakModel) strongModel = weakModel; + if (!strongModel) { + return; + } + strongModel.payoutAddress = value; + }]; + break; } - case DWMasternodeRegistrationCellType_PublicKey: { - NSTextAttachment *attachment = [[NSTextAttachment alloc] init]; - attachment.image = [UIImage imageNamed:@"icon_disclosure_indicator"]; - - NSAttributedString *attachmentString = [NSAttributedString attributedStringWithAttachment:attachment]; - NSMutableAttributedString *indexString = [[NSMutableAttributedString alloc] initWithString:[self actionForCellAtRow:row]]; - [indexString appendAttributedString:attachmentString]; - return [[DWKeyValueFormCellModel alloc] initWithTitle:[self titleForCellAtRow:row] valueText:@"" placeholderText:[self placeholderForCellAtRow:row] actionText:indexString]; + case DWMasternodeRegistrationCell_OwnerKey: { + [model mvvm_observe:DW_KEYPATH(model, valueText) + with:^(__typeof(self) self, NSString *value) { + __strong __typeof(weakModel) strongModel = weakModel; + if (!strongModel) { + return; + } + strongModel.ownerKey = [DSECDSAKey keyWithPrivateKey:value onChain:[[DWEnvironment sharedInstance] currentChain]]; + }]; + break; + } + case DWMasternodeRegistrationCell_OperatorKey: { + [model mvvm_observe:DW_KEYPATH(model, valueText) + with:^(__typeof(self) self, NSString *value) { + __strong __typeof(weakModel) strongModel = weakModel; + if (!strongModel) { + return; + } + strongModel.operatorKey = [DSBLSKey blsKeyWithPublicKey:[value hexToData].UInt384 onChain:[[DWEnvironment sharedInstance] currentChain]]; + }]; + break; + } + case DWMasternodeRegistrationCell_VotingKey: { + [model mvvm_observe:DW_KEYPATH(model, valueText) + with:^(__typeof(self) self, NSString *value) { + __strong __typeof(weakModel) strongModel = weakModel; + if (!strongModel) { + return; + } + strongModel.votingKey = [DSECDSAKey keyWithPublicKey:[value hexToData]]; + }]; + break; } } + + return model; } - (NSArray *)items { @@ -224,7 +355,12 @@ - (DWBaseFormCellModel *)modelForRow:(NSUInteger)row { - (DWBaseFormCellModel *)registerActionModel { DWActionFormCellModel *registerModel = [[DWActionFormCellModel alloc] initWithTitle:NSLocalizedString(@"Register", nil)]; registerModel.didSelectBlock = ^(DWActionFormCellModel *_Nonnull cellModel, NSIndexPath *_Nonnull indexPath) { - [self showPayloadSigning]; + [self.model findCollateralTransactionWithCompletion:^(NSError *_Nonnull error) { + if (error) { + return; + } + [self showPayloadSigning]; + }]; }; return registerModel; } @@ -254,9 +390,10 @@ - (void)raiseIssue:(NSString *)issue message:(NSString *)message { } - (void)showPayloadSigning { + DWSignPayloadModel *signPayloadModel = [[DWSignPayloadModel alloc] initForCollateralAddress:self.model.collateralTransaction.outputAddresses[self.model.providerRegistrationTransaction.collateralOutpoint.n] withPayloadCollateralString:self.model.providerRegistrationTransaction.payloadCollateralString]; DWSignPayloadViewController *signPayloadViewController = [[DWSignPayloadViewController alloc] init]; - signPayloadViewController.collateralAddress = self.collateralTransaction.outputAddresses[self.providerRegistrationTransaction.collateralOutpoint.n]; - signPayloadViewController.providerRegistrationTransaction = self.providerRegistrationTransaction; + signPayloadViewController.collateralAddress = + signPayloadViewController.providerRegistrationTransaction = ; signPayloadViewController.delegate = self; [self.navigationController pushViewController:signPayloadViewController animated:YES]; } diff --git a/DashWallet/Sources/UI/Menu/Tools/Masternode/Masternode Registration/Models/DWMasternodeRegistrationModel.h b/DashWallet/Sources/UI/Menu/Tools/Masternode/Masternode Registration/Models/DWMasternodeRegistrationModel.h index 75ff7dea8..cb51b50f4 100644 --- a/DashWallet/Sources/UI/Menu/Tools/Masternode/Masternode Registration/Models/DWMasternodeRegistrationModel.h +++ b/DashWallet/Sources/UI/Menu/Tools/Masternode/Masternode Registration/Models/DWMasternodeRegistrationModel.h @@ -34,6 +34,9 @@ NS_ASSUME_NONNULL_BEGIN @property (nonatomic, assign) DSUTXO collateral; +@property (nonatomic, readonly) DSTransaction *collateralTransaction; +@property (nonatomic, readonly) DSProviderRegistrationTransaction *providerRegistrationTransaction; + @property (nonatomic, strong) NSString *payoutAddress; - (instancetype)initForAccount:(DSAccount *)account NS_DESIGNATED_INITIALIZER; @@ -44,7 +47,11 @@ NS_ASSUME_NONNULL_BEGIN - (void)signTransactionInputs:(DSProviderRegistrationTransaction *)providerRegistrationTransaction completion:(void (^_Nullable)(NSError *error))completion; --(void)lookupIndexesForCollateralHash:(UInt256)collateralHash completion:(void (^_Nullable)(DSTransaction* transaction, NSIndexSet *indexSet, NSError *error))completion; +- (void)lookupIndexesForCollateralHash:(UInt256)collateralHash completion:(void (^_Nullable)(DSTransaction *transaction, NSIndexSet *indexSet, NSError *error))completion; + +- (void)setIpAddressFromString:(NSString *)ipAddressString; + +- (void)findCollateralTransactionWithCompletion:(void (^_Nullable)(NSError *error))completion; @end diff --git a/DashWallet/Sources/UI/Menu/Tools/Masternode/Masternode Registration/Models/DWMasternodeRegistrationModel.m b/DashWallet/Sources/UI/Menu/Tools/Masternode/Masternode Registration/Models/DWMasternodeRegistrationModel.m index 68d99ab19..a84c6ad9a 100644 --- a/DashWallet/Sources/UI/Menu/Tools/Masternode/Masternode Registration/Models/DWMasternodeRegistrationModel.m +++ b/DashWallet/Sources/UI/Menu/Tools/Masternode/Masternode Registration/Models/DWMasternodeRegistrationModel.m @@ -24,8 +24,7 @@ @interface DWMasternodeRegistrationModel () @property (nonatomic, strong) DSAccount *account; @property (nonatomic, strong) DSTransaction *collateralTransaction; - -@property (nonatomic, strong) DSTransaction *providerRegistrationTransaction; +@property (nonatomic, strong) DSProviderRegistrationTransaction *providerRegistrationTransaction; @property (readonly, nonatomic, strong) DSAuthenticationKeysDerivationPath *ownerDerivationPath; @property (readonly, nonatomic, strong) DSAuthenticationKeysDerivationPath *votingDerivationPath; @@ -105,50 +104,70 @@ - (void)setIpAddressFromString:(NSString *)ipAddressString { self.ipAddress = ipAddress; } --(void)lookupIndexesForCollateralHash:(UInt256)collateralHash completion:(void (^_Nullable)(DSTransaction* transaction, NSIndexSet *indexSet, NSError *error))completion { - [[DSInsightManager sharedInstance] queryInsightForTransactionWithHash:uint256_reverse(self.collateral.hash) +- (void)lookupIndexesForCollateralHash:(UInt256)collateralHash completion:(void (^_Nullable)(DSTransaction *transaction, NSIndexSet *indexSet, NSError *error))completion { + [[DSInsightManager sharedInstance] queryInsightForTransactionWithHash:self.collateral.hash onChain:self.account.wallet.chain completion:^(DSTransaction *transaction, NSError *error) { - if (error) { - dispatch_async(dispatch_get_main_queue(), ^{ - completion(transaction,nil,[NSError errorWithDomain:@"Dashwallet" code:500 userInfo:@{NSLocalizedDescriptionKey : NSLocalizedString(@"Network error", nil)}]); - }); - return; - } - if (!transaction) { - dispatch_async(dispatch_get_main_queue(), ^{ - completion(nil,nil,[NSError errorWithDomain:@"Dashwallet" code:500 userInfo:@{NSLocalizedDescriptionKey : NSLocalizedString(@"Transaction could not be found", nil)}]); - }); - return; - } - NSIndexSet *indexSet = [[transaction outputAmounts] indexesOfObjectsPassingTest:^BOOL(id _Nonnull obj, NSUInteger idx, BOOL *_Nonnull stop) { - if ([obj isEqual:@(MASTERNODE_COST)]) - return TRUE; - return FALSE; - }]; - if ([indexSet count]) { - dispatch_async(dispatch_get_main_queue(), ^{ - completion(transaction,indexSet,nil); - }); - } - else { - dispatch_async(dispatch_get_main_queue(), ^{ - completion(transaction,nil,nil); - }); - } - }]; + if (error) { + dispatch_async(dispatch_get_main_queue(), ^{ + completion(transaction, nil, [NSError errorWithDomain:@"Dashwallet" code:500 userInfo:@{NSLocalizedDescriptionKey : NSLocalizedString(@"Network error", nil)}]); + }); + return; + } + if (!transaction) { + dispatch_async(dispatch_get_main_queue(), ^{ + completion(nil, nil, [NSError errorWithDomain:@"Dashwallet" code:500 userInfo:@{NSLocalizedDescriptionKey : NSLocalizedString(@"Transaction could not be found", nil)}]); + }); + return; + } + NSIndexSet *indexSet = [[transaction outputAmounts] indexesOfObjectsPassingTest:^BOOL(id _Nonnull obj, NSUInteger idx, BOOL *_Nonnull stop) { + if ([obj isEqual:@(MASTERNODE_COST)]) + return TRUE; + return FALSE; + }]; + if ([indexSet count]) { + dispatch_async(dispatch_get_main_queue(), ^{ + completion(transaction, indexSet, nil); + }); + } + else { + dispatch_async(dispatch_get_main_queue(), ^{ + completion(transaction, nil, nil); + }); + } + }]; +} + +- (void)findCollateralTransactionWithCompletion:(void (^_Nullable)(NSError *error))completion { + if (!dsutxo_is_zero(self.collateral)) { + [self lookupIndexesForCollateralHash:self.collateral.hash + completion:^(DSTransaction *_Nonnull transaction, NSIndexSet *_Nonnull indexSet, NSError *_Nonnull error) { + if (error) { + completion(error); + return; + } + if ([indexSet containsIndex:self.collateral.n]) { + self.collateralTransaction = transaction; + } + else { + if (completion) { + completion([NSError errorWithDomain:@"Dashwallet" code:500 userInfo:@{NSLocalizedDescriptionKey : NSLocalizedString(@"Incorrect collateral", nil)}]); + } + } + }]; + } } - (void)registerMasternode:(id)sender requestsPayloadSigning:(void (^_Nullable)(void))payloadSigningRequest completion:(void (^_Nullable)(NSError *error))completion { - - + + DSMasternodeManager *masternodeManager = self.wallet.chain.chainManager.masternodeManager; - + DSLocalMasternode *masternode = [masternodeManager createNewMasternodeWithIPAddress:self.ipAddress onPort:self.port inFundsWallet:self.wallet fundsWalletIndex:UINT32_MAX inOperatorWallet:self.wallet operatorWalletIndex:self.operatorKeyIndex operatorPublicKey:self.operatorKey inOwnerWallet:self.wallet ownerWalletIndex:self.ownerKeyIndex ownerPrivateKey:self.ownerKey inVotingWallet:self.wallet votingWalletIndex:self.votingKeyIndex votingKey:self.votingKey]; - + // NSString *payoutAddress = [self.payToAddressTableViewCell.valueTextField.text isValidDashAddressOnChain:self.chain] ? self.payToAddressTableViewCell.textLabel.text : self.account.receiveAddress; - - + + // DSUTXO collateral = DSUTXO_ZERO; // UInt256 nonReversedCollateralHash = UINT256_ZERO; // NSString *collateralTransactionHash = self.collateralTransactionTableViewCell.valueTextField.text; @@ -161,61 +180,44 @@ - (void)registerMasternode:(id)sender requestsPayloadSigning:(void (^_Nullable)( // nonReversedCollateralHash = collateralTransactionHashData.UInt256; // collateral.n = [self.collateralIndexTableViewCell.valueTextField.text integerValue]; // } - - + + [masternode registrationTransactionFundedByAccount:self.account toAddress:self.payoutAddress withCollateral:self.collateral completion:^(DSProviderRegistrationTransaction *_Nonnull providerRegistrationTransaction) { - if (providerRegistrationTransaction) { - if (dsutxo_is_zero(self.collateral)) { - [self signTransactionInputs:providerRegistrationTransaction completion:completion]; - } - else { - [self lookupIndexesForCollateralHash:self.collateral.hash completion:^(DSTransaction * _Nonnull transaction, NSIndexSet * _Nonnull indexSet, NSError * _Nonnull error) { - if (error) { - completion(error); - return; - } - if ([indexSet containsIndex:self.collateral.n]) { - self.collateralTransaction = transaction; - self.providerRegistrationTransaction = providerRegistrationTransaction; - if (payloadSigningRequest) { - payloadSigningRequest(); - } - } - else { - if (completion) { - completion([NSError errorWithDomain:@"Dashwallet" code:500 userInfo:@{NSLocalizedDescriptionKey : NSLocalizedString(@"Incorrect collateral index", nil)}]); - } - } - }]; - } - } - else { - if (completion) { - completion([NSError errorWithDomain:@"Dashwallet" code:500 userInfo:@{NSLocalizedDescriptionKey : NSLocalizedString(@"Unable to create ProviderRegistrationTransaction.", nil)}]); - } - } - }]; + if (providerRegistrationTransaction) { + if (dsutxo_is_zero(self.collateral)) { + [self signTransactionInputs:providerRegistrationTransaction completion:completion]; + } + else { + payloadSigningRequest(); + } + } + else { + if (completion) { + completion([NSError errorWithDomain:@"Dashwallet" code:500 userInfo:@{NSLocalizedDescriptionKey : NSLocalizedString(@"Unable to create ProviderRegistrationTransaction.", nil)}]); + } + } + }]; } - (void)signTransactionInputs:(DSProviderRegistrationTransaction *)providerRegistrationTransaction completion:(void (^_Nullable)(NSError *error))completion { [self.account signTransaction:providerRegistrationTransaction withPrompt:NSLocalizedString(@"Would you like to register this masternode?", nil) completion:^(BOOL signedTransaction, BOOL cancelled) { - if (signedTransaction) { - [self.account.wallet.chain.chainManager.transactionManager publishTransaction:providerRegistrationTransaction - completion:^(NSError *_Nullable error) { - completion(error); - }]; - } - else { - if (completion) { - completion([NSError errorWithDomain:@"Dashwallet" code:500 userInfo:@{NSLocalizedDescriptionKey : NSLocalizedString(@"Transaction was not signed.", nil)}]); - } - } - }]; + if (signedTransaction) { + [self.account.wallet.chain.chainManager.transactionManager publishTransaction:providerRegistrationTransaction + completion:^(NSError *_Nullable error) { + completion(error); + }]; + } + else { + if (completion) { + completion([NSError errorWithDomain:@"Dashwallet" code:500 userInfo:@{NSLocalizedDescriptionKey : NSLocalizedString(@"Transaction was not signed.", nil)}]); + } + } + }]; } diff --git a/DashWallet/Sources/UI/Menu/Tools/Masternode/Payload Signing/DWSignPayloadViewController.h b/DashWallet/Sources/UI/Menu/Tools/Masternode/Payload Signing/DWSignPayloadViewController.h new file mode 100644 index 000000000..888175f72 --- /dev/null +++ b/DashWallet/Sources/UI/Menu/Tools/Masternode/Payload Signing/DWSignPayloadViewController.h @@ -0,0 +1,47 @@ +// +// DWSignPayloadViewController.h +// DashWallet +// +// Created by Sam Westrich on 3/8/19. +// Licensed under the MIT License (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://opensource.org/licenses/MIT +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// + +#import "DWBaseActionButtonViewController.h" +#import "DWSignPayloadModel.h" +#import +#import + +@class DSProviderRegistrationTransaction; + +NS_ASSUME_NONNULL_BEGIN + +@protocol DWSignPayloadDelegate + +- (void)viewController:(UIViewController *)controller didReturnSignature:(NSData *)signature; + +@end + +@interface DWSignPayloadViewController : DWBaseActionButtonViewController + +@property (nonatomic, readonly) DWSignPayloadModel *model; + +- (instancetype)initWithNibName:(nullable NSString *)nibNameOrNil bundle:(nullable NSBundle *)nibBundleOrNil NS_UNAVAILABLE; +- (nullable instancetype)initWithCoder:(NSCoder *)coder NS_UNAVAILABLE; + +- (instancetype)initWithModel:(DWSignPayloadModel *)model NS_DESIGNATED_INITIALIZER; + +@property (nonatomic, weak) id delegate; + +@end + +NS_ASSUME_NONNULL_END diff --git a/DashWallet/Sources/UI/Menu/Tools/Masternode/Payload Signing/DWSignPayloadViewController.m b/DashWallet/Sources/UI/Menu/Tools/Masternode/Payload Signing/DWSignPayloadViewController.m new file mode 100644 index 000000000..312daf1c2 --- /dev/null +++ b/DashWallet/Sources/UI/Menu/Tools/Masternode/Payload Signing/DWSignPayloadViewController.m @@ -0,0 +1,110 @@ +// +// DWSignPayloadViewController.m +// DashWallet +// +// Created by Sam Westrich on 3/8/19. +// Copyright © 2019 Dash Core Group. All rights reserved. +// + +#import "DWSignPayloadViewController.h" +#import "DSAccount.h" +#import "DSECDSAKey.h" +#import "DSProviderRegistrationTransaction.h" +#import "DSWallet.h" +#import "NSData+Bitcoin.h" +#import "NSMutableData+Dash.h" +#import "NSString+Dash.h" + +@interface DWSignPayloadViewController () +@property (strong, nonatomic) IBOutlet UITextView *signatureMessageInputTextView; +@property (strong, nonatomic) IBOutlet UITextView *signatureMessageResultTextView; +@property (strong, nonatomic) IBOutlet UIButton *signButton; + +@property (nonatomic, strong) DWSignPayloadModel *model; + +@end + +@implementation DWSignPayloadViewController + +//- (instancetype)initWithNibName:(nullable NSString *)nibNameOrNil bundle:(nullable NSBundle *)nibBundleOrNil { +// if (self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil]) { +// self.title = NSLocalizedString(@"External Sign", nil); +// self.hidesBottomBarWhenPushed = YES; +// } +// return self; +//} + +- (instancetype)initWithModel:(DWSignPayloadModel *)model { + self = [super initWithNibName:nil bundle:nil]; + if (self) { + _model = model; + } + return self; +} + + +- (UIStatusBarStyle)preferredStatusBarStyle { + return UIStatusBarStyleLightContent; +} + +- (void)viewDidLoad { + [super viewDidLoad]; + [self setupView]; +} + ++ (NSString *)actionButtonTitle { + return NSLocalizedString(@"Verify Signature", nil); +} + + +- (void)setupView { + self.title = NSLocalizedString(@"External Sign", nil); + self.actionButton.enabled = YES; + + NSParameterAssert(self.model); + + DWSignPayloadView *contentView = [[DWSignPayloadView alloc] initWithModel:self.model]; + contentView.translatesAutoresizingMaskIntoConstraints = NO; + contentView.delegate = self; + [self setupContentView:contentView]; + self.contentView = contentView; +} + + +- (void)setupObserving { +} + +//- (IBAction)sign:(id)sender { +// +// if (self.signatureMessageResultTextView.text && ![self.signatureMessageResultTextView.text isEqualToString:@""]) { +// NSData *signature = [[NSData alloc] initWithBase64EncodedString:self.signatureMessageResultTextView.text options:0]; +// DSECDSAKey *key = [DSECDSAKey keyRecoveredFromCompactSig:signature andMessageDigest:self.providerRegistrationTransaction.payloadCollateralDigest]; +// NSString *address = [key addressForChain:self.providerRegistrationTransaction.chain]; +// if ([address isEqualToString:self.collateralAddress]) { +// [self.delegate viewController:self didReturnSignature:signature]; +// } +// else { +// NSLog(@"Not matching signature"); +// } +// } +// else { +// DSAccount *account = [self.providerRegistrationTransaction.chain accountContainingAddress:self.collateralAddress]; +// +// +// DSFundsDerivationPath *derivationPath = [account derivationPathContainingAddress:self.collateralAddress]; +// +// NSIndexPath *indexPath = [derivationPath indexPathForKnownAddress:self.collateralAddress]; +// +// [account.wallet seedWithPrompt:@"Sign?" +// forAmount:0 +// completion:^(NSData *_Nullable seed, BOOL cancelled) { +// if (seed && !cancelled) { +// DSECDSAKey *key = (DSECDSAKey *)[derivationPath privateKeyAtIndexPath:indexPath fromSeed:seed]; +// NSData *data = [key compactSign:self.providerRegistrationTransaction.payloadCollateralDigest]; +// [self.delegate viewController:self didReturnSignature:data]; +// } +// }]; +// } +//} + +@end diff --git a/DashWallet/Sources/UI/Menu/Tools/Masternode/Payload Signing/Models/DWSignPayloadModel.h b/DashWallet/Sources/UI/Menu/Tools/Masternode/Payload Signing/Models/DWSignPayloadModel.h new file mode 100644 index 000000000..5cb436670 --- /dev/null +++ b/DashWallet/Sources/UI/Menu/Tools/Masternode/Payload Signing/Models/DWSignPayloadModel.h @@ -0,0 +1,34 @@ +// +// Created by Sam Westrich +// Copyright © 2019 Dash Core Group. All rights reserved. +// +// Licensed under the MIT License (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://opensource.org/licenses/MIT +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// + +#import + +NS_ASSUME_NONNULL_BEGIN + +@interface DWSignPayloadModel : NSObject + +@property (nonatomic, strong) NSString *collateralAddress; +@property (nonatomic, strong) NSString *payloadCollateralString; +@property (nonatomic, strong) NSData *signature; + +- (instancetype)initForCollateralAddress:(NSString *)collateralAddress withPayloadCollateralString:(NSString *)payloadCollateralString NS_DESIGNATED_INITIALIZER; + +- (instancetype)init NS_UNAVAILABLE; + +@end + +NS_ASSUME_NONNULL_END diff --git a/DashWallet/Sources/UI/Menu/Tools/Masternode/Payload Signing/Models/DWSignPayloadModel.m b/DashWallet/Sources/UI/Menu/Tools/Masternode/Payload Signing/Models/DWSignPayloadModel.m new file mode 100644 index 000000000..7226a44a5 --- /dev/null +++ b/DashWallet/Sources/UI/Menu/Tools/Masternode/Payload Signing/Models/DWSignPayloadModel.m @@ -0,0 +1,43 @@ +// +// Created by Sam Westrich +// Copyright © 2019 Dash Core Group. All rights reserved. +// +// Licensed under the MIT License (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://opensource.org/licenses/MIT +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// + +#import "DWSignPayloadModel.h" + +@implementation DWSignPayloadModel + +- (instancetype)initForCollateralAddress:(NSString *)collateralAddress withPayloadCollateralString:(NSString *)payloadCollateralString { + self = [super init]; + if (self) { + _collateralAddress = collateralAddress; + _payloadCollateralString = payloadCollateralString; + } + return self; +} + +- (void)setSignatureFromString:(NSString *)signatureString { + self.signature = [[NSData alloc] initWithBase64EncodedString:signatureString options:0]; +} + + +- (BOOL)verifySignature:(id)sender { + DSECDSAKey *key = [DSECDSAKey keyRecoveredFromCompactSig:self.signature andMessageDigest:[self.payloadCollateralString magicDigest]]; + NSString *address = [key addressForChain:[DWEnvironment sharedInstance].currentChain]; + return [address isEqualToString:self.collateralAddress]; +} + + +@end diff --git a/DashWallet/Sources/UI/Menu/Tools/Masternode/Payload Signing/Views/DWSignPayloadView.h b/DashWallet/Sources/UI/Menu/Tools/Masternode/Payload Signing/Views/DWSignPayloadView.h new file mode 100644 index 000000000..c4b717970 --- /dev/null +++ b/DashWallet/Sources/UI/Menu/Tools/Masternode/Payload Signing/Views/DWSignPayloadView.h @@ -0,0 +1,26 @@ +// +// Created by Sam Westrich +// Copyright © 2019 Dash Core Group. All rights reserved. +// +// Licensed under the MIT License (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://opensource.org/licenses/MIT +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// + +#import + +NS_ASSUME_NONNULL_BEGIN + +@interface DWSignPayloadView : UIView + +@end + +NS_ASSUME_NONNULL_END diff --git a/DashWallet/Sources/UI/Menu/Tools/Masternode/Payload Signing/Views/DWSignPayloadView.m b/DashWallet/Sources/UI/Menu/Tools/Masternode/Payload Signing/Views/DWSignPayloadView.m new file mode 100644 index 000000000..325ccd781 --- /dev/null +++ b/DashWallet/Sources/UI/Menu/Tools/Masternode/Payload Signing/Views/DWSignPayloadView.m @@ -0,0 +1,30 @@ +// +// Created by Sam Westrich +// Copyright © 2019 Dash Core Group. All rights reserved. +// +// Licensed under the MIT License (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://opensource.org/licenses/MIT +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// + +#import "DWSignPayloadView.h" + +@implementation DWSignPayloadView + +/* +// Only override drawRect: if you perform custom drawing. +// An empty implementation adversely affects performance during animation. +- (void)drawRect:(CGRect)rect { + // Drawing code +} +*/ + +@end diff --git a/DashWallet/ar.lproj/Localizable.strings b/DashWallet/ar.lproj/Localizable.strings index 39f7e5752..d80fd9ce4 100644 --- a/DashWallet/ar.lproj/Localizable.strings +++ b/DashWallet/ar.lproj/Localizable.strings @@ -330,7 +330,7 @@ "Enter Operator Public Key" = "Enter Operator Public Key"; /* No comment provided by engineer. */ -"Enter Owner Public Key" = "Enter Owner Public Key"; +"Enter Owner Private Key" = "Enter Owner Private Key"; /* No comment provided by engineer. */ "Enter Payout Address" = "Enter Payout Address"; @@ -569,6 +569,9 @@ /* No comment provided by engineer. */ "Network" = "Network"; +/* No comment provided by engineer. */ +"Network error" = "Network error"; + /* No comment provided by engineer. */ "Network fee" = "Network fee"; @@ -660,7 +663,7 @@ "Owner Keys" = "Owner Keys"; /* No comment provided by engineer. */ -"Owner Public Key" = "Owner Public Key"; +"Owner Private Key" = "Owner Private Key"; /* No comment provided by engineer. */ "Paid successfully" = "Paid successfully"; @@ -1082,6 +1085,9 @@ /* No comment provided by engineer. */ "Touch ID spending limit" = "Touch ID لحد الإنفاق"; +/* No comment provided by engineer. */ +"Transaction could not be found" = "Transaction could not be found"; + /* No comment provided by engineer. */ "Transaction history" = "سجل المعاملات"; @@ -1142,6 +1148,9 @@ /* No comment provided by engineer. */ "Uphold account" = "Uphold account"; +/* No comment provided by engineer. */ +"Use Wallet" = "Use Wallet"; + /* No comment provided by engineer. */ "Used" = "Used"; @@ -1160,9 +1169,6 @@ /* No comment provided by engineer. */ "Username:" = "Username:"; -/* No comment provided by engineer. */ -"Using Index 0" = "Using Index 0"; - /* No comment provided by engineer. */ "Verified Successfully" = "Verified Successfully"; diff --git a/DashWallet/bg.lproj/Localizable.strings b/DashWallet/bg.lproj/Localizable.strings index 30dac35c7..9c6b480e0 100644 --- a/DashWallet/bg.lproj/Localizable.strings +++ b/DashWallet/bg.lproj/Localizable.strings @@ -330,7 +330,7 @@ "Enter Operator Public Key" = "Enter Operator Public Key"; /* No comment provided by engineer. */ -"Enter Owner Public Key" = "Enter Owner Public Key"; +"Enter Owner Private Key" = "Enter Owner Private Key"; /* No comment provided by engineer. */ "Enter Payout Address" = "Enter Payout Address"; @@ -569,6 +569,9 @@ /* No comment provided by engineer. */ "Network" = "Мрежа"; +/* No comment provided by engineer. */ +"Network error" = "Network error"; + /* No comment provided by engineer. */ "Network fee" = "Network fee"; @@ -660,7 +663,7 @@ "Owner Keys" = "Ключове на собственика"; /* No comment provided by engineer. */ -"Owner Public Key" = "Owner Public Key"; +"Owner Private Key" = "Owner Private Key"; /* No comment provided by engineer. */ "Paid successfully" = "Paid successfully"; @@ -1082,6 +1085,9 @@ /* No comment provided by engineer. */ "Touch ID spending limit" = "Touch ID лимит за похарчване"; +/* No comment provided by engineer. */ +"Transaction could not be found" = "Transaction could not be found"; + /* No comment provided by engineer. */ "Transaction history" = "История на транзакциите"; @@ -1142,6 +1148,9 @@ /* No comment provided by engineer. */ "Uphold account" = "Uphold акаунт"; +/* No comment provided by engineer. */ +"Use Wallet" = "Use Wallet"; + /* No comment provided by engineer. */ "Used" = "Used"; @@ -1160,9 +1169,6 @@ /* No comment provided by engineer. */ "Username:" = "Username:"; -/* No comment provided by engineer. */ -"Using Index 0" = "Using Index 0"; - /* No comment provided by engineer. */ "Verified Successfully" = "Verified Successfully"; diff --git a/DashWallet/de.lproj/Localizable.strings b/DashWallet/de.lproj/Localizable.strings index 9c23cf68e..98b995b9f 100644 --- a/DashWallet/de.lproj/Localizable.strings +++ b/DashWallet/de.lproj/Localizable.strings @@ -330,7 +330,7 @@ "Enter Operator Public Key" = "Enter Operator Public Key"; /* No comment provided by engineer. */ -"Enter Owner Public Key" = "Enter Owner Public Key"; +"Enter Owner Private Key" = "Enter Owner Private Key"; /* No comment provided by engineer. */ "Enter Payout Address" = "Enter Payout Address"; @@ -569,6 +569,9 @@ /* No comment provided by engineer. */ "Network" = "Netzwerk"; +/* No comment provided by engineer. */ +"Network error" = "Network error"; + /* No comment provided by engineer. */ "Network fee" = "Network fee"; @@ -660,7 +663,7 @@ "Owner Keys" = "Besitzer-Schlüssel"; /* No comment provided by engineer. */ -"Owner Public Key" = "Owner Public Key"; +"Owner Private Key" = "Owner Private Key"; /* No comment provided by engineer. */ "Paid successfully" = "Paid successfully"; @@ -1082,6 +1085,9 @@ /* No comment provided by engineer. */ "Touch ID spending limit" = "Touch-ID Ausgabelimite"; +/* No comment provided by engineer. */ +"Transaction could not be found" = "Transaction could not be found"; + /* No comment provided by engineer. */ "Transaction history" = "Transaktionshistorie"; @@ -1142,6 +1148,9 @@ /* No comment provided by engineer. */ "Uphold account" = "Uphold-Konto"; +/* No comment provided by engineer. */ +"Use Wallet" = "Use Wallet"; + /* No comment provided by engineer. */ "Used" = "Used"; @@ -1160,9 +1169,6 @@ /* No comment provided by engineer. */ "Username:" = "Username:"; -/* No comment provided by engineer. */ -"Using Index 0" = "Using Index 0"; - /* No comment provided by engineer. */ "Verified Successfully" = "Verified Successfully"; diff --git a/DashWallet/el.lproj/Localizable.strings b/DashWallet/el.lproj/Localizable.strings index 41a8f9c85..e4b9bf62a 100644 --- a/DashWallet/el.lproj/Localizable.strings +++ b/DashWallet/el.lproj/Localizable.strings @@ -330,7 +330,7 @@ "Enter Operator Public Key" = "Enter Operator Public Key"; /* No comment provided by engineer. */ -"Enter Owner Public Key" = "Enter Owner Public Key"; +"Enter Owner Private Key" = "Enter Owner Private Key"; /* No comment provided by engineer. */ "Enter Payout Address" = "Enter Payout Address"; @@ -569,6 +569,9 @@ /* No comment provided by engineer. */ "Network" = "Network"; +/* No comment provided by engineer. */ +"Network error" = "Network error"; + /* No comment provided by engineer. */ "Network fee" = "Network fee"; @@ -660,7 +663,7 @@ "Owner Keys" = "Owner Keys"; /* No comment provided by engineer. */ -"Owner Public Key" = "Owner Public Key"; +"Owner Private Key" = "Owner Private Key"; /* No comment provided by engineer. */ "Paid successfully" = "Paid successfully"; @@ -1082,6 +1085,9 @@ /* No comment provided by engineer. */ "Touch ID spending limit" = "Touch ID spending limit"; +/* No comment provided by engineer. */ +"Transaction could not be found" = "Transaction could not be found"; + /* No comment provided by engineer. */ "Transaction history" = "Transaction history"; @@ -1142,6 +1148,9 @@ /* No comment provided by engineer. */ "Uphold account" = "Uphold account"; +/* No comment provided by engineer. */ +"Use Wallet" = "Use Wallet"; + /* No comment provided by engineer. */ "Used" = "Used"; @@ -1160,9 +1169,6 @@ /* No comment provided by engineer. */ "Username:" = "Username:"; -/* No comment provided by engineer. */ -"Using Index 0" = "Using Index 0"; - /* No comment provided by engineer. */ "Verified Successfully" = "Verified Successfully"; diff --git a/DashWallet/en.lproj/Localizable.strings b/DashWallet/en.lproj/Localizable.strings index 531eab8c9..da59f9f87 100644 --- a/DashWallet/en.lproj/Localizable.strings +++ b/DashWallet/en.lproj/Localizable.strings @@ -330,7 +330,7 @@ "Enter Operator Public Key" = "Enter Operator Public Key"; /* No comment provided by engineer. */ -"Enter Owner Public Key" = "Enter Owner Public Key"; +"Enter Owner Private Key" = "Enter Owner Private Key"; /* No comment provided by engineer. */ "Enter Payout Address" = "Enter Payout Address"; @@ -569,6 +569,9 @@ /* No comment provided by engineer. */ "Network" = "Network"; +/* No comment provided by engineer. */ +"Network error" = "Network error"; + /* No comment provided by engineer. */ "Network fee" = "Network fee"; @@ -660,7 +663,7 @@ "Owner Keys" = "Owner Keys"; /* No comment provided by engineer. */ -"Owner Public Key" = "Owner Public Key"; +"Owner Private Key" = "Owner Private Key"; /* No comment provided by engineer. */ "Paid successfully" = "Paid successfully"; @@ -1082,6 +1085,9 @@ /* No comment provided by engineer. */ "Touch ID spending limit" = "Touch ID spending limit"; +/* No comment provided by engineer. */ +"Transaction could not be found" = "Transaction could not be found"; + /* No comment provided by engineer. */ "Transaction history" = "Transaction history"; @@ -1142,6 +1148,9 @@ /* No comment provided by engineer. */ "Uphold account" = "Uphold account"; +/* No comment provided by engineer. */ +"Use Wallet" = "Use Wallet"; + /* No comment provided by engineer. */ "Used" = "Used"; @@ -1160,9 +1169,6 @@ /* No comment provided by engineer. */ "Username:" = "Username:"; -/* No comment provided by engineer. */ -"Using Index 0" = "Using Index 0"; - /* No comment provided by engineer. */ "Verified Successfully" = "Verified Successfully"; diff --git a/DashWallet/es.lproj/Localizable.strings b/DashWallet/es.lproj/Localizable.strings index fb04decd4..4e9c69aac 100644 --- a/DashWallet/es.lproj/Localizable.strings +++ b/DashWallet/es.lproj/Localizable.strings @@ -330,7 +330,7 @@ "Enter Operator Public Key" = "Enter Operator Public Key"; /* No comment provided by engineer. */ -"Enter Owner Public Key" = "Enter Owner Public Key"; +"Enter Owner Private Key" = "Enter Owner Private Key"; /* No comment provided by engineer. */ "Enter Payout Address" = "Enter Payout Address"; @@ -569,6 +569,9 @@ /* No comment provided by engineer. */ "Network" = "Red de trabajo"; +/* No comment provided by engineer. */ +"Network error" = "Network error"; + /* No comment provided by engineer. */ "Network fee" = "Network fee"; @@ -660,7 +663,7 @@ "Owner Keys" = "Llaves del propietario"; /* No comment provided by engineer. */ -"Owner Public Key" = "Owner Public Key"; +"Owner Private Key" = "Owner Private Key"; /* No comment provided by engineer. */ "Paid successfully" = "Paid successfully"; @@ -1082,6 +1085,9 @@ /* No comment provided by engineer. */ "Touch ID spending limit" = "Límite de gasto de Touch ID"; +/* No comment provided by engineer. */ +"Transaction could not be found" = "Transaction could not be found"; + /* No comment provided by engineer. */ "Transaction history" = "Historial de transacciones"; @@ -1142,6 +1148,9 @@ /* No comment provided by engineer. */ "Uphold account" = "cuenta de Uphold "; +/* No comment provided by engineer. */ +"Use Wallet" = "Use Wallet"; + /* No comment provided by engineer. */ "Used" = "Used"; @@ -1160,9 +1169,6 @@ /* No comment provided by engineer. */ "Username:" = "Username:"; -/* No comment provided by engineer. */ -"Using Index 0" = "Using Index 0"; - /* No comment provided by engineer. */ "Verified Successfully" = "Verified Successfully"; diff --git a/DashWallet/fr.lproj/Localizable.strings b/DashWallet/fr.lproj/Localizable.strings index 67b11410d..db70f6967 100644 --- a/DashWallet/fr.lproj/Localizable.strings +++ b/DashWallet/fr.lproj/Localizable.strings @@ -330,7 +330,7 @@ "Enter Operator Public Key" = "Enter Operator Public Key"; /* No comment provided by engineer. */ -"Enter Owner Public Key" = "Enter Owner Public Key"; +"Enter Owner Private Key" = "Enter Owner Private Key"; /* No comment provided by engineer. */ "Enter Payout Address" = "Enter Payout Address"; @@ -569,6 +569,9 @@ /* No comment provided by engineer. */ "Network" = "Réseau"; +/* No comment provided by engineer. */ +"Network error" = "Network error"; + /* No comment provided by engineer. */ "Network fee" = "Network fee"; @@ -660,7 +663,7 @@ "Owner Keys" = "Clés de propriétaire"; /* No comment provided by engineer. */ -"Owner Public Key" = "Owner Public Key"; +"Owner Private Key" = "Owner Private Key"; /* No comment provided by engineer. */ "Paid successfully" = "Paid successfully"; @@ -1082,6 +1085,9 @@ /* No comment provided by engineer. */ "Touch ID spending limit" = "Limite de dépense avec TouchID"; +/* No comment provided by engineer. */ +"Transaction could not be found" = "Transaction could not be found"; + /* No comment provided by engineer. */ "Transaction history" = "Historique des transactions"; @@ -1142,6 +1148,9 @@ /* No comment provided by engineer. */ "Uphold account" = "compte Uphold"; +/* No comment provided by engineer. */ +"Use Wallet" = "Use Wallet"; + /* No comment provided by engineer. */ "Used" = "Used"; @@ -1160,9 +1169,6 @@ /* No comment provided by engineer. */ "Username:" = "Username:"; -/* No comment provided by engineer. */ -"Using Index 0" = "Using Index 0"; - /* No comment provided by engineer. */ "Verified Successfully" = "Verified Successfully"; diff --git a/DashWallet/id.lproj/Localizable.strings b/DashWallet/id.lproj/Localizable.strings index 2fb3807e6..dc77918b2 100644 --- a/DashWallet/id.lproj/Localizable.strings +++ b/DashWallet/id.lproj/Localizable.strings @@ -330,7 +330,7 @@ "Enter Operator Public Key" = "Enter Operator Public Key"; /* No comment provided by engineer. */ -"Enter Owner Public Key" = "Enter Owner Public Key"; +"Enter Owner Private Key" = "Enter Owner Private Key"; /* No comment provided by engineer. */ "Enter Payout Address" = "Enter Payout Address"; @@ -569,6 +569,9 @@ /* No comment provided by engineer. */ "Network" = "Jaringan"; +/* No comment provided by engineer. */ +"Network error" = "Network error"; + /* No comment provided by engineer. */ "Network fee" = "Network fee"; @@ -660,7 +663,7 @@ "Owner Keys" = "Kunci Pemilik"; /* No comment provided by engineer. */ -"Owner Public Key" = "Owner Public Key"; +"Owner Private Key" = "Owner Private Key"; /* No comment provided by engineer. */ "Paid successfully" = "Paid successfully"; @@ -1082,6 +1085,9 @@ /* No comment provided by engineer. */ "Touch ID spending limit" = "ID sentuhan pengiriman terbatas"; +/* No comment provided by engineer. */ +"Transaction could not be found" = "Transaction could not be found"; + /* No comment provided by engineer. */ "Transaction history" = "Riwayat transaksi"; @@ -1142,6 +1148,9 @@ /* No comment provided by engineer. */ "Uphold account" = "Akun Uphold"; +/* No comment provided by engineer. */ +"Use Wallet" = "Use Wallet"; + /* No comment provided by engineer. */ "Used" = "Used"; @@ -1160,9 +1169,6 @@ /* No comment provided by engineer. */ "Username:" = "Username:"; -/* No comment provided by engineer. */ -"Using Index 0" = "Using Index 0"; - /* No comment provided by engineer. */ "Verified Successfully" = "Verified Successfully"; diff --git a/DashWallet/it.lproj/Localizable.strings b/DashWallet/it.lproj/Localizable.strings index dbcb589c8..4c4527588 100644 --- a/DashWallet/it.lproj/Localizable.strings +++ b/DashWallet/it.lproj/Localizable.strings @@ -330,7 +330,7 @@ "Enter Operator Public Key" = "Enter Operator Public Key"; /* No comment provided by engineer. */ -"Enter Owner Public Key" = "Enter Owner Public Key"; +"Enter Owner Private Key" = "Enter Owner Private Key"; /* No comment provided by engineer. */ "Enter Payout Address" = "Enter Payout Address"; @@ -569,6 +569,9 @@ /* No comment provided by engineer. */ "Network" = "Network"; +/* No comment provided by engineer. */ +"Network error" = "Network error"; + /* No comment provided by engineer. */ "Network fee" = "Network fee"; @@ -660,7 +663,7 @@ "Owner Keys" = "Chiavi proprietario"; /* No comment provided by engineer. */ -"Owner Public Key" = "Owner Public Key"; +"Owner Private Key" = "Owner Private Key"; /* No comment provided by engineer. */ "Paid successfully" = "Paid successfully"; @@ -1082,6 +1085,9 @@ /* No comment provided by engineer. */ "Touch ID spending limit" = "Limite di spesa Touch ID"; +/* No comment provided by engineer. */ +"Transaction could not be found" = "Transaction could not be found"; + /* No comment provided by engineer. */ "Transaction history" = "Storico delle transazioni"; @@ -1142,6 +1148,9 @@ /* No comment provided by engineer. */ "Uphold account" = "Account Uphold"; +/* No comment provided by engineer. */ +"Use Wallet" = "Use Wallet"; + /* No comment provided by engineer. */ "Used" = "Used"; @@ -1160,9 +1169,6 @@ /* No comment provided by engineer. */ "Username:" = "Username:"; -/* No comment provided by engineer. */ -"Using Index 0" = "Using Index 0"; - /* No comment provided by engineer. */ "Verified Successfully" = "Verified Successfully"; diff --git a/DashWallet/ja.lproj/Localizable.strings b/DashWallet/ja.lproj/Localizable.strings index 42c9cc3e6..3cd3acca3 100644 --- a/DashWallet/ja.lproj/Localizable.strings +++ b/DashWallet/ja.lproj/Localizable.strings @@ -330,7 +330,7 @@ "Enter Operator Public Key" = "Enter Operator Public Key"; /* No comment provided by engineer. */ -"Enter Owner Public Key" = "Enter Owner Public Key"; +"Enter Owner Private Key" = "Enter Owner Private Key"; /* No comment provided by engineer. */ "Enter Payout Address" = "Enter Payout Address"; @@ -569,6 +569,9 @@ /* No comment provided by engineer. */ "Network" = "ネットワーク"; +/* No comment provided by engineer. */ +"Network error" = "Network error"; + /* No comment provided by engineer. */ "Network fee" = "Network fee"; @@ -660,7 +663,7 @@ "Owner Keys" = "所有者の諸々のキー"; /* No comment provided by engineer. */ -"Owner Public Key" = "Owner Public Key"; +"Owner Private Key" = "Owner Private Key"; /* No comment provided by engineer. */ "Paid successfully" = "Paid successfully"; @@ -1082,6 +1085,9 @@ /* No comment provided by engineer. */ "Touch ID spending limit" = "Touch IDの送金可能額"; +/* No comment provided by engineer. */ +"Transaction could not be found" = "Transaction could not be found"; + /* No comment provided by engineer. */ "Transaction history" = "取引履歴"; @@ -1142,6 +1148,9 @@ /* No comment provided by engineer. */ "Uphold account" = "Upholdアカウント"; +/* No comment provided by engineer. */ +"Use Wallet" = "Use Wallet"; + /* No comment provided by engineer. */ "Used" = "Used"; @@ -1160,9 +1169,6 @@ /* No comment provided by engineer. */ "Username:" = "Username:"; -/* No comment provided by engineer. */ -"Using Index 0" = "Using Index 0"; - /* No comment provided by engineer. */ "Verified Successfully" = "Verified Successfully"; diff --git a/DashWallet/ko.lproj/Localizable.strings b/DashWallet/ko.lproj/Localizable.strings index 03600d02e..a8e2e9cc4 100644 --- a/DashWallet/ko.lproj/Localizable.strings +++ b/DashWallet/ko.lproj/Localizable.strings @@ -330,7 +330,7 @@ "Enter Operator Public Key" = "Enter Operator Public Key"; /* No comment provided by engineer. */ -"Enter Owner Public Key" = "Enter Owner Public Key"; +"Enter Owner Private Key" = "Enter Owner Private Key"; /* No comment provided by engineer. */ "Enter Payout Address" = "Enter Payout Address"; @@ -569,6 +569,9 @@ /* No comment provided by engineer. */ "Network" = "네트워크"; +/* No comment provided by engineer. */ +"Network error" = "Network error"; + /* No comment provided by engineer. */ "Network fee" = "Network fee"; @@ -660,7 +663,7 @@ "Owner Keys" = "소유자 키"; /* No comment provided by engineer. */ -"Owner Public Key" = "Owner Public Key"; +"Owner Private Key" = "Owner Private Key"; /* No comment provided by engineer. */ "Paid successfully" = "Paid successfully"; @@ -1082,6 +1085,9 @@ /* No comment provided by engineer. */ "Touch ID spending limit" = "터치 ID 사용 제한 금액"; +/* No comment provided by engineer. */ +"Transaction could not be found" = "Transaction could not be found"; + /* No comment provided by engineer. */ "Transaction history" = "거래 내역"; @@ -1142,6 +1148,9 @@ /* No comment provided by engineer. */ "Uphold account" = "업홀드 계정"; +/* No comment provided by engineer. */ +"Use Wallet" = "Use Wallet"; + /* No comment provided by engineer. */ "Used" = "Used"; @@ -1160,9 +1169,6 @@ /* No comment provided by engineer. */ "Username:" = "Username:"; -/* No comment provided by engineer. */ -"Using Index 0" = "Using Index 0"; - /* No comment provided by engineer. */ "Verified Successfully" = "Verified Successfully"; diff --git a/DashWallet/nb.lproj/Localizable.strings b/DashWallet/nb.lproj/Localizable.strings index 8bf62d3cc..b367e8386 100644 --- a/DashWallet/nb.lproj/Localizable.strings +++ b/DashWallet/nb.lproj/Localizable.strings @@ -330,7 +330,7 @@ "Enter Operator Public Key" = "Enter Operator Public Key"; /* No comment provided by engineer. */ -"Enter Owner Public Key" = "Enter Owner Public Key"; +"Enter Owner Private Key" = "Enter Owner Private Key"; /* No comment provided by engineer. */ "Enter Payout Address" = "Enter Payout Address"; @@ -569,6 +569,9 @@ /* No comment provided by engineer. */ "Network" = "Network"; +/* No comment provided by engineer. */ +"Network error" = "Network error"; + /* No comment provided by engineer. */ "Network fee" = "Network fee"; @@ -660,7 +663,7 @@ "Owner Keys" = "Owner Keys"; /* No comment provided by engineer. */ -"Owner Public Key" = "Owner Public Key"; +"Owner Private Key" = "Owner Private Key"; /* No comment provided by engineer. */ "Paid successfully" = "Paid successfully"; @@ -1082,6 +1085,9 @@ /* No comment provided by engineer. */ "Touch ID spending limit" = "Touch ID spending limit"; +/* No comment provided by engineer. */ +"Transaction could not be found" = "Transaction could not be found"; + /* No comment provided by engineer. */ "Transaction history" = "Transaction history"; @@ -1142,6 +1148,9 @@ /* No comment provided by engineer. */ "Uphold account" = "Uphold account"; +/* No comment provided by engineer. */ +"Use Wallet" = "Use Wallet"; + /* No comment provided by engineer. */ "Used" = "Used"; @@ -1160,9 +1169,6 @@ /* No comment provided by engineer. */ "Username:" = "Username:"; -/* No comment provided by engineer. */ -"Using Index 0" = "Using Index 0"; - /* No comment provided by engineer. */ "Verified Successfully" = "Verified Successfully"; diff --git a/DashWallet/nl.lproj/Localizable.strings b/DashWallet/nl.lproj/Localizable.strings index 522576927..5601c5538 100644 --- a/DashWallet/nl.lproj/Localizable.strings +++ b/DashWallet/nl.lproj/Localizable.strings @@ -330,7 +330,7 @@ "Enter Operator Public Key" = "Enter Operator Public Key"; /* No comment provided by engineer. */ -"Enter Owner Public Key" = "Enter Owner Public Key"; +"Enter Owner Private Key" = "Enter Owner Private Key"; /* No comment provided by engineer. */ "Enter Payout Address" = "Enter Payout Address"; @@ -569,6 +569,9 @@ /* No comment provided by engineer. */ "Network" = "Netwerk"; +/* No comment provided by engineer. */ +"Network error" = "Network error"; + /* No comment provided by engineer. */ "Network fee" = "Network fee"; @@ -660,7 +663,7 @@ "Owner Keys" = "Eigenaar sleutels"; /* No comment provided by engineer. */ -"Owner Public Key" = "Owner Public Key"; +"Owner Private Key" = "Owner Private Key"; /* No comment provided by engineer. */ "Paid successfully" = "Paid successfully"; @@ -1082,6 +1085,9 @@ /* No comment provided by engineer. */ "Touch ID spending limit" = "Touch ID uitgavelimiet"; +/* No comment provided by engineer. */ +"Transaction could not be found" = "Transaction could not be found"; + /* No comment provided by engineer. */ "Transaction history" = "transactiegeschiedenis"; @@ -1142,6 +1148,9 @@ /* No comment provided by engineer. */ "Uphold account" = "Uphold account"; +/* No comment provided by engineer. */ +"Use Wallet" = "Use Wallet"; + /* No comment provided by engineer. */ "Used" = "Used"; @@ -1160,9 +1169,6 @@ /* No comment provided by engineer. */ "Username:" = "Username:"; -/* No comment provided by engineer. */ -"Using Index 0" = "Using Index 0"; - /* No comment provided by engineer. */ "Verified Successfully" = "Verified Successfully"; diff --git a/DashWallet/pl.lproj/Localizable.strings b/DashWallet/pl.lproj/Localizable.strings index 4d3bfb7b6..0e5518ec1 100644 --- a/DashWallet/pl.lproj/Localizable.strings +++ b/DashWallet/pl.lproj/Localizable.strings @@ -330,7 +330,7 @@ "Enter Operator Public Key" = "Enter Operator Public Key"; /* No comment provided by engineer. */ -"Enter Owner Public Key" = "Enter Owner Public Key"; +"Enter Owner Private Key" = "Enter Owner Private Key"; /* No comment provided by engineer. */ "Enter Payout Address" = "Enter Payout Address"; @@ -569,6 +569,9 @@ /* No comment provided by engineer. */ "Network" = "Sieć"; +/* No comment provided by engineer. */ +"Network error" = "Network error"; + /* No comment provided by engineer. */ "Network fee" = "Network fee"; @@ -660,7 +663,7 @@ "Owner Keys" = "Klucze właściciela"; /* No comment provided by engineer. */ -"Owner Public Key" = "Owner Public Key"; +"Owner Private Key" = "Owner Private Key"; /* No comment provided by engineer. */ "Paid successfully" = "Paid successfully"; @@ -1082,6 +1085,9 @@ /* No comment provided by engineer. */ "Touch ID spending limit" = "Limit wydatków Touch ID"; +/* No comment provided by engineer. */ +"Transaction could not be found" = "Transaction could not be found"; + /* No comment provided by engineer. */ "Transaction history" = "Historia transakcji"; @@ -1142,6 +1148,9 @@ /* No comment provided by engineer. */ "Uphold account" = "Konto Uphold"; +/* No comment provided by engineer. */ +"Use Wallet" = "Use Wallet"; + /* No comment provided by engineer. */ "Used" = "Used"; @@ -1160,9 +1169,6 @@ /* No comment provided by engineer. */ "Username:" = "Username:"; -/* No comment provided by engineer. */ -"Using Index 0" = "Using Index 0"; - /* No comment provided by engineer. */ "Verified Successfully" = "Verified Successfully"; diff --git a/DashWallet/pt.lproj/Localizable.strings b/DashWallet/pt.lproj/Localizable.strings index fdabca8d8..d1507187b 100644 --- a/DashWallet/pt.lproj/Localizable.strings +++ b/DashWallet/pt.lproj/Localizable.strings @@ -330,7 +330,7 @@ "Enter Operator Public Key" = "Enter Operator Public Key"; /* No comment provided by engineer. */ -"Enter Owner Public Key" = "Enter Owner Public Key"; +"Enter Owner Private Key" = "Enter Owner Private Key"; /* No comment provided by engineer. */ "Enter Payout Address" = "Enter Payout Address"; @@ -569,6 +569,9 @@ /* No comment provided by engineer. */ "Network" = "Rede"; +/* No comment provided by engineer. */ +"Network error" = "Network error"; + /* No comment provided by engineer. */ "Network fee" = "Network fee"; @@ -660,7 +663,7 @@ "Owner Keys" = "Chaves do Proprietário"; /* No comment provided by engineer. */ -"Owner Public Key" = "Owner Public Key"; +"Owner Private Key" = "Owner Private Key"; /* No comment provided by engineer. */ "Paid successfully" = "Paid successfully"; @@ -1082,6 +1085,9 @@ /* No comment provided by engineer. */ "Touch ID spending limit" = "Limite de gastos por Touch ID"; +/* No comment provided by engineer. */ +"Transaction could not be found" = "Transaction could not be found"; + /* No comment provided by engineer. */ "Transaction history" = "Histórico de transação"; @@ -1142,6 +1148,9 @@ /* No comment provided by engineer. */ "Uphold account" = "conta Uphold"; +/* No comment provided by engineer. */ +"Use Wallet" = "Use Wallet"; + /* No comment provided by engineer. */ "Used" = "Used"; @@ -1160,9 +1169,6 @@ /* No comment provided by engineer. */ "Username:" = "Username:"; -/* No comment provided by engineer. */ -"Using Index 0" = "Using Index 0"; - /* No comment provided by engineer. */ "Verified Successfully" = "Verified Successfully"; diff --git a/DashWallet/ru.lproj/Localizable.strings b/DashWallet/ru.lproj/Localizable.strings index 5de44da4a..459302f68 100644 --- a/DashWallet/ru.lproj/Localizable.strings +++ b/DashWallet/ru.lproj/Localizable.strings @@ -330,7 +330,7 @@ "Enter Operator Public Key" = "Enter Operator Public Key"; /* No comment provided by engineer. */ -"Enter Owner Public Key" = "Enter Owner Public Key"; +"Enter Owner Private Key" = "Enter Owner Private Key"; /* No comment provided by engineer. */ "Enter Payout Address" = "Enter Payout Address"; @@ -569,6 +569,9 @@ /* No comment provided by engineer. */ "Network" = "Сеть"; +/* No comment provided by engineer. */ +"Network error" = "Network error"; + /* No comment provided by engineer. */ "Network fee" = "Network fee"; @@ -660,7 +663,7 @@ "Owner Keys" = "Ключи владельца"; /* No comment provided by engineer. */ -"Owner Public Key" = "Owner Public Key"; +"Owner Private Key" = "Owner Private Key"; /* No comment provided by engineer. */ "Paid successfully" = "Paid successfully"; @@ -1082,6 +1085,9 @@ /* No comment provided by engineer. */ "Touch ID spending limit" = "Лимит расходов Touch ID"; +/* No comment provided by engineer. */ +"Transaction could not be found" = "Transaction could not be found"; + /* No comment provided by engineer. */ "Transaction history" = "История транзакций"; @@ -1142,6 +1148,9 @@ /* No comment provided by engineer. */ "Uphold account" = "Учётная запись Uphold"; +/* No comment provided by engineer. */ +"Use Wallet" = "Use Wallet"; + /* No comment provided by engineer. */ "Used" = "Used"; @@ -1160,9 +1169,6 @@ /* No comment provided by engineer. */ "Username:" = "Username:"; -/* No comment provided by engineer. */ -"Using Index 0" = "Using Index 0"; - /* No comment provided by engineer. */ "Verified Successfully" = "Verified Successfully"; diff --git a/DashWallet/sk.lproj/Localizable.strings b/DashWallet/sk.lproj/Localizable.strings index 3b3b35e28..a54c4b7d6 100644 --- a/DashWallet/sk.lproj/Localizable.strings +++ b/DashWallet/sk.lproj/Localizable.strings @@ -330,7 +330,7 @@ "Enter Operator Public Key" = "Enter Operator Public Key"; /* No comment provided by engineer. */ -"Enter Owner Public Key" = "Enter Owner Public Key"; +"Enter Owner Private Key" = "Enter Owner Private Key"; /* No comment provided by engineer. */ "Enter Payout Address" = "Enter Payout Address"; @@ -569,6 +569,9 @@ /* No comment provided by engineer. */ "Network" = "Network"; +/* No comment provided by engineer. */ +"Network error" = "Network error"; + /* No comment provided by engineer. */ "Network fee" = "Network fee"; @@ -660,7 +663,7 @@ "Owner Keys" = "Owner Keys"; /* No comment provided by engineer. */ -"Owner Public Key" = "Owner Public Key"; +"Owner Private Key" = "Owner Private Key"; /* No comment provided by engineer. */ "Paid successfully" = "Paid successfully"; @@ -1082,6 +1085,9 @@ /* No comment provided by engineer. */ "Touch ID spending limit" = "Limit na míňanie cez Touch ID"; +/* No comment provided by engineer. */ +"Transaction could not be found" = "Transaction could not be found"; + /* No comment provided by engineer. */ "Transaction history" = "História transakcií"; @@ -1142,6 +1148,9 @@ /* No comment provided by engineer. */ "Uphold account" = "Uphold account"; +/* No comment provided by engineer. */ +"Use Wallet" = "Use Wallet"; + /* No comment provided by engineer. */ "Used" = "Used"; @@ -1160,9 +1169,6 @@ /* No comment provided by engineer. */ "Username:" = "Username:"; -/* No comment provided by engineer. */ -"Using Index 0" = "Using Index 0"; - /* No comment provided by engineer. */ "Verified Successfully" = "Verified Successfully"; diff --git a/DashWallet/sq.lproj/Localizable.strings b/DashWallet/sq.lproj/Localizable.strings index b079084b6..4bbc2105f 100644 --- a/DashWallet/sq.lproj/Localizable.strings +++ b/DashWallet/sq.lproj/Localizable.strings @@ -330,7 +330,7 @@ "Enter Operator Public Key" = "Enter Operator Public Key"; /* No comment provided by engineer. */ -"Enter Owner Public Key" = "Enter Owner Public Key"; +"Enter Owner Private Key" = "Enter Owner Private Key"; /* No comment provided by engineer. */ "Enter Payout Address" = "Enter Payout Address"; @@ -569,6 +569,9 @@ /* No comment provided by engineer. */ "Network" = "Network"; +/* No comment provided by engineer. */ +"Network error" = "Network error"; + /* No comment provided by engineer. */ "Network fee" = "Network fee"; @@ -660,7 +663,7 @@ "Owner Keys" = "Owner Keys"; /* No comment provided by engineer. */ -"Owner Public Key" = "Owner Public Key"; +"Owner Private Key" = "Owner Private Key"; /* No comment provided by engineer. */ "Paid successfully" = "Paid successfully"; @@ -1082,6 +1085,9 @@ /* No comment provided by engineer. */ "Touch ID spending limit" = "Touch ID spending limit"; +/* No comment provided by engineer. */ +"Transaction could not be found" = "Transaction could not be found"; + /* No comment provided by engineer. */ "Transaction history" = "Transaction history"; @@ -1142,6 +1148,9 @@ /* No comment provided by engineer. */ "Uphold account" = "Uphold account"; +/* No comment provided by engineer. */ +"Use Wallet" = "Use Wallet"; + /* No comment provided by engineer. */ "Used" = "Used"; @@ -1160,9 +1169,6 @@ /* No comment provided by engineer. */ "Username:" = "Username:"; -/* No comment provided by engineer. */ -"Using Index 0" = "Using Index 0"; - /* No comment provided by engineer. */ "Verified Successfully" = "Verified Successfully"; diff --git a/DashWallet/sv.lproj/Localizable.strings b/DashWallet/sv.lproj/Localizable.strings index ca22ff9f8..a6bd41739 100644 --- a/DashWallet/sv.lproj/Localizable.strings +++ b/DashWallet/sv.lproj/Localizable.strings @@ -330,7 +330,7 @@ "Enter Operator Public Key" = "Enter Operator Public Key"; /* No comment provided by engineer. */ -"Enter Owner Public Key" = "Enter Owner Public Key"; +"Enter Owner Private Key" = "Enter Owner Private Key"; /* No comment provided by engineer. */ "Enter Payout Address" = "Enter Payout Address"; @@ -569,6 +569,9 @@ /* No comment provided by engineer. */ "Network" = "Network"; +/* No comment provided by engineer. */ +"Network error" = "Network error"; + /* No comment provided by engineer. */ "Network fee" = "Network fee"; @@ -660,7 +663,7 @@ "Owner Keys" = "Owner Keys"; /* No comment provided by engineer. */ -"Owner Public Key" = "Owner Public Key"; +"Owner Private Key" = "Owner Private Key"; /* No comment provided by engineer. */ "Paid successfully" = "Paid successfully"; @@ -1082,6 +1085,9 @@ /* No comment provided by engineer. */ "Touch ID spending limit" = "Touch ID spending limit"; +/* No comment provided by engineer. */ +"Transaction could not be found" = "Transaction could not be found"; + /* No comment provided by engineer. */ "Transaction history" = "Transaction history"; @@ -1142,6 +1148,9 @@ /* No comment provided by engineer. */ "Uphold account" = "Uphold account"; +/* No comment provided by engineer. */ +"Use Wallet" = "Use Wallet"; + /* No comment provided by engineer. */ "Used" = "Used"; @@ -1160,9 +1169,6 @@ /* No comment provided by engineer. */ "Username:" = "Username:"; -/* No comment provided by engineer. */ -"Using Index 0" = "Using Index 0"; - /* No comment provided by engineer. */ "Verified Successfully" = "Verified Successfully"; diff --git a/DashWallet/th.lproj/Localizable.strings b/DashWallet/th.lproj/Localizable.strings index 4eaf7c5e0..97d6e518b 100644 --- a/DashWallet/th.lproj/Localizable.strings +++ b/DashWallet/th.lproj/Localizable.strings @@ -330,7 +330,7 @@ "Enter Operator Public Key" = "Enter Operator Public Key"; /* No comment provided by engineer. */ -"Enter Owner Public Key" = "Enter Owner Public Key"; +"Enter Owner Private Key" = "Enter Owner Private Key"; /* No comment provided by engineer. */ "Enter Payout Address" = "Enter Payout Address"; @@ -569,6 +569,9 @@ /* No comment provided by engineer. */ "Network" = "เครือข่าย"; +/* No comment provided by engineer. */ +"Network error" = "Network error"; + /* No comment provided by engineer. */ "Network fee" = "Network fee"; @@ -660,7 +663,7 @@ "Owner Keys" = "เจ้าของ Keys"; /* No comment provided by engineer. */ -"Owner Public Key" = "Owner Public Key"; +"Owner Private Key" = "Owner Private Key"; /* No comment provided by engineer. */ "Paid successfully" = "Paid successfully"; @@ -1082,6 +1085,9 @@ /* No comment provided by engineer. */ "Touch ID spending limit" = "จำกัดใช้ Touch ID"; +/* No comment provided by engineer. */ +"Transaction could not be found" = "Transaction could not be found"; + /* No comment provided by engineer. */ "Transaction history" = "ประวัติการทำรายการ"; @@ -1142,6 +1148,9 @@ /* No comment provided by engineer. */ "Uphold account" = "บัญชี Uphold"; +/* No comment provided by engineer. */ +"Use Wallet" = "Use Wallet"; + /* No comment provided by engineer. */ "Used" = "Used"; @@ -1160,9 +1169,6 @@ /* No comment provided by engineer. */ "Username:" = "Username:"; -/* No comment provided by engineer. */ -"Using Index 0" = "Using Index 0"; - /* No comment provided by engineer. */ "Verified Successfully" = "Verified Successfully"; diff --git a/DashWallet/tr.lproj/Localizable.strings b/DashWallet/tr.lproj/Localizable.strings index 8cf92b2cf..63a37c524 100644 --- a/DashWallet/tr.lproj/Localizable.strings +++ b/DashWallet/tr.lproj/Localizable.strings @@ -330,7 +330,7 @@ "Enter Operator Public Key" = "Enter Operator Public Key"; /* No comment provided by engineer. */ -"Enter Owner Public Key" = "Enter Owner Public Key"; +"Enter Owner Private Key" = "Enter Owner Private Key"; /* No comment provided by engineer. */ "Enter Payout Address" = "Enter Payout Address"; @@ -569,6 +569,9 @@ /* No comment provided by engineer. */ "Network" = "Ağ"; +/* No comment provided by engineer. */ +"Network error" = "Network error"; + /* No comment provided by engineer. */ "Network fee" = "Network fee"; @@ -660,7 +663,7 @@ "Owner Keys" = "Sahip Anahtarları"; /* No comment provided by engineer. */ -"Owner Public Key" = "Owner Public Key"; +"Owner Private Key" = "Owner Private Key"; /* No comment provided by engineer. */ "Paid successfully" = "Paid successfully"; @@ -1082,6 +1085,9 @@ /* No comment provided by engineer. */ "Touch ID spending limit" = "Touch ID harcama limiti"; +/* No comment provided by engineer. */ +"Transaction could not be found" = "Transaction could not be found"; + /* No comment provided by engineer. */ "Transaction history" = "İşlem geçmişi"; @@ -1142,6 +1148,9 @@ /* No comment provided by engineer. */ "Uphold account" = "Uphold hesabı"; +/* No comment provided by engineer. */ +"Use Wallet" = "Use Wallet"; + /* No comment provided by engineer. */ "Used" = "Used"; @@ -1160,9 +1169,6 @@ /* No comment provided by engineer. */ "Username:" = "Username:"; -/* No comment provided by engineer. */ -"Using Index 0" = "Using Index 0"; - /* No comment provided by engineer. */ "Verified Successfully" = "Verified Successfully"; diff --git a/DashWallet/vi.lproj/Localizable.strings b/DashWallet/vi.lproj/Localizable.strings index 17c427dd2..e62955879 100644 --- a/DashWallet/vi.lproj/Localizable.strings +++ b/DashWallet/vi.lproj/Localizable.strings @@ -330,7 +330,7 @@ "Enter Operator Public Key" = "Enter Operator Public Key"; /* No comment provided by engineer. */ -"Enter Owner Public Key" = "Enter Owner Public Key"; +"Enter Owner Private Key" = "Enter Owner Private Key"; /* No comment provided by engineer. */ "Enter Payout Address" = "Enter Payout Address"; @@ -569,6 +569,9 @@ /* No comment provided by engineer. */ "Network" = "Mạng"; +/* No comment provided by engineer. */ +"Network error" = "Network error"; + /* No comment provided by engineer. */ "Network fee" = "Network fee"; @@ -660,7 +663,7 @@ "Owner Keys" = "Khoá của chủ sở hữu"; /* No comment provided by engineer. */ -"Owner Public Key" = "Owner Public Key"; +"Owner Private Key" = "Owner Private Key"; /* No comment provided by engineer. */ "Paid successfully" = "Paid successfully"; @@ -1082,6 +1085,9 @@ /* No comment provided by engineer. */ "Touch ID spending limit" = "Giới hạn chi tiêu với Touch ID"; +/* No comment provided by engineer. */ +"Transaction could not be found" = "Transaction could not be found"; + /* No comment provided by engineer. */ "Transaction history" = "Lịch sử giao dịch"; @@ -1142,6 +1148,9 @@ /* No comment provided by engineer. */ "Uphold account" = "Tài khoản Uphold"; +/* No comment provided by engineer. */ +"Use Wallet" = "Use Wallet"; + /* No comment provided by engineer. */ "Used" = "Used"; @@ -1160,9 +1169,6 @@ /* No comment provided by engineer. */ "Username:" = "Username:"; -/* No comment provided by engineer. */ -"Using Index 0" = "Using Index 0"; - /* No comment provided by engineer. */ "Verified Successfully" = "Verified Successfully"; diff --git a/DashWallet/zh-Hans.lproj/Localizable.strings b/DashWallet/zh-Hans.lproj/Localizable.strings index 0ead89cb7..86ff06aae 100644 --- a/DashWallet/zh-Hans.lproj/Localizable.strings +++ b/DashWallet/zh-Hans.lproj/Localizable.strings @@ -330,7 +330,7 @@ "Enter Operator Public Key" = "Enter Operator Public Key"; /* No comment provided by engineer. */ -"Enter Owner Public Key" = "Enter Owner Public Key"; +"Enter Owner Private Key" = "Enter Owner Private Key"; /* No comment provided by engineer. */ "Enter Payout Address" = "Enter Payout Address"; @@ -569,6 +569,9 @@ /* No comment provided by engineer. */ "Network" = "Network"; +/* No comment provided by engineer. */ +"Network error" = "Network error"; + /* No comment provided by engineer. */ "Network fee" = "Network fee"; @@ -660,7 +663,7 @@ "Owner Keys" = "Owner Keys"; /* No comment provided by engineer. */ -"Owner Public Key" = "Owner Public Key"; +"Owner Private Key" = "Owner Private Key"; /* No comment provided by engineer. */ "Paid successfully" = "Paid successfully"; @@ -1082,6 +1085,9 @@ /* No comment provided by engineer. */ "Touch ID spending limit" = "触控 ID 支出限额"; +/* No comment provided by engineer. */ +"Transaction could not be found" = "Transaction could not be found"; + /* No comment provided by engineer. */ "Transaction history" = "交易历史记录"; @@ -1142,6 +1148,9 @@ /* No comment provided by engineer. */ "Uphold account" = "Uphold account"; +/* No comment provided by engineer. */ +"Use Wallet" = "Use Wallet"; + /* No comment provided by engineer. */ "Used" = "Used"; @@ -1160,9 +1169,6 @@ /* No comment provided by engineer. */ "Username:" = "Username:"; -/* No comment provided by engineer. */ -"Using Index 0" = "Using Index 0"; - /* No comment provided by engineer. */ "Verified Successfully" = "Verified Successfully"; diff --git a/DashWallet/zh-Hant-TW.lproj/Localizable.strings b/DashWallet/zh-Hant-TW.lproj/Localizable.strings index c95ca2df9..b172cc16c 100644 --- a/DashWallet/zh-Hant-TW.lproj/Localizable.strings +++ b/DashWallet/zh-Hant-TW.lproj/Localizable.strings @@ -330,7 +330,7 @@ "Enter Operator Public Key" = "Enter Operator Public Key"; /* No comment provided by engineer. */ -"Enter Owner Public Key" = "Enter Owner Public Key"; +"Enter Owner Private Key" = "Enter Owner Private Key"; /* No comment provided by engineer. */ "Enter Payout Address" = "Enter Payout Address"; @@ -569,6 +569,9 @@ /* No comment provided by engineer. */ "Network" = "Network"; +/* No comment provided by engineer. */ +"Network error" = "Network error"; + /* No comment provided by engineer. */ "Network fee" = "Network fee"; @@ -660,7 +663,7 @@ "Owner Keys" = "Owner Keys"; /* No comment provided by engineer. */ -"Owner Public Key" = "Owner Public Key"; +"Owner Private Key" = "Owner Private Key"; /* No comment provided by engineer. */ "Paid successfully" = "Paid successfully"; @@ -1082,6 +1085,9 @@ /* No comment provided by engineer. */ "Touch ID spending limit" = "Touch ID 的支付上限"; +/* No comment provided by engineer. */ +"Transaction could not be found" = "Transaction could not be found"; + /* No comment provided by engineer. */ "Transaction history" = "交易歷史記錄"; @@ -1142,6 +1148,9 @@ /* No comment provided by engineer. */ "Uphold account" = "Uphold account"; +/* No comment provided by engineer. */ +"Use Wallet" = "Use Wallet"; + /* No comment provided by engineer. */ "Used" = "Used"; @@ -1160,9 +1169,6 @@ /* No comment provided by engineer. */ "Username:" = "Username:"; -/* No comment provided by engineer. */ -"Using Index 0" = "Using Index 0"; - /* No comment provided by engineer. */ "Verified Successfully" = "Verified Successfully"; From 1971c22ca9a5c58eca607a44941dd3c927eceb30 Mon Sep 17 00:00:00 2001 From: Quantum Explorer Date: Mon, 11 Nov 2019 18:13:04 +0800 Subject: [PATCH 20/34] more signing screen --- .../DWRegisterMasternodeViewController.m | 14 +++-- .../Models/DWMasternodeRegistrationModel.m | 13 ++++- .../DWSignPayloadViewController.m | 14 ++--- .../Payload Signing/Views/DWSignPayloadView.h | 6 +++ .../Payload Signing/Views/DWSignPayloadView.m | 51 ++++++++++++++++--- DashWallet/ar.lproj/Localizable.strings | 8 ++- DashWallet/bg.lproj/Localizable.strings | 8 ++- DashWallet/de.lproj/Localizable.strings | 8 ++- DashWallet/el.lproj/Localizable.strings | 8 ++- DashWallet/en.lproj/Localizable.strings | 8 ++- DashWallet/es.lproj/Localizable.strings | 8 ++- DashWallet/fr.lproj/Localizable.strings | 8 ++- DashWallet/id.lproj/Localizable.strings | 8 ++- DashWallet/it.lproj/Localizable.strings | 8 ++- DashWallet/ja.lproj/Localizable.strings | 8 ++- DashWallet/ko.lproj/Localizable.strings | 8 ++- DashWallet/nb.lproj/Localizable.strings | 8 ++- DashWallet/nl.lproj/Localizable.strings | 8 ++- DashWallet/pl.lproj/Localizable.strings | 8 ++- DashWallet/pt.lproj/Localizable.strings | 8 ++- DashWallet/ru.lproj/Localizable.strings | 8 ++- DashWallet/sk.lproj/Localizable.strings | 8 ++- DashWallet/sq.lproj/Localizable.strings | 8 ++- DashWallet/sv.lproj/Localizable.strings | 8 ++- DashWallet/th.lproj/Localizable.strings | 8 ++- DashWallet/tr.lproj/Localizable.strings | 8 ++- DashWallet/vi.lproj/Localizable.strings | 8 ++- DashWallet/zh-Hans.lproj/Localizable.strings | 8 ++- .../zh-Hant-TW.lproj/Localizable.strings | 8 ++- 29 files changed, 242 insertions(+), 48 deletions(-) diff --git a/DashWallet/Sources/UI/Menu/Tools/Masternode/Masternode Registration/DWRegisterMasternodeViewController.m b/DashWallet/Sources/UI/Menu/Tools/Masternode/Masternode Registration/DWRegisterMasternodeViewController.m index de60ad9d4..b3ec7bcd1 100644 --- a/DashWallet/Sources/UI/Menu/Tools/Masternode/Masternode Registration/DWRegisterMasternodeViewController.m +++ b/DashWallet/Sources/UI/Menu/Tools/Masternode/Masternode Registration/DWRegisterMasternodeViewController.m @@ -391,19 +391,17 @@ - (void)raiseIssue:(NSString *)issue message:(NSString *)message { - (void)showPayloadSigning { DWSignPayloadModel *signPayloadModel = [[DWSignPayloadModel alloc] initForCollateralAddress:self.model.collateralTransaction.outputAddresses[self.model.providerRegistrationTransaction.collateralOutpoint.n] withPayloadCollateralString:self.model.providerRegistrationTransaction.payloadCollateralString]; - DWSignPayloadViewController *signPayloadViewController = [[DWSignPayloadViewController alloc] init]; - signPayloadViewController.collateralAddress = - signPayloadViewController.providerRegistrationTransaction = ; + DWSignPayloadViewController *signPayloadViewController = [[DWSignPayloadViewController alloc] initWithModel:signPayloadModel]; signPayloadViewController.delegate = self; [self.navigationController pushViewController:signPayloadViewController animated:YES]; } - (void)viewController:(nonnull UIViewController *)controller didReturnSignature:(nonnull NSData *)signature { - self.providerRegistrationTransaction.payloadSignature = signature; - [self.model signTransactionInputs:self.providerRegistrationTransaction - completion:^(NSError *_Nonnull error){ - - }]; + // self.providerRegistrationTransaction.payloadSignature = signature; + // [self.model signTransactionInputs:self.providerRegistrationTransaction + // completion:^(NSError *_Nonnull error){ + // + // }]; } diff --git a/DashWallet/Sources/UI/Menu/Tools/Masternode/Masternode Registration/Models/DWMasternodeRegistrationModel.m b/DashWallet/Sources/UI/Menu/Tools/Masternode/Masternode Registration/Models/DWMasternodeRegistrationModel.m index a84c6ad9a..97dcaa5ad 100644 --- a/DashWallet/Sources/UI/Menu/Tools/Masternode/Masternode Registration/Models/DWMasternodeRegistrationModel.m +++ b/DashWallet/Sources/UI/Menu/Tools/Masternode/Masternode Registration/Models/DWMasternodeRegistrationModel.m @@ -139,15 +139,26 @@ - (void)lookupIndexesForCollateralHash:(UInt256)collateralHash completion:(void } - (void)findCollateralTransactionWithCompletion:(void (^_Nullable)(NSError *error))completion { + if (self.collateralTransaction) { + if (completion) { + completion(nil); + } + return; + } if (!dsutxo_is_zero(self.collateral)) { [self lookupIndexesForCollateralHash:self.collateral.hash completion:^(DSTransaction *_Nonnull transaction, NSIndexSet *_Nonnull indexSet, NSError *_Nonnull error) { if (error) { - completion(error); + if (completion) { + completion(error); + } return; } if ([indexSet containsIndex:self.collateral.n]) { self.collateralTransaction = transaction; + if (completion) { + completion(nil); + } } else { if (completion) { diff --git a/DashWallet/Sources/UI/Menu/Tools/Masternode/Payload Signing/DWSignPayloadViewController.m b/DashWallet/Sources/UI/Menu/Tools/Masternode/Payload Signing/DWSignPayloadViewController.m index 312daf1c2..9aad4d85a 100644 --- a/DashWallet/Sources/UI/Menu/Tools/Masternode/Payload Signing/DWSignPayloadViewController.m +++ b/DashWallet/Sources/UI/Menu/Tools/Masternode/Payload Signing/DWSignPayloadViewController.m @@ -11,6 +11,7 @@ #import "DSECDSAKey.h" #import "DSProviderRegistrationTransaction.h" #import "DSWallet.h" +#import "DWSignPayloadView.h" #import "NSData+Bitcoin.h" #import "NSMutableData+Dash.h" #import "NSString+Dash.h" @@ -21,22 +22,17 @@ @interface DWSignPayloadViewController () @property (strong, nonatomic) IBOutlet UIButton *signButton; @property (nonatomic, strong) DWSignPayloadModel *model; +@property (nonatomic, strong) DWSignPayloadView *contentView; @end @implementation DWSignPayloadViewController -//- (instancetype)initWithNibName:(nullable NSString *)nibNameOrNil bundle:(nullable NSBundle *)nibBundleOrNil { -// if (self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil]) { -// self.title = NSLocalizedString(@"External Sign", nil); -// self.hidesBottomBarWhenPushed = YES; -// } -// return self; -//} - (instancetype)initWithModel:(DWSignPayloadModel *)model { self = [super initWithNibName:nil bundle:nil]; if (self) { + self.hidesBottomBarWhenPushed = YES; _model = model; } return self; @@ -63,9 +59,9 @@ - (void)setupView { NSParameterAssert(self.model); - DWSignPayloadView *contentView = [[DWSignPayloadView alloc] initWithModel:self.model]; + DWSignPayloadView *contentView = [[DWSignPayloadView alloc] initWithFrame:CGRectZero]; + contentView.model = self.model; contentView.translatesAutoresizingMaskIntoConstraints = NO; - contentView.delegate = self; [self setupContentView:contentView]; self.contentView = contentView; } diff --git a/DashWallet/Sources/UI/Menu/Tools/Masternode/Payload Signing/Views/DWSignPayloadView.h b/DashWallet/Sources/UI/Menu/Tools/Masternode/Payload Signing/Views/DWSignPayloadView.h index c4b717970..b2cc51d56 100644 --- a/DashWallet/Sources/UI/Menu/Tools/Masternode/Payload Signing/Views/DWSignPayloadView.h +++ b/DashWallet/Sources/UI/Menu/Tools/Masternode/Payload Signing/Views/DWSignPayloadView.h @@ -15,12 +15,18 @@ // limitations under the License. // +#import "DWSignPayloadModel.h" #import NS_ASSUME_NONNULL_BEGIN @interface DWSignPayloadView : UIView +@property (nullable, nonatomic, strong) DWSignPayloadModel *model; + +- (nullable instancetype)initWithCoder:(NSCoder *)aDecoder NS_UNAVAILABLE; +- (instancetype)init NS_UNAVAILABLE; + @end NS_ASSUME_NONNULL_END diff --git a/DashWallet/Sources/UI/Menu/Tools/Masternode/Payload Signing/Views/DWSignPayloadView.m b/DashWallet/Sources/UI/Menu/Tools/Masternode/Payload Signing/Views/DWSignPayloadView.m index 325ccd781..d01132da0 100644 --- a/DashWallet/Sources/UI/Menu/Tools/Masternode/Payload Signing/Views/DWSignPayloadView.m +++ b/DashWallet/Sources/UI/Menu/Tools/Masternode/Payload Signing/Views/DWSignPayloadView.m @@ -16,15 +16,54 @@ // #import "DWSignPayloadView.h" +#import "DWUIKit.h" + +CGFloat const DW_SIGNED_PAYLOAD_TOP_PADDING = 12.0; +CGFloat const DW_SIGNED_PAYLOAD_INTER_PADDING = 12.0; +CGFloat const DW_SIGNED_PAYLOAD_BOTTOM_PADDING = 12.0; + +@interface DWSignPayloadView () + +@property (nonatomic, strong) UITextView *messageToSignTextView; +@property (nonatomic, strong) UITextView *signedMessageInputTextView; + +@end + @implementation DWSignPayloadView -/* -// Only override drawRect: if you perform custom drawing. -// An empty implementation adversely affects performance during animation. -- (void)drawRect:(CGRect)rect { - // Drawing code + +- (instancetype)initWithFrame:(CGRect)frame { + self = [super initWithFrame:frame]; + if (self) { + self.backgroundColor = [UIColor dw_backgroundColor]; + UITextView *messageToSignTextView = [[UITextView alloc] initWithFrame:CGRectZero]; + messageToSignTextView.translatesAutoresizingMaskIntoConstraints = NO; + [self addSubview:messageToSignTextView]; + _messageToSignTextView = messageToSignTextView; + + UITextView *signedMessageInputTextView = [[UITextView alloc] initWithFrame:CGRectZero]; + signedMessageInputTextView.translatesAutoresizingMaskIntoConstraints = NO; + [self addSubview:signedMessageInputTextView]; + _signedMessageInputTextView = signedMessageInputTextView; + + [NSLayoutConstraint activateConstraints:@[ + [messageToSignTextView.topAnchor constraintEqualToAnchor:self.topAnchor + constant:DW_SIGNED_PAYLOAD_TOP_PADDING], + [messageToSignTextView.leadingAnchor constraintEqualToAnchor:self.leadingAnchor], + [messageToSignTextView.trailingAnchor constraintEqualToAnchor:self.trailingAnchor], + + [messageToSignTextView.heightAnchor constraintEqualToAnchor:signedMessageInputTextView.heightAnchor multiplier:0.67 constant:0], + + [signedMessageInputTextView.topAnchor constraintEqualToAnchor:messageToSignTextView.bottomAnchor + constant:DW_SIGNED_PAYLOAD_INTER_PADDING], + [signedMessageInputTextView.leadingAnchor constraintEqualToAnchor:self.leadingAnchor], + [signedMessageInputTextView.trailingAnchor constraintEqualToAnchor:self.trailingAnchor], + [signedMessageInputTextView.bottomAnchor constraintEqualToAnchor:self.bottomAnchor + constant:-DW_SIGNED_PAYLOAD_BOTTOM_PADDING], + ]]; + } + return self; } -*/ @end diff --git a/DashWallet/ar.lproj/Localizable.strings b/DashWallet/ar.lproj/Localizable.strings index d80fd9ce4..6ae555597 100644 --- a/DashWallet/ar.lproj/Localizable.strings +++ b/DashWallet/ar.lproj/Localizable.strings @@ -362,6 +362,9 @@ /* No comment provided by engineer. */ "Exit" = "Exit"; +/* No comment provided by engineer. */ +"External Sign" = "External Sign"; + /* No comment provided by engineer. */ "Face ID limit" = "محدد وجه التعريف"; @@ -441,7 +444,7 @@ "Incase if this device is lost / damaged, incase if the dash wallet is uninstalled accidently from this device, you will need this recovery phrase to access your funds." = "Incase if this device is lost / damaged, incase if the dash wallet is uninstalled accidently from this device, you will need this recovery phrase to access your funds."; /* No comment provided by engineer. */ -"Incorrect collateral index" = "Incorrect collateral index"; +"Incorrect collateral" = "Incorrect collateral"; /* No comment provided by engineer. */ "Insufficient Funds" = "Insufficient Funds"; @@ -1178,6 +1181,9 @@ /* No comment provided by engineer. */ "Verify" = "Verify"; +/* No comment provided by engineer. */ +"Verify Signature" = "Verify Signature"; + /* No comment provided by engineer. */ "verifying quorum" = "verifying quorum"; diff --git a/DashWallet/bg.lproj/Localizable.strings b/DashWallet/bg.lproj/Localizable.strings index 9c6b480e0..850e75ca1 100644 --- a/DashWallet/bg.lproj/Localizable.strings +++ b/DashWallet/bg.lproj/Localizable.strings @@ -362,6 +362,9 @@ /* No comment provided by engineer. */ "Exit" = "Exit"; +/* No comment provided by engineer. */ +"External Sign" = "External Sign"; + /* No comment provided by engineer. */ "Face ID limit" = "Лимит на лицева идентификация"; @@ -441,7 +444,7 @@ "Incase if this device is lost / damaged, incase if the dash wallet is uninstalled accidently from this device, you will need this recovery phrase to access your funds." = "Incase if this device is lost / damaged, incase if the dash wallet is uninstalled accidently from this device, you will need this recovery phrase to access your funds."; /* No comment provided by engineer. */ -"Incorrect collateral index" = "Incorrect collateral index"; +"Incorrect collateral" = "Incorrect collateral"; /* No comment provided by engineer. */ "Insufficient Funds" = "Недостатъчни средства"; @@ -1178,6 +1181,9 @@ /* No comment provided by engineer. */ "Verify" = "Verify"; +/* No comment provided by engineer. */ +"Verify Signature" = "Verify Signature"; + /* No comment provided by engineer. */ "verifying quorum" = "проверка на кворума"; diff --git a/DashWallet/de.lproj/Localizable.strings b/DashWallet/de.lproj/Localizable.strings index 98b995b9f..5edb0ea98 100644 --- a/DashWallet/de.lproj/Localizable.strings +++ b/DashWallet/de.lproj/Localizable.strings @@ -362,6 +362,9 @@ /* No comment provided by engineer. */ "Exit" = "Exit"; +/* No comment provided by engineer. */ +"External Sign" = "External Sign"; + /* No comment provided by engineer. */ "Face ID limit" = "Face-ID Limit"; @@ -441,7 +444,7 @@ "Incase if this device is lost / damaged, incase if the dash wallet is uninstalled accidently from this device, you will need this recovery phrase to access your funds." = "Incase if this device is lost / damaged, incase if the dash wallet is uninstalled accidently from this device, you will need this recovery phrase to access your funds."; /* No comment provided by engineer. */ -"Incorrect collateral index" = "Incorrect collateral index"; +"Incorrect collateral" = "Incorrect collateral"; /* No comment provided by engineer. */ "Insufficient Funds" = "Guthaben nicht ausreichend"; @@ -1178,6 +1181,9 @@ /* No comment provided by engineer. */ "Verify" = "Verify"; +/* No comment provided by engineer. */ +"Verify Signature" = "Verify Signature"; + /* No comment provided by engineer. */ "verifying quorum" = "prüfe Quorum"; diff --git a/DashWallet/el.lproj/Localizable.strings b/DashWallet/el.lproj/Localizable.strings index e4b9bf62a..b6276d79d 100644 --- a/DashWallet/el.lproj/Localizable.strings +++ b/DashWallet/el.lproj/Localizable.strings @@ -362,6 +362,9 @@ /* No comment provided by engineer. */ "Exit" = "Exit"; +/* No comment provided by engineer. */ +"External Sign" = "External Sign"; + /* No comment provided by engineer. */ "Face ID limit" = "Face ID limit"; @@ -441,7 +444,7 @@ "Incase if this device is lost / damaged, incase if the dash wallet is uninstalled accidently from this device, you will need this recovery phrase to access your funds." = "Incase if this device is lost / damaged, incase if the dash wallet is uninstalled accidently from this device, you will need this recovery phrase to access your funds."; /* No comment provided by engineer. */ -"Incorrect collateral index" = "Incorrect collateral index"; +"Incorrect collateral" = "Incorrect collateral"; /* No comment provided by engineer. */ "Insufficient Funds" = "Insufficient Funds"; @@ -1178,6 +1181,9 @@ /* No comment provided by engineer. */ "Verify" = "Verify"; +/* No comment provided by engineer. */ +"Verify Signature" = "Verify Signature"; + /* No comment provided by engineer. */ "verifying quorum" = "verifying quorum"; diff --git a/DashWallet/en.lproj/Localizable.strings b/DashWallet/en.lproj/Localizable.strings index da59f9f87..b8595a361 100644 --- a/DashWallet/en.lproj/Localizable.strings +++ b/DashWallet/en.lproj/Localizable.strings @@ -362,6 +362,9 @@ /* No comment provided by engineer. */ "Exit" = "Exit"; +/* No comment provided by engineer. */ +"External Sign" = "External Sign"; + /* No comment provided by engineer. */ "Face ID limit" = "Face ID limit"; @@ -441,7 +444,7 @@ "Incase if this device is lost / damaged, incase if the dash wallet is uninstalled accidently from this device, you will need this recovery phrase to access your funds." = "Incase if this device is lost / damaged, incase if the dash wallet is uninstalled accidently from this device, you will need this recovery phrase to access your funds."; /* No comment provided by engineer. */ -"Incorrect collateral index" = "Incorrect collateral index"; +"Incorrect collateral" = "Incorrect collateral"; /* No comment provided by engineer. */ "Insufficient Funds" = "Insufficient Funds"; @@ -1178,6 +1181,9 @@ /* No comment provided by engineer. */ "Verify" = "Verify"; +/* No comment provided by engineer. */ +"Verify Signature" = "Verify Signature"; + /* No comment provided by engineer. */ "verifying quorum" = "verifying quorum"; diff --git a/DashWallet/es.lproj/Localizable.strings b/DashWallet/es.lproj/Localizable.strings index 4e9c69aac..1d3dfe82b 100644 --- a/DashWallet/es.lproj/Localizable.strings +++ b/DashWallet/es.lproj/Localizable.strings @@ -362,6 +362,9 @@ /* No comment provided by engineer. */ "Exit" = "Exit"; +/* No comment provided by engineer. */ +"External Sign" = "External Sign"; + /* No comment provided by engineer. */ "Face ID limit" = "Límite de Face ID"; @@ -441,7 +444,7 @@ "Incase if this device is lost / damaged, incase if the dash wallet is uninstalled accidently from this device, you will need this recovery phrase to access your funds." = "Incase if this device is lost / damaged, incase if the dash wallet is uninstalled accidently from this device, you will need this recovery phrase to access your funds."; /* No comment provided by engineer. */ -"Incorrect collateral index" = "Incorrect collateral index"; +"Incorrect collateral" = "Incorrect collateral"; /* No comment provided by engineer. */ "Insufficient Funds" = "Fondos insuficientes"; @@ -1178,6 +1181,9 @@ /* No comment provided by engineer. */ "Verify" = "Verify"; +/* No comment provided by engineer. */ +"Verify Signature" = "Verify Signature"; + /* No comment provided by engineer. */ "verifying quorum" = "verificando quorum"; diff --git a/DashWallet/fr.lproj/Localizable.strings b/DashWallet/fr.lproj/Localizable.strings index db70f6967..973491878 100644 --- a/DashWallet/fr.lproj/Localizable.strings +++ b/DashWallet/fr.lproj/Localizable.strings @@ -362,6 +362,9 @@ /* No comment provided by engineer. */ "Exit" = "Exit"; +/* No comment provided by engineer. */ +"External Sign" = "External Sign"; + /* No comment provided by engineer. */ "Face ID limit" = "Limite pour FaceID"; @@ -441,7 +444,7 @@ "Incase if this device is lost / damaged, incase if the dash wallet is uninstalled accidently from this device, you will need this recovery phrase to access your funds." = "Incase if this device is lost / damaged, incase if the dash wallet is uninstalled accidently from this device, you will need this recovery phrase to access your funds."; /* No comment provided by engineer. */ -"Incorrect collateral index" = "Incorrect collateral index"; +"Incorrect collateral" = "Incorrect collateral"; /* No comment provided by engineer. */ "Insufficient Funds" = "Fonds insuffisants"; @@ -1178,6 +1181,9 @@ /* No comment provided by engineer. */ "Verify" = "Verify"; +/* No comment provided by engineer. */ +"Verify Signature" = "Verify Signature"; + /* No comment provided by engineer. */ "verifying quorum" = "quorum de vérification"; diff --git a/DashWallet/id.lproj/Localizable.strings b/DashWallet/id.lproj/Localizable.strings index dc77918b2..7d1761d2c 100644 --- a/DashWallet/id.lproj/Localizable.strings +++ b/DashWallet/id.lproj/Localizable.strings @@ -362,6 +362,9 @@ /* No comment provided by engineer. */ "Exit" = "Exit"; +/* No comment provided by engineer. */ +"External Sign" = "External Sign"; + /* No comment provided by engineer. */ "Face ID limit" = "Identitas wajah terbatas"; @@ -441,7 +444,7 @@ "Incase if this device is lost / damaged, incase if the dash wallet is uninstalled accidently from this device, you will need this recovery phrase to access your funds." = "Incase if this device is lost / damaged, incase if the dash wallet is uninstalled accidently from this device, you will need this recovery phrase to access your funds."; /* No comment provided by engineer. */ -"Incorrect collateral index" = "Incorrect collateral index"; +"Incorrect collateral" = "Incorrect collateral"; /* No comment provided by engineer. */ "Insufficient Funds" = "Dana tidak mencukupi"; @@ -1178,6 +1181,9 @@ /* No comment provided by engineer. */ "Verify" = "Verify"; +/* No comment provided by engineer. */ +"Verify Signature" = "Verify Signature"; + /* No comment provided by engineer. */ "verifying quorum" = "memverifikasi kuorum"; diff --git a/DashWallet/it.lproj/Localizable.strings b/DashWallet/it.lproj/Localizable.strings index 4c4527588..a9a8ba521 100644 --- a/DashWallet/it.lproj/Localizable.strings +++ b/DashWallet/it.lproj/Localizable.strings @@ -362,6 +362,9 @@ /* No comment provided by engineer. */ "Exit" = "Exit"; +/* No comment provided by engineer. */ +"External Sign" = "External Sign"; + /* No comment provided by engineer. */ "Face ID limit" = "Limite \"Face ID\""; @@ -441,7 +444,7 @@ "Incase if this device is lost / damaged, incase if the dash wallet is uninstalled accidently from this device, you will need this recovery phrase to access your funds." = "Incase if this device is lost / damaged, incase if the dash wallet is uninstalled accidently from this device, you will need this recovery phrase to access your funds."; /* No comment provided by engineer. */ -"Incorrect collateral index" = "Incorrect collateral index"; +"Incorrect collateral" = "Incorrect collateral"; /* No comment provided by engineer. */ "Insufficient Funds" = "Fondi insufficenti"; @@ -1178,6 +1181,9 @@ /* No comment provided by engineer. */ "Verify" = "Verify"; +/* No comment provided by engineer. */ +"Verify Signature" = "Verify Signature"; + /* No comment provided by engineer. */ "verifying quorum" = "verifica del quorum"; diff --git a/DashWallet/ja.lproj/Localizable.strings b/DashWallet/ja.lproj/Localizable.strings index 3cd3acca3..3bd91bd80 100644 --- a/DashWallet/ja.lproj/Localizable.strings +++ b/DashWallet/ja.lproj/Localizable.strings @@ -362,6 +362,9 @@ /* No comment provided by engineer. */ "Exit" = "Exit"; +/* No comment provided by engineer. */ +"External Sign" = "External Sign"; + /* No comment provided by engineer. */ "Face ID limit" = "Face IDの送金可能額"; @@ -441,7 +444,7 @@ "Incase if this device is lost / damaged, incase if the dash wallet is uninstalled accidently from this device, you will need this recovery phrase to access your funds." = "Incase if this device is lost / damaged, incase if the dash wallet is uninstalled accidently from this device, you will need this recovery phrase to access your funds."; /* No comment provided by engineer. */ -"Incorrect collateral index" = "Incorrect collateral index"; +"Incorrect collateral" = "Incorrect collateral"; /* No comment provided by engineer. */ "Insufficient Funds" = "資金不足"; @@ -1178,6 +1181,9 @@ /* No comment provided by engineer. */ "Verify" = "Verify"; +/* No comment provided by engineer. */ +"Verify Signature" = "Verify Signature"; + /* No comment provided by engineer. */ "verifying quorum" = "クォーラムを検証中"; diff --git a/DashWallet/ko.lproj/Localizable.strings b/DashWallet/ko.lproj/Localizable.strings index a8e2e9cc4..38c9be8d0 100644 --- a/DashWallet/ko.lproj/Localizable.strings +++ b/DashWallet/ko.lproj/Localizable.strings @@ -362,6 +362,9 @@ /* No comment provided by engineer. */ "Exit" = "Exit"; +/* No comment provided by engineer. */ +"External Sign" = "External Sign"; + /* No comment provided by engineer. */ "Face ID limit" = "Face ID 제한"; @@ -441,7 +444,7 @@ "Incase if this device is lost / damaged, incase if the dash wallet is uninstalled accidently from this device, you will need this recovery phrase to access your funds." = "Incase if this device is lost / damaged, incase if the dash wallet is uninstalled accidently from this device, you will need this recovery phrase to access your funds."; /* No comment provided by engineer. */ -"Incorrect collateral index" = "Incorrect collateral index"; +"Incorrect collateral" = "Incorrect collateral"; /* No comment provided by engineer. */ "Insufficient Funds" = "잔액 부족"; @@ -1178,6 +1181,9 @@ /* No comment provided by engineer. */ "Verify" = "Verify"; +/* No comment provided by engineer. */ +"Verify Signature" = "Verify Signature"; + /* No comment provided by engineer. */ "verifying quorum" = "쿼럼 확인 중"; diff --git a/DashWallet/nb.lproj/Localizable.strings b/DashWallet/nb.lproj/Localizable.strings index b367e8386..b471f217a 100644 --- a/DashWallet/nb.lproj/Localizable.strings +++ b/DashWallet/nb.lproj/Localizable.strings @@ -362,6 +362,9 @@ /* No comment provided by engineer. */ "Exit" = "Exit"; +/* No comment provided by engineer. */ +"External Sign" = "External Sign"; + /* No comment provided by engineer. */ "Face ID limit" = "Face ID limit"; @@ -441,7 +444,7 @@ "Incase if this device is lost / damaged, incase if the dash wallet is uninstalled accidently from this device, you will need this recovery phrase to access your funds." = "Incase if this device is lost / damaged, incase if the dash wallet is uninstalled accidently from this device, you will need this recovery phrase to access your funds."; /* No comment provided by engineer. */ -"Incorrect collateral index" = "Incorrect collateral index"; +"Incorrect collateral" = "Incorrect collateral"; /* No comment provided by engineer. */ "Insufficient Funds" = "Insufficient Funds"; @@ -1178,6 +1181,9 @@ /* No comment provided by engineer. */ "Verify" = "Verify"; +/* No comment provided by engineer. */ +"Verify Signature" = "Verify Signature"; + /* No comment provided by engineer. */ "verifying quorum" = "verifying quorum"; diff --git a/DashWallet/nl.lproj/Localizable.strings b/DashWallet/nl.lproj/Localizable.strings index 5601c5538..9366e6e97 100644 --- a/DashWallet/nl.lproj/Localizable.strings +++ b/DashWallet/nl.lproj/Localizable.strings @@ -362,6 +362,9 @@ /* No comment provided by engineer. */ "Exit" = "Exit"; +/* No comment provided by engineer. */ +"External Sign" = "External Sign"; + /* No comment provided by engineer. */ "Face ID limit" = "Face ID limiet"; @@ -441,7 +444,7 @@ "Incase if this device is lost / damaged, incase if the dash wallet is uninstalled accidently from this device, you will need this recovery phrase to access your funds." = "Incase if this device is lost / damaged, incase if the dash wallet is uninstalled accidently from this device, you will need this recovery phrase to access your funds."; /* No comment provided by engineer. */ -"Incorrect collateral index" = "Incorrect collateral index"; +"Incorrect collateral" = "Incorrect collateral"; /* No comment provided by engineer. */ "Insufficient Funds" = "Saldo niet toereikend"; @@ -1178,6 +1181,9 @@ /* No comment provided by engineer. */ "Verify" = "Verify"; +/* No comment provided by engineer. */ +"Verify Signature" = "Verify Signature"; + /* No comment provided by engineer. */ "verifying quorum" = "quorum aan het verifiëren"; diff --git a/DashWallet/pl.lproj/Localizable.strings b/DashWallet/pl.lproj/Localizable.strings index 0e5518ec1..585b6454c 100644 --- a/DashWallet/pl.lproj/Localizable.strings +++ b/DashWallet/pl.lproj/Localizable.strings @@ -362,6 +362,9 @@ /* No comment provided by engineer. */ "Exit" = "Exit"; +/* No comment provided by engineer. */ +"External Sign" = "External Sign"; + /* No comment provided by engineer. */ "Face ID limit" = "Limit identyfikacji twarzy"; @@ -441,7 +444,7 @@ "Incase if this device is lost / damaged, incase if the dash wallet is uninstalled accidently from this device, you will need this recovery phrase to access your funds." = "Incase if this device is lost / damaged, incase if the dash wallet is uninstalled accidently from this device, you will need this recovery phrase to access your funds."; /* No comment provided by engineer. */ -"Incorrect collateral index" = "Incorrect collateral index"; +"Incorrect collateral" = "Incorrect collateral"; /* No comment provided by engineer. */ "Insufficient Funds" = "Niewystarczająca ilość środków"; @@ -1178,6 +1181,9 @@ /* No comment provided by engineer. */ "Verify" = "Verify"; +/* No comment provided by engineer. */ +"Verify Signature" = "Verify Signature"; + /* No comment provided by engineer. */ "verifying quorum" = "weryfikacja kworum"; diff --git a/DashWallet/pt.lproj/Localizable.strings b/DashWallet/pt.lproj/Localizable.strings index d1507187b..e6ecdeab6 100644 --- a/DashWallet/pt.lproj/Localizable.strings +++ b/DashWallet/pt.lproj/Localizable.strings @@ -362,6 +362,9 @@ /* No comment provided by engineer. */ "Exit" = "Exit"; +/* No comment provided by engineer. */ +"External Sign" = "External Sign"; + /* No comment provided by engineer. */ "Face ID limit" = "Limite de ID de face"; @@ -441,7 +444,7 @@ "Incase if this device is lost / damaged, incase if the dash wallet is uninstalled accidently from this device, you will need this recovery phrase to access your funds." = "Incase if this device is lost / damaged, incase if the dash wallet is uninstalled accidently from this device, you will need this recovery phrase to access your funds."; /* No comment provided by engineer. */ -"Incorrect collateral index" = "Incorrect collateral index"; +"Incorrect collateral" = "Incorrect collateral"; /* No comment provided by engineer. */ "Insufficient Funds" = "Saldo Insuficiente"; @@ -1178,6 +1181,9 @@ /* No comment provided by engineer. */ "Verify" = "Verify"; +/* No comment provided by engineer. */ +"Verify Signature" = "Verify Signature"; + /* No comment provided by engineer. */ "verifying quorum" = "verificando quorum"; diff --git a/DashWallet/ru.lproj/Localizable.strings b/DashWallet/ru.lproj/Localizable.strings index 459302f68..dbcbcfe71 100644 --- a/DashWallet/ru.lproj/Localizable.strings +++ b/DashWallet/ru.lproj/Localizable.strings @@ -362,6 +362,9 @@ /* No comment provided by engineer. */ "Exit" = "Exit"; +/* No comment provided by engineer. */ +"External Sign" = "External Sign"; + /* No comment provided by engineer. */ "Face ID limit" = "Лимит Face ID"; @@ -441,7 +444,7 @@ "Incase if this device is lost / damaged, incase if the dash wallet is uninstalled accidently from this device, you will need this recovery phrase to access your funds." = "Incase if this device is lost / damaged, incase if the dash wallet is uninstalled accidently from this device, you will need this recovery phrase to access your funds."; /* No comment provided by engineer. */ -"Incorrect collateral index" = "Incorrect collateral index"; +"Incorrect collateral" = "Incorrect collateral"; /* No comment provided by engineer. */ "Insufficient Funds" = "Недостаточно средств"; @@ -1178,6 +1181,9 @@ /* No comment provided by engineer. */ "Verify" = "Verify"; +/* No comment provided by engineer. */ +"Verify Signature" = "Verify Signature"; + /* No comment provided by engineer. */ "verifying quorum" = "подтверждение кворума"; diff --git a/DashWallet/sk.lproj/Localizable.strings b/DashWallet/sk.lproj/Localizable.strings index a54c4b7d6..5669e0dd9 100644 --- a/DashWallet/sk.lproj/Localizable.strings +++ b/DashWallet/sk.lproj/Localizable.strings @@ -362,6 +362,9 @@ /* No comment provided by engineer. */ "Exit" = "Exit"; +/* No comment provided by engineer. */ +"External Sign" = "External Sign"; + /* No comment provided by engineer. */ "Face ID limit" = "Limit pre Face ID"; @@ -441,7 +444,7 @@ "Incase if this device is lost / damaged, incase if the dash wallet is uninstalled accidently from this device, you will need this recovery phrase to access your funds." = "Incase if this device is lost / damaged, incase if the dash wallet is uninstalled accidently from this device, you will need this recovery phrase to access your funds."; /* No comment provided by engineer. */ -"Incorrect collateral index" = "Incorrect collateral index"; +"Incorrect collateral" = "Incorrect collateral"; /* No comment provided by engineer. */ "Insufficient Funds" = "Insufficient Funds"; @@ -1178,6 +1181,9 @@ /* No comment provided by engineer. */ "Verify" = "Verify"; +/* No comment provided by engineer. */ +"Verify Signature" = "Verify Signature"; + /* No comment provided by engineer. */ "verifying quorum" = "verifying quorum"; diff --git a/DashWallet/sq.lproj/Localizable.strings b/DashWallet/sq.lproj/Localizable.strings index 4bbc2105f..bafcdb763 100644 --- a/DashWallet/sq.lproj/Localizable.strings +++ b/DashWallet/sq.lproj/Localizable.strings @@ -362,6 +362,9 @@ /* No comment provided by engineer. */ "Exit" = "Exit"; +/* No comment provided by engineer. */ +"External Sign" = "External Sign"; + /* No comment provided by engineer. */ "Face ID limit" = "Face ID limit"; @@ -441,7 +444,7 @@ "Incase if this device is lost / damaged, incase if the dash wallet is uninstalled accidently from this device, you will need this recovery phrase to access your funds." = "Incase if this device is lost / damaged, incase if the dash wallet is uninstalled accidently from this device, you will need this recovery phrase to access your funds."; /* No comment provided by engineer. */ -"Incorrect collateral index" = "Incorrect collateral index"; +"Incorrect collateral" = "Incorrect collateral"; /* No comment provided by engineer. */ "Insufficient Funds" = "Insufficient Funds"; @@ -1178,6 +1181,9 @@ /* No comment provided by engineer. */ "Verify" = "Verify"; +/* No comment provided by engineer. */ +"Verify Signature" = "Verify Signature"; + /* No comment provided by engineer. */ "verifying quorum" = "verifying quorum"; diff --git a/DashWallet/sv.lproj/Localizable.strings b/DashWallet/sv.lproj/Localizable.strings index a6bd41739..93fdd96f6 100644 --- a/DashWallet/sv.lproj/Localizable.strings +++ b/DashWallet/sv.lproj/Localizable.strings @@ -362,6 +362,9 @@ /* No comment provided by engineer. */ "Exit" = "Exit"; +/* No comment provided by engineer. */ +"External Sign" = "External Sign"; + /* No comment provided by engineer. */ "Face ID limit" = "Face ID limit"; @@ -441,7 +444,7 @@ "Incase if this device is lost / damaged, incase if the dash wallet is uninstalled accidently from this device, you will need this recovery phrase to access your funds." = "Incase if this device is lost / damaged, incase if the dash wallet is uninstalled accidently from this device, you will need this recovery phrase to access your funds."; /* No comment provided by engineer. */ -"Incorrect collateral index" = "Incorrect collateral index"; +"Incorrect collateral" = "Incorrect collateral"; /* No comment provided by engineer. */ "Insufficient Funds" = "Insufficient Funds"; @@ -1178,6 +1181,9 @@ /* No comment provided by engineer. */ "Verify" = "Verify"; +/* No comment provided by engineer. */ +"Verify Signature" = "Verify Signature"; + /* No comment provided by engineer. */ "verifying quorum" = "verifying quorum"; diff --git a/DashWallet/th.lproj/Localizable.strings b/DashWallet/th.lproj/Localizable.strings index 97d6e518b..bf323c2a8 100644 --- a/DashWallet/th.lproj/Localizable.strings +++ b/DashWallet/th.lproj/Localizable.strings @@ -362,6 +362,9 @@ /* No comment provided by engineer. */ "Exit" = "Exit"; +/* No comment provided by engineer. */ +"External Sign" = "External Sign"; + /* No comment provided by engineer. */ "Face ID limit" = "ขีดจำกัด Face ID"; @@ -441,7 +444,7 @@ "Incase if this device is lost / damaged, incase if the dash wallet is uninstalled accidently from this device, you will need this recovery phrase to access your funds." = "Incase if this device is lost / damaged, incase if the dash wallet is uninstalled accidently from this device, you will need this recovery phrase to access your funds."; /* No comment provided by engineer. */ -"Incorrect collateral index" = "Incorrect collateral index"; +"Incorrect collateral" = "Incorrect collateral"; /* No comment provided by engineer. */ "Insufficient Funds" = "กองทุนไม่เพียงพอ"; @@ -1178,6 +1181,9 @@ /* No comment provided by engineer. */ "Verify" = "Verify"; +/* No comment provided by engineer. */ +"Verify Signature" = "Verify Signature"; + /* No comment provided by engineer. */ "verifying quorum" = "verifying quorum"; diff --git a/DashWallet/tr.lproj/Localizable.strings b/DashWallet/tr.lproj/Localizable.strings index 63a37c524..8644dd2fc 100644 --- a/DashWallet/tr.lproj/Localizable.strings +++ b/DashWallet/tr.lproj/Localizable.strings @@ -362,6 +362,9 @@ /* No comment provided by engineer. */ "Exit" = "Exit"; +/* No comment provided by engineer. */ +"External Sign" = "External Sign"; + /* No comment provided by engineer. */ "Face ID limit" = "Face ID limiti"; @@ -441,7 +444,7 @@ "Incase if this device is lost / damaged, incase if the dash wallet is uninstalled accidently from this device, you will need this recovery phrase to access your funds." = "Incase if this device is lost / damaged, incase if the dash wallet is uninstalled accidently from this device, you will need this recovery phrase to access your funds."; /* No comment provided by engineer. */ -"Incorrect collateral index" = "Incorrect collateral index"; +"Incorrect collateral" = "Incorrect collateral"; /* No comment provided by engineer. */ "Insufficient Funds" = "Yetersiz Bakiye"; @@ -1178,6 +1181,9 @@ /* No comment provided by engineer. */ "Verify" = "Verify"; +/* No comment provided by engineer. */ +"Verify Signature" = "Verify Signature"; + /* No comment provided by engineer. */ "verifying quorum" = "nisap doğrulanıyor"; diff --git a/DashWallet/vi.lproj/Localizable.strings b/DashWallet/vi.lproj/Localizable.strings index e62955879..f2db2bfea 100644 --- a/DashWallet/vi.lproj/Localizable.strings +++ b/DashWallet/vi.lproj/Localizable.strings @@ -362,6 +362,9 @@ /* No comment provided by engineer. */ "Exit" = "Exit"; +/* No comment provided by engineer. */ +"External Sign" = "External Sign"; + /* No comment provided by engineer. */ "Face ID limit" = "Giới hạn Face ID"; @@ -441,7 +444,7 @@ "Incase if this device is lost / damaged, incase if the dash wallet is uninstalled accidently from this device, you will need this recovery phrase to access your funds." = "Incase if this device is lost / damaged, incase if the dash wallet is uninstalled accidently from this device, you will need this recovery phrase to access your funds."; /* No comment provided by engineer. */ -"Incorrect collateral index" = "Incorrect collateral index"; +"Incorrect collateral" = "Incorrect collateral"; /* No comment provided by engineer. */ "Insufficient Funds" = "Không đủ tiền"; @@ -1178,6 +1181,9 @@ /* No comment provided by engineer. */ "Verify" = "Verify"; +/* No comment provided by engineer. */ +"Verify Signature" = "Verify Signature"; + /* No comment provided by engineer. */ "verifying quorum" = "đang kiểm tra quorum"; diff --git a/DashWallet/zh-Hans.lproj/Localizable.strings b/DashWallet/zh-Hans.lproj/Localizable.strings index 86ff06aae..ac3291876 100644 --- a/DashWallet/zh-Hans.lproj/Localizable.strings +++ b/DashWallet/zh-Hans.lproj/Localizable.strings @@ -362,6 +362,9 @@ /* No comment provided by engineer. */ "Exit" = "Exit"; +/* No comment provided by engineer. */ +"External Sign" = "External Sign"; + /* No comment provided by engineer. */ "Face ID limit" = "面容ID限制"; @@ -441,7 +444,7 @@ "Incase if this device is lost / damaged, incase if the dash wallet is uninstalled accidently from this device, you will need this recovery phrase to access your funds." = "Incase if this device is lost / damaged, incase if the dash wallet is uninstalled accidently from this device, you will need this recovery phrase to access your funds."; /* No comment provided by engineer. */ -"Incorrect collateral index" = "Incorrect collateral index"; +"Incorrect collateral" = "Incorrect collateral"; /* No comment provided by engineer. */ "Insufficient Funds" = "Insufficient Funds"; @@ -1178,6 +1181,9 @@ /* No comment provided by engineer. */ "Verify" = "Verify"; +/* No comment provided by engineer. */ +"Verify Signature" = "Verify Signature"; + /* No comment provided by engineer. */ "verifying quorum" = "verifying quorum"; diff --git a/DashWallet/zh-Hant-TW.lproj/Localizable.strings b/DashWallet/zh-Hant-TW.lproj/Localizable.strings index b172cc16c..17373341b 100644 --- a/DashWallet/zh-Hant-TW.lproj/Localizable.strings +++ b/DashWallet/zh-Hant-TW.lproj/Localizable.strings @@ -362,6 +362,9 @@ /* No comment provided by engineer. */ "Exit" = "Exit"; +/* No comment provided by engineer. */ +"External Sign" = "External Sign"; + /* No comment provided by engineer. */ "Face ID limit" = "Face ID 解鎖的限制"; @@ -441,7 +444,7 @@ "Incase if this device is lost / damaged, incase if the dash wallet is uninstalled accidently from this device, you will need this recovery phrase to access your funds." = "Incase if this device is lost / damaged, incase if the dash wallet is uninstalled accidently from this device, you will need this recovery phrase to access your funds."; /* No comment provided by engineer. */ -"Incorrect collateral index" = "Incorrect collateral index"; +"Incorrect collateral" = "Incorrect collateral"; /* No comment provided by engineer. */ "Insufficient Funds" = "Insufficient Funds"; @@ -1178,6 +1181,9 @@ /* No comment provided by engineer. */ "Verify" = "Verify"; +/* No comment provided by engineer. */ +"Verify Signature" = "Verify Signature"; + /* No comment provided by engineer. */ "verifying quorum" = "verifying quorum"; From b8181f39cc8382de9c01f00602793ee7e7b120b4 Mon Sep 17 00:00:00 2001 From: Quantum Explorer Date: Mon, 11 Nov 2019 19:29:11 +0800 Subject: [PATCH 21/34] working with issues --- .../DWRegisterMasternodeViewController.h | 2 +- .../DWRegisterMasternodeViewController.m | 41 ++++++++++++++----- .../Models/DWMasternodeRegistrationModel.h | 2 +- .../Models/DWMasternodeRegistrationModel.m | 13 +++--- .../DWSignPayloadViewController.h | 8 ---- .../DWSignPayloadViewController.m | 8 ++-- .../Models/DWSignPayloadModel.h | 6 ++- .../Models/DWSignPayloadModel.m | 11 +++-- .../Payload Signing/Views/DWSignPayloadView.h | 2 +- .../Payload Signing/Views/DWSignPayloadView.m | 26 +++++++++++- DashWallet/ar.lproj/Localizable.strings | 3 ++ DashWallet/bg.lproj/Localizable.strings | 3 ++ DashWallet/de.lproj/Localizable.strings | 3 ++ DashWallet/el.lproj/Localizable.strings | 3 ++ DashWallet/en.lproj/Localizable.strings | 3 ++ DashWallet/es.lproj/Localizable.strings | 3 ++ DashWallet/fr.lproj/Localizable.strings | 3 ++ DashWallet/id.lproj/Localizable.strings | 3 ++ DashWallet/it.lproj/Localizable.strings | 3 ++ DashWallet/ja.lproj/Localizable.strings | 3 ++ DashWallet/ko.lproj/Localizable.strings | 3 ++ DashWallet/nb.lproj/Localizable.strings | 3 ++ DashWallet/nl.lproj/Localizable.strings | 3 ++ DashWallet/pl.lproj/Localizable.strings | 3 ++ DashWallet/pt.lproj/Localizable.strings | 3 ++ DashWallet/ru.lproj/Localizable.strings | 3 ++ DashWallet/sk.lproj/Localizable.strings | 3 ++ DashWallet/sq.lproj/Localizable.strings | 3 ++ DashWallet/sv.lproj/Localizable.strings | 3 ++ DashWallet/th.lproj/Localizable.strings | 3 ++ DashWallet/tr.lproj/Localizable.strings | 3 ++ DashWallet/vi.lproj/Localizable.strings | 3 ++ DashWallet/zh-Hans.lproj/Localizable.strings | 3 ++ .../zh-Hant-TW.lproj/Localizable.strings | 3 ++ 34 files changed, 156 insertions(+), 35 deletions(-) diff --git a/DashWallet/Sources/UI/Menu/Tools/Masternode/Masternode Registration/DWRegisterMasternodeViewController.h b/DashWallet/Sources/UI/Menu/Tools/Masternode/Masternode Registration/DWRegisterMasternodeViewController.h index 21aba4c7f..af7b9bfaa 100644 --- a/DashWallet/Sources/UI/Menu/Tools/Masternode/Masternode Registration/DWRegisterMasternodeViewController.h +++ b/DashWallet/Sources/UI/Menu/Tools/Masternode/Masternode Registration/DWRegisterMasternodeViewController.h @@ -12,7 +12,7 @@ NS_ASSUME_NONNULL_BEGIN -@interface DWRegisterMasternodeViewController : KVOUIViewController +@interface DWRegisterMasternodeViewController : KVOUIViewController - (instancetype)initWithNibName:(nullable NSString *)nibNameOrNil bundle:(nullable NSBundle *)nibBundleOrNil NS_UNAVAILABLE; - (nullable instancetype)initWithCoder:(NSCoder *)coder NS_UNAVAILABLE; diff --git a/DashWallet/Sources/UI/Menu/Tools/Masternode/Masternode Registration/DWRegisterMasternodeViewController.m b/DashWallet/Sources/UI/Menu/Tools/Masternode/Masternode Registration/DWRegisterMasternodeViewController.m index b3ec7bcd1..3644f972c 100644 --- a/DashWallet/Sources/UI/Menu/Tools/Masternode/Masternode Registration/DWRegisterMasternodeViewController.m +++ b/DashWallet/Sources/UI/Menu/Tools/Masternode/Masternode Registration/DWRegisterMasternodeViewController.m @@ -39,6 +39,7 @@ typedef NS_ENUM(NSUInteger, DWMasternodeRegistrationCellType) { @interface DWRegisterMasternodeViewController () @property (null_resettable, nonatomic, strong) DWMasternodeRegistrationModel *model; +@property (nonatomic, strong) DWActionFormCellModel *registerActionModel; @property (nonatomic, strong) DWFormTableViewController *formController; @end @@ -353,15 +354,23 @@ - (DWBaseFormCellModel *)modelForRow:(NSUInteger)row { } - (DWBaseFormCellModel *)registerActionModel { - DWActionFormCellModel *registerModel = [[DWActionFormCellModel alloc] initWithTitle:NSLocalizedString(@"Register", nil)]; + DWActionFormCellModel *registerModel = [[DWActionFormCellModel alloc] initWithTitle:NSLocalizedString(@"View Signing Info", nil)]; registerModel.didSelectBlock = ^(DWActionFormCellModel *_Nonnull cellModel, NSIndexPath *_Nonnull indexPath) { [self.model findCollateralTransactionWithCompletion:^(NSError *_Nonnull error) { if (error) { return; } + [self.model registerMasternode:self + requestsPayloadSigning:^{ + [self showPayloadSigning]; + } + completion:^(NSError *_Nonnull error){ + + }]; [self showPayloadSigning]; }]; }; + self.registerActionModel = registerModel; return registerModel; } @@ -392,17 +401,29 @@ - (void)raiseIssue:(NSString *)issue message:(NSString *)message { - (void)showPayloadSigning { DWSignPayloadModel *signPayloadModel = [[DWSignPayloadModel alloc] initForCollateralAddress:self.model.collateralTransaction.outputAddresses[self.model.providerRegistrationTransaction.collateralOutpoint.n] withPayloadCollateralString:self.model.providerRegistrationTransaction.payloadCollateralString]; DWSignPayloadViewController *signPayloadViewController = [[DWSignPayloadViewController alloc] initWithModel:signPayloadModel]; - signPayloadViewController.delegate = self; + __weak __typeof(self.model) weakModel = self.model; + __weak __typeof(self) weakSelf = self; + [signPayloadModel mvvm_observe:DW_KEYPATH(signPayloadModel, signature) + with:^(__typeof(self) self, NSData *signature) { + __strong __typeof(weakModel) strongModel = weakModel; + __strong __typeof(weakSelf) strongSelf = weakSelf; + if (!strongSelf || !strongModel) { + return; + } + strongModel.providerRegistrationTransaction.payloadSignature = signature; + strongSelf.registerActionModel.title = NSLocalizedString(@"Register", nil); + strongSelf.registerActionModel.didSelectBlock = ^(DWActionFormCellModel *_Nonnull cellModel, NSIndexPath *_Nonnull indexPath) { + [strongModel signTransactionInputsWithCompletion:^(NSError *_Nonnull error) { + __strong __typeof(weakSelf) strongSelf = weakSelf; + if (!strongSelf) { + return; + } + [strongSelf.navigationController popViewControllerAnimated:YES]; + }]; + }; + }]; [self.navigationController pushViewController:signPayloadViewController animated:YES]; } -- (void)viewController:(nonnull UIViewController *)controller didReturnSignature:(nonnull NSData *)signature { - // self.providerRegistrationTransaction.payloadSignature = signature; - // [self.model signTransactionInputs:self.providerRegistrationTransaction - // completion:^(NSError *_Nonnull error){ - // - // }]; -} - @end diff --git a/DashWallet/Sources/UI/Menu/Tools/Masternode/Masternode Registration/Models/DWMasternodeRegistrationModel.h b/DashWallet/Sources/UI/Menu/Tools/Masternode/Masternode Registration/Models/DWMasternodeRegistrationModel.h index cb51b50f4..226cf2bb3 100644 --- a/DashWallet/Sources/UI/Menu/Tools/Masternode/Masternode Registration/Models/DWMasternodeRegistrationModel.h +++ b/DashWallet/Sources/UI/Menu/Tools/Masternode/Masternode Registration/Models/DWMasternodeRegistrationModel.h @@ -45,7 +45,7 @@ NS_ASSUME_NONNULL_BEGIN - (void)registerMasternode:(id)sender requestsPayloadSigning:(void (^_Nullable)(void))payloadSigningRequest completion:(void (^_Nullable)(NSError *error))completion; -- (void)signTransactionInputs:(DSProviderRegistrationTransaction *)providerRegistrationTransaction completion:(void (^_Nullable)(NSError *error))completion; +- (void)signTransactionInputsWithCompletion:(void (^_Nullable)(NSError *error))completion; - (void)lookupIndexesForCollateralHash:(UInt256)collateralHash completion:(void (^_Nullable)(DSTransaction *transaction, NSIndexSet *indexSet, NSError *error))completion; diff --git a/DashWallet/Sources/UI/Menu/Tools/Masternode/Masternode Registration/Models/DWMasternodeRegistrationModel.m b/DashWallet/Sources/UI/Menu/Tools/Masternode/Masternode Registration/Models/DWMasternodeRegistrationModel.m index 97dcaa5ad..f6634fd21 100644 --- a/DashWallet/Sources/UI/Menu/Tools/Masternode/Masternode Registration/Models/DWMasternodeRegistrationModel.m +++ b/DashWallet/Sources/UI/Menu/Tools/Masternode/Masternode Registration/Models/DWMasternodeRegistrationModel.m @@ -198,8 +198,9 @@ - (void)registerMasternode:(id)sender requestsPayloadSigning:(void (^_Nullable)( withCollateral:self.collateral completion:^(DSProviderRegistrationTransaction *_Nonnull providerRegistrationTransaction) { if (providerRegistrationTransaction) { + self.providerRegistrationTransaction = providerRegistrationTransaction; if (dsutxo_is_zero(self.collateral)) { - [self signTransactionInputs:providerRegistrationTransaction completion:completion]; + [self signTransactionInputsWithCompletion:completion]; } else { payloadSigningRequest(); @@ -213,14 +214,16 @@ - (void)registerMasternode:(id)sender requestsPayloadSigning:(void (^_Nullable)( }]; } -- (void)signTransactionInputs:(DSProviderRegistrationTransaction *)providerRegistrationTransaction completion:(void (^_Nullable)(NSError *error))completion { - [self.account signTransaction:providerRegistrationTransaction +- (void)signTransactionInputsWithCompletion:(void (^_Nullable)(NSError *error))completion { + [self.account signTransaction:self.providerRegistrationTransaction withPrompt:NSLocalizedString(@"Would you like to register this masternode?", nil) completion:^(BOOL signedTransaction, BOOL cancelled) { if (signedTransaction) { - [self.account.wallet.chain.chainManager.transactionManager publishTransaction:providerRegistrationTransaction + [self.account.wallet.chain.chainManager.transactionManager publishTransaction:self.providerRegistrationTransaction completion:^(NSError *_Nullable error) { - completion(error); + if (completion) { + completion(error); + } }]; } else { diff --git a/DashWallet/Sources/UI/Menu/Tools/Masternode/Payload Signing/DWSignPayloadViewController.h b/DashWallet/Sources/UI/Menu/Tools/Masternode/Payload Signing/DWSignPayloadViewController.h index 888175f72..d0194222d 100644 --- a/DashWallet/Sources/UI/Menu/Tools/Masternode/Payload Signing/DWSignPayloadViewController.h +++ b/DashWallet/Sources/UI/Menu/Tools/Masternode/Payload Signing/DWSignPayloadViewController.h @@ -25,12 +25,6 @@ NS_ASSUME_NONNULL_BEGIN -@protocol DWSignPayloadDelegate - -- (void)viewController:(UIViewController *)controller didReturnSignature:(NSData *)signature; - -@end - @interface DWSignPayloadViewController : DWBaseActionButtonViewController @property (nonatomic, readonly) DWSignPayloadModel *model; @@ -40,8 +34,6 @@ NS_ASSUME_NONNULL_BEGIN - (instancetype)initWithModel:(DWSignPayloadModel *)model NS_DESIGNATED_INITIALIZER; -@property (nonatomic, weak) id delegate; - @end NS_ASSUME_NONNULL_END diff --git a/DashWallet/Sources/UI/Menu/Tools/Masternode/Payload Signing/DWSignPayloadViewController.m b/DashWallet/Sources/UI/Menu/Tools/Masternode/Payload Signing/DWSignPayloadViewController.m index 9aad4d85a..9697f4d8b 100644 --- a/DashWallet/Sources/UI/Menu/Tools/Masternode/Payload Signing/DWSignPayloadViewController.m +++ b/DashWallet/Sources/UI/Menu/Tools/Masternode/Payload Signing/DWSignPayloadViewController.m @@ -17,9 +17,6 @@ #import "NSString+Dash.h" @interface DWSignPayloadViewController () -@property (strong, nonatomic) IBOutlet UITextView *signatureMessageInputTextView; -@property (strong, nonatomic) IBOutlet UITextView *signatureMessageResultTextView; -@property (strong, nonatomic) IBOutlet UIButton *signButton; @property (nonatomic, strong) DWSignPayloadModel *model; @property (nonatomic, strong) DWSignPayloadView *contentView; @@ -52,6 +49,11 @@ + (NSString *)actionButtonTitle { return NSLocalizedString(@"Verify Signature", nil); } +- (void)actionButtonAction:(id)sender { + [self.contentView resignFirstResponder]; + [self.model verifySignature]; +} + - (void)setupView { self.title = NSLocalizedString(@"External Sign", nil); diff --git a/DashWallet/Sources/UI/Menu/Tools/Masternode/Payload Signing/Models/DWSignPayloadModel.h b/DashWallet/Sources/UI/Menu/Tools/Masternode/Payload Signing/Models/DWSignPayloadModel.h index 5cb436670..bd3249cb3 100644 --- a/DashWallet/Sources/UI/Menu/Tools/Masternode/Payload Signing/Models/DWSignPayloadModel.h +++ b/DashWallet/Sources/UI/Menu/Tools/Masternode/Payload Signing/Models/DWSignPayloadModel.h @@ -16,19 +16,23 @@ // #import +#import NS_ASSUME_NONNULL_BEGIN -@interface DWSignPayloadModel : NSObject +@interface DWSignPayloadModel : KVONSObject @property (nonatomic, strong) NSString *collateralAddress; @property (nonatomic, strong) NSString *payloadCollateralString; +@property (nonatomic, strong) NSString *unverifiedSignatureString; @property (nonatomic, strong) NSData *signature; - (instancetype)initForCollateralAddress:(NSString *)collateralAddress withPayloadCollateralString:(NSString *)payloadCollateralString NS_DESIGNATED_INITIALIZER; - (instancetype)init NS_UNAVAILABLE; +- (BOOL)verifySignature; + @end NS_ASSUME_NONNULL_END diff --git a/DashWallet/Sources/UI/Menu/Tools/Masternode/Payload Signing/Models/DWSignPayloadModel.m b/DashWallet/Sources/UI/Menu/Tools/Masternode/Payload Signing/Models/DWSignPayloadModel.m index 7226a44a5..c120a0db5 100644 --- a/DashWallet/Sources/UI/Menu/Tools/Masternode/Payload Signing/Models/DWSignPayloadModel.m +++ b/DashWallet/Sources/UI/Menu/Tools/Masternode/Payload Signing/Models/DWSignPayloadModel.m @@ -33,10 +33,15 @@ - (void)setSignatureFromString:(NSString *)signatureString { } -- (BOOL)verifySignature:(id)sender { - DSECDSAKey *key = [DSECDSAKey keyRecoveredFromCompactSig:self.signature andMessageDigest:[self.payloadCollateralString magicDigest]]; +- (BOOL)verifySignature { + NSData *unverifiedSignature = [[NSData alloc] initWithBase64EncodedString:self.unverifiedSignatureString options:0]; + DSECDSAKey *key = [DSECDSAKey keyRecoveredFromCompactSig:unverifiedSignature andMessageDigest:[self.payloadCollateralString magicDigest]]; NSString *address = [key addressForChain:[DWEnvironment sharedInstance].currentChain]; - return [address isEqualToString:self.collateralAddress]; + BOOL verified = [address isEqualToString:self.collateralAddress]; + if (verified) { + self.signature = unverifiedSignature; + } + return verified; } diff --git a/DashWallet/Sources/UI/Menu/Tools/Masternode/Payload Signing/Views/DWSignPayloadView.h b/DashWallet/Sources/UI/Menu/Tools/Masternode/Payload Signing/Views/DWSignPayloadView.h index b2cc51d56..cd6fb89c0 100644 --- a/DashWallet/Sources/UI/Menu/Tools/Masternode/Payload Signing/Views/DWSignPayloadView.h +++ b/DashWallet/Sources/UI/Menu/Tools/Masternode/Payload Signing/Views/DWSignPayloadView.h @@ -20,7 +20,7 @@ NS_ASSUME_NONNULL_BEGIN -@interface DWSignPayloadView : UIView +@interface DWSignPayloadView : UIView @property (nullable, nonatomic, strong) DWSignPayloadModel *model; diff --git a/DashWallet/Sources/UI/Menu/Tools/Masternode/Payload Signing/Views/DWSignPayloadView.m b/DashWallet/Sources/UI/Menu/Tools/Masternode/Payload Signing/Views/DWSignPayloadView.m index d01132da0..d6b3b3104 100644 --- a/DashWallet/Sources/UI/Menu/Tools/Masternode/Payload Signing/Views/DWSignPayloadView.m +++ b/DashWallet/Sources/UI/Menu/Tools/Masternode/Payload Signing/Views/DWSignPayloadView.m @@ -39,11 +39,14 @@ - (instancetype)initWithFrame:(CGRect)frame { self.backgroundColor = [UIColor dw_backgroundColor]; UITextView *messageToSignTextView = [[UITextView alloc] initWithFrame:CGRectZero]; messageToSignTextView.translatesAutoresizingMaskIntoConstraints = NO; + messageToSignTextView.backgroundColor = [UIColor dw_backgroundColor]; + messageToSignTextView.font = [UIFont dw_fontForTextStyle:UIFontTextStyleCallout]; [self addSubview:messageToSignTextView]; _messageToSignTextView = messageToSignTextView; UITextView *signedMessageInputTextView = [[UITextView alloc] initWithFrame:CGRectZero]; signedMessageInputTextView.translatesAutoresizingMaskIntoConstraints = NO; + signedMessageInputTextView.delegate = self; [self addSubview:signedMessageInputTextView]; _signedMessageInputTextView = signedMessageInputTextView; @@ -52,8 +55,10 @@ - (instancetype)initWithFrame:(CGRect)frame { constant:DW_SIGNED_PAYLOAD_TOP_PADDING], [messageToSignTextView.leadingAnchor constraintEqualToAnchor:self.leadingAnchor], [messageToSignTextView.trailingAnchor constraintEqualToAnchor:self.trailingAnchor], - - [messageToSignTextView.heightAnchor constraintEqualToAnchor:signedMessageInputTextView.heightAnchor multiplier:0.67 constant:0], + + [messageToSignTextView.heightAnchor constraintEqualToAnchor:signedMessageInputTextView.heightAnchor + multiplier:0.67 + constant:0], [signedMessageInputTextView.topAnchor constraintEqualToAnchor:messageToSignTextView.bottomAnchor constant:DW_SIGNED_PAYLOAD_INTER_PADDING], @@ -66,4 +71,21 @@ - (instancetype)initWithFrame:(CGRect)frame { return self; } +- (void)setModel:(DWSignPayloadModel *)model { + _model = model; + [self.messageToSignTextView setText:[NSString stringWithFormat:@"signmessage %@ %@", model.collateralAddress, model.payloadCollateralString]]; +} + +- (BOOL)resignFirstResponder { + BOOL resigned = [super resignFirstResponder]; + resigned |= [self.signedMessageInputTextView resignFirstResponder]; + return resigned; +} + +- (void)textViewDidEndEditing:(UITextView *)textView { + if (textView == self.signedMessageInputTextView) { + self.model.unverifiedSignatureString = textView.text; + } +} + @end diff --git a/DashWallet/ar.lproj/Localizable.strings b/DashWallet/ar.lproj/Localizable.strings index 6ae555597..5ae0b6748 100644 --- a/DashWallet/ar.lproj/Localizable.strings +++ b/DashWallet/ar.lproj/Localizable.strings @@ -1196,6 +1196,9 @@ /* No comment provided by engineer. */ "View Recovery Phrase" = "View Recovery Phrase"; +/* No comment provided by engineer. */ +"View Signing Info" = "View Signing Info"; + /* No comment provided by engineer. */ "Voting Address" = "Voting Address"; diff --git a/DashWallet/bg.lproj/Localizable.strings b/DashWallet/bg.lproj/Localizable.strings index 850e75ca1..f568440da 100644 --- a/DashWallet/bg.lproj/Localizable.strings +++ b/DashWallet/bg.lproj/Localizable.strings @@ -1196,6 +1196,9 @@ /* No comment provided by engineer. */ "View Recovery Phrase" = "View Recovery Phrase"; +/* No comment provided by engineer. */ +"View Signing Info" = "View Signing Info"; + /* No comment provided by engineer. */ "Voting Address" = "Voting Address"; diff --git a/DashWallet/de.lproj/Localizable.strings b/DashWallet/de.lproj/Localizable.strings index 5edb0ea98..9573711f9 100644 --- a/DashWallet/de.lproj/Localizable.strings +++ b/DashWallet/de.lproj/Localizable.strings @@ -1196,6 +1196,9 @@ /* No comment provided by engineer. */ "View Recovery Phrase" = "View Recovery Phrase"; +/* No comment provided by engineer. */ +"View Signing Info" = "View Signing Info"; + /* No comment provided by engineer. */ "Voting Address" = "Voting Address"; diff --git a/DashWallet/el.lproj/Localizable.strings b/DashWallet/el.lproj/Localizable.strings index b6276d79d..5d8b933e6 100644 --- a/DashWallet/el.lproj/Localizable.strings +++ b/DashWallet/el.lproj/Localizable.strings @@ -1196,6 +1196,9 @@ /* No comment provided by engineer. */ "View Recovery Phrase" = "View Recovery Phrase"; +/* No comment provided by engineer. */ +"View Signing Info" = "View Signing Info"; + /* No comment provided by engineer. */ "Voting Address" = "Voting Address"; diff --git a/DashWallet/en.lproj/Localizable.strings b/DashWallet/en.lproj/Localizable.strings index b8595a361..27529ae8a 100644 --- a/DashWallet/en.lproj/Localizable.strings +++ b/DashWallet/en.lproj/Localizable.strings @@ -1196,6 +1196,9 @@ /* No comment provided by engineer. */ "View Recovery Phrase" = "View Recovery Phrase"; +/* No comment provided by engineer. */ +"View Signing Info" = "View Signing Info"; + /* No comment provided by engineer. */ "Voting Address" = "Voting Address"; diff --git a/DashWallet/es.lproj/Localizable.strings b/DashWallet/es.lproj/Localizable.strings index 1d3dfe82b..7e3266eae 100644 --- a/DashWallet/es.lproj/Localizable.strings +++ b/DashWallet/es.lproj/Localizable.strings @@ -1196,6 +1196,9 @@ /* No comment provided by engineer. */ "View Recovery Phrase" = "View Recovery Phrase"; +/* No comment provided by engineer. */ +"View Signing Info" = "View Signing Info"; + /* No comment provided by engineer. */ "Voting Address" = "Voting Address"; diff --git a/DashWallet/fr.lproj/Localizable.strings b/DashWallet/fr.lproj/Localizable.strings index 973491878..c88863019 100644 --- a/DashWallet/fr.lproj/Localizable.strings +++ b/DashWallet/fr.lproj/Localizable.strings @@ -1196,6 +1196,9 @@ /* No comment provided by engineer. */ "View Recovery Phrase" = "View Recovery Phrase"; +/* No comment provided by engineer. */ +"View Signing Info" = "View Signing Info"; + /* No comment provided by engineer. */ "Voting Address" = "Voting Address"; diff --git a/DashWallet/id.lproj/Localizable.strings b/DashWallet/id.lproj/Localizable.strings index 7d1761d2c..0be5c33d8 100644 --- a/DashWallet/id.lproj/Localizable.strings +++ b/DashWallet/id.lproj/Localizable.strings @@ -1196,6 +1196,9 @@ /* No comment provided by engineer. */ "View Recovery Phrase" = "View Recovery Phrase"; +/* No comment provided by engineer. */ +"View Signing Info" = "View Signing Info"; + /* No comment provided by engineer. */ "Voting Address" = "Voting Address"; diff --git a/DashWallet/it.lproj/Localizable.strings b/DashWallet/it.lproj/Localizable.strings index a9a8ba521..1c9597b14 100644 --- a/DashWallet/it.lproj/Localizable.strings +++ b/DashWallet/it.lproj/Localizable.strings @@ -1196,6 +1196,9 @@ /* No comment provided by engineer. */ "View Recovery Phrase" = "View Recovery Phrase"; +/* No comment provided by engineer. */ +"View Signing Info" = "View Signing Info"; + /* No comment provided by engineer. */ "Voting Address" = "Voting Address"; diff --git a/DashWallet/ja.lproj/Localizable.strings b/DashWallet/ja.lproj/Localizable.strings index 3bd91bd80..cd0a2f320 100644 --- a/DashWallet/ja.lproj/Localizable.strings +++ b/DashWallet/ja.lproj/Localizable.strings @@ -1196,6 +1196,9 @@ /* No comment provided by engineer. */ "View Recovery Phrase" = "View Recovery Phrase"; +/* No comment provided by engineer. */ +"View Signing Info" = "View Signing Info"; + /* No comment provided by engineer. */ "Voting Address" = "Voting Address"; diff --git a/DashWallet/ko.lproj/Localizable.strings b/DashWallet/ko.lproj/Localizable.strings index 38c9be8d0..888cfe26a 100644 --- a/DashWallet/ko.lproj/Localizable.strings +++ b/DashWallet/ko.lproj/Localizable.strings @@ -1196,6 +1196,9 @@ /* No comment provided by engineer. */ "View Recovery Phrase" = "View Recovery Phrase"; +/* No comment provided by engineer. */ +"View Signing Info" = "View Signing Info"; + /* No comment provided by engineer. */ "Voting Address" = "Voting Address"; diff --git a/DashWallet/nb.lproj/Localizable.strings b/DashWallet/nb.lproj/Localizable.strings index b471f217a..37a7bbec9 100644 --- a/DashWallet/nb.lproj/Localizable.strings +++ b/DashWallet/nb.lproj/Localizable.strings @@ -1196,6 +1196,9 @@ /* No comment provided by engineer. */ "View Recovery Phrase" = "View Recovery Phrase"; +/* No comment provided by engineer. */ +"View Signing Info" = "View Signing Info"; + /* No comment provided by engineer. */ "Voting Address" = "Voting Address"; diff --git a/DashWallet/nl.lproj/Localizable.strings b/DashWallet/nl.lproj/Localizable.strings index 9366e6e97..934e97586 100644 --- a/DashWallet/nl.lproj/Localizable.strings +++ b/DashWallet/nl.lproj/Localizable.strings @@ -1196,6 +1196,9 @@ /* No comment provided by engineer. */ "View Recovery Phrase" = "View Recovery Phrase"; +/* No comment provided by engineer. */ +"View Signing Info" = "View Signing Info"; + /* No comment provided by engineer. */ "Voting Address" = "Voting Address"; diff --git a/DashWallet/pl.lproj/Localizable.strings b/DashWallet/pl.lproj/Localizable.strings index 585b6454c..5c44f1220 100644 --- a/DashWallet/pl.lproj/Localizable.strings +++ b/DashWallet/pl.lproj/Localizable.strings @@ -1196,6 +1196,9 @@ /* No comment provided by engineer. */ "View Recovery Phrase" = "View Recovery Phrase"; +/* No comment provided by engineer. */ +"View Signing Info" = "View Signing Info"; + /* No comment provided by engineer. */ "Voting Address" = "Voting Address"; diff --git a/DashWallet/pt.lproj/Localizable.strings b/DashWallet/pt.lproj/Localizable.strings index e6ecdeab6..dd3341a79 100644 --- a/DashWallet/pt.lproj/Localizable.strings +++ b/DashWallet/pt.lproj/Localizable.strings @@ -1196,6 +1196,9 @@ /* No comment provided by engineer. */ "View Recovery Phrase" = "View Recovery Phrase"; +/* No comment provided by engineer. */ +"View Signing Info" = "View Signing Info"; + /* No comment provided by engineer. */ "Voting Address" = "Voting Address"; diff --git a/DashWallet/ru.lproj/Localizable.strings b/DashWallet/ru.lproj/Localizable.strings index dbcbcfe71..6e9d12aee 100644 --- a/DashWallet/ru.lproj/Localizable.strings +++ b/DashWallet/ru.lproj/Localizable.strings @@ -1196,6 +1196,9 @@ /* No comment provided by engineer. */ "View Recovery Phrase" = "View Recovery Phrase"; +/* No comment provided by engineer. */ +"View Signing Info" = "View Signing Info"; + /* No comment provided by engineer. */ "Voting Address" = "Voting Address"; diff --git a/DashWallet/sk.lproj/Localizable.strings b/DashWallet/sk.lproj/Localizable.strings index 5669e0dd9..adae02417 100644 --- a/DashWallet/sk.lproj/Localizable.strings +++ b/DashWallet/sk.lproj/Localizable.strings @@ -1196,6 +1196,9 @@ /* No comment provided by engineer. */ "View Recovery Phrase" = "View Recovery Phrase"; +/* No comment provided by engineer. */ +"View Signing Info" = "View Signing Info"; + /* No comment provided by engineer. */ "Voting Address" = "Voting Address"; diff --git a/DashWallet/sq.lproj/Localizable.strings b/DashWallet/sq.lproj/Localizable.strings index bafcdb763..5abb9155d 100644 --- a/DashWallet/sq.lproj/Localizable.strings +++ b/DashWallet/sq.lproj/Localizable.strings @@ -1196,6 +1196,9 @@ /* No comment provided by engineer. */ "View Recovery Phrase" = "View Recovery Phrase"; +/* No comment provided by engineer. */ +"View Signing Info" = "View Signing Info"; + /* No comment provided by engineer. */ "Voting Address" = "Voting Address"; diff --git a/DashWallet/sv.lproj/Localizable.strings b/DashWallet/sv.lproj/Localizable.strings index 93fdd96f6..91429fa50 100644 --- a/DashWallet/sv.lproj/Localizable.strings +++ b/DashWallet/sv.lproj/Localizable.strings @@ -1196,6 +1196,9 @@ /* No comment provided by engineer. */ "View Recovery Phrase" = "View Recovery Phrase"; +/* No comment provided by engineer. */ +"View Signing Info" = "View Signing Info"; + /* No comment provided by engineer. */ "Voting Address" = "Voting Address"; diff --git a/DashWallet/th.lproj/Localizable.strings b/DashWallet/th.lproj/Localizable.strings index bf323c2a8..4207388d5 100644 --- a/DashWallet/th.lproj/Localizable.strings +++ b/DashWallet/th.lproj/Localizable.strings @@ -1196,6 +1196,9 @@ /* No comment provided by engineer. */ "View Recovery Phrase" = "View Recovery Phrase"; +/* No comment provided by engineer. */ +"View Signing Info" = "View Signing Info"; + /* No comment provided by engineer. */ "Voting Address" = "Voting Address"; diff --git a/DashWallet/tr.lproj/Localizable.strings b/DashWallet/tr.lproj/Localizable.strings index 8644dd2fc..9aba3bc22 100644 --- a/DashWallet/tr.lproj/Localizable.strings +++ b/DashWallet/tr.lproj/Localizable.strings @@ -1196,6 +1196,9 @@ /* No comment provided by engineer. */ "View Recovery Phrase" = "View Recovery Phrase"; +/* No comment provided by engineer. */ +"View Signing Info" = "View Signing Info"; + /* No comment provided by engineer. */ "Voting Address" = "Voting Address"; diff --git a/DashWallet/vi.lproj/Localizable.strings b/DashWallet/vi.lproj/Localizable.strings index f2db2bfea..34db2a2f5 100644 --- a/DashWallet/vi.lproj/Localizable.strings +++ b/DashWallet/vi.lproj/Localizable.strings @@ -1196,6 +1196,9 @@ /* No comment provided by engineer. */ "View Recovery Phrase" = "View Recovery Phrase"; +/* No comment provided by engineer. */ +"View Signing Info" = "View Signing Info"; + /* No comment provided by engineer. */ "Voting Address" = "Voting Address"; diff --git a/DashWallet/zh-Hans.lproj/Localizable.strings b/DashWallet/zh-Hans.lproj/Localizable.strings index ac3291876..ee7cbb46c 100644 --- a/DashWallet/zh-Hans.lproj/Localizable.strings +++ b/DashWallet/zh-Hans.lproj/Localizable.strings @@ -1196,6 +1196,9 @@ /* No comment provided by engineer. */ "View Recovery Phrase" = "View Recovery Phrase"; +/* No comment provided by engineer. */ +"View Signing Info" = "View Signing Info"; + /* No comment provided by engineer. */ "Voting Address" = "Voting Address"; diff --git a/DashWallet/zh-Hant-TW.lproj/Localizable.strings b/DashWallet/zh-Hant-TW.lproj/Localizable.strings index 17373341b..972522a98 100644 --- a/DashWallet/zh-Hant-TW.lproj/Localizable.strings +++ b/DashWallet/zh-Hant-TW.lproj/Localizable.strings @@ -1196,6 +1196,9 @@ /* No comment provided by engineer. */ "View Recovery Phrase" = "View Recovery Phrase"; +/* No comment provided by engineer. */ +"View Signing Info" = "View Signing Info"; + /* No comment provided by engineer. */ "Voting Address" = "Voting Address"; From e4873cfc2be4db02dd523a97c7c1488d0bb392ef Mon Sep 17 00:00:00 2001 From: Quantum Explorer Date: Wed, 13 Nov 2019 11:21:41 +0800 Subject: [PATCH 22/34] masternode list UI initial work --- DashWallet.xcodeproj/project.pbxproj | 44 +++- .../DWMasternodeFeaturesMenuViewController.m | 25 ++- .../Cells/DWMasternodeTableViewCell.h | 30 +++ .../Cells/DWMasternodeTableViewCell.m | 199 ++++++++++++++++++ .../DWMasternodeListViewController.h | 26 +++ .../DWMasternodeListViewController.m | 180 ++++++++++++++++ .../Models/DWMasternodeListModel.h | 34 +++ .../Models/DWMasternodeListModel.m | 122 +++++++++++ .../DWRegisterMasternodeViewController.m | 21 +- .../DWSignPayloadViewController.m | 5 +- .../Models/DWSignPayloadModel.h | 2 + .../Models/DWSignPayloadModel.m | 2 + .../Payload Signing/Views/DWSignPayloadView.m | 64 +++++- DashWallet/ar.lproj/Localizable.strings | 6 + DashWallet/bg.lproj/Localizable.strings | 6 + DashWallet/de.lproj/Localizable.strings | 6 + DashWallet/el.lproj/Localizable.strings | 6 + DashWallet/en.lproj/Localizable.strings | 6 + DashWallet/es.lproj/Localizable.strings | 6 + DashWallet/fr.lproj/Localizable.strings | 6 + DashWallet/id.lproj/Localizable.strings | 6 + DashWallet/it.lproj/Localizable.strings | 6 + DashWallet/ja.lproj/Localizable.strings | 6 + DashWallet/ko.lproj/Localizable.strings | 6 + DashWallet/nb.lproj/Localizable.strings | 6 + DashWallet/nl.lproj/Localizable.strings | 6 + DashWallet/pl.lproj/Localizable.strings | 6 + DashWallet/pt.lproj/Localizable.strings | 6 + DashWallet/ru.lproj/Localizable.strings | 6 + DashWallet/sk.lproj/Localizable.strings | 6 + DashWallet/sq.lproj/Localizable.strings | 6 + DashWallet/sv.lproj/Localizable.strings | 6 + DashWallet/th.lproj/Localizable.strings | 6 + DashWallet/tr.lproj/Localizable.strings | 6 + DashWallet/vi.lproj/Localizable.strings | 6 + DashWallet/zh-Hans.lproj/Localizable.strings | 6 + .../zh-Hant-TW.lproj/Localizable.strings | 6 + 37 files changed, 882 insertions(+), 16 deletions(-) create mode 100644 DashWallet/Sources/UI/Menu/Tools/Masternode/Masternode List/Cells/DWMasternodeTableViewCell.h create mode 100644 DashWallet/Sources/UI/Menu/Tools/Masternode/Masternode List/Cells/DWMasternodeTableViewCell.m create mode 100644 DashWallet/Sources/UI/Menu/Tools/Masternode/Masternode List/DWMasternodeListViewController.h create mode 100644 DashWallet/Sources/UI/Menu/Tools/Masternode/Masternode List/DWMasternodeListViewController.m create mode 100644 DashWallet/Sources/UI/Menu/Tools/Masternode/Masternode List/Models/DWMasternodeListModel.h create mode 100644 DashWallet/Sources/UI/Menu/Tools/Masternode/Masternode List/Models/DWMasternodeListModel.m diff --git a/DashWallet.xcodeproj/project.pbxproj b/DashWallet.xcodeproj/project.pbxproj index 16d6cd54d..89698f0ab 100644 --- a/DashWallet.xcodeproj/project.pbxproj +++ b/DashWallet.xcodeproj/project.pbxproj @@ -403,7 +403,6 @@ FB31C25D223BD3F600BD0868 /* DWUpdateMasternodeRegistrarViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = FB31C250223BD3F500BD0868 /* DWUpdateMasternodeRegistrarViewController.m */; }; FB31C262223BD62D00BD0868 /* DWProviderUpdateServiceTableViewCell.m in Sources */ = {isa = PBXBuildFile; fileRef = FB31C25F223BD62C00BD0868 /* DWProviderUpdateServiceTableViewCell.m */; }; FB31C263223BD62D00BD0868 /* DWProviderUpdateRegistrarTableViewCell.m in Sources */ = {isa = PBXBuildFile; fileRef = FB31C260223BD62C00BD0868 /* DWProviderUpdateRegistrarTableViewCell.m */; }; - FB31C269223BD9F400BD0868 /* DWMasternodeTableViewCell.m in Sources */ = {isa = PBXBuildFile; fileRef = FB31C267223BD9F400BD0868 /* DWMasternodeTableViewCell.m */; }; FB3E9F60236125F600C09C5C /* (null) in Frameworks */ = {isa = PBXBuildFile; }; FB3FA3D61F2364140071FCC5 /* UIImage+Utils.m in Sources */ = {isa = PBXBuildFile; fileRef = BAA4843B1B3EFFAF0075C749 /* UIImage+Utils.m */; }; FB3FF0B22226416A0059A9A5 /* Masternode.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = FB3FF0B12226416A0059A9A5 /* Masternode.storyboard */; }; @@ -432,6 +431,9 @@ FBF3F42D1E42B00C00C7248E /* UIKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FBF3F42C1E42B00C00C7248E /* UIKit.framework */; }; FBF3F42F1E42B01E00C7248E /* CoreGraphics.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FBF3F42E1E42B01E00C7248E /* CoreGraphics.framework */; }; FBF3F4311E42B02800C7248E /* ImageIO.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FBF3F4301E42B02800C7248E /* ImageIO.framework */; }; + FBF4DA06237B9DFA005493A6 /* DWMasternodeListModel.m in Sources */ = {isa = PBXBuildFile; fileRef = FBF4DA05237B9DFA005493A6 /* DWMasternodeListModel.m */; }; + FBF4DA09237BA341005493A6 /* DWMasternodeListViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = FBF4DA08237BA341005493A6 /* DWMasternodeListViewController.m */; }; + FBF4DA0D237BA5BD005493A6 /* DWMasternodeTableViewCell.m in Sources */ = {isa = PBXBuildFile; fileRef = FBF4DA0C237BA5BD005493A6 /* DWMasternodeTableViewCell.m */; }; FBFC2EC521137A7A00D20C57 /* Montserrat-Regular.otf in Resources */ = {isa = PBXBuildFile; fileRef = FBFC2EA421137A7900D20C57 /* Montserrat-Regular.otf */; }; FBFC2EC621137A7A00D20C57 /* Montserrat-Regular.otf in Resources */ = {isa = PBXBuildFile; fileRef = FBFC2EA421137A7900D20C57 /* Montserrat-Regular.otf */; }; FBFC2EC721137A7A00D20C57 /* Montserrat-Regular.otf in Resources */ = {isa = PBXBuildFile; fileRef = FBFC2EA421137A7900D20C57 /* Montserrat-Regular.otf */; }; @@ -1410,6 +1412,12 @@ FBF3F42C1E42B00C00C7248E /* UIKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = UIKit.framework; path = System/Library/Frameworks/UIKit.framework; sourceTree = SDKROOT; }; FBF3F42E1E42B01E00C7248E /* CoreGraphics.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreGraphics.framework; path = System/Library/Frameworks/CoreGraphics.framework; sourceTree = SDKROOT; }; FBF3F4301E42B02800C7248E /* ImageIO.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = ImageIO.framework; path = System/Library/Frameworks/ImageIO.framework; sourceTree = SDKROOT; }; + FBF4DA04237B9DFA005493A6 /* DWMasternodeListModel.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = DWMasternodeListModel.h; sourceTree = ""; }; + FBF4DA05237B9DFA005493A6 /* DWMasternodeListModel.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = DWMasternodeListModel.m; sourceTree = ""; }; + FBF4DA07237BA341005493A6 /* DWMasternodeListViewController.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = DWMasternodeListViewController.h; sourceTree = ""; }; + FBF4DA08237BA341005493A6 /* DWMasternodeListViewController.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = DWMasternodeListViewController.m; sourceTree = ""; }; + FBF4DA0B237BA5BD005493A6 /* DWMasternodeTableViewCell.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = DWMasternodeTableViewCell.h; sourceTree = ""; }; + FBF4DA0C237BA5BD005493A6 /* DWMasternodeTableViewCell.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = DWMasternodeTableViewCell.m; sourceTree = ""; }; FBFC2EA421137A7900D20C57 /* Montserrat-Regular.otf */ = {isa = PBXFileReference; lastKnownFileType = file; path = "Montserrat-Regular.otf"; sourceTree = ""; }; FBFC2EA821137A7900D20C57 /* Montserrat-Medium.otf */ = {isa = PBXFileReference; lastKnownFileType = file; path = "Montserrat-Medium.otf"; sourceTree = ""; }; FBFC2EAC21137A7A00D20C57 /* Montserrat-SemiBold.otf */ = {isa = PBXFileReference; lastKnownFileType = file; path = "Montserrat-SemiBold.otf"; sourceTree = ""; }; @@ -3369,6 +3377,7 @@ FB1C3DC2236AD3C7004C2B05 /* Masternode */ = { isa = PBXGroup; children = ( + FBF4DA02237B9D50005493A6 /* Masternode List */, FB031ADF2378FFAE00EF564B /* Payload Signing */, FB3FF0B12226416A0059A9A5 /* Masternode.storyboard */, FBCFEDEA236E50410086DE07 /* Masternode Registration */, @@ -3498,6 +3507,35 @@ path = PublicKeyGeneration; sourceTree = ""; }; + FBF4DA02237B9D50005493A6 /* Masternode List */ = { + isa = PBXGroup; + children = ( + FBF4DA0A237BA597005493A6 /* Cells */, + FBF4DA03237B9D73005493A6 /* Models */, + FBF4DA07237BA341005493A6 /* DWMasternodeListViewController.h */, + FBF4DA08237BA341005493A6 /* DWMasternodeListViewController.m */, + ); + path = "Masternode List"; + sourceTree = ""; + }; + FBF4DA03237B9D73005493A6 /* Models */ = { + isa = PBXGroup; + children = ( + FBF4DA04237B9DFA005493A6 /* DWMasternodeListModel.h */, + FBF4DA05237B9DFA005493A6 /* DWMasternodeListModel.m */, + ); + path = Models; + sourceTree = ""; + }; + FBF4DA0A237BA597005493A6 /* Cells */ = { + isa = PBXGroup; + children = ( + FBF4DA0B237BA5BD005493A6 /* DWMasternodeTableViewCell.h */, + FBF4DA0C237BA5BD005493A6 /* DWMasternodeTableViewCell.m */, + ); + path = Cells; + sourceTree = ""; + }; FBFC2E9E21137A4200D20C57 /* Montserrat */ = { isa = PBXGroup; children = ( @@ -4107,6 +4145,7 @@ 2AD1CE6E22DA357D00C99324 /* DWBaseViewController.m in Sources */, 2A44314722CF82D9009BAF7F /* DWBiometricAuthViewController.m in Sources */, 2A4E531422E9F0A200E5168A /* DWStartViewController.m in Sources */, + FBF4DA09237BA341005493A6 /* DWMasternodeListViewController.m in Sources */, 2A4E531522E9F0A200E5168A /* DWStartModel.m in Sources */, 2A9FFE872230FF4700956D5F /* DWPlaceholderFormTableViewCell.m in Sources */, 2A4E532022EB2DF400E5168A /* DWHomeHeaderView.m in Sources */, @@ -4204,6 +4243,7 @@ 2A0C699C23104588001B8C90 /* DWPaymentInput.m in Sources */, 2A9FFDF42230FF1A00956D5F /* UIView+DWAnimations.m in Sources */, 2A9FFE932230FF4700956D5F /* DWUpholdOTPViewController.m in Sources */, + FBF4DA06237B9DFA005493A6 /* DWMasternodeListModel.m in Sources */, 2A8B9E7D23034AC100FF8653 /* DWAppGroupOptions.m in Sources */, 2A9FFE052230FF2B00956D5F /* DWUpholdAPIProvider.m in Sources */, 2A0C69EF2316B7F5001B8C90 /* DWConfirmPaymentContentView.m in Sources */, @@ -4266,6 +4306,7 @@ 2A1B7D932322AEE000BA8C6A /* DWTxDetailContentView.m in Sources */, 2A0C69D023143435001B8C90 /* DWModalDismissalAnimation.m in Sources */, 2A2CD72522FA05DD008C7BC9 /* DWPressableButton.m in Sources */, + FBF4DA0D237BA5BD005493A6 /* DWMasternodeTableViewCell.m in Sources */, 2A4E533B22F0248D00E5168A /* DWTransactionListDataSource.m in Sources */, 2A7A7BB6234792A600451078 /* DWMainMenuContentView.m in Sources */, 2A2CD71622F98FEA008C7BC9 /* DWShadowView.m in Sources */, @@ -4336,7 +4377,6 @@ 2ACCD8E2231E507900A96B62 /* DWPinInputStepView.m in Sources */, 2A74EFED2305318000C475EB /* DWRecoverViewController.m in Sources */, FB43BC81211D96C600BC9879 /* DWTransactionTableViewCell.m in Sources */, - FB31C269223BD9F400BD0868 /* DWMasternodeTableViewCell.m in Sources */, 2A9CEBAD22E1DA4000A50237 /* DWAppRootViewController.m in Sources */, 2A4E535422F1D0D900E5168A /* DWTxListTableViewCell.m in Sources */, 2A2CD6EB22F47592008C7BC9 /* DWShortcutsView.m in Sources */, diff --git a/DashWallet/Sources/UI/Menu/Tools/Masternode/DWMasternodeFeaturesMenuViewController.m b/DashWallet/Sources/UI/Menu/Tools/Masternode/DWMasternodeFeaturesMenuViewController.m index eb807508c..6becd7e1c 100644 --- a/DashWallet/Sources/UI/Menu/Tools/Masternode/DWMasternodeFeaturesMenuViewController.m +++ b/DashWallet/Sources/UI/Menu/Tools/Masternode/DWMasternodeFeaturesMenuViewController.m @@ -20,7 +20,7 @@ #import "DWFormTableViewController.h" #import "DWImportWalletInfoViewController.h" #import "DWKeysOverviewViewController.h" -#import "DWMasternodeViewController.h" +#import "DWMasternodeListViewController.h" #import "DWRegisterMasternodeViewController.h" #import "DWToolsMenuModel.h" #import "DWUIKit.h" @@ -78,7 +78,7 @@ - (instancetype)initWithNibName:(nullable NSString *)nibNameOrNil bundle:(nullab } { - DWSelectorFormCellModel *cellModel = [[DWSelectorFormCellModel alloc] initWithTitle:NSLocalizedString(@"Masternode List", nil)]; + DWSelectorFormCellModel *cellModel = [[DWSelectorFormCellModel alloc] initWithTitle:NSLocalizedString(@"My Masternodes", nil)]; cellModel.accessoryType = DWSelectorFormAccessoryType_DisclosureIndicator; cellModel.didSelectBlock = ^(DWSelectorFormCellModel *_Nonnull cellModel, NSIndexPath *_Nonnull indexPath) { __strong typeof(weakSelf) strongSelf = weakSelf; @@ -91,6 +91,20 @@ - (instancetype)initWithNibName:(nullable NSString *)nibNameOrNil bundle:(nullab [items addObject:cellModel]; } + { + DWSelectorFormCellModel *cellModel = [[DWSelectorFormCellModel alloc] initWithTitle:NSLocalizedString(@"Masternode List", nil)]; + cellModel.accessoryType = DWSelectorFormAccessoryType_DisclosureIndicator; + cellModel.didSelectBlock = ^(DWSelectorFormCellModel *_Nonnull cellModel, NSIndexPath *_Nonnull indexPath) { + __strong typeof(weakSelf) strongSelf = weakSelf; + if (!strongSelf) { + return; + } + + [strongSelf showMasternodeList]; + }; + [items addObject:cellModel]; + } + return items; } @@ -134,7 +148,12 @@ - (void)showRegisterMasternode { } - (void)showMasternodeControl { - DWMasternodeViewController *masternodeViewController = [[DWMasternodeViewController alloc] init]; + DWMasternodeListViewController *masternodeViewController = [[DWMasternodeListViewController alloc] init]; + [self.navigationController pushViewController:masternodeViewController animated:YES]; +} + +- (void)showMasternodeList { + DWMasternodeListViewController *masternodeViewController = [[DWMasternodeListViewController alloc] init]; [self.navigationController pushViewController:masternodeViewController animated:YES]; } diff --git a/DashWallet/Sources/UI/Menu/Tools/Masternode/Masternode List/Cells/DWMasternodeTableViewCell.h b/DashWallet/Sources/UI/Menu/Tools/Masternode/Masternode List/Cells/DWMasternodeTableViewCell.h new file mode 100644 index 000000000..6eeafa4b6 --- /dev/null +++ b/DashWallet/Sources/UI/Menu/Tools/Masternode/Masternode List/Cells/DWMasternodeTableViewCell.h @@ -0,0 +1,30 @@ +// +// Created by Sam Westrich +// Copyright © 2019 Dash Core Group. All rights reserved. +// +// Licensed under the MIT License (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://opensource.org/licenses/MIT +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// + +#import "DWBaseFormTableViewCell.h" + +NS_ASSUME_NONNULL_BEGIN + +@interface DWMasternodeTableViewCell : DWBaseFormTableViewCell + +- (void)configureWithModel:(DSSimplifiedMasternodeEntry *)model + selected:(BOOL)selected + searchQuery:(nullable NSString *)searchQuery; + +@end + +NS_ASSUME_NONNULL_END diff --git a/DashWallet/Sources/UI/Menu/Tools/Masternode/Masternode List/Cells/DWMasternodeTableViewCell.m b/DashWallet/Sources/UI/Menu/Tools/Masternode/Masternode List/Cells/DWMasternodeTableViewCell.m new file mode 100644 index 000000000..7599ea756 --- /dev/null +++ b/DashWallet/Sources/UI/Menu/Tools/Masternode/Masternode List/Cells/DWMasternodeTableViewCell.m @@ -0,0 +1,199 @@ +// +// Created by Sam Westrich +// Copyright © 2019 Dash Core Group. All rights reserved. +// +// Licensed under the MIT License (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://opensource.org/licenses/MIT +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// + +#import "DWMasternodeTableViewCell.h" + +#import "DWSharedUIConstants.h" +#import "DWUIKit.h" +#import "NSAttributedString+DWHighlightText.h" + +NS_ASSUME_NONNULL_BEGIN + +static CGSize const ACCESSORY_SIZE = {26.0, 26.0}; + +@interface DWMasternodeTableViewCell () + +@property (readonly, strong, nonatomic) UILabel *codeLabel; +@property (readonly, strong, nonatomic) UILabel *nameLabel; +@property (readonly, strong, nonatomic) UILabel *priceLabel; +@property (readonly, nonatomic, strong) UIImageView *accessoryImageView; + +@property (nullable, nonatomic, strong) DSSimplifiedMasternodeEntry *model; +@property (nullable, nonatomic, copy) NSString *searchQuery; + +@end + +@implementation DWMasternodeTableViewCell + +- (instancetype)initWithStyle:(UITableViewCellStyle)style + reuseIdentifier:(nullable NSString *)reuseIdentifier { + self = [super initWithStyle:style reuseIdentifier:reuseIdentifier]; + if (self) { + UIView *contentView = self.roundedContentView; + NSParameterAssert(contentView); + + UILabel *codeLabel = [[UILabel alloc] initWithFrame:CGRectZero]; + codeLabel.translatesAutoresizingMaskIntoConstraints = NO; + codeLabel.backgroundColor = [UIColor dw_backgroundColor]; + codeLabel.textColor = [UIColor dw_darkTitleColor]; + codeLabel.font = [UIFont dw_fontForTextStyle:UIFontTextStyleBody]; + codeLabel.adjustsFontForContentSizeCategory = YES; + codeLabel.minimumScaleFactor = 0.5; + codeLabel.adjustsFontSizeToFitWidth = YES; + [codeLabel setContentCompressionResistancePriority:UILayoutPriorityRequired + forAxis:UILayoutConstraintAxisVertical]; + [codeLabel setContentCompressionResistancePriority:UILayoutPriorityDefaultHigh + 30 + forAxis:UILayoutConstraintAxisHorizontal]; + [codeLabel setContentHuggingPriority:UILayoutPriorityDefaultLow + 30 + forAxis:UILayoutConstraintAxisHorizontal]; + [contentView addSubview:codeLabel]; + _codeLabel = codeLabel; + + UILabel *nameLabel = [[UILabel alloc] initWithFrame:CGRectZero]; + nameLabel.translatesAutoresizingMaskIntoConstraints = NO; + nameLabel.backgroundColor = [UIColor dw_backgroundColor]; + nameLabel.textColor = [UIColor dw_quaternaryTextColor]; + nameLabel.font = [UIFont dw_fontForTextStyle:UIFontTextStyleCaption1]; + nameLabel.adjustsFontForContentSizeCategory = YES; + nameLabel.minimumScaleFactor = 0.5; + nameLabel.adjustsFontSizeToFitWidth = YES; + [nameLabel setContentCompressionResistancePriority:UILayoutPriorityRequired + forAxis:UILayoutConstraintAxisVertical]; + [nameLabel setContentCompressionResistancePriority:UILayoutPriorityDefaultHigh + 10 + forAxis:UILayoutConstraintAxisHorizontal]; + [nameLabel setContentHuggingPriority:UILayoutPriorityDefaultLow + 20 + forAxis:UILayoutConstraintAxisHorizontal]; + [contentView addSubview:nameLabel]; + _nameLabel = nameLabel; + + UILabel *priceLabel = [[UILabel alloc] initWithFrame:CGRectZero]; + priceLabel.translatesAutoresizingMaskIntoConstraints = NO; + priceLabel.backgroundColor = [UIColor dw_backgroundColor]; + priceLabel.textAlignment = NSTextAlignmentRight; + priceLabel.textColor = [UIColor dw_secondaryTextColor]; + priceLabel.font = [UIFont dw_fontForTextStyle:UIFontTextStyleSubheadline]; + priceLabel.adjustsFontForContentSizeCategory = YES; + priceLabel.minimumScaleFactor = 0.5; + priceLabel.adjustsFontSizeToFitWidth = YES; + [priceLabel setContentCompressionResistancePriority:UILayoutPriorityRequired + forAxis:UILayoutConstraintAxisVertical]; + [priceLabel setContentCompressionResistancePriority:UILayoutPriorityDefaultHigh + 20 + forAxis:UILayoutConstraintAxisHorizontal]; + [priceLabel setContentHuggingPriority:UILayoutPriorityDefaultLow + 10 + forAxis:UILayoutConstraintAxisHorizontal]; + [contentView addSubview:priceLabel]; + _priceLabel = priceLabel; + + UIImage *image = [UIImage imageNamed:@"icon_checkbox"]; + UIImage *highlightedImage = [UIImage imageNamed:@"icon_checkbox_checked"]; + NSParameterAssert(image); + NSParameterAssert(highlightedImage); + UIImageView *accessoryImageView = [[UIImageView alloc] initWithImage:image highlightedImage:highlightedImage]; + accessoryImageView.translatesAutoresizingMaskIntoConstraints = NO; + [contentView addSubview:accessoryImageView]; + _accessoryImageView = accessoryImageView; + + const CGFloat margin = DWDefaultMargin(); + const CGFloat padding = DW_FORM_CELL_VERTICAL_PADDING; + + [NSLayoutConstraint activateConstraints:@[ + [codeLabel.topAnchor constraintEqualToAnchor:contentView.topAnchor + constant:padding], + [codeLabel.leadingAnchor constraintEqualToAnchor:contentView.leadingAnchor + constant:margin], + [codeLabel.bottomAnchor constraintEqualToAnchor:contentView.bottomAnchor + constant:-padding], + + [nameLabel.topAnchor constraintEqualToAnchor:contentView.topAnchor + constant:padding], + [nameLabel.leadingAnchor constraintEqualToAnchor:codeLabel.trailingAnchor + constant:DW_FORM_CELL_SPACING], + [nameLabel.bottomAnchor constraintEqualToAnchor:contentView.bottomAnchor + constant:-padding], + + [priceLabel.topAnchor constraintEqualToAnchor:contentView.topAnchor + constant:padding], + [priceLabel.leadingAnchor constraintEqualToAnchor:nameLabel.trailingAnchor + constant:DW_FORM_CELL_SPACING], + + [accessoryImageView.leadingAnchor constraintEqualToAnchor:priceLabel.trailingAnchor + constant:DW_FORM_CELL_SPACING], + [accessoryImageView.trailingAnchor constraintEqualToAnchor:contentView.trailingAnchor + constant:-margin], + [accessoryImageView.centerYAnchor constraintEqualToAnchor:contentView.centerYAnchor], + [accessoryImageView.widthAnchor constraintEqualToConstant:ACCESSORY_SIZE.width], + [accessoryImageView.heightAnchor constraintEqualToConstant:ACCESSORY_SIZE.height], + ]]; + + NSNotificationCenter *notificationCenter = [NSNotificationCenter defaultCenter]; + [notificationCenter addObserver:self + selector:@selector(contentSizeCategoryDidChangeNotification) + name:UIContentSizeCategoryDidChangeNotification + object:nil]; + } + + return self; +} + +- (void)configureWithModel:(DSSimplifiedMasternodeEntry *)model + selected:(BOOL)selected + searchQuery:(nullable NSString *)searchQuery { + self.model = model; + self.searchQuery = searchQuery; + + self.priceLabel.text = model.host; + self.accessoryImageView.highlighted = selected; + + [self reloadAttributedData]; +} + +- (void)traitCollectionDidChange:(nullable UITraitCollection *)previousTraitCollection { + [super traitCollectionDidChange:previousTraitCollection]; + + [self reloadAttributedData]; +} + +#pragma mark - Private + +- (void)contentSizeCategoryDidChangeNotification { + [self reloadAttributedData]; +} + +- (void)reloadAttributedData { + NSString *highlightedText = self.searchQuery; + UIColor *highlightedTextColor = [UIColor dw_dashBlueColor]; + + UIFont *codeFont = [UIFont dw_fontForTextStyle:UIFontTextStyleBody]; + UIColor *codeColor = [UIColor dw_darkTitleColor]; + self.codeLabel.attributedText = [NSAttributedString attributedText:self.model.host + font:codeFont + textColor:codeColor + highlightedText:highlightedText + highlightedTextColor:highlightedTextColor]; + + UIFont *nameFont = [UIFont dw_fontForTextStyle:UIFontTextStyleCaption1]; + UIColor *nameColor = [UIColor dw_quaternaryTextColor]; + self.nameLabel.attributedText = [NSAttributedString attributedText:self.model.host + font:nameFont + textColor:nameColor + highlightedText:highlightedText + highlightedTextColor:highlightedTextColor]; +} + +@end + +NS_ASSUME_NONNULL_END diff --git a/DashWallet/Sources/UI/Menu/Tools/Masternode/Masternode List/DWMasternodeListViewController.h b/DashWallet/Sources/UI/Menu/Tools/Masternode/Masternode List/DWMasternodeListViewController.h new file mode 100644 index 000000000..2d4f9d561 --- /dev/null +++ b/DashWallet/Sources/UI/Menu/Tools/Masternode/Masternode List/DWMasternodeListViewController.h @@ -0,0 +1,26 @@ +// +// Created by Sam Westrich +// Copyright © 2019 Dash Core Group. All rights reserved. +// +// Licensed under the MIT License (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://opensource.org/licenses/MIT +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// + +#import + +NS_ASSUME_NONNULL_BEGIN + +@interface DWMasternodeListViewController : UITableViewController + +@end + +NS_ASSUME_NONNULL_END diff --git a/DashWallet/Sources/UI/Menu/Tools/Masternode/Masternode List/DWMasternodeListViewController.m b/DashWallet/Sources/UI/Menu/Tools/Masternode/Masternode List/DWMasternodeListViewController.m new file mode 100644 index 000000000..f000dde4a --- /dev/null +++ b/DashWallet/Sources/UI/Menu/Tools/Masternode/Masternode List/DWMasternodeListViewController.m @@ -0,0 +1,180 @@ +// +// Created by Sam Westrich +// Copyright © 2019 Dash Core Group. All rights reserved. +// +// Licensed under the MIT License (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://opensource.org/licenses/MIT +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// + +#import "DWMasternodeListViewController.h" +#import + +#import "DWMasternodeListModel.h" + +#import "DWMasternodeTableViewCell.h" +#import "DWSharedUIConstants.h" +#import "DWUIKit.h" +#import "UIView+DWRecursiveSubview.h" + + +NS_ASSUME_NONNULL_BEGIN + +@interface DWMasternodeListViewController () + +@property (nonatomic, strong) DWMasternodeListModel *model; + +@end + +@implementation DWMasternodeListViewController + +- (instancetype)init { + self = [super initWithStyle:UITableViewStylePlain]; + if (self) { + self.title = NSLocalizedString(@"Masternode List", nil); + self.hidesBottomBarWhenPushed = YES; + } + + return self; +} + +- (void)viewDidLoad { + [super viewDidLoad]; + + self.model = [[DWMasternodeListModel alloc] init]; + + [self setupView]; + [self setupSearchController]; + + [self.tableView reloadData]; +} + +- (void)viewWillAppear:(BOOL)animated { + [super viewWillAppear:animated]; + + // show search bar initially, but hide when scrolling + self.navigationItem.hidesSearchBarWhenScrolling = NO; + + const NSUInteger selectedIndex = self.model.selectedIndex; + if (selectedIndex != NSNotFound) { + NSIndexPath *indexPath = [NSIndexPath indexPathForRow:selectedIndex inSection:0]; + [self.tableView scrollToRowAtIndexPath:indexPath + atScrollPosition:UITableViewScrollPositionMiddle + animated:NO]; + } +} + +- (void)viewDidAppear:(BOOL)animated { + [super viewDidAppear:animated]; + + self.navigationItem.hidesSearchBarWhenScrolling = YES; +} + +- (void)viewDidLayoutSubviews { + [super viewDidLayoutSubviews]; + + // hide semi-transparent overlays above UITextField in UISearchBar to achive basic white color + UISearchController *searchController = self.navigationItem.searchController; + UISearchBar *searchBar = searchController.searchBar; + UITextField *searchTextField = (UITextField *)[searchBar dw_findSubviewOfClass:UITextField.class]; + UIView *searchTextFieldBackground = searchTextField.subviews.firstObject; + [searchTextFieldBackground.subviews makeObjectsPerformSelector:@selector(setHidden:) withObject:@YES]; +} + +- (UIStatusBarStyle)preferredStatusBarStyle { + return UIStatusBarStyleLightContent; +} + +- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section { + return self.model.items.count; +} + +- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { + NSString *cellId = DWMasternodeTableViewCell.dw_reuseIdentifier; + DWMasternodeTableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:cellId forIndexPath:indexPath]; + + DSSimplifiedMasternodeEntry *item = self.model.items[indexPath.row]; + const BOOL selected = indexPath.row == self.model.selectedIndex; + [cell configureWithModel:item selected:selected searchQuery:self.model.trimmedQuery]; + + return cell; +} + +#pragma mark - UITableViewDelegate + +- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath { + [tableView deselectRowAtIndexPath:indexPath animated:YES]; + + DSSimplifiedMasternodeEntry *item = self.model.items[indexPath.row]; + [self.model selectItem:item]; + + [self.tableView reloadRowsAtIndexPaths:self.tableView.indexPathsForVisibleRows + withRowAnimation:UITableViewRowAnimationNone]; +} + +#pragma mark - UISearchResultsUpdating + +- (void)updateSearchResultsForSearchController:(UISearchController *)searchController { + NSString *query = searchController.searchBar.text ?: @""; + [self.model filterItemsWithSearchQuery:query]; + + [self.tableView reloadData]; +} + +#pragma mark - UISearchBarDelegate + +- (void)searchBarSearchButtonClicked:(UISearchBar *)searchBar { + [searchBar resignFirstResponder]; +} + +#pragma mark - Private + +- (void)setupSearchController { + self.definesPresentationContext = YES; + + UISearchController *searchController = [[UISearchController alloc] initWithSearchResultsController:nil]; + searchController.searchResultsUpdater = self; + searchController.obscuresBackgroundDuringPresentation = NO; + self.navigationItem.searchController = searchController; + + UISearchBar *searchBar = searchController.searchBar; + searchBar.autocapitalizationType = UITextAutocapitalizationTypeNone; + searchBar.searchBarStyle = UISearchBarStyleMinimal; + searchBar.delegate = self; + searchBar.tintColor = [UIColor dw_tintColor]; + searchBar.barTintColor = [UIColor dw_dashNavigationBlueColor]; + + UITextField *searchTextField = (UITextField *)[searchBar dw_findSubviewOfClass:UITextField.class]; + searchTextField.tintColor = [UIColor dw_dashNavigationBlueColor]; + searchTextField.textColor = [UIColor dw_darkTitleColor]; + searchTextField.backgroundColor = [UIColor dw_backgroundColor]; + + UIView *searchTextFieldBackground = searchTextField.subviews.firstObject; + searchTextFieldBackground.backgroundColor = [UIColor dw_backgroundColor]; + searchTextFieldBackground.layer.cornerRadius = 10.0; + searchTextFieldBackground.layer.masksToBounds = YES; +} + +- (void)setupView { + self.view.backgroundColor = [UIColor dw_secondaryBackgroundColor]; + + self.tableView.rowHeight = UITableViewAutomaticDimension; + self.tableView.estimatedRowHeight = 74.0; + self.tableView.separatorStyle = UITableViewCellSeparatorStyleNone; + self.tableView.contentInset = UIEdgeInsetsMake(DWDefaultMargin(), 0.0, 0.0, 0.0); + + [self.tableView registerClass:DWMasternodeTableViewCell.class + forCellReuseIdentifier:DWMasternodeTableViewCell.dw_reuseIdentifier]; +} + +@end + +NS_ASSUME_NONNULL_END diff --git a/DashWallet/Sources/UI/Menu/Tools/Masternode/Masternode List/Models/DWMasternodeListModel.h b/DashWallet/Sources/UI/Menu/Tools/Masternode/Masternode List/Models/DWMasternodeListModel.h new file mode 100644 index 000000000..82a3c5c93 --- /dev/null +++ b/DashWallet/Sources/UI/Menu/Tools/Masternode/Masternode List/Models/DWMasternodeListModel.h @@ -0,0 +1,34 @@ +// +// Created by Sam Westrich +// Copyright © 2019 Dash Core Group. All rights reserved. +// +// Licensed under the MIT License (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://opensource.org/licenses/MIT +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// + +#import + +NS_ASSUME_NONNULL_BEGIN + +@interface DWMasternodeListModel : NSObject + +@property (readonly, copy, nonatomic) NSArray *items; +@property (nullable, readonly, nonatomic, copy) NSString *trimmedQuery; +@property (readonly, nonatomic, assign) NSUInteger selectedIndex; + +- (void)selectItem:(DSSimplifiedMasternodeEntry *)item; + +- (void)filterItemsWithSearchQuery:(NSString *)query; + +@end + +NS_ASSUME_NONNULL_END diff --git a/DashWallet/Sources/UI/Menu/Tools/Masternode/Masternode List/Models/DWMasternodeListModel.m b/DashWallet/Sources/UI/Menu/Tools/Masternode/Masternode List/Models/DWMasternodeListModel.m new file mode 100644 index 000000000..9ae68389c --- /dev/null +++ b/DashWallet/Sources/UI/Menu/Tools/Masternode/Masternode List/Models/DWMasternodeListModel.m @@ -0,0 +1,122 @@ +// +// Created by Sam Westrich +// Copyright © 2019 Dash Core Group. All rights reserved. +// +// Licensed under the MIT License (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://opensource.org/licenses/MIT +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// + +#import "DWMasternodeListModel.h" +#import "DWWeakContainer.h" +#import + +NS_ASSUME_NONNULL_BEGIN + + +@interface DWMasternodeListModel () + +@property (readonly, copy, nonatomic) NSArray *allItems; +@property (nullable, copy, nonatomic) NSArray *filteredItems; +@property (nullable, nonatomic, copy) NSString *trimmedQuery; +@property (nonatomic, assign, getter=isSearching) BOOL searching; +@property (nonatomic, assign) NSUInteger selectedIndex; + +@end + +@implementation DWMasternodeListModel + +- (instancetype)init { + self = [super init]; + if (self) { + + _selectedIndex = NSNotFound; + + _allItems = [self currentMasternodeList].simplifiedMasternodeListDictionaryByReversedRegistrationTransactionHash.allValues; + } + + return self; +} + +- (DSMasternodeList *)currentMasternodeList { + DSChain *chain = [DWEnvironment sharedInstance].currentChain; + DSMasternodeManager *masternodeManager = chain.chainManager.masternodeManager; + return masternodeManager.currentMasternodeList; +} + +- (NSArray *)items { + if (self.isSearching) { + return self.filteredItems ?: @[]; + } + else { + return self.allItems; + } +} + +- (void)selectItem:(DSSimplifiedMasternodeEntry *)item { + self.selectedIndex = [_allItems indexOfObject:item]; +} + +- (void)filterItemsWithSearchQuery:(NSString *)query { + self.searching = query.length > 0; + + NSCharacterSet *whitespaces = [NSCharacterSet whitespaceCharacterSet]; + NSString *trimmedQuery = [query stringByTrimmingCharactersInSet:whitespaces]; + self.trimmedQuery = trimmedQuery; + + NSPredicate *predicate = [self searchPredicateForTrimmedQuery:trimmedQuery]; + self.filteredItems = [self.allItems filteredArrayUsingPredicate:predicate]; +} + +#pragma mark - Private + +- (NSCompoundPredicate *)searchPredicateForTrimmedQuery:(NSString *)trimmedQuery { + NSArray *searchItems = [trimmedQuery componentsSeparatedByString:@" "]; + + NSMutableArray *searchItemsPredicate = [NSMutableArray array]; + for (NSString *searchString in searchItems) { + NSCompoundPredicate *orPredicate = [self findMatchesForString:searchString]; + [searchItemsPredicate addObject:orPredicate]; + } + + NSCompoundPredicate *andPredicate = [NSCompoundPredicate andPredicateWithSubpredicates:searchItemsPredicate]; + + return andPredicate; +} + +- (NSCompoundPredicate *)findMatchesForString:(NSString *)searchString { + NSMutableArray *searchItemsPredicate = [NSMutableArray array]; + + DSSimplifiedMasternodeEntry *item = nil; + NSArray *searchKeyPaths = @[ DW_KEYPATH(item, host) ]; + + for (NSString *keyPath in searchKeyPaths) { + NSExpression *leftExpression = [NSExpression expressionForKeyPath:keyPath]; + NSExpression *rightExpression = [NSExpression expressionForConstantValue:searchString]; + NSComparisonPredicateOptions options = + NSCaseInsensitivePredicateOption | NSDiacriticInsensitivePredicateOption; + NSComparisonPredicate *comparisonPredicate = + [NSComparisonPredicate predicateWithLeftExpression:leftExpression + rightExpression:rightExpression + modifier:NSDirectPredicateModifier + type:NSContainsPredicateOperatorType + options:options]; + [searchItemsPredicate addObject:comparisonPredicate]; + } + + NSCompoundPredicate *orPredicate = [NSCompoundPredicate orPredicateWithSubpredicates:searchItemsPredicate]; + + return orPredicate; +} + +@end + +NS_ASSUME_NONNULL_END diff --git a/DashWallet/Sources/UI/Menu/Tools/Masternode/Masternode Registration/DWRegisterMasternodeViewController.m b/DashWallet/Sources/UI/Menu/Tools/Masternode/Masternode Registration/DWRegisterMasternodeViewController.m index 3644f972c..e3b26338e 100644 --- a/DashWallet/Sources/UI/Menu/Tools/Masternode/Masternode Registration/DWRegisterMasternodeViewController.m +++ b/DashWallet/Sources/UI/Menu/Tools/Masternode/Masternode Registration/DWRegisterMasternodeViewController.m @@ -147,6 +147,14 @@ - (NSString *)actionForCellAtRow:(NSUInteger)row { } } +- (BOOL)resignCellsFirstResponders { + BOOL resigned = FALSE; + for (UITableViewCell *cell in self.formController.tableView.visibleCells) { + resigned |= [cell resignFirstResponder]; + } + return resigned; +} + - (void (^)(void))actionBlockForModel:(DWKeyValueFormCellModel *)model forCellAtRow:(NSUInteger)row { __weak __typeof(self) weakSelf = self; __weak __typeof(model) weakModel = model; @@ -158,7 +166,7 @@ - (NSString *)actionForCellAtRow:(NSUInteger)row { if (!strongSelf) { return; } - [[strongSelf.formController.tableView cellForRowAtIndexPath:[NSIndexPath indexPathForRow:DWMasternodeRegistrationCell_CollateralTx inSection:0]] resignFirstResponder]; + [strongSelf resignCellsFirstResponders]; [strongSelf.model lookupIndexesForCollateralHash:strongSelf.model.collateral.hash completion:^(DSTransaction *_Nonnull transaction, NSIndexSet *_Nonnull indexSet, NSError *_Nonnull error) { __strong __typeof(weakModel) strongModel = weakModel; @@ -343,19 +351,26 @@ - (DWBaseFormCellModel *)modelForRow:(NSUInteger)row { } - (NSArray *)items { - __weak typeof(self) weakSelf = self; - NSMutableArray *items = [NSMutableArray array]; for (NSUInteger i = 0; i < _DWMasternodeRegistrationCell_Count; i++) { [items addObject:[self modelForRow:i]]; } + return items; } - (DWBaseFormCellModel *)registerActionModel { + __weak typeof(self) weakSelf = self; DWActionFormCellModel *registerModel = [[DWActionFormCellModel alloc] initWithTitle:NSLocalizedString(@"View Signing Info", nil)]; registerModel.didSelectBlock = ^(DWActionFormCellModel *_Nonnull cellModel, NSIndexPath *_Nonnull indexPath) { + __strong __typeof(weakSelf) strongSelf = weakSelf; + if (!strongSelf) { + return; + } + + [strongSelf resignCellsFirstResponders]; + [self.model findCollateralTransactionWithCompletion:^(NSError *_Nonnull error) { if (error) { return; diff --git a/DashWallet/Sources/UI/Menu/Tools/Masternode/Payload Signing/DWSignPayloadViewController.m b/DashWallet/Sources/UI/Menu/Tools/Masternode/Payload Signing/DWSignPayloadViewController.m index 9697f4d8b..8814eed21 100644 --- a/DashWallet/Sources/UI/Menu/Tools/Masternode/Payload Signing/DWSignPayloadViewController.m +++ b/DashWallet/Sources/UI/Menu/Tools/Masternode/Payload Signing/DWSignPayloadViewController.m @@ -51,7 +51,10 @@ + (NSString *)actionButtonTitle { - (void)actionButtonAction:(id)sender { [self.contentView resignFirstResponder]; - [self.model verifySignature]; + BOOL signatureVerified = [self.model verifySignature]; + if (signatureVerified) { + [self.navigationController popViewControllerAnimated:YES]; + } } diff --git a/DashWallet/Sources/UI/Menu/Tools/Masternode/Payload Signing/Models/DWSignPayloadModel.h b/DashWallet/Sources/UI/Menu/Tools/Masternode/Payload Signing/Models/DWSignPayloadModel.h index bd3249cb3..5a3e6aee4 100644 --- a/DashWallet/Sources/UI/Menu/Tools/Masternode/Payload Signing/Models/DWSignPayloadModel.h +++ b/DashWallet/Sources/UI/Menu/Tools/Masternode/Payload Signing/Models/DWSignPayloadModel.h @@ -25,6 +25,8 @@ NS_ASSUME_NONNULL_BEGIN @property (nonatomic, strong) NSString *collateralAddress; @property (nonatomic, strong) NSString *payloadCollateralString; @property (nonatomic, strong) NSString *unverifiedSignatureString; +@property (nonatomic, strong) NSString *instructionStringForCopying; +@property (nonatomic, strong) NSString *instructionStringForPasting; @property (nonatomic, strong) NSData *signature; - (instancetype)initForCollateralAddress:(NSString *)collateralAddress withPayloadCollateralString:(NSString *)payloadCollateralString NS_DESIGNATED_INITIALIZER; diff --git a/DashWallet/Sources/UI/Menu/Tools/Masternode/Payload Signing/Models/DWSignPayloadModel.m b/DashWallet/Sources/UI/Menu/Tools/Masternode/Payload Signing/Models/DWSignPayloadModel.m index c120a0db5..7495b391f 100644 --- a/DashWallet/Sources/UI/Menu/Tools/Masternode/Payload Signing/Models/DWSignPayloadModel.m +++ b/DashWallet/Sources/UI/Menu/Tools/Masternode/Payload Signing/Models/DWSignPayloadModel.m @@ -24,6 +24,8 @@ - (instancetype)initForCollateralAddress:(NSString *)collateralAddress withPaylo if (self) { _collateralAddress = collateralAddress; _payloadCollateralString = payloadCollateralString; + _instructionStringForCopying = NSLocalizedString(@"Please copy the following and sign with the address in the wallet containing the 1000 Dash collateral", nil); + _instructionStringForPasting = NSLocalizedString(@"Please paste the signature from your wallet holding the 1000 Dash collateral below.", nil); } return self; } diff --git a/DashWallet/Sources/UI/Menu/Tools/Masternode/Payload Signing/Views/DWSignPayloadView.m b/DashWallet/Sources/UI/Menu/Tools/Masternode/Payload Signing/Views/DWSignPayloadView.m index d6b3b3104..29ba977f6 100644 --- a/DashWallet/Sources/UI/Menu/Tools/Masternode/Payload Signing/Views/DWSignPayloadView.m +++ b/DashWallet/Sources/UI/Menu/Tools/Masternode/Payload Signing/Views/DWSignPayloadView.m @@ -26,6 +26,8 @@ @interface DWSignPayloadView () @property (nonatomic, strong) UITextView *messageToSignTextView; @property (nonatomic, strong) UITextView *signedMessageInputTextView; +@property (nonatomic, strong) UILabel *instructionForCopyingLabel; +@property (nonatomic, strong) UILabel *instructionForPastingLabel; @end @@ -37,22 +39,59 @@ - (instancetype)initWithFrame:(CGRect)frame { self = [super initWithFrame:frame]; if (self) { self.backgroundColor = [UIColor dw_backgroundColor]; + + UILabel *instructionForCopyingLabel = [[UILabel alloc] initWithFrame:CGRectZero]; + instructionForCopyingLabel.translatesAutoresizingMaskIntoConstraints = NO; + instructionForCopyingLabel.backgroundColor = [UIColor dw_backgroundColor]; + instructionForCopyingLabel.layer.cornerRadius = 3; + instructionForCopyingLabel.lineBreakMode = NSLineBreakByWordWrapping; + instructionForCopyingLabel.numberOfLines = 4; + instructionForCopyingLabel.font = [UIFont dw_fontForTextStyle:UIFontTextStyleTitle3]; + + [self addSubview:instructionForCopyingLabel]; + _instructionForCopyingLabel = instructionForCopyingLabel; + + UITextView *messageToSignTextView = [[UITextView alloc] initWithFrame:CGRectZero]; messageToSignTextView.translatesAutoresizingMaskIntoConstraints = NO; - messageToSignTextView.backgroundColor = [UIColor dw_backgroundColor]; - messageToSignTextView.font = [UIFont dw_fontForTextStyle:UIFontTextStyleCallout]; + messageToSignTextView.backgroundColor = [UIColor dw_secondaryBackgroundColor]; + messageToSignTextView.layer.cornerRadius = 3; + messageToSignTextView.textContainer.lineBreakMode = NSLineBreakByCharWrapping; + messageToSignTextView.font = [UIFont dw_fontForTextStyle:UIFontTextStyleBody]; [self addSubview:messageToSignTextView]; _messageToSignTextView = messageToSignTextView; + UILabel *instructionForPastingLabel = [[UILabel alloc] initWithFrame:CGRectZero]; + instructionForPastingLabel.translatesAutoresizingMaskIntoConstraints = NO; + instructionForPastingLabel.backgroundColor = [UIColor dw_backgroundColor]; + instructionForPastingLabel.lineBreakMode = NSLineBreakByWordWrapping; + instructionForPastingLabel.numberOfLines = 4; + instructionForPastingLabel.font = [UIFont dw_fontForTextStyle:UIFontTextStyleCaption1]; + + [self addSubview:instructionForPastingLabel]; + _instructionForPastingLabel = instructionForPastingLabel; + UITextView *signedMessageInputTextView = [[UITextView alloc] initWithFrame:CGRectZero]; signedMessageInputTextView.translatesAutoresizingMaskIntoConstraints = NO; + signedMessageInputTextView.textContainer.lineBreakMode = NSLineBreakByCharWrapping; signedMessageInputTextView.delegate = self; + signedMessageInputTextView.backgroundColor = [UIColor whiteColor]; + signedMessageInputTextView.font = [UIFont dw_fontForTextStyle:UIFontTextStyleCallout]; [self addSubview:signedMessageInputTextView]; _signedMessageInputTextView = signedMessageInputTextView; [NSLayoutConstraint activateConstraints:@[ - [messageToSignTextView.topAnchor constraintEqualToAnchor:self.topAnchor - constant:DW_SIGNED_PAYLOAD_TOP_PADDING], + + [instructionForCopyingLabel.topAnchor constraintEqualToAnchor:self.topAnchor + constant:DW_SIGNED_PAYLOAD_TOP_PADDING], + [instructionForCopyingLabel.leadingAnchor constraintEqualToAnchor:self.leadingAnchor], + [instructionForCopyingLabel.trailingAnchor constraintEqualToAnchor:self.trailingAnchor], + [instructionForCopyingLabel.heightAnchor constraintEqualToAnchor:messageToSignTextView.heightAnchor + multiplier:0.5 + constant:0], + + [messageToSignTextView.topAnchor constraintEqualToAnchor:instructionForCopyingLabel.bottomAnchor + constant:DW_SIGNED_PAYLOAD_INTER_PADDING], [messageToSignTextView.leadingAnchor constraintEqualToAnchor:self.leadingAnchor], [messageToSignTextView.trailingAnchor constraintEqualToAnchor:self.trailingAnchor], @@ -60,12 +99,21 @@ - (instancetype)initWithFrame:(CGRect)frame { multiplier:0.67 constant:0], - [signedMessageInputTextView.topAnchor constraintEqualToAnchor:messageToSignTextView.bottomAnchor + [instructionForPastingLabel.topAnchor constraintEqualToAnchor:messageToSignTextView.bottomAnchor + constant:DW_SIGNED_PAYLOAD_INTER_PADDING], + + [instructionForPastingLabel.leadingAnchor constraintEqualToAnchor:self.leadingAnchor], + [instructionForPastingLabel.trailingAnchor constraintEqualToAnchor:self.trailingAnchor], + [instructionForPastingLabel.heightAnchor constraintEqualToAnchor:signedMessageInputTextView.heightAnchor + multiplier:0.33 + constant:0], + + [signedMessageInputTextView.topAnchor constraintEqualToAnchor:instructionForPastingLabel.bottomAnchor constant:DW_SIGNED_PAYLOAD_INTER_PADDING], [signedMessageInputTextView.leadingAnchor constraintEqualToAnchor:self.leadingAnchor], [signedMessageInputTextView.trailingAnchor constraintEqualToAnchor:self.trailingAnchor], [signedMessageInputTextView.bottomAnchor constraintEqualToAnchor:self.bottomAnchor - constant:-DW_SIGNED_PAYLOAD_BOTTOM_PADDING], + constant:DW_SIGNED_PAYLOAD_BOTTOM_PADDING], ]]; } return self; @@ -73,7 +121,9 @@ - (instancetype)initWithFrame:(CGRect)frame { - (void)setModel:(DWSignPayloadModel *)model { _model = model; - [self.messageToSignTextView setText:[NSString stringWithFormat:@"signmessage %@ %@", model.collateralAddress, model.payloadCollateralString]]; + self.messageToSignTextView.text = [NSString stringWithFormat:@"%@ %@", model.collateralAddress, model.payloadCollateralString]; + self.instructionForCopyingLabel.text = model.instructionStringForCopying; + self.instructionForPastingLabel.text = model.instructionStringForPasting; } - (BOOL)resignFirstResponder { diff --git a/DashWallet/ar.lproj/Localizable.strings b/DashWallet/ar.lproj/Localizable.strings index 5ae0b6748..e54093fc9 100644 --- a/DashWallet/ar.lproj/Localizable.strings +++ b/DashWallet/ar.lproj/Localizable.strings @@ -713,9 +713,15 @@ /* No comment provided by engineer. */ "Pending" = "Pending"; +/* No comment provided by engineer. */ +"Please copy the following and sign with the address in the wallet containing the 1000 Dash collateral" = "Please copy the following and sign with the address in the wallet containing the 1000 Dash collateral"; + /* No comment provided by engineer. */ "Please enter pin to upgrade wallet" = "يرجى إدخال الرقم السري لترقية المحفظة"; +/* No comment provided by engineer. */ +"Please paste the signature from your wallet holding the 1000 Dash collateral below." = "Please paste the signature from your wallet holding the 1000 Dash collateral below."; + /* No comment provided by engineer. */ "Please place your phone near NFC device." = "يرجى وضع هاتفك بالقرب من جهاز NFC."; diff --git a/DashWallet/bg.lproj/Localizable.strings b/DashWallet/bg.lproj/Localizable.strings index f568440da..4f7b7c38e 100644 --- a/DashWallet/bg.lproj/Localizable.strings +++ b/DashWallet/bg.lproj/Localizable.strings @@ -713,9 +713,15 @@ /* No comment provided by engineer. */ "Pending" = "Изчакване"; +/* No comment provided by engineer. */ +"Please copy the following and sign with the address in the wallet containing the 1000 Dash collateral" = "Please copy the following and sign with the address in the wallet containing the 1000 Dash collateral"; + /* No comment provided by engineer. */ "Please enter pin to upgrade wallet" = "Моля въведете ПИН за обновяването на портфейла"; +/* No comment provided by engineer. */ +"Please paste the signature from your wallet holding the 1000 Dash collateral below." = "Please paste the signature from your wallet holding the 1000 Dash collateral below."; + /* No comment provided by engineer. */ "Please place your phone near NFC device." = "Моля поставете вашият телефон близо до NFC устройство."; diff --git a/DashWallet/de.lproj/Localizable.strings b/DashWallet/de.lproj/Localizable.strings index 9573711f9..dc17668dc 100644 --- a/DashWallet/de.lproj/Localizable.strings +++ b/DashWallet/de.lproj/Localizable.strings @@ -713,9 +713,15 @@ /* No comment provided by engineer. */ "Pending" = "Ausstehend"; +/* No comment provided by engineer. */ +"Please copy the following and sign with the address in the wallet containing the 1000 Dash collateral" = "Please copy the following and sign with the address in the wallet containing the 1000 Dash collateral"; + /* No comment provided by engineer. */ "Please enter pin to upgrade wallet" = "PIN eingeben zum upgraden der Wallet"; +/* No comment provided by engineer. */ +"Please paste the signature from your wallet holding the 1000 Dash collateral below." = "Please paste the signature from your wallet holding the 1000 Dash collateral below."; + /* No comment provided by engineer. */ "Please place your phone near NFC device." = "Bitte halte dein Telefon nahe an das NFC-Gerät."; diff --git a/DashWallet/el.lproj/Localizable.strings b/DashWallet/el.lproj/Localizable.strings index 5d8b933e6..e77ae41b7 100644 --- a/DashWallet/el.lproj/Localizable.strings +++ b/DashWallet/el.lproj/Localizable.strings @@ -713,9 +713,15 @@ /* No comment provided by engineer. */ "Pending" = "Pending"; +/* No comment provided by engineer. */ +"Please copy the following and sign with the address in the wallet containing the 1000 Dash collateral" = "Please copy the following and sign with the address in the wallet containing the 1000 Dash collateral"; + /* No comment provided by engineer. */ "Please enter pin to upgrade wallet" = "Please enter pin to upgrade wallet"; +/* No comment provided by engineer. */ +"Please paste the signature from your wallet holding the 1000 Dash collateral below." = "Please paste the signature from your wallet holding the 1000 Dash collateral below."; + /* No comment provided by engineer. */ "Please place your phone near NFC device." = "Please place your phone near NFC device."; diff --git a/DashWallet/en.lproj/Localizable.strings b/DashWallet/en.lproj/Localizable.strings index 27529ae8a..b81d35ff0 100644 --- a/DashWallet/en.lproj/Localizable.strings +++ b/DashWallet/en.lproj/Localizable.strings @@ -713,9 +713,15 @@ /* No comment provided by engineer. */ "Pending" = "Pending"; +/* No comment provided by engineer. */ +"Please copy the following and sign with the address in the wallet containing the 1000 Dash collateral" = "Please copy the following and sign with the address in the wallet containing the 1000 Dash collateral"; + /* No comment provided by engineer. */ "Please enter pin to upgrade wallet" = "Please enter pin to upgrade wallet"; +/* No comment provided by engineer. */ +"Please paste the signature from your wallet holding the 1000 Dash collateral below." = "Please paste the signature from your wallet holding the 1000 Dash collateral below."; + /* No comment provided by engineer. */ "Please place your phone near NFC device." = "Please place your phone near NFC device."; diff --git a/DashWallet/es.lproj/Localizable.strings b/DashWallet/es.lproj/Localizable.strings index 7e3266eae..0d591dd20 100644 --- a/DashWallet/es.lproj/Localizable.strings +++ b/DashWallet/es.lproj/Localizable.strings @@ -713,9 +713,15 @@ /* No comment provided by engineer. */ "Pending" = "Pendiente"; +/* No comment provided by engineer. */ +"Please copy the following and sign with the address in the wallet containing the 1000 Dash collateral" = "Please copy the following and sign with the address in the wallet containing the 1000 Dash collateral"; + /* No comment provided by engineer. */ "Please enter pin to upgrade wallet" = "Por favor ingrese su pin para actualizar la billetera"; +/* No comment provided by engineer. */ +"Please paste the signature from your wallet holding the 1000 Dash collateral below." = "Please paste the signature from your wallet holding the 1000 Dash collateral below."; + /* No comment provided by engineer. */ "Please place your phone near NFC device." = "Coloca tu teléfono cerca del dispositivo NFC."; diff --git a/DashWallet/fr.lproj/Localizable.strings b/DashWallet/fr.lproj/Localizable.strings index c88863019..c2430997d 100644 --- a/DashWallet/fr.lproj/Localizable.strings +++ b/DashWallet/fr.lproj/Localizable.strings @@ -713,9 +713,15 @@ /* No comment provided by engineer. */ "Pending" = "En attente"; +/* No comment provided by engineer. */ +"Please copy the following and sign with the address in the wallet containing the 1000 Dash collateral" = "Please copy the following and sign with the address in the wallet containing the 1000 Dash collateral"; + /* No comment provided by engineer. */ "Please enter pin to upgrade wallet" = "Veuillez saisir votre code PIN pour mettre à jour le portefeuille"; +/* No comment provided by engineer. */ +"Please paste the signature from your wallet holding the 1000 Dash collateral below." = "Please paste the signature from your wallet holding the 1000 Dash collateral below."; + /* No comment provided by engineer. */ "Please place your phone near NFC device." = "Veuillez placer votre téléphone près de l'appareil NFC."; diff --git a/DashWallet/id.lproj/Localizable.strings b/DashWallet/id.lproj/Localizable.strings index 0be5c33d8..3751e6d7d 100644 --- a/DashWallet/id.lproj/Localizable.strings +++ b/DashWallet/id.lproj/Localizable.strings @@ -713,9 +713,15 @@ /* No comment provided by engineer. */ "Pending" = "Tertunda"; +/* No comment provided by engineer. */ +"Please copy the following and sign with the address in the wallet containing the 1000 Dash collateral" = "Please copy the following and sign with the address in the wallet containing the 1000 Dash collateral"; + /* No comment provided by engineer. */ "Please enter pin to upgrade wallet" = "Silakan masukkan pin untuk meningkatkan dompet"; +/* No comment provided by engineer. */ +"Please paste the signature from your wallet holding the 1000 Dash collateral below." = "Please paste the signature from your wallet holding the 1000 Dash collateral below."; + /* No comment provided by engineer. */ "Please place your phone near NFC device." = "Silakan letakkan ponsel Anda di dekat perangkat NFC."; diff --git a/DashWallet/it.lproj/Localizable.strings b/DashWallet/it.lproj/Localizable.strings index 1c9597b14..c2aa2db65 100644 --- a/DashWallet/it.lproj/Localizable.strings +++ b/DashWallet/it.lproj/Localizable.strings @@ -713,9 +713,15 @@ /* No comment provided by engineer. */ "Pending" = "In attesa"; +/* No comment provided by engineer. */ +"Please copy the following and sign with the address in the wallet containing the 1000 Dash collateral" = "Please copy the following and sign with the address in the wallet containing the 1000 Dash collateral"; + /* No comment provided by engineer. */ "Please enter pin to upgrade wallet" = "\nInserisci il PIN per aggiornare il portafoglio"; +/* No comment provided by engineer. */ +"Please paste the signature from your wallet holding the 1000 Dash collateral below." = "Please paste the signature from your wallet holding the 1000 Dash collateral below."; + /* No comment provided by engineer. */ "Please place your phone near NFC device." = "Perfavore posiziona il tuo telefono vicino al dispositivo NFC."; diff --git a/DashWallet/ja.lproj/Localizable.strings b/DashWallet/ja.lproj/Localizable.strings index cd0a2f320..663dec7aa 100644 --- a/DashWallet/ja.lproj/Localizable.strings +++ b/DashWallet/ja.lproj/Localizable.strings @@ -713,9 +713,15 @@ /* No comment provided by engineer. */ "Pending" = "保留中"; +/* No comment provided by engineer. */ +"Please copy the following and sign with the address in the wallet containing the 1000 Dash collateral" = "Please copy the following and sign with the address in the wallet containing the 1000 Dash collateral"; + /* No comment provided by engineer. */ "Please enter pin to upgrade wallet" = "ウォレットをアップグレードするためPINを入力してください"; +/* No comment provided by engineer. */ +"Please paste the signature from your wallet holding the 1000 Dash collateral below." = "Please paste the signature from your wallet holding the 1000 Dash collateral below."; + /* No comment provided by engineer. */ "Please place your phone near NFC device." = "あなたの携帯電話をNFCデバイスに近づけてください"; diff --git a/DashWallet/ko.lproj/Localizable.strings b/DashWallet/ko.lproj/Localizable.strings index 888cfe26a..2d8afe503 100644 --- a/DashWallet/ko.lproj/Localizable.strings +++ b/DashWallet/ko.lproj/Localizable.strings @@ -713,9 +713,15 @@ /* No comment provided by engineer. */ "Pending" = "대기 중"; +/* No comment provided by engineer. */ +"Please copy the following and sign with the address in the wallet containing the 1000 Dash collateral" = "Please copy the following and sign with the address in the wallet containing the 1000 Dash collateral"; + /* No comment provided by engineer. */ "Please enter pin to upgrade wallet" = "지갑을 업그레이드하려면 PIN을 입력하십시오"; +/* No comment provided by engineer. */ +"Please paste the signature from your wallet holding the 1000 Dash collateral below." = "Please paste the signature from your wallet holding the 1000 Dash collateral below."; + /* No comment provided by engineer. */ "Please place your phone near NFC device." = "휴대 전화를 NFC 기기 가까이에 두십시오."; diff --git a/DashWallet/nb.lproj/Localizable.strings b/DashWallet/nb.lproj/Localizable.strings index 37a7bbec9..16d310b3a 100644 --- a/DashWallet/nb.lproj/Localizable.strings +++ b/DashWallet/nb.lproj/Localizable.strings @@ -713,9 +713,15 @@ /* No comment provided by engineer. */ "Pending" = "Pending"; +/* No comment provided by engineer. */ +"Please copy the following and sign with the address in the wallet containing the 1000 Dash collateral" = "Please copy the following and sign with the address in the wallet containing the 1000 Dash collateral"; + /* No comment provided by engineer. */ "Please enter pin to upgrade wallet" = "Please enter pin to upgrade wallet"; +/* No comment provided by engineer. */ +"Please paste the signature from your wallet holding the 1000 Dash collateral below." = "Please paste the signature from your wallet holding the 1000 Dash collateral below."; + /* No comment provided by engineer. */ "Please place your phone near NFC device." = "Please place your phone near NFC device."; diff --git a/DashWallet/nl.lproj/Localizable.strings b/DashWallet/nl.lproj/Localizable.strings index 934e97586..5e6f065eb 100644 --- a/DashWallet/nl.lproj/Localizable.strings +++ b/DashWallet/nl.lproj/Localizable.strings @@ -713,9 +713,15 @@ /* No comment provided by engineer. */ "Pending" = "Wachtende"; +/* No comment provided by engineer. */ +"Please copy the following and sign with the address in the wallet containing the 1000 Dash collateral" = "Please copy the following and sign with the address in the wallet containing the 1000 Dash collateral"; + /* No comment provided by engineer. */ "Please enter pin to upgrade wallet" = "Voer je pincode in om de portemonnee bij te werken"; +/* No comment provided by engineer. */ +"Please paste the signature from your wallet holding the 1000 Dash collateral below." = "Please paste the signature from your wallet holding the 1000 Dash collateral below."; + /* No comment provided by engineer. */ "Please place your phone near NFC device." = "Houd u uw telefoon bij een NFC apparaat"; diff --git a/DashWallet/pl.lproj/Localizable.strings b/DashWallet/pl.lproj/Localizable.strings index 5c44f1220..6dc976745 100644 --- a/DashWallet/pl.lproj/Localizable.strings +++ b/DashWallet/pl.lproj/Localizable.strings @@ -713,9 +713,15 @@ /* No comment provided by engineer. */ "Pending" = "Oczekujący"; +/* No comment provided by engineer. */ +"Please copy the following and sign with the address in the wallet containing the 1000 Dash collateral" = "Please copy the following and sign with the address in the wallet containing the 1000 Dash collateral"; + /* No comment provided by engineer. */ "Please enter pin to upgrade wallet" = "Wpisz pin aby zaktualizować porfel. "; +/* No comment provided by engineer. */ +"Please paste the signature from your wallet holding the 1000 Dash collateral below." = "Please paste the signature from your wallet holding the 1000 Dash collateral below."; + /* No comment provided by engineer. */ "Please place your phone near NFC device." = "Przyłóż telefon do urządzenia NFC "; diff --git a/DashWallet/pt.lproj/Localizable.strings b/DashWallet/pt.lproj/Localizable.strings index dd3341a79..592e69e74 100644 --- a/DashWallet/pt.lproj/Localizable.strings +++ b/DashWallet/pt.lproj/Localizable.strings @@ -713,9 +713,15 @@ /* No comment provided by engineer. */ "Pending" = "Pendente"; +/* No comment provided by engineer. */ +"Please copy the following and sign with the address in the wallet containing the 1000 Dash collateral" = "Please copy the following and sign with the address in the wallet containing the 1000 Dash collateral"; + /* No comment provided by engineer. */ "Please enter pin to upgrade wallet" = "Por favor, digite pin para atualizar a carteira"; +/* No comment provided by engineer. */ +"Please paste the signature from your wallet holding the 1000 Dash collateral below." = "Please paste the signature from your wallet holding the 1000 Dash collateral below."; + /* No comment provided by engineer. */ "Please place your phone near NFC device." = "Por favor coloque seu telefone perto do dispositivo NFC"; diff --git a/DashWallet/ru.lproj/Localizable.strings b/DashWallet/ru.lproj/Localizable.strings index 6e9d12aee..60d5edea7 100644 --- a/DashWallet/ru.lproj/Localizable.strings +++ b/DashWallet/ru.lproj/Localizable.strings @@ -713,9 +713,15 @@ /* No comment provided by engineer. */ "Pending" = "В ожидании"; +/* No comment provided by engineer. */ +"Please copy the following and sign with the address in the wallet containing the 1000 Dash collateral" = "Please copy the following and sign with the address in the wallet containing the 1000 Dash collateral"; + /* No comment provided by engineer. */ "Please enter pin to upgrade wallet" = "Пожалуйста, введите PIN для выполнения обновления кошелька"; +/* No comment provided by engineer. */ +"Please paste the signature from your wallet holding the 1000 Dash collateral below." = "Please paste the signature from your wallet holding the 1000 Dash collateral below."; + /* No comment provided by engineer. */ "Please place your phone near NFC device." = "Пожалуйста, поместите ваш телефон рядом с NFC устройством."; diff --git a/DashWallet/sk.lproj/Localizable.strings b/DashWallet/sk.lproj/Localizable.strings index adae02417..be8675657 100644 --- a/DashWallet/sk.lproj/Localizable.strings +++ b/DashWallet/sk.lproj/Localizable.strings @@ -713,9 +713,15 @@ /* No comment provided by engineer. */ "Pending" = "Pending"; +/* No comment provided by engineer. */ +"Please copy the following and sign with the address in the wallet containing the 1000 Dash collateral" = "Please copy the following and sign with the address in the wallet containing the 1000 Dash collateral"; + /* No comment provided by engineer. */ "Please enter pin to upgrade wallet" = "Pre inováciu peňaženky zadajte pin"; +/* No comment provided by engineer. */ +"Please paste the signature from your wallet holding the 1000 Dash collateral below." = "Please paste the signature from your wallet holding the 1000 Dash collateral below."; + /* No comment provided by engineer. */ "Please place your phone near NFC device." = "Umiestnite Váš telefón blízko NFC zariadenia."; diff --git a/DashWallet/sq.lproj/Localizable.strings b/DashWallet/sq.lproj/Localizable.strings index 5abb9155d..b6fefd45f 100644 --- a/DashWallet/sq.lproj/Localizable.strings +++ b/DashWallet/sq.lproj/Localizable.strings @@ -713,9 +713,15 @@ /* No comment provided by engineer. */ "Pending" = "Pending"; +/* No comment provided by engineer. */ +"Please copy the following and sign with the address in the wallet containing the 1000 Dash collateral" = "Please copy the following and sign with the address in the wallet containing the 1000 Dash collateral"; + /* No comment provided by engineer. */ "Please enter pin to upgrade wallet" = "Please enter pin to upgrade wallet"; +/* No comment provided by engineer. */ +"Please paste the signature from your wallet holding the 1000 Dash collateral below." = "Please paste the signature from your wallet holding the 1000 Dash collateral below."; + /* No comment provided by engineer. */ "Please place your phone near NFC device." = "Please place your phone near NFC device."; diff --git a/DashWallet/sv.lproj/Localizable.strings b/DashWallet/sv.lproj/Localizable.strings index 91429fa50..512277904 100644 --- a/DashWallet/sv.lproj/Localizable.strings +++ b/DashWallet/sv.lproj/Localizable.strings @@ -713,9 +713,15 @@ /* No comment provided by engineer. */ "Pending" = "Pending"; +/* No comment provided by engineer. */ +"Please copy the following and sign with the address in the wallet containing the 1000 Dash collateral" = "Please copy the following and sign with the address in the wallet containing the 1000 Dash collateral"; + /* No comment provided by engineer. */ "Please enter pin to upgrade wallet" = "Please enter pin to upgrade wallet"; +/* No comment provided by engineer. */ +"Please paste the signature from your wallet holding the 1000 Dash collateral below." = "Please paste the signature from your wallet holding the 1000 Dash collateral below."; + /* No comment provided by engineer. */ "Please place your phone near NFC device." = "Please place your phone near NFC device."; diff --git a/DashWallet/th.lproj/Localizable.strings b/DashWallet/th.lproj/Localizable.strings index 4207388d5..2f28739d8 100644 --- a/DashWallet/th.lproj/Localizable.strings +++ b/DashWallet/th.lproj/Localizable.strings @@ -713,9 +713,15 @@ /* No comment provided by engineer. */ "Pending" = "Pending"; +/* No comment provided by engineer. */ +"Please copy the following and sign with the address in the wallet containing the 1000 Dash collateral" = "Please copy the following and sign with the address in the wallet containing the 1000 Dash collateral"; + /* No comment provided by engineer. */ "Please enter pin to upgrade wallet" = "โปรดใส่รหัสเพื่ออัพเกรด wallet"; +/* No comment provided by engineer. */ +"Please paste the signature from your wallet holding the 1000 Dash collateral below." = "Please paste the signature from your wallet holding the 1000 Dash collateral below."; + /* No comment provided by engineer. */ "Please place your phone near NFC device." = "โปรดวางมือถือของคุณใกล้กับอุปกรณ์ NFC"; diff --git a/DashWallet/tr.lproj/Localizable.strings b/DashWallet/tr.lproj/Localizable.strings index 9aba3bc22..93ba04150 100644 --- a/DashWallet/tr.lproj/Localizable.strings +++ b/DashWallet/tr.lproj/Localizable.strings @@ -713,9 +713,15 @@ /* No comment provided by engineer. */ "Pending" = "Bekliyor"; +/* No comment provided by engineer. */ +"Please copy the following and sign with the address in the wallet containing the 1000 Dash collateral" = "Please copy the following and sign with the address in the wallet containing the 1000 Dash collateral"; + /* No comment provided by engineer. */ "Please enter pin to upgrade wallet" = "Cüzdanı yükseltmek için lütfen pin kodunu girin"; +/* No comment provided by engineer. */ +"Please paste the signature from your wallet holding the 1000 Dash collateral below." = "Please paste the signature from your wallet holding the 1000 Dash collateral below."; + /* No comment provided by engineer. */ "Please place your phone near NFC device." = "Lütfen telefonunuzu bir NFC cihazının yakınına yerleştirin."; diff --git a/DashWallet/vi.lproj/Localizable.strings b/DashWallet/vi.lproj/Localizable.strings index 34db2a2f5..27c8da8ad 100644 --- a/DashWallet/vi.lproj/Localizable.strings +++ b/DashWallet/vi.lproj/Localizable.strings @@ -713,9 +713,15 @@ /* No comment provided by engineer. */ "Pending" = "Đang chờ"; +/* No comment provided by engineer. */ +"Please copy the following and sign with the address in the wallet containing the 1000 Dash collateral" = "Please copy the following and sign with the address in the wallet containing the 1000 Dash collateral"; + /* No comment provided by engineer. */ "Please enter pin to upgrade wallet" = "Hãy nhập mã để nâng cấp ví"; +/* No comment provided by engineer. */ +"Please paste the signature from your wallet holding the 1000 Dash collateral below." = "Please paste the signature from your wallet holding the 1000 Dash collateral below."; + /* No comment provided by engineer. */ "Please place your phone near NFC device." = "Hãy đặt điện thoại của bạn cạnh thiết bị NFC."; diff --git a/DashWallet/zh-Hans.lproj/Localizable.strings b/DashWallet/zh-Hans.lproj/Localizable.strings index ee7cbb46c..5e004520a 100644 --- a/DashWallet/zh-Hans.lproj/Localizable.strings +++ b/DashWallet/zh-Hans.lproj/Localizable.strings @@ -713,9 +713,15 @@ /* No comment provided by engineer. */ "Pending" = "Pending"; +/* No comment provided by engineer. */ +"Please copy the following and sign with the address in the wallet containing the 1000 Dash collateral" = "Please copy the following and sign with the address in the wallet containing the 1000 Dash collateral"; + /* No comment provided by engineer. */ "Please enter pin to upgrade wallet" = "请输入Pin码以升级钱包"; +/* No comment provided by engineer. */ +"Please paste the signature from your wallet holding the 1000 Dash collateral below." = "Please paste the signature from your wallet holding the 1000 Dash collateral below."; + /* No comment provided by engineer. */ "Please place your phone near NFC device." = "请将你的手机靠近NFC设备."; diff --git a/DashWallet/zh-Hant-TW.lproj/Localizable.strings b/DashWallet/zh-Hant-TW.lproj/Localizable.strings index 972522a98..90bb7afea 100644 --- a/DashWallet/zh-Hant-TW.lproj/Localizable.strings +++ b/DashWallet/zh-Hant-TW.lproj/Localizable.strings @@ -713,9 +713,15 @@ /* No comment provided by engineer. */ "Pending" = "Pending"; +/* No comment provided by engineer. */ +"Please copy the following and sign with the address in the wallet containing the 1000 Dash collateral" = "Please copy the following and sign with the address in the wallet containing the 1000 Dash collateral"; + /* No comment provided by engineer. */ "Please enter pin to upgrade wallet" = "請輸入密碼以升級錢包"; +/* No comment provided by engineer. */ +"Please paste the signature from your wallet holding the 1000 Dash collateral below." = "Please paste the signature from your wallet holding the 1000 Dash collateral below."; + /* No comment provided by engineer. */ "Please place your phone near NFC device." = "請將手機放在NFC設備附近。"; From 94a9d2b343bb4c574e567555176ca64b11902c6a Mon Sep 17 00:00:00 2001 From: Quantum Explorer Date: Wed, 13 Nov 2019 17:49:57 +0800 Subject: [PATCH 23/34] my masternodes UI initial work --- DashWallet.xcodeproj/project.pbxproj | 64 ++++-- .../DWMasternodeFeaturesMenuViewController.m | 3 +- .../Cells/DWLocalMasternodeTableViewCell.h | 28 +++ .../Cells/DWLocalMasternodeTableViewCell.m | 197 ++++++++++++++++++ .../DWLocalMasternodeListViewController.h | 26 +++ .../DWLocalMasternodeListViewController.m | 168 +++++++++++++++ .../Models/DWLocalMasternodeListModel.h | 31 +++ .../Models/DWLocalMasternodeListModel.m | 112 ++++++++++ .../Models/DWMasternodeListModel.m | 3 - 9 files changed, 606 insertions(+), 26 deletions(-) create mode 100644 DashWallet/Sources/UI/Menu/Tools/Masternode/Local Masternodes/Cells/DWLocalMasternodeTableViewCell.h create mode 100644 DashWallet/Sources/UI/Menu/Tools/Masternode/Local Masternodes/Cells/DWLocalMasternodeTableViewCell.m create mode 100644 DashWallet/Sources/UI/Menu/Tools/Masternode/Local Masternodes/DWLocalMasternodeListViewController.h create mode 100644 DashWallet/Sources/UI/Menu/Tools/Masternode/Local Masternodes/DWLocalMasternodeListViewController.m create mode 100644 DashWallet/Sources/UI/Menu/Tools/Masternode/Local Masternodes/Models/DWLocalMasternodeListModel.h create mode 100644 DashWallet/Sources/UI/Menu/Tools/Masternode/Local Masternodes/Models/DWLocalMasternodeListModel.m diff --git a/DashWallet.xcodeproj/project.pbxproj b/DashWallet.xcodeproj/project.pbxproj index 89698f0ab..382c99fb2 100644 --- a/DashWallet.xcodeproj/project.pbxproj +++ b/DashWallet.xcodeproj/project.pbxproj @@ -321,9 +321,7 @@ 2ADF83FA23632D1C008459A7 /* BRBubbleView.m in Sources */ = {isa = PBXBuildFile; fileRef = 759816E619357D6F005060EA /* BRBubbleView.m */; }; 2ADF83FF23633116008459A7 /* SharedAssets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 2ADF83FE23633116008459A7 /* SharedAssets.xcassets */; }; 2ADF840023633121008459A7 /* SharedAssets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 2ADF83FE23633116008459A7 /* SharedAssets.xcassets */; }; - 2AE125F8224113C600379C6F /* DWBaseMasternodeViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 2AE125F7224113C600379C6F /* DWBaseMasternodeViewController.m */; }; 2AE125FD2241151B00379C6F /* DWMasternodeTableViewCell.xib in Resources */ = {isa = PBXBuildFile; fileRef = 2AE125FB2241151B00379C6F /* DWMasternodeTableViewCell.xib */; }; - 2AE126002241342900379C6F /* DWResultsMasternodeViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 2AE125FF2241342900379C6F /* DWResultsMasternodeViewController.m */; }; 2AF26F3B230C0E4C007F9228 /* DWBaseSeedViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 2AF26F3A230C0E4C007F9228 /* DWBaseSeedViewController.m */; }; 2AF26F3E230C1F79007F9228 /* DWAmountViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 2AF26F3D230C1F79007F9228 /* DWAmountViewController.m */; }; 2AF26F41230C1F9D007F9228 /* DWAmountView.m in Sources */ = {isa = PBXBuildFile; fileRef = 2AF26F40230C1F9D007F9228 /* DWAmountView.m */; }; @@ -390,17 +388,8 @@ FB248B5D1F73803100405AE0 /* UserNotifications.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FB248B5C1F73803100405AE0 /* UserNotifications.framework */; }; FB248B631F79BB7C00405AE0 /* SafariServices.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FB248B621F79BB7C00405AE0 /* SafariServices.framework */; }; FB2E5537218BA161003A1B7C /* DWVersionManager.m in Sources */ = {isa = PBXBuildFile; fileRef = FB2E5536218BA161003A1B7C /* DWVersionManager.m */; }; - FB31C23C223BCFAA00BD0868 /* DWMasternodeRootViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = FB31C23B223BCFAA00BD0868 /* DWMasternodeRootViewController.m */; }; - FB31C253223BD3F600BD0868 /* DWReclaimMasternodeViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = FB31C23D223BD3F000BD0868 /* DWReclaimMasternodeViewController.m */; }; - FB31C254223BD3F600BD0868 /* DWMasternodeViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = FB31C23E223BD3F000BD0868 /* DWMasternodeViewController.m */; }; FB31C255223BD3F600BD0868 /* DWSignPayloadViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = FB31C246223BD3F200BD0868 /* DWSignPayloadViewController.m */; }; FB31C256223BD3F600BD0868 /* DWRegisterMasternodeViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = FB31C247223BD3F200BD0868 /* DWRegisterMasternodeViewController.m */; }; - FB31C257223BD3F600BD0868 /* DWProviderUpdateServiceTransactionsViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = FB31C249223BD3F300BD0868 /* DWProviderUpdateServiceTransactionsViewController.m */; }; - FB31C259223BD3F600BD0868 /* DWUpdateMasternodeRevocationViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = FB31C24B223BD3F400BD0868 /* DWUpdateMasternodeRevocationViewController.m */; }; - FB31C25A223BD3F600BD0868 /* DWUpdateMasternodeServiceViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = FB31C24C223BD3F400BD0868 /* DWUpdateMasternodeServiceViewController.m */; }; - FB31C25B223BD3F600BD0868 /* DWProviderUpdateRegistrarTransactionsViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = FB31C24D223BD3F400BD0868 /* DWProviderUpdateRegistrarTransactionsViewController.m */; }; - FB31C25C223BD3F600BD0868 /* DWMasternodeDetailViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = FB31C24E223BD3F500BD0868 /* DWMasternodeDetailViewController.m */; }; - FB31C25D223BD3F600BD0868 /* DWUpdateMasternodeRegistrarViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = FB31C250223BD3F500BD0868 /* DWUpdateMasternodeRegistrarViewController.m */; }; FB31C262223BD62D00BD0868 /* DWProviderUpdateServiceTableViewCell.m in Sources */ = {isa = PBXBuildFile; fileRef = FB31C25F223BD62C00BD0868 /* DWProviderUpdateServiceTableViewCell.m */; }; FB31C263223BD62D00BD0868 /* DWProviderUpdateRegistrarTableViewCell.m in Sources */ = {isa = PBXBuildFile; fileRef = FB31C260223BD62C00BD0868 /* DWProviderUpdateRegistrarTableViewCell.m */; }; FB3E9F60236125F600C09C5C /* (null) in Frameworks */ = {isa = PBXBuildFile; }; @@ -434,6 +423,9 @@ FBF4DA06237B9DFA005493A6 /* DWMasternodeListModel.m in Sources */ = {isa = PBXBuildFile; fileRef = FBF4DA05237B9DFA005493A6 /* DWMasternodeListModel.m */; }; FBF4DA09237BA341005493A6 /* DWMasternodeListViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = FBF4DA08237BA341005493A6 /* DWMasternodeListViewController.m */; }; FBF4DA0D237BA5BD005493A6 /* DWMasternodeTableViewCell.m in Sources */ = {isa = PBXBuildFile; fileRef = FBF4DA0C237BA5BD005493A6 /* DWMasternodeTableViewCell.m */; }; + FBF4DA13237BCF0C005493A6 /* DWLocalMasternodeListViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = FBF4DA12237BCF0C005493A6 /* DWLocalMasternodeListViewController.m */; }; + FBF4DA16237BCF68005493A6 /* DWLocalMasternodeListModel.m in Sources */ = {isa = PBXBuildFile; fileRef = FBF4DA15237BCF68005493A6 /* DWLocalMasternodeListModel.m */; }; + FBF4DA19237BF13F005493A6 /* DWLocalMasternodeTableViewCell.m in Sources */ = {isa = PBXBuildFile; fileRef = FBF4DA18237BF13F005493A6 /* DWLocalMasternodeTableViewCell.m */; }; FBFC2EC521137A7A00D20C57 /* Montserrat-Regular.otf in Resources */ = {isa = PBXBuildFile; fileRef = FBFC2EA421137A7900D20C57 /* Montserrat-Regular.otf */; }; FBFC2EC621137A7A00D20C57 /* Montserrat-Regular.otf in Resources */ = {isa = PBXBuildFile; fileRef = FBFC2EA421137A7900D20C57 /* Montserrat-Regular.otf */; }; FBFC2EC721137A7A00D20C57 /* Montserrat-Regular.otf in Resources */ = {isa = PBXBuildFile; fileRef = FBFC2EA421137A7900D20C57 /* Montserrat-Regular.otf */; }; @@ -1418,6 +1410,12 @@ FBF4DA08237BA341005493A6 /* DWMasternodeListViewController.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = DWMasternodeListViewController.m; sourceTree = ""; }; FBF4DA0B237BA5BD005493A6 /* DWMasternodeTableViewCell.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = DWMasternodeTableViewCell.h; sourceTree = ""; }; FBF4DA0C237BA5BD005493A6 /* DWMasternodeTableViewCell.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = DWMasternodeTableViewCell.m; sourceTree = ""; }; + FBF4DA11237BCF0C005493A6 /* DWLocalMasternodeListViewController.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = DWLocalMasternodeListViewController.h; sourceTree = ""; }; + FBF4DA12237BCF0C005493A6 /* DWLocalMasternodeListViewController.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = DWLocalMasternodeListViewController.m; sourceTree = ""; }; + FBF4DA14237BCF68005493A6 /* DWLocalMasternodeListModel.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = DWLocalMasternodeListModel.h; sourceTree = ""; }; + FBF4DA15237BCF68005493A6 /* DWLocalMasternodeListModel.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = DWLocalMasternodeListModel.m; sourceTree = ""; }; + FBF4DA17237BF13F005493A6 /* DWLocalMasternodeTableViewCell.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = DWLocalMasternodeTableViewCell.h; sourceTree = ""; }; + FBF4DA18237BF13F005493A6 /* DWLocalMasternodeTableViewCell.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = DWLocalMasternodeTableViewCell.m; sourceTree = ""; }; FBFC2EA421137A7900D20C57 /* Montserrat-Regular.otf */ = {isa = PBXFileReference; lastKnownFileType = file; path = "Montserrat-Regular.otf"; sourceTree = ""; }; FBFC2EA821137A7900D20C57 /* Montserrat-Medium.otf */ = {isa = PBXFileReference; lastKnownFileType = file; path = "Montserrat-Medium.otf"; sourceTree = ""; }; FBFC2EAC21137A7A00D20C57 /* Montserrat-SemiBold.otf */ = {isa = PBXFileReference; lastKnownFileType = file; path = "Montserrat-SemiBold.otf"; sourceTree = ""; }; @@ -3377,6 +3375,7 @@ FB1C3DC2236AD3C7004C2B05 /* Masternode */ = { isa = PBXGroup; children = ( + FBF4DA0E237BCE98005493A6 /* Local Masternodes */, FBF4DA02237B9D50005493A6 /* Masternode List */, FB031ADF2378FFAE00EF564B /* Payload Signing */, FB3FF0B12226416A0059A9A5 /* Masternode.storyboard */, @@ -3536,6 +3535,35 @@ path = Cells; sourceTree = ""; }; + FBF4DA0E237BCE98005493A6 /* Local Masternodes */ = { + isa = PBXGroup; + children = ( + FBF4DA10237BCEBE005493A6 /* Models */, + FBF4DA0F237BCEB6005493A6 /* Cells */, + FBF4DA11237BCF0C005493A6 /* DWLocalMasternodeListViewController.h */, + FBF4DA12237BCF0C005493A6 /* DWLocalMasternodeListViewController.m */, + ); + path = "Local Masternodes"; + sourceTree = ""; + }; + FBF4DA0F237BCEB6005493A6 /* Cells */ = { + isa = PBXGroup; + children = ( + FBF4DA17237BF13F005493A6 /* DWLocalMasternodeTableViewCell.h */, + FBF4DA18237BF13F005493A6 /* DWLocalMasternodeTableViewCell.m */, + ); + path = Cells; + sourceTree = ""; + }; + FBF4DA10237BCEBE005493A6 /* Models */ = { + isa = PBXGroup; + children = ( + FBF4DA14237BCF68005493A6 /* DWLocalMasternodeListModel.h */, + FBF4DA15237BCF68005493A6 /* DWLocalMasternodeListModel.m */, + ); + path = Models; + sourceTree = ""; + }; FBFC2E9E21137A4200D20C57 /* Montserrat */ = { isa = PBXGroup; children = ( @@ -4140,8 +4168,6 @@ isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( - FB31C25B223BD3F600BD0868 /* DWProviderUpdateRegistrarTransactionsViewController.m in Sources */, - FB31C25C223BD3F600BD0868 /* DWMasternodeDetailViewController.m in Sources */, 2AD1CE6E22DA357D00C99324 /* DWBaseViewController.m in Sources */, 2A44314722CF82D9009BAF7F /* DWBiometricAuthViewController.m in Sources */, 2A4E531422E9F0A200E5168A /* DWStartViewController.m in Sources */, @@ -4172,12 +4198,14 @@ 2AF26F3E230C1F79007F9228 /* DWAmountViewController.m in Sources */, 2A63003F2327B4BB00827825 /* DWPaymentOutput+DWView.m in Sources */, 2ACD53EE234C9D8E00650AD3 /* UIView+DWRecursiveSubview.m in Sources */, + FBF4DA19237BF13F005493A6 /* DWLocalMasternodeTableViewCell.m in Sources */, 2A7A7C10234B591300451078 /* DWBalanceNotifier.m in Sources */, 2A9CEBA822E1D5A200A50237 /* DWMainTabbarViewController.m in Sources */, 2AD1CEA822E0C8C900C99324 /* DWPreviewSeedPhraseModel.m in Sources */, 2A11F59521947CBE00E7B563 /* BRPeerEntity.m in Sources */, FB31C255223BD3F600BD0868 /* DWSignPayloadViewController.m in Sources */, FB1BF8C722C6F4B7003413C6 /* DWSignMessageViewController.m in Sources */, + FBF4DA16237BCF68005493A6 /* DWLocalMasternodeListModel.m in Sources */, 2A0C69CD23142F90001B8C90 /* DWModalPresentationAnimation.m in Sources */, 2A8B9E7A2302E67400FF8653 /* DWReceiveModel.m in Sources */, 2A74EFFB2305464C00C475EB /* DWRecoverTextView.m in Sources */, @@ -4287,6 +4315,7 @@ 2A9FFE8D2230FF4700956D5F /* DWSettingsViewController.m in Sources */, 2A0C69C623142AA4001B8C90 /* DWModalPresentationController.m in Sources */, FB031ADB2378832100EF564B /* DWActionFormCellModel.m in Sources */, + FBF4DA13237BCF0C005493A6 /* DWLocalMasternodeListViewController.m in Sources */, 2A9FFF1C2233E56E00956D5F /* DWUpholdCardCellModel.m in Sources */, 2ACCD86823195A3600A96B62 /* DWAmountPreviewView.m in Sources */, 2A7A7BC92347E0D700451078 /* DWBaseFormTableViewCell.m in Sources */, @@ -4335,7 +4364,6 @@ 2A4431C322D4CAEA009BAF7F /* DWBackupInfoViewController.m in Sources */, 2A9FFE9A2230FF4700956D5F /* DWUpholdRequestTransferModel.m in Sources */, BA7B53541BDAA0A800355E8D /* BRAppleWatchTransactionData.m in Sources */, - 2AE126002241342900379C6F /* DWResultsMasternodeViewController.m in Sources */, FB31C262223BD62D00BD0868 /* DWProviderUpdateServiceTableViewCell.m in Sources */, 2A7A7BB22347927700451078 /* DWMainMenuViewController.m in Sources */, 2ACCD8F0231ECDE000A96B62 /* DWPinField.m in Sources */, @@ -4353,7 +4381,6 @@ 2AF26F41230C1F9D007F9228 /* DWAmountView.m in Sources */, 2A74EFE92305264200C475EB /* DWBaseActionButtonViewController.m in Sources */, FB3FF0B822264DC60059A9A5 /* DWDerivationPathKeysViewController.m in Sources */, - FB31C25D223BD3F600BD0868 /* DWUpdateMasternodeRegistrarViewController.m in Sources */, FB4AB41921CA760E001CC324 /* DWStoryboardSegueWithCompletion.m in Sources */, FBFC2EFB211413EB00D20C57 /* DWWarningViewController.m in Sources */, 2A2CD6E822F46D40008C7BC9 /* DWBalanceModel.m in Sources */, @@ -4361,9 +4388,7 @@ 2AD1CE7722DB51B500C99324 /* DWCheckbox.m in Sources */, 2ACCD8592319399100A96B62 /* DWRequestAmountViewController.m in Sources */, 751B2B5C1B68911700EA87FB /* DWTxHistoryViewController.m in Sources */, - FB31C253223BD3F600BD0868 /* DWReclaimMasternodeViewController.m in Sources */, FB31C263223BD62D00BD0868 /* DWProviderUpdateRegistrarTableViewCell.m in Sources */, - FB31C25A223BD3F600BD0868 /* DWUpdateMasternodeServiceViewController.m in Sources */, 2A74EFF52305333000C475EB /* DWSeedUIConstants.m in Sources */, 2A11F59421947CBE00E7B563 /* BRTxOutputEntity.m in Sources */, 2A0C69B32312E8A0001B8C90 /* DWWindow.m in Sources */, @@ -4404,8 +4429,6 @@ 2A9FFF1E2233E56E00956D5F /* DWUpholdSelectCardModel.m in Sources */, 2A7A7BC3234797FC00451078 /* DWMainMenuModel.m in Sources */, 2A9FFCD7222EA87F00956D5F /* DSTransactionAmountTableViewCell.m in Sources */, - FB31C259223BD3F600BD0868 /* DWUpdateMasternodeRevocationViewController.m in Sources */, - FB31C254223BD3F600BD0868 /* DWMasternodeViewController.m in Sources */, FB8ACEB622E0502200EE5035 /* DWUpholdMainnetConstants.m in Sources */, FBCFEDEE236E50CD0086DE07 /* DWMasternodeRegistrationModel.m in Sources */, 759FBB36193290F600AB4465 /* DWRootViewController.m in Sources */, @@ -4421,7 +4444,6 @@ 2A9FFE852230FF4700956D5F /* DWBaseFormCellModel.m in Sources */, 2A1B7DC0232669FF00BA8C6A /* DWHomeViewController+DWBackupReminder.m in Sources */, 2A11F59C21947CBE00E7B563 /* BRTransactionEntity.m in Sources */, - FB31C257223BD3F600BD0868 /* DWProviderUpdateServiceTransactionsViewController.m in Sources */, 2A4E533822F023AB00E5168A /* DWHomeModel.m in Sources */, 2A9CEBB922E1FA1000A50237 /* DWHomeViewController.m in Sources */, 2A8B9E4022FD75C000FF8653 /* DWSegmentedControl.m in Sources */, @@ -4454,8 +4476,6 @@ 2AD1CE8422DC9B5D00C99324 /* DWVerifySeedPhraseViewController.m in Sources */, 2A9FFE9D2230FF4700956D5F /* DWUpholdTransferViewController.m in Sources */, 2A8F422021BEFEEA00858B91 /* DWAboutModel.m in Sources */, - FB31C23C223BCFAA00BD0868 /* DWMasternodeRootViewController.m in Sources */, - 2AE125F8224113C600379C6F /* DWBaseMasternodeViewController.m in Sources */, 2A4E531D22EA49FE00E5168A /* DWProgressView.m in Sources */, 75D5F3CE191EC270004AB296 /* main.m in Sources */, 2A8C24B423336FEA00000D43 /* DWQuickReceiveViewController.m in Sources */, diff --git a/DashWallet/Sources/UI/Menu/Tools/Masternode/DWMasternodeFeaturesMenuViewController.m b/DashWallet/Sources/UI/Menu/Tools/Masternode/DWMasternodeFeaturesMenuViewController.m index 6becd7e1c..c23faa81c 100644 --- a/DashWallet/Sources/UI/Menu/Tools/Masternode/DWMasternodeFeaturesMenuViewController.m +++ b/DashWallet/Sources/UI/Menu/Tools/Masternode/DWMasternodeFeaturesMenuViewController.m @@ -20,6 +20,7 @@ #import "DWFormTableViewController.h" #import "DWImportWalletInfoViewController.h" #import "DWKeysOverviewViewController.h" +#import "DWLocalMasternodeListViewController.h" #import "DWMasternodeListViewController.h" #import "DWRegisterMasternodeViewController.h" #import "DWToolsMenuModel.h" @@ -148,7 +149,7 @@ - (void)showRegisterMasternode { } - (void)showMasternodeControl { - DWMasternodeListViewController *masternodeViewController = [[DWMasternodeListViewController alloc] init]; + DWLocalMasternodeListViewController *masternodeViewController = [[DWLocalMasternodeListViewController alloc] init]; [self.navigationController pushViewController:masternodeViewController animated:YES]; } diff --git a/DashWallet/Sources/UI/Menu/Tools/Masternode/Local Masternodes/Cells/DWLocalMasternodeTableViewCell.h b/DashWallet/Sources/UI/Menu/Tools/Masternode/Local Masternodes/Cells/DWLocalMasternodeTableViewCell.h new file mode 100644 index 000000000..030c41edc --- /dev/null +++ b/DashWallet/Sources/UI/Menu/Tools/Masternode/Local Masternodes/Cells/DWLocalMasternodeTableViewCell.h @@ -0,0 +1,28 @@ +// +// Created by Sam Westrich +// Copyright © 2019 Dash Core Group. All rights reserved. +// +// Licensed under the MIT License (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://opensource.org/licenses/MIT +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// + +#import "DWBaseFormTableViewCell.h" + +NS_ASSUME_NONNULL_BEGIN + +@interface DWLocalMasternodeTableViewCell : DWBaseFormTableViewCell + +- (void)configureWithModel:(DSLocalMasternode *)model + searchQuery:(nullable NSString *)searchQuery; +@end + +NS_ASSUME_NONNULL_END diff --git a/DashWallet/Sources/UI/Menu/Tools/Masternode/Local Masternodes/Cells/DWLocalMasternodeTableViewCell.m b/DashWallet/Sources/UI/Menu/Tools/Masternode/Local Masternodes/Cells/DWLocalMasternodeTableViewCell.m new file mode 100644 index 000000000..cff5f8ecf --- /dev/null +++ b/DashWallet/Sources/UI/Menu/Tools/Masternode/Local Masternodes/Cells/DWLocalMasternodeTableViewCell.m @@ -0,0 +1,197 @@ +// +// Created by Sam Westrich +// Copyright © 2019 Dash Core Group. All rights reserved. +// +// Licensed under the MIT License (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://opensource.org/licenses/MIT +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// + +#import "DWLocalMasternodeTableViewCell.h" + +#import "DWSharedUIConstants.h" +#import "DWUIKit.h" +#import "NSAttributedString+DWHighlightText.h" + +NS_ASSUME_NONNULL_BEGIN + +static CGSize const ACCESSORY_SIZE = {26.0, 26.0}; + +@interface DWLocalMasternodeTableViewCell () + +@property (readonly, strong, nonatomic) UILabel *nameLabel; +@property (readonly, strong, nonatomic) UILabel *addressLabel; +@property (readonly, strong, nonatomic) UILabel *portLabel; +@property (readonly, nonatomic, strong) UIImageView *accessoryImageView; + +@property (nullable, nonatomic, strong) DSLocalMasternode *model; +@property (nullable, nonatomic, copy) NSString *searchQuery; + +@end + +@implementation DWLocalMasternodeTableViewCell + +- (instancetype)initWithStyle:(UITableViewCellStyle)style + reuseIdentifier:(nullable NSString *)reuseIdentifier { + self = [super initWithStyle:style reuseIdentifier:reuseIdentifier]; + if (self) { + UIView *contentView = self.roundedContentView; + NSParameterAssert(contentView); + + UILabel *nameLabel = [[UILabel alloc] initWithFrame:CGRectZero]; + nameLabel.translatesAutoresizingMaskIntoConstraints = NO; + nameLabel.backgroundColor = [UIColor dw_backgroundColor]; + nameLabel.textColor = [UIColor dw_darkTitleColor]; + nameLabel.font = [UIFont dw_fontForTextStyle:UIFontTextStyleBody]; + nameLabel.adjustsFontForContentSizeCategory = YES; + nameLabel.minimumScaleFactor = 0.5; + nameLabel.adjustsFontSizeToFitWidth = YES; + [nameLabel setContentCompressionResistancePriority:UILayoutPriorityRequired + forAxis:UILayoutConstraintAxisVertical]; + [nameLabel setContentCompressionResistancePriority:UILayoutPriorityDefaultHigh + 30 + forAxis:UILayoutConstraintAxisHorizontal]; + [nameLabel setContentHuggingPriority:UILayoutPriorityDefaultLow + 30 + forAxis:UILayoutConstraintAxisHorizontal]; + [contentView addSubview:nameLabel]; + _nameLabel = nameLabel; + + UILabel *addressLabel = [[UILabel alloc] initWithFrame:CGRectZero]; + addressLabel.translatesAutoresizingMaskIntoConstraints = NO; + addressLabel.backgroundColor = [UIColor dw_backgroundColor]; + addressLabel.textColor = [UIColor dw_quaternaryTextColor]; + addressLabel.font = [UIFont dw_fontForTextStyle:UIFontTextStyleCaption1]; + addressLabel.adjustsFontForContentSizeCategory = YES; + addressLabel.minimumScaleFactor = 0.5; + addressLabel.adjustsFontSizeToFitWidth = YES; + [addressLabel setContentCompressionResistancePriority:UILayoutPriorityRequired + forAxis:UILayoutConstraintAxisVertical]; + [addressLabel setContentCompressionResistancePriority:UILayoutPriorityDefaultHigh + 10 + forAxis:UILayoutConstraintAxisHorizontal]; + [addressLabel setContentHuggingPriority:UILayoutPriorityDefaultLow + 20 + forAxis:UILayoutConstraintAxisHorizontal]; + [contentView addSubview:addressLabel]; + _addressLabel = addressLabel; + + UILabel *portLabel = [[UILabel alloc] initWithFrame:CGRectZero]; + portLabel.translatesAutoresizingMaskIntoConstraints = NO; + portLabel.backgroundColor = [UIColor dw_backgroundColor]; + portLabel.textAlignment = NSTextAlignmentRight; + portLabel.textColor = [UIColor dw_secondaryTextColor]; + portLabel.font = [UIFont dw_fontForTextStyle:UIFontTextStyleSubheadline]; + portLabel.adjustsFontForContentSizeCategory = YES; + portLabel.minimumScaleFactor = 0.5; + portLabel.adjustsFontSizeToFitWidth = YES; + [portLabel setContentCompressionResistancePriority:UILayoutPriorityRequired + forAxis:UILayoutConstraintAxisVertical]; + [portLabel setContentCompressionResistancePriority:UILayoutPriorityDefaultHigh + 20 + forAxis:UILayoutConstraintAxisHorizontal]; + [portLabel setContentHuggingPriority:UILayoutPriorityDefaultLow + 10 + forAxis:UILayoutConstraintAxisHorizontal]; + [contentView addSubview:portLabel]; + portLabel = portLabel; + + UIImage *image = [UIImage imageNamed:@"icon_checkbox"]; + UIImage *highlightedImage = [UIImage imageNamed:@"icon_checkbox_checked"]; + NSParameterAssert(image); + NSParameterAssert(highlightedImage); + UIImageView *accessoryImageView = [[UIImageView alloc] initWithImage:image highlightedImage:highlightedImage]; + accessoryImageView.translatesAutoresizingMaskIntoConstraints = NO; + [contentView addSubview:accessoryImageView]; + _accessoryImageView = accessoryImageView; + + const CGFloat margin = DWDefaultMargin(); + const CGFloat padding = DW_FORM_CELL_VERTICAL_PADDING; + + [NSLayoutConstraint activateConstraints:@[ + [nameLabel.topAnchor constraintEqualToAnchor:contentView.topAnchor + constant:padding], + [nameLabel.leadingAnchor constraintEqualToAnchor:contentView.leadingAnchor + constant:margin], + [nameLabel.bottomAnchor constraintEqualToAnchor:contentView.bottomAnchor + constant:-padding], + + [addressLabel.topAnchor constraintEqualToAnchor:contentView.topAnchor + constant:padding], + [addressLabel.leadingAnchor constraintEqualToAnchor:nameLabel.trailingAnchor + constant:DW_FORM_CELL_SPACING], + [addressLabel.bottomAnchor constraintEqualToAnchor:contentView.bottomAnchor + constant:-padding], + + [portLabel.topAnchor constraintEqualToAnchor:contentView.topAnchor + constant:padding], + [portLabel.leadingAnchor constraintEqualToAnchor:addressLabel.trailingAnchor + constant:DW_FORM_CELL_SPACING], + + [accessoryImageView.leadingAnchor constraintEqualToAnchor:portLabel.trailingAnchor + constant:DW_FORM_CELL_SPACING], + [accessoryImageView.trailingAnchor constraintEqualToAnchor:contentView.trailingAnchor + constant:-margin], + [accessoryImageView.centerYAnchor constraintEqualToAnchor:contentView.centerYAnchor], + [accessoryImageView.widthAnchor constraintEqualToConstant:ACCESSORY_SIZE.width], + [accessoryImageView.heightAnchor constraintEqualToConstant:ACCESSORY_SIZE.height], + ]]; + + NSNotificationCenter *notificationCenter = [NSNotificationCenter defaultCenter]; + [notificationCenter addObserver:self + selector:@selector(contentSizeCategoryDidChangeNotification) + name:UIContentSizeCategoryDidChangeNotification + object:nil]; + } + + return self; +} + +- (void)configureWithModel:(DSLocalMasternode *)model + searchQuery:(nullable NSString *)searchQuery { + self.model = model; + self.searchQuery = searchQuery; + + self.portLabel.text = model.ipAddressString; + + [self reloadAttributedData]; +} + +- (void)traitCollectionDidChange:(nullable UITraitCollection *)previousTraitCollection { + [super traitCollectionDidChange:previousTraitCollection]; + + [self reloadAttributedData]; +} + +#pragma mark - Private + +- (void)contentSizeCategoryDidChangeNotification { + [self reloadAttributedData]; +} + +- (void)reloadAttributedData { + NSString *highlightedText = self.searchQuery; + UIColor *highlightedTextColor = [UIColor dw_dashBlueColor]; + + UIFont *codeFont = [UIFont dw_fontForTextStyle:UIFontTextStyleBody]; + UIColor *codeColor = [UIColor dw_darkTitleColor]; + self.nameLabel.attributedText = [NSAttributedString attributedText:self.model.ipAddressString + font:codeFont + textColor:codeColor + highlightedText:highlightedText + highlightedTextColor:highlightedTextColor]; + + UIFont *nameFont = [UIFont dw_fontForTextStyle:UIFontTextStyleCaption1]; + UIColor *nameColor = [UIColor dw_quaternaryTextColor]; + self.addressLabel.attributedText = [NSAttributedString attributedText:self.model.ipAddressString + font:nameFont + textColor:nameColor + highlightedText:highlightedText + highlightedTextColor:highlightedTextColor]; +} + +@end + +NS_ASSUME_NONNULL_END diff --git a/DashWallet/Sources/UI/Menu/Tools/Masternode/Local Masternodes/DWLocalMasternodeListViewController.h b/DashWallet/Sources/UI/Menu/Tools/Masternode/Local Masternodes/DWLocalMasternodeListViewController.h new file mode 100644 index 000000000..4d0c28c19 --- /dev/null +++ b/DashWallet/Sources/UI/Menu/Tools/Masternode/Local Masternodes/DWLocalMasternodeListViewController.h @@ -0,0 +1,26 @@ +// +// Created by Sam Westrich +// Copyright © 2019 Dash Core Group. All rights reserved. +// +// Licensed under the MIT License (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://opensource.org/licenses/MIT +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// + +#import + +NS_ASSUME_NONNULL_BEGIN + +@interface DWLocalMasternodeListViewController : UITableViewController + +@end + +NS_ASSUME_NONNULL_END diff --git a/DashWallet/Sources/UI/Menu/Tools/Masternode/Local Masternodes/DWLocalMasternodeListViewController.m b/DashWallet/Sources/UI/Menu/Tools/Masternode/Local Masternodes/DWLocalMasternodeListViewController.m new file mode 100644 index 000000000..5ed64699b --- /dev/null +++ b/DashWallet/Sources/UI/Menu/Tools/Masternode/Local Masternodes/DWLocalMasternodeListViewController.m @@ -0,0 +1,168 @@ +// +// Created by Sam Westrich +// Copyright © 2019 Dash Core Group. All rights reserved. +// +// Licensed under the MIT License (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://opensource.org/licenses/MIT +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// + +#import "DWLocalMasternodeListViewController.h" + +#import + +#import "DWLocalMasternodeListModel.h" + +#import "DWLocalMasternodeTableViewCell.h" +#import "DWSharedUIConstants.h" +#import "DWUIKit.h" +#import "UIView+DWRecursiveSubview.h" + + +NS_ASSUME_NONNULL_BEGIN + +@interface DWLocalMasternodeListViewController () + +@property (nonatomic, strong) DWLocalMasternodeListModel *model; + +@end + +@implementation DWLocalMasternodeListViewController + +- (instancetype)init { + self = [super initWithStyle:UITableViewStylePlain]; + if (self) { + self.title = NSLocalizedString(@"My Masternodes", nil); + self.hidesBottomBarWhenPushed = YES; + } + + return self; +} + +- (void)viewDidLoad { + [super viewDidLoad]; + + self.model = [[DWLocalMasternodeListModel alloc] init]; + + [self setupView]; + [self setupSearchController]; + + [self.tableView reloadData]; +} + +- (void)viewWillAppear:(BOOL)animated { + [super viewWillAppear:animated]; + + // show search bar initially, but hide when scrolling + self.navigationItem.hidesSearchBarWhenScrolling = NO; +} + +- (void)viewDidAppear:(BOOL)animated { + [super viewDidAppear:animated]; + + self.navigationItem.hidesSearchBarWhenScrolling = YES; +} + +- (void)viewDidLayoutSubviews { + [super viewDidLayoutSubviews]; + + // hide semi-transparent overlays above UITextField in UISearchBar to achive basic white color + UISearchController *searchController = self.navigationItem.searchController; + UISearchBar *searchBar = searchController.searchBar; + UITextField *searchTextField = (UITextField *)[searchBar dw_findSubviewOfClass:UITextField.class]; + UIView *searchTextFieldBackground = searchTextField.subviews.firstObject; + [searchTextFieldBackground.subviews makeObjectsPerformSelector:@selector(setHidden:) withObject:@YES]; +} + +- (UIStatusBarStyle)preferredStatusBarStyle { + return UIStatusBarStyleLightContent; +} + +- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section { + return self.model.items.count; +} + +- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { + NSString *cellId = DWLocalMasternodeTableViewCell.dw_reuseIdentifier; + DWLocalMasternodeTableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:cellId forIndexPath:indexPath]; + + DSLocalMasternode *item = self.model.items[indexPath.row]; + [cell configureWithModel:item searchQuery:self.model.trimmedQuery]; + + return cell; +} + +#pragma mark - UITableViewDelegate + +- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath { + [tableView deselectRowAtIndexPath:indexPath animated:YES]; + + DSLocalMasternode *item = self.model.items[indexPath.row]; +} + +#pragma mark - UISearchResultsUpdating + +- (void)updateSearchResultsForSearchController:(UISearchController *)searchController { + NSString *query = searchController.searchBar.text ?: @""; + [self.model filterItemsWithSearchQuery:query]; + + [self.tableView reloadData]; +} + +#pragma mark - UISearchBarDelegate + +- (void)searchBarSearchButtonClicked:(UISearchBar *)searchBar { + [searchBar resignFirstResponder]; +} + +#pragma mark - Private + +- (void)setupSearchController { + self.definesPresentationContext = YES; + + UISearchController *searchController = [[UISearchController alloc] initWithSearchResultsController:nil]; + searchController.searchResultsUpdater = self; + searchController.obscuresBackgroundDuringPresentation = NO; + self.navigationItem.searchController = searchController; + + UISearchBar *searchBar = searchController.searchBar; + searchBar.autocapitalizationType = UITextAutocapitalizationTypeNone; + searchBar.searchBarStyle = UISearchBarStyleMinimal; + searchBar.delegate = self; + searchBar.tintColor = [UIColor dw_tintColor]; + searchBar.barTintColor = [UIColor dw_dashNavigationBlueColor]; + + UITextField *searchTextField = (UITextField *)[searchBar dw_findSubviewOfClass:UITextField.class]; + searchTextField.tintColor = [UIColor dw_dashNavigationBlueColor]; + searchTextField.textColor = [UIColor dw_darkTitleColor]; + searchTextField.backgroundColor = [UIColor dw_backgroundColor]; + + UIView *searchTextFieldBackground = searchTextField.subviews.firstObject; + searchTextFieldBackground.backgroundColor = [UIColor dw_backgroundColor]; + searchTextFieldBackground.layer.cornerRadius = 10.0; + searchTextFieldBackground.layer.masksToBounds = YES; +} + +- (void)setupView { + self.view.backgroundColor = [UIColor dw_secondaryBackgroundColor]; + + self.tableView.rowHeight = UITableViewAutomaticDimension; + self.tableView.estimatedRowHeight = 74.0; + self.tableView.separatorStyle = UITableViewCellSeparatorStyleNone; + self.tableView.contentInset = UIEdgeInsetsMake(DWDefaultMargin(), 0.0, 0.0, 0.0); + + [self.tableView registerClass:DWLocalMasternodeTableViewCell.class + forCellReuseIdentifier:DWLocalMasternodeTableViewCell.dw_reuseIdentifier]; +} + +@end + +NS_ASSUME_NONNULL_END diff --git a/DashWallet/Sources/UI/Menu/Tools/Masternode/Local Masternodes/Models/DWLocalMasternodeListModel.h b/DashWallet/Sources/UI/Menu/Tools/Masternode/Local Masternodes/Models/DWLocalMasternodeListModel.h new file mode 100644 index 000000000..0d274bff0 --- /dev/null +++ b/DashWallet/Sources/UI/Menu/Tools/Masternode/Local Masternodes/Models/DWLocalMasternodeListModel.h @@ -0,0 +1,31 @@ +// +// Created by Sam Westrich +// Copyright © 2019 Dash Core Group. All rights reserved. +// +// Licensed under the MIT License (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://opensource.org/licenses/MIT +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// + +#import + +NS_ASSUME_NONNULL_BEGIN + +@interface DWLocalMasternodeListModel : NSObject + +@property (readonly, copy, nonatomic) NSArray *items; +@property (nullable, readonly, nonatomic, copy) NSString *trimmedQuery; + +- (void)filterItemsWithSearchQuery:(NSString *)query; + +@end + +NS_ASSUME_NONNULL_END diff --git a/DashWallet/Sources/UI/Menu/Tools/Masternode/Local Masternodes/Models/DWLocalMasternodeListModel.m b/DashWallet/Sources/UI/Menu/Tools/Masternode/Local Masternodes/Models/DWLocalMasternodeListModel.m new file mode 100644 index 000000000..4a3315b88 --- /dev/null +++ b/DashWallet/Sources/UI/Menu/Tools/Masternode/Local Masternodes/Models/DWLocalMasternodeListModel.m @@ -0,0 +1,112 @@ +// +// Created by Sam Westrich +// Copyright © 2019 Dash Core Group. All rights reserved. +// +// Licensed under the MIT License (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://opensource.org/licenses/MIT +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// + +#import "DWLocalMasternodeListModel.h" + +NS_ASSUME_NONNULL_BEGIN + +@interface DWLocalMasternodeListModel () + +@property (readonly, copy, nonatomic) NSArray *allItems; +@property (nullable, copy, nonatomic) NSArray *filteredItems; +@property (nullable, nonatomic, copy) NSString *trimmedQuery; +@property (nonatomic, assign, getter=isSearching) BOOL searching; + +@end + +@implementation DWLocalMasternodeListModel + +- (instancetype)init { + self = [super init]; + if (self) { + + _allItems = [self localMasternodes]; + } + + return self; +} + +- (NSArray *)localMasternodes { + DSChain *chain = [DWEnvironment sharedInstance].currentChain; + DSMasternodeManager *masternodeManager = chain.chainManager.masternodeManager; + return [masternodeManager localMasternodes]; +} + +- (NSArray *)items { + if (self.isSearching) { + return self.filteredItems ?: @[]; + } + else { + return self.allItems; + } +} + +- (void)filterItemsWithSearchQuery:(NSString *)query { + self.searching = query.length > 0; + + NSCharacterSet *whitespaces = [NSCharacterSet whitespaceCharacterSet]; + NSString *trimmedQuery = [query stringByTrimmingCharactersInSet:whitespaces]; + self.trimmedQuery = trimmedQuery; + + NSPredicate *predicate = [self searchPredicateForTrimmedQuery:trimmedQuery]; + self.filteredItems = [self.allItems filteredArrayUsingPredicate:predicate]; +} + +#pragma mark - Private + +- (NSCompoundPredicate *)searchPredicateForTrimmedQuery:(NSString *)trimmedQuery { + NSArray *searchItems = [trimmedQuery componentsSeparatedByString:@" "]; + + NSMutableArray *searchItemsPredicate = [NSMutableArray array]; + for (NSString *searchString in searchItems) { + NSCompoundPredicate *orPredicate = [self findMatchesForString:searchString]; + [searchItemsPredicate addObject:orPredicate]; + } + + NSCompoundPredicate *andPredicate = [NSCompoundPredicate andPredicateWithSubpredicates:searchItemsPredicate]; + + return andPredicate; +} + +- (NSCompoundPredicate *)findMatchesForString:(NSString *)searchString { + NSMutableArray *searchItemsPredicate = [NSMutableArray array]; + + DSLocalMasternode *item = nil; + NSArray *searchKeyPaths = @[ DW_KEYPATH(item, ipAddressString) ]; + + for (NSString *keyPath in searchKeyPaths) { + NSExpression *leftExpression = [NSExpression expressionForKeyPath:keyPath]; + NSExpression *rightExpression = [NSExpression expressionForConstantValue:searchString]; + NSComparisonPredicateOptions options = + NSCaseInsensitivePredicateOption | NSDiacriticInsensitivePredicateOption; + NSComparisonPredicate *comparisonPredicate = + [NSComparisonPredicate predicateWithLeftExpression:leftExpression + rightExpression:rightExpression + modifier:NSDirectPredicateModifier + type:NSContainsPredicateOperatorType + options:options]; + [searchItemsPredicate addObject:comparisonPredicate]; + } + + NSCompoundPredicate *orPredicate = [NSCompoundPredicate orPredicateWithSubpredicates:searchItemsPredicate]; + + return orPredicate; +} + +@end + +NS_ASSUME_NONNULL_END diff --git a/DashWallet/Sources/UI/Menu/Tools/Masternode/Masternode List/Models/DWMasternodeListModel.m b/DashWallet/Sources/UI/Menu/Tools/Masternode/Masternode List/Models/DWMasternodeListModel.m index 9ae68389c..e6e8734bc 100644 --- a/DashWallet/Sources/UI/Menu/Tools/Masternode/Masternode List/Models/DWMasternodeListModel.m +++ b/DashWallet/Sources/UI/Menu/Tools/Masternode/Masternode List/Models/DWMasternodeListModel.m @@ -16,12 +16,9 @@ // #import "DWMasternodeListModel.h" -#import "DWWeakContainer.h" -#import NS_ASSUME_NONNULL_BEGIN - @interface DWMasternodeListModel () @property (readonly, copy, nonatomic) NSArray *allItems; From a8d909e090e96bf16bcbd72886c465a78489e2ff Mon Sep 17 00:00:00 2001 From: Quantum Explorer Date: Mon, 18 Nov 2019 09:24:20 +0700 Subject: [PATCH 24/34] masternode list improvements --- DashWallet.xcodeproj/project.pbxproj | 6 + .../Forms/KeyValue/DWKeyValueFormCellModel.h | 1 + .../Forms/KeyValue/DWKeyValueFormCellModel.m | 1 + .../KeyValue/DWKeyValueFormTableViewCell.m | 3 + .../Cells/DWLocalMasternodeTableViewCell.m | 30 +- .../DWLocalMasternodeControlViewController.h | 32 ++ .../DWLocalMasternodeControlViewController.m | 352 ++++++++++++++++++ .../DWLocalMasternodeListViewController.m | 6 +- .../Cells/DWMasternodeTableViewCell.m | 165 ++++---- .../Models/DWMasternodeListModel.m | 3 +- DashWallet/ar.lproj/Localizable.strings | 48 +++ DashWallet/bg.lproj/Localizable.strings | 48 +++ DashWallet/de.lproj/Localizable.strings | 48 +++ DashWallet/el.lproj/Localizable.strings | 48 +++ DashWallet/en.lproj/Localizable.strings | 48 +++ DashWallet/es.lproj/Localizable.strings | 48 +++ DashWallet/fr.lproj/Localizable.strings | 48 +++ DashWallet/id.lproj/Localizable.strings | 48 +++ DashWallet/it.lproj/Localizable.strings | 48 +++ DashWallet/ja.lproj/Localizable.strings | 48 +++ DashWallet/ko.lproj/Localizable.strings | 48 +++ DashWallet/nb.lproj/Localizable.strings | 48 +++ DashWallet/nl.lproj/Localizable.strings | 48 +++ DashWallet/pl.lproj/Localizable.strings | 48 +++ DashWallet/pt.lproj/Localizable.strings | 48 +++ DashWallet/ru.lproj/Localizable.strings | 48 +++ DashWallet/sk.lproj/Localizable.strings | 48 +++ DashWallet/sq.lproj/Localizable.strings | 48 +++ DashWallet/sv.lproj/Localizable.strings | 48 +++ DashWallet/th.lproj/Localizable.strings | 48 +++ DashWallet/tr.lproj/Localizable.strings | 48 +++ DashWallet/vi.lproj/Localizable.strings | 48 +++ DashWallet/zh-Hans.lproj/Localizable.strings | 48 +++ .../zh-Hant-TW.lproj/Localizable.strings | 48 +++ 34 files changed, 1662 insertions(+), 89 deletions(-) create mode 100644 DashWallet/Sources/UI/Menu/Tools/Masternode/Local Masternodes/DWLocalMasternodeControlViewController.h create mode 100644 DashWallet/Sources/UI/Menu/Tools/Masternode/Local Masternodes/DWLocalMasternodeControlViewController.m diff --git a/DashWallet.xcodeproj/project.pbxproj b/DashWallet.xcodeproj/project.pbxproj index 382c99fb2..a0faac950 100644 --- a/DashWallet.xcodeproj/project.pbxproj +++ b/DashWallet.xcodeproj/project.pbxproj @@ -415,6 +415,7 @@ FBCFEDF3236F8CF70086DE07 /* DWKeyValueFormCellModel.m in Sources */ = {isa = PBXBuildFile; fileRef = FBCFEDF2236F8CF70086DE07 /* DWKeyValueFormCellModel.m */; }; FBCFEDF6236F8D3D0086DE07 /* DWKeyValueFormTableViewCell.m in Sources */ = {isa = PBXBuildFile; fileRef = FBCFEDF5236F8D3D0086DE07 /* DWKeyValueFormTableViewCell.m */; }; FBCFEDFA236FCE2E0086DE07 /* DWPublicKeyGenerationCellModel.m in Sources */ = {isa = PBXBuildFile; fileRef = FBCFEDF9236FCE2E0086DE07 /* DWPublicKeyGenerationCellModel.m */; }; + FBE7439A238167200084A95B /* DWLocalMasternodeControlViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = FBE74399238167200084A95B /* DWLocalMasternodeControlViewController.m */; }; FBEF3AF121823CD800917AB6 /* DWEnvironment.m in Sources */ = {isa = PBXBuildFile; fileRef = FBEF3AF021823CD800917AB6 /* DWEnvironment.m */; }; FBF3F42B1E42AF8F00C7248E /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FBF3F42A1E42AF8F00C7248E /* QuartzCore.framework */; }; FBF3F42D1E42B00C00C7248E /* UIKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FBF3F42C1E42B00C00C7248E /* UIKit.framework */; }; @@ -1397,6 +1398,8 @@ FBCFEDF5236F8D3D0086DE07 /* DWKeyValueFormTableViewCell.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = DWKeyValueFormTableViewCell.m; sourceTree = ""; }; FBCFEDF8236FCE2E0086DE07 /* DWPublicKeyGenerationCellModel.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = DWPublicKeyGenerationCellModel.h; sourceTree = ""; }; FBCFEDF9236FCE2E0086DE07 /* DWPublicKeyGenerationCellModel.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = DWPublicKeyGenerationCellModel.m; sourceTree = ""; }; + FBE74398238167200084A95B /* DWLocalMasternodeControlViewController.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = DWLocalMasternodeControlViewController.h; sourceTree = ""; }; + FBE74399238167200084A95B /* DWLocalMasternodeControlViewController.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = DWLocalMasternodeControlViewController.m; sourceTree = ""; }; FBEF3AED2182395800917AB6 /* DashSync.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; path = DashSync.framework; sourceTree = BUILT_PRODUCTS_DIR; }; FBEF3AEF21823CD800917AB6 /* DWEnvironment.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = DWEnvironment.h; sourceTree = ""; }; FBEF3AF021823CD800917AB6 /* DWEnvironment.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = DWEnvironment.m; sourceTree = ""; }; @@ -3542,6 +3545,8 @@ FBF4DA0F237BCEB6005493A6 /* Cells */, FBF4DA11237BCF0C005493A6 /* DWLocalMasternodeListViewController.h */, FBF4DA12237BCF0C005493A6 /* DWLocalMasternodeListViewController.m */, + FBE74398238167200084A95B /* DWLocalMasternodeControlViewController.h */, + FBE74399238167200084A95B /* DWLocalMasternodeControlViewController.m */, ); path = "Local Masternodes"; sourceTree = ""; @@ -4275,6 +4280,7 @@ 2A8B9E7D23034AC100FF8653 /* DWAppGroupOptions.m in Sources */, 2A9FFE052230FF2B00956D5F /* DWUpholdAPIProvider.m in Sources */, 2A0C69EF2316B7F5001B8C90 /* DWConfirmPaymentContentView.m in Sources */, + FBE7439A238167200084A95B /* DWLocalMasternodeControlViewController.m in Sources */, 2A9FFF1B2233E56E00956D5F /* DWUpholdSelectCardViewController.m in Sources */, FBCFEDF6236F8D3D0086DE07 /* DWKeyValueFormTableViewCell.m in Sources */, FB031AE32379003D00EF564B /* DWSignPayloadModel.m in Sources */, diff --git a/DashWallet/Sources/UI/Menu/Forms/KeyValue/DWKeyValueFormCellModel.h b/DashWallet/Sources/UI/Menu/Forms/KeyValue/DWKeyValueFormCellModel.h index 01c16b249..8aed16c74 100644 --- a/DashWallet/Sources/UI/Menu/Forms/KeyValue/DWKeyValueFormCellModel.h +++ b/DashWallet/Sources/UI/Menu/Forms/KeyValue/DWKeyValueFormCellModel.h @@ -23,6 +23,7 @@ NS_ASSUME_NONNULL_BEGIN @property (readonly, nonatomic) NSString *placeholderText; @property (copy, nonatomic) NSString *valueText; +@property (assign, nonatomic) BOOL editable; @property (copy, nonatomic) NSAttributedString *actionText; @property (nullable, copy, nonatomic) void (^didChangeValueBlock)(DWKeyValueFormCellModel *cellModel); @property (nullable, copy, nonatomic) void (^actionBlock)(void); diff --git a/DashWallet/Sources/UI/Menu/Forms/KeyValue/DWKeyValueFormCellModel.m b/DashWallet/Sources/UI/Menu/Forms/KeyValue/DWKeyValueFormCellModel.m index 2781be0dc..2a8a71165 100644 --- a/DashWallet/Sources/UI/Menu/Forms/KeyValue/DWKeyValueFormCellModel.m +++ b/DashWallet/Sources/UI/Menu/Forms/KeyValue/DWKeyValueFormCellModel.m @@ -34,6 +34,7 @@ - (instancetype)initWithTitle:(nullable NSString *)title valueText:(NSString *)v self = [super initWithTitle:title]; if (self) { _valueText = valueText; + _editable = YES; } return self; } diff --git a/DashWallet/Sources/UI/Menu/Forms/KeyValue/DWKeyValueFormTableViewCell.m b/DashWallet/Sources/UI/Menu/Forms/KeyValue/DWKeyValueFormTableViewCell.m index 986a82490..8e28bd9d4 100644 --- a/DashWallet/Sources/UI/Menu/Forms/KeyValue/DWKeyValueFormTableViewCell.m +++ b/DashWallet/Sources/UI/Menu/Forms/KeyValue/DWKeyValueFormTableViewCell.m @@ -145,6 +145,9 @@ - (void)setCellModel:(nullable DWKeyValueFormCellModel *)cellModel { if (cellModel.actionText) { [self.actionLabel setAttributedText:cellModel.actionText]; } + if (!cellModel.editable) { + [self.valueTextField setUserInteractionEnabled:FALSE]; + } } - (BOOL)shouldAnimatePressWhenHighlighted { diff --git a/DashWallet/Sources/UI/Menu/Tools/Masternode/Local Masternodes/Cells/DWLocalMasternodeTableViewCell.m b/DashWallet/Sources/UI/Menu/Tools/Masternode/Local Masternodes/Cells/DWLocalMasternodeTableViewCell.m index cff5f8ecf..2f8cb43a6 100644 --- a/DashWallet/Sources/UI/Menu/Tools/Masternode/Local Masternodes/Cells/DWLocalMasternodeTableViewCell.m +++ b/DashWallet/Sources/UI/Menu/Tools/Masternode/Local Masternodes/Cells/DWLocalMasternodeTableViewCell.m @@ -23,7 +23,7 @@ NS_ASSUME_NONNULL_BEGIN -static CGSize const ACCESSORY_SIZE = {26.0, 26.0}; +static CGSize const ACCESSORY_SIZE = {10.0, 19.0}; @interface DWLocalMasternodeTableViewCell () @@ -98,11 +98,9 @@ - (instancetype)initWithStyle:(UITableViewCellStyle)style [contentView addSubview:portLabel]; portLabel = portLabel; - UIImage *image = [UIImage imageNamed:@"icon_checkbox"]; - UIImage *highlightedImage = [UIImage imageNamed:@"icon_checkbox_checked"]; + UIImage *image = [UIImage imageNamed:@"icon_disclosure_indicator"]; NSParameterAssert(image); - NSParameterAssert(highlightedImage); - UIImageView *accessoryImageView = [[UIImageView alloc] initWithImage:image highlightedImage:highlightedImage]; + UIImageView *accessoryImageView = [[UIImageView alloc] initWithImage:image]; accessoryImageView.translatesAutoresizingMaskIntoConstraints = NO; [contentView addSubview:accessoryImageView]; _accessoryImageView = accessoryImageView; @@ -156,9 +154,18 @@ - (void)configureWithModel:(DSLocalMasternode *)model self.portLabel.text = model.ipAddressString; + [self setupObserving]; + [self reloadAttributedData]; } +- (void)setupObserving { + [self mvvm_observe:DW_KEYPATH(self, model.name) + with:^(__typeof(self) self, NSString *value) { + self.nameLabel.text = value ?: NSLocalizedString(@"Unnamed", nil); + }]; +} + - (void)traitCollectionDidChange:(nullable UITraitCollection *)previousTraitCollection { [super traitCollectionDidChange:previousTraitCollection]; @@ -177,7 +184,10 @@ - (void)reloadAttributedData { UIFont *codeFont = [UIFont dw_fontForTextStyle:UIFontTextStyleBody]; UIColor *codeColor = [UIColor dw_darkTitleColor]; - self.nameLabel.attributedText = [NSAttributedString attributedText:self.model.ipAddressString + NSString *name = self.model.name; + if (!name) + name = NSLocalizedString(@"Unnamed", nil); + self.nameLabel.attributedText = [NSAttributedString attributedText:name font:codeFont textColor:codeColor highlightedText:highlightedText @@ -185,11 +195,17 @@ - (void)reloadAttributedData { UIFont *nameFont = [UIFont dw_fontForTextStyle:UIFontTextStyleCaption1]; UIColor *nameColor = [UIColor dw_quaternaryTextColor]; - self.addressLabel.attributedText = [NSAttributedString attributedText:self.model.ipAddressString + self.addressLabel.attributedText = [NSAttributedString attributedText:self.model.ipAddressAndIfNonstandardPortString font:nameFont textColor:nameColor highlightedText:highlightedText highlightedTextColor:highlightedTextColor]; + + self.portLabel.attributedText = [NSAttributedString attributedText:self.model.portString + font:nameFont + textColor:nameColor + highlightedText:highlightedText + highlightedTextColor:highlightedTextColor]; } @end diff --git a/DashWallet/Sources/UI/Menu/Tools/Masternode/Local Masternodes/DWLocalMasternodeControlViewController.h b/DashWallet/Sources/UI/Menu/Tools/Masternode/Local Masternodes/DWLocalMasternodeControlViewController.h new file mode 100644 index 000000000..076672801 --- /dev/null +++ b/DashWallet/Sources/UI/Menu/Tools/Masternode/Local Masternodes/DWLocalMasternodeControlViewController.h @@ -0,0 +1,32 @@ +// +// Created by Sam Westrich +// Copyright © 2019 Dash Core Group. All rights reserved. +// +// Licensed under the MIT License (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://opensource.org/licenses/MIT +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// + +#import +#import + +NS_ASSUME_NONNULL_BEGIN + +@interface DWLocalMasternodeControlViewController : KVOUIViewController + +- (instancetype)initWithNibName:(nullable NSString *)nibNameOrNil bundle:(nullable NSBundle *)nibBundleOrNil NS_UNAVAILABLE; +- (nullable instancetype)initWithCoder:(NSCoder *)coder NS_UNAVAILABLE; + +- (instancetype)initWithLocalMasternode:(DSLocalMasternode *)localMasternode NS_DESIGNATED_INITIALIZER; + +@end + +NS_ASSUME_NONNULL_END diff --git a/DashWallet/Sources/UI/Menu/Tools/Masternode/Local Masternodes/DWLocalMasternodeControlViewController.m b/DashWallet/Sources/UI/Menu/Tools/Masternode/Local Masternodes/DWLocalMasternodeControlViewController.m new file mode 100644 index 000000000..d1f5ed359 --- /dev/null +++ b/DashWallet/Sources/UI/Menu/Tools/Masternode/Local Masternodes/DWLocalMasternodeControlViewController.m @@ -0,0 +1,352 @@ +// +// Created by Sam Westrich +// Copyright © 2019 Dash Core Group. All rights reserved. +// +// Licensed under the MIT License (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://opensource.org/licenses/MIT +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// + +#import "DWLocalMasternodeControlViewController.h" + +#import "DWEnvironment.h" +#import "DWFormTableViewController.h" +#import "DWKeyValueFormTableViewCell.h" +#import "DWPublicKeyGenerationTableViewCell.h" +#import "DWSignPayloadModel.h" +#import "DWSignPayloadViewController.h" +#import "DWUIKit.h" + +#define INPUT_CELL_HEIGHT 75 +#define PUBLIC_KEY_CELL_HEIGHT 150 + +typedef NS_ENUM(NSUInteger, DWMasternodeControlCell) { + DWMasternodeControlCell_Name, + DWMasternodeControlCell_CollateralInfo, + DWMasternodeControlCell_Host, + DWMasternodeControlCell_PayoutAddress, + DWMasternodeControlCell_OwnerKey, + DWMasternodeControlCell_OperatorKey, + DWMasternodeControlCell_VotingKey, + _DWMasternodeControlCell_Count, +}; + +typedef NS_ENUM(NSUInteger, DWMasternodeActionCell) { + DWMasternodeActionCell_SignMessage, + DWMasternodeActionCell_UpdateHost, + DWMasternodeActionCell_ChangePayoutAddress, + DWMasternodeActionCell_ChangeOperator, + DWMasternodeActionCell_ChangeVotingKey, + _DWMasternodeActionCell_Count, +}; + +@interface DWLocalMasternodeControlViewController () + +@property (nonatomic, strong) DWActionFormCellModel *registerActionModel; +@property (nonatomic, strong) DWFormTableViewController *formController; +@property (nonatomic, strong) DSLocalMasternode *localMasternode; + +@end + +@implementation DWLocalMasternodeControlViewController + +- (instancetype)initWithLocalMasternode:(DSLocalMasternode *)localMasternode { + if (self = [super initWithNibName:nil bundle:nil]) { + self.title = NSLocalizedString(@"Control", nil); + self.hidesBottomBarWhenPushed = YES; + _localMasternode = localMasternode; + } + return self; +} + +- (void)viewDidLoad { + [super viewDidLoad]; + + self.view.backgroundColor = [UIColor dw_secondaryBackgroundColor]; + + DWFormTableViewController *formController = [[DWFormTableViewController alloc] initWithStyle:UITableViewStylePlain]; + [formController setSections:[self sections] placeholderText:nil]; + + [self addChildViewController:formController]; + formController.view.frame = self.view.bounds; + formController.view.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight; + [self.view addSubview:formController.view]; + [formController didMoveToParentViewController:self]; + self.formController = formController; +} + +- (UIStatusBarStyle)preferredStatusBarStyle { + return UIStatusBarStyleLightContent; +} + +#pragma mark - Data Source + +- (NSString *)titleForCellAtRow:(NSUInteger)row { + switch (row) { + case DWMasternodeControlCell_Name: + return NSLocalizedString(@"Local Name", nil); + case DWMasternodeControlCell_CollateralInfo: + return NSLocalizedString(@"Collateral Information", nil); + case DWMasternodeControlCell_Host: + return NSLocalizedString(@"Host", nil); + case DWMasternodeControlCell_PayoutAddress: + return NSLocalizedString(@"Payout Address", nil); + case DWMasternodeControlCell_OwnerKey: + return NSLocalizedString(@"Owner Private Key", nil); + case DWMasternodeControlCell_OperatorKey: + return NSLocalizedString(@"Operator Public Key", nil); + case DWMasternodeControlCell_VotingKey: + return NSLocalizedString(@"Voting Public Key", nil); + } + return @""; +} + +- (NSString *)placeholderForCellAtRow:(NSUInteger)row { + switch (row) { + case DWMasternodeControlCell_Name: + return NSLocalizedString(@"Enter a Nickname for this Masternode", nil); + case DWMasternodeControlCell_CollateralInfo: + return NSLocalizedString(@"No Collateral Information", nil); + case DWMasternodeControlCell_PayoutAddress: + return NSLocalizedString(@"Unknown Payout Address", nil); + case DWMasternodeControlCell_OwnerKey: + return NSLocalizedString(@"Unknown Owner Private Key", nil); + case DWMasternodeControlCell_OperatorKey: + return NSLocalizedString(@"Unknown Operator Public Key", nil); + case DWMasternodeControlCell_VotingKey: + return NSLocalizedString(@"Unknown Voting Public Key", nil); + } + return @""; +} + +- (NSString *)actionForCellAtRow:(NSUInteger)row { + switch (row) { + case DWMasternodeControlCell_CollateralInfo: + return NSLocalizedString(@"Lookup", nil); + case DWMasternodeControlCell_PayoutAddress: + return NSLocalizedString(@"Lookup", nil); + case DWMasternodeControlCell_OwnerKey: + return NSLocalizedString(@"Lookup", nil); + case DWMasternodeControlCell_OperatorKey: + return NSLocalizedString(@"Lookup", nil); + case DWMasternodeControlCell_VotingKey: + return NSLocalizedString(@"Lookup", nil); + default: + return nil; + } +} + +- (NSString *)actionTitleForCellAtRow:(NSUInteger)row { + switch (row) { + case DWMasternodeActionCell_SignMessage: + return NSLocalizedString(@"Sign Message", nil); + case DWMasternodeActionCell_UpdateHost: + return NSLocalizedString(@"Update Host", nil); + case DWMasternodeActionCell_ChangeOperator: + return NSLocalizedString(@"Change Operator", nil); + case DWMasternodeActionCell_ChangeVotingKey: + return NSLocalizedString(@"Change Voting Key", nil); + case DWMasternodeActionCell_ChangePayoutAddress: + return NSLocalizedString(@"Change Payout Address", nil); + } + return @""; +} + +- (BOOL)resignCellsFirstResponders { + BOOL resigned = FALSE; + for (UITableViewCell *cell in self.formController.tableView.visibleCells) { + resigned |= [cell resignFirstResponder]; + } + return resigned; +} + +- (void (^)(void))actionBlockForModel:(DWKeyValueFormCellModel *)model forCellAtRow:(NSUInteger)row { + __weak __typeof(self) weakSelf = self; + __weak __typeof(model) weakModel = model; + switch (row) { + case DWMasternodeControlCell_CollateralInfo: + return ^{ + __strong __typeof(weakSelf) strongSelf = weakSelf; + + if (!strongSelf) { + return; + } + }; + case DWMasternodeControlCell_Host: + return ^{ + __strong __typeof(weakModel) strongModel = weakModel; + if (!strongModel) { + return; + } + strongModel.valueText = [NSString stringWithFormat:@"%d", [DWEnvironment sharedInstance].currentChain.standardPort]; + }; + case DWMasternodeControlCell_PayoutAddress: + return ^{ + __strong __typeof(weakModel) strongModel = weakModel; + if (!strongModel) { + return; + } + }; + case DWMasternodeControlCell_OwnerKey: + return ^{ + __strong __typeof(weakModel) strongModel = weakModel; + if (!strongModel) { + return; + } + }; + case DWMasternodeControlCell_OperatorKey: + return ^{ + __strong __typeof(weakModel) strongModel = weakModel; + if (!strongModel) { + return; + } + }; + case DWMasternodeControlCell_VotingKey: + return ^{ + __strong __typeof(weakModel) strongModel = weakModel; + if (!strongModel) { + return; + } + }; + default: + return nil; + } +} + +- (DWBaseFormCellModel *)modelForRow:(NSUInteger)row { + NSString *actionText = [self actionForCellAtRow:row]; + DWKeyValueFormCellModel *model = [[DWKeyValueFormCellModel alloc] initWithTitle:[self titleForCellAtRow:row] valueText:@"" placeholderText:[self placeholderForCellAtRow:row] actionText:actionText ? [[NSAttributedString alloc] initWithString:actionText] : nil]; + if (actionText) { + model.actionBlock = [self actionBlockForModel:model forCellAtRow:row]; + } + __weak __typeof(self.localMasternode) weakModel = self.localMasternode; + switch (row) { + case DWMasternodeControlCell_Name: { + model.valueText = self.localMasternode.name; + [model mvvm_observe:DW_KEYPATH(model, valueText) + with:^(__typeof(self) self, NSString *value) { + __strong __typeof(weakModel) strongModel = weakModel; + if (!strongModel) { + return; + } + [strongModel registerName:value]; + }]; + break; + } + case DWMasternodeControlCell_CollateralInfo: { + model.valueText = @""; + model.editable = FALSE; + break; + } + case DWMasternodeControlCell_Host: { + model.valueText = self.localMasternode.ipAddressAndPortString; + model.editable = FALSE; + break; + } + case DWMasternodeControlCell_PayoutAddress: { + model.valueText = self.localMasternode.payoutAddress; + model.editable = FALSE; + break; + } + case DWMasternodeControlCell_OwnerKey: { + model.valueText = self.localMasternode.ownerPublicKeyData.hexString; + model.editable = FALSE; + break; + } + case DWMasternodeControlCell_OperatorKey: { + model.valueText = self.localMasternode.operatorPublicKeyData.hexString; + model.editable = FALSE; + break; + } + case DWMasternodeControlCell_VotingKey: { + model.valueText = self.localMasternode.votingPublicKeyData.hexString; + model.editable = FALSE; + break; + } + } + + return model; +} + +- (NSArray *)items { + NSMutableArray *items = [NSMutableArray array]; + + for (NSUInteger i = 0; i < _DWMasternodeControlCell_Count; i++) { + [items addObject:[self modelForRow:i]]; + } + + return items; +} + +- (DWBaseFormCellModel *)actionModelAtIndex:(NSUInteger)index { + __weak typeof(self) weakSelf = self; + DWActionFormCellModel *actionModel = [[DWActionFormCellModel alloc] initWithTitle:[self actionTitleForCellAtRow:index]]; + actionModel.didSelectBlock = ^(DWActionFormCellModel *_Nonnull cellModel, NSIndexPath *_Nonnull indexPath) { + __strong __typeof(weakSelf) strongSelf = weakSelf; + if (!strongSelf) { + return; + } + + [strongSelf resignCellsFirstResponders]; + }; + return actionModel; +} + +- (NSArray *)actionItems { + NSMutableArray *items = [NSMutableArray array]; + + for (NSUInteger i = 0; i < _DWMasternodeActionCell_Count; i++) { + [items addObject:[self actionModelAtIndex:i]]; + } + + return items; +} + +- (DWBaseFormCellModel *)registerActionModel { + __weak typeof(self) weakSelf = self; + DWActionFormCellModel *registerModel = [[DWActionFormCellModel alloc] initWithTitle:NSLocalizedString(@"View Signing Info", nil)]; + registerModel.didSelectBlock = ^(DWActionFormCellModel *_Nonnull cellModel, NSIndexPath *_Nonnull indexPath) { + __strong __typeof(weakSelf) strongSelf = weakSelf; + if (!strongSelf) { + return; + } + + [strongSelf resignCellsFirstResponders]; + + // [self.model findCollateralTransactionWithCompletion:^(NSError *_Nonnull error) { + // if (error) { + // return; + // } + // [self.model registerMasternode:self + // requestsPayloadSigning:^{ + // [self showPayloadSigning]; + // } + // completion:^(NSError *_Nonnull error){ + // + // }]; + // [self showPayloadSigning]; + // }]; + }; + self.registerActionModel = registerModel; + return registerModel; +} + +- (NSArray *)sections { + DWFormSectionModel *section = [[DWFormSectionModel alloc] init]; + section.items = [self items]; + + DWFormSectionModel *actionsSection = [[DWFormSectionModel alloc] init]; + actionsSection.items = [self actionItems]; + + return @[ section, actionsSection ]; +} + +@end diff --git a/DashWallet/Sources/UI/Menu/Tools/Masternode/Local Masternodes/DWLocalMasternodeListViewController.m b/DashWallet/Sources/UI/Menu/Tools/Masternode/Local Masternodes/DWLocalMasternodeListViewController.m index 5ed64699b..5397f3660 100644 --- a/DashWallet/Sources/UI/Menu/Tools/Masternode/Local Masternodes/DWLocalMasternodeListViewController.m +++ b/DashWallet/Sources/UI/Menu/Tools/Masternode/Local Masternodes/DWLocalMasternodeListViewController.m @@ -21,6 +21,7 @@ #import "DWLocalMasternodeListModel.h" +#import "DWLocalMasternodeControlViewController.h" #import "DWLocalMasternodeTableViewCell.h" #import "DWSharedUIConstants.h" #import "DWUIKit.h" @@ -105,7 +106,10 @@ - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(N - (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath { [tableView deselectRowAtIndexPath:indexPath animated:YES]; - DSLocalMasternode *item = self.model.items[indexPath.row]; + DSLocalMasternode *localMasternode = self.model.items[indexPath.row]; + + DWLocalMasternodeControlViewController *localMasternodeControlViewController = [[DWLocalMasternodeControlViewController alloc] initWithLocalMasternode:localMasternode]; + [self.navigationController pushViewController:localMasternodeControlViewController animated:YES]; } #pragma mark - UISearchResultsUpdating diff --git a/DashWallet/Sources/UI/Menu/Tools/Masternode/Masternode List/Cells/DWMasternodeTableViewCell.m b/DashWallet/Sources/UI/Menu/Tools/Masternode/Masternode List/Cells/DWMasternodeTableViewCell.m index 7599ea756..8fe23709f 100644 --- a/DashWallet/Sources/UI/Menu/Tools/Masternode/Masternode List/Cells/DWMasternodeTableViewCell.m +++ b/DashWallet/Sources/UI/Menu/Tools/Masternode/Masternode List/Cells/DWMasternodeTableViewCell.m @@ -27,9 +27,9 @@ @interface DWMasternodeTableViewCell () -@property (readonly, strong, nonatomic) UILabel *codeLabel; -@property (readonly, strong, nonatomic) UILabel *nameLabel; -@property (readonly, strong, nonatomic) UILabel *priceLabel; +@property (readonly, strong, nonatomic) UILabel *addressLabel; +@property (readonly, strong, nonatomic) UILabel *portLabel; +@property (readonly, strong, nonatomic) UILabel *availabilityLabel; @property (readonly, nonatomic, strong) UIImageView *accessoryImageView; @property (nullable, nonatomic, strong) DSSimplifiedMasternodeEntry *model; @@ -46,57 +46,57 @@ - (instancetype)initWithStyle:(UITableViewCellStyle)style UIView *contentView = self.roundedContentView; NSParameterAssert(contentView); - UILabel *codeLabel = [[UILabel alloc] initWithFrame:CGRectZero]; - codeLabel.translatesAutoresizingMaskIntoConstraints = NO; - codeLabel.backgroundColor = [UIColor dw_backgroundColor]; - codeLabel.textColor = [UIColor dw_darkTitleColor]; - codeLabel.font = [UIFont dw_fontForTextStyle:UIFontTextStyleBody]; - codeLabel.adjustsFontForContentSizeCategory = YES; - codeLabel.minimumScaleFactor = 0.5; - codeLabel.adjustsFontSizeToFitWidth = YES; - [codeLabel setContentCompressionResistancePriority:UILayoutPriorityRequired + UILabel *addressLabel = [[UILabel alloc] initWithFrame:CGRectZero]; + addressLabel.translatesAutoresizingMaskIntoConstraints = NO; + addressLabel.backgroundColor = [UIColor dw_backgroundColor]; + addressLabel.textColor = [UIColor dw_darkTitleColor]; + addressLabel.font = [UIFont dw_fontForTextStyle:UIFontTextStyleBody]; + addressLabel.adjustsFontForContentSizeCategory = YES; + addressLabel.minimumScaleFactor = 0.5; + addressLabel.adjustsFontSizeToFitWidth = YES; + [addressLabel setContentCompressionResistancePriority:UILayoutPriorityRequired + forAxis:UILayoutConstraintAxisVertical]; + [addressLabel setContentCompressionResistancePriority:UILayoutPriorityDefaultHigh + 30 + forAxis:UILayoutConstraintAxisHorizontal]; + [addressLabel setContentHuggingPriority:UILayoutPriorityDefaultLow + 30 + forAxis:UILayoutConstraintAxisHorizontal]; + [contentView addSubview:addressLabel]; + _addressLabel = addressLabel; + + UILabel *portLabel = [[UILabel alloc] initWithFrame:CGRectZero]; + portLabel.translatesAutoresizingMaskIntoConstraints = NO; + portLabel.backgroundColor = [UIColor dw_backgroundColor]; + portLabel.textColor = [UIColor dw_quaternaryTextColor]; + portLabel.font = [UIFont dw_fontForTextStyle:UIFontTextStyleCaption1]; + portLabel.adjustsFontForContentSizeCategory = YES; + portLabel.minimumScaleFactor = 0.5; + portLabel.adjustsFontSizeToFitWidth = YES; + [portLabel setContentCompressionResistancePriority:UILayoutPriorityRequired forAxis:UILayoutConstraintAxisVertical]; - [codeLabel setContentCompressionResistancePriority:UILayoutPriorityDefaultHigh + 30 + [portLabel setContentCompressionResistancePriority:UILayoutPriorityDefaultHigh + 10 forAxis:UILayoutConstraintAxisHorizontal]; - [codeLabel setContentHuggingPriority:UILayoutPriorityDefaultLow + 30 + [portLabel setContentHuggingPriority:UILayoutPriorityDefaultLow + 20 forAxis:UILayoutConstraintAxisHorizontal]; - [contentView addSubview:codeLabel]; - _codeLabel = codeLabel; - - UILabel *nameLabel = [[UILabel alloc] initWithFrame:CGRectZero]; - nameLabel.translatesAutoresizingMaskIntoConstraints = NO; - nameLabel.backgroundColor = [UIColor dw_backgroundColor]; - nameLabel.textColor = [UIColor dw_quaternaryTextColor]; - nameLabel.font = [UIFont dw_fontForTextStyle:UIFontTextStyleCaption1]; - nameLabel.adjustsFontForContentSizeCategory = YES; - nameLabel.minimumScaleFactor = 0.5; - nameLabel.adjustsFontSizeToFitWidth = YES; - [nameLabel setContentCompressionResistancePriority:UILayoutPriorityRequired - forAxis:UILayoutConstraintAxisVertical]; - [nameLabel setContentCompressionResistancePriority:UILayoutPriorityDefaultHigh + 10 - forAxis:UILayoutConstraintAxisHorizontal]; - [nameLabel setContentHuggingPriority:UILayoutPriorityDefaultLow + 20 - forAxis:UILayoutConstraintAxisHorizontal]; - [contentView addSubview:nameLabel]; - _nameLabel = nameLabel; - - UILabel *priceLabel = [[UILabel alloc] initWithFrame:CGRectZero]; - priceLabel.translatesAutoresizingMaskIntoConstraints = NO; - priceLabel.backgroundColor = [UIColor dw_backgroundColor]; - priceLabel.textAlignment = NSTextAlignmentRight; - priceLabel.textColor = [UIColor dw_secondaryTextColor]; - priceLabel.font = [UIFont dw_fontForTextStyle:UIFontTextStyleSubheadline]; - priceLabel.adjustsFontForContentSizeCategory = YES; - priceLabel.minimumScaleFactor = 0.5; - priceLabel.adjustsFontSizeToFitWidth = YES; - [priceLabel setContentCompressionResistancePriority:UILayoutPriorityRequired - forAxis:UILayoutConstraintAxisVertical]; - [priceLabel setContentCompressionResistancePriority:UILayoutPriorityDefaultHigh + 20 - forAxis:UILayoutConstraintAxisHorizontal]; - [priceLabel setContentHuggingPriority:UILayoutPriorityDefaultLow + 10 - forAxis:UILayoutConstraintAxisHorizontal]; - [contentView addSubview:priceLabel]; - _priceLabel = priceLabel; + [contentView addSubview:portLabel]; + _portLabel = portLabel; + + UILabel *availabilityLabel = [[UILabel alloc] initWithFrame:CGRectZero]; + availabilityLabel.translatesAutoresizingMaskIntoConstraints = NO; + availabilityLabel.backgroundColor = [UIColor dw_backgroundColor]; + availabilityLabel.textAlignment = NSTextAlignmentRight; + availabilityLabel.textColor = [UIColor dw_secondaryTextColor]; + availabilityLabel.font = [UIFont dw_fontForTextStyle:UIFontTextStyleSubheadline]; + availabilityLabel.adjustsFontForContentSizeCategory = YES; + availabilityLabel.minimumScaleFactor = 0.5; + availabilityLabel.adjustsFontSizeToFitWidth = YES; + [availabilityLabel setContentCompressionResistancePriority:UILayoutPriorityRequired + forAxis:UILayoutConstraintAxisVertical]; + [availabilityLabel setContentCompressionResistancePriority:UILayoutPriorityDefaultHigh + 20 + forAxis:UILayoutConstraintAxisHorizontal]; + [availabilityLabel setContentHuggingPriority:UILayoutPriorityDefaultLow + 10 + forAxis:UILayoutConstraintAxisHorizontal]; + [contentView addSubview:availabilityLabel]; + _availabilityLabel = availabilityLabel; UIImage *image = [UIImage imageNamed:@"icon_checkbox"]; UIImage *highlightedImage = [UIImage imageNamed:@"icon_checkbox_checked"]; @@ -111,26 +111,26 @@ - (instancetype)initWithStyle:(UITableViewCellStyle)style const CGFloat padding = DW_FORM_CELL_VERTICAL_PADDING; [NSLayoutConstraint activateConstraints:@[ - [codeLabel.topAnchor constraintEqualToAnchor:contentView.topAnchor - constant:padding], - [codeLabel.leadingAnchor constraintEqualToAnchor:contentView.leadingAnchor - constant:margin], - [codeLabel.bottomAnchor constraintEqualToAnchor:contentView.bottomAnchor - constant:-padding], - - [nameLabel.topAnchor constraintEqualToAnchor:contentView.topAnchor + [addressLabel.topAnchor constraintEqualToAnchor:contentView.topAnchor + constant:padding], + [addressLabel.leadingAnchor constraintEqualToAnchor:contentView.leadingAnchor + constant:margin], + [addressLabel.bottomAnchor constraintEqualToAnchor:contentView.bottomAnchor + constant:-padding], + + [portLabel.topAnchor constraintEqualToAnchor:contentView.topAnchor constant:padding], - [nameLabel.leadingAnchor constraintEqualToAnchor:codeLabel.trailingAnchor + [portLabel.leadingAnchor constraintEqualToAnchor:addressLabel.trailingAnchor constant:DW_FORM_CELL_SPACING], - [nameLabel.bottomAnchor constraintEqualToAnchor:contentView.bottomAnchor + [portLabel.bottomAnchor constraintEqualToAnchor:contentView.bottomAnchor constant:-padding], - [priceLabel.topAnchor constraintEqualToAnchor:contentView.topAnchor - constant:padding], - [priceLabel.leadingAnchor constraintEqualToAnchor:nameLabel.trailingAnchor - constant:DW_FORM_CELL_SPACING], + [availabilityLabel.topAnchor constraintEqualToAnchor:contentView.topAnchor + constant:padding], + [availabilityLabel.leadingAnchor constraintEqualToAnchor:portLabel.trailingAnchor + constant:DW_FORM_CELL_SPACING], - [accessoryImageView.leadingAnchor constraintEqualToAnchor:priceLabel.trailingAnchor + [accessoryImageView.leadingAnchor constraintEqualToAnchor:availabilityLabel.trailingAnchor constant:DW_FORM_CELL_SPACING], [accessoryImageView.trailingAnchor constraintEqualToAnchor:contentView.trailingAnchor constant:-margin], @@ -155,7 +155,6 @@ - (void)configureWithModel:(DSSimplifiedMasternodeEntry *)model self.model = model; self.searchQuery = searchQuery; - self.priceLabel.text = model.host; self.accessoryImageView.highlighted = selected; [self reloadAttributedData]; @@ -177,21 +176,29 @@ - (void)reloadAttributedData { NSString *highlightedText = self.searchQuery; UIColor *highlightedTextColor = [UIColor dw_dashBlueColor]; - UIFont *codeFont = [UIFont dw_fontForTextStyle:UIFontTextStyleBody]; - UIColor *codeColor = [UIColor dw_darkTitleColor]; - self.codeLabel.attributedText = [NSAttributedString attributedText:self.model.host - font:codeFont - textColor:codeColor + UIFont *addressFont = [UIFont dw_fontForTextStyle:UIFontTextStyleBody]; + UIColor *addressColor = [UIColor dw_darkTitleColor]; + self.addressLabel.attributedText = [NSAttributedString attributedText:self.model.ipAddressString + font:addressFont + textColor:addressColor + highlightedText:highlightedText + highlightedTextColor:highlightedTextColor]; + + UIFont *portFont = [UIFont dw_fontForTextStyle:UIFontTextStyleCaption1]; + UIColor *portColor = [UIColor dw_quaternaryTextColor]; + self.portLabel.attributedText = [NSAttributedString attributedText:self.model.portString + font:portFont + textColor:portColor highlightedText:highlightedText highlightedTextColor:highlightedTextColor]; - UIFont *nameFont = [UIFont dw_fontForTextStyle:UIFontTextStyleCaption1]; - UIColor *nameColor = [UIColor dw_quaternaryTextColor]; - self.nameLabel.attributedText = [NSAttributedString attributedText:self.model.host - font:nameFont - textColor:nameColor - highlightedText:highlightedText - highlightedTextColor:highlightedTextColor]; + UIFont *availabilityFont = [UIFont dw_fontForTextStyle:UIFontTextStyleSubheadline]; + UIColor *availabilityColor = [UIColor dw_secondaryTextColor]; + self.availabilityLabel.attributedText = [NSAttributedString attributedText:self.model.validString + font:availabilityFont + textColor:availabilityColor + highlightedText:highlightedText + highlightedTextColor:highlightedTextColor]; } @end diff --git a/DashWallet/Sources/UI/Menu/Tools/Masternode/Masternode List/Models/DWMasternodeListModel.m b/DashWallet/Sources/UI/Menu/Tools/Masternode/Masternode List/Models/DWMasternodeListModel.m index e6e8734bc..707543537 100644 --- a/DashWallet/Sources/UI/Menu/Tools/Masternode/Masternode List/Models/DWMasternodeListModel.m +++ b/DashWallet/Sources/UI/Menu/Tools/Masternode/Masternode List/Models/DWMasternodeListModel.m @@ -37,9 +37,8 @@ - (instancetype)init { _selectedIndex = NSNotFound; - _allItems = [self currentMasternodeList].simplifiedMasternodeListDictionaryByReversedRegistrationTransactionHash.allValues; + _allItems = [[self currentMasternodeList].simplifiedMasternodeListDictionaryByReversedRegistrationTransactionHash.allValues sortedArrayUsingDescriptors:@[ [NSSortDescriptor sortDescriptorWithKey:@"isValid" ascending:NO], [NSSortDescriptor sortDescriptorWithKey:@"ipAddressString" ascending:YES] ]]; } - return self; } diff --git a/DashWallet/ar.lproj/Localizable.strings b/DashWallet/ar.lproj/Localizable.strings index e54093fc9..149e06712 100644 --- a/DashWallet/ar.lproj/Localizable.strings +++ b/DashWallet/ar.lproj/Localizable.strings @@ -140,15 +140,24 @@ /* No comment provided by engineer. */ "Change" = "Change"; +/* No comment provided by engineer. */ +"Change Operator" = "Change Operator"; + /* No comment provided by engineer. */ "Change passcode" = "تغير الرقم السري"; /* No comment provided by engineer. */ "Change payment amount?" = "Change payment amount?"; +/* No comment provided by engineer. */ +"Change Payout Address" = "Change Payout Address"; + /* No comment provided by engineer. */ "Change PIN" = "Change PIN"; +/* No comment provided by engineer. */ +"Change Voting Key" = "Change Voting Key"; + /* No comment provided by engineer. */ "Check your connection" = "Check your connection"; @@ -188,6 +197,9 @@ /* No comment provided by engineer. */ "Collateral Index" = "Collateral Index"; +/* No comment provided by engineer. */ +"Collateral Information" = "Collateral Information"; + /* No comment provided by engineer. */ "Collateral Tx" = "Collateral Tx"; @@ -215,6 +227,9 @@ /* No comment provided by engineer. */ "Continue" = "Continue"; +/* No comment provided by engineer. */ +"Control" = "Control"; + /* No comment provided by engineer. */ "Copied" = "Copied"; @@ -323,6 +338,9 @@ /* No comment provided by engineer. */ "Enter" = "Enter"; +/* No comment provided by engineer. */ +"Enter a Nickname for this Masternode" = "Enter a Nickname for this Masternode"; + /* No comment provided by engineer. */ "Enter IP Address of Masternode" = "Enter IP Address of Masternode"; @@ -407,6 +425,9 @@ /* No comment provided by engineer. */ "Holding funds index:" = "Holding funds index:"; +/* No comment provided by engineer. */ +"Host" = "Host"; + /* No comment provided by engineer. */ "I accept that I will lose my coins if I no longer possess the recovery phrase" = "أقبل أنني سأفقد عملاتي إذا لم أعد أمتلك كلمة الإستراد"; @@ -485,6 +506,9 @@ /* Translate it as short as possible! (24 symbols max) */ "Local Currency" = "Local Currency"; +/* No comment provided by engineer. */ +"Local Name" = "Local Name"; + /* No comment provided by engineer. */ "Local requested amount: %@" = "Local requested amount: %@"; @@ -599,6 +623,9 @@ /* No comment provided by engineer. */ "No address copied" = "No address copied"; +/* No comment provided by engineer. */ +"No Collateral Information" = "No Collateral Information"; + /* No comment provided by engineer. */ "no exchange rate data" = "لا توجد بيانات سعر الصرف"; @@ -980,6 +1007,9 @@ /* No comment provided by engineer. */ "Show Recovery Phrase" = "Show Recovery Phrase"; +/* No comment provided by engineer. */ +"Sign Message" = "Sign Message"; + /* No comment provided by engineer. */ "Size:" = "Size:"; @@ -1142,6 +1172,21 @@ /* No comment provided by engineer. */ "Unknown address" = "Unknown address"; +/* No comment provided by engineer. */ +"Unknown Operator Public Key" = "Unknown Operator Public Key"; + +/* No comment provided by engineer. */ +"Unknown Owner Private Key" = "Unknown Owner Private Key"; + +/* No comment provided by engineer. */ +"Unknown Payout Address" = "Unknown Payout Address"; + +/* No comment provided by engineer. */ +"Unknown Voting Public Key" = "Unknown Voting Public Key"; + +/* No comment provided by engineer. */ +"Unnamed" = "Unnamed"; + /* No comment provided by engineer. */ "Unsupported or corrupted document" = "Unsupported or corrupted document"; @@ -1151,6 +1196,9 @@ /* No comment provided by engineer. */ "Unverified" = "Unverified"; +/* No comment provided by engineer. */ +"Update Host" = "Update Host"; + /* No comment provided by engineer. */ "Uphold" = "Uphold"; diff --git a/DashWallet/bg.lproj/Localizable.strings b/DashWallet/bg.lproj/Localizable.strings index 4f7b7c38e..9197569a2 100644 --- a/DashWallet/bg.lproj/Localizable.strings +++ b/DashWallet/bg.lproj/Localizable.strings @@ -140,15 +140,24 @@ /* No comment provided by engineer. */ "Change" = "Change"; +/* No comment provided by engineer. */ +"Change Operator" = "Change Operator"; + /* No comment provided by engineer. */ "Change passcode" = "Смяна на парола"; /* No comment provided by engineer. */ "Change payment amount?" = "Change payment amount?"; +/* No comment provided by engineer. */ +"Change Payout Address" = "Change Payout Address"; + /* No comment provided by engineer. */ "Change PIN" = "Change PIN"; +/* No comment provided by engineer. */ +"Change Voting Key" = "Change Voting Key"; + /* No comment provided by engineer. */ "Check your connection" = "Check your connection"; @@ -188,6 +197,9 @@ /* No comment provided by engineer. */ "Collateral Index" = "Collateral Index"; +/* No comment provided by engineer. */ +"Collateral Information" = "Collateral Information"; + /* No comment provided by engineer. */ "Collateral Tx" = "Collateral Tx"; @@ -215,6 +227,9 @@ /* No comment provided by engineer. */ "Continue" = "Continue"; +/* No comment provided by engineer. */ +"Control" = "Control"; + /* No comment provided by engineer. */ "Copied" = "Copied"; @@ -323,6 +338,9 @@ /* No comment provided by engineer. */ "Enter" = "Enter"; +/* No comment provided by engineer. */ +"Enter a Nickname for this Masternode" = "Enter a Nickname for this Masternode"; + /* No comment provided by engineer. */ "Enter IP Address of Masternode" = "Enter IP Address of Masternode"; @@ -407,6 +425,9 @@ /* No comment provided by engineer. */ "Holding funds index:" = "Holding funds index:"; +/* No comment provided by engineer. */ +"Host" = "Host"; + /* No comment provided by engineer. */ "I accept that I will lose my coins if I no longer possess the recovery phrase" = "Приемам, че ще загубя монетите си, ако вече не притежавам фразата за възстановяване"; @@ -485,6 +506,9 @@ /* Translate it as short as possible! (24 symbols max) */ "Local Currency" = "Local Currency"; +/* No comment provided by engineer. */ +"Local Name" = "Local Name"; + /* No comment provided by engineer. */ "Local requested amount: %@" = "Local requested amount: %@"; @@ -599,6 +623,9 @@ /* No comment provided by engineer. */ "No address copied" = "No address copied"; +/* No comment provided by engineer. */ +"No Collateral Information" = "No Collateral Information"; + /* No comment provided by engineer. */ "no exchange rate data" = "няма данни за обменния курс"; @@ -980,6 +1007,9 @@ /* No comment provided by engineer. */ "Show Recovery Phrase" = "Show Recovery Phrase"; +/* No comment provided by engineer. */ +"Sign Message" = "Sign Message"; + /* No comment provided by engineer. */ "Size:" = "Size:"; @@ -1142,6 +1172,21 @@ /* No comment provided by engineer. */ "Unknown address" = "Unknown address"; +/* No comment provided by engineer. */ +"Unknown Operator Public Key" = "Unknown Operator Public Key"; + +/* No comment provided by engineer. */ +"Unknown Owner Private Key" = "Unknown Owner Private Key"; + +/* No comment provided by engineer. */ +"Unknown Payout Address" = "Unknown Payout Address"; + +/* No comment provided by engineer. */ +"Unknown Voting Public Key" = "Unknown Voting Public Key"; + +/* No comment provided by engineer. */ +"Unnamed" = "Unnamed"; + /* No comment provided by engineer. */ "Unsupported or corrupted document" = "Unsupported or corrupted document"; @@ -1151,6 +1196,9 @@ /* No comment provided by engineer. */ "Unverified" = "Непроверен"; +/* No comment provided by engineer. */ +"Update Host" = "Update Host"; + /* No comment provided by engineer. */ "Uphold" = "Uphold"; diff --git a/DashWallet/de.lproj/Localizable.strings b/DashWallet/de.lproj/Localizable.strings index dc17668dc..434d6e4e8 100644 --- a/DashWallet/de.lproj/Localizable.strings +++ b/DashWallet/de.lproj/Localizable.strings @@ -140,15 +140,24 @@ /* No comment provided by engineer. */ "Change" = "Change"; +/* No comment provided by engineer. */ +"Change Operator" = "Change Operator"; + /* No comment provided by engineer. */ "Change passcode" = "Zugangscode ändern"; /* No comment provided by engineer. */ "Change payment amount?" = "Change payment amount?"; +/* No comment provided by engineer. */ +"Change Payout Address" = "Change Payout Address"; + /* No comment provided by engineer. */ "Change PIN" = "Change PIN"; +/* No comment provided by engineer. */ +"Change Voting Key" = "Change Voting Key"; + /* No comment provided by engineer. */ "Check your connection" = "Check your connection"; @@ -188,6 +197,9 @@ /* No comment provided by engineer. */ "Collateral Index" = "Collateral Index"; +/* No comment provided by engineer. */ +"Collateral Information" = "Collateral Information"; + /* No comment provided by engineer. */ "Collateral Tx" = "Collateral Tx"; @@ -215,6 +227,9 @@ /* No comment provided by engineer. */ "Continue" = "Continue"; +/* No comment provided by engineer. */ +"Control" = "Control"; + /* No comment provided by engineer. */ "Copied" = "Copied"; @@ -323,6 +338,9 @@ /* No comment provided by engineer. */ "Enter" = "Enter"; +/* No comment provided by engineer. */ +"Enter a Nickname for this Masternode" = "Enter a Nickname for this Masternode"; + /* No comment provided by engineer. */ "Enter IP Address of Masternode" = "Enter IP Address of Masternode"; @@ -407,6 +425,9 @@ /* No comment provided by engineer. */ "Holding funds index:" = "Holding funds index:"; +/* No comment provided by engineer. */ +"Host" = "Host"; + /* No comment provided by engineer. */ "I accept that I will lose my coins if I no longer possess the recovery phrase" = "Ich akzeptiere, dass ich meine Coins verlieren werden, wenn ich die Wiederherstellungsphrase verlieren sollte"; @@ -485,6 +506,9 @@ /* Translate it as short as possible! (24 symbols max) */ "Local Currency" = "Local Currency"; +/* No comment provided by engineer. */ +"Local Name" = "Local Name"; + /* No comment provided by engineer. */ "Local requested amount: %@" = "Local requested amount: %@"; @@ -599,6 +623,9 @@ /* No comment provided by engineer. */ "No address copied" = "No address copied"; +/* No comment provided by engineer. */ +"No Collateral Information" = "No Collateral Information"; + /* No comment provided by engineer. */ "no exchange rate data" = "Keine Wechselkursdaten"; @@ -980,6 +1007,9 @@ /* No comment provided by engineer. */ "Show Recovery Phrase" = "Show Recovery Phrase"; +/* No comment provided by engineer. */ +"Sign Message" = "Sign Message"; + /* No comment provided by engineer. */ "Size:" = "Size:"; @@ -1142,6 +1172,21 @@ /* No comment provided by engineer. */ "Unknown address" = "Unknown address"; +/* No comment provided by engineer. */ +"Unknown Operator Public Key" = "Unknown Operator Public Key"; + +/* No comment provided by engineer. */ +"Unknown Owner Private Key" = "Unknown Owner Private Key"; + +/* No comment provided by engineer. */ +"Unknown Payout Address" = "Unknown Payout Address"; + +/* No comment provided by engineer. */ +"Unknown Voting Public Key" = "Unknown Voting Public Key"; + +/* No comment provided by engineer. */ +"Unnamed" = "Unnamed"; + /* No comment provided by engineer. */ "Unsupported or corrupted document" = "Unsupported or corrupted document"; @@ -1151,6 +1196,9 @@ /* No comment provided by engineer. */ "Unverified" = "ungeprüft"; +/* No comment provided by engineer. */ +"Update Host" = "Update Host"; + /* No comment provided by engineer. */ "Uphold" = "Uphold"; diff --git a/DashWallet/el.lproj/Localizable.strings b/DashWallet/el.lproj/Localizable.strings index e77ae41b7..dd5bffab2 100644 --- a/DashWallet/el.lproj/Localizable.strings +++ b/DashWallet/el.lproj/Localizable.strings @@ -140,15 +140,24 @@ /* No comment provided by engineer. */ "Change" = "Change"; +/* No comment provided by engineer. */ +"Change Operator" = "Change Operator"; + /* No comment provided by engineer. */ "Change passcode" = "Change passcode"; /* No comment provided by engineer. */ "Change payment amount?" = "Change payment amount?"; +/* No comment provided by engineer. */ +"Change Payout Address" = "Change Payout Address"; + /* No comment provided by engineer. */ "Change PIN" = "Change PIN"; +/* No comment provided by engineer. */ +"Change Voting Key" = "Change Voting Key"; + /* No comment provided by engineer. */ "Check your connection" = "Check your connection"; @@ -188,6 +197,9 @@ /* No comment provided by engineer. */ "Collateral Index" = "Collateral Index"; +/* No comment provided by engineer. */ +"Collateral Information" = "Collateral Information"; + /* No comment provided by engineer. */ "Collateral Tx" = "Collateral Tx"; @@ -215,6 +227,9 @@ /* No comment provided by engineer. */ "Continue" = "Continue"; +/* No comment provided by engineer. */ +"Control" = "Control"; + /* No comment provided by engineer. */ "Copied" = "Copied"; @@ -323,6 +338,9 @@ /* No comment provided by engineer. */ "Enter" = "Enter"; +/* No comment provided by engineer. */ +"Enter a Nickname for this Masternode" = "Enter a Nickname for this Masternode"; + /* No comment provided by engineer. */ "Enter IP Address of Masternode" = "Enter IP Address of Masternode"; @@ -407,6 +425,9 @@ /* No comment provided by engineer. */ "Holding funds index:" = "Holding funds index:"; +/* No comment provided by engineer. */ +"Host" = "Host"; + /* No comment provided by engineer. */ "I accept that I will lose my coins if I no longer possess the recovery phrase" = "I accept that I will lose my coins if I no longer possess the recovery phrase"; @@ -485,6 +506,9 @@ /* Translate it as short as possible! (24 symbols max) */ "Local Currency" = "Local Currency"; +/* No comment provided by engineer. */ +"Local Name" = "Local Name"; + /* No comment provided by engineer. */ "Local requested amount: %@" = "Local requested amount: %@"; @@ -599,6 +623,9 @@ /* No comment provided by engineer. */ "No address copied" = "No address copied"; +/* No comment provided by engineer. */ +"No Collateral Information" = "No Collateral Information"; + /* No comment provided by engineer. */ "no exchange rate data" = "δεν υπάρχουν δεδομένα συναλλαγματικής ισοτιμίας"; @@ -980,6 +1007,9 @@ /* No comment provided by engineer. */ "Show Recovery Phrase" = "Show Recovery Phrase"; +/* No comment provided by engineer. */ +"Sign Message" = "Sign Message"; + /* No comment provided by engineer. */ "Size:" = "Size:"; @@ -1142,6 +1172,21 @@ /* No comment provided by engineer. */ "Unknown address" = "Unknown address"; +/* No comment provided by engineer. */ +"Unknown Operator Public Key" = "Unknown Operator Public Key"; + +/* No comment provided by engineer. */ +"Unknown Owner Private Key" = "Unknown Owner Private Key"; + +/* No comment provided by engineer. */ +"Unknown Payout Address" = "Unknown Payout Address"; + +/* No comment provided by engineer. */ +"Unknown Voting Public Key" = "Unknown Voting Public Key"; + +/* No comment provided by engineer. */ +"Unnamed" = "Unnamed"; + /* No comment provided by engineer. */ "Unsupported or corrupted document" = "Unsupported or corrupted document"; @@ -1151,6 +1196,9 @@ /* No comment provided by engineer. */ "Unverified" = "Unverified"; +/* No comment provided by engineer. */ +"Update Host" = "Update Host"; + /* No comment provided by engineer. */ "Uphold" = "Uphold"; diff --git a/DashWallet/en.lproj/Localizable.strings b/DashWallet/en.lproj/Localizable.strings index b81d35ff0..fb8f006c5 100644 --- a/DashWallet/en.lproj/Localizable.strings +++ b/DashWallet/en.lproj/Localizable.strings @@ -140,15 +140,24 @@ /* No comment provided by engineer. */ "Change" = "Change"; +/* No comment provided by engineer. */ +"Change Operator" = "Change Operator"; + /* No comment provided by engineer. */ "Change passcode" = "Change passcode"; /* No comment provided by engineer. */ "Change payment amount?" = "Change payment amount?"; +/* No comment provided by engineer. */ +"Change Payout Address" = "Change Payout Address"; + /* No comment provided by engineer. */ "Change PIN" = "Change PIN"; +/* No comment provided by engineer. */ +"Change Voting Key" = "Change Voting Key"; + /* No comment provided by engineer. */ "Check your connection" = "Check your connection"; @@ -188,6 +197,9 @@ /* No comment provided by engineer. */ "Collateral Index" = "Collateral Index"; +/* No comment provided by engineer. */ +"Collateral Information" = "Collateral Information"; + /* No comment provided by engineer. */ "Collateral Tx" = "Collateral Tx"; @@ -215,6 +227,9 @@ /* No comment provided by engineer. */ "Continue" = "Continue"; +/* No comment provided by engineer. */ +"Control" = "Control"; + /* No comment provided by engineer. */ "Copied" = "Copied"; @@ -323,6 +338,9 @@ /* No comment provided by engineer. */ "Enter" = "Enter"; +/* No comment provided by engineer. */ +"Enter a Nickname for this Masternode" = "Enter a Nickname for this Masternode"; + /* No comment provided by engineer. */ "Enter IP Address of Masternode" = "Enter IP Address of Masternode"; @@ -407,6 +425,9 @@ /* No comment provided by engineer. */ "Holding funds index:" = "Holding funds index:"; +/* No comment provided by engineer. */ +"Host" = "Host"; + /* No comment provided by engineer. */ "I accept that I will lose my coins if I no longer possess the recovery phrase" = "I accept that I will lose my coins if I no longer possess the recovery phrase"; @@ -485,6 +506,9 @@ /* Translate it as short as possible! (24 symbols max) */ "Local Currency" = "Local Currency"; +/* No comment provided by engineer. */ +"Local Name" = "Local Name"; + /* No comment provided by engineer. */ "Local requested amount: %@" = "Local requested amount: %@"; @@ -599,6 +623,9 @@ /* No comment provided by engineer. */ "No address copied" = "No address copied"; +/* No comment provided by engineer. */ +"No Collateral Information" = "No Collateral Information"; + /* No comment provided by engineer. */ "no exchange rate data" = "no exchange rate data"; @@ -980,6 +1007,9 @@ /* No comment provided by engineer. */ "Show Recovery Phrase" = "Show Recovery Phrase"; +/* No comment provided by engineer. */ +"Sign Message" = "Sign Message"; + /* No comment provided by engineer. */ "Size:" = "Size:"; @@ -1142,6 +1172,21 @@ /* No comment provided by engineer. */ "Unknown address" = "Unknown address"; +/* No comment provided by engineer. */ +"Unknown Operator Public Key" = "Unknown Operator Public Key"; + +/* No comment provided by engineer. */ +"Unknown Owner Private Key" = "Unknown Owner Private Key"; + +/* No comment provided by engineer. */ +"Unknown Payout Address" = "Unknown Payout Address"; + +/* No comment provided by engineer. */ +"Unknown Voting Public Key" = "Unknown Voting Public Key"; + +/* No comment provided by engineer. */ +"Unnamed" = "Unnamed"; + /* No comment provided by engineer. */ "Unsupported or corrupted document" = "Unsupported or corrupted document"; @@ -1151,6 +1196,9 @@ /* No comment provided by engineer. */ "Unverified" = "Unverified"; +/* No comment provided by engineer. */ +"Update Host" = "Update Host"; + /* No comment provided by engineer. */ "Uphold" = "Uphold"; diff --git a/DashWallet/es.lproj/Localizable.strings b/DashWallet/es.lproj/Localizable.strings index 0d591dd20..c45e1df69 100644 --- a/DashWallet/es.lproj/Localizable.strings +++ b/DashWallet/es.lproj/Localizable.strings @@ -140,15 +140,24 @@ /* No comment provided by engineer. */ "Change" = "Change"; +/* No comment provided by engineer. */ +"Change Operator" = "Change Operator"; + /* No comment provided by engineer. */ "Change passcode" = "Cambiar código de acceso"; /* No comment provided by engineer. */ "Change payment amount?" = "Change payment amount?"; +/* No comment provided by engineer. */ +"Change Payout Address" = "Change Payout Address"; + /* No comment provided by engineer. */ "Change PIN" = "Change PIN"; +/* No comment provided by engineer. */ +"Change Voting Key" = "Change Voting Key"; + /* No comment provided by engineer. */ "Check your connection" = "Check your connection"; @@ -188,6 +197,9 @@ /* No comment provided by engineer. */ "Collateral Index" = "Collateral Index"; +/* No comment provided by engineer. */ +"Collateral Information" = "Collateral Information"; + /* No comment provided by engineer. */ "Collateral Tx" = "Collateral Tx"; @@ -215,6 +227,9 @@ /* No comment provided by engineer. */ "Continue" = "Continue"; +/* No comment provided by engineer. */ +"Control" = "Control"; + /* No comment provided by engineer. */ "Copied" = "Copied"; @@ -323,6 +338,9 @@ /* No comment provided by engineer. */ "Enter" = "Enter"; +/* No comment provided by engineer. */ +"Enter a Nickname for this Masternode" = "Enter a Nickname for this Masternode"; + /* No comment provided by engineer. */ "Enter IP Address of Masternode" = "Enter IP Address of Masternode"; @@ -407,6 +425,9 @@ /* No comment provided by engineer. */ "Holding funds index:" = "Holding funds index:"; +/* No comment provided by engineer. */ +"Host" = "Host"; + /* No comment provided by engineer. */ "I accept that I will lose my coins if I no longer possess the recovery phrase" = "Acepto que perderé mis monedas si ya no tengo mi frase de recuperación"; @@ -485,6 +506,9 @@ /* Translate it as short as possible! (24 symbols max) */ "Local Currency" = "Local Currency"; +/* No comment provided by engineer. */ +"Local Name" = "Local Name"; + /* No comment provided by engineer. */ "Local requested amount: %@" = "Local requested amount: %@"; @@ -599,6 +623,9 @@ /* No comment provided by engineer. */ "No address copied" = "No address copied"; +/* No comment provided by engineer. */ +"No Collateral Information" = "No Collateral Information"; + /* No comment provided by engineer. */ "no exchange rate data" = "no hay datos de tasas de cambio"; @@ -980,6 +1007,9 @@ /* No comment provided by engineer. */ "Show Recovery Phrase" = "Show Recovery Phrase"; +/* No comment provided by engineer. */ +"Sign Message" = "Sign Message"; + /* No comment provided by engineer. */ "Size:" = "Size:"; @@ -1142,6 +1172,21 @@ /* No comment provided by engineer. */ "Unknown address" = "Unknown address"; +/* No comment provided by engineer. */ +"Unknown Operator Public Key" = "Unknown Operator Public Key"; + +/* No comment provided by engineer. */ +"Unknown Owner Private Key" = "Unknown Owner Private Key"; + +/* No comment provided by engineer. */ +"Unknown Payout Address" = "Unknown Payout Address"; + +/* No comment provided by engineer. */ +"Unknown Voting Public Key" = "Unknown Voting Public Key"; + +/* No comment provided by engineer. */ +"Unnamed" = "Unnamed"; + /* No comment provided by engineer. */ "Unsupported or corrupted document" = "Unsupported or corrupted document"; @@ -1151,6 +1196,9 @@ /* No comment provided by engineer. */ "Unverified" = "Sin verificar"; +/* No comment provided by engineer. */ +"Update Host" = "Update Host"; + /* No comment provided by engineer. */ "Uphold" = "Uphold"; diff --git a/DashWallet/fr.lproj/Localizable.strings b/DashWallet/fr.lproj/Localizable.strings index c2430997d..8d077d3d9 100644 --- a/DashWallet/fr.lproj/Localizable.strings +++ b/DashWallet/fr.lproj/Localizable.strings @@ -140,15 +140,24 @@ /* No comment provided by engineer. */ "Change" = "Change"; +/* No comment provided by engineer. */ +"Change Operator" = "Change Operator"; + /* No comment provided by engineer. */ "Change passcode" = "Modifier le code d’accès"; /* No comment provided by engineer. */ "Change payment amount?" = "Change payment amount?"; +/* No comment provided by engineer. */ +"Change Payout Address" = "Change Payout Address"; + /* No comment provided by engineer. */ "Change PIN" = "Change PIN"; +/* No comment provided by engineer. */ +"Change Voting Key" = "Change Voting Key"; + /* No comment provided by engineer. */ "Check your connection" = "Check your connection"; @@ -188,6 +197,9 @@ /* No comment provided by engineer. */ "Collateral Index" = "Collateral Index"; +/* No comment provided by engineer. */ +"Collateral Information" = "Collateral Information"; + /* No comment provided by engineer. */ "Collateral Tx" = "Collateral Tx"; @@ -215,6 +227,9 @@ /* No comment provided by engineer. */ "Continue" = "Continue"; +/* No comment provided by engineer. */ +"Control" = "Control"; + /* No comment provided by engineer. */ "Copied" = "Copied"; @@ -323,6 +338,9 @@ /* No comment provided by engineer. */ "Enter" = "Enter"; +/* No comment provided by engineer. */ +"Enter a Nickname for this Masternode" = "Enter a Nickname for this Masternode"; + /* No comment provided by engineer. */ "Enter IP Address of Masternode" = "Enter IP Address of Masternode"; @@ -407,6 +425,9 @@ /* No comment provided by engineer. */ "Holding funds index:" = "Holding funds index:"; +/* No comment provided by engineer. */ +"Host" = "Host"; + /* No comment provided by engineer. */ "I accept that I will lose my coins if I no longer possess the recovery phrase" = "Je reconnais que je perdrai tous mes fonds si je ne possède plus la phrase de récupération"; @@ -485,6 +506,9 @@ /* Translate it as short as possible! (24 symbols max) */ "Local Currency" = "Local Currency"; +/* No comment provided by engineer. */ +"Local Name" = "Local Name"; + /* No comment provided by engineer. */ "Local requested amount: %@" = "Local requested amount: %@"; @@ -599,6 +623,9 @@ /* No comment provided by engineer. */ "No address copied" = "No address copied"; +/* No comment provided by engineer. */ +"No Collateral Information" = "No Collateral Information"; + /* No comment provided by engineer. */ "no exchange rate data" = "aucune donnée de taux de change"; @@ -980,6 +1007,9 @@ /* No comment provided by engineer. */ "Show Recovery Phrase" = "Show Recovery Phrase"; +/* No comment provided by engineer. */ +"Sign Message" = "Sign Message"; + /* No comment provided by engineer. */ "Size:" = "Size:"; @@ -1142,6 +1172,21 @@ /* No comment provided by engineer. */ "Unknown address" = "Unknown address"; +/* No comment provided by engineer. */ +"Unknown Operator Public Key" = "Unknown Operator Public Key"; + +/* No comment provided by engineer. */ +"Unknown Owner Private Key" = "Unknown Owner Private Key"; + +/* No comment provided by engineer. */ +"Unknown Payout Address" = "Unknown Payout Address"; + +/* No comment provided by engineer. */ +"Unknown Voting Public Key" = "Unknown Voting Public Key"; + +/* No comment provided by engineer. */ +"Unnamed" = "Unnamed"; + /* No comment provided by engineer. */ "Unsupported or corrupted document" = "Unsupported or corrupted document"; @@ -1151,6 +1196,9 @@ /* No comment provided by engineer. */ "Unverified" = "Non vérifié"; +/* No comment provided by engineer. */ +"Update Host" = "Update Host"; + /* No comment provided by engineer. */ "Uphold" = "Uphold"; diff --git a/DashWallet/id.lproj/Localizable.strings b/DashWallet/id.lproj/Localizable.strings index 3751e6d7d..f04b847d0 100644 --- a/DashWallet/id.lproj/Localizable.strings +++ b/DashWallet/id.lproj/Localizable.strings @@ -140,15 +140,24 @@ /* No comment provided by engineer. */ "Change" = "Change"; +/* No comment provided by engineer. */ +"Change Operator" = "Change Operator"; + /* No comment provided by engineer. */ "Change passcode" = "Ubah kode sandi"; /* No comment provided by engineer. */ "Change payment amount?" = "Change payment amount?"; +/* No comment provided by engineer. */ +"Change Payout Address" = "Change Payout Address"; + /* No comment provided by engineer. */ "Change PIN" = "Change PIN"; +/* No comment provided by engineer. */ +"Change Voting Key" = "Change Voting Key"; + /* No comment provided by engineer. */ "Check your connection" = "Check your connection"; @@ -188,6 +197,9 @@ /* No comment provided by engineer. */ "Collateral Index" = "Collateral Index"; +/* No comment provided by engineer. */ +"Collateral Information" = "Collateral Information"; + /* No comment provided by engineer. */ "Collateral Tx" = "Collateral Tx"; @@ -215,6 +227,9 @@ /* No comment provided by engineer. */ "Continue" = "Continue"; +/* No comment provided by engineer. */ +"Control" = "Control"; + /* No comment provided by engineer. */ "Copied" = "Copied"; @@ -323,6 +338,9 @@ /* No comment provided by engineer. */ "Enter" = "Enter"; +/* No comment provided by engineer. */ +"Enter a Nickname for this Masternode" = "Enter a Nickname for this Masternode"; + /* No comment provided by engineer. */ "Enter IP Address of Masternode" = "Enter IP Address of Masternode"; @@ -407,6 +425,9 @@ /* No comment provided by engineer. */ "Holding funds index:" = "Holding funds index:"; +/* No comment provided by engineer. */ +"Host" = "Host"; + /* No comment provided by engineer. */ "I accept that I will lose my coins if I no longer possess the recovery phrase" = "Saya menerima bahwa saya akan kehilangan koin saya jika saya tidak lagi memiliki frasa pemulihan"; @@ -485,6 +506,9 @@ /* Translate it as short as possible! (24 symbols max) */ "Local Currency" = "Local Currency"; +/* No comment provided by engineer. */ +"Local Name" = "Local Name"; + /* No comment provided by engineer. */ "Local requested amount: %@" = "Local requested amount: %@"; @@ -599,6 +623,9 @@ /* No comment provided by engineer. */ "No address copied" = "No address copied"; +/* No comment provided by engineer. */ +"No Collateral Information" = "No Collateral Information"; + /* No comment provided by engineer. */ "no exchange rate data" = "tidak ada data nilai tukar"; @@ -980,6 +1007,9 @@ /* No comment provided by engineer. */ "Show Recovery Phrase" = "Show Recovery Phrase"; +/* No comment provided by engineer. */ +"Sign Message" = "Sign Message"; + /* No comment provided by engineer. */ "Size:" = "Size:"; @@ -1142,6 +1172,21 @@ /* No comment provided by engineer. */ "Unknown address" = "Unknown address"; +/* No comment provided by engineer. */ +"Unknown Operator Public Key" = "Unknown Operator Public Key"; + +/* No comment provided by engineer. */ +"Unknown Owner Private Key" = "Unknown Owner Private Key"; + +/* No comment provided by engineer. */ +"Unknown Payout Address" = "Unknown Payout Address"; + +/* No comment provided by engineer. */ +"Unknown Voting Public Key" = "Unknown Voting Public Key"; + +/* No comment provided by engineer. */ +"Unnamed" = "Unnamed"; + /* No comment provided by engineer. */ "Unsupported or corrupted document" = "Unsupported or corrupted document"; @@ -1151,6 +1196,9 @@ /* No comment provided by engineer. */ "Unverified" = "Tidak diverifikasi"; +/* No comment provided by engineer. */ +"Update Host" = "Update Host"; + /* No comment provided by engineer. */ "Uphold" = "Uphold"; diff --git a/DashWallet/it.lproj/Localizable.strings b/DashWallet/it.lproj/Localizable.strings index c2aa2db65..ca24d5382 100644 --- a/DashWallet/it.lproj/Localizable.strings +++ b/DashWallet/it.lproj/Localizable.strings @@ -140,15 +140,24 @@ /* No comment provided by engineer. */ "Change" = "Change"; +/* No comment provided by engineer. */ +"Change Operator" = "Change Operator"; + /* No comment provided by engineer. */ "Change passcode" = "Cambia passcode"; /* No comment provided by engineer. */ "Change payment amount?" = "Change payment amount?"; +/* No comment provided by engineer. */ +"Change Payout Address" = "Change Payout Address"; + /* No comment provided by engineer. */ "Change PIN" = "Change PIN"; +/* No comment provided by engineer. */ +"Change Voting Key" = "Change Voting Key"; + /* No comment provided by engineer. */ "Check your connection" = "Check your connection"; @@ -188,6 +197,9 @@ /* No comment provided by engineer. */ "Collateral Index" = "Collateral Index"; +/* No comment provided by engineer. */ +"Collateral Information" = "Collateral Information"; + /* No comment provided by engineer. */ "Collateral Tx" = "Collateral Tx"; @@ -215,6 +227,9 @@ /* No comment provided by engineer. */ "Continue" = "Continue"; +/* No comment provided by engineer. */ +"Control" = "Control"; + /* No comment provided by engineer. */ "Copied" = "Copied"; @@ -323,6 +338,9 @@ /* No comment provided by engineer. */ "Enter" = "Enter"; +/* No comment provided by engineer. */ +"Enter a Nickname for this Masternode" = "Enter a Nickname for this Masternode"; + /* No comment provided by engineer. */ "Enter IP Address of Masternode" = "Enter IP Address of Masternode"; @@ -407,6 +425,9 @@ /* No comment provided by engineer. */ "Holding funds index:" = "Holding funds index:"; +/* No comment provided by engineer. */ +"Host" = "Host"; + /* No comment provided by engineer. */ "I accept that I will lose my coins if I no longer possess the recovery phrase" = "accetto di perdere le mie monete se non possiedo la frase di recupero"; @@ -485,6 +506,9 @@ /* Translate it as short as possible! (24 symbols max) */ "Local Currency" = "Local Currency"; +/* No comment provided by engineer. */ +"Local Name" = "Local Name"; + /* No comment provided by engineer. */ "Local requested amount: %@" = "Local requested amount: %@"; @@ -599,6 +623,9 @@ /* No comment provided by engineer. */ "No address copied" = "No address copied"; +/* No comment provided by engineer. */ +"No Collateral Information" = "No Collateral Information"; + /* No comment provided by engineer. */ "no exchange rate data" = "nessun dato del tasso di cambio"; @@ -980,6 +1007,9 @@ /* No comment provided by engineer. */ "Show Recovery Phrase" = "Show Recovery Phrase"; +/* No comment provided by engineer. */ +"Sign Message" = "Sign Message"; + /* No comment provided by engineer. */ "Size:" = "Size:"; @@ -1142,6 +1172,21 @@ /* No comment provided by engineer. */ "Unknown address" = "Unknown address"; +/* No comment provided by engineer. */ +"Unknown Operator Public Key" = "Unknown Operator Public Key"; + +/* No comment provided by engineer. */ +"Unknown Owner Private Key" = "Unknown Owner Private Key"; + +/* No comment provided by engineer. */ +"Unknown Payout Address" = "Unknown Payout Address"; + +/* No comment provided by engineer. */ +"Unknown Voting Public Key" = "Unknown Voting Public Key"; + +/* No comment provided by engineer. */ +"Unnamed" = "Unnamed"; + /* No comment provided by engineer. */ "Unsupported or corrupted document" = "Unsupported or corrupted document"; @@ -1151,6 +1196,9 @@ /* No comment provided by engineer. */ "Unverified" = "Non verificato"; +/* No comment provided by engineer. */ +"Update Host" = "Update Host"; + /* No comment provided by engineer. */ "Uphold" = "Uphold"; diff --git a/DashWallet/ja.lproj/Localizable.strings b/DashWallet/ja.lproj/Localizable.strings index 663dec7aa..b6204c50b 100644 --- a/DashWallet/ja.lproj/Localizable.strings +++ b/DashWallet/ja.lproj/Localizable.strings @@ -140,15 +140,24 @@ /* No comment provided by engineer. */ "Change" = "Change"; +/* No comment provided by engineer. */ +"Change Operator" = "Change Operator"; + /* No comment provided by engineer. */ "Change passcode" = "パスコードを変更"; /* No comment provided by engineer. */ "Change payment amount?" = "Change payment amount?"; +/* No comment provided by engineer. */ +"Change Payout Address" = "Change Payout Address"; + /* No comment provided by engineer. */ "Change PIN" = "Change PIN"; +/* No comment provided by engineer. */ +"Change Voting Key" = "Change Voting Key"; + /* No comment provided by engineer. */ "Check your connection" = "Check your connection"; @@ -188,6 +197,9 @@ /* No comment provided by engineer. */ "Collateral Index" = "Collateral Index"; +/* No comment provided by engineer. */ +"Collateral Information" = "Collateral Information"; + /* No comment provided by engineer. */ "Collateral Tx" = "Collateral Tx"; @@ -215,6 +227,9 @@ /* No comment provided by engineer. */ "Continue" = "Continue"; +/* No comment provided by engineer. */ +"Control" = "Control"; + /* No comment provided by engineer. */ "Copied" = "Copied"; @@ -323,6 +338,9 @@ /* No comment provided by engineer. */ "Enter" = "Enter"; +/* No comment provided by engineer. */ +"Enter a Nickname for this Masternode" = "Enter a Nickname for this Masternode"; + /* No comment provided by engineer. */ "Enter IP Address of Masternode" = "Enter IP Address of Masternode"; @@ -407,6 +425,9 @@ /* No comment provided by engineer. */ "Holding funds index:" = "Holding funds index:"; +/* No comment provided by engineer. */ +"Host" = "Host"; + /* No comment provided by engineer. */ "I accept that I will lose my coins if I no longer possess the recovery phrase" = "もし復元フレーズを無くしたら、自分のコインが失われることに同意します"; @@ -485,6 +506,9 @@ /* Translate it as short as possible! (24 symbols max) */ "Local Currency" = "Local Currency"; +/* No comment provided by engineer. */ +"Local Name" = "Local Name"; + /* No comment provided by engineer. */ "Local requested amount: %@" = "Local requested amount: %@"; @@ -599,6 +623,9 @@ /* No comment provided by engineer. */ "No address copied" = "No address copied"; +/* No comment provided by engineer. */ +"No Collateral Information" = "No Collateral Information"; + /* No comment provided by engineer. */ "no exchange rate data" = "為替レートのデータがありません"; @@ -980,6 +1007,9 @@ /* No comment provided by engineer. */ "Show Recovery Phrase" = "Show Recovery Phrase"; +/* No comment provided by engineer. */ +"Sign Message" = "Sign Message"; + /* No comment provided by engineer. */ "Size:" = "Size:"; @@ -1142,6 +1172,21 @@ /* No comment provided by engineer. */ "Unknown address" = "Unknown address"; +/* No comment provided by engineer. */ +"Unknown Operator Public Key" = "Unknown Operator Public Key"; + +/* No comment provided by engineer. */ +"Unknown Owner Private Key" = "Unknown Owner Private Key"; + +/* No comment provided by engineer. */ +"Unknown Payout Address" = "Unknown Payout Address"; + +/* No comment provided by engineer. */ +"Unknown Voting Public Key" = "Unknown Voting Public Key"; + +/* No comment provided by engineer. */ +"Unnamed" = "Unnamed"; + /* No comment provided by engineer. */ "Unsupported or corrupted document" = "Unsupported or corrupted document"; @@ -1151,6 +1196,9 @@ /* No comment provided by engineer. */ "Unverified" = "未検証"; +/* No comment provided by engineer. */ +"Update Host" = "Update Host"; + /* No comment provided by engineer. */ "Uphold" = "Uphold"; diff --git a/DashWallet/ko.lproj/Localizable.strings b/DashWallet/ko.lproj/Localizable.strings index 2d8afe503..9eae30797 100644 --- a/DashWallet/ko.lproj/Localizable.strings +++ b/DashWallet/ko.lproj/Localizable.strings @@ -140,15 +140,24 @@ /* No comment provided by engineer. */ "Change" = "Change"; +/* No comment provided by engineer. */ +"Change Operator" = "Change Operator"; + /* No comment provided by engineer. */ "Change passcode" = "암호 변경"; /* No comment provided by engineer. */ "Change payment amount?" = "Change payment amount?"; +/* No comment provided by engineer. */ +"Change Payout Address" = "Change Payout Address"; + /* No comment provided by engineer. */ "Change PIN" = "Change PIN"; +/* No comment provided by engineer. */ +"Change Voting Key" = "Change Voting Key"; + /* No comment provided by engineer. */ "Check your connection" = "Check your connection"; @@ -188,6 +197,9 @@ /* No comment provided by engineer. */ "Collateral Index" = "Collateral Index"; +/* No comment provided by engineer. */ +"Collateral Information" = "Collateral Information"; + /* No comment provided by engineer. */ "Collateral Tx" = "Collateral Tx"; @@ -215,6 +227,9 @@ /* No comment provided by engineer. */ "Continue" = "Continue"; +/* No comment provided by engineer. */ +"Control" = "Control"; + /* No comment provided by engineer. */ "Copied" = "Copied"; @@ -323,6 +338,9 @@ /* No comment provided by engineer. */ "Enter" = "Enter"; +/* No comment provided by engineer. */ +"Enter a Nickname for this Masternode" = "Enter a Nickname for this Masternode"; + /* No comment provided by engineer. */ "Enter IP Address of Masternode" = "Enter IP Address of Masternode"; @@ -407,6 +425,9 @@ /* No comment provided by engineer. */ "Holding funds index:" = "Holding funds index:"; +/* No comment provided by engineer. */ +"Host" = "Host"; + /* No comment provided by engineer. */ "I accept that I will lose my coins if I no longer possess the recovery phrase" = "복구 문구를 보유하고 있지 않은 경우 코인을 분실하는 것에 동의합니다."; @@ -485,6 +506,9 @@ /* Translate it as short as possible! (24 symbols max) */ "Local Currency" = "Local Currency"; +/* No comment provided by engineer. */ +"Local Name" = "Local Name"; + /* No comment provided by engineer. */ "Local requested amount: %@" = "Local requested amount: %@"; @@ -599,6 +623,9 @@ /* No comment provided by engineer. */ "No address copied" = "No address copied"; +/* No comment provided by engineer. */ +"No Collateral Information" = "No Collateral Information"; + /* No comment provided by engineer. */ "no exchange rate data" = "가격 정보가 없습니다."; @@ -980,6 +1007,9 @@ /* No comment provided by engineer. */ "Show Recovery Phrase" = "Show Recovery Phrase"; +/* No comment provided by engineer. */ +"Sign Message" = "Sign Message"; + /* No comment provided by engineer. */ "Size:" = "Size:"; @@ -1142,6 +1172,21 @@ /* No comment provided by engineer. */ "Unknown address" = "Unknown address"; +/* No comment provided by engineer. */ +"Unknown Operator Public Key" = "Unknown Operator Public Key"; + +/* No comment provided by engineer. */ +"Unknown Owner Private Key" = "Unknown Owner Private Key"; + +/* No comment provided by engineer. */ +"Unknown Payout Address" = "Unknown Payout Address"; + +/* No comment provided by engineer. */ +"Unknown Voting Public Key" = "Unknown Voting Public Key"; + +/* No comment provided by engineer. */ +"Unnamed" = "Unnamed"; + /* No comment provided by engineer. */ "Unsupported or corrupted document" = "Unsupported or corrupted document"; @@ -1151,6 +1196,9 @@ /* No comment provided by engineer. */ "Unverified" = "인증되지 않음"; +/* No comment provided by engineer. */ +"Update Host" = "Update Host"; + /* No comment provided by engineer. */ "Uphold" = "업홀드"; diff --git a/DashWallet/nb.lproj/Localizable.strings b/DashWallet/nb.lproj/Localizable.strings index 16d310b3a..1d555e07e 100644 --- a/DashWallet/nb.lproj/Localizable.strings +++ b/DashWallet/nb.lproj/Localizable.strings @@ -140,15 +140,24 @@ /* No comment provided by engineer. */ "Change" = "Change"; +/* No comment provided by engineer. */ +"Change Operator" = "Change Operator"; + /* No comment provided by engineer. */ "Change passcode" = "Change passcode"; /* No comment provided by engineer. */ "Change payment amount?" = "Change payment amount?"; +/* No comment provided by engineer. */ +"Change Payout Address" = "Change Payout Address"; + /* No comment provided by engineer. */ "Change PIN" = "Change PIN"; +/* No comment provided by engineer. */ +"Change Voting Key" = "Change Voting Key"; + /* No comment provided by engineer. */ "Check your connection" = "Check your connection"; @@ -188,6 +197,9 @@ /* No comment provided by engineer. */ "Collateral Index" = "Collateral Index"; +/* No comment provided by engineer. */ +"Collateral Information" = "Collateral Information"; + /* No comment provided by engineer. */ "Collateral Tx" = "Collateral Tx"; @@ -215,6 +227,9 @@ /* No comment provided by engineer. */ "Continue" = "Continue"; +/* No comment provided by engineer. */ +"Control" = "Control"; + /* No comment provided by engineer. */ "Copied" = "Copied"; @@ -323,6 +338,9 @@ /* No comment provided by engineer. */ "Enter" = "Enter"; +/* No comment provided by engineer. */ +"Enter a Nickname for this Masternode" = "Enter a Nickname for this Masternode"; + /* No comment provided by engineer. */ "Enter IP Address of Masternode" = "Enter IP Address of Masternode"; @@ -407,6 +425,9 @@ /* No comment provided by engineer. */ "Holding funds index:" = "Holding funds index:"; +/* No comment provided by engineer. */ +"Host" = "Host"; + /* No comment provided by engineer. */ "I accept that I will lose my coins if I no longer possess the recovery phrase" = "I accept that I will lose my coins if I no longer possess the recovery phrase"; @@ -485,6 +506,9 @@ /* Translate it as short as possible! (24 symbols max) */ "Local Currency" = "Local Currency"; +/* No comment provided by engineer. */ +"Local Name" = "Local Name"; + /* No comment provided by engineer. */ "Local requested amount: %@" = "Local requested amount: %@"; @@ -599,6 +623,9 @@ /* No comment provided by engineer. */ "No address copied" = "No address copied"; +/* No comment provided by engineer. */ +"No Collateral Information" = "No Collateral Information"; + /* No comment provided by engineer. */ "no exchange rate data" = "data for valutakurs ikke tilgjengelig"; @@ -980,6 +1007,9 @@ /* No comment provided by engineer. */ "Show Recovery Phrase" = "Show Recovery Phrase"; +/* No comment provided by engineer. */ +"Sign Message" = "Sign Message"; + /* No comment provided by engineer. */ "Size:" = "Size:"; @@ -1142,6 +1172,21 @@ /* No comment provided by engineer. */ "Unknown address" = "Unknown address"; +/* No comment provided by engineer. */ +"Unknown Operator Public Key" = "Unknown Operator Public Key"; + +/* No comment provided by engineer. */ +"Unknown Owner Private Key" = "Unknown Owner Private Key"; + +/* No comment provided by engineer. */ +"Unknown Payout Address" = "Unknown Payout Address"; + +/* No comment provided by engineer. */ +"Unknown Voting Public Key" = "Unknown Voting Public Key"; + +/* No comment provided by engineer. */ +"Unnamed" = "Unnamed"; + /* No comment provided by engineer. */ "Unsupported or corrupted document" = "Unsupported or corrupted document"; @@ -1151,6 +1196,9 @@ /* No comment provided by engineer. */ "Unverified" = "Unverified"; +/* No comment provided by engineer. */ +"Update Host" = "Update Host"; + /* No comment provided by engineer. */ "Uphold" = "Uphold"; diff --git a/DashWallet/nl.lproj/Localizable.strings b/DashWallet/nl.lproj/Localizable.strings index 5e6f065eb..685757efd 100644 --- a/DashWallet/nl.lproj/Localizable.strings +++ b/DashWallet/nl.lproj/Localizable.strings @@ -140,15 +140,24 @@ /* No comment provided by engineer. */ "Change" = "Change"; +/* No comment provided by engineer. */ +"Change Operator" = "Change Operator"; + /* No comment provided by engineer. */ "Change passcode" = "Wijzig toegangscode"; /* No comment provided by engineer. */ "Change payment amount?" = "Change payment amount?"; +/* No comment provided by engineer. */ +"Change Payout Address" = "Change Payout Address"; + /* No comment provided by engineer. */ "Change PIN" = "Change PIN"; +/* No comment provided by engineer. */ +"Change Voting Key" = "Change Voting Key"; + /* No comment provided by engineer. */ "Check your connection" = "Check your connection"; @@ -188,6 +197,9 @@ /* No comment provided by engineer. */ "Collateral Index" = "Collateral Index"; +/* No comment provided by engineer. */ +"Collateral Information" = "Collateral Information"; + /* No comment provided by engineer. */ "Collateral Tx" = "Collateral Tx"; @@ -215,6 +227,9 @@ /* No comment provided by engineer. */ "Continue" = "Continue"; +/* No comment provided by engineer. */ +"Control" = "Control"; + /* No comment provided by engineer. */ "Copied" = "Copied"; @@ -323,6 +338,9 @@ /* No comment provided by engineer. */ "Enter" = "Enter"; +/* No comment provided by engineer. */ +"Enter a Nickname for this Masternode" = "Enter a Nickname for this Masternode"; + /* No comment provided by engineer. */ "Enter IP Address of Masternode" = "Enter IP Address of Masternode"; @@ -407,6 +425,9 @@ /* No comment provided by engineer. */ "Holding funds index:" = "Holding funds index:"; +/* No comment provided by engineer. */ +"Host" = "Host"; + /* No comment provided by engineer. */ "I accept that I will lose my coins if I no longer possess the recovery phrase" = "Ik ga akkoord dat ik mijn munten kwijt raak als ik de herstelzin niet meer bezit"; @@ -485,6 +506,9 @@ /* Translate it as short as possible! (24 symbols max) */ "Local Currency" = "Local Currency"; +/* No comment provided by engineer. */ +"Local Name" = "Local Name"; + /* No comment provided by engineer. */ "Local requested amount: %@" = "Local requested amount: %@"; @@ -599,6 +623,9 @@ /* No comment provided by engineer. */ "No address copied" = "No address copied"; +/* No comment provided by engineer. */ +"No Collateral Information" = "No Collateral Information"; + /* No comment provided by engineer. */ "no exchange rate data" = "geen beursratio-gegevens"; @@ -980,6 +1007,9 @@ /* No comment provided by engineer. */ "Show Recovery Phrase" = "Show Recovery Phrase"; +/* No comment provided by engineer. */ +"Sign Message" = "Sign Message"; + /* No comment provided by engineer. */ "Size:" = "Size:"; @@ -1142,6 +1172,21 @@ /* No comment provided by engineer. */ "Unknown address" = "Unknown address"; +/* No comment provided by engineer. */ +"Unknown Operator Public Key" = "Unknown Operator Public Key"; + +/* No comment provided by engineer. */ +"Unknown Owner Private Key" = "Unknown Owner Private Key"; + +/* No comment provided by engineer. */ +"Unknown Payout Address" = "Unknown Payout Address"; + +/* No comment provided by engineer. */ +"Unknown Voting Public Key" = "Unknown Voting Public Key"; + +/* No comment provided by engineer. */ +"Unnamed" = "Unnamed"; + /* No comment provided by engineer. */ "Unsupported or corrupted document" = "Unsupported or corrupted document"; @@ -1151,6 +1196,9 @@ /* No comment provided by engineer. */ "Unverified" = "Ongeverifieerd"; +/* No comment provided by engineer. */ +"Update Host" = "Update Host"; + /* No comment provided by engineer. */ "Uphold" = "Uphold"; diff --git a/DashWallet/pl.lproj/Localizable.strings b/DashWallet/pl.lproj/Localizable.strings index 6dc976745..0ee3ca041 100644 --- a/DashWallet/pl.lproj/Localizable.strings +++ b/DashWallet/pl.lproj/Localizable.strings @@ -140,15 +140,24 @@ /* No comment provided by engineer. */ "Change" = "Change"; +/* No comment provided by engineer. */ +"Change Operator" = "Change Operator"; + /* No comment provided by engineer. */ "Change passcode" = "Zmień hasło"; /* No comment provided by engineer. */ "Change payment amount?" = "Change payment amount?"; +/* No comment provided by engineer. */ +"Change Payout Address" = "Change Payout Address"; + /* No comment provided by engineer. */ "Change PIN" = "Change PIN"; +/* No comment provided by engineer. */ +"Change Voting Key" = "Change Voting Key"; + /* No comment provided by engineer. */ "Check your connection" = "Check your connection"; @@ -188,6 +197,9 @@ /* No comment provided by engineer. */ "Collateral Index" = "Collateral Index"; +/* No comment provided by engineer. */ +"Collateral Information" = "Collateral Information"; + /* No comment provided by engineer. */ "Collateral Tx" = "Collateral Tx"; @@ -215,6 +227,9 @@ /* No comment provided by engineer. */ "Continue" = "Continue"; +/* No comment provided by engineer. */ +"Control" = "Control"; + /* No comment provided by engineer. */ "Copied" = "Copied"; @@ -323,6 +338,9 @@ /* No comment provided by engineer. */ "Enter" = "Enter"; +/* No comment provided by engineer. */ +"Enter a Nickname for this Masternode" = "Enter a Nickname for this Masternode"; + /* No comment provided by engineer. */ "Enter IP Address of Masternode" = "Enter IP Address of Masternode"; @@ -407,6 +425,9 @@ /* No comment provided by engineer. */ "Holding funds index:" = "Holding funds index:"; +/* No comment provided by engineer. */ +"Host" = "Host"; + /* No comment provided by engineer. */ "I accept that I will lose my coins if I no longer possess the recovery phrase" = "Akceptuję to, że stracę wszystkie moje monety jeśli nie będę miał frazy do odzyskiwania porfela"; @@ -485,6 +506,9 @@ /* Translate it as short as possible! (24 symbols max) */ "Local Currency" = "Local Currency"; +/* No comment provided by engineer. */ +"Local Name" = "Local Name"; + /* No comment provided by engineer. */ "Local requested amount: %@" = "Local requested amount: %@"; @@ -599,6 +623,9 @@ /* No comment provided by engineer. */ "No address copied" = "No address copied"; +/* No comment provided by engineer. */ +"No Collateral Information" = "No Collateral Information"; + /* No comment provided by engineer. */ "no exchange rate data" = "brak danych kursu wymiany"; @@ -980,6 +1007,9 @@ /* No comment provided by engineer. */ "Show Recovery Phrase" = "Show Recovery Phrase"; +/* No comment provided by engineer. */ +"Sign Message" = "Sign Message"; + /* No comment provided by engineer. */ "Size:" = "Size:"; @@ -1142,6 +1172,21 @@ /* No comment provided by engineer. */ "Unknown address" = "Unknown address"; +/* No comment provided by engineer. */ +"Unknown Operator Public Key" = "Unknown Operator Public Key"; + +/* No comment provided by engineer. */ +"Unknown Owner Private Key" = "Unknown Owner Private Key"; + +/* No comment provided by engineer. */ +"Unknown Payout Address" = "Unknown Payout Address"; + +/* No comment provided by engineer. */ +"Unknown Voting Public Key" = "Unknown Voting Public Key"; + +/* No comment provided by engineer. */ +"Unnamed" = "Unnamed"; + /* No comment provided by engineer. */ "Unsupported or corrupted document" = "Unsupported or corrupted document"; @@ -1151,6 +1196,9 @@ /* No comment provided by engineer. */ "Unverified" = "Niezweryfikowany"; +/* No comment provided by engineer. */ +"Update Host" = "Update Host"; + /* No comment provided by engineer. */ "Uphold" = "Uphold"; diff --git a/DashWallet/pt.lproj/Localizable.strings b/DashWallet/pt.lproj/Localizable.strings index 592e69e74..0fceb10bc 100644 --- a/DashWallet/pt.lproj/Localizable.strings +++ b/DashWallet/pt.lproj/Localizable.strings @@ -140,15 +140,24 @@ /* No comment provided by engineer. */ "Change" = "Change"; +/* No comment provided by engineer. */ +"Change Operator" = "Change Operator"; + /* No comment provided by engineer. */ "Change passcode" = "Mudar senha"; /* No comment provided by engineer. */ "Change payment amount?" = "Change payment amount?"; +/* No comment provided by engineer. */ +"Change Payout Address" = "Change Payout Address"; + /* No comment provided by engineer. */ "Change PIN" = "Change PIN"; +/* No comment provided by engineer. */ +"Change Voting Key" = "Change Voting Key"; + /* No comment provided by engineer. */ "Check your connection" = "Check your connection"; @@ -188,6 +197,9 @@ /* No comment provided by engineer. */ "Collateral Index" = "Collateral Index"; +/* No comment provided by engineer. */ +"Collateral Information" = "Collateral Information"; + /* No comment provided by engineer. */ "Collateral Tx" = "Collateral Tx"; @@ -215,6 +227,9 @@ /* No comment provided by engineer. */ "Continue" = "Continue"; +/* No comment provided by engineer. */ +"Control" = "Control"; + /* No comment provided by engineer. */ "Copied" = "Copied"; @@ -323,6 +338,9 @@ /* No comment provided by engineer. */ "Enter" = "Enter"; +/* No comment provided by engineer. */ +"Enter a Nickname for this Masternode" = "Enter a Nickname for this Masternode"; + /* No comment provided by engineer. */ "Enter IP Address of Masternode" = "Enter IP Address of Masternode"; @@ -407,6 +425,9 @@ /* No comment provided by engineer. */ "Holding funds index:" = "Holding funds index:"; +/* No comment provided by engineer. */ +"Host" = "Host"; + /* No comment provided by engineer. */ "I accept that I will lose my coins if I no longer possess the recovery phrase" = "Eu aceito que perderei minhas moedas se eu não mais possuir a frase de recuperação"; @@ -485,6 +506,9 @@ /* Translate it as short as possible! (24 symbols max) */ "Local Currency" = "Local Currency"; +/* No comment provided by engineer. */ +"Local Name" = "Local Name"; + /* No comment provided by engineer. */ "Local requested amount: %@" = "Local requested amount: %@"; @@ -599,6 +623,9 @@ /* No comment provided by engineer. */ "No address copied" = "No address copied"; +/* No comment provided by engineer. */ +"No Collateral Information" = "No Collateral Information"; + /* No comment provided by engineer. */ "no exchange rate data" = "não há dados da taxa de câmbio"; @@ -980,6 +1007,9 @@ /* No comment provided by engineer. */ "Show Recovery Phrase" = "Show Recovery Phrase"; +/* No comment provided by engineer. */ +"Sign Message" = "Sign Message"; + /* No comment provided by engineer. */ "Size:" = "Size:"; @@ -1142,6 +1172,21 @@ /* No comment provided by engineer. */ "Unknown address" = "Unknown address"; +/* No comment provided by engineer. */ +"Unknown Operator Public Key" = "Unknown Operator Public Key"; + +/* No comment provided by engineer. */ +"Unknown Owner Private Key" = "Unknown Owner Private Key"; + +/* No comment provided by engineer. */ +"Unknown Payout Address" = "Unknown Payout Address"; + +/* No comment provided by engineer. */ +"Unknown Voting Public Key" = "Unknown Voting Public Key"; + +/* No comment provided by engineer. */ +"Unnamed" = "Unnamed"; + /* No comment provided by engineer. */ "Unsupported or corrupted document" = "Unsupported or corrupted document"; @@ -1151,6 +1196,9 @@ /* No comment provided by engineer. */ "Unverified" = "Não verificada"; +/* No comment provided by engineer. */ +"Update Host" = "Update Host"; + /* No comment provided by engineer. */ "Uphold" = "Uphold"; diff --git a/DashWallet/ru.lproj/Localizable.strings b/DashWallet/ru.lproj/Localizable.strings index 60d5edea7..a69fbb676 100644 --- a/DashWallet/ru.lproj/Localizable.strings +++ b/DashWallet/ru.lproj/Localizable.strings @@ -140,15 +140,24 @@ /* No comment provided by engineer. */ "Change" = "Change"; +/* No comment provided by engineer. */ +"Change Operator" = "Change Operator"; + /* No comment provided by engineer. */ "Change passcode" = "Изменить код доступа"; /* No comment provided by engineer. */ "Change payment amount?" = "Change payment amount?"; +/* No comment provided by engineer. */ +"Change Payout Address" = "Change Payout Address"; + /* No comment provided by engineer. */ "Change PIN" = "Change PIN"; +/* No comment provided by engineer. */ +"Change Voting Key" = "Change Voting Key"; + /* No comment provided by engineer. */ "Check your connection" = "Check your connection"; @@ -188,6 +197,9 @@ /* No comment provided by engineer. */ "Collateral Index" = "Collateral Index"; +/* No comment provided by engineer. */ +"Collateral Information" = "Collateral Information"; + /* No comment provided by engineer. */ "Collateral Tx" = "Collateral Tx"; @@ -215,6 +227,9 @@ /* No comment provided by engineer. */ "Continue" = "Continue"; +/* No comment provided by engineer. */ +"Control" = "Control"; + /* No comment provided by engineer. */ "Copied" = "Copied"; @@ -323,6 +338,9 @@ /* No comment provided by engineer. */ "Enter" = "Enter"; +/* No comment provided by engineer. */ +"Enter a Nickname for this Masternode" = "Enter a Nickname for this Masternode"; + /* No comment provided by engineer. */ "Enter IP Address of Masternode" = "Enter IP Address of Masternode"; @@ -407,6 +425,9 @@ /* No comment provided by engineer. */ "Holding funds index:" = "Holding funds index:"; +/* No comment provided by engineer. */ +"Host" = "Host"; + /* No comment provided by engineer. */ "I accept that I will lose my coins if I no longer possess the recovery phrase" = "Я понимаю, что потеряю свои монеты, если у меня не будет фразы восстановления"; @@ -485,6 +506,9 @@ /* Translate it as short as possible! (24 symbols max) */ "Local Currency" = "Local Currency"; +/* No comment provided by engineer. */ +"Local Name" = "Local Name"; + /* No comment provided by engineer. */ "Local requested amount: %@" = "Local requested amount: %@"; @@ -599,6 +623,9 @@ /* No comment provided by engineer. */ "No address copied" = "No address copied"; +/* No comment provided by engineer. */ +"No Collateral Information" = "No Collateral Information"; + /* No comment provided by engineer. */ "no exchange rate data" = "Не удалось получить курсы обмена"; @@ -980,6 +1007,9 @@ /* No comment provided by engineer. */ "Show Recovery Phrase" = "Show Recovery Phrase"; +/* No comment provided by engineer. */ +"Sign Message" = "Sign Message"; + /* No comment provided by engineer. */ "Size:" = "Size:"; @@ -1142,6 +1172,21 @@ /* No comment provided by engineer. */ "Unknown address" = "Unknown address"; +/* No comment provided by engineer. */ +"Unknown Operator Public Key" = "Unknown Operator Public Key"; + +/* No comment provided by engineer. */ +"Unknown Owner Private Key" = "Unknown Owner Private Key"; + +/* No comment provided by engineer. */ +"Unknown Payout Address" = "Unknown Payout Address"; + +/* No comment provided by engineer. */ +"Unknown Voting Public Key" = "Unknown Voting Public Key"; + +/* No comment provided by engineer. */ +"Unnamed" = "Unnamed"; + /* No comment provided by engineer. */ "Unsupported or corrupted document" = "Unsupported or corrupted document"; @@ -1151,6 +1196,9 @@ /* No comment provided by engineer. */ "Unverified" = "Неподтверждённый"; +/* No comment provided by engineer. */ +"Update Host" = "Update Host"; + /* No comment provided by engineer. */ "Uphold" = "Uphold"; diff --git a/DashWallet/sk.lproj/Localizable.strings b/DashWallet/sk.lproj/Localizable.strings index be8675657..3781195b8 100644 --- a/DashWallet/sk.lproj/Localizable.strings +++ b/DashWallet/sk.lproj/Localizable.strings @@ -140,15 +140,24 @@ /* No comment provided by engineer. */ "Change" = "Change"; +/* No comment provided by engineer. */ +"Change Operator" = "Change Operator"; + /* No comment provided by engineer. */ "Change passcode" = "Zmeniť prístupový kód"; /* No comment provided by engineer. */ "Change payment amount?" = "Change payment amount?"; +/* No comment provided by engineer. */ +"Change Payout Address" = "Change Payout Address"; + /* No comment provided by engineer. */ "Change PIN" = "Change PIN"; +/* No comment provided by engineer. */ +"Change Voting Key" = "Change Voting Key"; + /* No comment provided by engineer. */ "Check your connection" = "Check your connection"; @@ -188,6 +197,9 @@ /* No comment provided by engineer. */ "Collateral Index" = "Collateral Index"; +/* No comment provided by engineer. */ +"Collateral Information" = "Collateral Information"; + /* No comment provided by engineer. */ "Collateral Tx" = "Collateral Tx"; @@ -215,6 +227,9 @@ /* No comment provided by engineer. */ "Continue" = "Continue"; +/* No comment provided by engineer. */ +"Control" = "Control"; + /* No comment provided by engineer. */ "Copied" = "Copied"; @@ -323,6 +338,9 @@ /* No comment provided by engineer. */ "Enter" = "Enter"; +/* No comment provided by engineer. */ +"Enter a Nickname for this Masternode" = "Enter a Nickname for this Masternode"; + /* No comment provided by engineer. */ "Enter IP Address of Masternode" = "Enter IP Address of Masternode"; @@ -407,6 +425,9 @@ /* No comment provided by engineer. */ "Holding funds index:" = "Holding funds index:"; +/* No comment provided by engineer. */ +"Host" = "Host"; + /* No comment provided by engineer. */ "I accept that I will lose my coins if I no longer possess the recovery phrase" = "Akceptujem, že stratím svoje mince v prípade, že už nedržím frázu pre obnovenie"; @@ -485,6 +506,9 @@ /* Translate it as short as possible! (24 symbols max) */ "Local Currency" = "Local Currency"; +/* No comment provided by engineer. */ +"Local Name" = "Local Name"; + /* No comment provided by engineer. */ "Local requested amount: %@" = "Local requested amount: %@"; @@ -599,6 +623,9 @@ /* No comment provided by engineer. */ "No address copied" = "No address copied"; +/* No comment provided by engineer. */ +"No Collateral Information" = "No Collateral Information"; + /* No comment provided by engineer. */ "no exchange rate data" = "no exchange rate data"; @@ -980,6 +1007,9 @@ /* No comment provided by engineer. */ "Show Recovery Phrase" = "Show Recovery Phrase"; +/* No comment provided by engineer. */ +"Sign Message" = "Sign Message"; + /* No comment provided by engineer. */ "Size:" = "Size:"; @@ -1142,6 +1172,21 @@ /* No comment provided by engineer. */ "Unknown address" = "Unknown address"; +/* No comment provided by engineer. */ +"Unknown Operator Public Key" = "Unknown Operator Public Key"; + +/* No comment provided by engineer. */ +"Unknown Owner Private Key" = "Unknown Owner Private Key"; + +/* No comment provided by engineer. */ +"Unknown Payout Address" = "Unknown Payout Address"; + +/* No comment provided by engineer. */ +"Unknown Voting Public Key" = "Unknown Voting Public Key"; + +/* No comment provided by engineer. */ +"Unnamed" = "Unnamed"; + /* No comment provided by engineer. */ "Unsupported or corrupted document" = "Unsupported or corrupted document"; @@ -1151,6 +1196,9 @@ /* No comment provided by engineer. */ "Unverified" = "Unverified"; +/* No comment provided by engineer. */ +"Update Host" = "Update Host"; + /* No comment provided by engineer. */ "Uphold" = "Uphold"; diff --git a/DashWallet/sq.lproj/Localizable.strings b/DashWallet/sq.lproj/Localizable.strings index b6fefd45f..285d7dc93 100644 --- a/DashWallet/sq.lproj/Localizable.strings +++ b/DashWallet/sq.lproj/Localizable.strings @@ -140,15 +140,24 @@ /* No comment provided by engineer. */ "Change" = "Change"; +/* No comment provided by engineer. */ +"Change Operator" = "Change Operator"; + /* No comment provided by engineer. */ "Change passcode" = "Change passcode"; /* No comment provided by engineer. */ "Change payment amount?" = "Change payment amount?"; +/* No comment provided by engineer. */ +"Change Payout Address" = "Change Payout Address"; + /* No comment provided by engineer. */ "Change PIN" = "Change PIN"; +/* No comment provided by engineer. */ +"Change Voting Key" = "Change Voting Key"; + /* No comment provided by engineer. */ "Check your connection" = "Check your connection"; @@ -188,6 +197,9 @@ /* No comment provided by engineer. */ "Collateral Index" = "Collateral Index"; +/* No comment provided by engineer. */ +"Collateral Information" = "Collateral Information"; + /* No comment provided by engineer. */ "Collateral Tx" = "Collateral Tx"; @@ -215,6 +227,9 @@ /* No comment provided by engineer. */ "Continue" = "Continue"; +/* No comment provided by engineer. */ +"Control" = "Control"; + /* No comment provided by engineer. */ "Copied" = "Copied"; @@ -323,6 +338,9 @@ /* No comment provided by engineer. */ "Enter" = "Enter"; +/* No comment provided by engineer. */ +"Enter a Nickname for this Masternode" = "Enter a Nickname for this Masternode"; + /* No comment provided by engineer. */ "Enter IP Address of Masternode" = "Enter IP Address of Masternode"; @@ -407,6 +425,9 @@ /* No comment provided by engineer. */ "Holding funds index:" = "Holding funds index:"; +/* No comment provided by engineer. */ +"Host" = "Host"; + /* No comment provided by engineer. */ "I accept that I will lose my coins if I no longer possess the recovery phrase" = "I accept that I will lose my coins if I no longer possess the recovery phrase"; @@ -485,6 +506,9 @@ /* Translate it as short as possible! (24 symbols max) */ "Local Currency" = "Local Currency"; +/* No comment provided by engineer. */ +"Local Name" = "Local Name"; + /* No comment provided by engineer. */ "Local requested amount: %@" = "Local requested amount: %@"; @@ -599,6 +623,9 @@ /* No comment provided by engineer. */ "No address copied" = "No address copied"; +/* No comment provided by engineer. */ +"No Collateral Information" = "No Collateral Information"; + /* No comment provided by engineer. */ "no exchange rate data" = "no exchange rate data"; @@ -980,6 +1007,9 @@ /* No comment provided by engineer. */ "Show Recovery Phrase" = "Show Recovery Phrase"; +/* No comment provided by engineer. */ +"Sign Message" = "Sign Message"; + /* No comment provided by engineer. */ "Size:" = "Size:"; @@ -1142,6 +1172,21 @@ /* No comment provided by engineer. */ "Unknown address" = "Unknown address"; +/* No comment provided by engineer. */ +"Unknown Operator Public Key" = "Unknown Operator Public Key"; + +/* No comment provided by engineer. */ +"Unknown Owner Private Key" = "Unknown Owner Private Key"; + +/* No comment provided by engineer. */ +"Unknown Payout Address" = "Unknown Payout Address"; + +/* No comment provided by engineer. */ +"Unknown Voting Public Key" = "Unknown Voting Public Key"; + +/* No comment provided by engineer. */ +"Unnamed" = "Unnamed"; + /* No comment provided by engineer. */ "Unsupported or corrupted document" = "Unsupported or corrupted document"; @@ -1151,6 +1196,9 @@ /* No comment provided by engineer. */ "Unverified" = "Unverified"; +/* No comment provided by engineer. */ +"Update Host" = "Update Host"; + /* No comment provided by engineer. */ "Uphold" = "Uphold"; diff --git a/DashWallet/sv.lproj/Localizable.strings b/DashWallet/sv.lproj/Localizable.strings index 512277904..b1337ce86 100644 --- a/DashWallet/sv.lproj/Localizable.strings +++ b/DashWallet/sv.lproj/Localizable.strings @@ -140,15 +140,24 @@ /* No comment provided by engineer. */ "Change" = "Change"; +/* No comment provided by engineer. */ +"Change Operator" = "Change Operator"; + /* No comment provided by engineer. */ "Change passcode" = "Change passcode"; /* No comment provided by engineer. */ "Change payment amount?" = "Change payment amount?"; +/* No comment provided by engineer. */ +"Change Payout Address" = "Change Payout Address"; + /* No comment provided by engineer. */ "Change PIN" = "Change PIN"; +/* No comment provided by engineer. */ +"Change Voting Key" = "Change Voting Key"; + /* No comment provided by engineer. */ "Check your connection" = "Check your connection"; @@ -188,6 +197,9 @@ /* No comment provided by engineer. */ "Collateral Index" = "Collateral Index"; +/* No comment provided by engineer. */ +"Collateral Information" = "Collateral Information"; + /* No comment provided by engineer. */ "Collateral Tx" = "Collateral Tx"; @@ -215,6 +227,9 @@ /* No comment provided by engineer. */ "Continue" = "Continue"; +/* No comment provided by engineer. */ +"Control" = "Control"; + /* No comment provided by engineer. */ "Copied" = "Copied"; @@ -323,6 +338,9 @@ /* No comment provided by engineer. */ "Enter" = "Enter"; +/* No comment provided by engineer. */ +"Enter a Nickname for this Masternode" = "Enter a Nickname for this Masternode"; + /* No comment provided by engineer. */ "Enter IP Address of Masternode" = "Enter IP Address of Masternode"; @@ -407,6 +425,9 @@ /* No comment provided by engineer. */ "Holding funds index:" = "Holding funds index:"; +/* No comment provided by engineer. */ +"Host" = "Host"; + /* No comment provided by engineer. */ "I accept that I will lose my coins if I no longer possess the recovery phrase" = "I accept that I will lose my coins if I no longer possess the recovery phrase"; @@ -485,6 +506,9 @@ /* Translate it as short as possible! (24 symbols max) */ "Local Currency" = "Local Currency"; +/* No comment provided by engineer. */ +"Local Name" = "Local Name"; + /* No comment provided by engineer. */ "Local requested amount: %@" = "Local requested amount: %@"; @@ -599,6 +623,9 @@ /* No comment provided by engineer. */ "No address copied" = "No address copied"; +/* No comment provided by engineer. */ +"No Collateral Information" = "No Collateral Information"; + /* No comment provided by engineer. */ "no exchange rate data" = "ingen växlingskurs data"; @@ -980,6 +1007,9 @@ /* No comment provided by engineer. */ "Show Recovery Phrase" = "Show Recovery Phrase"; +/* No comment provided by engineer. */ +"Sign Message" = "Sign Message"; + /* No comment provided by engineer. */ "Size:" = "Size:"; @@ -1142,6 +1172,21 @@ /* No comment provided by engineer. */ "Unknown address" = "Unknown address"; +/* No comment provided by engineer. */ +"Unknown Operator Public Key" = "Unknown Operator Public Key"; + +/* No comment provided by engineer. */ +"Unknown Owner Private Key" = "Unknown Owner Private Key"; + +/* No comment provided by engineer. */ +"Unknown Payout Address" = "Unknown Payout Address"; + +/* No comment provided by engineer. */ +"Unknown Voting Public Key" = "Unknown Voting Public Key"; + +/* No comment provided by engineer. */ +"Unnamed" = "Unnamed"; + /* No comment provided by engineer. */ "Unsupported or corrupted document" = "Unsupported or corrupted document"; @@ -1151,6 +1196,9 @@ /* No comment provided by engineer. */ "Unverified" = "Unverified"; +/* No comment provided by engineer. */ +"Update Host" = "Update Host"; + /* No comment provided by engineer. */ "Uphold" = "Uphold"; diff --git a/DashWallet/th.lproj/Localizable.strings b/DashWallet/th.lproj/Localizable.strings index 2f28739d8..ad4b9f8d8 100644 --- a/DashWallet/th.lproj/Localizable.strings +++ b/DashWallet/th.lproj/Localizable.strings @@ -140,15 +140,24 @@ /* No comment provided by engineer. */ "Change" = "Change"; +/* No comment provided by engineer. */ +"Change Operator" = "Change Operator"; + /* No comment provided by engineer. */ "Change passcode" = "เปลี่ยนแปลงรหัสผ่าน"; /* No comment provided by engineer. */ "Change payment amount?" = "Change payment amount?"; +/* No comment provided by engineer. */ +"Change Payout Address" = "Change Payout Address"; + /* No comment provided by engineer. */ "Change PIN" = "Change PIN"; +/* No comment provided by engineer. */ +"Change Voting Key" = "Change Voting Key"; + /* No comment provided by engineer. */ "Check your connection" = "Check your connection"; @@ -188,6 +197,9 @@ /* No comment provided by engineer. */ "Collateral Index" = "Collateral Index"; +/* No comment provided by engineer. */ +"Collateral Information" = "Collateral Information"; + /* No comment provided by engineer. */ "Collateral Tx" = "Collateral Tx"; @@ -215,6 +227,9 @@ /* No comment provided by engineer. */ "Continue" = "Continue"; +/* No comment provided by engineer. */ +"Control" = "Control"; + /* No comment provided by engineer. */ "Copied" = "Copied"; @@ -323,6 +338,9 @@ /* No comment provided by engineer. */ "Enter" = "Enter"; +/* No comment provided by engineer. */ +"Enter a Nickname for this Masternode" = "Enter a Nickname for this Masternode"; + /* No comment provided by engineer. */ "Enter IP Address of Masternode" = "Enter IP Address of Masternode"; @@ -407,6 +425,9 @@ /* No comment provided by engineer. */ "Holding funds index:" = "Holding funds index:"; +/* No comment provided by engineer. */ +"Host" = "Host"; + /* No comment provided by engineer. */ "I accept that I will lose my coins if I no longer possess the recovery phrase" = "ฉันยอมรับที่ฉันจะสูญเสียเหรียญของฉันถ้าฉันไม่มีวลีกู้คืน"; @@ -485,6 +506,9 @@ /* Translate it as short as possible! (24 symbols max) */ "Local Currency" = "Local Currency"; +/* No comment provided by engineer. */ +"Local Name" = "Local Name"; + /* No comment provided by engineer. */ "Local requested amount: %@" = "Local requested amount: %@"; @@ -599,6 +623,9 @@ /* No comment provided by engineer. */ "No address copied" = "No address copied"; +/* No comment provided by engineer. */ +"No Collateral Information" = "No Collateral Information"; + /* No comment provided by engineer. */ "no exchange rate data" = "ไม่มีข้อมูลอัตราแลกเปลี่ยน"; @@ -980,6 +1007,9 @@ /* No comment provided by engineer. */ "Show Recovery Phrase" = "Show Recovery Phrase"; +/* No comment provided by engineer. */ +"Sign Message" = "Sign Message"; + /* No comment provided by engineer. */ "Size:" = "Size:"; @@ -1142,6 +1172,21 @@ /* No comment provided by engineer. */ "Unknown address" = "Unknown address"; +/* No comment provided by engineer. */ +"Unknown Operator Public Key" = "Unknown Operator Public Key"; + +/* No comment provided by engineer. */ +"Unknown Owner Private Key" = "Unknown Owner Private Key"; + +/* No comment provided by engineer. */ +"Unknown Payout Address" = "Unknown Payout Address"; + +/* No comment provided by engineer. */ +"Unknown Voting Public Key" = "Unknown Voting Public Key"; + +/* No comment provided by engineer. */ +"Unnamed" = "Unnamed"; + /* No comment provided by engineer. */ "Unsupported or corrupted document" = "Unsupported or corrupted document"; @@ -1151,6 +1196,9 @@ /* No comment provided by engineer. */ "Unverified" = "Unverified"; +/* No comment provided by engineer. */ +"Update Host" = "Update Host"; + /* No comment provided by engineer. */ "Uphold" = "Uphold"; diff --git a/DashWallet/tr.lproj/Localizable.strings b/DashWallet/tr.lproj/Localizable.strings index 93ba04150..eda3683a4 100644 --- a/DashWallet/tr.lproj/Localizable.strings +++ b/DashWallet/tr.lproj/Localizable.strings @@ -140,15 +140,24 @@ /* No comment provided by engineer. */ "Change" = "Change"; +/* No comment provided by engineer. */ +"Change Operator" = "Change Operator"; + /* No comment provided by engineer. */ "Change passcode" = "Parolayı değiştir"; /* No comment provided by engineer. */ "Change payment amount?" = "Change payment amount?"; +/* No comment provided by engineer. */ +"Change Payout Address" = "Change Payout Address"; + /* No comment provided by engineer. */ "Change PIN" = "Change PIN"; +/* No comment provided by engineer. */ +"Change Voting Key" = "Change Voting Key"; + /* No comment provided by engineer. */ "Check your connection" = "Check your connection"; @@ -188,6 +197,9 @@ /* No comment provided by engineer. */ "Collateral Index" = "Collateral Index"; +/* No comment provided by engineer. */ +"Collateral Information" = "Collateral Information"; + /* No comment provided by engineer. */ "Collateral Tx" = "Collateral Tx"; @@ -215,6 +227,9 @@ /* No comment provided by engineer. */ "Continue" = "Continue"; +/* No comment provided by engineer. */ +"Control" = "Control"; + /* No comment provided by engineer. */ "Copied" = "Copied"; @@ -323,6 +338,9 @@ /* No comment provided by engineer. */ "Enter" = "Enter"; +/* No comment provided by engineer. */ +"Enter a Nickname for this Masternode" = "Enter a Nickname for this Masternode"; + /* No comment provided by engineer. */ "Enter IP Address of Masternode" = "Enter IP Address of Masternode"; @@ -407,6 +425,9 @@ /* No comment provided by engineer. */ "Holding funds index:" = "Holding funds index:"; +/* No comment provided by engineer. */ +"Host" = "Host"; + /* No comment provided by engineer. */ "I accept that I will lose my coins if I no longer possess the recovery phrase" = "Eğer kurtarma metnime sahip olmazsam paralarımı kaybedeceğimi kabul ediyorum"; @@ -485,6 +506,9 @@ /* Translate it as short as possible! (24 symbols max) */ "Local Currency" = "Local Currency"; +/* No comment provided by engineer. */ +"Local Name" = "Local Name"; + /* No comment provided by engineer. */ "Local requested amount: %@" = "Local requested amount: %@"; @@ -599,6 +623,9 @@ /* No comment provided by engineer. */ "No address copied" = "No address copied"; +/* No comment provided by engineer. */ +"No Collateral Information" = "No Collateral Information"; + /* No comment provided by engineer. */ "no exchange rate data" = "döviz kuru verisi yok"; @@ -980,6 +1007,9 @@ /* No comment provided by engineer. */ "Show Recovery Phrase" = "Show Recovery Phrase"; +/* No comment provided by engineer. */ +"Sign Message" = "Sign Message"; + /* No comment provided by engineer. */ "Size:" = "Size:"; @@ -1142,6 +1172,21 @@ /* No comment provided by engineer. */ "Unknown address" = "Unknown address"; +/* No comment provided by engineer. */ +"Unknown Operator Public Key" = "Unknown Operator Public Key"; + +/* No comment provided by engineer. */ +"Unknown Owner Private Key" = "Unknown Owner Private Key"; + +/* No comment provided by engineer. */ +"Unknown Payout Address" = "Unknown Payout Address"; + +/* No comment provided by engineer. */ +"Unknown Voting Public Key" = "Unknown Voting Public Key"; + +/* No comment provided by engineer. */ +"Unnamed" = "Unnamed"; + /* No comment provided by engineer. */ "Unsupported or corrupted document" = "Unsupported or corrupted document"; @@ -1151,6 +1196,9 @@ /* No comment provided by engineer. */ "Unverified" = "Doğrulanmamış"; +/* No comment provided by engineer. */ +"Update Host" = "Update Host"; + /* No comment provided by engineer. */ "Uphold" = "Uphold"; diff --git a/DashWallet/vi.lproj/Localizable.strings b/DashWallet/vi.lproj/Localizable.strings index 27c8da8ad..169c99069 100644 --- a/DashWallet/vi.lproj/Localizable.strings +++ b/DashWallet/vi.lproj/Localizable.strings @@ -140,15 +140,24 @@ /* No comment provided by engineer. */ "Change" = "Change"; +/* No comment provided by engineer. */ +"Change Operator" = "Change Operator"; + /* No comment provided by engineer. */ "Change passcode" = "Đổi mật khẩu"; /* No comment provided by engineer. */ "Change payment amount?" = "Change payment amount?"; +/* No comment provided by engineer. */ +"Change Payout Address" = "Change Payout Address"; + /* No comment provided by engineer. */ "Change PIN" = "Change PIN"; +/* No comment provided by engineer. */ +"Change Voting Key" = "Change Voting Key"; + /* No comment provided by engineer. */ "Check your connection" = "Check your connection"; @@ -188,6 +197,9 @@ /* No comment provided by engineer. */ "Collateral Index" = "Collateral Index"; +/* No comment provided by engineer. */ +"Collateral Information" = "Collateral Information"; + /* No comment provided by engineer. */ "Collateral Tx" = "Collateral Tx"; @@ -215,6 +227,9 @@ /* No comment provided by engineer. */ "Continue" = "Continue"; +/* No comment provided by engineer. */ +"Control" = "Control"; + /* No comment provided by engineer. */ "Copied" = "Copied"; @@ -323,6 +338,9 @@ /* No comment provided by engineer. */ "Enter" = "Enter"; +/* No comment provided by engineer. */ +"Enter a Nickname for this Masternode" = "Enter a Nickname for this Masternode"; + /* No comment provided by engineer. */ "Enter IP Address of Masternode" = "Enter IP Address of Masternode"; @@ -407,6 +425,9 @@ /* No comment provided by engineer. */ "Holding funds index:" = "Holding funds index:"; +/* No comment provided by engineer. */ +"Host" = "Host"; + /* No comment provided by engineer. */ "I accept that I will lose my coins if I no longer possess the recovery phrase" = "Tôi chấp nhận rằng tôi sẽ mất các coin của mình nếu không còn sở hữu cụm từ phục hồi"; @@ -485,6 +506,9 @@ /* Translate it as short as possible! (24 symbols max) */ "Local Currency" = "Local Currency"; +/* No comment provided by engineer. */ +"Local Name" = "Local Name"; + /* No comment provided by engineer. */ "Local requested amount: %@" = "Local requested amount: %@"; @@ -599,6 +623,9 @@ /* No comment provided by engineer. */ "No address copied" = "No address copied"; +/* No comment provided by engineer. */ +"No Collateral Information" = "No Collateral Information"; + /* No comment provided by engineer. */ "no exchange rate data" = "không có thông tin về tỷ giá"; @@ -980,6 +1007,9 @@ /* No comment provided by engineer. */ "Show Recovery Phrase" = "Show Recovery Phrase"; +/* No comment provided by engineer. */ +"Sign Message" = "Sign Message"; + /* No comment provided by engineer. */ "Size:" = "Size:"; @@ -1142,6 +1172,21 @@ /* No comment provided by engineer. */ "Unknown address" = "Unknown address"; +/* No comment provided by engineer. */ +"Unknown Operator Public Key" = "Unknown Operator Public Key"; + +/* No comment provided by engineer. */ +"Unknown Owner Private Key" = "Unknown Owner Private Key"; + +/* No comment provided by engineer. */ +"Unknown Payout Address" = "Unknown Payout Address"; + +/* No comment provided by engineer. */ +"Unknown Voting Public Key" = "Unknown Voting Public Key"; + +/* No comment provided by engineer. */ +"Unnamed" = "Unnamed"; + /* No comment provided by engineer. */ "Unsupported or corrupted document" = "Unsupported or corrupted document"; @@ -1151,6 +1196,9 @@ /* No comment provided by engineer. */ "Unverified" = "Chưa được xác thực"; +/* No comment provided by engineer. */ +"Update Host" = "Update Host"; + /* No comment provided by engineer. */ "Uphold" = "Uphold"; diff --git a/DashWallet/zh-Hans.lproj/Localizable.strings b/DashWallet/zh-Hans.lproj/Localizable.strings index 5e004520a..b7a208081 100644 --- a/DashWallet/zh-Hans.lproj/Localizable.strings +++ b/DashWallet/zh-Hans.lproj/Localizable.strings @@ -140,15 +140,24 @@ /* No comment provided by engineer. */ "Change" = "Change"; +/* No comment provided by engineer. */ +"Change Operator" = "Change Operator"; + /* No comment provided by engineer. */ "Change passcode" = "修改密码"; /* No comment provided by engineer. */ "Change payment amount?" = "Change payment amount?"; +/* No comment provided by engineer. */ +"Change Payout Address" = "Change Payout Address"; + /* No comment provided by engineer. */ "Change PIN" = "Change PIN"; +/* No comment provided by engineer. */ +"Change Voting Key" = "Change Voting Key"; + /* No comment provided by engineer. */ "Check your connection" = "Check your connection"; @@ -188,6 +197,9 @@ /* No comment provided by engineer. */ "Collateral Index" = "Collateral Index"; +/* No comment provided by engineer. */ +"Collateral Information" = "Collateral Information"; + /* No comment provided by engineer. */ "Collateral Tx" = "Collateral Tx"; @@ -215,6 +227,9 @@ /* No comment provided by engineer. */ "Continue" = "Continue"; +/* No comment provided by engineer. */ +"Control" = "Control"; + /* No comment provided by engineer. */ "Copied" = "Copied"; @@ -323,6 +338,9 @@ /* No comment provided by engineer. */ "Enter" = "Enter"; +/* No comment provided by engineer. */ +"Enter a Nickname for this Masternode" = "Enter a Nickname for this Masternode"; + /* No comment provided by engineer. */ "Enter IP Address of Masternode" = "Enter IP Address of Masternode"; @@ -407,6 +425,9 @@ /* No comment provided by engineer. */ "Holding funds index:" = "Holding funds index:"; +/* No comment provided by engineer. */ +"Host" = "Host"; + /* No comment provided by engineer. */ "I accept that I will lose my coins if I no longer possess the recovery phrase" = "我同意如果我丢失恢复密语,我会丢失我的达世币"; @@ -485,6 +506,9 @@ /* Translate it as short as possible! (24 symbols max) */ "Local Currency" = "Local Currency"; +/* No comment provided by engineer. */ +"Local Name" = "Local Name"; + /* No comment provided by engineer. */ "Local requested amount: %@" = "Local requested amount: %@"; @@ -599,6 +623,9 @@ /* No comment provided by engineer. */ "No address copied" = "No address copied"; +/* No comment provided by engineer. */ +"No Collateral Information" = "No Collateral Information"; + /* No comment provided by engineer. */ "no exchange rate data" = "没有汇率信息"; @@ -980,6 +1007,9 @@ /* No comment provided by engineer. */ "Show Recovery Phrase" = "Show Recovery Phrase"; +/* No comment provided by engineer. */ +"Sign Message" = "Sign Message"; + /* No comment provided by engineer. */ "Size:" = "Size:"; @@ -1142,6 +1172,21 @@ /* No comment provided by engineer. */ "Unknown address" = "Unknown address"; +/* No comment provided by engineer. */ +"Unknown Operator Public Key" = "Unknown Operator Public Key"; + +/* No comment provided by engineer. */ +"Unknown Owner Private Key" = "Unknown Owner Private Key"; + +/* No comment provided by engineer. */ +"Unknown Payout Address" = "Unknown Payout Address"; + +/* No comment provided by engineer. */ +"Unknown Voting Public Key" = "Unknown Voting Public Key"; + +/* No comment provided by engineer. */ +"Unnamed" = "Unnamed"; + /* No comment provided by engineer. */ "Unsupported or corrupted document" = "Unsupported or corrupted document"; @@ -1151,6 +1196,9 @@ /* No comment provided by engineer. */ "Unverified" = "Unverified"; +/* No comment provided by engineer. */ +"Update Host" = "Update Host"; + /* No comment provided by engineer. */ "Uphold" = "Uphold"; diff --git a/DashWallet/zh-Hant-TW.lproj/Localizable.strings b/DashWallet/zh-Hant-TW.lproj/Localizable.strings index 90bb7afea..17b1417c5 100644 --- a/DashWallet/zh-Hant-TW.lproj/Localizable.strings +++ b/DashWallet/zh-Hant-TW.lproj/Localizable.strings @@ -140,15 +140,24 @@ /* No comment provided by engineer. */ "Change" = "Change"; +/* No comment provided by engineer. */ +"Change Operator" = "Change Operator"; + /* No comment provided by engineer. */ "Change passcode" = "變更驗證碼"; /* No comment provided by engineer. */ "Change payment amount?" = "Change payment amount?"; +/* No comment provided by engineer. */ +"Change Payout Address" = "Change Payout Address"; + /* No comment provided by engineer. */ "Change PIN" = "Change PIN"; +/* No comment provided by engineer. */ +"Change Voting Key" = "Change Voting Key"; + /* No comment provided by engineer. */ "Check your connection" = "Check your connection"; @@ -188,6 +197,9 @@ /* No comment provided by engineer. */ "Collateral Index" = "Collateral Index"; +/* No comment provided by engineer. */ +"Collateral Information" = "Collateral Information"; + /* No comment provided by engineer. */ "Collateral Tx" = "Collateral Tx"; @@ -215,6 +227,9 @@ /* No comment provided by engineer. */ "Continue" = "Continue"; +/* No comment provided by engineer. */ +"Control" = "Control"; + /* No comment provided by engineer. */ "Copied" = "Copied"; @@ -323,6 +338,9 @@ /* No comment provided by engineer. */ "Enter" = "Enter"; +/* No comment provided by engineer. */ +"Enter a Nickname for this Masternode" = "Enter a Nickname for this Masternode"; + /* No comment provided by engineer. */ "Enter IP Address of Masternode" = "Enter IP Address of Masternode"; @@ -407,6 +425,9 @@ /* No comment provided by engineer. */ "Holding funds index:" = "Holding funds index:"; +/* No comment provided by engineer. */ +"Host" = "Host"; + /* No comment provided by engineer. */ "I accept that I will lose my coins if I no longer possess the recovery phrase" = "我同意如果我丟失恢復密語,我會丟失我的達世幣"; @@ -485,6 +506,9 @@ /* Translate it as short as possible! (24 symbols max) */ "Local Currency" = "Local Currency"; +/* No comment provided by engineer. */ +"Local Name" = "Local Name"; + /* No comment provided by engineer. */ "Local requested amount: %@" = "Local requested amount: %@"; @@ -599,6 +623,9 @@ /* No comment provided by engineer. */ "No address copied" = "No address copied"; +/* No comment provided by engineer. */ +"No Collateral Information" = "No Collateral Information"; + /* No comment provided by engineer. */ "no exchange rate data" = "沒有匯率數據"; @@ -980,6 +1007,9 @@ /* No comment provided by engineer. */ "Show Recovery Phrase" = "Show Recovery Phrase"; +/* No comment provided by engineer. */ +"Sign Message" = "Sign Message"; + /* No comment provided by engineer. */ "Size:" = "Size:"; @@ -1142,6 +1172,21 @@ /* No comment provided by engineer. */ "Unknown address" = "Unknown address"; +/* No comment provided by engineer. */ +"Unknown Operator Public Key" = "Unknown Operator Public Key"; + +/* No comment provided by engineer. */ +"Unknown Owner Private Key" = "Unknown Owner Private Key"; + +/* No comment provided by engineer. */ +"Unknown Payout Address" = "Unknown Payout Address"; + +/* No comment provided by engineer. */ +"Unknown Voting Public Key" = "Unknown Voting Public Key"; + +/* No comment provided by engineer. */ +"Unnamed" = "Unnamed"; + /* No comment provided by engineer. */ "Unsupported or corrupted document" = "Unsupported or corrupted document"; @@ -1151,6 +1196,9 @@ /* No comment provided by engineer. */ "Unverified" = "Unverified"; +/* No comment provided by engineer. */ +"Update Host" = "Update Host"; + /* No comment provided by engineer. */ "Uphold" = "Uphold"; From 87a681b4389fed80754a41101dfcb627f1407fc8 Mon Sep 17 00:00:00 2001 From: Quantum Explorer Date: Fri, 20 Dec 2019 02:01:36 -0800 Subject: [PATCH 25/34] masternode list screen --- DashSyncCurrentCommit | 2 +- .../Cells/DWMasternodeTableViewCell.h | 1 - .../Cells/DWMasternodeTableViewCell.m | 57 +++++++++---------- .../DWMasternodeListViewController.m | 2 +- .../Models/DWMasternodeListModel.m | 4 +- 5 files changed, 31 insertions(+), 35 deletions(-) diff --git a/DashSyncCurrentCommit b/DashSyncCurrentCommit index d6c2e8938..8dab44711 100644 --- a/DashSyncCurrentCommit +++ b/DashSyncCurrentCommit @@ -1 +1 @@ -47e0eea697b87eee276fcde9728d2f2b21422f43 +6e738cd92fa9ab2cf1aa159614d3d3577765fe04 diff --git a/DashWallet/Sources/UI/Menu/Tools/Masternode/Masternode List/Cells/DWMasternodeTableViewCell.h b/DashWallet/Sources/UI/Menu/Tools/Masternode/Masternode List/Cells/DWMasternodeTableViewCell.h index 6eeafa4b6..6c1ccc7e0 100644 --- a/DashWallet/Sources/UI/Menu/Tools/Masternode/Masternode List/Cells/DWMasternodeTableViewCell.h +++ b/DashWallet/Sources/UI/Menu/Tools/Masternode/Masternode List/Cells/DWMasternodeTableViewCell.h @@ -22,7 +22,6 @@ NS_ASSUME_NONNULL_BEGIN @interface DWMasternodeTableViewCell : DWBaseFormTableViewCell - (void)configureWithModel:(DSSimplifiedMasternodeEntry *)model - selected:(BOOL)selected searchQuery:(nullable NSString *)searchQuery; @end diff --git a/DashWallet/Sources/UI/Menu/Tools/Masternode/Masternode List/Cells/DWMasternodeTableViewCell.m b/DashWallet/Sources/UI/Menu/Tools/Masternode/Masternode List/Cells/DWMasternodeTableViewCell.m index 8fe23709f..20fc29f7e 100644 --- a/DashWallet/Sources/UI/Menu/Tools/Masternode/Masternode List/Cells/DWMasternodeTableViewCell.m +++ b/DashWallet/Sources/UI/Menu/Tools/Masternode/Masternode List/Cells/DWMasternodeTableViewCell.m @@ -23,14 +23,15 @@ NS_ASSUME_NONNULL_BEGIN -static CGSize const ACCESSORY_SIZE = {26.0, 26.0}; +static CGFloat const ACCESSORY_RADIUS = 6.0f; +static CGSize const ACCESSORY_SIZE = {ACCESSORY_RADIUS * 2, ACCESSORY_RADIUS * 2}; @interface DWMasternodeTableViewCell () @property (readonly, strong, nonatomic) UILabel *addressLabel; @property (readonly, strong, nonatomic) UILabel *portLabel; @property (readonly, strong, nonatomic) UILabel *availabilityLabel; -@property (readonly, nonatomic, strong) UIImageView *accessoryImageView; +@property (readonly, nonatomic, strong) UIView *accessoryValidityView; @property (nullable, nonatomic, strong) DSSimplifiedMasternodeEntry *model; @property (nullable, nonatomic, copy) NSString *searchQuery; @@ -84,7 +85,7 @@ - (instancetype)initWithStyle:(UITableViewCellStyle)style availabilityLabel.translatesAutoresizingMaskIntoConstraints = NO; availabilityLabel.backgroundColor = [UIColor dw_backgroundColor]; availabilityLabel.textAlignment = NSTextAlignmentRight; - availabilityLabel.textColor = [UIColor dw_secondaryTextColor]; + availabilityLabel.textColor = [UIColor dw_tertiaryTextColor]; availabilityLabel.font = [UIFont dw_fontForTextStyle:UIFontTextStyleSubheadline]; availabilityLabel.adjustsFontForContentSizeCategory = YES; availabilityLabel.minimumScaleFactor = 0.5; @@ -98,14 +99,14 @@ - (instancetype)initWithStyle:(UITableViewCellStyle)style [contentView addSubview:availabilityLabel]; _availabilityLabel = availabilityLabel; - UIImage *image = [UIImage imageNamed:@"icon_checkbox"]; - UIImage *highlightedImage = [UIImage imageNamed:@"icon_checkbox_checked"]; - NSParameterAssert(image); - NSParameterAssert(highlightedImage); - UIImageView *accessoryImageView = [[UIImageView alloc] initWithImage:image highlightedImage:highlightedImage]; - accessoryImageView.translatesAutoresizingMaskIntoConstraints = NO; - [contentView addSubview:accessoryImageView]; - _accessoryImageView = accessoryImageView; + UIView *accessoryValidityView = [[UIView alloc] initWithFrame:CGRectMake(10, 20, 100, 100)]; + accessoryValidityView.layer.cornerRadius = ACCESSORY_RADIUS; + + accessoryValidityView.backgroundColor = [UIColor colorNamed:@"GreenColor"]; + + accessoryValidityView.translatesAutoresizingMaskIntoConstraints = NO; + [contentView addSubview:accessoryValidityView]; + _accessoryValidityView = accessoryValidityView; const CGFloat margin = DWDefaultMargin(); const CGFloat padding = DW_FORM_CELL_VERTICAL_PADDING; @@ -118,25 +119,22 @@ - (instancetype)initWithStyle:(UITableViewCellStyle)style [addressLabel.bottomAnchor constraintEqualToAnchor:contentView.bottomAnchor constant:-padding], - [portLabel.topAnchor constraintEqualToAnchor:contentView.topAnchor - constant:padding], [portLabel.leadingAnchor constraintEqualToAnchor:addressLabel.trailingAnchor constant:DW_FORM_CELL_SPACING], - [portLabel.bottomAnchor constraintEqualToAnchor:contentView.bottomAnchor - constant:-padding], + [portLabel.firstBaselineAnchor constraintEqualToAnchor:addressLabel.firstBaselineAnchor], - [availabilityLabel.topAnchor constraintEqualToAnchor:contentView.topAnchor - constant:padding], + [availabilityLabel.firstBaselineAnchor constraintEqualToAnchor:addressLabel.firstBaselineAnchor], [availabilityLabel.leadingAnchor constraintEqualToAnchor:portLabel.trailingAnchor constant:DW_FORM_CELL_SPACING], - [accessoryImageView.leadingAnchor constraintEqualToAnchor:availabilityLabel.trailingAnchor - constant:DW_FORM_CELL_SPACING], - [accessoryImageView.trailingAnchor constraintEqualToAnchor:contentView.trailingAnchor - constant:-margin], - [accessoryImageView.centerYAnchor constraintEqualToAnchor:contentView.centerYAnchor], - [accessoryImageView.widthAnchor constraintEqualToConstant:ACCESSORY_SIZE.width], - [accessoryImageView.heightAnchor constraintEqualToConstant:ACCESSORY_SIZE.height], + [accessoryValidityView.leadingAnchor constraintEqualToAnchor:availabilityLabel.trailingAnchor + constant:DW_FORM_CELL_SPACING * 2 / 3], + [accessoryValidityView.trailingAnchor constraintEqualToAnchor:contentView.trailingAnchor + constant:-margin], + [accessoryValidityView.centerYAnchor constraintEqualToAnchor:contentView.centerYAnchor + constant:2], + [accessoryValidityView.widthAnchor constraintEqualToConstant:ACCESSORY_SIZE.width], + [accessoryValidityView.heightAnchor constraintEqualToConstant:ACCESSORY_SIZE.height], ]]; NSNotificationCenter *notificationCenter = [NSNotificationCenter defaultCenter]; @@ -150,13 +148,10 @@ - (instancetype)initWithStyle:(UITableViewCellStyle)style } - (void)configureWithModel:(DSSimplifiedMasternodeEntry *)model - selected:(BOOL)selected searchQuery:(nullable NSString *)searchQuery { self.model = model; self.searchQuery = searchQuery; - self.accessoryImageView.highlighted = selected; - [self reloadAttributedData]; } @@ -192,13 +187,15 @@ - (void)reloadAttributedData { highlightedText:highlightedText highlightedTextColor:highlightedTextColor]; - UIFont *availabilityFont = [UIFont dw_fontForTextStyle:UIFontTextStyleSubheadline]; - UIColor *availabilityColor = [UIColor dw_secondaryTextColor]; - self.availabilityLabel.attributedText = [NSAttributedString attributedText:self.model.validString + UIFont *availabilityFont = [UIFont dw_fontForTextStyle:UIFontTextStyleCaption1]; + UIColor *availabilityColor = [UIColor dw_quaternaryTextColor]; + self.availabilityLabel.attributedText = [NSAttributedString attributedText:self.model.validUppercaseString font:availabilityFont textColor:availabilityColor highlightedText:highlightedText highlightedTextColor:highlightedTextColor]; + + self.accessoryValidityView.backgroundColor = self.model.isValid ? [UIColor colorNamed:@"GreenColor"] : [UIColor colorNamed:@"RedColor"]; } @end diff --git a/DashWallet/Sources/UI/Menu/Tools/Masternode/Masternode List/DWMasternodeListViewController.m b/DashWallet/Sources/UI/Menu/Tools/Masternode/Masternode List/DWMasternodeListViewController.m index f000dde4a..bc0ca7c52 100644 --- a/DashWallet/Sources/UI/Menu/Tools/Masternode/Masternode List/DWMasternodeListViewController.m +++ b/DashWallet/Sources/UI/Menu/Tools/Masternode/Masternode List/DWMasternodeListViewController.m @@ -103,7 +103,7 @@ - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(N DSSimplifiedMasternodeEntry *item = self.model.items[indexPath.row]; const BOOL selected = indexPath.row == self.model.selectedIndex; - [cell configureWithModel:item selected:selected searchQuery:self.model.trimmedQuery]; + [cell configureWithModel:item searchQuery:self.model.trimmedQuery]; return cell; } diff --git a/DashWallet/Sources/UI/Menu/Tools/Masternode/Masternode List/Models/DWMasternodeListModel.m b/DashWallet/Sources/UI/Menu/Tools/Masternode/Masternode List/Models/DWMasternodeListModel.m index 707543537..b2c8e8580 100644 --- a/DashWallet/Sources/UI/Menu/Tools/Masternode/Masternode List/Models/DWMasternodeListModel.m +++ b/DashWallet/Sources/UI/Menu/Tools/Masternode/Masternode List/Models/DWMasternodeListModel.m @@ -37,7 +37,7 @@ - (instancetype)init { _selectedIndex = NSNotFound; - _allItems = [[self currentMasternodeList].simplifiedMasternodeListDictionaryByReversedRegistrationTransactionHash.allValues sortedArrayUsingDescriptors:@[ [NSSortDescriptor sortDescriptorWithKey:@"isValid" ascending:NO], [NSSortDescriptor sortDescriptorWithKey:@"ipAddressString" ascending:YES] ]]; + _allItems = [[self currentMasternodeList].simplifiedMasternodeListDictionaryByReversedRegistrationTransactionHash.allValues sortedArrayUsingDescriptors:@[ [NSSortDescriptor sortDescriptorWithKey:@"ipAddressIsValidIPV4" ascending:NO], [NSSortDescriptor sortDescriptorWithKey:@"ipAddressNumber" ascending:YES] ]]; } return self; } @@ -92,7 +92,7 @@ - (NSCompoundPredicate *)findMatchesForString:(NSString *)searchString { NSMutableArray *searchItemsPredicate = [NSMutableArray array]; DSSimplifiedMasternodeEntry *item = nil; - NSArray *searchKeyPaths = @[ DW_KEYPATH(item, host) ]; + NSArray *searchKeyPaths = @[ DW_KEYPATH(item, host), DW_KEYPATH(item, validString) ]; for (NSString *keyPath in searchKeyPaths) { NSExpression *leftExpression = [NSExpression expressionForKeyPath:keyPath]; From 13b4b90144e055332a0659e6d417310354564f78 Mon Sep 17 00:00:00 2001 From: Quantum Explorer Date: Sat, 21 Dec 2019 11:20:54 -0800 Subject: [PATCH 26/34] improvements for masternode list --- .../DWMasternodeFeaturesMenuViewController.m | 16 ++-- .../DWSignPayloadViewController.m | 2 +- .../Models/DWSignPayloadModel.h | 1 + .../Models/DWSignPayloadModel.m | 5 +- .../Payload Signing/Views/DWSignPayloadView.m | 87 +++++++++++++++++-- DashWallet/ar.lproj/Localizable.strings | 16 +++- DashWallet/bg.lproj/Localizable.strings | 16 +++- DashWallet/de.lproj/Localizable.strings | 16 +++- DashWallet/el.lproj/Localizable.strings | 16 +++- DashWallet/en.lproj/Localizable.strings | 16 +++- DashWallet/es.lproj/Localizable.strings | 16 +++- DashWallet/fr.lproj/Localizable.strings | 16 +++- DashWallet/id.lproj/Localizable.strings | 16 +++- DashWallet/it.lproj/Localizable.strings | 16 +++- DashWallet/ja.lproj/Localizable.strings | 16 +++- DashWallet/ko.lproj/Localizable.strings | 16 +++- DashWallet/nb.lproj/Localizable.strings | 16 +++- DashWallet/nl.lproj/Localizable.strings | 16 +++- DashWallet/pl.lproj/Localizable.strings | 16 +++- DashWallet/pt.lproj/Localizable.strings | 16 +++- DashWallet/ru.lproj/Localizable.strings | 16 +++- DashWallet/sk.lproj/Localizable.strings | 16 +++- DashWallet/sq.lproj/Localizable.strings | 16 +++- DashWallet/sv.lproj/Localizable.strings | 16 +++- DashWallet/th.lproj/Localizable.strings | 16 +++- DashWallet/tr.lproj/Localizable.strings | 16 +++- DashWallet/vi.lproj/Localizable.strings | 16 +++- DashWallet/zh-Hans.lproj/Localizable.strings | 16 +++- .../zh-Hant-TW.lproj/Localizable.strings | 16 +++- 29 files changed, 431 insertions(+), 64 deletions(-) diff --git a/DashWallet/Sources/UI/Menu/Tools/Masternode/DWMasternodeFeaturesMenuViewController.m b/DashWallet/Sources/UI/Menu/Tools/Masternode/DWMasternodeFeaturesMenuViewController.m index c23faa81c..0b844e69d 100644 --- a/DashWallet/Sources/UI/Menu/Tools/Masternode/DWMasternodeFeaturesMenuViewController.m +++ b/DashWallet/Sources/UI/Menu/Tools/Masternode/DWMasternodeFeaturesMenuViewController.m @@ -51,7 +51,7 @@ - (instancetype)initWithNibName:(nullable NSString *)nibNameOrNil bundle:(nullab NSMutableArray *items = [NSMutableArray array]; { - DWSelectorFormCellModel *cellModel = [[DWSelectorFormCellModel alloc] initWithTitle:NSLocalizedString(@"Show Masternode Keys", nil)]; + DWSelectorFormCellModel *cellModel = [[DWSelectorFormCellModel alloc] initWithTitle:NSLocalizedString(@"Masternode List", nil)]; cellModel.accessoryType = DWSelectorFormAccessoryType_DisclosureIndicator; cellModel.didSelectBlock = ^(DWSelectorFormCellModel *_Nonnull cellModel, NSIndexPath *_Nonnull indexPath) { __strong typeof(weakSelf) strongSelf = weakSelf; @@ -59,13 +59,13 @@ - (instancetype)initWithNibName:(nullable NSString *)nibNameOrNil bundle:(nullab return; } - [strongSelf showMasternodeKeys]; + [strongSelf showMasternodeList]; }; [items addObject:cellModel]; } { - DWSelectorFormCellModel *cellModel = [[DWSelectorFormCellModel alloc] initWithTitle:NSLocalizedString(@"Register Masternode", nil)]; + DWSelectorFormCellModel *cellModel = [[DWSelectorFormCellModel alloc] initWithTitle:NSLocalizedString(@"My Masternodes", nil)]; cellModel.accessoryType = DWSelectorFormAccessoryType_DisclosureIndicator; cellModel.didSelectBlock = ^(DWSelectorFormCellModel *_Nonnull cellModel, NSIndexPath *_Nonnull indexPath) { __strong typeof(weakSelf) strongSelf = weakSelf; @@ -73,13 +73,13 @@ - (instancetype)initWithNibName:(nullable NSString *)nibNameOrNil bundle:(nullab return; } - [strongSelf showRegisterMasternode]; + [strongSelf showMasternodeControl]; }; [items addObject:cellModel]; } { - DWSelectorFormCellModel *cellModel = [[DWSelectorFormCellModel alloc] initWithTitle:NSLocalizedString(@"My Masternodes", nil)]; + DWSelectorFormCellModel *cellModel = [[DWSelectorFormCellModel alloc] initWithTitle:NSLocalizedString(@"Register Masternode", nil)]; cellModel.accessoryType = DWSelectorFormAccessoryType_DisclosureIndicator; cellModel.didSelectBlock = ^(DWSelectorFormCellModel *_Nonnull cellModel, NSIndexPath *_Nonnull indexPath) { __strong typeof(weakSelf) strongSelf = weakSelf; @@ -87,13 +87,13 @@ - (instancetype)initWithNibName:(nullable NSString *)nibNameOrNil bundle:(nullab return; } - [strongSelf showMasternodeControl]; + [strongSelf showRegisterMasternode]; }; [items addObject:cellModel]; } { - DWSelectorFormCellModel *cellModel = [[DWSelectorFormCellModel alloc] initWithTitle:NSLocalizedString(@"Masternode List", nil)]; + DWSelectorFormCellModel *cellModel = [[DWSelectorFormCellModel alloc] initWithTitle:NSLocalizedString(@"Show Masternode Keys", nil)]; cellModel.accessoryType = DWSelectorFormAccessoryType_DisclosureIndicator; cellModel.didSelectBlock = ^(DWSelectorFormCellModel *_Nonnull cellModel, NSIndexPath *_Nonnull indexPath) { __strong typeof(weakSelf) strongSelf = weakSelf; @@ -101,7 +101,7 @@ - (instancetype)initWithNibName:(nullable NSString *)nibNameOrNil bundle:(nullab return; } - [strongSelf showMasternodeList]; + [strongSelf showMasternodeKeys]; }; [items addObject:cellModel]; } diff --git a/DashWallet/Sources/UI/Menu/Tools/Masternode/Payload Signing/DWSignPayloadViewController.m b/DashWallet/Sources/UI/Menu/Tools/Masternode/Payload Signing/DWSignPayloadViewController.m index 8814eed21..6fd63cc45 100644 --- a/DashWallet/Sources/UI/Menu/Tools/Masternode/Payload Signing/DWSignPayloadViewController.m +++ b/DashWallet/Sources/UI/Menu/Tools/Masternode/Payload Signing/DWSignPayloadViewController.m @@ -45,7 +45,7 @@ - (void)viewDidLoad { [self setupView]; } -+ (NSString *)actionButtonTitle { +- (NSString *)actionButtonTitle { return NSLocalizedString(@"Verify Signature", nil); } diff --git a/DashWallet/Sources/UI/Menu/Tools/Masternode/Payload Signing/Models/DWSignPayloadModel.h b/DashWallet/Sources/UI/Menu/Tools/Masternode/Payload Signing/Models/DWSignPayloadModel.h index 5a3e6aee4..b1b90a057 100644 --- a/DashWallet/Sources/UI/Menu/Tools/Masternode/Payload Signing/Models/DWSignPayloadModel.h +++ b/DashWallet/Sources/UI/Menu/Tools/Masternode/Payload Signing/Models/DWSignPayloadModel.h @@ -26,6 +26,7 @@ NS_ASSUME_NONNULL_BEGIN @property (nonatomic, strong) NSString *payloadCollateralString; @property (nonatomic, strong) NSString *unverifiedSignatureString; @property (nonatomic, strong) NSString *instructionStringForCopying; +@property (nonatomic, strong) NSString *instructionStringForSigning; @property (nonatomic, strong) NSString *instructionStringForPasting; @property (nonatomic, strong) NSData *signature; diff --git a/DashWallet/Sources/UI/Menu/Tools/Masternode/Payload Signing/Models/DWSignPayloadModel.m b/DashWallet/Sources/UI/Menu/Tools/Masternode/Payload Signing/Models/DWSignPayloadModel.m index 7495b391f..a13013956 100644 --- a/DashWallet/Sources/UI/Menu/Tools/Masternode/Payload Signing/Models/DWSignPayloadModel.m +++ b/DashWallet/Sources/UI/Menu/Tools/Masternode/Payload Signing/Models/DWSignPayloadModel.m @@ -24,8 +24,9 @@ - (instancetype)initForCollateralAddress:(NSString *)collateralAddress withPaylo if (self) { _collateralAddress = collateralAddress; _payloadCollateralString = payloadCollateralString; - _instructionStringForCopying = NSLocalizedString(@"Please copy the following and sign with the address in the wallet containing the 1000 Dash collateral", nil); - _instructionStringForPasting = NSLocalizedString(@"Please paste the signature from your wallet holding the 1000 Dash collateral below.", nil); + _instructionStringForCopying = NSLocalizedString(@"Please copy the following message.", nil); + _instructionStringForSigning = NSLocalizedString(@"You will need to sign that message with the address holding the 1000 Dash collateral. This is done in the holding wallet.", nil); + _instructionStringForPasting = NSLocalizedString(@"Please paste the signature response from your wallet holding the collateral below.", nil); } return self; } diff --git a/DashWallet/Sources/UI/Menu/Tools/Masternode/Payload Signing/Views/DWSignPayloadView.m b/DashWallet/Sources/UI/Menu/Tools/Masternode/Payload Signing/Views/DWSignPayloadView.m index 29ba977f6..7ea50ca65 100644 --- a/DashWallet/Sources/UI/Menu/Tools/Masternode/Payload Signing/Views/DWSignPayloadView.m +++ b/DashWallet/Sources/UI/Menu/Tools/Masternode/Payload Signing/Views/DWSignPayloadView.m @@ -21,13 +21,18 @@ CGFloat const DW_SIGNED_PAYLOAD_TOP_PADDING = 12.0; CGFloat const DW_SIGNED_PAYLOAD_INTER_PADDING = 12.0; CGFloat const DW_SIGNED_PAYLOAD_BOTTOM_PADDING = 12.0; +CGFloat const DW_STEP_HEIGHT = 24.0; @interface DWSignPayloadView () @property (nonatomic, strong) UITextView *messageToSignTextView; @property (nonatomic, strong) UITextView *signedMessageInputTextView; @property (nonatomic, strong) UILabel *instructionForCopyingLabel; +@property (nonatomic, strong) UILabel *instructionForSigningLabel; @property (nonatomic, strong) UILabel *instructionForPastingLabel; +@property (nonatomic, strong) UILabel *step1Label; +@property (nonatomic, strong) UILabel *step2Label; +@property (nonatomic, strong) UILabel *step3Label; @end @@ -40,9 +45,19 @@ - (instancetype)initWithFrame:(CGRect)frame { if (self) { self.backgroundColor = [UIColor dw_backgroundColor]; + UILabel *step1Label = [[UILabel alloc] initWithFrame:CGRectZero]; + step1Label.translatesAutoresizingMaskIntoConstraints = NO; + step1Label.backgroundColor = [UIColor clearColor]; + step1Label.numberOfLines = 1; + step1Label.font = [UIFont dw_fontForTextStyle:UIFontTextStyleTitle3]; + + [self addSubview:step1Label]; + _step1Label = step1Label; + + UILabel *instructionForCopyingLabel = [[UILabel alloc] initWithFrame:CGRectZero]; instructionForCopyingLabel.translatesAutoresizingMaskIntoConstraints = NO; - instructionForCopyingLabel.backgroundColor = [UIColor dw_backgroundColor]; + instructionForCopyingLabel.backgroundColor = [UIColor clearColor]; instructionForCopyingLabel.layer.cornerRadius = 3; instructionForCopyingLabel.lineBreakMode = NSLineBreakByWordWrapping; instructionForCopyingLabel.numberOfLines = 4; @@ -54,16 +69,45 @@ - (instancetype)initWithFrame:(CGRect)frame { UITextView *messageToSignTextView = [[UITextView alloc] initWithFrame:CGRectZero]; messageToSignTextView.translatesAutoresizingMaskIntoConstraints = NO; - messageToSignTextView.backgroundColor = [UIColor dw_secondaryBackgroundColor]; + messageToSignTextView.backgroundColor = [UIColor clearColor]; messageToSignTextView.layer.cornerRadius = 3; messageToSignTextView.textContainer.lineBreakMode = NSLineBreakByCharWrapping; messageToSignTextView.font = [UIFont dw_fontForTextStyle:UIFontTextStyleBody]; [self addSubview:messageToSignTextView]; _messageToSignTextView = messageToSignTextView; + UILabel *step2Label = [[UILabel alloc] initWithFrame:CGRectZero]; + step2Label.translatesAutoresizingMaskIntoConstraints = NO; + step2Label.backgroundColor = [UIColor clearColor]; + step2Label.numberOfLines = 1; + step2Label.font = [UIFont dw_fontForTextStyle:UIFontTextStyleTitle3]; + + [self addSubview:step2Label]; + _step2Label = step2Label; + + UILabel *instructionForSigningLabel = [[UILabel alloc] initWithFrame:CGRectZero]; + instructionForSigningLabel.translatesAutoresizingMaskIntoConstraints = NO; + instructionForSigningLabel.backgroundColor = [UIColor clearColor]; + instructionForSigningLabel.lineBreakMode = NSLineBreakByWordWrapping; + instructionForSigningLabel.numberOfLines = 4; + instructionForSigningLabel.font = [UIFont dw_fontForTextStyle:UIFontTextStyleCaption1]; + + [self addSubview:instructionForSigningLabel]; + _instructionForSigningLabel = instructionForSigningLabel; + + + UILabel *step3Label = [[UILabel alloc] initWithFrame:CGRectZero]; + step3Label.translatesAutoresizingMaskIntoConstraints = NO; + step3Label.backgroundColor = [UIColor clearColor]; + step3Label.numberOfLines = 1; + step3Label.font = [UIFont dw_fontForTextStyle:UIFontTextStyleTitle3]; + + [self addSubview:step3Label]; + _step3Label = step3Label; + UILabel *instructionForPastingLabel = [[UILabel alloc] initWithFrame:CGRectZero]; instructionForPastingLabel.translatesAutoresizingMaskIntoConstraints = NO; - instructionForPastingLabel.backgroundColor = [UIColor dw_backgroundColor]; + instructionForPastingLabel.backgroundColor = [UIColor clearColor]; instructionForPastingLabel.lineBreakMode = NSLineBreakByWordWrapping; instructionForPastingLabel.numberOfLines = 4; instructionForPastingLabel.font = [UIFont dw_fontForTextStyle:UIFontTextStyleCaption1]; @@ -80,9 +124,17 @@ - (instancetype)initWithFrame:(CGRect)frame { [self addSubview:signedMessageInputTextView]; _signedMessageInputTextView = signedMessageInputTextView; + [NSLayoutConstraint activateConstraints:@[ - [instructionForCopyingLabel.topAnchor constraintEqualToAnchor:self.topAnchor + [step1Label.topAnchor constraintEqualToAnchor:self.topAnchor + constant:DW_SIGNED_PAYLOAD_TOP_PADDING], + [step1Label.leadingAnchor constraintEqualToAnchor:self.leadingAnchor], + [step1Label.trailingAnchor constraintEqualToAnchor:self.trailingAnchor], + [step1Label.heightAnchor constraintEqualToConstant:DW_STEP_HEIGHT], + + + [instructionForCopyingLabel.topAnchor constraintEqualToAnchor:step1Label.bottomAnchor constant:DW_SIGNED_PAYLOAD_TOP_PADDING], [instructionForCopyingLabel.leadingAnchor constraintEqualToAnchor:self.leadingAnchor], [instructionForCopyingLabel.trailingAnchor constraintEqualToAnchor:self.trailingAnchor], @@ -99,7 +151,28 @@ - (instancetype)initWithFrame:(CGRect)frame { multiplier:0.67 constant:0], - [instructionForPastingLabel.topAnchor constraintEqualToAnchor:messageToSignTextView.bottomAnchor + [step2Label.topAnchor constraintEqualToAnchor:messageToSignTextView.bottomAnchor + constant:DW_SIGNED_PAYLOAD_TOP_PADDING], + [step2Label.leadingAnchor constraintEqualToAnchor:self.leadingAnchor], + [step2Label.trailingAnchor constraintEqualToAnchor:self.trailingAnchor], + [step2Label.heightAnchor constraintEqualToConstant:DW_STEP_HEIGHT], + + [instructionForSigningLabel.topAnchor constraintEqualToAnchor:step2Label.bottomAnchor + constant:DW_SIGNED_PAYLOAD_INTER_PADDING], + + [instructionForSigningLabel.leadingAnchor constraintEqualToAnchor:self.leadingAnchor], + [instructionForSigningLabel.trailingAnchor constraintEqualToAnchor:self.trailingAnchor], + [instructionForSigningLabel.heightAnchor constraintEqualToAnchor:signedMessageInputTextView.heightAnchor + multiplier:0.33 + constant:0], + + [step3Label.topAnchor constraintEqualToAnchor:instructionForSigningLabel.bottomAnchor + constant:DW_SIGNED_PAYLOAD_TOP_PADDING], + [step3Label.leadingAnchor constraintEqualToAnchor:self.leadingAnchor], + [step3Label.trailingAnchor constraintEqualToAnchor:self.trailingAnchor], + [step3Label.heightAnchor constraintEqualToConstant:DW_STEP_HEIGHT], + + [instructionForPastingLabel.topAnchor constraintEqualToAnchor:step3Label.bottomAnchor constant:DW_SIGNED_PAYLOAD_INTER_PADDING], [instructionForPastingLabel.leadingAnchor constraintEqualToAnchor:self.leadingAnchor], @@ -121,8 +194,12 @@ - (instancetype)initWithFrame:(CGRect)frame { - (void)setModel:(DWSignPayloadModel *)model { _model = model; + self.step1Label.text = NSLocalizedString(@"Step 1", nil); + self.step2Label.text = NSLocalizedString(@"Step 2", nil); + self.step3Label.text = NSLocalizedString(@"Step 3", nil); self.messageToSignTextView.text = [NSString stringWithFormat:@"%@ %@", model.collateralAddress, model.payloadCollateralString]; self.instructionForCopyingLabel.text = model.instructionStringForCopying; + self.instructionForSigningLabel.text = model.instructionStringForSigning; self.instructionForPastingLabel.text = model.instructionStringForPasting; } diff --git a/DashWallet/ar.lproj/Localizable.strings b/DashWallet/ar.lproj/Localizable.strings index 8b53862f5..66bb5381d 100644 --- a/DashWallet/ar.lproj/Localizable.strings +++ b/DashWallet/ar.lproj/Localizable.strings @@ -795,13 +795,13 @@ "PIN is always required to make a payment" = "PIN is always required to make a payment"; /* No comment provided by engineer. */ -"Please copy the following and sign with the address in the wallet containing the 1000 Dash collateral" = "Please copy the following and sign with the address in the wallet containing the 1000 Dash collateral"; +"Please copy the following message." = "Please copy the following message."; /* No comment provided by engineer. */ "Please enter pin to upgrade wallet" = "يرجى إدخال الرقم السري لترقية المحفظة"; /* No comment provided by engineer. */ -"Please paste the signature from your wallet holding the 1000 Dash collateral below." = "Please paste the signature from your wallet holding the 1000 Dash collateral below."; +"Please paste the signature response from your wallet holding the collateral below." = "Please paste the signature response from your wallet holding the collateral below."; /* No comment provided by engineer. */ "Please place your phone near NFC device." = "يرجى وضع هاتفك بالقرب من جهاز NFC."; @@ -1133,6 +1133,15 @@ /* No comment provided by engineer. */ "Status:" = "Status:"; +/* No comment provided by engineer. */ +"Step 1" = "Step 1"; + +/* No comment provided by engineer. */ +"Step 2" = "Step 2"; + +/* No comment provided by engineer. */ +"Step 3" = "Step 3"; + /* No comment provided by engineer. */ "Steps to reproduce the crash" = "Steps to reproduce the crash"; @@ -1451,6 +1460,9 @@ /* No comment provided by engineer. */ "You will also need to log out from the Uphold website using your browser" = "You will also need to log out from the Uphold website using your browser"; +/* No comment provided by engineer. */ +"You will need to sign that message with the address holding the 1000 Dash collateral. This is done in the holding wallet." = "You will need to sign that message with the address holding the 1000 Dash collateral. This is done in the holding wallet."; + /* No comment provided by engineer. */ "Your transaction was sent and the amount should appear in your wallet in a few minutes." = "Your transaction was sent and the amount should appear in your wallet in a few minutes."; diff --git a/DashWallet/bg.lproj/Localizable.strings b/DashWallet/bg.lproj/Localizable.strings index 40f02632f..114a2b49b 100644 --- a/DashWallet/bg.lproj/Localizable.strings +++ b/DashWallet/bg.lproj/Localizable.strings @@ -795,13 +795,13 @@ "PIN is always required to make a payment" = "PIN is always required to make a payment"; /* No comment provided by engineer. */ -"Please copy the following and sign with the address in the wallet containing the 1000 Dash collateral" = "Please copy the following and sign with the address in the wallet containing the 1000 Dash collateral"; +"Please copy the following message." = "Please copy the following message."; /* No comment provided by engineer. */ "Please enter pin to upgrade wallet" = "Моля въведете ПИН за обновяването на портфейла"; /* No comment provided by engineer. */ -"Please paste the signature from your wallet holding the 1000 Dash collateral below." = "Please paste the signature from your wallet holding the 1000 Dash collateral below."; +"Please paste the signature response from your wallet holding the collateral below." = "Please paste the signature response from your wallet holding the collateral below."; /* No comment provided by engineer. */ "Please place your phone near NFC device." = "Моля поставете вашият телефон близо до NFC устройство."; @@ -1133,6 +1133,15 @@ /* No comment provided by engineer. */ "Status:" = "Status:"; +/* No comment provided by engineer. */ +"Step 1" = "Step 1"; + +/* No comment provided by engineer. */ +"Step 2" = "Step 2"; + +/* No comment provided by engineer. */ +"Step 3" = "Step 3"; + /* No comment provided by engineer. */ "Steps to reproduce the crash" = "Стъпки за възпроизвеждане на срива"; @@ -1451,6 +1460,9 @@ /* No comment provided by engineer. */ "You will also need to log out from the Uphold website using your browser" = "Необходимо е също да излезете от уебсайта на Uphold, чрез вашият браузър"; +/* No comment provided by engineer. */ +"You will need to sign that message with the address holding the 1000 Dash collateral. This is done in the holding wallet." = "You will need to sign that message with the address holding the 1000 Dash collateral. This is done in the holding wallet."; + /* No comment provided by engineer. */ "Your transaction was sent and the amount should appear in your wallet in a few minutes." = "Вашата транзакция беше изпратена и сумата би трябвало да се появи във вашият портфейл до няколко минути."; diff --git a/DashWallet/de.lproj/Localizable.strings b/DashWallet/de.lproj/Localizable.strings index f803b8048..2a4d6a6f7 100644 --- a/DashWallet/de.lproj/Localizable.strings +++ b/DashWallet/de.lproj/Localizable.strings @@ -795,13 +795,13 @@ "PIN is always required to make a payment" = "PIN is always required to make a payment"; /* No comment provided by engineer. */ -"Please copy the following and sign with the address in the wallet containing the 1000 Dash collateral" = "Please copy the following and sign with the address in the wallet containing the 1000 Dash collateral"; +"Please copy the following message." = "Please copy the following message."; /* No comment provided by engineer. */ "Please enter pin to upgrade wallet" = "PIN eingeben zum upgraden der Wallet"; /* No comment provided by engineer. */ -"Please paste the signature from your wallet holding the 1000 Dash collateral below." = "Please paste the signature from your wallet holding the 1000 Dash collateral below."; +"Please paste the signature response from your wallet holding the collateral below." = "Please paste the signature response from your wallet holding the collateral below."; /* No comment provided by engineer. */ "Please place your phone near NFC device." = "Bitte halte dein Telefon nahe an das NFC-Gerät."; @@ -1133,6 +1133,15 @@ /* No comment provided by engineer. */ "Status:" = "Status:"; +/* No comment provided by engineer. */ +"Step 1" = "Step 1"; + +/* No comment provided by engineer. */ +"Step 2" = "Step 2"; + +/* No comment provided by engineer. */ +"Step 3" = "Step 3"; + /* No comment provided by engineer. */ "Steps to reproduce the crash" = "Schritte, um den Absturz zu reproduzieren"; @@ -1451,6 +1460,9 @@ /* No comment provided by engineer. */ "You will also need to log out from the Uphold website using your browser" = "Du musst dich mit deinem Browser von der Uphold-Webseite abmelden"; +/* No comment provided by engineer. */ +"You will need to sign that message with the address holding the 1000 Dash collateral. This is done in the holding wallet." = "You will need to sign that message with the address holding the 1000 Dash collateral. This is done in the holding wallet."; + /* No comment provided by engineer. */ "Your transaction was sent and the amount should appear in your wallet in a few minutes." = "Deine Transaktion wurde versendet und der Betrag sollte in ein paar Minuten in der Wallet zu sehen sein."; diff --git a/DashWallet/el.lproj/Localizable.strings b/DashWallet/el.lproj/Localizable.strings index d9ed6839b..1c12dc4d1 100644 --- a/DashWallet/el.lproj/Localizable.strings +++ b/DashWallet/el.lproj/Localizable.strings @@ -795,13 +795,13 @@ "PIN is always required to make a payment" = "PIN is always required to make a payment"; /* No comment provided by engineer. */ -"Please copy the following and sign with the address in the wallet containing the 1000 Dash collateral" = "Please copy the following and sign with the address in the wallet containing the 1000 Dash collateral"; +"Please copy the following message." = "Please copy the following message."; /* No comment provided by engineer. */ "Please enter pin to upgrade wallet" = "Please enter pin to upgrade wallet"; /* No comment provided by engineer. */ -"Please paste the signature from your wallet holding the 1000 Dash collateral below." = "Please paste the signature from your wallet holding the 1000 Dash collateral below."; +"Please paste the signature response from your wallet holding the collateral below." = "Please paste the signature response from your wallet holding the collateral below."; /* No comment provided by engineer. */ "Please place your phone near NFC device." = "Please place your phone near NFC device."; @@ -1133,6 +1133,15 @@ /* No comment provided by engineer. */ "Status:" = "Status:"; +/* No comment provided by engineer. */ +"Step 1" = "Step 1"; + +/* No comment provided by engineer. */ +"Step 2" = "Step 2"; + +/* No comment provided by engineer. */ +"Step 3" = "Step 3"; + /* No comment provided by engineer. */ "Steps to reproduce the crash" = "Steps to reproduce the crash"; @@ -1451,6 +1460,9 @@ /* No comment provided by engineer. */ "You will also need to log out from the Uphold website using your browser" = "You will also need to log out from the Uphold website using your browser"; +/* No comment provided by engineer. */ +"You will need to sign that message with the address holding the 1000 Dash collateral. This is done in the holding wallet." = "You will need to sign that message with the address holding the 1000 Dash collateral. This is done in the holding wallet."; + /* No comment provided by engineer. */ "Your transaction was sent and the amount should appear in your wallet in a few minutes." = "Your transaction was sent and the amount should appear in your wallet in a few minutes."; diff --git a/DashWallet/en.lproj/Localizable.strings b/DashWallet/en.lproj/Localizable.strings index c297db64c..b240438df 100644 --- a/DashWallet/en.lproj/Localizable.strings +++ b/DashWallet/en.lproj/Localizable.strings @@ -795,13 +795,13 @@ "PIN is always required to make a payment" = "PIN is always required to make a payment"; /* No comment provided by engineer. */ -"Please copy the following and sign with the address in the wallet containing the 1000 Dash collateral" = "Please copy the following and sign with the address in the wallet containing the 1000 Dash collateral"; +"Please copy the following message." = "Please copy the following message."; /* No comment provided by engineer. */ "Please enter pin to upgrade wallet" = "Please enter pin to upgrade wallet"; /* No comment provided by engineer. */ -"Please paste the signature from your wallet holding the 1000 Dash collateral below." = "Please paste the signature from your wallet holding the 1000 Dash collateral below."; +"Please paste the signature response from your wallet holding the collateral below." = "Please paste the signature response from your wallet holding the collateral below."; /* No comment provided by engineer. */ "Please place your phone near NFC device." = "Please place your phone near NFC device."; @@ -1133,6 +1133,15 @@ /* No comment provided by engineer. */ "Status:" = "Status:"; +/* No comment provided by engineer. */ +"Step 1" = "Step 1"; + +/* No comment provided by engineer. */ +"Step 2" = "Step 2"; + +/* No comment provided by engineer. */ +"Step 3" = "Step 3"; + /* No comment provided by engineer. */ "Steps to reproduce the crash" = "Steps to reproduce the crash"; @@ -1451,6 +1460,9 @@ /* No comment provided by engineer. */ "You will also need to log out from the Uphold website using your browser" = "You will also need to log out from the Uphold website using your browser"; +/* No comment provided by engineer. */ +"You will need to sign that message with the address holding the 1000 Dash collateral. This is done in the holding wallet." = "You will need to sign that message with the address holding the 1000 Dash collateral. This is done in the holding wallet."; + /* No comment provided by engineer. */ "Your transaction was sent and the amount should appear in your wallet in a few minutes." = "Your transaction was sent and the amount should appear in your wallet in a few minutes."; diff --git a/DashWallet/es.lproj/Localizable.strings b/DashWallet/es.lproj/Localizable.strings index f575da99a..bc6d79187 100644 --- a/DashWallet/es.lproj/Localizable.strings +++ b/DashWallet/es.lproj/Localizable.strings @@ -795,13 +795,13 @@ "PIN is always required to make a payment" = "PIN is always required to make a payment"; /* No comment provided by engineer. */ -"Please copy the following and sign with the address in the wallet containing the 1000 Dash collateral" = "Please copy the following and sign with the address in the wallet containing the 1000 Dash collateral"; +"Please copy the following message." = "Please copy the following message."; /* No comment provided by engineer. */ "Please enter pin to upgrade wallet" = "Por favor ingrese su pin para actualizar la billetera"; /* No comment provided by engineer. */ -"Please paste the signature from your wallet holding the 1000 Dash collateral below." = "Please paste the signature from your wallet holding the 1000 Dash collateral below."; +"Please paste the signature response from your wallet holding the collateral below." = "Please paste the signature response from your wallet holding the collateral below."; /* No comment provided by engineer. */ "Please place your phone near NFC device." = "Coloca tu teléfono cerca del dispositivo NFC."; @@ -1133,6 +1133,15 @@ /* No comment provided by engineer. */ "Status:" = "Status:"; +/* No comment provided by engineer. */ +"Step 1" = "Step 1"; + +/* No comment provided by engineer. */ +"Step 2" = "Step 2"; + +/* No comment provided by engineer. */ +"Step 3" = "Step 3"; + /* No comment provided by engineer. */ "Steps to reproduce the crash" = "Pasos para reproducir el fallo"; @@ -1451,6 +1460,9 @@ /* No comment provided by engineer. */ "You will also need to log out from the Uphold website using your browser" = "También deberás cerrar sesión en el sitio web de Uphold utilizando tu navegador"; +/* No comment provided by engineer. */ +"You will need to sign that message with the address holding the 1000 Dash collateral. This is done in the holding wallet." = "You will need to sign that message with the address holding the 1000 Dash collateral. This is done in the holding wallet."; + /* No comment provided by engineer. */ "Your transaction was sent and the amount should appear in your wallet in a few minutes." = "Tu transacción se envió y la cantidad debería aparecer en tu billetera en unos minutos."; diff --git a/DashWallet/fr.lproj/Localizable.strings b/DashWallet/fr.lproj/Localizable.strings index 0379630dd..a60265289 100644 --- a/DashWallet/fr.lproj/Localizable.strings +++ b/DashWallet/fr.lproj/Localizable.strings @@ -795,13 +795,13 @@ "PIN is always required to make a payment" = "PIN is always required to make a payment"; /* No comment provided by engineer. */ -"Please copy the following and sign with the address in the wallet containing the 1000 Dash collateral" = "Please copy the following and sign with the address in the wallet containing the 1000 Dash collateral"; +"Please copy the following message." = "Please copy the following message."; /* No comment provided by engineer. */ "Please enter pin to upgrade wallet" = "Veuillez saisir votre code PIN pour mettre à jour le portefeuille"; /* No comment provided by engineer. */ -"Please paste the signature from your wallet holding the 1000 Dash collateral below." = "Please paste the signature from your wallet holding the 1000 Dash collateral below."; +"Please paste the signature response from your wallet holding the collateral below." = "Please paste the signature response from your wallet holding the collateral below."; /* No comment provided by engineer. */ "Please place your phone near NFC device." = "Veuillez placer votre téléphone près de l'appareil NFC."; @@ -1133,6 +1133,15 @@ /* No comment provided by engineer. */ "Status:" = "Status:"; +/* No comment provided by engineer. */ +"Step 1" = "Step 1"; + +/* No comment provided by engineer. */ +"Step 2" = "Step 2"; + +/* No comment provided by engineer. */ +"Step 3" = "Step 3"; + /* No comment provided by engineer. */ "Steps to reproduce the crash" = "Étapes pour reproduire le plantage"; @@ -1451,6 +1460,9 @@ /* No comment provided by engineer. */ "You will also need to log out from the Uphold website using your browser" = "Vous devrez également vous déconnecter du site Uphold dans votre navigateur web."; +/* No comment provided by engineer. */ +"You will need to sign that message with the address holding the 1000 Dash collateral. This is done in the holding wallet." = "You will need to sign that message with the address holding the 1000 Dash collateral. This is done in the holding wallet."; + /* No comment provided by engineer. */ "Your transaction was sent and the amount should appear in your wallet in a few minutes." = "Votre transaction a été envoyée et le montant devrait apparaître dans votre portefeuille sous quelques minutes."; diff --git a/DashWallet/id.lproj/Localizable.strings b/DashWallet/id.lproj/Localizable.strings index 6b3fd30ef..a53b119f6 100644 --- a/DashWallet/id.lproj/Localizable.strings +++ b/DashWallet/id.lproj/Localizable.strings @@ -795,13 +795,13 @@ "PIN is always required to make a payment" = "PIN is always required to make a payment"; /* No comment provided by engineer. */ -"Please copy the following and sign with the address in the wallet containing the 1000 Dash collateral" = "Please copy the following and sign with the address in the wallet containing the 1000 Dash collateral"; +"Please copy the following message." = "Please copy the following message."; /* No comment provided by engineer. */ "Please enter pin to upgrade wallet" = "Silakan masukkan pin untuk meningkatkan dompet"; /* No comment provided by engineer. */ -"Please paste the signature from your wallet holding the 1000 Dash collateral below." = "Please paste the signature from your wallet holding the 1000 Dash collateral below."; +"Please paste the signature response from your wallet holding the collateral below." = "Please paste the signature response from your wallet holding the collateral below."; /* No comment provided by engineer. */ "Please place your phone near NFC device." = "Silakan letakkan ponsel Anda di dekat perangkat NFC."; @@ -1133,6 +1133,15 @@ /* No comment provided by engineer. */ "Status:" = "Status:"; +/* No comment provided by engineer. */ +"Step 1" = "Step 1"; + +/* No comment provided by engineer. */ +"Step 2" = "Step 2"; + +/* No comment provided by engineer. */ +"Step 3" = "Step 3"; + /* No comment provided by engineer. */ "Steps to reproduce the crash" = "Langkah-langkah untuk mereproduksi kerusakan"; @@ -1451,6 +1460,9 @@ /* No comment provided by engineer. */ "You will also need to log out from the Uphold website using your browser" = "Anda juga harus keluar dari situs web Uphold menggunakan browser Anda"; +/* No comment provided by engineer. */ +"You will need to sign that message with the address holding the 1000 Dash collateral. This is done in the holding wallet." = "You will need to sign that message with the address holding the 1000 Dash collateral. This is done in the holding wallet."; + /* No comment provided by engineer. */ "Your transaction was sent and the amount should appear in your wallet in a few minutes." = "Transaksi Anda telah dikirim dan jumlahnya akan muncul di dompet Anda dalam beberapa menit."; diff --git a/DashWallet/it.lproj/Localizable.strings b/DashWallet/it.lproj/Localizable.strings index be72539d5..ec721f0b5 100644 --- a/DashWallet/it.lproj/Localizable.strings +++ b/DashWallet/it.lproj/Localizable.strings @@ -795,13 +795,13 @@ "PIN is always required to make a payment" = "PIN is always required to make a payment"; /* No comment provided by engineer. */ -"Please copy the following and sign with the address in the wallet containing the 1000 Dash collateral" = "Please copy the following and sign with the address in the wallet containing the 1000 Dash collateral"; +"Please copy the following message." = "Please copy the following message."; /* No comment provided by engineer. */ "Please enter pin to upgrade wallet" = "\nInserisci il PIN per aggiornare il portafoglio"; /* No comment provided by engineer. */ -"Please paste the signature from your wallet holding the 1000 Dash collateral below." = "Please paste the signature from your wallet holding the 1000 Dash collateral below."; +"Please paste the signature response from your wallet holding the collateral below." = "Please paste the signature response from your wallet holding the collateral below."; /* No comment provided by engineer. */ "Please place your phone near NFC device." = "Perfavore posiziona il tuo telefono vicino al dispositivo NFC."; @@ -1133,6 +1133,15 @@ /* No comment provided by engineer. */ "Status:" = "Status:"; +/* No comment provided by engineer. */ +"Step 1" = "Step 1"; + +/* No comment provided by engineer. */ +"Step 2" = "Step 2"; + +/* No comment provided by engineer. */ +"Step 3" = "Step 3"; + /* No comment provided by engineer. */ "Steps to reproduce the crash" = "Passi per riprodurre il crash"; @@ -1451,6 +1460,9 @@ /* No comment provided by engineer. */ "You will also need to log out from the Uphold website using your browser" = "Sarà inoltre necessario disconnettersi dal sito Web di Uphold utilizzando il browser"; +/* No comment provided by engineer. */ +"You will need to sign that message with the address holding the 1000 Dash collateral. This is done in the holding wallet." = "You will need to sign that message with the address holding the 1000 Dash collateral. This is done in the holding wallet."; + /* No comment provided by engineer. */ "Your transaction was sent and the amount should appear in your wallet in a few minutes." = "La tua transazione è stata inviata e l'importo dovrebbe essere visualizzato nel tuo portafoglio entro pochi minuti."; diff --git a/DashWallet/ja.lproj/Localizable.strings b/DashWallet/ja.lproj/Localizable.strings index 8e1ea7f15..849a97706 100644 --- a/DashWallet/ja.lproj/Localizable.strings +++ b/DashWallet/ja.lproj/Localizable.strings @@ -795,13 +795,13 @@ "PIN is always required to make a payment" = "PIN is always required to make a payment"; /* No comment provided by engineer. */ -"Please copy the following and sign with the address in the wallet containing the 1000 Dash collateral" = "Please copy the following and sign with the address in the wallet containing the 1000 Dash collateral"; +"Please copy the following message." = "Please copy the following message."; /* No comment provided by engineer. */ "Please enter pin to upgrade wallet" = "ウォレットをアップグレードするためPINを入力してください"; /* No comment provided by engineer. */ -"Please paste the signature from your wallet holding the 1000 Dash collateral below." = "Please paste the signature from your wallet holding the 1000 Dash collateral below."; +"Please paste the signature response from your wallet holding the collateral below." = "Please paste the signature response from your wallet holding the collateral below."; /* No comment provided by engineer. */ "Please place your phone near NFC device." = "あなたの携帯電話をNFCデバイスに近づけてください"; @@ -1133,6 +1133,15 @@ /* No comment provided by engineer. */ "Status:" = "Status:"; +/* No comment provided by engineer. */ +"Step 1" = "Step 1"; + +/* No comment provided by engineer. */ +"Step 2" = "Step 2"; + +/* No comment provided by engineer. */ +"Step 3" = "Step 3"; + /* No comment provided by engineer. */ "Steps to reproduce the crash" = "クラッシュを再現する手順"; @@ -1451,6 +1460,9 @@ /* No comment provided by engineer. */ "You will also need to log out from the Uphold website using your browser" = "またブラウザーを使ってUpholdのウェブサイトからログアウトする必要もあります"; +/* No comment provided by engineer. */ +"You will need to sign that message with the address holding the 1000 Dash collateral. This is done in the holding wallet." = "You will need to sign that message with the address holding the 1000 Dash collateral. This is done in the holding wallet."; + /* No comment provided by engineer. */ "Your transaction was sent and the amount should appear in your wallet in a few minutes." = "あなたの取引は送られたので、数分内にその金額がウォレットに表示されるでしょう"; diff --git a/DashWallet/ko.lproj/Localizable.strings b/DashWallet/ko.lproj/Localizable.strings index 67dc5631e..691eb95f2 100644 --- a/DashWallet/ko.lproj/Localizable.strings +++ b/DashWallet/ko.lproj/Localizable.strings @@ -795,13 +795,13 @@ "PIN is always required to make a payment" = "PIN is always required to make a payment"; /* No comment provided by engineer. */ -"Please copy the following and sign with the address in the wallet containing the 1000 Dash collateral" = "Please copy the following and sign with the address in the wallet containing the 1000 Dash collateral"; +"Please copy the following message." = "Please copy the following message."; /* No comment provided by engineer. */ "Please enter pin to upgrade wallet" = "지갑을 업그레이드하려면 PIN을 입력하십시오"; /* No comment provided by engineer. */ -"Please paste the signature from your wallet holding the 1000 Dash collateral below." = "Please paste the signature from your wallet holding the 1000 Dash collateral below."; +"Please paste the signature response from your wallet holding the collateral below." = "Please paste the signature response from your wallet holding the collateral below."; /* No comment provided by engineer. */ "Please place your phone near NFC device." = "휴대 전화를 NFC 기기 가까이에 두십시오."; @@ -1133,6 +1133,15 @@ /* No comment provided by engineer. */ "Status:" = "Status:"; +/* No comment provided by engineer. */ +"Step 1" = "Step 1"; + +/* No comment provided by engineer. */ +"Step 2" = "Step 2"; + +/* No comment provided by engineer. */ +"Step 3" = "Step 3"; + /* No comment provided by engineer. */ "Steps to reproduce the crash" = "충돌 복사본 생성 방법"; @@ -1451,6 +1460,9 @@ /* No comment provided by engineer. */ "You will also need to log out from the Uphold website using your browser" = "또한 당신의 브라우저를 이용하여 업홀드 웹사이트에서 로그아웃 하십시오."; +/* No comment provided by engineer. */ +"You will need to sign that message with the address holding the 1000 Dash collateral. This is done in the holding wallet." = "You will need to sign that message with the address holding the 1000 Dash collateral. This is done in the holding wallet."; + /* No comment provided by engineer. */ "Your transaction was sent and the amount should appear in your wallet in a few minutes." = "당신의 거래가 완료되었으며 수 분 이내에 당신의 지갑에 잔액이 표시될 예정입니다."; diff --git a/DashWallet/nb.lproj/Localizable.strings b/DashWallet/nb.lproj/Localizable.strings index ab95de1a4..c0710ae12 100644 --- a/DashWallet/nb.lproj/Localizable.strings +++ b/DashWallet/nb.lproj/Localizable.strings @@ -795,13 +795,13 @@ "PIN is always required to make a payment" = "PIN is always required to make a payment"; /* No comment provided by engineer. */ -"Please copy the following and sign with the address in the wallet containing the 1000 Dash collateral" = "Please copy the following and sign with the address in the wallet containing the 1000 Dash collateral"; +"Please copy the following message." = "Please copy the following message."; /* No comment provided by engineer. */ "Please enter pin to upgrade wallet" = "Please enter pin to upgrade wallet"; /* No comment provided by engineer. */ -"Please paste the signature from your wallet holding the 1000 Dash collateral below." = "Please paste the signature from your wallet holding the 1000 Dash collateral below."; +"Please paste the signature response from your wallet holding the collateral below." = "Please paste the signature response from your wallet holding the collateral below."; /* No comment provided by engineer. */ "Please place your phone near NFC device." = "Please place your phone near NFC device."; @@ -1133,6 +1133,15 @@ /* No comment provided by engineer. */ "Status:" = "Status:"; +/* No comment provided by engineer. */ +"Step 1" = "Step 1"; + +/* No comment provided by engineer. */ +"Step 2" = "Step 2"; + +/* No comment provided by engineer. */ +"Step 3" = "Step 3"; + /* No comment provided by engineer. */ "Steps to reproduce the crash" = "Steps to reproduce the crash"; @@ -1451,6 +1460,9 @@ /* No comment provided by engineer. */ "You will also need to log out from the Uphold website using your browser" = "You will also need to log out from the Uphold website using your browser"; +/* No comment provided by engineer. */ +"You will need to sign that message with the address holding the 1000 Dash collateral. This is done in the holding wallet." = "You will need to sign that message with the address holding the 1000 Dash collateral. This is done in the holding wallet."; + /* No comment provided by engineer. */ "Your transaction was sent and the amount should appear in your wallet in a few minutes." = "Your transaction was sent and the amount should appear in your wallet in a few minutes."; diff --git a/DashWallet/nl.lproj/Localizable.strings b/DashWallet/nl.lproj/Localizable.strings index 5ed1431da..aaf4782fd 100644 --- a/DashWallet/nl.lproj/Localizable.strings +++ b/DashWallet/nl.lproj/Localizable.strings @@ -795,13 +795,13 @@ "PIN is always required to make a payment" = "PIN is always required to make a payment"; /* No comment provided by engineer. */ -"Please copy the following and sign with the address in the wallet containing the 1000 Dash collateral" = "Please copy the following and sign with the address in the wallet containing the 1000 Dash collateral"; +"Please copy the following message." = "Please copy the following message."; /* No comment provided by engineer. */ "Please enter pin to upgrade wallet" = "Voer je pincode in om de portemonnee bij te werken"; /* No comment provided by engineer. */ -"Please paste the signature from your wallet holding the 1000 Dash collateral below." = "Please paste the signature from your wallet holding the 1000 Dash collateral below."; +"Please paste the signature response from your wallet holding the collateral below." = "Please paste the signature response from your wallet holding the collateral below."; /* No comment provided by engineer. */ "Please place your phone near NFC device." = "Houd u uw telefoon bij een NFC apparaat"; @@ -1133,6 +1133,15 @@ /* No comment provided by engineer. */ "Status:" = "Status:"; +/* No comment provided by engineer. */ +"Step 1" = "Step 1"; + +/* No comment provided by engineer. */ +"Step 2" = "Step 2"; + +/* No comment provided by engineer. */ +"Step 3" = "Step 3"; + /* No comment provided by engineer. */ "Steps to reproduce the crash" = "Steppen om crash te reproduceren"; @@ -1451,6 +1460,9 @@ /* No comment provided by engineer. */ "You will also need to log out from the Uphold website using your browser" = "Je dient ook nog uit te loggen bij Uphold website in je webbrowser."; +/* No comment provided by engineer. */ +"You will need to sign that message with the address holding the 1000 Dash collateral. This is done in the holding wallet." = "You will need to sign that message with the address holding the 1000 Dash collateral. This is done in the holding wallet."; + /* No comment provided by engineer. */ "Your transaction was sent and the amount should appear in your wallet in a few minutes." = "De transactie is verzonden en het bedrag verschijnt binnen een paar minuten in je de portemonnee."; diff --git a/DashWallet/pl.lproj/Localizable.strings b/DashWallet/pl.lproj/Localizable.strings index e7c75ca30..ff9da1e7f 100644 --- a/DashWallet/pl.lproj/Localizable.strings +++ b/DashWallet/pl.lproj/Localizable.strings @@ -795,13 +795,13 @@ "PIN is always required to make a payment" = "PIN is always required to make a payment"; /* No comment provided by engineer. */ -"Please copy the following and sign with the address in the wallet containing the 1000 Dash collateral" = "Please copy the following and sign with the address in the wallet containing the 1000 Dash collateral"; +"Please copy the following message." = "Please copy the following message."; /* No comment provided by engineer. */ "Please enter pin to upgrade wallet" = "Wpisz pin aby zaktualizować porfel. "; /* No comment provided by engineer. */ -"Please paste the signature from your wallet holding the 1000 Dash collateral below." = "Please paste the signature from your wallet holding the 1000 Dash collateral below."; +"Please paste the signature response from your wallet holding the collateral below." = "Please paste the signature response from your wallet holding the collateral below."; /* No comment provided by engineer. */ "Please place your phone near NFC device." = "Przyłóż telefon do urządzenia NFC "; @@ -1133,6 +1133,15 @@ /* No comment provided by engineer. */ "Status:" = "Status:"; +/* No comment provided by engineer. */ +"Step 1" = "Step 1"; + +/* No comment provided by engineer. */ +"Step 2" = "Step 2"; + +/* No comment provided by engineer. */ +"Step 3" = "Step 3"; + /* No comment provided by engineer. */ "Steps to reproduce the crash" = "Kroki do reprodukcji awarii"; @@ -1451,6 +1460,9 @@ /* No comment provided by engineer. */ "You will also need to log out from the Uphold website using your browser" = "Potrzebujesz także wylogować się z przeglądarki na swoim koncie Uphold "; +/* No comment provided by engineer. */ +"You will need to sign that message with the address holding the 1000 Dash collateral. This is done in the holding wallet." = "You will need to sign that message with the address holding the 1000 Dash collateral. This is done in the holding wallet."; + /* No comment provided by engineer. */ "Your transaction was sent and the amount should appear in your wallet in a few minutes." = "Twoja transakcja została wysłana a ilość powinna pojawić się na Twoim koncie w kilka minut."; diff --git a/DashWallet/pt.lproj/Localizable.strings b/DashWallet/pt.lproj/Localizable.strings index 36f071b87..73d338848 100644 --- a/DashWallet/pt.lproj/Localizable.strings +++ b/DashWallet/pt.lproj/Localizable.strings @@ -795,13 +795,13 @@ "PIN is always required to make a payment" = "PIN is always required to make a payment"; /* No comment provided by engineer. */ -"Please copy the following and sign with the address in the wallet containing the 1000 Dash collateral" = "Please copy the following and sign with the address in the wallet containing the 1000 Dash collateral"; +"Please copy the following message." = "Please copy the following message."; /* No comment provided by engineer. */ "Please enter pin to upgrade wallet" = "Por favor, digite pin para atualizar a carteira"; /* No comment provided by engineer. */ -"Please paste the signature from your wallet holding the 1000 Dash collateral below." = "Please paste the signature from your wallet holding the 1000 Dash collateral below."; +"Please paste the signature response from your wallet holding the collateral below." = "Please paste the signature response from your wallet holding the collateral below."; /* No comment provided by engineer. */ "Please place your phone near NFC device." = "Por favor coloque seu telefone perto do dispositivo NFC"; @@ -1133,6 +1133,15 @@ /* No comment provided by engineer. */ "Status:" = "Status:"; +/* No comment provided by engineer. */ +"Step 1" = "Step 1"; + +/* No comment provided by engineer. */ +"Step 2" = "Step 2"; + +/* No comment provided by engineer. */ +"Step 3" = "Step 3"; + /* No comment provided by engineer. */ "Steps to reproduce the crash" = "Passos para reproduzir a falha"; @@ -1451,6 +1460,9 @@ /* No comment provided by engineer. */ "You will also need to log out from the Uphold website using your browser" = "Também será necessário sair do site da Uphold utilizando seu navegador"; +/* No comment provided by engineer. */ +"You will need to sign that message with the address holding the 1000 Dash collateral. This is done in the holding wallet." = "You will need to sign that message with the address holding the 1000 Dash collateral. This is done in the holding wallet."; + /* No comment provided by engineer. */ "Your transaction was sent and the amount should appear in your wallet in a few minutes." = "Sua transação foi enviada e o valor aparecerá na sua carteira em alguns minutos. "; diff --git a/DashWallet/ru.lproj/Localizable.strings b/DashWallet/ru.lproj/Localizable.strings index b7646f13e..0ff9aea93 100644 --- a/DashWallet/ru.lproj/Localizable.strings +++ b/DashWallet/ru.lproj/Localizable.strings @@ -795,13 +795,13 @@ "PIN is always required to make a payment" = "PIN is always required to make a payment"; /* No comment provided by engineer. */ -"Please copy the following and sign with the address in the wallet containing the 1000 Dash collateral" = "Please copy the following and sign with the address in the wallet containing the 1000 Dash collateral"; +"Please copy the following message." = "Please copy the following message."; /* No comment provided by engineer. */ "Please enter pin to upgrade wallet" = "Пожалуйста, введите PIN для выполнения обновления кошелька"; /* No comment provided by engineer. */ -"Please paste the signature from your wallet holding the 1000 Dash collateral below." = "Please paste the signature from your wallet holding the 1000 Dash collateral below."; +"Please paste the signature response from your wallet holding the collateral below." = "Please paste the signature response from your wallet holding the collateral below."; /* No comment provided by engineer. */ "Please place your phone near NFC device." = "Пожалуйста, поместите ваш телефон рядом с NFC устройством."; @@ -1133,6 +1133,15 @@ /* No comment provided by engineer. */ "Status:" = "Status:"; +/* No comment provided by engineer. */ +"Step 1" = "Step 1"; + +/* No comment provided by engineer. */ +"Step 2" = "Step 2"; + +/* No comment provided by engineer. */ +"Step 3" = "Step 3"; + /* No comment provided by engineer. */ "Steps to reproduce the crash" = "Шаги для воспроизведения ошибки"; @@ -1451,6 +1460,9 @@ /* No comment provided by engineer. */ "You will also need to log out from the Uphold website using your browser" = "Вам также необходимо будет выйти из своей учётной записи Uphold используя браузер"; +/* No comment provided by engineer. */ +"You will need to sign that message with the address holding the 1000 Dash collateral. This is done in the holding wallet." = "You will need to sign that message with the address holding the 1000 Dash collateral. This is done in the holding wallet."; + /* No comment provided by engineer. */ "Your transaction was sent and the amount should appear in your wallet in a few minutes." = "Ваша транзакция была отправлена и её сумма отобразится в вашем кошельке через несколько минут."; diff --git a/DashWallet/sk.lproj/Localizable.strings b/DashWallet/sk.lproj/Localizable.strings index d7aed2b59..bf1bea9d7 100644 --- a/DashWallet/sk.lproj/Localizable.strings +++ b/DashWallet/sk.lproj/Localizable.strings @@ -795,13 +795,13 @@ "PIN is always required to make a payment" = "PIN is always required to make a payment"; /* No comment provided by engineer. */ -"Please copy the following and sign with the address in the wallet containing the 1000 Dash collateral" = "Please copy the following and sign with the address in the wallet containing the 1000 Dash collateral"; +"Please copy the following message." = "Please copy the following message."; /* No comment provided by engineer. */ "Please enter pin to upgrade wallet" = "Pre inováciu peňaženky zadajte pin"; /* No comment provided by engineer. */ -"Please paste the signature from your wallet holding the 1000 Dash collateral below." = "Please paste the signature from your wallet holding the 1000 Dash collateral below."; +"Please paste the signature response from your wallet holding the collateral below." = "Please paste the signature response from your wallet holding the collateral below."; /* No comment provided by engineer. */ "Please place your phone near NFC device." = "Umiestnite Váš telefón blízko NFC zariadenia."; @@ -1133,6 +1133,15 @@ /* No comment provided by engineer. */ "Status:" = "Status:"; +/* No comment provided by engineer. */ +"Step 1" = "Step 1"; + +/* No comment provided by engineer. */ +"Step 2" = "Step 2"; + +/* No comment provided by engineer. */ +"Step 3" = "Step 3"; + /* No comment provided by engineer. */ "Steps to reproduce the crash" = "Steps to reproduce the crash"; @@ -1451,6 +1460,9 @@ /* No comment provided by engineer. */ "You will also need to log out from the Uphold website using your browser" = "You will also need to log out from the Uphold website using your browser"; +/* No comment provided by engineer. */ +"You will need to sign that message with the address holding the 1000 Dash collateral. This is done in the holding wallet." = "You will need to sign that message with the address holding the 1000 Dash collateral. This is done in the holding wallet."; + /* No comment provided by engineer. */ "Your transaction was sent and the amount should appear in your wallet in a few minutes." = "Your transaction was sent and the amount should appear in your wallet in a few minutes."; diff --git a/DashWallet/sq.lproj/Localizable.strings b/DashWallet/sq.lproj/Localizable.strings index 6713d66ed..18c14e25d 100644 --- a/DashWallet/sq.lproj/Localizable.strings +++ b/DashWallet/sq.lproj/Localizable.strings @@ -795,13 +795,13 @@ "PIN is always required to make a payment" = "PIN is always required to make a payment"; /* No comment provided by engineer. */ -"Please copy the following and sign with the address in the wallet containing the 1000 Dash collateral" = "Please copy the following and sign with the address in the wallet containing the 1000 Dash collateral"; +"Please copy the following message." = "Please copy the following message."; /* No comment provided by engineer. */ "Please enter pin to upgrade wallet" = "Please enter pin to upgrade wallet"; /* No comment provided by engineer. */ -"Please paste the signature from your wallet holding the 1000 Dash collateral below." = "Please paste the signature from your wallet holding the 1000 Dash collateral below."; +"Please paste the signature response from your wallet holding the collateral below." = "Please paste the signature response from your wallet holding the collateral below."; /* No comment provided by engineer. */ "Please place your phone near NFC device." = "Please place your phone near NFC device."; @@ -1133,6 +1133,15 @@ /* No comment provided by engineer. */ "Status:" = "Status:"; +/* No comment provided by engineer. */ +"Step 1" = "Step 1"; + +/* No comment provided by engineer. */ +"Step 2" = "Step 2"; + +/* No comment provided by engineer. */ +"Step 3" = "Step 3"; + /* No comment provided by engineer. */ "Steps to reproduce the crash" = "Steps to reproduce the crash"; @@ -1451,6 +1460,9 @@ /* No comment provided by engineer. */ "You will also need to log out from the Uphold website using your browser" = "You will also need to log out from the Uphold website using your browser"; +/* No comment provided by engineer. */ +"You will need to sign that message with the address holding the 1000 Dash collateral. This is done in the holding wallet." = "You will need to sign that message with the address holding the 1000 Dash collateral. This is done in the holding wallet."; + /* No comment provided by engineer. */ "Your transaction was sent and the amount should appear in your wallet in a few minutes." = "Your transaction was sent and the amount should appear in your wallet in a few minutes."; diff --git a/DashWallet/sv.lproj/Localizable.strings b/DashWallet/sv.lproj/Localizable.strings index 0a8d388b1..6bf1b9e46 100644 --- a/DashWallet/sv.lproj/Localizable.strings +++ b/DashWallet/sv.lproj/Localizable.strings @@ -795,13 +795,13 @@ "PIN is always required to make a payment" = "PIN is always required to make a payment"; /* No comment provided by engineer. */ -"Please copy the following and sign with the address in the wallet containing the 1000 Dash collateral" = "Please copy the following and sign with the address in the wallet containing the 1000 Dash collateral"; +"Please copy the following message." = "Please copy the following message."; /* No comment provided by engineer. */ "Please enter pin to upgrade wallet" = "Please enter pin to upgrade wallet"; /* No comment provided by engineer. */ -"Please paste the signature from your wallet holding the 1000 Dash collateral below." = "Please paste the signature from your wallet holding the 1000 Dash collateral below."; +"Please paste the signature response from your wallet holding the collateral below." = "Please paste the signature response from your wallet holding the collateral below."; /* No comment provided by engineer. */ "Please place your phone near NFC device." = "Please place your phone near NFC device."; @@ -1133,6 +1133,15 @@ /* No comment provided by engineer. */ "Status:" = "Status:"; +/* No comment provided by engineer. */ +"Step 1" = "Step 1"; + +/* No comment provided by engineer. */ +"Step 2" = "Step 2"; + +/* No comment provided by engineer. */ +"Step 3" = "Step 3"; + /* No comment provided by engineer. */ "Steps to reproduce the crash" = "Steps to reproduce the crash"; @@ -1451,6 +1460,9 @@ /* No comment provided by engineer. */ "You will also need to log out from the Uphold website using your browser" = "You will also need to log out from the Uphold website using your browser"; +/* No comment provided by engineer. */ +"You will need to sign that message with the address holding the 1000 Dash collateral. This is done in the holding wallet." = "You will need to sign that message with the address holding the 1000 Dash collateral. This is done in the holding wallet."; + /* No comment provided by engineer. */ "Your transaction was sent and the amount should appear in your wallet in a few minutes." = "Your transaction was sent and the amount should appear in your wallet in a few minutes."; diff --git a/DashWallet/th.lproj/Localizable.strings b/DashWallet/th.lproj/Localizable.strings index 8c9b4dda0..2c2f24a0b 100644 --- a/DashWallet/th.lproj/Localizable.strings +++ b/DashWallet/th.lproj/Localizable.strings @@ -795,13 +795,13 @@ "PIN is always required to make a payment" = "PIN is always required to make a payment"; /* No comment provided by engineer. */ -"Please copy the following and sign with the address in the wallet containing the 1000 Dash collateral" = "Please copy the following and sign with the address in the wallet containing the 1000 Dash collateral"; +"Please copy the following message." = "Please copy the following message."; /* No comment provided by engineer. */ "Please enter pin to upgrade wallet" = "โปรดใส่รหัสเพื่ออัพเกรด wallet"; /* No comment provided by engineer. */ -"Please paste the signature from your wallet holding the 1000 Dash collateral below." = "Please paste the signature from your wallet holding the 1000 Dash collateral below."; +"Please paste the signature response from your wallet holding the collateral below." = "Please paste the signature response from your wallet holding the collateral below."; /* No comment provided by engineer. */ "Please place your phone near NFC device." = "โปรดวางมือถือของคุณใกล้กับอุปกรณ์ NFC"; @@ -1133,6 +1133,15 @@ /* No comment provided by engineer. */ "Status:" = "Status:"; +/* No comment provided by engineer. */ +"Step 1" = "Step 1"; + +/* No comment provided by engineer. */ +"Step 2" = "Step 2"; + +/* No comment provided by engineer. */ +"Step 3" = "Step 3"; + /* No comment provided by engineer. */ "Steps to reproduce the crash" = "Steps to reproduce the crash"; @@ -1451,6 +1460,9 @@ /* No comment provided by engineer. */ "You will also need to log out from the Uphold website using your browser" = "คุณจะต้องออกจากระบบของเว็บไซต์ Uphold โดยใช้เบราว์เซอร์ของคุณ"; +/* No comment provided by engineer. */ +"You will need to sign that message with the address holding the 1000 Dash collateral. This is done in the holding wallet." = "You will need to sign that message with the address holding the 1000 Dash collateral. This is done in the holding wallet."; + /* No comment provided by engineer. */ "Your transaction was sent and the amount should appear in your wallet in a few minutes." = "ธุรกรรมของคุณถูกส่งแล้วและจำนวนเงินจะปรากฏใน wallet ของคุณในอีกไม่กี่นาที"; diff --git a/DashWallet/tr.lproj/Localizable.strings b/DashWallet/tr.lproj/Localizable.strings index 9ab75f2c9..25235a9bf 100644 --- a/DashWallet/tr.lproj/Localizable.strings +++ b/DashWallet/tr.lproj/Localizable.strings @@ -795,13 +795,13 @@ "PIN is always required to make a payment" = "PIN is always required to make a payment"; /* No comment provided by engineer. */ -"Please copy the following and sign with the address in the wallet containing the 1000 Dash collateral" = "Please copy the following and sign with the address in the wallet containing the 1000 Dash collateral"; +"Please copy the following message." = "Please copy the following message."; /* No comment provided by engineer. */ "Please enter pin to upgrade wallet" = "Cüzdanı yükseltmek için lütfen pin kodunu girin"; /* No comment provided by engineer. */ -"Please paste the signature from your wallet holding the 1000 Dash collateral below." = "Please paste the signature from your wallet holding the 1000 Dash collateral below."; +"Please paste the signature response from your wallet holding the collateral below." = "Please paste the signature response from your wallet holding the collateral below."; /* No comment provided by engineer. */ "Please place your phone near NFC device." = "Lütfen telefonunuzu bir NFC cihazının yakınına yerleştirin."; @@ -1133,6 +1133,15 @@ /* No comment provided by engineer. */ "Status:" = "Status:"; +/* No comment provided by engineer. */ +"Step 1" = "Step 1"; + +/* No comment provided by engineer. */ +"Step 2" = "Step 2"; + +/* No comment provided by engineer. */ +"Step 3" = "Step 3"; + /* No comment provided by engineer. */ "Steps to reproduce the crash" = "Çökmeyi yeniden oluşturma adımları"; @@ -1451,6 +1460,9 @@ /* No comment provided by engineer. */ "You will also need to log out from the Uphold website using your browser" = "Aynı zamanda tarayıcınızda Uphold internet sitesinden çıkış yapmanız gerekecek"; +/* No comment provided by engineer. */ +"You will need to sign that message with the address holding the 1000 Dash collateral. This is done in the holding wallet." = "You will need to sign that message with the address holding the 1000 Dash collateral. This is done in the holding wallet."; + /* No comment provided by engineer. */ "Your transaction was sent and the amount should appear in your wallet in a few minutes." = "İşleminiz yapıldı ve birkaç dakika içinde tutar cüzdanınızda görülecek."; diff --git a/DashWallet/vi.lproj/Localizable.strings b/DashWallet/vi.lproj/Localizable.strings index c77a7968f..80a66cd4c 100644 --- a/DashWallet/vi.lproj/Localizable.strings +++ b/DashWallet/vi.lproj/Localizable.strings @@ -795,13 +795,13 @@ "PIN is always required to make a payment" = "PIN is always required to make a payment"; /* No comment provided by engineer. */ -"Please copy the following and sign with the address in the wallet containing the 1000 Dash collateral" = "Please copy the following and sign with the address in the wallet containing the 1000 Dash collateral"; +"Please copy the following message." = "Please copy the following message."; /* No comment provided by engineer. */ "Please enter pin to upgrade wallet" = "Hãy nhập mã để nâng cấp ví"; /* No comment provided by engineer. */ -"Please paste the signature from your wallet holding the 1000 Dash collateral below." = "Please paste the signature from your wallet holding the 1000 Dash collateral below."; +"Please paste the signature response from your wallet holding the collateral below." = "Please paste the signature response from your wallet holding the collateral below."; /* No comment provided by engineer. */ "Please place your phone near NFC device." = "Hãy đặt điện thoại của bạn cạnh thiết bị NFC."; @@ -1133,6 +1133,15 @@ /* No comment provided by engineer. */ "Status:" = "Status:"; +/* No comment provided by engineer. */ +"Step 1" = "Step 1"; + +/* No comment provided by engineer. */ +"Step 2" = "Step 2"; + +/* No comment provided by engineer. */ +"Step 3" = "Step 3"; + /* No comment provided by engineer. */ "Steps to reproduce the crash" = "Các bước để tái tạo lại lỗi"; @@ -1451,6 +1460,9 @@ /* No comment provided by engineer. */ "You will also need to log out from the Uphold website using your browser" = "Bạn sẽ cần phải đăng xuất khỏi tài khoản từ trang web Uphold với trình duyệt của mình"; +/* No comment provided by engineer. */ +"You will need to sign that message with the address holding the 1000 Dash collateral. This is done in the holding wallet." = "You will need to sign that message with the address holding the 1000 Dash collateral. This is done in the holding wallet."; + /* No comment provided by engineer. */ "Your transaction was sent and the amount should appear in your wallet in a few minutes." = "Giao dịch của bạn đã được gửi và số tiền sẽ xuất hiện trong ví của bạn trong vài phút."; diff --git a/DashWallet/zh-Hans.lproj/Localizable.strings b/DashWallet/zh-Hans.lproj/Localizable.strings index 173b94333..d9978e65e 100644 --- a/DashWallet/zh-Hans.lproj/Localizable.strings +++ b/DashWallet/zh-Hans.lproj/Localizable.strings @@ -795,13 +795,13 @@ "PIN is always required to make a payment" = "PIN is always required to make a payment"; /* No comment provided by engineer. */ -"Please copy the following and sign with the address in the wallet containing the 1000 Dash collateral" = "Please copy the following and sign with the address in the wallet containing the 1000 Dash collateral"; +"Please copy the following message." = "Please copy the following message."; /* No comment provided by engineer. */ "Please enter pin to upgrade wallet" = "请输入Pin码以升级钱包"; /* No comment provided by engineer. */ -"Please paste the signature from your wallet holding the 1000 Dash collateral below." = "Please paste the signature from your wallet holding the 1000 Dash collateral below."; +"Please paste the signature response from your wallet holding the collateral below." = "Please paste the signature response from your wallet holding the collateral below."; /* No comment provided by engineer. */ "Please place your phone near NFC device." = "请将你的手机靠近NFC设备."; @@ -1133,6 +1133,15 @@ /* No comment provided by engineer. */ "Status:" = "Status:"; +/* No comment provided by engineer. */ +"Step 1" = "Step 1"; + +/* No comment provided by engineer. */ +"Step 2" = "Step 2"; + +/* No comment provided by engineer. */ +"Step 3" = "Step 3"; + /* No comment provided by engineer. */ "Steps to reproduce the crash" = "Steps to reproduce the crash"; @@ -1451,6 +1460,9 @@ /* No comment provided by engineer. */ "You will also need to log out from the Uphold website using your browser" = "You will also need to log out from the Uphold website using your browser"; +/* No comment provided by engineer. */ +"You will need to sign that message with the address holding the 1000 Dash collateral. This is done in the holding wallet." = "You will need to sign that message with the address holding the 1000 Dash collateral. This is done in the holding wallet."; + /* No comment provided by engineer. */ "Your transaction was sent and the amount should appear in your wallet in a few minutes." = "Your transaction was sent and the amount should appear in your wallet in a few minutes."; diff --git a/DashWallet/zh-Hant-TW.lproj/Localizable.strings b/DashWallet/zh-Hant-TW.lproj/Localizable.strings index 84286d96d..8a908bcfd 100644 --- a/DashWallet/zh-Hant-TW.lproj/Localizable.strings +++ b/DashWallet/zh-Hant-TW.lproj/Localizable.strings @@ -795,13 +795,13 @@ "PIN is always required to make a payment" = "PIN is always required to make a payment"; /* No comment provided by engineer. */ -"Please copy the following and sign with the address in the wallet containing the 1000 Dash collateral" = "Please copy the following and sign with the address in the wallet containing the 1000 Dash collateral"; +"Please copy the following message." = "Please copy the following message."; /* No comment provided by engineer. */ "Please enter pin to upgrade wallet" = "請輸入密碼以升級錢包"; /* No comment provided by engineer. */ -"Please paste the signature from your wallet holding the 1000 Dash collateral below." = "Please paste the signature from your wallet holding the 1000 Dash collateral below."; +"Please paste the signature response from your wallet holding the collateral below." = "Please paste the signature response from your wallet holding the collateral below."; /* No comment provided by engineer. */ "Please place your phone near NFC device." = "請將手機放在NFC設備附近。"; @@ -1133,6 +1133,15 @@ /* No comment provided by engineer. */ "Status:" = "Status:"; +/* No comment provided by engineer. */ +"Step 1" = "Step 1"; + +/* No comment provided by engineer. */ +"Step 2" = "Step 2"; + +/* No comment provided by engineer. */ +"Step 3" = "Step 3"; + /* No comment provided by engineer. */ "Steps to reproduce the crash" = "Steps to reproduce the crash"; @@ -1451,6 +1460,9 @@ /* No comment provided by engineer. */ "You will also need to log out from the Uphold website using your browser" = "You will also need to log out from the Uphold website using your browser"; +/* No comment provided by engineer. */ +"You will need to sign that message with the address holding the 1000 Dash collateral. This is done in the holding wallet." = "You will need to sign that message with the address holding the 1000 Dash collateral. This is done in the holding wallet."; + /* No comment provided by engineer. */ "Your transaction was sent and the amount should appear in your wallet in a few minutes." = "Your transaction was sent and the amount should appear in your wallet in a few minutes."; From fd4efe4df6bf63480783c9b545c1b8b929ad7d06 Mon Sep 17 00:00:00 2001 From: Quantum Explorer Date: Sat, 11 Apr 2020 16:10:06 +0700 Subject: [PATCH 27/34] merged in master --- DashWallet.xcodeproj/project.pbxproj | 112 ++++--------- DashWallet/DWKeyValueTableViewCell.h | 14 -- DashWallet/DWKeyValueTableViewCell.m | 24 --- DashWallet/DWMasternodeTableViewCell.h | 16 -- DashWallet/DWMasternodeTableViewCell.m | 24 --- DashWallet/DWMasternodeTableViewCell.xib | 57 ------- .../DWProviderUpdateRegistrarTableViewCell.h | 22 --- .../DWProviderUpdateRegistrarTableViewCell.m | 24 --- .../DWProviderUpdateServiceTableViewCell.h | 22 --- .../DWProviderUpdateServiceTableViewCell.m | 24 --- .../DWPublicKeyGenerationTableViewCell.m | 2 +- .../Cells/DWLocalMasternodeTableViewCell.h | 2 + .../Cells/DWLocalMasternodeTableViewCell.m | 1 + .../DWLocalMasternodeControlViewController.h | 2 + .../DWLocalMasternodeControlViewController.m | 1 + .../Models/DWLocalMasternodeListModel.h | 2 + .../Models/DWLocalMasternodeListModel.m | 2 + .../Cells/DWMasternodeTableViewCell.h | 2 + .../Cells/DWMasternodeTableViewCell.m | 4 +- .../Models/DWMasternodeListModel.h | 2 + .../Models/DWMasternodeListModel.m | 2 + .../Models/DWMasternodeRegistrationModel.h | 1 + DashWallet/Sources/UI/Views/BRCopyLabel.h | 36 +++++ DashWallet/Sources/UI/Views/BRCopyLabel.m | 151 ++++++++++++++++++ 24 files changed, 236 insertions(+), 313 deletions(-) delete mode 100644 DashWallet/DWKeyValueTableViewCell.h delete mode 100644 DashWallet/DWKeyValueTableViewCell.m delete mode 100644 DashWallet/DWMasternodeTableViewCell.h delete mode 100644 DashWallet/DWMasternodeTableViewCell.m delete mode 100644 DashWallet/DWMasternodeTableViewCell.xib delete mode 100644 DashWallet/DWProviderUpdateRegistrarTableViewCell.h delete mode 100644 DashWallet/DWProviderUpdateRegistrarTableViewCell.m delete mode 100644 DashWallet/DWProviderUpdateServiceTableViewCell.h delete mode 100644 DashWallet/DWProviderUpdateServiceTableViewCell.m create mode 100644 DashWallet/Sources/UI/Views/BRCopyLabel.h create mode 100644 DashWallet/Sources/UI/Views/BRCopyLabel.m diff --git a/DashWallet.xcodeproj/project.pbxproj b/DashWallet.xcodeproj/project.pbxproj index d483f3c0c..bc0a2e447 100644 --- a/DashWallet.xcodeproj/project.pbxproj +++ b/DashWallet.xcodeproj/project.pbxproj @@ -339,7 +339,6 @@ 2ADF83FA23632D1C008459A7 /* BRBubbleView.m in Sources */ = {isa = PBXBuildFile; fileRef = 759816E619357D6F005060EA /* BRBubbleView.m */; }; 2ADF83FF23633116008459A7 /* SharedAssets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 2ADF83FE23633116008459A7 /* SharedAssets.xcassets */; }; 2ADF840023633121008459A7 /* SharedAssets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 2ADF83FE23633116008459A7 /* SharedAssets.xcassets */; }; - 2AE125FD2241151B00379C6F /* DWMasternodeTableViewCell.xib in Resources */ = {isa = PBXBuildFile; fileRef = 2AE125FB2241151B00379C6F /* DWMasternodeTableViewCell.xib */; }; 2AF26F3B230C0E4C007F9228 /* DWBaseSeedViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 2AF26F3A230C0E4C007F9228 /* DWBaseSeedViewController.m */; }; 2AF26F3E230C1F79007F9228 /* DWAmountViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 2AF26F3D230C1F79007F9228 /* DWAmountViewController.m */; }; 2AF26F41230C1F9D007F9228 /* DWAmountView.m in Sources */ = {isa = PBXBuildFile; fileRef = 2AF26F40230C1F9D007F9228 /* DWAmountView.m */; }; @@ -385,14 +384,11 @@ FB1BF8C822C7FBD0003413C6 /* DWAmountInputValidator.m in Sources */ = {isa = PBXBuildFile; fileRef = 2A2120E92214566A009906DC /* DWAmountInputValidator.m */; }; FB1BF8C922C7FBD4003413C6 /* DWAmountObject.m in Sources */ = {isa = PBXBuildFile; fileRef = 2A2120EF22147A40009906DC /* DWAmountObject.m */; }; FB1C3DC5236AD433004C2B05 /* DWMasternodeFeaturesMenuViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = FB1C3DC4236AD433004C2B05 /* DWMasternodeFeaturesMenuViewController.m */; }; - FB1C3DC6236C89CC004C2B05 /* DWKeyValueTableViewCell.m in Sources */ = {isa = PBXBuildFile; fileRef = FB31C265223BD6FB00BD0868 /* DWKeyValueTableViewCell.m */; }; FB248B5D1F73803100405AE0 /* UserNotifications.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FB248B5C1F73803100405AE0 /* UserNotifications.framework */; }; FB248B631F79BB7C00405AE0 /* SafariServices.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FB248B621F79BB7C00405AE0 /* SafariServices.framework */; }; FB2E5537218BA161003A1B7C /* DWVersionManager.m in Sources */ = {isa = PBXBuildFile; fileRef = FB2E5536218BA161003A1B7C /* DWVersionManager.m */; }; FB31C255223BD3F600BD0868 /* DWSignPayloadViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = FB31C246223BD3F200BD0868 /* DWSignPayloadViewController.m */; }; FB31C256223BD3F600BD0868 /* DWRegisterMasternodeViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = FB31C247223BD3F200BD0868 /* DWRegisterMasternodeViewController.m */; }; - FB31C262223BD62D00BD0868 /* DWProviderUpdateServiceTableViewCell.m in Sources */ = {isa = PBXBuildFile; fileRef = FB31C25F223BD62C00BD0868 /* DWProviderUpdateServiceTableViewCell.m */; }; - FB31C263223BD62D00BD0868 /* DWProviderUpdateRegistrarTableViewCell.m in Sources */ = {isa = PBXBuildFile; fileRef = FB31C260223BD62C00BD0868 /* DWProviderUpdateRegistrarTableViewCell.m */; }; FB3E9F60236125F600C09C5C /* (null) in Frameworks */ = {isa = PBXBuildFile; }; FB3FA3D61F2364140071FCC5 /* UIImage+Utils.m in Sources */ = {isa = PBXBuildFile; fileRef = BAA4843B1B3EFFAF0075C749 /* UIImage+Utils.m */; }; FB3FF0B22226416A0059A9A5 /* Masternode.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = FB3FF0B12226416A0059A9A5 /* Masternode.storyboard */; }; @@ -400,10 +396,13 @@ FB3FF0B822264DC60059A9A5 /* DWDerivationPathKeysViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = FB3FF0B722264DC60059A9A5 /* DWDerivationPathKeysViewController.m */; }; FB43BC78211CD15500BC9879 /* DWBlueActionButton.m in Sources */ = {isa = PBXBuildFile; fileRef = FB43BC77211CD15500BC9879 /* DWBlueActionButton.m */; }; FB4FA9C322505DD70060B017 /* AudioToolbox.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FB4FA9C222505DD60060B017 /* AudioToolbox.framework */; }; + FB519F092441BBB200AF50E8 /* DWProviderUpdateRegistrarTableViewCell.m in Sources */ = {isa = PBXBuildFile; fileRef = FB519F062441BBB100AF50E8 /* DWProviderUpdateRegistrarTableViewCell.m */; }; + FB519F0A2441BBB200AF50E8 /* DWProviderUpdateServiceTableViewCell.m in Sources */ = {isa = PBXBuildFile; fileRef = FB519F082441BBB100AF50E8 /* DWProviderUpdateServiceTableViewCell.m */; }; + FB519F0D2441BD3700AF50E8 /* BRCopyLabel.m in Sources */ = {isa = PBXBuildFile; fileRef = FB519F0C2441BD3700AF50E8 /* BRCopyLabel.m */; }; + FB519F0F2441C09E00AF50E8 /* DWMasternodeTableViewCell.xib in Resources */ = {isa = PBXBuildFile; fileRef = FB519F0E2441C09E00AF50E8 /* DWMasternodeTableViewCell.xib */; }; FB66977F212C0B940034BE4F /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = FB66977E212C0B940034BE4F /* LaunchScreen.storyboard */; }; FB83F3DF236E4C9D0039ED1B /* DWPublicKeyGenerationTableViewCell.m in Sources */ = {isa = PBXBuildFile; fileRef = FB83F3DE236E4C9D0039ED1B /* DWPublicKeyGenerationTableViewCell.m */; }; FB8ACEB622E0502200EE5035 /* DWUpholdMainnetConstants.m in Sources */ = {isa = PBXBuildFile; fileRef = FB8ACEB522E0502100EE5035 /* DWUpholdMainnetConstants.m */; }; - FB9CC2711F8E27B80079309F /* DWGenerateViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = FB9CC2701F8E27B80079309F /* DWGenerateViewController.m */; }; FBCFEDEE236E50CD0086DE07 /* DWMasternodeRegistrationModel.m in Sources */ = {isa = PBXBuildFile; fileRef = FBCFEDED236E50CD0086DE07 /* DWMasternodeRegistrationModel.m */; }; FBCFEDF3236F8CF70086DE07 /* DWKeyValueFormCellModel.m in Sources */ = {isa = PBXBuildFile; fileRef = FBCFEDF2236F8CF70086DE07 /* DWKeyValueFormCellModel.m */; }; FBCFEDF6236F8D3D0086DE07 /* DWKeyValueFormTableViewCell.m in Sources */ = {isa = PBXBuildFile; fileRef = FBCFEDF5236F8D3D0086DE07 /* DWKeyValueFormTableViewCell.m */; }; @@ -1125,7 +1124,6 @@ 2ACD53EA234BCFAA00650AD3 /* DWWeakContainer.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = DWWeakContainer.m; sourceTree = ""; }; 2ACD53EC234C9D8E00650AD3 /* UIView+DWRecursiveSubview.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "UIView+DWRecursiveSubview.h"; sourceTree = ""; }; 2ACD53ED234C9D8E00650AD3 /* UIView+DWRecursiveSubview.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = "UIView+DWRecursiveSubview.m"; sourceTree = ""; }; - 2AD1CE5E22D8E9D900C99324 /* DWSeedPhraseView.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = DWSeedPhraseView.h; sourceTree = ""; }; 2AD1CE5F22D8E9D900C99324 /* DWSeedPhraseView.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = DWSeedPhraseView.m; sourceTree = ""; }; 2AD1CE6222D9127600C99324 /* DWSeedWordModel.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = DWSeedWordModel.h; sourceTree = ""; }; 2AD1CE6322D9127600C99324 /* DWSeedWordModel.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = DWSeedWordModel.m; sourceTree = ""; }; @@ -1169,7 +1167,6 @@ 2ADF83FE23633116008459A7 /* SharedAssets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = SharedAssets.xcassets; sourceTree = ""; }; 2AE125F6224113C600379C6F /* DWBaseMasternodeViewController.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = DWBaseMasternodeViewController.h; sourceTree = ""; }; 2AE125F7224113C600379C6F /* DWBaseMasternodeViewController.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = DWBaseMasternodeViewController.m; sourceTree = ""; }; - 2AE125FB2241151B00379C6F /* DWMasternodeTableViewCell.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = DWMasternodeTableViewCell.xib; sourceTree = ""; }; 2AE125FE2241342900379C6F /* DWResultsMasternodeViewController.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = DWResultsMasternodeViewController.h; sourceTree = ""; }; 2AE125FF2241342900379C6F /* DWResultsMasternodeViewController.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = DWResultsMasternodeViewController.m; sourceTree = ""; }; 2AF26F39230C0E4C007F9228 /* DWBaseSeedViewController.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = DWBaseSeedViewController.h; sourceTree = ""; }; @@ -1313,21 +1310,8 @@ FB31C250223BD3F500BD0868 /* DWUpdateMasternodeRegistrarViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = DWUpdateMasternodeRegistrarViewController.m; sourceTree = ""; }; FB31C251223BD3F600BD0868 /* DWMasternodeDetailViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DWMasternodeDetailViewController.h; sourceTree = ""; }; FB31C252223BD3F600BD0868 /* DWMasternodeViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DWMasternodeViewController.h; sourceTree = ""; }; - FB31C25E223BD62C00BD0868 /* DWProviderUpdateRegistrarTableViewCell.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DWProviderUpdateRegistrarTableViewCell.h; sourceTree = ""; }; - FB31C25F223BD62C00BD0868 /* DWProviderUpdateServiceTableViewCell.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = DWProviderUpdateServiceTableViewCell.m; sourceTree = ""; }; - FB31C260223BD62C00BD0868 /* DWProviderUpdateRegistrarTableViewCell.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = DWProviderUpdateRegistrarTableViewCell.m; sourceTree = ""; }; - FB31C261223BD62C00BD0868 /* DWProviderUpdateServiceTableViewCell.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DWProviderUpdateServiceTableViewCell.h; sourceTree = ""; }; - FB31C264223BD6FB00BD0868 /* DWKeyValueTableViewCell.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DWKeyValueTableViewCell.h; sourceTree = ""; }; - FB31C265223BD6FB00BD0868 /* DWKeyValueTableViewCell.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = DWKeyValueTableViewCell.m; sourceTree = ""; }; - FB31C267223BD9F400BD0868 /* DWMasternodeTableViewCell.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = DWMasternodeTableViewCell.m; sourceTree = ""; }; - FB31C268223BD9F400BD0868 /* DWMasternodeTableViewCell.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DWMasternodeTableViewCell.h; sourceTree = ""; }; FB3E9F612365C8DE00C09C5C /* DWSeedPhraseView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DWSeedPhraseView.h; sourceTree = ""; }; FB3FF0B12226416A0059A9A5 /* Masternode.storyboard */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; path = Masternode.storyboard; sourceTree = ""; }; - FB3FF0B3222642FB0059A9A5 /* DWKeysOverviewViewController.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = DWKeysOverviewViewController.h; path = ../DWKeysOverviewViewController.h; sourceTree = ""; }; - FB3FF0B4222642FB0059A9A5 /* DWKeysOverviewViewController.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; name = DWKeysOverviewViewController.m; path = ../DWKeysOverviewViewController.m; sourceTree = ""; }; - FB3FF0B622264DC60059A9A5 /* DWDerivationPathKeysViewController.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = DWDerivationPathKeysViewController.h; path = Models/DWDerivationPathKeysViewController.h; sourceTree = ""; }; - FB3FF0B722264DC60059A9A5 /* DWDerivationPathKeysViewController.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; name = DWDerivationPathKeysViewController.m; path = Models/DWDerivationPathKeysViewController.m; sourceTree = ""; }; - FB3E9F5F236125F600C09C5C /* BackgroundTasks.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = BackgroundTasks.framework; path = System/Library/Frameworks/BackgroundTasks.framework; sourceTree = SDKROOT; }; FB3FF0B3222642FB0059A9A5 /* DWKeysOverviewViewController.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = DWKeysOverviewViewController.h; sourceTree = ""; }; FB3FF0B4222642FB0059A9A5 /* DWKeysOverviewViewController.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = DWKeysOverviewViewController.m; sourceTree = ""; }; FB3FF0B622264DC60059A9A5 /* DWDerivationPathKeysViewController.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = DWDerivationPathKeysViewController.h; sourceTree = ""; }; @@ -1338,6 +1322,13 @@ FB43BC77211CD15500BC9879 /* DWBlueActionButton.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = DWBlueActionButton.m; sourceTree = ""; }; FB43BC8D21217BB900BC9879 /* zh-Hant-TW */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.strings; name = "zh-Hant-TW"; path = "zh-Hant-TW.lproj/Localizable.strings"; sourceTree = ""; }; FB4FA9C222505DD60060B017 /* AudioToolbox.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AudioToolbox.framework; path = System/Library/Frameworks/AudioToolbox.framework; sourceTree = SDKROOT; }; + FB519F052441BBB100AF50E8 /* DWProviderUpdateRegistrarTableViewCell.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DWProviderUpdateRegistrarTableViewCell.h; sourceTree = ""; }; + FB519F062441BBB100AF50E8 /* DWProviderUpdateRegistrarTableViewCell.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = DWProviderUpdateRegistrarTableViewCell.m; sourceTree = ""; }; + FB519F072441BBB100AF50E8 /* DWProviderUpdateServiceTableViewCell.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DWProviderUpdateServiceTableViewCell.h; sourceTree = ""; }; + FB519F082441BBB100AF50E8 /* DWProviderUpdateServiceTableViewCell.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = DWProviderUpdateServiceTableViewCell.m; sourceTree = ""; }; + FB519F0B2441BD3700AF50E8 /* BRCopyLabel.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = BRCopyLabel.h; sourceTree = ""; }; + FB519F0C2441BD3700AF50E8 /* BRCopyLabel.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = BRCopyLabel.m; sourceTree = ""; }; + FB519F0E2441C09E00AF50E8 /* DWMasternodeTableViewCell.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = DWMasternodeTableViewCell.xib; sourceTree = ""; }; FB586CB4213D5EF600836ACC /* pt */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = pt; path = pt.lproj/Interface.strings; sourceTree = ""; }; FB586CB6213D5F8200836ACC /* vi */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = vi; path = vi.lproj/Interface.strings; sourceTree = ""; }; FB586CBA213D607500836ACC /* zh-Hans */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "zh-Hans"; path = "zh-Hans.lproj/Interface.strings"; sourceTree = ""; }; @@ -1360,8 +1351,6 @@ FB83F3DE236E4C9D0039ED1B /* DWPublicKeyGenerationTableViewCell.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = DWPublicKeyGenerationTableViewCell.m; sourceTree = ""; }; FB8ACEB422E0502100EE5035 /* DWUpholdMainnetConstants.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DWUpholdMainnetConstants.h; sourceTree = ""; }; FB8ACEB522E0502100EE5035 /* DWUpholdMainnetConstants.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = DWUpholdMainnetConstants.m; sourceTree = ""; }; - FB9CC26F1F8E27B80079309F /* DWGenerateViewController.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = DWGenerateViewController.h; sourceTree = ""; }; - FB9CC2701F8E27B80079309F /* DWGenerateViewController.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = DWGenerateViewController.m; sourceTree = ""; }; FBCFEDEC236E50CD0086DE07 /* DWMasternodeRegistrationModel.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = DWMasternodeRegistrationModel.h; sourceTree = ""; }; FBCFEDED236E50CD0086DE07 /* DWMasternodeRegistrationModel.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = DWMasternodeRegistrationModel.m; sourceTree = ""; }; FBCFEDF1236F8CF70086DE07 /* DWKeyValueFormCellModel.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = DWKeyValueFormCellModel.h; sourceTree = ""; }; @@ -1410,7 +1399,7 @@ buildActionMask = 2147483647; files = ( 2A5279BC23D994BC00F856D3 /* CoreNFC.framework in Frameworks */, - FB3E9F60236125F600C09C5C /* BackgroundTasks.framework in Frameworks */, + FB3E9F60236125F600C09C5C /* (null) in Frameworks */, 2AD1CE9922DE63FB00C99324 /* GameplayKit.framework in Frameworks */, FB4FA9C322505DD70060B017 /* AudioToolbox.framework in Frameworks */, 2AA08534237D6CF500797F95 /* CloudKit.framework in Frameworks */, @@ -1807,6 +1796,8 @@ 2AD1CE6A22DA337700C99324 /* BaseController */, 2A44312B22CD0304009BAF7F /* SharedViews */, 2AD1CE6922D9E75400C99324 /* DevicesCompatibility.h */, + FB519F0B2441BD3700AF50E8 /* BRCopyLabel.h */, + FB519F0C2441BD3700AF50E8 /* BRCopyLabel.m */, 2A44311F22CCA2A0009BAF7F /* UIColor+DWStyle.h */, 2A44312022CCA2A0009BAF7F /* UIColor+DWStyle.m */, 2A44311522CBF0B2009BAF7F /* UIFont+DWFont.h */, @@ -3153,6 +3144,7 @@ 75D5F3C0191EC270004AB296 /* Frameworks */, 75D5F3BF191EC270004AB296 /* Products */, EBFC2EA47915CD4F5BA81564 /* Pods */, + FB519F032441B7B600AF50E8 /* Recovered References */, ); sourceTree = ""; }; @@ -3365,6 +3357,7 @@ FB1C3DC1236AD2B1004C2B05 /* Masternode Control */ = { isa = PBXGroup; children = ( + FB519F042441BB4E00AF50E8 /* Cells */, FB31C23A223BCFAA00BD0868 /* DWMasternodeRootViewController.h */, FB31C23B223BCFAA00BD0868 /* DWMasternodeRootViewController.m */, FB31C251223BD3F600BD0868 /* DWMasternodeDetailViewController.h */, @@ -3426,62 +3419,22 @@ path = "Masternode Keys"; sourceTree = ""; }; - FB43BC6F211B8A0E00BC9879 /* Cells */ = { + FB519F032441B7B600AF50E8 /* Recovered References */ = { isa = PBXGroup; children = ( - FB43BC80211D96C500BC9879 /* DWTransactionTableViewCell.h */, - FB43BC7F211D96C500BC9879 /* DWTransactionTableViewCell.m */, - FB43BC70211B8A5E00BC9879 /* DWActionTableViewCell.h */, - FB43BC71211B8A5E00BC9879 /* DWActionTableViewCell.m */, - FB31C25E223BD62C00BD0868 /* DWProviderUpdateRegistrarTableViewCell.h */, - FB31C260223BD62C00BD0868 /* DWProviderUpdateRegistrarTableViewCell.m */, - FB31C261223BD62C00BD0868 /* DWProviderUpdateServiceTableViewCell.h */, - FB31C25F223BD62C00BD0868 /* DWProviderUpdateServiceTableViewCell.m */, - FB31C264223BD6FB00BD0868 /* DWKeyValueTableViewCell.h */, - FB31C265223BD6FB00BD0868 /* DWKeyValueTableViewCell.m */, - FB31C268223BD9F400BD0868 /* DWMasternodeTableViewCell.h */, - FB31C267223BD9F400BD0868 /* DWMasternodeTableViewCell.m */, - 2AE125FB2241151B00379C6F /* DWMasternodeTableViewCell.xib */, ); - name = Cells; + name = "Recovered References"; sourceTree = ""; }; - FB4AB41621CA75D0001CC324 /* Utils */ = { + FB519F042441BB4E00AF50E8 /* Cells */ = { isa = PBXGroup; children = ( - FB4AB41721CA760E001CC324 /* DWStoryboardSegueWithCompletion.h */, - FB4AB41821CA760E001CC324 /* DWStoryboardSegueWithCompletion.m */, + FB519F052441BBB100AF50E8 /* DWProviderUpdateRegistrarTableViewCell.h */, + FB519F062441BBB100AF50E8 /* DWProviderUpdateRegistrarTableViewCell.m */, + FB519F072441BBB100AF50E8 /* DWProviderUpdateServiceTableViewCell.h */, + FB519F082441BBB100AF50E8 /* DWProviderUpdateServiceTableViewCell.m */, ); - name = Utils; - sourceTree = ""; - }; - FB6B7BC42180980C00147CEB /* Components */ = { - isa = PBXGroup; - children = ( - 75AA5F53194143D5003F23BD /* BRBouncyBurgerButton.h */, - 75AA5F54194143D5003F23BD /* BRBouncyBurgerButton.m */, - 755FC9EF1BF1DF1B00164ABB /* BREventConfirmView.xib */, - 220460531BA0BEEE00D07B61 /* BREventConfirmView.h */, - 220460541BA0BEEE00D07B61 /* BREventConfirmView.m */, - ); - name = Components; - sourceTree = ""; - }; - FB6B7BC52180985000147CEB /* View Extensions */ = { - isa = PBXGroup; - children = ( - 7548CF3519556FD700EF827F /* BRCopyLabel.h */, - 7548CF3619556FD700EF827F /* BRCopyLabel.m */, - 7525B617192453840041C0F2 /* BRNavigationBar.h */, - 7525B618192453840041C0F2 /* BRNavigationBar.m */, - FB43BC73211CC68E00BC9879 /* DWNumberButton.h */, - FB43BC74211CC68E00BC9879 /* DWNumberButton.m */, - FB43BC79211CE0F800BC9879 /* DWWhiteActionButton.h */, - FB43BC7A211CE0F800BC9879 /* DWWhiteActionButton.m */, - FB43BC7C211D6AD000BC9879 /* DWShareActionButton.h */, - FB43BC7D211D6AD000BC9879 /* DWShareActionButton.m */, - ); - name = "View Extensions"; + path = Cells; sourceTree = ""; }; FBCFEDEA236E50410086DE07 /* Masternode Registration */ = { @@ -3548,6 +3501,7 @@ FBF4DA0A237BA597005493A6 /* Cells */ = { isa = PBXGroup; children = ( + FB519F0E2441C09E00AF50E8 /* DWMasternodeTableViewCell.xib */, FBF4DA0B237BA5BD005493A6 /* DWMasternodeTableViewCell.h */, FBF4DA0C237BA5BD005493A6 /* DWMasternodeTableViewCell.m */, ); @@ -3840,6 +3794,7 @@ files = ( 2A1AF6DE23C7681B00442AF5 /* DWShortcutCollectionViewCell~ipad.xib in Resources */, 2AB231D42196E27300A6E7E6 /* StartStoryboard.storyboard in Resources */, + FB519F0F2441C09E00AF50E8 /* DWMasternodeTableViewCell.xib in Resources */, 2A1AF6DF23C7681B00442AF5 /* DWShortcutCollectionViewCell~iphone.xib in Resources */, 2A4431D622D52F67009BAF7F /* DWInfoTextCell.xib in Resources */, 2A44314922CF82EF009BAF7F /* BiometricAuth.storyboard in Resources */, @@ -3857,7 +3812,6 @@ 2A4430F222CBD57A009BAF7F /* AppAssets.xcassets in Resources */, 2A8B9E6222FF712000FF8653 /* DWPayTableViewCell.xib in Resources */, FBFC2ED521137A7A00D20C57 /* Montserrat-Medium.otf in Resources */, - 2AE125FD2241151B00379C6F /* DWMasternodeTableViewCell.xib in Resources */, FBFC2EC521137A7A00D20C57 /* Montserrat-Regular.otf in Resources */, 75E83CF61B5F997A0038FB70 /* coinflip.aiff in Resources */, 2ADF83FF23633116008459A7 /* SharedAssets.xcassets in Resources */, @@ -4307,6 +4261,7 @@ 2AD1CE8A22DC9C6F00C99324 /* DWVerifySeedPhraseContentView.m in Sources */, 2A4431DB22D675CD009BAF7F /* DWPreviewSeedPhraseViewController.m in Sources */, 2AFCB9BE23BE3C0800FF59A6 /* DWConfirmSendPaymentViewController.m in Sources */, + FB519F0A2441BBB200AF50E8 /* DWProviderUpdateServiceTableViewCell.m in Sources */, 2AC92C8A1FEB0B8B008CAEE0 /* DWQRScanModel.m in Sources */, 2A3DC87123972331004B3DBA /* DWHomeViewController+DWImportPrivateKeyDelegateImpl.m in Sources */, 2A7A7C20234B79B700451078 /* DWLocalCurrencyTableViewCell.m in Sources */, @@ -4337,18 +4292,16 @@ 2A9FFE932230FF4700956D5F /* DWUpholdOTPViewController.m in Sources */, FBF4DA06237B9DFA005493A6 /* DWMasternodeListModel.m in Sources */, 2A8B9E7D23034AC100FF8653 /* DWAppGroupOptions.m in Sources */, + FB519F092441BBB200AF50E8 /* DWProviderUpdateRegistrarTableViewCell.m in Sources */, 2A913EA423A799F3006A2A59 /* DWTransactionListDataItemObject.m in Sources */, 2A9FFE052230FF2B00956D5F /* DWUpholdAPIProvider.m in Sources */, 2AFCB9B723BDFF3600FF59A6 /* DWUpholdTransferViewController.m in Sources */, 2A0C69EF2316B7F5001B8C90 /* DWConfirmPaymentContentView.m in Sources */, FBE7439A238167200084A95B /* DWLocalMasternodeControlViewController.m in Sources */, - 2A9FFF1B2233E56E00956D5F /* DWUpholdSelectCardViewController.m in Sources */, FBCFEDF6236F8D3D0086DE07 /* DWKeyValueFormTableViewCell.m in Sources */, FB031AE32379003D00EF564B /* DWSignPayloadModel.m in Sources */, - 220460551BA0BEEE00D07B61 /* BREventConfirmView.m in Sources */, 2A1B7DBC2326187D00BA8C6A /* DWTxDetailFullscreenViewController.m in Sources */, 2A9FFE032230FF2B00956D5F /* DWUpholdTransactionObject.m in Sources */, - 2A9FFF1A2233E56E00956D5F /* DWUpholdCardTableViewCell.m in Sources */, FB1C3DC5236AD433004C2B05 /* DWMasternodeFeaturesMenuViewController.m in Sources */, 2AF26F3B230C0E4C007F9228 /* DWBaseSeedViewController.m in Sources */, 2A8B9E4D22FEBF7A00FF8653 /* DWProgressAnimator.mm in Sources */, @@ -4378,10 +4331,8 @@ 2A9FFE7E2230FF4600956D5F /* DWSelectorFormCellModel.m in Sources */, FB2E5537218BA161003A1B7C /* DWVersionManager.m in Sources */, FB31C256223BD3F600BD0868 /* DWRegisterMasternodeViewController.m in Sources */, - 2A9FFE8D2230FF4700956D5F /* DWSettingsViewController.m in Sources */, FB031ADB2378832100EF564B /* DWActionFormCellModel.m in Sources */, FBF4DA13237BCF0C005493A6 /* DWLocalMasternodeListViewController.m in Sources */, - 2A9FFF1C2233E56E00956D5F /* DWUpholdCardCellModel.m in Sources */, 2A0C69C623142AA4001B8C90 /* DWModalPresentationController.m in Sources */, 2ACCD86823195A3600A96B62 /* DWAmountPreviewView.m in Sources */, 2A7A7BC92347E0D700451078 /* DWBaseFormTableViewCell.m in Sources */, @@ -4429,8 +4380,6 @@ 2A307CBC22E8925100A18347 /* DWHomeView.m in Sources */, 2AD1CE8022DC92BF00C99324 /* NSString+DWTextSize.m in Sources */, 2A4431C322D4CAEA009BAF7F /* DWBackupInfoViewController.m in Sources */, - 2A9FFE9A2230FF4700956D5F /* DWUpholdRequestTransferModel.m in Sources */, - FB31C262223BD62D00BD0868 /* DWProviderUpdateServiceTableViewCell.m in Sources */, 2A7A7BB22347927700451078 /* DWMainMenuViewController.m in Sources */, 2ACCD8F0231ECDE000A96B62 /* DWPinField.m in Sources */, FB83F3DF236E4C9D0039ED1B /* DWPublicKeyGenerationTableViewCell.m in Sources */, @@ -4451,8 +4400,6 @@ 2A6300492328EA8900827825 /* DWLockActionButton.m in Sources */, 2AD1CE7722DB51B500C99324 /* DWCheckbox.m in Sources */, 2ACCD8592319399100A96B62 /* DWRequestAmountViewController.m in Sources */, - 751B2B5C1B68911700EA87FB /* DWTxHistoryViewController.m in Sources */, - FB31C263223BD62D00BD0868 /* DWProviderUpdateRegistrarTableViewCell.m in Sources */, 2A74EFF52305333000C475EB /* DWSeedUIConstants.m in Sources */, 2A11F59421947CBE00E7B563 /* BRTxOutputEntity.m in Sources */, 2A0C69B32312E8A0001B8C90 /* DWWindow.m in Sources */, @@ -4463,6 +4410,7 @@ 2A44311E22CC9B5A009BAF7F /* DWNavigationController.m in Sources */, 2A8B9E6122FF712000FF8653 /* DWPayTableViewCell.m in Sources */, 2AC92C871FEB0AE8008CAEE0 /* DWQRScanView.m in Sources */, + FB519F0D2441BD3700AF50E8 /* BRCopyLabel.m in Sources */, 2ACCD8E2231E507900A96B62 /* DWPinInputStepView.m in Sources */, 2A74EFED2305318000C475EB /* DWRecoverViewController.m in Sources */, 2A913EAE23A7AC86006A2A59 /* DWBaseTransactionListDataProvider.m in Sources */, @@ -4477,7 +4425,6 @@ 2A6B8E542387056200A2E5FA /* DWBalanceDisplayOptions.m in Sources */, 2A9FFE072230FF2B00956D5F /* DWUpholdClient.m in Sources */, 2A2CD70F22F97AC6008C7BC9 /* DWShortcutCollectionViewCell.m in Sources */, - FB1C3DC6236C89CC004C2B05 /* DWKeyValueTableViewCell.m in Sources */, 2A4E531822EA381F00E5168A /* DWSyncView.m in Sources */, 2A6300452328D07500827825 /* DWLockPinInputView.m in Sources */, 2A392565234CD21300316EA6 /* DWTabBarButton.m in Sources */, @@ -4492,7 +4439,6 @@ 2A7A7BC3234797FC00451078 /* DWMainMenuModel.m in Sources */, FB8ACEB622E0502200EE5035 /* DWUpholdMainnetConstants.m in Sources */, FBCFEDEE236E50CD0086DE07 /* DWMasternodeRegistrationModel.m in Sources */, - 759FBB36193290F600AB4465 /* DWRootViewController.m in Sources */, 2A1B7D81232151D400BA8C6A /* DWTxDetailViewController.m in Sources */, 2A9FFE822230FF4700956D5F /* DWSwitcherFormCellModel.m in Sources */, 2A74EFF823053ECE00C475EB /* DWIntrinsicTextView.m in Sources */, diff --git a/DashWallet/DWKeyValueTableViewCell.h b/DashWallet/DWKeyValueTableViewCell.h deleted file mode 100644 index 90a9d1fe4..000000000 --- a/DashWallet/DWKeyValueTableViewCell.h +++ /dev/null @@ -1,14 +0,0 @@ -// -// DSAddDevnetNameTableViewCell.h -// DashWallet -// -// Created by Sam Westrich on 6/19/18. -// Copyright © 2018 Andrew Podkovyrin. All rights reserved. -// - -#import - -@interface DWKeyValueTableViewCell : UITableViewCell -@property (strong, nonatomic) IBOutlet UITextField *valueTextField; - -@end diff --git a/DashWallet/DWKeyValueTableViewCell.m b/DashWallet/DWKeyValueTableViewCell.m deleted file mode 100644 index 0c3fb63aa..000000000 --- a/DashWallet/DWKeyValueTableViewCell.m +++ /dev/null @@ -1,24 +0,0 @@ -// -// DSAddDevnetNameTableViewCell.m -// DashWallet -// -// Created by Sam Westrich on 6/19/18. -// Copyright © 2018 Andrew Podkovyrin. All rights reserved. -// - -#import "DWKeyValueTableViewCell.h" - -@implementation DWKeyValueTableViewCell - -- (void)awakeFromNib { - [super awakeFromNib]; - // Initialization code -} - -- (void)setSelected:(BOOL)selected animated:(BOOL)animated { - [super setSelected:selected animated:animated]; - - // Configure the view for the selected state -} - -@end diff --git a/DashWallet/DWMasternodeTableViewCell.h b/DashWallet/DWMasternodeTableViewCell.h deleted file mode 100644 index 7b6af2dd6..000000000 --- a/DashWallet/DWMasternodeTableViewCell.h +++ /dev/null @@ -1,16 +0,0 @@ -// -// DWMasternodeTableViewCell.h -// DashWallet -// -// Created by Sam Westrich on 6/10/18. -// Copyright © 2018 Dash Core Group. All rights reserved. -// - -#import - -@interface DWMasternodeTableViewCell : UITableViewCell -@property (strong, nonatomic) IBOutlet UILabel *masternodeLocationLabel; -@property (strong, nonatomic) IBOutlet UILabel *protocolLabel; -@property (strong, nonatomic) IBOutlet UILabel *outputLabel; - -@end diff --git a/DashWallet/DWMasternodeTableViewCell.m b/DashWallet/DWMasternodeTableViewCell.m deleted file mode 100644 index 0c08d3d3f..000000000 --- a/DashWallet/DWMasternodeTableViewCell.m +++ /dev/null @@ -1,24 +0,0 @@ -// -// DWMasternodeTableViewCell.m -// DashWallet -// -// Created by Sam Westrich on 6/10/18. -// Copyright © 2018 Dash Core Group. All rights reserved. -// - -#import "DWMasternodeTableViewCell.h" - -@implementation DWMasternodeTableViewCell - -- (void)awakeFromNib { - [super awakeFromNib]; - // Initialization code -} - -- (void)setSelected:(BOOL)selected animated:(BOOL)animated { - [super setSelected:selected animated:animated]; - - // Configure the view for the selected state -} - -@end diff --git a/DashWallet/DWMasternodeTableViewCell.xib b/DashWallet/DWMasternodeTableViewCell.xib deleted file mode 100644 index 8c6a119c7..000000000 --- a/DashWallet/DWMasternodeTableViewCell.xib +++ /dev/null @@ -1,57 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/DashWallet/DWProviderUpdateRegistrarTableViewCell.h b/DashWallet/DWProviderUpdateRegistrarTableViewCell.h deleted file mode 100644 index 008b52920..000000000 --- a/DashWallet/DWProviderUpdateRegistrarTableViewCell.h +++ /dev/null @@ -1,22 +0,0 @@ -// -// DWProviderUpdateRegistrarTableViewCell.h -// DashWallet -// -// Created by Sam Westrich on 3/3/19. -// Copyright © 2019 Dash Core Group. All rights reserved. -// - -#import -#import "BRCopyLabel.h" - -NS_ASSUME_NONNULL_BEGIN - -@interface DWProviderUpdateRegistrarTableViewCell : UITableViewCell - -@property (strong, nonatomic) IBOutlet BRCopyLabel *payToAddressLabel; -@property (strong, nonatomic) IBOutlet BRCopyLabel *operatorKeyLabel; -@property (strong, nonatomic) IBOutlet BRCopyLabel *blockHeightLabel; - -@end - -NS_ASSUME_NONNULL_END diff --git a/DashWallet/DWProviderUpdateRegistrarTableViewCell.m b/DashWallet/DWProviderUpdateRegistrarTableViewCell.m deleted file mode 100644 index 359a301b9..000000000 --- a/DashWallet/DWProviderUpdateRegistrarTableViewCell.m +++ /dev/null @@ -1,24 +0,0 @@ -// -// DWProviderUpdateRegistrarTableViewCell.m -// DashWallet -// -// Created by Sam Westrich on 3/3/19. -// Copyright © 2019 Dash Core Group. All rights reserved. -// - -#import "DWProviderUpdateRegistrarTableViewCell.h" - -@implementation DWProviderUpdateRegistrarTableViewCell - -- (void)awakeFromNib { - [super awakeFromNib]; - // Initialization code -} - -- (void)setSelected:(BOOL)selected animated:(BOOL)animated { - [super setSelected:selected animated:animated]; - - // Configure the view for the selected state -} - -@end diff --git a/DashWallet/DWProviderUpdateServiceTableViewCell.h b/DashWallet/DWProviderUpdateServiceTableViewCell.h deleted file mode 100644 index 62d59beb2..000000000 --- a/DashWallet/DWProviderUpdateServiceTableViewCell.h +++ /dev/null @@ -1,22 +0,0 @@ -// -// DWProviderUpdateServiceTableViewCell.h -// DashWallet -// -// Created by Sam Westrich on 3/3/19. -// Copyright © 2019 Dash Core Group. All rights reserved. -// - -#import -#import "BRCopyLabel.h" - -NS_ASSUME_NONNULL_BEGIN - -@interface DWProviderUpdateServiceTableViewCell : UITableViewCell - -@property (strong, nonatomic) IBOutlet BRCopyLabel *locationLabel; -@property (strong, nonatomic) IBOutlet BRCopyLabel *operatorRewardPayoutAddressLabel; -@property (strong, nonatomic) IBOutlet BRCopyLabel *blockHeightLabel; - -@end - -NS_ASSUME_NONNULL_END diff --git a/DashWallet/DWProviderUpdateServiceTableViewCell.m b/DashWallet/DWProviderUpdateServiceTableViewCell.m deleted file mode 100644 index 88fc0fd71..000000000 --- a/DashWallet/DWProviderUpdateServiceTableViewCell.m +++ /dev/null @@ -1,24 +0,0 @@ -// -// DWProviderUpdateServiceTableViewCell.m -// DashWallet -// -// Created by Sam Westrich on 3/3/19. -// Copyright © 2019 Dash Core Group. All rights reserved. -// - -#import "DWProviderUpdateServiceTableViewCell.h" - -@implementation DWProviderUpdateServiceTableViewCell - -- (void)awakeFromNib { - [super awakeFromNib]; - // Initialization code -} - -- (void)setSelected:(BOOL)selected animated:(BOOL)animated { - [super setSelected:selected animated:animated]; - - // Configure the view for the selected state -} - -@end diff --git a/DashWallet/Sources/UI/Menu/Forms/PublicKeyGeneration/DWPublicKeyGenerationTableViewCell.m b/DashWallet/Sources/UI/Menu/Forms/PublicKeyGeneration/DWPublicKeyGenerationTableViewCell.m index fbaef4d88..8882ae6c6 100644 --- a/DashWallet/Sources/UI/Menu/Forms/PublicKeyGeneration/DWPublicKeyGenerationTableViewCell.m +++ b/DashWallet/Sources/UI/Menu/Forms/PublicKeyGeneration/DWPublicKeyGenerationTableViewCell.m @@ -16,9 +16,9 @@ // #import "DWPublicKeyGenerationTableViewCell.h" - #import "DWSharedUIConstants.h" #import "DWUIKit.h" +#import NS_ASSUME_NONNULL_BEGIN diff --git a/DashWallet/Sources/UI/Menu/Tools/Masternode/Local Masternodes/Cells/DWLocalMasternodeTableViewCell.h b/DashWallet/Sources/UI/Menu/Tools/Masternode/Local Masternodes/Cells/DWLocalMasternodeTableViewCell.h index 030c41edc..27519650d 100644 --- a/DashWallet/Sources/UI/Menu/Tools/Masternode/Local Masternodes/Cells/DWLocalMasternodeTableViewCell.h +++ b/DashWallet/Sources/UI/Menu/Tools/Masternode/Local Masternodes/Cells/DWLocalMasternodeTableViewCell.h @@ -19,6 +19,8 @@ NS_ASSUME_NONNULL_BEGIN +@class DSLocalMasternode; + @interface DWLocalMasternodeTableViewCell : DWBaseFormTableViewCell - (void)configureWithModel:(DSLocalMasternode *)model diff --git a/DashWallet/Sources/UI/Menu/Tools/Masternode/Local Masternodes/Cells/DWLocalMasternodeTableViewCell.m b/DashWallet/Sources/UI/Menu/Tools/Masternode/Local Masternodes/Cells/DWLocalMasternodeTableViewCell.m index 2f8cb43a6..ce5f5eb53 100644 --- a/DashWallet/Sources/UI/Menu/Tools/Masternode/Local Masternodes/Cells/DWLocalMasternodeTableViewCell.m +++ b/DashWallet/Sources/UI/Menu/Tools/Masternode/Local Masternodes/Cells/DWLocalMasternodeTableViewCell.m @@ -20,6 +20,7 @@ #import "DWSharedUIConstants.h" #import "DWUIKit.h" #import "NSAttributedString+DWHighlightText.h" +#import NS_ASSUME_NONNULL_BEGIN diff --git a/DashWallet/Sources/UI/Menu/Tools/Masternode/Local Masternodes/DWLocalMasternodeControlViewController.h b/DashWallet/Sources/UI/Menu/Tools/Masternode/Local Masternodes/DWLocalMasternodeControlViewController.h index 076672801..591cdc313 100644 --- a/DashWallet/Sources/UI/Menu/Tools/Masternode/Local Masternodes/DWLocalMasternodeControlViewController.h +++ b/DashWallet/Sources/UI/Menu/Tools/Masternode/Local Masternodes/DWLocalMasternodeControlViewController.h @@ -20,6 +20,8 @@ NS_ASSUME_NONNULL_BEGIN +@class DSLocalMasternode; + @interface DWLocalMasternodeControlViewController : KVOUIViewController - (instancetype)initWithNibName:(nullable NSString *)nibNameOrNil bundle:(nullable NSBundle *)nibBundleOrNil NS_UNAVAILABLE; diff --git a/DashWallet/Sources/UI/Menu/Tools/Masternode/Local Masternodes/DWLocalMasternodeControlViewController.m b/DashWallet/Sources/UI/Menu/Tools/Masternode/Local Masternodes/DWLocalMasternodeControlViewController.m index d1f5ed359..070c80ca3 100644 --- a/DashWallet/Sources/UI/Menu/Tools/Masternode/Local Masternodes/DWLocalMasternodeControlViewController.m +++ b/DashWallet/Sources/UI/Menu/Tools/Masternode/Local Masternodes/DWLocalMasternodeControlViewController.m @@ -24,6 +24,7 @@ #import "DWSignPayloadModel.h" #import "DWSignPayloadViewController.h" #import "DWUIKit.h" +#import #define INPUT_CELL_HEIGHT 75 #define PUBLIC_KEY_CELL_HEIGHT 150 diff --git a/DashWallet/Sources/UI/Menu/Tools/Masternode/Local Masternodes/Models/DWLocalMasternodeListModel.h b/DashWallet/Sources/UI/Menu/Tools/Masternode/Local Masternodes/Models/DWLocalMasternodeListModel.h index 0d274bff0..b84bdf696 100644 --- a/DashWallet/Sources/UI/Menu/Tools/Masternode/Local Masternodes/Models/DWLocalMasternodeListModel.h +++ b/DashWallet/Sources/UI/Menu/Tools/Masternode/Local Masternodes/Models/DWLocalMasternodeListModel.h @@ -19,6 +19,8 @@ NS_ASSUME_NONNULL_BEGIN +@class DSLocalMasternode; + @interface DWLocalMasternodeListModel : NSObject @property (readonly, copy, nonatomic) NSArray *items; diff --git a/DashWallet/Sources/UI/Menu/Tools/Masternode/Local Masternodes/Models/DWLocalMasternodeListModel.m b/DashWallet/Sources/UI/Menu/Tools/Masternode/Local Masternodes/Models/DWLocalMasternodeListModel.m index 4a3315b88..ad761bdb7 100644 --- a/DashWallet/Sources/UI/Menu/Tools/Masternode/Local Masternodes/Models/DWLocalMasternodeListModel.m +++ b/DashWallet/Sources/UI/Menu/Tools/Masternode/Local Masternodes/Models/DWLocalMasternodeListModel.m @@ -16,6 +16,8 @@ // #import "DWLocalMasternodeListModel.h" +#import "DWEnvironment.h" +#import NS_ASSUME_NONNULL_BEGIN diff --git a/DashWallet/Sources/UI/Menu/Tools/Masternode/Masternode List/Cells/DWMasternodeTableViewCell.h b/DashWallet/Sources/UI/Menu/Tools/Masternode/Masternode List/Cells/DWMasternodeTableViewCell.h index 6c1ccc7e0..ab75399ee 100644 --- a/DashWallet/Sources/UI/Menu/Tools/Masternode/Masternode List/Cells/DWMasternodeTableViewCell.h +++ b/DashWallet/Sources/UI/Menu/Tools/Masternode/Masternode List/Cells/DWMasternodeTableViewCell.h @@ -17,6 +17,8 @@ #import "DWBaseFormTableViewCell.h" +@class DSSimplifiedMasternodeEntry; + NS_ASSUME_NONNULL_BEGIN @interface DWMasternodeTableViewCell : DWBaseFormTableViewCell diff --git a/DashWallet/Sources/UI/Menu/Tools/Masternode/Masternode List/Cells/DWMasternodeTableViewCell.m b/DashWallet/Sources/UI/Menu/Tools/Masternode/Masternode List/Cells/DWMasternodeTableViewCell.m index 20fc29f7e..62a01d5f5 100644 --- a/DashWallet/Sources/UI/Menu/Tools/Masternode/Masternode List/Cells/DWMasternodeTableViewCell.m +++ b/DashWallet/Sources/UI/Menu/Tools/Masternode/Masternode List/Cells/DWMasternodeTableViewCell.m @@ -16,10 +16,10 @@ // #import "DWMasternodeTableViewCell.h" - #import "DWSharedUIConstants.h" #import "DWUIKit.h" #import "NSAttributedString+DWHighlightText.h" +#import NS_ASSUME_NONNULL_BEGIN @@ -189,7 +189,7 @@ - (void)reloadAttributedData { UIFont *availabilityFont = [UIFont dw_fontForTextStyle:UIFontTextStyleCaption1]; UIColor *availabilityColor = [UIColor dw_quaternaryTextColor]; - self.availabilityLabel.attributedText = [NSAttributedString attributedText:self.model.validUppercaseString + self.availabilityLabel.attributedText = [NSAttributedString attributedText:self.model.validString font:availabilityFont textColor:availabilityColor highlightedText:highlightedText diff --git a/DashWallet/Sources/UI/Menu/Tools/Masternode/Masternode List/Models/DWMasternodeListModel.h b/DashWallet/Sources/UI/Menu/Tools/Masternode/Masternode List/Models/DWMasternodeListModel.h index 82a3c5c93..bbb65be19 100644 --- a/DashWallet/Sources/UI/Menu/Tools/Masternode/Masternode List/Models/DWMasternodeListModel.h +++ b/DashWallet/Sources/UI/Menu/Tools/Masternode/Masternode List/Models/DWMasternodeListModel.h @@ -19,6 +19,8 @@ NS_ASSUME_NONNULL_BEGIN +@class DSSimplifiedMasternodeEntry; + @interface DWMasternodeListModel : NSObject @property (readonly, copy, nonatomic) NSArray *items; diff --git a/DashWallet/Sources/UI/Menu/Tools/Masternode/Masternode List/Models/DWMasternodeListModel.m b/DashWallet/Sources/UI/Menu/Tools/Masternode/Masternode List/Models/DWMasternodeListModel.m index b2c8e8580..207c54834 100644 --- a/DashWallet/Sources/UI/Menu/Tools/Masternode/Masternode List/Models/DWMasternodeListModel.m +++ b/DashWallet/Sources/UI/Menu/Tools/Masternode/Masternode List/Models/DWMasternodeListModel.m @@ -16,6 +16,8 @@ // #import "DWMasternodeListModel.h" +#import "DWEnvironment.h" +#import NS_ASSUME_NONNULL_BEGIN diff --git a/DashWallet/Sources/UI/Menu/Tools/Masternode/Masternode Registration/Models/DWMasternodeRegistrationModel.h b/DashWallet/Sources/UI/Menu/Tools/Masternode/Masternode Registration/Models/DWMasternodeRegistrationModel.h index 226cf2bb3..455e47cda 100644 --- a/DashWallet/Sources/UI/Menu/Tools/Masternode/Masternode Registration/Models/DWMasternodeRegistrationModel.h +++ b/DashWallet/Sources/UI/Menu/Tools/Masternode/Masternode Registration/Models/DWMasternodeRegistrationModel.h @@ -15,6 +15,7 @@ // limitations under the License. // +#import #import NS_ASSUME_NONNULL_BEGIN diff --git a/DashWallet/Sources/UI/Views/BRCopyLabel.h b/DashWallet/Sources/UI/Views/BRCopyLabel.h new file mode 100644 index 000000000..1c56b5969 --- /dev/null +++ b/DashWallet/Sources/UI/Views/BRCopyLabel.h @@ -0,0 +1,36 @@ +// +// BRCopyLabel.h +// BreadWallet +// +// Created by Aaron Voisine on 6/21/14. +// Copyright (c) 2014 Aaron Voisine +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in +// all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +// THE SOFTWARE. + +#import + +// subclass of uilabel that allows users to tap the contents and get a "copy" action bubble +@interface BRCopyLabel : UILabel + +@property (nonatomic, strong) NSString *copyableText; // text that can be copied to clipboard, default is [UILabel text] +@property (nonatomic, strong) UIColor *selectedColor; // should generally have an alpha of less than 0.8 + +- (void)toggleCopyMenu; + +@end diff --git a/DashWallet/Sources/UI/Views/BRCopyLabel.m b/DashWallet/Sources/UI/Views/BRCopyLabel.m new file mode 100644 index 000000000..2035da28b --- /dev/null +++ b/DashWallet/Sources/UI/Views/BRCopyLabel.m @@ -0,0 +1,151 @@ +// +// BRCopyLabel.m +// BreadWallet +// +// Created by Aaron Voisine on 6/21/14. +// Copyright (c) 2014 Aaron Voisine +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in +// all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +// THE SOFTWARE. + +#import "BRCopyLabel.h" + +@interface BRCopyLabel () + +@property (nonatomic, strong) UIView *highlight; +@property (nonatomic, readonly) CGRect copyableFrame; +@property (nonatomic, strong) id menuHideObserver; + +@end + +@implementation BRCopyLabel + +- (BOOL)canBecomeFirstResponder { + return YES; +} + +- (BOOL)resignFirstResponder { + if ([super resignFirstResponder]) { + [UIView animateWithDuration:0.2 + animations:^{ + self.highlight.alpha = 0.0; + } + completion:^(BOOL finished) { + if (finished) + [self.highlight removeFromSuperview]; + }]; + + if (self.menuHideObserver) + [[NSNotificationCenter defaultCenter] removeObserver:self.menuHideObserver]; + self.menuHideObserver = nil; + return YES; + } + else + return NO; +} + +- (BOOL)canPerformAction:(SEL)action withSender:(id)sender { + return (action == @selector(copy:)); +} + +- (NSString *)copyableText { + return (_copyableText) ? _copyableText : self.text; +} + +- (CGRect)copyableFrame { + NSRange r = [self.text rangeOfString:self.copyableText]; + + if (r.location == NSNotFound) + return self.bounds; + + CGRect start = [[self.text substringToIndex:r.location] boundingRectWithSize:self.bounds.size + options:0 + attributes:@{NSFontAttributeName : self.font} + context:nil], + end = [[self.text substringFromIndex:r.location + r.length] boundingRectWithSize:self.bounds.size + options:0 + attributes:@{NSFontAttributeName : self.font} + context:nil]; + + if (start.size.width + end.size.width > self.bounds.size.width) + return self.bounds; + return CGRectMake(start.size.width, 0, self.bounds.size.width - (start.size.width + end.size.width), + self.bounds.size.height); +} + +- (void)setSelectedColor:(UIColor *)selectedColor { + _selectedColor = selectedColor; + self.highlight.backgroundColor = selectedColor; +} + +- (void)toggleCopyMenu { + if (self.copyableText.length == 0) + return; + + if ([self isFirstResponder]) { + [self resignFirstResponder]; + return; + } + + if (!self.highlight) { + self.highlight = + [[UIView alloc] initWithFrame:CGRectOffset(self.copyableFrame, self.frame.origin.x, self.frame.origin.y)]; + self.highlight.backgroundColor = + (self.selectedColor) ? self.selectedColor : [UIColor colorWithRed:0.0 green:0.5 blue:1.0 alpha:0.15]; + self.highlight.alpha = 0.0; + } + + [self.superview insertSubview:self.highlight belowSubview:self]; + [UIView animateWithDuration:0.2 + animations:^{ + self.highlight.alpha = 1.0; + }]; + [self becomeFirstResponder]; + [[UIMenuController sharedMenuController] setTargetRect:self.copyableFrame inView:self]; + [[UIMenuController sharedMenuController] setMenuVisible:YES animated:YES]; + + if (!self.menuHideObserver) { + self.menuHideObserver = + [[NSNotificationCenter defaultCenter] addObserverForName:UIMenuControllerWillHideMenuNotification + object:nil + queue:nil + usingBlock:^(NSNotification *note) { + [self resignFirstResponder]; + }]; + } +} + +- (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event { + [self toggleCopyMenu]; + [super touchesEnded:touches withEvent:event]; +} + +- (void)dealloc { + if (self.menuHideObserver) + [[NSNotificationCenter defaultCenter] removeObserver:self.menuHideObserver]; +} + +// MARK: - UIResponderStandardEditActions + +- (void)copy:(id)sender { + [UIPasteboard generalPasteboard].string = self.copyableText; + // NSLog(@"%@", [UIPasteboard generalPasteboard].string); + [self resignFirstResponder]; +} + +@end From 709b7e216687275a4dd4bab6c6d574f90e02c22b Mon Sep 17 00:00:00 2001 From: Quantum Explorer Date: Sat, 11 Apr 2020 16:41:05 +0700 Subject: [PATCH 28/34] forgot to add some items during merge --- .../DWProviderUpdateRegistrarTableViewCell.h | 22 +++++++ .../DWProviderUpdateRegistrarTableViewCell.m | 24 ++++++++ .../DWProviderUpdateServiceTableViewCell.h | 22 +++++++ .../DWProviderUpdateServiceTableViewCell.m | 24 ++++++++ .../Cells/DWMasternodeTableViewCell.xib | 57 +++++++++++++++++++ 5 files changed, 149 insertions(+) create mode 100644 DashWallet/Sources/UI/Menu/Tools/Masternode/Masternode Control/Cells/DWProviderUpdateRegistrarTableViewCell.h create mode 100644 DashWallet/Sources/UI/Menu/Tools/Masternode/Masternode Control/Cells/DWProviderUpdateRegistrarTableViewCell.m create mode 100644 DashWallet/Sources/UI/Menu/Tools/Masternode/Masternode Control/Cells/DWProviderUpdateServiceTableViewCell.h create mode 100644 DashWallet/Sources/UI/Menu/Tools/Masternode/Masternode Control/Cells/DWProviderUpdateServiceTableViewCell.m create mode 100644 DashWallet/Sources/UI/Menu/Tools/Masternode/Masternode List/Cells/DWMasternodeTableViewCell.xib diff --git a/DashWallet/Sources/UI/Menu/Tools/Masternode/Masternode Control/Cells/DWProviderUpdateRegistrarTableViewCell.h b/DashWallet/Sources/UI/Menu/Tools/Masternode/Masternode Control/Cells/DWProviderUpdateRegistrarTableViewCell.h new file mode 100644 index 000000000..ab9425b80 --- /dev/null +++ b/DashWallet/Sources/UI/Menu/Tools/Masternode/Masternode Control/Cells/DWProviderUpdateRegistrarTableViewCell.h @@ -0,0 +1,22 @@ +// +// DWProviderUpdateRegistrarTableViewCell.h +// DashWallet +// +// Created by Sam Westrich on 3/3/19. +// Copyright © 2019 Dash Core Group. All rights reserved. +// + +#import "BRCopyLabel.h" +#import + +NS_ASSUME_NONNULL_BEGIN + +@interface DWProviderUpdateRegistrarTableViewCell : UITableViewCell + +@property (strong, nonatomic) IBOutlet BRCopyLabel *payToAddressLabel; +@property (strong, nonatomic) IBOutlet BRCopyLabel *operatorKeyLabel; +@property (strong, nonatomic) IBOutlet BRCopyLabel *blockHeightLabel; + +@end + +NS_ASSUME_NONNULL_END diff --git a/DashWallet/Sources/UI/Menu/Tools/Masternode/Masternode Control/Cells/DWProviderUpdateRegistrarTableViewCell.m b/DashWallet/Sources/UI/Menu/Tools/Masternode/Masternode Control/Cells/DWProviderUpdateRegistrarTableViewCell.m new file mode 100644 index 000000000..359a301b9 --- /dev/null +++ b/DashWallet/Sources/UI/Menu/Tools/Masternode/Masternode Control/Cells/DWProviderUpdateRegistrarTableViewCell.m @@ -0,0 +1,24 @@ +// +// DWProviderUpdateRegistrarTableViewCell.m +// DashWallet +// +// Created by Sam Westrich on 3/3/19. +// Copyright © 2019 Dash Core Group. All rights reserved. +// + +#import "DWProviderUpdateRegistrarTableViewCell.h" + +@implementation DWProviderUpdateRegistrarTableViewCell + +- (void)awakeFromNib { + [super awakeFromNib]; + // Initialization code +} + +- (void)setSelected:(BOOL)selected animated:(BOOL)animated { + [super setSelected:selected animated:animated]; + + // Configure the view for the selected state +} + +@end diff --git a/DashWallet/Sources/UI/Menu/Tools/Masternode/Masternode Control/Cells/DWProviderUpdateServiceTableViewCell.h b/DashWallet/Sources/UI/Menu/Tools/Masternode/Masternode Control/Cells/DWProviderUpdateServiceTableViewCell.h new file mode 100644 index 000000000..dfccdda5f --- /dev/null +++ b/DashWallet/Sources/UI/Menu/Tools/Masternode/Masternode Control/Cells/DWProviderUpdateServiceTableViewCell.h @@ -0,0 +1,22 @@ +// +// DWProviderUpdateServiceTableViewCell.h +// DashWallet +// +// Created by Sam Westrich on 3/3/19. +// Copyright © 2019 Dash Core Group. All rights reserved. +// + +#import "BRCopyLabel.h" +#import + +NS_ASSUME_NONNULL_BEGIN + +@interface DWProviderUpdateServiceTableViewCell : UITableViewCell + +@property (strong, nonatomic) IBOutlet BRCopyLabel *locationLabel; +@property (strong, nonatomic) IBOutlet BRCopyLabel *operatorRewardPayoutAddressLabel; +@property (strong, nonatomic) IBOutlet BRCopyLabel *blockHeightLabel; + +@end + +NS_ASSUME_NONNULL_END diff --git a/DashWallet/Sources/UI/Menu/Tools/Masternode/Masternode Control/Cells/DWProviderUpdateServiceTableViewCell.m b/DashWallet/Sources/UI/Menu/Tools/Masternode/Masternode Control/Cells/DWProviderUpdateServiceTableViewCell.m new file mode 100644 index 000000000..88fc0fd71 --- /dev/null +++ b/DashWallet/Sources/UI/Menu/Tools/Masternode/Masternode Control/Cells/DWProviderUpdateServiceTableViewCell.m @@ -0,0 +1,24 @@ +// +// DWProviderUpdateServiceTableViewCell.m +// DashWallet +// +// Created by Sam Westrich on 3/3/19. +// Copyright © 2019 Dash Core Group. All rights reserved. +// + +#import "DWProviderUpdateServiceTableViewCell.h" + +@implementation DWProviderUpdateServiceTableViewCell + +- (void)awakeFromNib { + [super awakeFromNib]; + // Initialization code +} + +- (void)setSelected:(BOOL)selected animated:(BOOL)animated { + [super setSelected:selected animated:animated]; + + // Configure the view for the selected state +} + +@end diff --git a/DashWallet/Sources/UI/Menu/Tools/Masternode/Masternode List/Cells/DWMasternodeTableViewCell.xib b/DashWallet/Sources/UI/Menu/Tools/Masternode/Masternode List/Cells/DWMasternodeTableViewCell.xib new file mode 100644 index 000000000..8c6a119c7 --- /dev/null +++ b/DashWallet/Sources/UI/Menu/Tools/Masternode/Masternode List/Cells/DWMasternodeTableViewCell.xib @@ -0,0 +1,57 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + From a92c2d3eb94bd3b61e76d9b84b699ee2a5302fcb Mon Sep 17 00:00:00 2001 From: Quantum Explorer Date: Sat, 11 Apr 2020 21:47:12 +0700 Subject: [PATCH 29/34] temp changes --- DashSyncCurrentCommit | 1 - DashWallet.xcodeproj/project.pbxproj | 2 +- .../Masternode List/Cells/DWMasternodeTableViewCell.m | 2 +- Podfile | 9 +++++---- Podfile.lock | 10 +++------- 5 files changed, 10 insertions(+), 14 deletions(-) diff --git a/DashSyncCurrentCommit b/DashSyncCurrentCommit index 5507cfd4e..e69de29bb 100644 --- a/DashSyncCurrentCommit +++ b/DashSyncCurrentCommit @@ -1 +0,0 @@ -debd950a54124cf85e1aa89cc6a6f643c763ec39 diff --git a/DashWallet.xcodeproj/project.pbxproj b/DashWallet.xcodeproj/project.pbxproj index bc0a2e447..ca1b9b8fd 100644 --- a/DashWallet.xcodeproj/project.pbxproj +++ b/DashWallet.xcodeproj/project.pbxproj @@ -3999,7 +3999,7 @@ ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "\"${SRCROOT}/scripts/dashsync_version.sh\"\n"; + shellScript = "#\"${SRCROOT}/scripts/dashsync_version.sh\"\n"; }; 2ADC722623B4071700D9DD37 /* Run Script Swift Format */ = { isa = PBXShellScriptBuildPhase; diff --git a/DashWallet/Sources/UI/Menu/Tools/Masternode/Masternode List/Cells/DWMasternodeTableViewCell.m b/DashWallet/Sources/UI/Menu/Tools/Masternode/Masternode List/Cells/DWMasternodeTableViewCell.m index 62a01d5f5..bcbd28bed 100644 --- a/DashWallet/Sources/UI/Menu/Tools/Masternode/Masternode List/Cells/DWMasternodeTableViewCell.m +++ b/DashWallet/Sources/UI/Menu/Tools/Masternode/Masternode List/Cells/DWMasternodeTableViewCell.m @@ -189,7 +189,7 @@ - (void)reloadAttributedData { UIFont *availabilityFont = [UIFont dw_fontForTextStyle:UIFontTextStyleCaption1]; UIColor *availabilityColor = [UIColor dw_quaternaryTextColor]; - self.availabilityLabel.attributedText = [NSAttributedString attributedText:self.model.validString + self.availabilityLabel.attributedText = [NSAttributedString attributedText:self.model.validUppercaseString font:availabilityFont textColor:availabilityColor highlightedText:highlightedText diff --git a/Podfile b/Podfile index b5caac481..e1cf61808 100644 --- a/Podfile +++ b/Podfile @@ -1,7 +1,8 @@ target 'dashwallet' do platform :ios, '11.0' - pod 'DashSync', :git => 'https://github.com/dashevo/dashsync-iOS/', :commit => 'debd950a54124cf85e1aa89cc6a6f643c763ec39' + pod 'DashSync', :path => '../DashSync/' + #:git => 'https://github.com/dashevo/dashsync-iOS/', :commit => 'debd950a54124cf85e1aa89cc6a6f643c763ec39' pod 'CloudInAppMessaging', '0.1.0' pod 'KVO-MVVM', '0.5.6' @@ -39,8 +40,8 @@ target 'WatchApp Extension' do end -post_install do |installer| +#post_install do |installer| # update info about current DashSync version # the command runs in the background after 1 sec, when `pod install` updates Podfile.lock - system("(sleep 1; sh ./scripts/dashsync_version.sh) &") -end +# system("(sleep 1; sh ./scripts/dashsync_version.sh) &") +#end diff --git a/Podfile.lock b/Podfile.lock index e3d110488..49cd04564 100644 --- a/Podfile.lock +++ b/Podfile.lock @@ -20,7 +20,7 @@ PODS: DEPENDENCIES: - CloudInAppMessaging (= 0.1.0) - - DashSync (from `https://github.com/dashevo/dashsync-iOS/`, commit `debd950a54124cf85e1aa89cc6a6f643c763ec39`) + - DashSync (from `../DashSync/`) - DSDynamicOptions (= 0.1.0) - KVO-MVVM (= 0.5.6) - MBProgressHUD (= 1.1.0) @@ -41,16 +41,12 @@ SPEC REPOS: EXTERNAL SOURCES: DashSync: - :commit: debd950a54124cf85e1aa89cc6a6f643c763ec39 - :git: https://github.com/dashevo/dashsync-iOS/ + :path: "../DashSync/" MMSegmentSlider: :commit: 2d91366 :git: https://github.com/podkovyrin/MMSegmentSlider CHECKOUT OPTIONS: - DashSync: - :commit: debd950a54124cf85e1aa89cc6a6f643c763ec39 - :git: https://github.com/dashevo/dashsync-iOS/ MMSegmentSlider: :commit: 2d91366 :git: https://github.com/podkovyrin/MMSegmentSlider @@ -68,6 +64,6 @@ SPEC CHECKSUMS: secp256k1_dash: 7fdbc23e3e8a27d522ec211b874d97fb091c2b23 UIViewController-KeyboardAdditions: a691dc7e63a49854d341455a778ee8497dfc4662 -PODFILE CHECKSUM: 05dbf67a133eca3a4b9735b4f3f2eec1fc53fcc4 +PODFILE CHECKSUM: ae7774ceb58dfa5c228a50c4cb89bb883777ea95 COCOAPODS: 1.8.4 From 3649e91b3348909d127cb12a73af010165925d48 Mon Sep 17 00:00:00 2001 From: Quantum Explorer Date: Mon, 13 Apr 2020 18:54:53 +0700 Subject: [PATCH 30/34] signing from a mn --- .../DWLocalMasternodeControlViewController.m | 144 +++++++++++++----- .../Tools/Masternode/Masternode.storyboard | 8 +- DashWallet/ar.lproj/Localizable.strings | 12 ++ DashWallet/bg.lproj/Localizable.strings | 12 ++ DashWallet/cs.lproj/Localizable.strings | 12 ++ DashWallet/de.lproj/Localizable.strings | 12 ++ DashWallet/el.lproj/Localizable.strings | 12 ++ DashWallet/en.lproj/Localizable.strings | 12 ++ DashWallet/es.lproj/Localizable.strings | 12 ++ DashWallet/fr.lproj/Localizable.strings | 12 ++ DashWallet/id.lproj/Localizable.strings | 12 ++ DashWallet/it.lproj/Localizable.strings | 12 ++ DashWallet/ja.lproj/Localizable.strings | 12 ++ DashWallet/ko.lproj/Localizable.strings | 12 ++ DashWallet/nb.lproj/Localizable.strings | 12 ++ DashWallet/nl.lproj/Localizable.strings | 12 ++ DashWallet/pl.lproj/Localizable.strings | 12 ++ DashWallet/pt.lproj/Localizable.strings | 12 ++ DashWallet/ru.lproj/Localizable.strings | 12 ++ DashWallet/sk.lproj/Localizable.strings | 12 ++ DashWallet/sq.lproj/Localizable.strings | 12 ++ DashWallet/sv.lproj/Localizable.strings | 12 ++ DashWallet/th.lproj/Localizable.strings | 12 ++ DashWallet/tr.lproj/Localizable.strings | 12 ++ DashWallet/vi.lproj/Localizable.strings | 12 ++ DashWallet/zh-Hans.lproj/Localizable.strings | 12 ++ .../zh-Hant-TW.lproj/Localizable.strings | 12 ++ 27 files changed, 411 insertions(+), 41 deletions(-) diff --git a/DashWallet/Sources/UI/Menu/Tools/Masternode/Local Masternodes/DWLocalMasternodeControlViewController.m b/DashWallet/Sources/UI/Menu/Tools/Masternode/Local Masternodes/DWLocalMasternodeControlViewController.m index 070c80ca3..2253dbd46 100644 --- a/DashWallet/Sources/UI/Menu/Tools/Masternode/Local Masternodes/DWLocalMasternodeControlViewController.m +++ b/DashWallet/Sources/UI/Menu/Tools/Masternode/Local Masternodes/DWLocalMasternodeControlViewController.m @@ -21,6 +21,7 @@ #import "DWFormTableViewController.h" #import "DWKeyValueFormTableViewCell.h" #import "DWPublicKeyGenerationTableViewCell.h" +#import "DWSignMessageViewController.h" #import "DWSignPayloadModel.h" #import "DWSignPayloadViewController.h" #import "DWUIKit.h" @@ -295,59 +296,128 @@ - (DWBaseFormCellModel *)actionModelAtIndex:(NSUInteger)index { if (!strongSelf) { return; } - + UITableView *tableView = self.formController.tableView; + UITableViewCell *cell = [tableView cellForRowAtIndexPath:indexPath]; + [strongSelf showKeyForSignMessageFromSourceView:tableView sourceRect:cell.frame]; [strongSelf resignCellsFirstResponders]; }; return actionModel; } -- (NSArray *)actionItems { - NSMutableArray *items = [NSMutableArray array]; - - for (NSUInteger i = 0; i < _DWMasternodeActionCell_Count; i++) { - [items addObject:[self actionModelAtIndex:i]]; - } +- (void)showKeyForSignMessageFromSourceView:(UIView *)sourceView sourceRect:(CGRect)sourceRect { + + UIAlertController *actionSheet = [UIAlertController + alertControllerWithTitle:NSLocalizedString(@"Key to use", nil) + message:nil + preferredStyle:UIAlertControllerStyleActionSheet]; + UIAlertAction *ownerKey = [UIAlertAction + actionWithTitle:NSLocalizedString(@"Owner Key", nil) + style:UIAlertActionStyleDefault + handler:^(UIAlertAction *action) { + [self.localMasternode.ownerKeysWallet seedWithPrompt:@"Allow signing with owner key?" + forAmount:0 + completion:^(NSData *_Nullable seed, BOOL cancelled) { + if (seed) { + DSECDSAKey *ownerKey = [self.localMasternode ownerKeyFromSeed:seed]; + [self showSignMessageForKey:ownerKey]; + } + }]; + }]; + UIAlertAction *operatorKey = [UIAlertAction + actionWithTitle:NSLocalizedString(@"Operator Key", nil) + style:UIAlertActionStyleDefault + handler:^(UIAlertAction *action){ + [self.localMasternode.operatorKeysWallet seedWithPrompt:@"Allow signing with operator key?" + forAmount:0 + completion:^(NSData *_Nullable seed, BOOL cancelled) { + if (seed) { + DSBLSKey *operatorKey = [self.localMasternode operatorKeyFromSeed:seed]; + [self showSignMessageForKey:operatorKey]; + } + }]; + }]; + UIAlertAction *votingKey = [UIAlertAction + actionWithTitle:NSLocalizedString(@"Voting Key", nil) + style:UIAlertActionStyleDefault + handler:^(UIAlertAction *action){ + [self.localMasternode.votingKeysWallet seedWithPrompt:@"Allow signing with voting key?" + forAmount:0 + completion:^(NSData *_Nullable seed, BOOL cancelled) { + if (seed) { + DSECDSAKey *ownerKey = [self.localMasternode votingKeyFromSeed:seed]; + [self showSignMessageForKey:ownerKey]; + } + }]; + }]; + + UIAlertAction *cancel = [UIAlertAction + actionWithTitle:NSLocalizedString(@"Cancel", nil) + style:UIAlertActionStyleCancel + handler:nil]; + [actionSheet addAction:ownerKey]; + [actionSheet addAction:operatorKey]; + [actionSheet addAction:votingKey]; + [actionSheet addAction:cancel]; + if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad) { + actionSheet.popoverPresentationController.sourceView = sourceView; + actionSheet.popoverPresentationController.sourceRect = sourceRect; + } + [self presentViewController:actionSheet animated:YES completion:nil]; +} - return items; +- (void)showSignMessageForKey:(DSKey*)key { + DWSignMessageViewController *signMessageViewController = [[DWSignMessageViewController alloc] init]; + signMessageViewController.key = key; + [self.navigationController pushViewController:signMessageViewController animated:YES]; } -- (DWBaseFormCellModel *)registerActionModel { - __weak typeof(self) weakSelf = self; - DWActionFormCellModel *registerModel = [[DWActionFormCellModel alloc] initWithTitle:NSLocalizedString(@"View Signing Info", nil)]; - registerModel.didSelectBlock = ^(DWActionFormCellModel *_Nonnull cellModel, NSIndexPath *_Nonnull indexPath) { - __strong __typeof(weakSelf) strongSelf = weakSelf; - if (!strongSelf) { - return; +- (NSArray *)actionItems { + NSMutableArray *items = [NSMutableArray array]; + + for (NSUInteger i = 0; i < _DWMasternodeActionCell_Count; i++) { + [items addObject:[self actionModelAtIndex:i]]; } - [strongSelf resignCellsFirstResponders]; + return items; +} - // [self.model findCollateralTransactionWithCompletion:^(NSError *_Nonnull error) { - // if (error) { - // return; - // } - // [self.model registerMasternode:self - // requestsPayloadSigning:^{ - // [self showPayloadSigning]; - // } - // completion:^(NSError *_Nonnull error){ - // - // }]; - // [self showPayloadSigning]; - // }]; - }; - self.registerActionModel = registerModel; - return registerModel; +- (DWBaseFormCellModel *)registerActionModel { + __weak typeof(self) weakSelf = self; + DWActionFormCellModel *registerModel = [[DWActionFormCellModel alloc] initWithTitle:NSLocalizedString(@"View Signing Info", nil)]; + registerModel.didSelectBlock = ^(DWActionFormCellModel *_Nonnull cellModel, NSIndexPath *_Nonnull indexPath) { + __strong __typeof(weakSelf) strongSelf = weakSelf; + if (!strongSelf) { + return; + } + + [strongSelf resignCellsFirstResponders]; + + // [self.model findCollateralTransactionWithCompletion:^(NSError *_Nonnull error) { + // if (error) { + // return; + // } + // [self.model registerMasternode:self + // requestsPayloadSigning:^{ + // [self showPayloadSigning]; + // } + // completion:^(NSError *_Nonnull error){ + // + // }]; + // [self showPayloadSigning]; + // }]; + }; + self.registerActionModel = registerModel; + return registerModel; } - (NSArray *)sections { - DWFormSectionModel *section = [[DWFormSectionModel alloc] init]; - section.items = [self items]; + DWFormSectionModel *section = [[DWFormSectionModel alloc] init]; + section.items = [self items]; - DWFormSectionModel *actionsSection = [[DWFormSectionModel alloc] init]; - actionsSection.items = [self actionItems]; + DWFormSectionModel *actionsSection = [[DWFormSectionModel alloc] init]; + actionsSection.items = [self actionItems]; - return @[ section, actionsSection ]; + return @[ section, actionsSection ]; } @end diff --git a/DashWallet/Sources/UI/Menu/Tools/Masternode/Masternode.storyboard b/DashWallet/Sources/UI/Menu/Tools/Masternode/Masternode.storyboard index 98ecedc3b..246caa59c 100644 --- a/DashWallet/Sources/UI/Menu/Tools/Masternode/Masternode.storyboard +++ b/DashWallet/Sources/UI/Menu/Tools/Masternode/Masternode.storyboard @@ -1,9 +1,9 @@ - + - + @@ -29,7 +29,7 @@ - + @@ -1394,7 +1394,7 @@ - + diff --git a/DashWallet/ar.lproj/Localizable.strings b/DashWallet/ar.lproj/Localizable.strings index 21ba376f8..8115ee6e7 100644 --- a/DashWallet/ar.lproj/Localizable.strings +++ b/DashWallet/ar.lproj/Localizable.strings @@ -392,6 +392,9 @@ /* No comment provided by engineer. */ "It's Important" = "It's Important"; +/* No comment provided by engineer. */ +"Key to use" = "Key to use"; + /* No comment provided by engineer. */ "Keypair %ld" = "Keypair %ld"; @@ -524,6 +527,9 @@ /* No comment provided by engineer. */ "OK" = "حسنا"; +/* No comment provided by engineer. */ +"Operator Key" = "Operator Key"; + /* No comment provided by engineer. */ "Operator Keys" = "Operator Keys"; @@ -533,6 +539,9 @@ /* No comment provided by engineer. */ "Owner Address" = "Owner Address"; +/* No comment provided by engineer. */ +"Owner Key" = "Owner Key"; + /* No comment provided by engineer. */ "Owner Keys" = "Owner Keys"; @@ -977,6 +986,9 @@ /* No comment provided by engineer. */ "Voting Address" = "Voting Address"; +/* No comment provided by engineer. */ +"Voting Key" = "Voting Key"; + /* No comment provided by engineer. */ "Voting Keys" = "Voting Keys"; diff --git a/DashWallet/bg.lproj/Localizable.strings b/DashWallet/bg.lproj/Localizable.strings index 4ea1c8611..b3283fca0 100644 --- a/DashWallet/bg.lproj/Localizable.strings +++ b/DashWallet/bg.lproj/Localizable.strings @@ -392,6 +392,9 @@ /* No comment provided by engineer. */ "It's Important" = "It's Important"; +/* No comment provided by engineer. */ +"Key to use" = "Key to use"; + /* No comment provided by engineer. */ "Keypair %ld" = "Ключова фраза %ld"; @@ -524,6 +527,9 @@ /* No comment provided by engineer. */ "OK" = "OK"; +/* No comment provided by engineer. */ +"Operator Key" = "Operator Key"; + /* No comment provided by engineer. */ "Operator Keys" = "Операторски ключове"; @@ -533,6 +539,9 @@ /* No comment provided by engineer. */ "Owner Address" = "Owner Address"; +/* No comment provided by engineer. */ +"Owner Key" = "Owner Key"; + /* No comment provided by engineer. */ "Owner Keys" = "Ключове на собственика"; @@ -977,6 +986,9 @@ /* No comment provided by engineer. */ "Voting Address" = "Voting Address"; +/* No comment provided by engineer. */ +"Voting Key" = "Voting Key"; + /* No comment provided by engineer. */ "Voting Keys" = "Ключове за гласуване"; diff --git a/DashWallet/cs.lproj/Localizable.strings b/DashWallet/cs.lproj/Localizable.strings index 077bc58de..d7d512d26 100644 --- a/DashWallet/cs.lproj/Localizable.strings +++ b/DashWallet/cs.lproj/Localizable.strings @@ -392,6 +392,9 @@ /* No comment provided by engineer. */ "It's Important" = "Je důležité"; +/* No comment provided by engineer. */ +"Key to use" = "Key to use"; + /* No comment provided by engineer. */ "Keypair %ld" = "Klíčový pár %ld"; @@ -524,6 +527,9 @@ /* No comment provided by engineer. */ "OK" = "OK"; +/* No comment provided by engineer. */ +"Operator Key" = "Operator Key"; + /* No comment provided by engineer. */ "Operator Keys" = "Klíče operátora"; @@ -533,6 +539,9 @@ /* No comment provided by engineer. */ "Owner Address" = "Adresa majitele"; +/* No comment provided by engineer. */ +"Owner Key" = "Owner Key"; + /* No comment provided by engineer. */ "Owner Keys" = "Klíče majitele"; @@ -977,6 +986,9 @@ /* No comment provided by engineer. */ "Voting Address" = "Adresa pro hlasování"; +/* No comment provided by engineer. */ +"Voting Key" = "Voting Key"; + /* No comment provided by engineer. */ "Voting Keys" = "Klíče pro hlasování"; diff --git a/DashWallet/de.lproj/Localizable.strings b/DashWallet/de.lproj/Localizable.strings index 2e486a7f0..dcff11b20 100644 --- a/DashWallet/de.lproj/Localizable.strings +++ b/DashWallet/de.lproj/Localizable.strings @@ -392,6 +392,9 @@ /* No comment provided by engineer. */ "It's Important" = "Dies ist wichtig"; +/* No comment provided by engineer. */ +"Key to use" = "Key to use"; + /* No comment provided by engineer. */ "Keypair %ld" = "Keypair %ld"; @@ -524,6 +527,9 @@ /* No comment provided by engineer. */ "OK" = "OK"; +/* No comment provided by engineer. */ +"Operator Key" = "Operator Key"; + /* No comment provided by engineer. */ "Operator Keys" = "Betreiber-Schlüssel"; @@ -533,6 +539,9 @@ /* No comment provided by engineer. */ "Owner Address" = "Owner Address"; +/* No comment provided by engineer. */ +"Owner Key" = "Owner Key"; + /* No comment provided by engineer. */ "Owner Keys" = "Besitzer-Schlüssel"; @@ -977,6 +986,9 @@ /* No comment provided by engineer. */ "Voting Address" = "Voting Address"; +/* No comment provided by engineer. */ +"Voting Key" = "Voting Key"; + /* No comment provided by engineer. */ "Voting Keys" = "Abstimmungs-Schlüssel"; diff --git a/DashWallet/el.lproj/Localizable.strings b/DashWallet/el.lproj/Localizable.strings index bb6f283ce..307947735 100644 --- a/DashWallet/el.lproj/Localizable.strings +++ b/DashWallet/el.lproj/Localizable.strings @@ -392,6 +392,9 @@ /* No comment provided by engineer. */ "It's Important" = "Είναι σημαντικό"; +/* No comment provided by engineer. */ +"Key to use" = "Key to use"; + /* No comment provided by engineer. */ "Keypair %ld" = "Keypair %ld"; @@ -524,6 +527,9 @@ /* No comment provided by engineer. */ "OK" = "OK"; +/* No comment provided by engineer. */ +"Operator Key" = "Operator Key"; + /* No comment provided by engineer. */ "Operator Keys" = "Κλειδιά Χειριστή"; @@ -533,6 +539,9 @@ /* No comment provided by engineer. */ "Owner Address" = "Διεύθυνση Κατόχου"; +/* No comment provided by engineer. */ +"Owner Key" = "Owner Key"; + /* No comment provided by engineer. */ "Owner Keys" = "Κλειδιά Κατόχου"; @@ -977,6 +986,9 @@ /* No comment provided by engineer. */ "Voting Address" = "Διεύθυνση Ψήφου"; +/* No comment provided by engineer. */ +"Voting Key" = "Voting Key"; + /* No comment provided by engineer. */ "Voting Keys" = "Κλειδιά ψήφου"; diff --git a/DashWallet/en.lproj/Localizable.strings b/DashWallet/en.lproj/Localizable.strings index ea5212762..358146dcd 100644 --- a/DashWallet/en.lproj/Localizable.strings +++ b/DashWallet/en.lproj/Localizable.strings @@ -392,6 +392,9 @@ /* No comment provided by engineer. */ "It's Important" = "It's Important"; +/* No comment provided by engineer. */ +"Key to use" = "Key to use"; + /* No comment provided by engineer. */ "Keypair %ld" = "Keypair %ld"; @@ -524,6 +527,9 @@ /* No comment provided by engineer. */ "OK" = "OK"; +/* No comment provided by engineer. */ +"Operator Key" = "Operator Key"; + /* No comment provided by engineer. */ "Operator Keys" = "Operator Keys"; @@ -533,6 +539,9 @@ /* No comment provided by engineer. */ "Owner Address" = "Owner Address"; +/* No comment provided by engineer. */ +"Owner Key" = "Owner Key"; + /* No comment provided by engineer. */ "Owner Keys" = "Owner Keys"; @@ -977,6 +986,9 @@ /* No comment provided by engineer. */ "Voting Address" = "Voting Address"; +/* No comment provided by engineer. */ +"Voting Key" = "Voting Key"; + /* No comment provided by engineer. */ "Voting Keys" = "Voting Keys"; diff --git a/DashWallet/es.lproj/Localizable.strings b/DashWallet/es.lproj/Localizable.strings index d4383b940..f71fbc4fb 100644 --- a/DashWallet/es.lproj/Localizable.strings +++ b/DashWallet/es.lproj/Localizable.strings @@ -392,6 +392,9 @@ /* No comment provided by engineer. */ "It's Important" = "It's Important"; +/* No comment provided by engineer. */ +"Key to use" = "Key to use"; + /* No comment provided by engineer. */ "Keypair %ld" = "Par de llaves %Id"; @@ -524,6 +527,9 @@ /* No comment provided by engineer. */ "OK" = "OK"; +/* No comment provided by engineer. */ +"Operator Key" = "Operator Key"; + /* No comment provided by engineer. */ "Operator Keys" = "Llaves de operador"; @@ -533,6 +539,9 @@ /* No comment provided by engineer. */ "Owner Address" = "Owner Address"; +/* No comment provided by engineer. */ +"Owner Key" = "Owner Key"; + /* No comment provided by engineer. */ "Owner Keys" = "Llaves del propietario"; @@ -977,6 +986,9 @@ /* No comment provided by engineer. */ "Voting Address" = "Voting Address"; +/* No comment provided by engineer. */ +"Voting Key" = "Voting Key"; + /* No comment provided by engineer. */ "Voting Keys" = "Llaves para votar"; diff --git a/DashWallet/fr.lproj/Localizable.strings b/DashWallet/fr.lproj/Localizable.strings index ceba3225f..fba199aab 100644 --- a/DashWallet/fr.lproj/Localizable.strings +++ b/DashWallet/fr.lproj/Localizable.strings @@ -392,6 +392,9 @@ /* No comment provided by engineer. */ "It's Important" = "It's Important"; +/* No comment provided by engineer. */ +"Key to use" = "Key to use"; + /* No comment provided by engineer. */ "Keypair %ld" = "Paire de clés %ld"; @@ -524,6 +527,9 @@ /* No comment provided by engineer. */ "OK" = "OK"; +/* No comment provided by engineer. */ +"Operator Key" = "Operator Key"; + /* No comment provided by engineer. */ "Operator Keys" = "Clés d'opérateur"; @@ -533,6 +539,9 @@ /* No comment provided by engineer. */ "Owner Address" = "Owner Address"; +/* No comment provided by engineer. */ +"Owner Key" = "Owner Key"; + /* No comment provided by engineer. */ "Owner Keys" = "Clés de propriétaire"; @@ -977,6 +986,9 @@ /* No comment provided by engineer. */ "Voting Address" = "Voting Address"; +/* No comment provided by engineer. */ +"Voting Key" = "Voting Key"; + /* No comment provided by engineer. */ "Voting Keys" = "Clés de vote"; diff --git a/DashWallet/id.lproj/Localizable.strings b/DashWallet/id.lproj/Localizable.strings index 2e59a120a..3918e36d4 100644 --- a/DashWallet/id.lproj/Localizable.strings +++ b/DashWallet/id.lproj/Localizable.strings @@ -392,6 +392,9 @@ /* No comment provided by engineer. */ "It's Important" = "Ini penting"; +/* No comment provided by engineer. */ +"Key to use" = "Key to use"; + /* No comment provided by engineer. */ "Keypair %ld" = "Keypair %ld"; @@ -524,6 +527,9 @@ /* No comment provided by engineer. */ "OK" = "OK"; +/* No comment provided by engineer. */ +"Operator Key" = "Operator Key"; + /* No comment provided by engineer. */ "Operator Keys" = "Kunci Operator"; @@ -533,6 +539,9 @@ /* No comment provided by engineer. */ "Owner Address" = "Owner Address"; +/* No comment provided by engineer. */ +"Owner Key" = "Owner Key"; + /* No comment provided by engineer. */ "Owner Keys" = "Kunci Pemilik"; @@ -977,6 +986,9 @@ /* No comment provided by engineer. */ "Voting Address" = "Voting Address"; +/* No comment provided by engineer. */ +"Voting Key" = "Voting Key"; + /* No comment provided by engineer. */ "Voting Keys" = "Kunci pemungutan suara"; diff --git a/DashWallet/it.lproj/Localizable.strings b/DashWallet/it.lproj/Localizable.strings index 5bafe822d..a18700b32 100644 --- a/DashWallet/it.lproj/Localizable.strings +++ b/DashWallet/it.lproj/Localizable.strings @@ -392,6 +392,9 @@ /* No comment provided by engineer. */ "It's Important" = "È importante"; +/* No comment provided by engineer. */ +"Key to use" = "Key to use"; + /* No comment provided by engineer. */ "Keypair %ld" = "Keypair %ld"; @@ -524,6 +527,9 @@ /* No comment provided by engineer. */ "OK" = "OK"; +/* No comment provided by engineer. */ +"Operator Key" = "Operator Key"; + /* No comment provided by engineer. */ "Operator Keys" = "Chiavi operatore"; @@ -533,6 +539,9 @@ /* No comment provided by engineer. */ "Owner Address" = "Owner Address"; +/* No comment provided by engineer. */ +"Owner Key" = "Owner Key"; + /* No comment provided by engineer. */ "Owner Keys" = "Chiavi proprietario"; @@ -977,6 +986,9 @@ /* No comment provided by engineer. */ "Voting Address" = "Voting Address"; +/* No comment provided by engineer. */ +"Voting Key" = "Voting Key"; + /* No comment provided by engineer. */ "Voting Keys" = "Chiavi di Voto"; diff --git a/DashWallet/ja.lproj/Localizable.strings b/DashWallet/ja.lproj/Localizable.strings index 41c19b5a3..4536650cb 100644 --- a/DashWallet/ja.lproj/Localizable.strings +++ b/DashWallet/ja.lproj/Localizable.strings @@ -392,6 +392,9 @@ /* No comment provided by engineer. */ "It's Important" = "It's Important"; +/* No comment provided by engineer. */ +"Key to use" = "Key to use"; + /* No comment provided by engineer. */ "Keypair %ld" = " %ldキーペア"; @@ -524,6 +527,9 @@ /* No comment provided by engineer. */ "OK" = "OK"; +/* No comment provided by engineer. */ +"Operator Key" = "Operator Key"; + /* No comment provided by engineer. */ "Operator Keys" = "運用者の諸々のキー"; @@ -533,6 +539,9 @@ /* No comment provided by engineer. */ "Owner Address" = "Owner Address"; +/* No comment provided by engineer. */ +"Owner Key" = "Owner Key"; + /* No comment provided by engineer. */ "Owner Keys" = "所有者の諸々のキー"; @@ -977,6 +986,9 @@ /* No comment provided by engineer. */ "Voting Address" = "Voting Address"; +/* No comment provided by engineer. */ +"Voting Key" = "Voting Key"; + /* No comment provided by engineer. */ "Voting Keys" = "投票の諸々のキー"; diff --git a/DashWallet/ko.lproj/Localizable.strings b/DashWallet/ko.lproj/Localizable.strings index f2c855076..7d135ce7c 100644 --- a/DashWallet/ko.lproj/Localizable.strings +++ b/DashWallet/ko.lproj/Localizable.strings @@ -392,6 +392,9 @@ /* No comment provided by engineer. */ "It's Important" = "It's Important"; +/* No comment provided by engineer. */ +"Key to use" = "Key to use"; + /* No comment provided by engineer. */ "Keypair %ld" = "키페어 %ld"; @@ -524,6 +527,9 @@ /* No comment provided by engineer. */ "OK" = "OK"; +/* No comment provided by engineer. */ +"Operator Key" = "Operator Key"; + /* No comment provided by engineer. */ "Operator Keys" = "운영자 키"; @@ -533,6 +539,9 @@ /* No comment provided by engineer. */ "Owner Address" = "Owner Address"; +/* No comment provided by engineer. */ +"Owner Key" = "Owner Key"; + /* No comment provided by engineer. */ "Owner Keys" = "소유자 키"; @@ -977,6 +986,9 @@ /* No comment provided by engineer. */ "Voting Address" = "Voting Address"; +/* No comment provided by engineer. */ +"Voting Key" = "Voting Key"; + /* No comment provided by engineer. */ "Voting Keys" = "투표 키"; diff --git a/DashWallet/nb.lproj/Localizable.strings b/DashWallet/nb.lproj/Localizable.strings index 55438be06..93d4fc143 100644 --- a/DashWallet/nb.lproj/Localizable.strings +++ b/DashWallet/nb.lproj/Localizable.strings @@ -392,6 +392,9 @@ /* No comment provided by engineer. */ "It's Important" = "It's Important"; +/* No comment provided by engineer. */ +"Key to use" = "Key to use"; + /* No comment provided by engineer. */ "Keypair %ld" = "Keypair %ld"; @@ -524,6 +527,9 @@ /* No comment provided by engineer. */ "OK" = "OK"; +/* No comment provided by engineer. */ +"Operator Key" = "Operator Key"; + /* No comment provided by engineer. */ "Operator Keys" = "Operator Keys"; @@ -533,6 +539,9 @@ /* No comment provided by engineer. */ "Owner Address" = "Owner Address"; +/* No comment provided by engineer. */ +"Owner Key" = "Owner Key"; + /* No comment provided by engineer. */ "Owner Keys" = "Owner Keys"; @@ -977,6 +986,9 @@ /* No comment provided by engineer. */ "Voting Address" = "Voting Address"; +/* No comment provided by engineer. */ +"Voting Key" = "Voting Key"; + /* No comment provided by engineer. */ "Voting Keys" = "Voting Keys"; diff --git a/DashWallet/nl.lproj/Localizable.strings b/DashWallet/nl.lproj/Localizable.strings index 4ce8da063..8a34bb194 100644 --- a/DashWallet/nl.lproj/Localizable.strings +++ b/DashWallet/nl.lproj/Localizable.strings @@ -392,6 +392,9 @@ /* No comment provided by engineer. */ "It's Important" = "Het is belangrijk"; +/* No comment provided by engineer. */ +"Key to use" = "Key to use"; + /* No comment provided by engineer. */ "Keypair %ld" = "Keypair %ld"; @@ -524,6 +527,9 @@ /* No comment provided by engineer. */ "OK" = "Oké"; +/* No comment provided by engineer. */ +"Operator Key" = "Operator Key"; + /* No comment provided by engineer. */ "Operator Keys" = "Operator sleutels"; @@ -533,6 +539,9 @@ /* No comment provided by engineer. */ "Owner Address" = "Owner Address"; +/* No comment provided by engineer. */ +"Owner Key" = "Owner Key"; + /* No comment provided by engineer. */ "Owner Keys" = "Eigenaar sleutels"; @@ -977,6 +986,9 @@ /* No comment provided by engineer. */ "Voting Address" = "Voting Address"; +/* No comment provided by engineer. */ +"Voting Key" = "Voting Key"; + /* No comment provided by engineer. */ "Voting Keys" = "Stem sleutels"; diff --git a/DashWallet/pl.lproj/Localizable.strings b/DashWallet/pl.lproj/Localizable.strings index 14b88d2f1..323e15319 100644 --- a/DashWallet/pl.lproj/Localizable.strings +++ b/DashWallet/pl.lproj/Localizable.strings @@ -392,6 +392,9 @@ /* No comment provided by engineer. */ "It's Important" = "It's Important"; +/* No comment provided by engineer. */ +"Key to use" = "Key to use"; + /* No comment provided by engineer. */ "Keypair %ld" = "Para Kluczy %Id"; @@ -524,6 +527,9 @@ /* No comment provided by engineer. */ "OK" = "OK"; +/* No comment provided by engineer. */ +"Operator Key" = "Operator Key"; + /* No comment provided by engineer. */ "Operator Keys" = "Klucze operatora"; @@ -533,6 +539,9 @@ /* No comment provided by engineer. */ "Owner Address" = "Owner Address"; +/* No comment provided by engineer. */ +"Owner Key" = "Owner Key"; + /* No comment provided by engineer. */ "Owner Keys" = "Klucze właściciela"; @@ -977,6 +986,9 @@ /* No comment provided by engineer. */ "Voting Address" = "Voting Address"; +/* No comment provided by engineer. */ +"Voting Key" = "Voting Key"; + /* No comment provided by engineer. */ "Voting Keys" = "Klucze głosujące"; diff --git a/DashWallet/pt.lproj/Localizable.strings b/DashWallet/pt.lproj/Localizable.strings index 709540dd6..4c6bf6b75 100644 --- a/DashWallet/pt.lproj/Localizable.strings +++ b/DashWallet/pt.lproj/Localizable.strings @@ -392,6 +392,9 @@ /* No comment provided by engineer. */ "It's Important" = "It's Important"; +/* No comment provided by engineer. */ +"Key to use" = "Key to use"; + /* No comment provided by engineer. */ "Keypair %ld" = "Par de chaves %ld"; @@ -524,6 +527,9 @@ /* No comment provided by engineer. */ "OK" = "OK"; +/* No comment provided by engineer. */ +"Operator Key" = "Operator Key"; + /* No comment provided by engineer. */ "Operator Keys" = "Chaves do Operador"; @@ -533,6 +539,9 @@ /* No comment provided by engineer. */ "Owner Address" = "Owner Address"; +/* No comment provided by engineer. */ +"Owner Key" = "Owner Key"; + /* No comment provided by engineer. */ "Owner Keys" = "Chaves do Proprietário"; @@ -977,6 +986,9 @@ /* No comment provided by engineer. */ "Voting Address" = "Voting Address"; +/* No comment provided by engineer. */ +"Voting Key" = "Voting Key"; + /* No comment provided by engineer. */ "Voting Keys" = "Chaves de Votação"; diff --git a/DashWallet/ru.lproj/Localizable.strings b/DashWallet/ru.lproj/Localizable.strings index 38e69331d..a05ed5c3d 100644 --- a/DashWallet/ru.lproj/Localizable.strings +++ b/DashWallet/ru.lproj/Localizable.strings @@ -392,6 +392,9 @@ /* No comment provided by engineer. */ "It's Important" = "Это важно"; +/* No comment provided by engineer. */ +"Key to use" = "Key to use"; + /* No comment provided by engineer. */ "Keypair %ld" = "Ключи %ld"; @@ -524,6 +527,9 @@ /* No comment provided by engineer. */ "OK" = "ОК"; +/* No comment provided by engineer. */ +"Operator Key" = "Operator Key"; + /* No comment provided by engineer. */ "Operator Keys" = "Ключи оператора"; @@ -533,6 +539,9 @@ /* No comment provided by engineer. */ "Owner Address" = "Owner Address"; +/* No comment provided by engineer. */ +"Owner Key" = "Owner Key"; + /* No comment provided by engineer. */ "Owner Keys" = "Ключи владельца"; @@ -977,6 +986,9 @@ /* No comment provided by engineer. */ "Voting Address" = "Voting Address"; +/* No comment provided by engineer. */ +"Voting Key" = "Voting Key"; + /* No comment provided by engineer. */ "Voting Keys" = "Ключи голосования"; diff --git a/DashWallet/sk.lproj/Localizable.strings b/DashWallet/sk.lproj/Localizable.strings index e28f5a139..960005bca 100644 --- a/DashWallet/sk.lproj/Localizable.strings +++ b/DashWallet/sk.lproj/Localizable.strings @@ -392,6 +392,9 @@ /* No comment provided by engineer. */ "It's Important" = "Je to dôležité"; +/* No comment provided by engineer. */ +"Key to use" = "Key to use"; + /* No comment provided by engineer. */ "Keypair %ld" = "Pár kľúčov %ld"; @@ -524,6 +527,9 @@ /* No comment provided by engineer. */ "OK" = "OK"; +/* No comment provided by engineer. */ +"Operator Key" = "Operator Key"; + /* No comment provided by engineer. */ "Operator Keys" = "Kľúče operátora"; @@ -533,6 +539,9 @@ /* No comment provided by engineer. */ "Owner Address" = "Adresa vlastníka"; +/* No comment provided by engineer. */ +"Owner Key" = "Owner Key"; + /* No comment provided by engineer. */ "Owner Keys" = "Kľúče vlastníka"; @@ -977,6 +986,9 @@ /* No comment provided by engineer. */ "Voting Address" = "Adresa pre hlasovanie"; +/* No comment provided by engineer. */ +"Voting Key" = "Voting Key"; + /* No comment provided by engineer. */ "Voting Keys" = "Hlasovacie kľúče"; diff --git a/DashWallet/sq.lproj/Localizable.strings b/DashWallet/sq.lproj/Localizable.strings index 255239c98..b338ea759 100644 --- a/DashWallet/sq.lproj/Localizable.strings +++ b/DashWallet/sq.lproj/Localizable.strings @@ -392,6 +392,9 @@ /* No comment provided by engineer. */ "It's Important" = "It's Important"; +/* No comment provided by engineer. */ +"Key to use" = "Key to use"; + /* No comment provided by engineer. */ "Keypair %ld" = "Keypair %ld"; @@ -524,6 +527,9 @@ /* No comment provided by engineer. */ "OK" = "OK"; +/* No comment provided by engineer. */ +"Operator Key" = "Operator Key"; + /* No comment provided by engineer. */ "Operator Keys" = "Operator Keys"; @@ -533,6 +539,9 @@ /* No comment provided by engineer. */ "Owner Address" = "Owner Address"; +/* No comment provided by engineer. */ +"Owner Key" = "Owner Key"; + /* No comment provided by engineer. */ "Owner Keys" = "Owner Keys"; @@ -977,6 +986,9 @@ /* No comment provided by engineer. */ "Voting Address" = "Voting Address"; +/* No comment provided by engineer. */ +"Voting Key" = "Voting Key"; + /* No comment provided by engineer. */ "Voting Keys" = "Voting Keys"; diff --git a/DashWallet/sv.lproj/Localizable.strings b/DashWallet/sv.lproj/Localizable.strings index b3aefba58..39f116f77 100644 --- a/DashWallet/sv.lproj/Localizable.strings +++ b/DashWallet/sv.lproj/Localizable.strings @@ -392,6 +392,9 @@ /* No comment provided by engineer. */ "It's Important" = "It's Important"; +/* No comment provided by engineer. */ +"Key to use" = "Key to use"; + /* No comment provided by engineer. */ "Keypair %ld" = "Keypair %ld"; @@ -524,6 +527,9 @@ /* No comment provided by engineer. */ "OK" = "OK"; +/* No comment provided by engineer. */ +"Operator Key" = "Operator Key"; + /* No comment provided by engineer. */ "Operator Keys" = "Operator Keys"; @@ -533,6 +539,9 @@ /* No comment provided by engineer. */ "Owner Address" = "Owner Address"; +/* No comment provided by engineer. */ +"Owner Key" = "Owner Key"; + /* No comment provided by engineer. */ "Owner Keys" = "Owner Keys"; @@ -977,6 +986,9 @@ /* No comment provided by engineer. */ "Voting Address" = "Voting Address"; +/* No comment provided by engineer. */ +"Voting Key" = "Voting Key"; + /* No comment provided by engineer. */ "Voting Keys" = "Voting Keys"; diff --git a/DashWallet/th.lproj/Localizable.strings b/DashWallet/th.lproj/Localizable.strings index 90c41aa09..772bc2821 100644 --- a/DashWallet/th.lproj/Localizable.strings +++ b/DashWallet/th.lproj/Localizable.strings @@ -392,6 +392,9 @@ /* No comment provided by engineer. */ "It's Important" = "สำคัญ"; +/* No comment provided by engineer. */ +"Key to use" = "Key to use"; + /* No comment provided by engineer. */ "Keypair %ld" = "Keypair %ld"; @@ -524,6 +527,9 @@ /* No comment provided by engineer. */ "OK" = "OK"; +/* No comment provided by engineer. */ +"Operator Key" = "Operator Key"; + /* No comment provided by engineer. */ "Operator Keys" = "ตัวดำเนินการ Keys"; @@ -533,6 +539,9 @@ /* No comment provided by engineer. */ "Owner Address" = "Owner Address"; +/* No comment provided by engineer. */ +"Owner Key" = "Owner Key"; + /* No comment provided by engineer. */ "Owner Keys" = "เจ้าของ Keys"; @@ -977,6 +986,9 @@ /* No comment provided by engineer. */ "Voting Address" = "Voting Address"; +/* No comment provided by engineer. */ +"Voting Key" = "Voting Key"; + /* No comment provided by engineer. */ "Voting Keys" = "Voting Keys"; diff --git a/DashWallet/tr.lproj/Localizable.strings b/DashWallet/tr.lproj/Localizable.strings index ca96011c9..ff52054b4 100644 --- a/DashWallet/tr.lproj/Localizable.strings +++ b/DashWallet/tr.lproj/Localizable.strings @@ -392,6 +392,9 @@ /* No comment provided by engineer. */ "It's Important" = "It's Important"; +/* No comment provided by engineer. */ +"Key to use" = "Key to use"; + /* No comment provided by engineer. */ "Keypair %ld" = "Anahtar çifti %ld"; @@ -524,6 +527,9 @@ /* No comment provided by engineer. */ "OK" = "Tamam"; +/* No comment provided by engineer. */ +"Operator Key" = "Operator Key"; + /* No comment provided by engineer. */ "Operator Keys" = "Operatör Anahtarları"; @@ -533,6 +539,9 @@ /* No comment provided by engineer. */ "Owner Address" = "Owner Address"; +/* No comment provided by engineer. */ +"Owner Key" = "Owner Key"; + /* No comment provided by engineer. */ "Owner Keys" = "Sahip Anahtarları"; @@ -977,6 +986,9 @@ /* No comment provided by engineer. */ "Voting Address" = "Voting Address"; +/* No comment provided by engineer. */ +"Voting Key" = "Voting Key"; + /* No comment provided by engineer. */ "Voting Keys" = "Oy Verme Anahtarları"; diff --git a/DashWallet/vi.lproj/Localizable.strings b/DashWallet/vi.lproj/Localizable.strings index 5ebdde17f..d4793289c 100644 --- a/DashWallet/vi.lproj/Localizable.strings +++ b/DashWallet/vi.lproj/Localizable.strings @@ -392,6 +392,9 @@ /* No comment provided by engineer. */ "It's Important" = "It's Important"; +/* No comment provided by engineer. */ +"Key to use" = "Key to use"; + /* No comment provided by engineer. */ "Keypair %ld" = "Cặp khoá %ld"; @@ -524,6 +527,9 @@ /* No comment provided by engineer. */ "OK" = "OK"; +/* No comment provided by engineer. */ +"Operator Key" = "Operator Key"; + /* No comment provided by engineer. */ "Operator Keys" = "Chìa khoá của người vận hành"; @@ -533,6 +539,9 @@ /* No comment provided by engineer. */ "Owner Address" = "Owner Address"; +/* No comment provided by engineer. */ +"Owner Key" = "Owner Key"; + /* No comment provided by engineer. */ "Owner Keys" = "Khoá của chủ sở hữu"; @@ -977,6 +986,9 @@ /* No comment provided by engineer. */ "Voting Address" = "Voting Address"; +/* No comment provided by engineer. */ +"Voting Key" = "Voting Key"; + /* No comment provided by engineer. */ "Voting Keys" = "Khoá bỏ phiếu"; diff --git a/DashWallet/zh-Hans.lproj/Localizable.strings b/DashWallet/zh-Hans.lproj/Localizable.strings index 965fc6033..0aff5c3eb 100644 --- a/DashWallet/zh-Hans.lproj/Localizable.strings +++ b/DashWallet/zh-Hans.lproj/Localizable.strings @@ -392,6 +392,9 @@ /* No comment provided by engineer. */ "It's Important" = "It's Important"; +/* No comment provided by engineer. */ +"Key to use" = "Key to use"; + /* No comment provided by engineer. */ "Keypair %ld" = "Keypair %ld"; @@ -524,6 +527,9 @@ /* No comment provided by engineer. */ "OK" = "好"; +/* No comment provided by engineer. */ +"Operator Key" = "Operator Key"; + /* No comment provided by engineer. */ "Operator Keys" = "Operator Keys"; @@ -533,6 +539,9 @@ /* No comment provided by engineer. */ "Owner Address" = "Owner Address"; +/* No comment provided by engineer. */ +"Owner Key" = "Owner Key"; + /* No comment provided by engineer. */ "Owner Keys" = "Owner Keys"; @@ -977,6 +986,9 @@ /* No comment provided by engineer. */ "Voting Address" = "Voting Address"; +/* No comment provided by engineer. */ +"Voting Key" = "Voting Key"; + /* No comment provided by engineer. */ "Voting Keys" = "Voting Keys"; diff --git a/DashWallet/zh-Hant-TW.lproj/Localizable.strings b/DashWallet/zh-Hant-TW.lproj/Localizable.strings index 0e9f33cf9..22e15be78 100644 --- a/DashWallet/zh-Hant-TW.lproj/Localizable.strings +++ b/DashWallet/zh-Hant-TW.lproj/Localizable.strings @@ -392,6 +392,9 @@ /* No comment provided by engineer. */ "It's Important" = "It's Important"; +/* No comment provided by engineer. */ +"Key to use" = "Key to use"; + /* No comment provided by engineer. */ "Keypair %ld" = "Keypair %ld"; @@ -524,6 +527,9 @@ /* No comment provided by engineer. */ "OK" = "好"; +/* No comment provided by engineer. */ +"Operator Key" = "Operator Key"; + /* No comment provided by engineer. */ "Operator Keys" = "Operator Keys"; @@ -533,6 +539,9 @@ /* No comment provided by engineer. */ "Owner Address" = "Owner Address"; +/* No comment provided by engineer. */ +"Owner Key" = "Owner Key"; + /* No comment provided by engineer. */ "Owner Keys" = "Owner Keys"; @@ -977,6 +986,9 @@ /* No comment provided by engineer. */ "Voting Address" = "Voting Address"; +/* No comment provided by engineer. */ +"Voting Key" = "Voting Key"; + /* No comment provided by engineer. */ "Voting Keys" = "Voting Keys"; From 511e4468e87de37b554a3e2e82f4b44dbcd57d17 Mon Sep 17 00:00:00 2001 From: Quantum Explorer Date: Wed, 15 Apr 2020 18:57:07 +0700 Subject: [PATCH 31/34] added reset masternode --- .../DWLocalMasternodeControlViewController.m | 358 ++++++++++++------ DashWallet/ar.lproj/Localizable.strings | 27 ++ DashWallet/bg.lproj/Localizable.strings | 27 ++ DashWallet/cs.lproj/Localizable.strings | 27 ++ DashWallet/de.lproj/Localizable.strings | 27 ++ DashWallet/el.lproj/Localizable.strings | 27 ++ DashWallet/en.lproj/Localizable.strings | 27 ++ DashWallet/es.lproj/Localizable.strings | 27 ++ DashWallet/fr.lproj/Localizable.strings | 27 ++ DashWallet/id.lproj/Localizable.strings | 27 ++ DashWallet/it.lproj/Localizable.strings | 27 ++ DashWallet/ja.lproj/Localizable.strings | 27 ++ DashWallet/ko.lproj/Localizable.strings | 27 ++ DashWallet/nb.lproj/Localizable.strings | 27 ++ DashWallet/nl.lproj/Localizable.strings | 27 ++ DashWallet/pl.lproj/Localizable.strings | 27 ++ DashWallet/pt.lproj/Localizable.strings | 27 ++ DashWallet/ru.lproj/Localizable.strings | 27 ++ DashWallet/sk.lproj/Localizable.strings | 27 ++ DashWallet/sq.lproj/Localizable.strings | 27 ++ DashWallet/sv.lproj/Localizable.strings | 27 ++ DashWallet/th.lproj/Localizable.strings | 27 ++ DashWallet/tr.lproj/Localizable.strings | 27 ++ DashWallet/vi.lproj/Localizable.strings | 27 ++ DashWallet/zh-Hans.lproj/Localizable.strings | 27 ++ .../zh-Hant-TW.lproj/Localizable.strings | 27 ++ Podfile.lock | 4 +- 27 files changed, 926 insertions(+), 111 deletions(-) diff --git a/DashWallet/Sources/UI/Menu/Tools/Masternode/Local Masternodes/DWLocalMasternodeControlViewController.m b/DashWallet/Sources/UI/Menu/Tools/Masternode/Local Masternodes/DWLocalMasternodeControlViewController.m index 2253dbd46..db4826cdd 100644 --- a/DashWallet/Sources/UI/Menu/Tools/Masternode/Local Masternodes/DWLocalMasternodeControlViewController.m +++ b/DashWallet/Sources/UI/Menu/Tools/Masternode/Local Masternodes/DWLocalMasternodeControlViewController.m @@ -43,6 +43,7 @@ typedef NS_ENUM(NSUInteger, DWMasternodeControlCell) { typedef NS_ENUM(NSUInteger, DWMasternodeActionCell) { DWMasternodeActionCell_SignMessage, + DWMasternodeActionCell_Reset, DWMasternodeActionCell_UpdateHost, DWMasternodeActionCell_ChangePayoutAddress, DWMasternodeActionCell_ChangeOperator, @@ -50,11 +51,19 @@ typedef NS_ENUM(NSUInteger, DWMasternodeActionCell) { _DWMasternodeActionCell_Count, }; +typedef NS_ENUM(NSUInteger, DWMasternodeControlViewState) { + DWMasternodeControlViewState_PublicInfo = 0, + DWMasternodeControlViewState_PrivateInfo = 1, +}; + @interface DWLocalMasternodeControlViewController () @property (nonatomic, strong) DWActionFormCellModel *registerActionModel; @property (nonatomic, strong) DWFormTableViewController *formController; @property (nonatomic, strong) DSLocalMasternode *localMasternode; +@property (nonatomic, assign) BOOL isViewingOwnerPrivateKey; +@property (nonatomic, assign) BOOL isViewingOperatorPrivateKey; +@property (nonatomic, assign) BOOL isViewingVotingPrivateKey; @end @@ -65,6 +74,9 @@ - (instancetype)initWithLocalMasternode:(DSLocalMasternode *)localMasternode { self.title = NSLocalizedString(@"Control", nil); self.hidesBottomBarWhenPushed = YES; _localMasternode = localMasternode; + _isViewingOwnerPrivateKey = NO; + _isViewingOperatorPrivateKey = NO; + _isViewingVotingPrivateKey = NO; } return self; } @@ -102,11 +114,26 @@ - (NSString *)titleForCellAtRow:(NSUInteger)row { case DWMasternodeControlCell_PayoutAddress: return NSLocalizedString(@"Payout Address", nil); case DWMasternodeControlCell_OwnerKey: - return NSLocalizedString(@"Owner Private Key", nil); + if (!self.isViewingOwnerPrivateKey) { + return NSLocalizedString(@"Owner Public Key", nil); + } + else { + return NSLocalizedString(@"Owner Private Key", nil); + } case DWMasternodeControlCell_OperatorKey: - return NSLocalizedString(@"Operator Public Key", nil); + if (!self.isViewingOperatorPrivateKey) { + return NSLocalizedString(@"Operator Public Key", nil); + } + else { + return NSLocalizedString(@"Operator Private Key", nil); + } case DWMasternodeControlCell_VotingKey: - return NSLocalizedString(@"Voting Public Key", nil); + if (!self.isViewingVotingPrivateKey) { + return NSLocalizedString(@"Voting Public Key", nil); + } + else { + return NSLocalizedString(@"Voting Private Key", nil); + } } return @""; } @@ -120,11 +147,26 @@ - (NSString *)placeholderForCellAtRow:(NSUInteger)row { case DWMasternodeControlCell_PayoutAddress: return NSLocalizedString(@"Unknown Payout Address", nil); case DWMasternodeControlCell_OwnerKey: - return NSLocalizedString(@"Unknown Owner Private Key", nil); + if (!self.isViewingOwnerPrivateKey) { + return NSLocalizedString(@"Unknown Owner Public Key", nil); + } + else { + return NSLocalizedString(@"Unknown Owner Private Key", nil); + } case DWMasternodeControlCell_OperatorKey: - return NSLocalizedString(@"Unknown Operator Public Key", nil); + if (!self.isViewingOperatorPrivateKey) { + return NSLocalizedString(@"Unknown Operator Public Key", nil); + } + else { + return NSLocalizedString(@"Unknown Operator Private Key", nil); + } case DWMasternodeControlCell_VotingKey: - return NSLocalizedString(@"Unknown Voting Public Key", nil); + if (!self.isViewingVotingPrivateKey) { + return NSLocalizedString(@"Unknown Voting Public Key", nil); + } + else { + return NSLocalizedString(@"Unknown Voting Private Key", nil); + } } return @""; } @@ -136,11 +178,26 @@ - (NSString *)actionForCellAtRow:(NSUInteger)row { case DWMasternodeControlCell_PayoutAddress: return NSLocalizedString(@"Lookup", nil); case DWMasternodeControlCell_OwnerKey: - return NSLocalizedString(@"Lookup", nil); + if (self.isViewingOwnerPrivateKey) { + return NSLocalizedString(@"Public Key", nil); + } + else { + return NSLocalizedString(@"Private Key", nil); + } case DWMasternodeControlCell_OperatorKey: - return NSLocalizedString(@"Lookup", nil); + if (self.isViewingOperatorPrivateKey) { + return NSLocalizedString(@"Public Key", nil); + } + else { + return NSLocalizedString(@"Private Key", nil); + } case DWMasternodeControlCell_VotingKey: - return NSLocalizedString(@"Lookup", nil); + if (self.isViewingVotingPrivateKey) { + return NSLocalizedString(@"Public Key", nil); + } + else { + return NSLocalizedString(@"Private Key", nil); + } default: return nil; } @@ -150,6 +207,8 @@ - (NSString *)actionTitleForCellAtRow:(NSUInteger)row { switch (row) { case DWMasternodeActionCell_SignMessage: return NSLocalizedString(@"Sign Message", nil); + case DWMasternodeActionCell_Reset: + return NSLocalizedString(@"Reset", nil); case DWMasternodeActionCell_UpdateHost: return NSLocalizedString(@"Update Host", nil); case DWMasternodeActionCell_ChangeOperator: @@ -203,6 +262,7 @@ - (BOOL)resignCellsFirstResponders { if (!strongModel) { return; } + self.isViewingOwnerPrivateKey = !self.isViewingOwnerPrivateKey; }; case DWMasternodeControlCell_OperatorKey: return ^{ @@ -210,6 +270,7 @@ - (BOOL)resignCellsFirstResponders { if (!strongModel) { return; } + self.isViewingOperatorPrivateKey = !self.isViewingOperatorPrivateKey; }; case DWMasternodeControlCell_VotingKey: return ^{ @@ -217,6 +278,7 @@ - (BOOL)resignCellsFirstResponders { if (!strongModel) { return; } + self.isViewingVotingPrivateKey = !self.isViewingVotingPrivateKey; }; default: return nil; @@ -269,8 +331,15 @@ - (DWBaseFormCellModel *)modelForRow:(NSUInteger)row { break; } case DWMasternodeControlCell_VotingKey: { - model.valueText = self.localMasternode.votingPublicKeyData.hexString; - model.editable = FALSE; + NSData *votingKeyData = self.localMasternode.votingPublicKeyData; + if (votingKeyData.length) { + model.valueText = votingKeyData.hexString; + model.editable = FALSE; + } + else { + model.valueText = NSLocalizedString(@"Same as owner", @"Should be understood as `same as owner key`"); + model.editable = FALSE; + } break; } } @@ -291,16 +360,36 @@ - (DWBaseFormCellModel *)modelForRow:(NSUInteger)row { - (DWBaseFormCellModel *)actionModelAtIndex:(NSUInteger)index { __weak typeof(self) weakSelf = self; DWActionFormCellModel *actionModel = [[DWActionFormCellModel alloc] initWithTitle:[self actionTitleForCellAtRow:index]]; - actionModel.didSelectBlock = ^(DWActionFormCellModel *_Nonnull cellModel, NSIndexPath *_Nonnull indexPath) { - __strong __typeof(weakSelf) strongSelf = weakSelf; - if (!strongSelf) { - return; - } - UITableView *tableView = self.formController.tableView; - UITableViewCell *cell = [tableView cellForRowAtIndexPath:indexPath]; - [strongSelf showKeyForSignMessageFromSourceView:tableView sourceRect:cell.frame]; - [strongSelf resignCellsFirstResponders]; - }; + switch (index) { + case DWMasternodeActionCell_SignMessage: { + actionModel.didSelectBlock = ^(DWActionFormCellModel *_Nonnull cellModel, NSIndexPath *_Nonnull indexPath) { + __strong __typeof(weakSelf) strongSelf = weakSelf; + if (!strongSelf) { + return; + } + UITableView *tableView = self.formController.tableView; + UITableViewCell *cell = [tableView cellForRowAtIndexPath:indexPath]; + [strongSelf showKeyForSignMessageFromSourceView:tableView sourceRect:cell.frame]; + [strongSelf resignCellsFirstResponders]; + }; + } break; + case DWMasternodeActionCell_Reset: { + actionModel.didSelectBlock = ^(DWActionFormCellModel *_Nonnull cellModel, NSIndexPath *_Nonnull indexPath) { + __strong __typeof(weakSelf) strongSelf = weakSelf; + if (!strongSelf) { + return; + } + UITableView *tableView = self.formController.tableView; + UITableViewCell *cell = [tableView cellForRowAtIndexPath:indexPath]; + [strongSelf resetMasternodeFromSourceView:tableView sourceRect:cell.frame]; + [strongSelf resignCellsFirstResponders]; + }; + } break; + + default: + break; + } + return actionModel; } @@ -314,110 +403,161 @@ - (void)showKeyForSignMessageFromSourceView:(UIView *)sourceView sourceRect:(CGR actionWithTitle:NSLocalizedString(@"Owner Key", nil) style:UIAlertActionStyleDefault handler:^(UIAlertAction *action) { - [self.localMasternode.ownerKeysWallet seedWithPrompt:@"Allow signing with owner key?" - forAmount:0 - completion:^(NSData *_Nullable seed, BOOL cancelled) { - if (seed) { - DSECDSAKey *ownerKey = [self.localMasternode ownerKeyFromSeed:seed]; - [self showSignMessageForKey:ownerKey]; - } - }]; - }]; - UIAlertAction *operatorKey = [UIAlertAction - actionWithTitle:NSLocalizedString(@"Operator Key", nil) - style:UIAlertActionStyleDefault - handler:^(UIAlertAction *action){ - [self.localMasternode.operatorKeysWallet seedWithPrompt:@"Allow signing with operator key?" - forAmount:0 - completion:^(NSData *_Nullable seed, BOOL cancelled) { - if (seed) { - DSBLSKey *operatorKey = [self.localMasternode operatorKeyFromSeed:seed]; - [self showSignMessageForKey:operatorKey]; - } - }]; - }]; - UIAlertAction *votingKey = [UIAlertAction - actionWithTitle:NSLocalizedString(@"Voting Key", nil) - style:UIAlertActionStyleDefault - handler:^(UIAlertAction *action){ - [self.localMasternode.votingKeysWallet seedWithPrompt:@"Allow signing with voting key?" - forAmount:0 - completion:^(NSData *_Nullable seed, BOOL cancelled) { - if (seed) { - DSECDSAKey *ownerKey = [self.localMasternode votingKeyFromSeed:seed]; - [self showSignMessageForKey:ownerKey]; - } - }]; - }]; - - UIAlertAction *cancel = [UIAlertAction - actionWithTitle:NSLocalizedString(@"Cancel", nil) - style:UIAlertActionStyleCancel - handler:nil]; - [actionSheet addAction:ownerKey]; - [actionSheet addAction:operatorKey]; - [actionSheet addAction:votingKey]; - [actionSheet addAction:cancel]; - if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad) { - actionSheet.popoverPresentationController.sourceView = sourceView; - actionSheet.popoverPresentationController.sourceRect = sourceRect; - } - [self presentViewController:actionSheet animated:YES completion:nil]; + [self.localMasternode.ownerKeysWallet seedWithPrompt:@"Allow signing with owner key?" + forAmount:0 + completion:^(NSData *_Nullable seed, BOOL cancelled) { + if (seed) { + DSECDSAKey *ownerKey = [self.localMasternode ownerKeyFromSeed:seed]; + [self showSignMessageForKey:ownerKey]; + } + }]; + }]; + UIAlertAction *operatorKey = [UIAlertAction + actionWithTitle:NSLocalizedString(@"Operator Key", nil) + style:UIAlertActionStyleDefault + handler:^(UIAlertAction *action) { + [self.localMasternode.operatorKeysWallet seedWithPrompt:@"Allow signing with operator key?" + forAmount:0 + completion:^(NSData *_Nullable seed, BOOL cancelled) { + if (seed) { + DSBLSKey *operatorKey = [self.localMasternode operatorKeyFromSeed:seed]; + [self showSignMessageForKey:operatorKey]; + } + }]; + }]; + UIAlertAction *votingKey = [UIAlertAction + actionWithTitle:NSLocalizedString(@"Voting Key", nil) + style:UIAlertActionStyleDefault + handler:^(UIAlertAction *action) { + [self.localMasternode.votingKeysWallet seedWithPrompt:@"Allow signing with voting key?" + forAmount:0 + completion:^(NSData *_Nullable seed, BOOL cancelled) { + if (seed) { + DSECDSAKey *ownerKey = [self.localMasternode votingKeyFromSeed:seed]; + [self showSignMessageForKey:ownerKey]; + } + }]; + }]; + + UIAlertAction *cancel = [UIAlertAction + actionWithTitle:NSLocalizedString(@"Cancel", nil) + style:UIAlertActionStyleCancel + handler:nil]; + [actionSheet addAction:ownerKey]; + [actionSheet addAction:operatorKey]; + [actionSheet addAction:votingKey]; + [actionSheet addAction:cancel]; + if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad) { + actionSheet.popoverPresentationController.sourceView = sourceView; + actionSheet.popoverPresentationController.sourceRect = sourceRect; + } + [self presentViewController:actionSheet animated:YES completion:nil]; +} + +- (void)resetMasternodeFromSourceView:(UIView *)sourceView sourceRect:(CGRect)sourceRect { + DSAccount *account = [self.localMasternode.chain firstAccountWithBalance]; + if (account) { + [self.localMasternode.operatorKeysWallet seedWithPrompt:@"Do you wish to reset this masternode?" + forAmount:0 + completion:^(NSData *_Nullable seed, BOOL cancelled) { + [self.localMasternode updateTransactionForResetFundedByAccount:account + completion:^(DSProviderUpdateServiceTransaction *_Nonnull providerUpdateServiceTransaction) { + if (providerUpdateServiceTransaction) { + [account signTransaction:providerUpdateServiceTransaction + withPrompt:@"Would you like to update this masternode?" + completion:^(BOOL signedTransaction, BOOL cancelled) { + if (signedTransaction) { + NSLog(@"%@", providerUpdateServiceTransaction.data.hexString); + [self.localMasternode.providerRegistrationTransaction.chain.chainManager.transactionManager publishTransaction:providerUpdateServiceTransaction + completion:^(NSError *_Nullable error) { + if (error) { + [self raiseIssue:@"Error" message:error.localizedDescription]; + } + else { + [self.presentingViewController dismissViewControllerAnimated:TRUE completion:nil]; + } + }]; + } + else { + [self raiseIssue:@"Error" message:@"Transaction was not signed."]; + } + }]; + } + else { + [self raiseIssue:@"Error" message:@"Unable to create ProviderRegistrationTransaction."]; + } + }]; + }]; + } +} + +- (void)raiseIssue:(NSString *)issue message:(NSString *)message { + UIAlertController *alert = [UIAlertController alertControllerWithTitle:issue message:message preferredStyle:UIAlertControllerStyleAlert]; + [alert addAction:[UIAlertAction actionWithTitle:@"Ok" + style:UIAlertActionStyleCancel + handler:^(UIAlertAction *_Nonnull action){ + + }]]; + [self presentViewController:alert + animated:TRUE + completion:^{ + + }]; } -- (void)showSignMessageForKey:(DSKey*)key { - DWSignMessageViewController *signMessageViewController = [[DWSignMessageViewController alloc] init]; - signMessageViewController.key = key; - [self.navigationController pushViewController:signMessageViewController animated:YES]; +- (void)showSignMessageForKey:(DSKey *)key { + DWSignMessageViewController *signMessageViewController = [[DWSignMessageViewController alloc] init]; + signMessageViewController.key = key; + [self.navigationController pushViewController:signMessageViewController animated:YES]; } - (NSArray *)actionItems { - NSMutableArray *items = [NSMutableArray array]; + NSMutableArray *items = [NSMutableArray array]; - for (NSUInteger i = 0; i < _DWMasternodeActionCell_Count; i++) { - [items addObject:[self actionModelAtIndex:i]]; - } + for (NSUInteger i = 0; i < _DWMasternodeActionCell_Count; i++) { + [items addObject:[self actionModelAtIndex:i]]; + } - return items; + return items; } - (DWBaseFormCellModel *)registerActionModel { - __weak typeof(self) weakSelf = self; - DWActionFormCellModel *registerModel = [[DWActionFormCellModel alloc] initWithTitle:NSLocalizedString(@"View Signing Info", nil)]; - registerModel.didSelectBlock = ^(DWActionFormCellModel *_Nonnull cellModel, NSIndexPath *_Nonnull indexPath) { - __strong __typeof(weakSelf) strongSelf = weakSelf; - if (!strongSelf) { - return; - } + __weak typeof(self) weakSelf = self; + DWActionFormCellModel *registerModel = [[DWActionFormCellModel alloc] initWithTitle:NSLocalizedString(@"View Signing Info", nil)]; + registerModel.didSelectBlock = ^(DWActionFormCellModel *_Nonnull cellModel, NSIndexPath *_Nonnull indexPath) { + __strong __typeof(weakSelf) strongSelf = weakSelf; + if (!strongSelf) { + return; + } + + [strongSelf resignCellsFirstResponders]; - [strongSelf resignCellsFirstResponders]; - - // [self.model findCollateralTransactionWithCompletion:^(NSError *_Nonnull error) { - // if (error) { - // return; - // } - // [self.model registerMasternode:self - // requestsPayloadSigning:^{ - // [self showPayloadSigning]; - // } - // completion:^(NSError *_Nonnull error){ - // - // }]; - // [self showPayloadSigning]; - // }]; - }; - self.registerActionModel = registerModel; - return registerModel; + // [self.model findCollateralTransactionWithCompletion:^(NSError *_Nonnull error) { + // if (error) { + // return; + // } + // [self.model registerMasternode:self + // requestsPayloadSigning:^{ + // [self showPayloadSigning]; + // } + // completion:^(NSError *_Nonnull error){ + // + // }]; + // [self showPayloadSigning]; + // }]; + }; + self.registerActionModel = registerModel; + return registerModel; } - (NSArray *)sections { - DWFormSectionModel *section = [[DWFormSectionModel alloc] init]; - section.items = [self items]; + DWFormSectionModel *section = [[DWFormSectionModel alloc] init]; + section.items = [self items]; - DWFormSectionModel *actionsSection = [[DWFormSectionModel alloc] init]; - actionsSection.items = [self actionItems]; + DWFormSectionModel *actionsSection = [[DWFormSectionModel alloc] init]; + actionsSection.items = [self actionItems]; - return @[ section, actionsSection ]; + return @[ section, actionsSection ]; } @end diff --git a/DashWallet/ar.lproj/Localizable.strings b/DashWallet/ar.lproj/Localizable.strings index 8115ee6e7..4ea21c92a 100644 --- a/DashWallet/ar.lproj/Localizable.strings +++ b/DashWallet/ar.lproj/Localizable.strings @@ -533,6 +533,9 @@ /* No comment provided by engineer. */ "Operator Keys" = "Operator Keys"; +/* No comment provided by engineer. */ +"Operator Private Key" = "Operator Private Key"; + /* No comment provided by engineer. */ "Operator Public Key" = "Operator Public Key"; @@ -548,6 +551,9 @@ /* No comment provided by engineer. */ "Owner Private Key" = "Owner Private Key"; +/* No comment provided by engineer. */ +"Owner Public Key" = "Owner Public Key"; + /* No comment provided by engineer. */ "Pay and get paid instantly with easy to use payment flows" = "Pay and get paid instantly with easy to use payment flows"; @@ -596,6 +602,9 @@ /* No comment provided by engineer. */ "Private key" = "Private key"; +/* No comment provided by engineer. */ +"Private Key" = "Private Key"; + /* No comment provided by engineer. */ "Processing" = "Processing"; @@ -605,6 +614,9 @@ /* No comment provided by engineer. */ "Public key" = "Public key"; +/* No comment provided by engineer. */ +"Public Key" = "Public Key"; + /* No comment provided by engineer. */ "Quick Receive" = "Quick Receive"; @@ -686,6 +698,9 @@ /* No comment provided by engineer. */ "Rewards" = "Rewards"; +/* Should be understood as `same as owner key` */ +"Same as owner" = "Same as owner"; + /* No comment provided by engineer. */ "Scan" = "Scan"; @@ -920,15 +935,24 @@ /* No comment provided by engineer. */ "Unable to get new QR code" = "Unable to get new QR code"; +/* No comment provided by engineer. */ +"Unknown Operator Private Key" = "Unknown Operator Private Key"; + /* No comment provided by engineer. */ "Unknown Operator Public Key" = "Unknown Operator Public Key"; /* No comment provided by engineer. */ "Unknown Owner Private Key" = "Unknown Owner Private Key"; +/* No comment provided by engineer. */ +"Unknown Owner Public Key" = "Unknown Owner Public Key"; + /* No comment provided by engineer. */ "Unknown Payout Address" = "Unknown Payout Address"; +/* No comment provided by engineer. */ +"Unknown Voting Private Key" = "Unknown Voting Private Key"; + /* No comment provided by engineer. */ "Unknown Voting Public Key" = "Unknown Voting Public Key"; @@ -992,6 +1016,9 @@ /* No comment provided by engineer. */ "Voting Keys" = "Voting Keys"; +/* No comment provided by engineer. */ +"Voting Private Key" = "Voting Private Key"; + /* No comment provided by engineer. */ "Voting Public Key" = "Voting Public Key"; diff --git a/DashWallet/bg.lproj/Localizable.strings b/DashWallet/bg.lproj/Localizable.strings index b3283fca0..2508189d2 100644 --- a/DashWallet/bg.lproj/Localizable.strings +++ b/DashWallet/bg.lproj/Localizable.strings @@ -533,6 +533,9 @@ /* No comment provided by engineer. */ "Operator Keys" = "Операторски ключове"; +/* No comment provided by engineer. */ +"Operator Private Key" = "Operator Private Key"; + /* No comment provided by engineer. */ "Operator Public Key" = "Operator Public Key"; @@ -548,6 +551,9 @@ /* No comment provided by engineer. */ "Owner Private Key" = "Owner Private Key"; +/* No comment provided by engineer. */ +"Owner Public Key" = "Owner Public Key"; + /* No comment provided by engineer. */ "Pay and get paid instantly with easy to use payment flows" = "Платете и вземете плащане незабавно с лесни за използване потоци на плащане"; @@ -596,6 +602,9 @@ /* No comment provided by engineer. */ "Private key" = "Частен ключ"; +/* No comment provided by engineer. */ +"Private Key" = "Private Key"; + /* No comment provided by engineer. */ "Processing" = "Обработване"; @@ -605,6 +614,9 @@ /* No comment provided by engineer. */ "Public key" = "Публичен адрес"; +/* No comment provided by engineer. */ +"Public Key" = "Public Key"; + /* No comment provided by engineer. */ "Quick Receive" = "Бързо получаване"; @@ -686,6 +698,9 @@ /* No comment provided by engineer. */ "Rewards" = "Възнаграждения"; +/* Should be understood as `same as owner key` */ +"Same as owner" = "Same as owner"; + /* No comment provided by engineer. */ "Scan" = "Сканирай"; @@ -920,15 +935,24 @@ /* No comment provided by engineer. */ "Unable to get new QR code" = "Не може да получи нов QR код"; +/* No comment provided by engineer. */ +"Unknown Operator Private Key" = "Unknown Operator Private Key"; + /* No comment provided by engineer. */ "Unknown Operator Public Key" = "Unknown Operator Public Key"; /* No comment provided by engineer. */ "Unknown Owner Private Key" = "Unknown Owner Private Key"; +/* No comment provided by engineer. */ +"Unknown Owner Public Key" = "Unknown Owner Public Key"; + /* No comment provided by engineer. */ "Unknown Payout Address" = "Unknown Payout Address"; +/* No comment provided by engineer. */ +"Unknown Voting Private Key" = "Unknown Voting Private Key"; + /* No comment provided by engineer. */ "Unknown Voting Public Key" = "Unknown Voting Public Key"; @@ -992,6 +1016,9 @@ /* No comment provided by engineer. */ "Voting Keys" = "Ключове за гласуване"; +/* No comment provided by engineer. */ +"Voting Private Key" = "Voting Private Key"; + /* No comment provided by engineer. */ "Voting Public Key" = "Voting Public Key"; diff --git a/DashWallet/cs.lproj/Localizable.strings b/DashWallet/cs.lproj/Localizable.strings index d7d512d26..b319a81f4 100644 --- a/DashWallet/cs.lproj/Localizable.strings +++ b/DashWallet/cs.lproj/Localizable.strings @@ -533,6 +533,9 @@ /* No comment provided by engineer. */ "Operator Keys" = "Klíče operátora"; +/* No comment provided by engineer. */ +"Operator Private Key" = "Operator Private Key"; + /* No comment provided by engineer. */ "Operator Public Key" = "Operator Public Key"; @@ -548,6 +551,9 @@ /* No comment provided by engineer. */ "Owner Private Key" = "Owner Private Key"; +/* No comment provided by engineer. */ +"Owner Public Key" = "Owner Public Key"; + /* No comment provided by engineer. */ "Pay and get paid instantly with easy to use payment flows" = "Plať a přijímej platby zcela okamžitě"; @@ -596,6 +602,9 @@ /* No comment provided by engineer. */ "Private key" = "Privátní klíč"; +/* No comment provided by engineer. */ +"Private Key" = "Private Key"; + /* No comment provided by engineer. */ "Processing" = "Zpracovává se"; @@ -605,6 +614,9 @@ /* No comment provided by engineer. */ "Public key" = "Veřejný klíč"; +/* No comment provided by engineer. */ +"Public Key" = "Public Key"; + /* No comment provided by engineer. */ "Quick Receive" = "Přijmout"; @@ -686,6 +698,9 @@ /* No comment provided by engineer. */ "Rewards" = "Odměny"; +/* Should be understood as `same as owner key` */ +"Same as owner" = "Same as owner"; + /* No comment provided by engineer. */ "Scan" = "Skenovat"; @@ -920,15 +935,24 @@ /* No comment provided by engineer. */ "Unable to get new QR code" = "Nelze získat nový QR kód"; +/* No comment provided by engineer. */ +"Unknown Operator Private Key" = "Unknown Operator Private Key"; + /* No comment provided by engineer. */ "Unknown Operator Public Key" = "Unknown Operator Public Key"; /* No comment provided by engineer. */ "Unknown Owner Private Key" = "Unknown Owner Private Key"; +/* No comment provided by engineer. */ +"Unknown Owner Public Key" = "Unknown Owner Public Key"; + /* No comment provided by engineer. */ "Unknown Payout Address" = "Unknown Payout Address"; +/* No comment provided by engineer. */ +"Unknown Voting Private Key" = "Unknown Voting Private Key"; + /* No comment provided by engineer. */ "Unknown Voting Public Key" = "Unknown Voting Public Key"; @@ -992,6 +1016,9 @@ /* No comment provided by engineer. */ "Voting Keys" = "Klíče pro hlasování"; +/* No comment provided by engineer. */ +"Voting Private Key" = "Voting Private Key"; + /* No comment provided by engineer. */ "Voting Public Key" = "Voting Public Key"; diff --git a/DashWallet/de.lproj/Localizable.strings b/DashWallet/de.lproj/Localizable.strings index dcff11b20..9d0c99a8c 100644 --- a/DashWallet/de.lproj/Localizable.strings +++ b/DashWallet/de.lproj/Localizable.strings @@ -533,6 +533,9 @@ /* No comment provided by engineer. */ "Operator Keys" = "Betreiber-Schlüssel"; +/* No comment provided by engineer. */ +"Operator Private Key" = "Operator Private Key"; + /* No comment provided by engineer. */ "Operator Public Key" = "Operator Public Key"; @@ -548,6 +551,9 @@ /* No comment provided by engineer. */ "Owner Private Key" = "Owner Private Key"; +/* No comment provided by engineer. */ +"Owner Public Key" = "Owner Public Key"; + /* No comment provided by engineer. */ "Pay and get paid instantly with easy to use payment flows" = "Zahle und lass dich bezahlen, ohne Wartezeit und auf einfache Art und Weise"; @@ -596,6 +602,9 @@ /* No comment provided by engineer. */ "Private key" = "Privater Schlüssel"; +/* No comment provided by engineer. */ +"Private Key" = "Private Key"; + /* No comment provided by engineer. */ "Processing" = "Verarbeitung"; @@ -605,6 +614,9 @@ /* No comment provided by engineer. */ "Public key" = "öffentlicher Schlüssel"; +/* No comment provided by engineer. */ +"Public Key" = "Public Key"; + /* No comment provided by engineer. */ "Quick Receive" = "Schnell Empfangen"; @@ -686,6 +698,9 @@ /* No comment provided by engineer. */ "Rewards" = "Belohnungen"; +/* Should be understood as `same as owner key` */ +"Same as owner" = "Same as owner"; + /* No comment provided by engineer. */ "Scan" = "Scannen"; @@ -920,15 +935,24 @@ /* No comment provided by engineer. */ "Unable to get new QR code" = "Kann keinen neuen QR-Code erzeugen"; +/* No comment provided by engineer. */ +"Unknown Operator Private Key" = "Unknown Operator Private Key"; + /* No comment provided by engineer. */ "Unknown Operator Public Key" = "Unknown Operator Public Key"; /* No comment provided by engineer. */ "Unknown Owner Private Key" = "Unknown Owner Private Key"; +/* No comment provided by engineer. */ +"Unknown Owner Public Key" = "Unknown Owner Public Key"; + /* No comment provided by engineer. */ "Unknown Payout Address" = "Unknown Payout Address"; +/* No comment provided by engineer. */ +"Unknown Voting Private Key" = "Unknown Voting Private Key"; + /* No comment provided by engineer. */ "Unknown Voting Public Key" = "Unknown Voting Public Key"; @@ -992,6 +1016,9 @@ /* No comment provided by engineer. */ "Voting Keys" = "Abstimmungs-Schlüssel"; +/* No comment provided by engineer. */ +"Voting Private Key" = "Voting Private Key"; + /* No comment provided by engineer. */ "Voting Public Key" = "Voting Public Key"; diff --git a/DashWallet/el.lproj/Localizable.strings b/DashWallet/el.lproj/Localizable.strings index 307947735..a351d091d 100644 --- a/DashWallet/el.lproj/Localizable.strings +++ b/DashWallet/el.lproj/Localizable.strings @@ -533,6 +533,9 @@ /* No comment provided by engineer. */ "Operator Keys" = "Κλειδιά Χειριστή"; +/* No comment provided by engineer. */ +"Operator Private Key" = "Operator Private Key"; + /* No comment provided by engineer. */ "Operator Public Key" = "Operator Public Key"; @@ -548,6 +551,9 @@ /* No comment provided by engineer. */ "Owner Private Key" = "Owner Private Key"; +/* No comment provided by engineer. */ +"Owner Public Key" = "Owner Public Key"; + /* No comment provided by engineer. */ "Pay and get paid instantly with easy to use payment flows" = "Πληρώστε και πληρωθείτε άμεσα με εύκολες στην χρήση πληρωμές"; @@ -596,6 +602,9 @@ /* No comment provided by engineer. */ "Private key" = "Ιδιωτικό κλειδί"; +/* No comment provided by engineer. */ +"Private Key" = "Private Key"; + /* No comment provided by engineer. */ "Processing" = "Επεξεργασία"; @@ -605,6 +614,9 @@ /* No comment provided by engineer. */ "Public key" = "Δημόσιο κλειδί"; +/* No comment provided by engineer. */ +"Public Key" = "Public Key"; + /* No comment provided by engineer. */ "Quick Receive" = "Γρήγορη Λήψη"; @@ -686,6 +698,9 @@ /* No comment provided by engineer. */ "Rewards" = "Ανταμοιβές"; +/* Should be understood as `same as owner key` */ +"Same as owner" = "Same as owner"; + /* No comment provided by engineer. */ "Scan" = "Ανίχνευση"; @@ -920,15 +935,24 @@ /* No comment provided by engineer. */ "Unable to get new QR code" = "Δεν είναι δυνατή η λήψη νέου QR κωδικού"; +/* No comment provided by engineer. */ +"Unknown Operator Private Key" = "Unknown Operator Private Key"; + /* No comment provided by engineer. */ "Unknown Operator Public Key" = "Unknown Operator Public Key"; /* No comment provided by engineer. */ "Unknown Owner Private Key" = "Unknown Owner Private Key"; +/* No comment provided by engineer. */ +"Unknown Owner Public Key" = "Unknown Owner Public Key"; + /* No comment provided by engineer. */ "Unknown Payout Address" = "Unknown Payout Address"; +/* No comment provided by engineer. */ +"Unknown Voting Private Key" = "Unknown Voting Private Key"; + /* No comment provided by engineer. */ "Unknown Voting Public Key" = "Unknown Voting Public Key"; @@ -992,6 +1016,9 @@ /* No comment provided by engineer. */ "Voting Keys" = "Κλειδιά ψήφου"; +/* No comment provided by engineer. */ +"Voting Private Key" = "Voting Private Key"; + /* No comment provided by engineer. */ "Voting Public Key" = "Voting Public Key"; diff --git a/DashWallet/en.lproj/Localizable.strings b/DashWallet/en.lproj/Localizable.strings index 358146dcd..be2340280 100644 --- a/DashWallet/en.lproj/Localizable.strings +++ b/DashWallet/en.lproj/Localizable.strings @@ -533,6 +533,9 @@ /* No comment provided by engineer. */ "Operator Keys" = "Operator Keys"; +/* No comment provided by engineer. */ +"Operator Private Key" = "Operator Private Key"; + /* No comment provided by engineer. */ "Operator Public Key" = "Operator Public Key"; @@ -548,6 +551,9 @@ /* No comment provided by engineer. */ "Owner Private Key" = "Owner Private Key"; +/* No comment provided by engineer. */ +"Owner Public Key" = "Owner Public Key"; + /* No comment provided by engineer. */ "Pay and get paid instantly with easy to use payment flows" = "Pay and get paid instantly with easy to use payment flows"; @@ -596,6 +602,9 @@ /* No comment provided by engineer. */ "Private key" = "Private key"; +/* No comment provided by engineer. */ +"Private Key" = "Private Key"; + /* No comment provided by engineer. */ "Processing" = "Processing"; @@ -605,6 +614,9 @@ /* No comment provided by engineer. */ "Public key" = "Public key"; +/* No comment provided by engineer. */ +"Public Key" = "Public Key"; + /* No comment provided by engineer. */ "Quick Receive" = "Quick Receive"; @@ -686,6 +698,9 @@ /* No comment provided by engineer. */ "Rewards" = "Rewards"; +/* Should be understood as `same as owner key` */ +"Same as owner" = "Same as owner"; + /* No comment provided by engineer. */ "Scan" = "Scan"; @@ -920,15 +935,24 @@ /* No comment provided by engineer. */ "Unable to get new QR code" = "Unable to get new QR code"; +/* No comment provided by engineer. */ +"Unknown Operator Private Key" = "Unknown Operator Private Key"; + /* No comment provided by engineer. */ "Unknown Operator Public Key" = "Unknown Operator Public Key"; /* No comment provided by engineer. */ "Unknown Owner Private Key" = "Unknown Owner Private Key"; +/* No comment provided by engineer. */ +"Unknown Owner Public Key" = "Unknown Owner Public Key"; + /* No comment provided by engineer. */ "Unknown Payout Address" = "Unknown Payout Address"; +/* No comment provided by engineer. */ +"Unknown Voting Private Key" = "Unknown Voting Private Key"; + /* No comment provided by engineer. */ "Unknown Voting Public Key" = "Unknown Voting Public Key"; @@ -992,6 +1016,9 @@ /* No comment provided by engineer. */ "Voting Keys" = "Voting Keys"; +/* No comment provided by engineer. */ +"Voting Private Key" = "Voting Private Key"; + /* No comment provided by engineer. */ "Voting Public Key" = "Voting Public Key"; diff --git a/DashWallet/es.lproj/Localizable.strings b/DashWallet/es.lproj/Localizable.strings index f71fbc4fb..afa7c1341 100644 --- a/DashWallet/es.lproj/Localizable.strings +++ b/DashWallet/es.lproj/Localizable.strings @@ -533,6 +533,9 @@ /* No comment provided by engineer. */ "Operator Keys" = "Llaves de operador"; +/* No comment provided by engineer. */ +"Operator Private Key" = "Operator Private Key"; + /* No comment provided by engineer. */ "Operator Public Key" = "Operator Public Key"; @@ -548,6 +551,9 @@ /* No comment provided by engineer. */ "Owner Private Key" = "Owner Private Key"; +/* No comment provided by engineer. */ +"Owner Public Key" = "Owner Public Key"; + /* No comment provided by engineer. */ "Pay and get paid instantly with easy to use payment flows" = "Pague y reciba instantáneamente con flujos de pagos fáciles de usar"; @@ -596,6 +602,9 @@ /* No comment provided by engineer. */ "Private key" = "Llave privada"; +/* No comment provided by engineer. */ +"Private Key" = "Private Key"; + /* No comment provided by engineer. */ "Processing" = "Procesando"; @@ -605,6 +614,9 @@ /* No comment provided by engineer. */ "Public key" = "Llave pública"; +/* No comment provided by engineer. */ +"Public Key" = "Public Key"; + /* No comment provided by engineer. */ "Quick Receive" = "Recibir Rápidamente "; @@ -686,6 +698,9 @@ /* No comment provided by engineer. */ "Rewards" = "Recompensas"; +/* Should be understood as `same as owner key` */ +"Same as owner" = "Same as owner"; + /* No comment provided by engineer. */ "Scan" = "Escanear"; @@ -920,15 +935,24 @@ /* No comment provided by engineer. */ "Unable to get new QR code" = "No se puede obtener un nuevo código QR"; +/* No comment provided by engineer. */ +"Unknown Operator Private Key" = "Unknown Operator Private Key"; + /* No comment provided by engineer. */ "Unknown Operator Public Key" = "Unknown Operator Public Key"; /* No comment provided by engineer. */ "Unknown Owner Private Key" = "Unknown Owner Private Key"; +/* No comment provided by engineer. */ +"Unknown Owner Public Key" = "Unknown Owner Public Key"; + /* No comment provided by engineer. */ "Unknown Payout Address" = "Unknown Payout Address"; +/* No comment provided by engineer. */ +"Unknown Voting Private Key" = "Unknown Voting Private Key"; + /* No comment provided by engineer. */ "Unknown Voting Public Key" = "Unknown Voting Public Key"; @@ -992,6 +1016,9 @@ /* No comment provided by engineer. */ "Voting Keys" = "Llaves para votar"; +/* No comment provided by engineer. */ +"Voting Private Key" = "Voting Private Key"; + /* No comment provided by engineer. */ "Voting Public Key" = "Voting Public Key"; diff --git a/DashWallet/fr.lproj/Localizable.strings b/DashWallet/fr.lproj/Localizable.strings index fba199aab..ea6829665 100644 --- a/DashWallet/fr.lproj/Localizable.strings +++ b/DashWallet/fr.lproj/Localizable.strings @@ -533,6 +533,9 @@ /* No comment provided by engineer. */ "Operator Keys" = "Clés d'opérateur"; +/* No comment provided by engineer. */ +"Operator Private Key" = "Operator Private Key"; + /* No comment provided by engineer. */ "Operator Public Key" = "Operator Public Key"; @@ -548,6 +551,9 @@ /* No comment provided by engineer. */ "Owner Private Key" = "Owner Private Key"; +/* No comment provided by engineer. */ +"Owner Public Key" = "Owner Public Key"; + /* No comment provided by engineer. */ "Pay and get paid instantly with easy to use payment flows" = "Payez et soyez payé instantanément avec des flux de paiement simples à utiliser"; @@ -596,6 +602,9 @@ /* No comment provided by engineer. */ "Private key" = "Clé privée"; +/* No comment provided by engineer. */ +"Private Key" = "Private Key"; + /* No comment provided by engineer. */ "Processing" = "En cours"; @@ -605,6 +614,9 @@ /* No comment provided by engineer. */ "Public key" = "Clé publique"; +/* No comment provided by engineer. */ +"Public Key" = "Public Key"; + /* No comment provided by engineer. */ "Quick Receive" = "Réception rapide"; @@ -686,6 +698,9 @@ /* No comment provided by engineer. */ "Rewards" = "Récompenses"; +/* Should be understood as `same as owner key` */ +"Same as owner" = "Same as owner"; + /* No comment provided by engineer. */ "Scan" = "Scanner"; @@ -920,15 +935,24 @@ /* No comment provided by engineer. */ "Unable to get new QR code" = "Impossible de générer un nouveau QR-code"; +/* No comment provided by engineer. */ +"Unknown Operator Private Key" = "Unknown Operator Private Key"; + /* No comment provided by engineer. */ "Unknown Operator Public Key" = "Unknown Operator Public Key"; /* No comment provided by engineer. */ "Unknown Owner Private Key" = "Unknown Owner Private Key"; +/* No comment provided by engineer. */ +"Unknown Owner Public Key" = "Unknown Owner Public Key"; + /* No comment provided by engineer. */ "Unknown Payout Address" = "Unknown Payout Address"; +/* No comment provided by engineer. */ +"Unknown Voting Private Key" = "Unknown Voting Private Key"; + /* No comment provided by engineer. */ "Unknown Voting Public Key" = "Unknown Voting Public Key"; @@ -992,6 +1016,9 @@ /* No comment provided by engineer. */ "Voting Keys" = "Clés de vote"; +/* No comment provided by engineer. */ +"Voting Private Key" = "Voting Private Key"; + /* No comment provided by engineer. */ "Voting Public Key" = "Voting Public Key"; diff --git a/DashWallet/id.lproj/Localizable.strings b/DashWallet/id.lproj/Localizable.strings index 3918e36d4..d52aeeacf 100644 --- a/DashWallet/id.lproj/Localizable.strings +++ b/DashWallet/id.lproj/Localizable.strings @@ -533,6 +533,9 @@ /* No comment provided by engineer. */ "Operator Keys" = "Kunci Operator"; +/* No comment provided by engineer. */ +"Operator Private Key" = "Operator Private Key"; + /* No comment provided by engineer. */ "Operator Public Key" = "Operator Public Key"; @@ -548,6 +551,9 @@ /* No comment provided by engineer. */ "Owner Private Key" = "Owner Private Key"; +/* No comment provided by engineer. */ +"Owner Public Key" = "Owner Public Key"; + /* No comment provided by engineer. */ "Pay and get paid instantly with easy to use payment flows" = "Bayar dan dapatkan bayaran instan dengan aliran pembayaran yang mudah digunakan"; @@ -596,6 +602,9 @@ /* No comment provided by engineer. */ "Private key" = "Kunci pribadi"; +/* No comment provided by engineer. */ +"Private Key" = "Private Key"; + /* No comment provided by engineer. */ "Processing" = "Sedang diproses"; @@ -605,6 +614,9 @@ /* No comment provided by engineer. */ "Public key" = "Kunci publik"; +/* No comment provided by engineer. */ +"Public Key" = "Public Key"; + /* No comment provided by engineer. */ "Quick Receive" = "Terima Cepat"; @@ -686,6 +698,9 @@ /* No comment provided by engineer. */ "Rewards" = "Hadiah"; +/* Should be understood as `same as owner key` */ +"Same as owner" = "Same as owner"; + /* No comment provided by engineer. */ "Scan" = "Pindai"; @@ -920,15 +935,24 @@ /* No comment provided by engineer. */ "Unable to get new QR code" = "Tidak dapat mendapat kode QR baru"; +/* No comment provided by engineer. */ +"Unknown Operator Private Key" = "Unknown Operator Private Key"; + /* No comment provided by engineer. */ "Unknown Operator Public Key" = "Unknown Operator Public Key"; /* No comment provided by engineer. */ "Unknown Owner Private Key" = "Unknown Owner Private Key"; +/* No comment provided by engineer. */ +"Unknown Owner Public Key" = "Unknown Owner Public Key"; + /* No comment provided by engineer. */ "Unknown Payout Address" = "Unknown Payout Address"; +/* No comment provided by engineer. */ +"Unknown Voting Private Key" = "Unknown Voting Private Key"; + /* No comment provided by engineer. */ "Unknown Voting Public Key" = "Unknown Voting Public Key"; @@ -992,6 +1016,9 @@ /* No comment provided by engineer. */ "Voting Keys" = "Kunci pemungutan suara"; +/* No comment provided by engineer. */ +"Voting Private Key" = "Voting Private Key"; + /* No comment provided by engineer. */ "Voting Public Key" = "Voting Public Key"; diff --git a/DashWallet/it.lproj/Localizable.strings b/DashWallet/it.lproj/Localizable.strings index a18700b32..4d40c9b58 100644 --- a/DashWallet/it.lproj/Localizable.strings +++ b/DashWallet/it.lproj/Localizable.strings @@ -533,6 +533,9 @@ /* No comment provided by engineer. */ "Operator Keys" = "Chiavi operatore"; +/* No comment provided by engineer. */ +"Operator Private Key" = "Operator Private Key"; + /* No comment provided by engineer. */ "Operator Public Key" = "Operator Public Key"; @@ -548,6 +551,9 @@ /* No comment provided by engineer. */ "Owner Private Key" = "Owner Private Key"; +/* No comment provided by engineer. */ +"Owner Public Key" = "Owner Public Key"; + /* No comment provided by engineer. */ "Pay and get paid instantly with easy to use payment flows" = "Paga e ricevi pagamenti istantaneamente in modo semplice e facile da usare"; @@ -596,6 +602,9 @@ /* No comment provided by engineer. */ "Private key" = "Chiave privata"; +/* No comment provided by engineer. */ +"Private Key" = "Private Key"; + /* No comment provided by engineer. */ "Processing" = "In lavorazione"; @@ -605,6 +614,9 @@ /* No comment provided by engineer. */ "Public key" = "Chiave pubblica"; +/* No comment provided by engineer. */ +"Public Key" = "Public Key"; + /* No comment provided by engineer. */ "Quick Receive" = "Rapido Ricevi"; @@ -686,6 +698,9 @@ /* No comment provided by engineer. */ "Rewards" = "Ricompense"; +/* Should be understood as `same as owner key` */ +"Same as owner" = "Same as owner"; + /* No comment provided by engineer. */ "Scan" = "Scansiona"; @@ -920,15 +935,24 @@ /* No comment provided by engineer. */ "Unable to get new QR code" = "Impossibile ottenere un nuovo codice QR"; +/* No comment provided by engineer. */ +"Unknown Operator Private Key" = "Unknown Operator Private Key"; + /* No comment provided by engineer. */ "Unknown Operator Public Key" = "Unknown Operator Public Key"; /* No comment provided by engineer. */ "Unknown Owner Private Key" = "Unknown Owner Private Key"; +/* No comment provided by engineer. */ +"Unknown Owner Public Key" = "Unknown Owner Public Key"; + /* No comment provided by engineer. */ "Unknown Payout Address" = "Unknown Payout Address"; +/* No comment provided by engineer. */ +"Unknown Voting Private Key" = "Unknown Voting Private Key"; + /* No comment provided by engineer. */ "Unknown Voting Public Key" = "Unknown Voting Public Key"; @@ -992,6 +1016,9 @@ /* No comment provided by engineer. */ "Voting Keys" = "Chiavi di Voto"; +/* No comment provided by engineer. */ +"Voting Private Key" = "Voting Private Key"; + /* No comment provided by engineer. */ "Voting Public Key" = "Voting Public Key"; diff --git a/DashWallet/ja.lproj/Localizable.strings b/DashWallet/ja.lproj/Localizable.strings index 4536650cb..3123dbd38 100644 --- a/DashWallet/ja.lproj/Localizable.strings +++ b/DashWallet/ja.lproj/Localizable.strings @@ -533,6 +533,9 @@ /* No comment provided by engineer. */ "Operator Keys" = "運用者の諸々のキー"; +/* No comment provided by engineer. */ +"Operator Private Key" = "Operator Private Key"; + /* No comment provided by engineer. */ "Operator Public Key" = "Operator Public Key"; @@ -548,6 +551,9 @@ /* No comment provided by engineer. */ "Owner Private Key" = "Owner Private Key"; +/* No comment provided by engineer. */ +"Owner Public Key" = "Owner Public Key"; + /* No comment provided by engineer. */ "Pay and get paid instantly with easy to use payment flows" = "簡単なお支払い手順で速やかに送金と入金"; @@ -596,6 +602,9 @@ /* No comment provided by engineer. */ "Private key" = "プライベートキー"; +/* No comment provided by engineer. */ +"Private Key" = "Private Key"; + /* No comment provided by engineer. */ "Processing" = "処理中"; @@ -605,6 +614,9 @@ /* No comment provided by engineer. */ "Public key" = "パブリックキー"; +/* No comment provided by engineer. */ +"Public Key" = "Public Key"; + /* No comment provided by engineer. */ "Quick Receive" = "クイック入金"; @@ -686,6 +698,9 @@ /* No comment provided by engineer. */ "Rewards" = "報酬"; +/* Should be understood as `same as owner key` */ +"Same as owner" = "Same as owner"; + /* No comment provided by engineer. */ "Scan" = "スキャン"; @@ -920,15 +935,24 @@ /* No comment provided by engineer. */ "Unable to get new QR code" = "新しいQRコードが取得できません"; +/* No comment provided by engineer. */ +"Unknown Operator Private Key" = "Unknown Operator Private Key"; + /* No comment provided by engineer. */ "Unknown Operator Public Key" = "Unknown Operator Public Key"; /* No comment provided by engineer. */ "Unknown Owner Private Key" = "Unknown Owner Private Key"; +/* No comment provided by engineer. */ +"Unknown Owner Public Key" = "Unknown Owner Public Key"; + /* No comment provided by engineer. */ "Unknown Payout Address" = "Unknown Payout Address"; +/* No comment provided by engineer. */ +"Unknown Voting Private Key" = "Unknown Voting Private Key"; + /* No comment provided by engineer. */ "Unknown Voting Public Key" = "Unknown Voting Public Key"; @@ -992,6 +1016,9 @@ /* No comment provided by engineer. */ "Voting Keys" = "投票の諸々のキー"; +/* No comment provided by engineer. */ +"Voting Private Key" = "Voting Private Key"; + /* No comment provided by engineer. */ "Voting Public Key" = "Voting Public Key"; diff --git a/DashWallet/ko.lproj/Localizable.strings b/DashWallet/ko.lproj/Localizable.strings index 7d135ce7c..ed23e04ee 100644 --- a/DashWallet/ko.lproj/Localizable.strings +++ b/DashWallet/ko.lproj/Localizable.strings @@ -533,6 +533,9 @@ /* No comment provided by engineer. */ "Operator Keys" = "운영자 키"; +/* No comment provided by engineer. */ +"Operator Private Key" = "Operator Private Key"; + /* No comment provided by engineer. */ "Operator Public Key" = "Operator Public Key"; @@ -548,6 +551,9 @@ /* No comment provided by engineer. */ "Owner Private Key" = "Owner Private Key"; +/* No comment provided by engineer. */ +"Owner Public Key" = "Owner Public Key"; + /* No comment provided by engineer. */ "Pay and get paid instantly with easy to use payment flows" = "사용하기 쉬운 지불 플로우로 즉시 송금하고 송금 받으세요"; @@ -596,6 +602,9 @@ /* No comment provided by engineer. */ "Private key" = "비밀 키"; +/* No comment provided by engineer. */ +"Private Key" = "Private Key"; + /* No comment provided by engineer. */ "Processing" = "처리 중"; @@ -605,6 +614,9 @@ /* No comment provided by engineer. */ "Public key" = "공개 키"; +/* No comment provided by engineer. */ +"Public Key" = "Public Key"; + /* No comment provided by engineer. */ "Quick Receive" = "빠른 송금 수령"; @@ -686,6 +698,9 @@ /* No comment provided by engineer. */ "Rewards" = "리워드"; +/* Should be understood as `same as owner key` */ +"Same as owner" = "Same as owner"; + /* No comment provided by engineer. */ "Scan" = "스캔"; @@ -920,15 +935,24 @@ /* No comment provided by engineer. */ "Unable to get new QR code" = "새로운 QR 코드를 불러올 수 없습니다"; +/* No comment provided by engineer. */ +"Unknown Operator Private Key" = "Unknown Operator Private Key"; + /* No comment provided by engineer. */ "Unknown Operator Public Key" = "Unknown Operator Public Key"; /* No comment provided by engineer. */ "Unknown Owner Private Key" = "Unknown Owner Private Key"; +/* No comment provided by engineer. */ +"Unknown Owner Public Key" = "Unknown Owner Public Key"; + /* No comment provided by engineer. */ "Unknown Payout Address" = "Unknown Payout Address"; +/* No comment provided by engineer. */ +"Unknown Voting Private Key" = "Unknown Voting Private Key"; + /* No comment provided by engineer. */ "Unknown Voting Public Key" = "Unknown Voting Public Key"; @@ -992,6 +1016,9 @@ /* No comment provided by engineer. */ "Voting Keys" = "투표 키"; +/* No comment provided by engineer. */ +"Voting Private Key" = "Voting Private Key"; + /* No comment provided by engineer. */ "Voting Public Key" = "Voting Public Key"; diff --git a/DashWallet/nb.lproj/Localizable.strings b/DashWallet/nb.lproj/Localizable.strings index 93d4fc143..b0cfb64a1 100644 --- a/DashWallet/nb.lproj/Localizable.strings +++ b/DashWallet/nb.lproj/Localizable.strings @@ -533,6 +533,9 @@ /* No comment provided by engineer. */ "Operator Keys" = "Operator Keys"; +/* No comment provided by engineer. */ +"Operator Private Key" = "Operator Private Key"; + /* No comment provided by engineer. */ "Operator Public Key" = "Operator Public Key"; @@ -548,6 +551,9 @@ /* No comment provided by engineer. */ "Owner Private Key" = "Owner Private Key"; +/* No comment provided by engineer. */ +"Owner Public Key" = "Owner Public Key"; + /* No comment provided by engineer. */ "Pay and get paid instantly with easy to use payment flows" = "Pay and get paid instantly with easy to use payment flows"; @@ -596,6 +602,9 @@ /* No comment provided by engineer. */ "Private key" = "Private key"; +/* No comment provided by engineer. */ +"Private Key" = "Private Key"; + /* No comment provided by engineer. */ "Processing" = "Processing"; @@ -605,6 +614,9 @@ /* No comment provided by engineer. */ "Public key" = "Public key"; +/* No comment provided by engineer. */ +"Public Key" = "Public Key"; + /* No comment provided by engineer. */ "Quick Receive" = "Quick Receive"; @@ -686,6 +698,9 @@ /* No comment provided by engineer. */ "Rewards" = "Rewards"; +/* Should be understood as `same as owner key` */ +"Same as owner" = "Same as owner"; + /* No comment provided by engineer. */ "Scan" = "Scan"; @@ -920,15 +935,24 @@ /* No comment provided by engineer. */ "Unable to get new QR code" = "Unable to get new QR code"; +/* No comment provided by engineer. */ +"Unknown Operator Private Key" = "Unknown Operator Private Key"; + /* No comment provided by engineer. */ "Unknown Operator Public Key" = "Unknown Operator Public Key"; /* No comment provided by engineer. */ "Unknown Owner Private Key" = "Unknown Owner Private Key"; +/* No comment provided by engineer. */ +"Unknown Owner Public Key" = "Unknown Owner Public Key"; + /* No comment provided by engineer. */ "Unknown Payout Address" = "Unknown Payout Address"; +/* No comment provided by engineer. */ +"Unknown Voting Private Key" = "Unknown Voting Private Key"; + /* No comment provided by engineer. */ "Unknown Voting Public Key" = "Unknown Voting Public Key"; @@ -992,6 +1016,9 @@ /* No comment provided by engineer. */ "Voting Keys" = "Voting Keys"; +/* No comment provided by engineer. */ +"Voting Private Key" = "Voting Private Key"; + /* No comment provided by engineer. */ "Voting Public Key" = "Voting Public Key"; diff --git a/DashWallet/nl.lproj/Localizable.strings b/DashWallet/nl.lproj/Localizable.strings index 8a34bb194..5cb08439c 100644 --- a/DashWallet/nl.lproj/Localizable.strings +++ b/DashWallet/nl.lproj/Localizable.strings @@ -533,6 +533,9 @@ /* No comment provided by engineer. */ "Operator Keys" = "Operator sleutels"; +/* No comment provided by engineer. */ +"Operator Private Key" = "Operator Private Key"; + /* No comment provided by engineer. */ "Operator Public Key" = "Operator Public Key"; @@ -548,6 +551,9 @@ /* No comment provided by engineer. */ "Owner Private Key" = "Owner Private Key"; +/* No comment provided by engineer. */ +"Owner Public Key" = "Owner Public Key"; + /* No comment provided by engineer. */ "Pay and get paid instantly with easy to use payment flows" = "Betaal en word betaald met eenvoudig te gebruiken betaalverkeer"; @@ -596,6 +602,9 @@ /* No comment provided by engineer. */ "Private key" = "persoonlijke sleutel"; +/* No comment provided by engineer. */ +"Private Key" = "Private Key"; + /* No comment provided by engineer. */ "Processing" = "Verwerken"; @@ -605,6 +614,9 @@ /* No comment provided by engineer. */ "Public key" = "Publieke sleutel"; +/* No comment provided by engineer. */ +"Public Key" = "Public Key"; + /* No comment provided by engineer. */ "Quick Receive" = "Snel Ontvangen"; @@ -686,6 +698,9 @@ /* No comment provided by engineer. */ "Rewards" = "Beloningen"; +/* Should be understood as `same as owner key` */ +"Same as owner" = "Same as owner"; + /* No comment provided by engineer. */ "Scan" = "Scan"; @@ -920,15 +935,24 @@ /* No comment provided by engineer. */ "Unable to get new QR code" = "Verkrijgen van nieuwe QR-code is mislukt"; +/* No comment provided by engineer. */ +"Unknown Operator Private Key" = "Unknown Operator Private Key"; + /* No comment provided by engineer. */ "Unknown Operator Public Key" = "Unknown Operator Public Key"; /* No comment provided by engineer. */ "Unknown Owner Private Key" = "Unknown Owner Private Key"; +/* No comment provided by engineer. */ +"Unknown Owner Public Key" = "Unknown Owner Public Key"; + /* No comment provided by engineer. */ "Unknown Payout Address" = "Unknown Payout Address"; +/* No comment provided by engineer. */ +"Unknown Voting Private Key" = "Unknown Voting Private Key"; + /* No comment provided by engineer. */ "Unknown Voting Public Key" = "Unknown Voting Public Key"; @@ -992,6 +1016,9 @@ /* No comment provided by engineer. */ "Voting Keys" = "Stem sleutels"; +/* No comment provided by engineer. */ +"Voting Private Key" = "Voting Private Key"; + /* No comment provided by engineer. */ "Voting Public Key" = "Voting Public Key"; diff --git a/DashWallet/pl.lproj/Localizable.strings b/DashWallet/pl.lproj/Localizable.strings index 323e15319..5c59a716d 100644 --- a/DashWallet/pl.lproj/Localizable.strings +++ b/DashWallet/pl.lproj/Localizable.strings @@ -533,6 +533,9 @@ /* No comment provided by engineer. */ "Operator Keys" = "Klucze operatora"; +/* No comment provided by engineer. */ +"Operator Private Key" = "Operator Private Key"; + /* No comment provided by engineer. */ "Operator Public Key" = "Operator Public Key"; @@ -548,6 +551,9 @@ /* No comment provided by engineer. */ "Owner Private Key" = "Owner Private Key"; +/* No comment provided by engineer. */ +"Owner Public Key" = "Owner Public Key"; + /* No comment provided by engineer. */ "Pay and get paid instantly with easy to use payment flows" = "Płać i otrzymuj natychmiastowe płatności dzięki łatwym w użyciu przepływom płatności"; @@ -596,6 +602,9 @@ /* No comment provided by engineer. */ "Private key" = "Klucz prywatny"; +/* No comment provided by engineer. */ +"Private Key" = "Private Key"; + /* No comment provided by engineer. */ "Processing" = "Przetwarzanie"; @@ -605,6 +614,9 @@ /* No comment provided by engineer. */ "Public key" = "Klucz publiczny"; +/* No comment provided by engineer. */ +"Public Key" = "Public Key"; + /* No comment provided by engineer. */ "Quick Receive" = "Szybki Odbierz"; @@ -686,6 +698,9 @@ /* No comment provided by engineer. */ "Rewards" = "Nagrody"; +/* Should be understood as `same as owner key` */ +"Same as owner" = "Same as owner"; + /* No comment provided by engineer. */ "Scan" = "Zeskanuj"; @@ -920,15 +935,24 @@ /* No comment provided by engineer. */ "Unable to get new QR code" = "Pobranie nowego kodu QR niemożliwe"; +/* No comment provided by engineer. */ +"Unknown Operator Private Key" = "Unknown Operator Private Key"; + /* No comment provided by engineer. */ "Unknown Operator Public Key" = "Unknown Operator Public Key"; /* No comment provided by engineer. */ "Unknown Owner Private Key" = "Unknown Owner Private Key"; +/* No comment provided by engineer. */ +"Unknown Owner Public Key" = "Unknown Owner Public Key"; + /* No comment provided by engineer. */ "Unknown Payout Address" = "Unknown Payout Address"; +/* No comment provided by engineer. */ +"Unknown Voting Private Key" = "Unknown Voting Private Key"; + /* No comment provided by engineer. */ "Unknown Voting Public Key" = "Unknown Voting Public Key"; @@ -992,6 +1016,9 @@ /* No comment provided by engineer. */ "Voting Keys" = "Klucze głosujące"; +/* No comment provided by engineer. */ +"Voting Private Key" = "Voting Private Key"; + /* No comment provided by engineer. */ "Voting Public Key" = "Voting Public Key"; diff --git a/DashWallet/pt.lproj/Localizable.strings b/DashWallet/pt.lproj/Localizable.strings index 4c6bf6b75..bb810d468 100644 --- a/DashWallet/pt.lproj/Localizable.strings +++ b/DashWallet/pt.lproj/Localizable.strings @@ -533,6 +533,9 @@ /* No comment provided by engineer. */ "Operator Keys" = "Chaves do Operador"; +/* No comment provided by engineer. */ +"Operator Private Key" = "Operator Private Key"; + /* No comment provided by engineer. */ "Operator Public Key" = "Operator Public Key"; @@ -548,6 +551,9 @@ /* No comment provided by engineer. */ "Owner Private Key" = "Owner Private Key"; +/* No comment provided by engineer. */ +"Owner Public Key" = "Owner Public Key"; + /* No comment provided by engineer. */ "Pay and get paid instantly with easy to use payment flows" = "Pague e receba imediatamente com fluxos de pagamento fáceis de usar"; @@ -596,6 +602,9 @@ /* No comment provided by engineer. */ "Private key" = "Chave privada"; +/* No comment provided by engineer. */ +"Private Key" = "Private Key"; + /* No comment provided by engineer. */ "Processing" = "Processando"; @@ -605,6 +614,9 @@ /* No comment provided by engineer. */ "Public key" = "Chave pública"; +/* No comment provided by engineer. */ +"Public Key" = "Public Key"; + /* No comment provided by engineer. */ "Quick Receive" = "Receber Rapidamente"; @@ -686,6 +698,9 @@ /* No comment provided by engineer. */ "Rewards" = "Recompensas"; +/* Should be understood as `same as owner key` */ +"Same as owner" = "Same as owner"; + /* No comment provided by engineer. */ "Scan" = "Escanear"; @@ -920,15 +935,24 @@ /* No comment provided by engineer. */ "Unable to get new QR code" = "Não foi possível obter um novo código QR"; +/* No comment provided by engineer. */ +"Unknown Operator Private Key" = "Unknown Operator Private Key"; + /* No comment provided by engineer. */ "Unknown Operator Public Key" = "Unknown Operator Public Key"; /* No comment provided by engineer. */ "Unknown Owner Private Key" = "Unknown Owner Private Key"; +/* No comment provided by engineer. */ +"Unknown Owner Public Key" = "Unknown Owner Public Key"; + /* No comment provided by engineer. */ "Unknown Payout Address" = "Unknown Payout Address"; +/* No comment provided by engineer. */ +"Unknown Voting Private Key" = "Unknown Voting Private Key"; + /* No comment provided by engineer. */ "Unknown Voting Public Key" = "Unknown Voting Public Key"; @@ -992,6 +1016,9 @@ /* No comment provided by engineer. */ "Voting Keys" = "Chaves de Votação"; +/* No comment provided by engineer. */ +"Voting Private Key" = "Voting Private Key"; + /* No comment provided by engineer. */ "Voting Public Key" = "Voting Public Key"; diff --git a/DashWallet/ru.lproj/Localizable.strings b/DashWallet/ru.lproj/Localizable.strings index a05ed5c3d..2d3c9aece 100644 --- a/DashWallet/ru.lproj/Localizable.strings +++ b/DashWallet/ru.lproj/Localizable.strings @@ -533,6 +533,9 @@ /* No comment provided by engineer. */ "Operator Keys" = "Ключи оператора"; +/* No comment provided by engineer. */ +"Operator Private Key" = "Operator Private Key"; + /* No comment provided by engineer. */ "Operator Public Key" = "Operator Public Key"; @@ -548,6 +551,9 @@ /* No comment provided by engineer. */ "Owner Private Key" = "Owner Private Key"; +/* No comment provided by engineer. */ +"Owner Public Key" = "Owner Public Key"; + /* No comment provided by engineer. */ "Pay and get paid instantly with easy to use payment flows" = "Платите и получайте переводы мгновенно с помощью простых в использовании механизмов платежей"; @@ -596,6 +602,9 @@ /* No comment provided by engineer. */ "Private key" = "Приватный ключ"; +/* No comment provided by engineer. */ +"Private Key" = "Private Key"; + /* No comment provided by engineer. */ "Processing" = "Обрабатывается"; @@ -605,6 +614,9 @@ /* No comment provided by engineer. */ "Public key" = "Публичный ключ"; +/* No comment provided by engineer. */ +"Public Key" = "Public Key"; + /* No comment provided by engineer. */ "Quick Receive" = "Получить быстро"; @@ -686,6 +698,9 @@ /* No comment provided by engineer. */ "Rewards" = "Вознаграждения"; +/* Should be understood as `same as owner key` */ +"Same as owner" = "Same as owner"; + /* No comment provided by engineer. */ "Scan" = "Скан."; @@ -920,15 +935,24 @@ /* No comment provided by engineer. */ "Unable to get new QR code" = "Не удалось получить новый QR-код"; +/* No comment provided by engineer. */ +"Unknown Operator Private Key" = "Unknown Operator Private Key"; + /* No comment provided by engineer. */ "Unknown Operator Public Key" = "Unknown Operator Public Key"; /* No comment provided by engineer. */ "Unknown Owner Private Key" = "Unknown Owner Private Key"; +/* No comment provided by engineer. */ +"Unknown Owner Public Key" = "Unknown Owner Public Key"; + /* No comment provided by engineer. */ "Unknown Payout Address" = "Unknown Payout Address"; +/* No comment provided by engineer. */ +"Unknown Voting Private Key" = "Unknown Voting Private Key"; + /* No comment provided by engineer. */ "Unknown Voting Public Key" = "Unknown Voting Public Key"; @@ -992,6 +1016,9 @@ /* No comment provided by engineer. */ "Voting Keys" = "Ключи голосования"; +/* No comment provided by engineer. */ +"Voting Private Key" = "Voting Private Key"; + /* No comment provided by engineer. */ "Voting Public Key" = "Voting Public Key"; diff --git a/DashWallet/sk.lproj/Localizable.strings b/DashWallet/sk.lproj/Localizable.strings index 960005bca..f54266385 100644 --- a/DashWallet/sk.lproj/Localizable.strings +++ b/DashWallet/sk.lproj/Localizable.strings @@ -533,6 +533,9 @@ /* No comment provided by engineer. */ "Operator Keys" = "Kľúče operátora"; +/* No comment provided by engineer. */ +"Operator Private Key" = "Operator Private Key"; + /* No comment provided by engineer. */ "Operator Public Key" = "Operator Public Key"; @@ -548,6 +551,9 @@ /* No comment provided by engineer. */ "Owner Private Key" = "Owner Private Key"; +/* No comment provided by engineer. */ +"Owner Public Key" = "Owner Public Key"; + /* No comment provided by engineer. */ "Pay and get paid instantly with easy to use payment flows" = "Plaťte a dostaňte okamžite zaplatené pomocou ľahko použiteľných platobných tokov"; @@ -596,6 +602,9 @@ /* No comment provided by engineer. */ "Private key" = "Privátny kľúč"; +/* No comment provided by engineer. */ +"Private Key" = "Private Key"; + /* No comment provided by engineer. */ "Processing" = "Spracováva sa"; @@ -605,6 +614,9 @@ /* No comment provided by engineer. */ "Public key" = "Verejný kľúč"; +/* No comment provided by engineer. */ +"Public Key" = "Public Key"; + /* No comment provided by engineer. */ "Quick Receive" = "Rýchlo prijať"; @@ -686,6 +698,9 @@ /* No comment provided by engineer. */ "Rewards" = "Odmeny"; +/* Should be understood as `same as owner key` */ +"Same as owner" = "Same as owner"; + /* No comment provided by engineer. */ "Scan" = "Skenovať"; @@ -920,15 +935,24 @@ /* No comment provided by engineer. */ "Unable to get new QR code" = "Nepodarilo sa získať nový QR kód"; +/* No comment provided by engineer. */ +"Unknown Operator Private Key" = "Unknown Operator Private Key"; + /* No comment provided by engineer. */ "Unknown Operator Public Key" = "Unknown Operator Public Key"; /* No comment provided by engineer. */ "Unknown Owner Private Key" = "Unknown Owner Private Key"; +/* No comment provided by engineer. */ +"Unknown Owner Public Key" = "Unknown Owner Public Key"; + /* No comment provided by engineer. */ "Unknown Payout Address" = "Unknown Payout Address"; +/* No comment provided by engineer. */ +"Unknown Voting Private Key" = "Unknown Voting Private Key"; + /* No comment provided by engineer. */ "Unknown Voting Public Key" = "Unknown Voting Public Key"; @@ -992,6 +1016,9 @@ /* No comment provided by engineer. */ "Voting Keys" = "Hlasovacie kľúče"; +/* No comment provided by engineer. */ +"Voting Private Key" = "Voting Private Key"; + /* No comment provided by engineer. */ "Voting Public Key" = "Voting Public Key"; diff --git a/DashWallet/sq.lproj/Localizable.strings b/DashWallet/sq.lproj/Localizable.strings index b338ea759..5e85a7d58 100644 --- a/DashWallet/sq.lproj/Localizable.strings +++ b/DashWallet/sq.lproj/Localizable.strings @@ -533,6 +533,9 @@ /* No comment provided by engineer. */ "Operator Keys" = "Operator Keys"; +/* No comment provided by engineer. */ +"Operator Private Key" = "Operator Private Key"; + /* No comment provided by engineer. */ "Operator Public Key" = "Operator Public Key"; @@ -548,6 +551,9 @@ /* No comment provided by engineer. */ "Owner Private Key" = "Owner Private Key"; +/* No comment provided by engineer. */ +"Owner Public Key" = "Owner Public Key"; + /* No comment provided by engineer. */ "Pay and get paid instantly with easy to use payment flows" = "Pay and get paid instantly with easy to use payment flows"; @@ -596,6 +602,9 @@ /* No comment provided by engineer. */ "Private key" = "Private key"; +/* No comment provided by engineer. */ +"Private Key" = "Private Key"; + /* No comment provided by engineer. */ "Processing" = "Processing"; @@ -605,6 +614,9 @@ /* No comment provided by engineer. */ "Public key" = "Public key"; +/* No comment provided by engineer. */ +"Public Key" = "Public Key"; + /* No comment provided by engineer. */ "Quick Receive" = "Quick Receive"; @@ -686,6 +698,9 @@ /* No comment provided by engineer. */ "Rewards" = "Rewards"; +/* Should be understood as `same as owner key` */ +"Same as owner" = "Same as owner"; + /* No comment provided by engineer. */ "Scan" = "Skano"; @@ -920,15 +935,24 @@ /* No comment provided by engineer. */ "Unable to get new QR code" = "Unable to get new QR code"; +/* No comment provided by engineer. */ +"Unknown Operator Private Key" = "Unknown Operator Private Key"; + /* No comment provided by engineer. */ "Unknown Operator Public Key" = "Unknown Operator Public Key"; /* No comment provided by engineer. */ "Unknown Owner Private Key" = "Unknown Owner Private Key"; +/* No comment provided by engineer. */ +"Unknown Owner Public Key" = "Unknown Owner Public Key"; + /* No comment provided by engineer. */ "Unknown Payout Address" = "Unknown Payout Address"; +/* No comment provided by engineer. */ +"Unknown Voting Private Key" = "Unknown Voting Private Key"; + /* No comment provided by engineer. */ "Unknown Voting Public Key" = "Unknown Voting Public Key"; @@ -992,6 +1016,9 @@ /* No comment provided by engineer. */ "Voting Keys" = "Voting Keys"; +/* No comment provided by engineer. */ +"Voting Private Key" = "Voting Private Key"; + /* No comment provided by engineer. */ "Voting Public Key" = "Voting Public Key"; diff --git a/DashWallet/sv.lproj/Localizable.strings b/DashWallet/sv.lproj/Localizable.strings index 39f116f77..fdd5621c2 100644 --- a/DashWallet/sv.lproj/Localizable.strings +++ b/DashWallet/sv.lproj/Localizable.strings @@ -533,6 +533,9 @@ /* No comment provided by engineer. */ "Operator Keys" = "Operator Keys"; +/* No comment provided by engineer. */ +"Operator Private Key" = "Operator Private Key"; + /* No comment provided by engineer. */ "Operator Public Key" = "Operator Public Key"; @@ -548,6 +551,9 @@ /* No comment provided by engineer. */ "Owner Private Key" = "Owner Private Key"; +/* No comment provided by engineer. */ +"Owner Public Key" = "Owner Public Key"; + /* No comment provided by engineer. */ "Pay and get paid instantly with easy to use payment flows" = "Pay and get paid instantly with easy to use payment flows"; @@ -596,6 +602,9 @@ /* No comment provided by engineer. */ "Private key" = "Private key"; +/* No comment provided by engineer. */ +"Private Key" = "Private Key"; + /* No comment provided by engineer. */ "Processing" = "Processing"; @@ -605,6 +614,9 @@ /* No comment provided by engineer. */ "Public key" = "Public key"; +/* No comment provided by engineer. */ +"Public Key" = "Public Key"; + /* No comment provided by engineer. */ "Quick Receive" = "Quick Receive"; @@ -686,6 +698,9 @@ /* No comment provided by engineer. */ "Rewards" = "Rewards"; +/* Should be understood as `same as owner key` */ +"Same as owner" = "Same as owner"; + /* No comment provided by engineer. */ "Scan" = "Skanna"; @@ -920,15 +935,24 @@ /* No comment provided by engineer. */ "Unable to get new QR code" = "Unable to get new QR code"; +/* No comment provided by engineer. */ +"Unknown Operator Private Key" = "Unknown Operator Private Key"; + /* No comment provided by engineer. */ "Unknown Operator Public Key" = "Unknown Operator Public Key"; /* No comment provided by engineer. */ "Unknown Owner Private Key" = "Unknown Owner Private Key"; +/* No comment provided by engineer. */ +"Unknown Owner Public Key" = "Unknown Owner Public Key"; + /* No comment provided by engineer. */ "Unknown Payout Address" = "Unknown Payout Address"; +/* No comment provided by engineer. */ +"Unknown Voting Private Key" = "Unknown Voting Private Key"; + /* No comment provided by engineer. */ "Unknown Voting Public Key" = "Unknown Voting Public Key"; @@ -992,6 +1016,9 @@ /* No comment provided by engineer. */ "Voting Keys" = "Voting Keys"; +/* No comment provided by engineer. */ +"Voting Private Key" = "Voting Private Key"; + /* No comment provided by engineer. */ "Voting Public Key" = "Voting Public Key"; diff --git a/DashWallet/th.lproj/Localizable.strings b/DashWallet/th.lproj/Localizable.strings index 772bc2821..24e2f5d9b 100644 --- a/DashWallet/th.lproj/Localizable.strings +++ b/DashWallet/th.lproj/Localizable.strings @@ -533,6 +533,9 @@ /* No comment provided by engineer. */ "Operator Keys" = "ตัวดำเนินการ Keys"; +/* No comment provided by engineer. */ +"Operator Private Key" = "Operator Private Key"; + /* No comment provided by engineer. */ "Operator Public Key" = "Operator Public Key"; @@ -548,6 +551,9 @@ /* No comment provided by engineer. */ "Owner Private Key" = "Owner Private Key"; +/* No comment provided by engineer. */ +"Owner Public Key" = "Owner Public Key"; + /* No comment provided by engineer. */ "Pay and get paid instantly with easy to use payment flows" = "ชำระเงินและรับเงินทันทีด้วยกระบวนการชำระเงินที่ใช้งานง่าย"; @@ -596,6 +602,9 @@ /* No comment provided by engineer. */ "Private key" = "Private key"; +/* No comment provided by engineer. */ +"Private Key" = "Private Key"; + /* No comment provided by engineer. */ "Processing" = "กำลังประมวลผล"; @@ -605,6 +614,9 @@ /* No comment provided by engineer. */ "Public key" = "Public key"; +/* No comment provided by engineer. */ +"Public Key" = "Public Key"; + /* No comment provided by engineer. */ "Quick Receive" = "ได้รับอย่างรวดเร็ว"; @@ -686,6 +698,9 @@ /* No comment provided by engineer. */ "Rewards" = "รางวัล"; +/* Should be understood as `same as owner key` */ +"Same as owner" = "Same as owner"; + /* No comment provided by engineer. */ "Scan" = "สแกน"; @@ -920,15 +935,24 @@ /* No comment provided by engineer. */ "Unable to get new QR code" = "ไม่สามารถได้รับโค้ด QR ใหม่"; +/* No comment provided by engineer. */ +"Unknown Operator Private Key" = "Unknown Operator Private Key"; + /* No comment provided by engineer. */ "Unknown Operator Public Key" = "Unknown Operator Public Key"; /* No comment provided by engineer. */ "Unknown Owner Private Key" = "Unknown Owner Private Key"; +/* No comment provided by engineer. */ +"Unknown Owner Public Key" = "Unknown Owner Public Key"; + /* No comment provided by engineer. */ "Unknown Payout Address" = "Unknown Payout Address"; +/* No comment provided by engineer. */ +"Unknown Voting Private Key" = "Unknown Voting Private Key"; + /* No comment provided by engineer. */ "Unknown Voting Public Key" = "Unknown Voting Public Key"; @@ -992,6 +1016,9 @@ /* No comment provided by engineer. */ "Voting Keys" = "Voting Keys"; +/* No comment provided by engineer. */ +"Voting Private Key" = "Voting Private Key"; + /* No comment provided by engineer. */ "Voting Public Key" = "Voting Public Key"; diff --git a/DashWallet/tr.lproj/Localizable.strings b/DashWallet/tr.lproj/Localizable.strings index ff52054b4..a57446f79 100644 --- a/DashWallet/tr.lproj/Localizable.strings +++ b/DashWallet/tr.lproj/Localizable.strings @@ -533,6 +533,9 @@ /* No comment provided by engineer. */ "Operator Keys" = "Operatör Anahtarları"; +/* No comment provided by engineer. */ +"Operator Private Key" = "Operator Private Key"; + /* No comment provided by engineer. */ "Operator Public Key" = "Operator Public Key"; @@ -548,6 +551,9 @@ /* No comment provided by engineer. */ "Owner Private Key" = "Owner Private Key"; +/* No comment provided by engineer. */ +"Owner Public Key" = "Owner Public Key"; + /* No comment provided by engineer. */ "Pay and get paid instantly with easy to use payment flows" = "Kullanımı kolay ödeme akımlarıyla anında ödeme yapın ve alın"; @@ -596,6 +602,9 @@ /* No comment provided by engineer. */ "Private key" = "Özel anahtar"; +/* No comment provided by engineer. */ +"Private Key" = "Private Key"; + /* No comment provided by engineer. */ "Processing" = "İşleniyor"; @@ -605,6 +614,9 @@ /* No comment provided by engineer. */ "Public key" = "Herkese açık anahtar"; +/* No comment provided by engineer. */ +"Public Key" = "Public Key"; + /* No comment provided by engineer. */ "Quick Receive" = "Hızlı Al"; @@ -686,6 +698,9 @@ /* No comment provided by engineer. */ "Rewards" = "Ödüller"; +/* Should be understood as `same as owner key` */ +"Same as owner" = "Same as owner"; + /* No comment provided by engineer. */ "Scan" = "Tara"; @@ -920,15 +935,24 @@ /* No comment provided by engineer. */ "Unable to get new QR code" = "Yeni QR kod alınamıyor"; +/* No comment provided by engineer. */ +"Unknown Operator Private Key" = "Unknown Operator Private Key"; + /* No comment provided by engineer. */ "Unknown Operator Public Key" = "Unknown Operator Public Key"; /* No comment provided by engineer. */ "Unknown Owner Private Key" = "Unknown Owner Private Key"; +/* No comment provided by engineer. */ +"Unknown Owner Public Key" = "Unknown Owner Public Key"; + /* No comment provided by engineer. */ "Unknown Payout Address" = "Unknown Payout Address"; +/* No comment provided by engineer. */ +"Unknown Voting Private Key" = "Unknown Voting Private Key"; + /* No comment provided by engineer. */ "Unknown Voting Public Key" = "Unknown Voting Public Key"; @@ -992,6 +1016,9 @@ /* No comment provided by engineer. */ "Voting Keys" = "Oy Verme Anahtarları"; +/* No comment provided by engineer. */ +"Voting Private Key" = "Voting Private Key"; + /* No comment provided by engineer. */ "Voting Public Key" = "Voting Public Key"; diff --git a/DashWallet/vi.lproj/Localizable.strings b/DashWallet/vi.lproj/Localizable.strings index d4793289c..e9bf9fb69 100644 --- a/DashWallet/vi.lproj/Localizable.strings +++ b/DashWallet/vi.lproj/Localizable.strings @@ -533,6 +533,9 @@ /* No comment provided by engineer. */ "Operator Keys" = "Chìa khoá của người vận hành"; +/* No comment provided by engineer. */ +"Operator Private Key" = "Operator Private Key"; + /* No comment provided by engineer. */ "Operator Public Key" = "Operator Public Key"; @@ -548,6 +551,9 @@ /* No comment provided by engineer. */ "Owner Private Key" = "Owner Private Key"; +/* No comment provided by engineer. */ +"Owner Public Key" = "Owner Public Key"; + /* No comment provided by engineer. */ "Pay and get paid instantly with easy to use payment flows" = "Trả và nhận một cách tức thời một cách dễ dàng bằng cách sử dụng các quy trình thanh toán"; @@ -596,6 +602,9 @@ /* No comment provided by engineer. */ "Private key" = "Khoá riêng"; +/* No comment provided by engineer. */ +"Private Key" = "Private Key"; + /* No comment provided by engineer. */ "Processing" = "Đang xử lý"; @@ -605,6 +614,9 @@ /* No comment provided by engineer. */ "Public key" = "Khoá công khai"; +/* No comment provided by engineer. */ +"Public Key" = "Public Key"; + /* No comment provided by engineer. */ "Quick Receive" = "Nhận nhanh"; @@ -686,6 +698,9 @@ /* No comment provided by engineer. */ "Rewards" = "Phần thưởng"; +/* Should be understood as `same as owner key` */ +"Same as owner" = "Same as owner"; + /* No comment provided by engineer. */ "Scan" = "Quét"; @@ -920,15 +935,24 @@ /* No comment provided by engineer. */ "Unable to get new QR code" = "Không thể lấy mã QR mới"; +/* No comment provided by engineer. */ +"Unknown Operator Private Key" = "Unknown Operator Private Key"; + /* No comment provided by engineer. */ "Unknown Operator Public Key" = "Unknown Operator Public Key"; /* No comment provided by engineer. */ "Unknown Owner Private Key" = "Unknown Owner Private Key"; +/* No comment provided by engineer. */ +"Unknown Owner Public Key" = "Unknown Owner Public Key"; + /* No comment provided by engineer. */ "Unknown Payout Address" = "Unknown Payout Address"; +/* No comment provided by engineer. */ +"Unknown Voting Private Key" = "Unknown Voting Private Key"; + /* No comment provided by engineer. */ "Unknown Voting Public Key" = "Unknown Voting Public Key"; @@ -992,6 +1016,9 @@ /* No comment provided by engineer. */ "Voting Keys" = "Khoá bỏ phiếu"; +/* No comment provided by engineer. */ +"Voting Private Key" = "Voting Private Key"; + /* No comment provided by engineer. */ "Voting Public Key" = "Voting Public Key"; diff --git a/DashWallet/zh-Hans.lproj/Localizable.strings b/DashWallet/zh-Hans.lproj/Localizable.strings index 0aff5c3eb..9613e6f39 100644 --- a/DashWallet/zh-Hans.lproj/Localizable.strings +++ b/DashWallet/zh-Hans.lproj/Localizable.strings @@ -533,6 +533,9 @@ /* No comment provided by engineer. */ "Operator Keys" = "Operator Keys"; +/* No comment provided by engineer. */ +"Operator Private Key" = "Operator Private Key"; + /* No comment provided by engineer. */ "Operator Public Key" = "Operator Public Key"; @@ -548,6 +551,9 @@ /* No comment provided by engineer. */ "Owner Private Key" = "Owner Private Key"; +/* No comment provided by engineer. */ +"Owner Public Key" = "Owner Public Key"; + /* No comment provided by engineer. */ "Pay and get paid instantly with easy to use payment flows" = "Pay and get paid instantly with easy to use payment flows"; @@ -596,6 +602,9 @@ /* No comment provided by engineer. */ "Private key" = "Private key"; +/* No comment provided by engineer. */ +"Private Key" = "Private Key"; + /* No comment provided by engineer. */ "Processing" = "Processing"; @@ -605,6 +614,9 @@ /* No comment provided by engineer. */ "Public key" = "Public key"; +/* No comment provided by engineer. */ +"Public Key" = "Public Key"; + /* No comment provided by engineer. */ "Quick Receive" = "Quick Receive"; @@ -686,6 +698,9 @@ /* No comment provided by engineer. */ "Rewards" = "Rewards"; +/* Should be understood as `same as owner key` */ +"Same as owner" = "Same as owner"; + /* No comment provided by engineer. */ "Scan" = "Scan"; @@ -920,15 +935,24 @@ /* No comment provided by engineer. */ "Unable to get new QR code" = "Unable to get new QR code"; +/* No comment provided by engineer. */ +"Unknown Operator Private Key" = "Unknown Operator Private Key"; + /* No comment provided by engineer. */ "Unknown Operator Public Key" = "Unknown Operator Public Key"; /* No comment provided by engineer. */ "Unknown Owner Private Key" = "Unknown Owner Private Key"; +/* No comment provided by engineer. */ +"Unknown Owner Public Key" = "Unknown Owner Public Key"; + /* No comment provided by engineer. */ "Unknown Payout Address" = "Unknown Payout Address"; +/* No comment provided by engineer. */ +"Unknown Voting Private Key" = "Unknown Voting Private Key"; + /* No comment provided by engineer. */ "Unknown Voting Public Key" = "Unknown Voting Public Key"; @@ -992,6 +1016,9 @@ /* No comment provided by engineer. */ "Voting Keys" = "Voting Keys"; +/* No comment provided by engineer. */ +"Voting Private Key" = "Voting Private Key"; + /* No comment provided by engineer. */ "Voting Public Key" = "Voting Public Key"; diff --git a/DashWallet/zh-Hant-TW.lproj/Localizable.strings b/DashWallet/zh-Hant-TW.lproj/Localizable.strings index 22e15be78..05a869a17 100644 --- a/DashWallet/zh-Hant-TW.lproj/Localizable.strings +++ b/DashWallet/zh-Hant-TW.lproj/Localizable.strings @@ -533,6 +533,9 @@ /* No comment provided by engineer. */ "Operator Keys" = "Operator Keys"; +/* No comment provided by engineer. */ +"Operator Private Key" = "Operator Private Key"; + /* No comment provided by engineer. */ "Operator Public Key" = "Operator Public Key"; @@ -548,6 +551,9 @@ /* No comment provided by engineer. */ "Owner Private Key" = "Owner Private Key"; +/* No comment provided by engineer. */ +"Owner Public Key" = "Owner Public Key"; + /* No comment provided by engineer. */ "Pay and get paid instantly with easy to use payment flows" = "Pay and get paid instantly with easy to use payment flows"; @@ -596,6 +602,9 @@ /* No comment provided by engineer. */ "Private key" = "Private key"; +/* No comment provided by engineer. */ +"Private Key" = "Private Key"; + /* No comment provided by engineer. */ "Processing" = "Processing"; @@ -605,6 +614,9 @@ /* No comment provided by engineer. */ "Public key" = "Public key"; +/* No comment provided by engineer. */ +"Public Key" = "Public Key"; + /* No comment provided by engineer. */ "Quick Receive" = "Quick Receive"; @@ -686,6 +698,9 @@ /* No comment provided by engineer. */ "Rewards" = "Rewards"; +/* Should be understood as `same as owner key` */ +"Same as owner" = "Same as owner"; + /* No comment provided by engineer. */ "Scan" = "Scan"; @@ -920,15 +935,24 @@ /* No comment provided by engineer. */ "Unable to get new QR code" = "Unable to get new QR code"; +/* No comment provided by engineer. */ +"Unknown Operator Private Key" = "Unknown Operator Private Key"; + /* No comment provided by engineer. */ "Unknown Operator Public Key" = "Unknown Operator Public Key"; /* No comment provided by engineer. */ "Unknown Owner Private Key" = "Unknown Owner Private Key"; +/* No comment provided by engineer. */ +"Unknown Owner Public Key" = "Unknown Owner Public Key"; + /* No comment provided by engineer. */ "Unknown Payout Address" = "Unknown Payout Address"; +/* No comment provided by engineer. */ +"Unknown Voting Private Key" = "Unknown Voting Private Key"; + /* No comment provided by engineer. */ "Unknown Voting Public Key" = "Unknown Voting Public Key"; @@ -992,6 +1016,9 @@ /* No comment provided by engineer. */ "Voting Keys" = "Voting Keys"; +/* No comment provided by engineer. */ +"Voting Private Key" = "Voting Private Key"; + /* No comment provided by engineer. */ "Voting Public Key" = "Voting Public Key"; diff --git a/Podfile.lock b/Podfile.lock index 49cd04564..0d9ac1512 100644 --- a/Podfile.lock +++ b/Podfile.lock @@ -64,6 +64,6 @@ SPEC CHECKSUMS: secp256k1_dash: 7fdbc23e3e8a27d522ec211b874d97fb091c2b23 UIViewController-KeyboardAdditions: a691dc7e63a49854d341455a778ee8497dfc4662 -PODFILE CHECKSUM: ae7774ceb58dfa5c228a50c4cb89bb883777ea95 +PODFILE CHECKSUM: 8bb12973c412ac8253f2383a41c1d525d27538cd -COCOAPODS: 1.8.4 +COCOAPODS: 1.9.1 From ddb4891708127e2b33e34dc9791852856aaed701 Mon Sep 17 00:00:00 2001 From: Quantum Explorer Date: Sun, 27 Jun 2021 10:08:55 +0700 Subject: [PATCH 32/34] bump to v 5.6.0 --- DashWallet.xcodeproj/project.pbxproj | 32 ++++++++++++++-------------- 1 file changed, 16 insertions(+), 16 deletions(-) diff --git a/DashWallet.xcodeproj/project.pbxproj b/DashWallet.xcodeproj/project.pbxproj index aa037a310..27505015c 100644 --- a/DashWallet.xcodeproj/project.pbxproj +++ b/DashWallet.xcodeproj/project.pbxproj @@ -5549,7 +5549,7 @@ ); INFOPLIST_FILE = DashWallet/Info.plist; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; - MARKETING_VERSION = 5.5.1; + MARKETING_VERSION = 5.6.0; PRODUCT_BUNDLE_IDENTIFIER = org.dashfoundation.dash; PRODUCT_NAME = "$(TARGET_NAME)"; PROVISIONING_PROFILE = ""; @@ -5579,7 +5579,7 @@ ); INFOPLIST_FILE = DashWallet/Info.plist; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; - MARKETING_VERSION = 5.5.1; + MARKETING_VERSION = 5.6.0; PRODUCT_BUNDLE_IDENTIFIER = org.dashfoundation.dash; PRODUCT_NAME = "$(TARGET_NAME)"; SWIFT_OBJC_BRIDGING_HEADER = ""; @@ -5656,7 +5656,7 @@ DEVELOPMENT_TEAM = 44RJ69WHFF; IBSC_MODULE = WatchApp_Extension; INFOPLIST_FILE = WatchApp/Info.plist; - MARKETING_VERSION = 5.5.1; + MARKETING_VERSION = 5.6.0; PRODUCT_BUNDLE_IDENTIFIER = org.dashfoundation.dash.watchkitapp; PRODUCT_NAME = "$(TARGET_NAME)"; SDKROOT = watchos; @@ -5677,7 +5677,7 @@ DEVELOPMENT_TEAM = 44RJ69WHFF; IBSC_MODULE = WatchApp_Extension; INFOPLIST_FILE = WatchApp/Info.plist; - MARKETING_VERSION = 5.5.1; + MARKETING_VERSION = 5.6.0; PRODUCT_BUNDLE_IDENTIFIER = org.dashfoundation.dash.watchkitapp; PRODUCT_NAME = "$(TARGET_NAME)"; SDKROOT = watchos; @@ -5696,7 +5696,7 @@ DEVELOPMENT_TEAM = 44RJ69WHFF; INFOPLIST_FILE = "WatchApp Extension/Info.plist"; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @executable_path/../../Frameworks"; - MARKETING_VERSION = 5.5.1; + MARKETING_VERSION = 5.6.0; PRODUCT_BUNDLE_IDENTIFIER = org.dashfoundation.dash.watchkitapp.watchkitextension; PRODUCT_NAME = "${TARGET_NAME}"; SDKROOT = watchos; @@ -5717,7 +5717,7 @@ DEVELOPMENT_TEAM = 44RJ69WHFF; INFOPLIST_FILE = "WatchApp Extension/Info.plist"; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @executable_path/../../Frameworks"; - MARKETING_VERSION = 5.5.1; + MARKETING_VERSION = 5.6.0; PRODUCT_BUNDLE_IDENTIFIER = org.dashfoundation.dash.watchkitapp.watchkitextension; PRODUCT_NAME = "${TARGET_NAME}"; SDKROOT = watchos; @@ -5743,7 +5743,7 @@ GCC_WARN_UNUSED_FUNCTION = YES; INFOPLIST_FILE = TodayExtension/Info.plist; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @executable_path/../../Frameworks"; - MARKETING_VERSION = 5.5.1; + MARKETING_VERSION = 5.6.0; PRODUCT_BUNDLE_IDENTIFIER = org.dashfoundation.dash.TodayExtension; PRODUCT_NAME = "$(TARGET_NAME)"; SKIP_INSTALL = YES; @@ -5766,7 +5766,7 @@ GCC_WARN_UNUSED_FUNCTION = YES; INFOPLIST_FILE = TodayExtension/Info.plist; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @executable_path/../../Frameworks"; - MARKETING_VERSION = 5.5.1; + MARKETING_VERSION = 5.6.0; PRODUCT_BUNDLE_IDENTIFIER = org.dashfoundation.dash.TodayExtension; PRODUCT_NAME = "$(TARGET_NAME)"; SKIP_INSTALL = YES; @@ -5857,7 +5857,7 @@ ); INFOPLIST_FILE = DashWallet/Info.plist; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; - MARKETING_VERSION = 5.5.1; + MARKETING_VERSION = 5.6.0; PRODUCT_BUNDLE_IDENTIFIER = org.dashfoundation.dash; PRODUCT_NAME = "$(TARGET_NAME)"; SWIFT_OBJC_BRIDGING_HEADER = ""; @@ -5882,7 +5882,7 @@ GCC_WARN_UNUSED_FUNCTION = YES; INFOPLIST_FILE = TodayExtension/Info.plist; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @executable_path/../../Frameworks"; - MARKETING_VERSION = 5.5.1; + MARKETING_VERSION = 5.6.0; PRODUCT_BUNDLE_IDENTIFIER = org.dashfoundation.dash.TodayExtension; PRODUCT_NAME = "$(TARGET_NAME)"; SKIP_INSTALL = YES; @@ -5930,7 +5930,7 @@ DEVELOPMENT_TEAM = 44RJ69WHFF; IBSC_MODULE = WatchApp_Extension; INFOPLIST_FILE = WatchApp/Info.plist; - MARKETING_VERSION = 5.5.1; + MARKETING_VERSION = 5.6.0; PRODUCT_BUNDLE_IDENTIFIER = org.dashfoundation.dash.watchkitapp; PRODUCT_NAME = "$(TARGET_NAME)"; SDKROOT = watchos; @@ -5949,7 +5949,7 @@ DEVELOPMENT_TEAM = 44RJ69WHFF; INFOPLIST_FILE = "WatchApp Extension/Info.plist"; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @executable_path/../../Frameworks"; - MARKETING_VERSION = 5.5.1; + MARKETING_VERSION = 5.6.0; PRODUCT_BUNDLE_IDENTIFIER = org.dashfoundation.dash.watchkitapp.watchkitextension; PRODUCT_NAME = "${TARGET_NAME}"; SDKROOT = watchos; @@ -6049,7 +6049,7 @@ ); INFOPLIST_FILE = DashWallet/Info.plist; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; - MARKETING_VERSION = 5.5.1; + MARKETING_VERSION = 5.6.0; PRODUCT_BUNDLE_IDENTIFIER = org.dashfoundation.dash; PRODUCT_NAME = "$(TARGET_NAME)"; SWIFT_OBJC_BRIDGING_HEADER = ""; @@ -6072,7 +6072,7 @@ GCC_WARN_UNUSED_FUNCTION = YES; INFOPLIST_FILE = TodayExtension/Info.plist; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @executable_path/../../Frameworks"; - MARKETING_VERSION = 5.5.1; + MARKETING_VERSION = 5.6.0; PRODUCT_BUNDLE_IDENTIFIER = org.dashfoundation.dash.TodayExtension; PRODUCT_NAME = "$(TARGET_NAME)"; SKIP_INSTALL = YES; @@ -6119,7 +6119,7 @@ DEVELOPMENT_TEAM = 44RJ69WHFF; IBSC_MODULE = WatchApp_Extension; INFOPLIST_FILE = WatchApp/Info.plist; - MARKETING_VERSION = 5.5.1; + MARKETING_VERSION = 5.6.0; PRODUCT_BUNDLE_IDENTIFIER = org.dashfoundation.dash.watchkitapp; PRODUCT_NAME = "$(TARGET_NAME)"; SDKROOT = watchos; @@ -6138,7 +6138,7 @@ DEVELOPMENT_TEAM = 44RJ69WHFF; INFOPLIST_FILE = "WatchApp Extension/Info.plist"; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @executable_path/../../Frameworks"; - MARKETING_VERSION = 5.5.1; + MARKETING_VERSION = 5.6.0; PRODUCT_BUNDLE_IDENTIFIER = org.dashfoundation.dash.watchkitapp.watchkitextension; PRODUCT_NAME = "${TARGET_NAME}"; SDKROOT = watchos; From 6698fef30f11665f57d6da8b615d8396a7335c68 Mon Sep 17 00:00:00 2001 From: Quantum Explorer Date: Sun, 27 Jun 2021 12:04:02 +0700 Subject: [PATCH 33/34] masternode features update --- DashWallet.xcodeproj/project.pbxproj | 29 +- .../DWKeysOverviewViewController.h | 28 -- .../DWKeysOverviewViewController.m | 207 ------------ .../Overview/DWKeysOverviewViewController.h | 2 + .../Overview/DWKeysOverviewViewController.m | 87 +++-- .../Cells/DWMasternodeTableViewCell.m | 2 +- .../DWRegisterMasternodeViewController.m | 11 +- .../Models/DWMasternodeRegistrationModel.m | 1 - DashWallet/ar.lproj/Localizable.strings | 304 +++++++++++++++++- DashWallet/nb.lproj/Localizable.strings | 304 +++++++++++++++++- 10 files changed, 661 insertions(+), 314 deletions(-) delete mode 100644 DashWallet/Sources/UI/Menu/Tools/Masternode/Masternode Keys/DWKeysOverviewViewController.h delete mode 100644 DashWallet/Sources/UI/Menu/Tools/Masternode/Masternode Keys/DWKeysOverviewViewController.m diff --git a/DashWallet.xcodeproj/project.pbxproj b/DashWallet.xcodeproj/project.pbxproj index cd7d911b0..b6a8ba6a9 100644 --- a/DashWallet.xcodeproj/project.pbxproj +++ b/DashWallet.xcodeproj/project.pbxproj @@ -259,7 +259,6 @@ 2A8C24B92333A85E00000D43 /* DWModalNavigationController.m in Sources */ = {isa = PBXBuildFile; fileRef = 2A8C24B82333A85E00000D43 /* DWModalNavigationController.m */; }; 2A8DBA702630A609009094BD /* DWExtendedPublicKeysViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 2A8DBA6F2630A609009094BD /* DWExtendedPublicKeysViewController.m */; }; 2A8DBA7A2630A6D6009094BD /* DWExtendedPublicKeysModel.m in Sources */ = {isa = PBXBuildFile; fileRef = 2A8DBA792630A6D6009094BD /* DWExtendedPublicKeysModel.m */; }; - 2A8DBAAF2630CC2D009094BD /* DWDerivationPathKeysItemObject.m in Sources */ = {isa = PBXBuildFile; fileRef = 2A8DBAAE2630CC2D009094BD /* DWDerivationPathKeysItemObject.m */; }; 2A8F420921BED16300858B91 /* DashSyncCurrentCommit in Resources */ = {isa = PBXBuildFile; fileRef = 2A8F420821BED16300858B91 /* DashSyncCurrentCommit */; }; 2A8F420F21BEE95D00858B91 /* DWAboutViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 2A8F420E21BEE95D00858B91 /* DWAboutViewController.m */; }; 2A8F422021BEFEEA00858B91 /* DWAboutModel.m in Sources */ = {isa = PBXBuildFile; fileRef = 2A8F421F21BEFEEA00858B91 /* DWAboutModel.m */; }; @@ -285,7 +284,6 @@ 2A9172D325233F4F0024B4C5 /* DWPhraseRepairChildViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 2A9172D225233F4F0024B4C5 /* DWPhraseRepairChildViewController.m */; }; 2A919F9C24A4DCAD0018C9A3 /* DWDPSmallContactView.m in Sources */ = {isa = PBXBuildFile; fileRef = 2A919F9B24A4DCAD0018C9A3 /* DWDPSmallContactView.m */; }; 2A919F9F24A65CE00018C9A3 /* DWDPAmountContactView.m in Sources */ = {isa = PBXBuildFile; fileRef = 2A919F9E24A65CE00018C9A3 /* DWDPAmountContactView.m */; }; - 2A951CE423D1B92C00602824 /* DWBaseContactsModel.m in Sources */ = {isa = PBXBuildFile; fileRef = 2A951CE323D1B92C00602824 /* DWBaseContactsModel.m */; }; 2A9CEBA822E1D5A200A50237 /* DWMainTabbarViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 2A9CEBA722E1D5A200A50237 /* DWMainTabbarViewController.m */; }; 2A9CEBAD22E1DA4000A50237 /* DWAppRootViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 2A9CEBAC22E1DA4000A50237 /* DWAppRootViewController.m */; }; 2A9CEBB522E1EAC900A50237 /* DWTabBarView.m in Sources */ = {isa = PBXBuildFile; fileRef = 2A9CEBB422E1EAC900A50237 /* DWTabBarView.m */; }; @@ -500,7 +498,6 @@ FB3E9F60236125F600C09C5C /* (null) in Frameworks */ = {isa = PBXBuildFile; }; FB3FA3D61F2364140071FCC5 /* UIImage+Utils.m in Sources */ = {isa = PBXBuildFile; fileRef = BAA4843B1B3EFFAF0075C749 /* UIImage+Utils.m */; }; FB3FF0B22226416A0059A9A5 /* Masternode.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = FB3FF0B12226416A0059A9A5 /* Masternode.storyboard */; }; - FB3FF0B5222642FB0059A9A5 /* DWKeysOverviewViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = FB3FF0B4222642FB0059A9A5 /* DWKeysOverviewViewController.m */; }; FB3FF0B822264DC60059A9A5 /* DWDerivationPathKeysViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = FB3FF0B722264DC60059A9A5 /* DWDerivationPathKeysViewController.m */; }; FB43BC78211CD15500BC9879 /* DWActionButton.m in Sources */ = {isa = PBXBuildFile; fileRef = FB43BC77211CD15500BC9879 /* DWActionButton.m */; }; FB4FA9C322505DD70060B017 /* AudioToolbox.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FB4FA9C222505DD60060B017 /* AudioToolbox.framework */; }; @@ -508,6 +505,9 @@ FB519F0A2441BBB200AF50E8 /* DWProviderUpdateServiceTableViewCell.m in Sources */ = {isa = PBXBuildFile; fileRef = FB519F082441BBB100AF50E8 /* DWProviderUpdateServiceTableViewCell.m */; }; FB519F0D2441BD3700AF50E8 /* BRCopyLabel.m in Sources */ = {isa = PBXBuildFile; fileRef = FB519F0C2441BD3700AF50E8 /* BRCopyLabel.m */; }; FB519F0F2441C09E00AF50E8 /* DWMasternodeTableViewCell.xib in Resources */ = {isa = PBXBuildFile; fileRef = FB519F0E2441C09E00AF50E8 /* DWMasternodeTableViewCell.xib */; }; + FB65F03D26882EE00022DF64 /* DWKeysOverviewViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = FB65F03C26882EE00022DF64 /* DWKeysOverviewViewController.m */; }; + FB65F04426882F830022DF64 /* DWDerivationPathKeysItemObject.m in Sources */ = {isa = PBXBuildFile; fileRef = FB65F04326882F830022DF64 /* DWDerivationPathKeysItemObject.m */; }; + FB65F045268837530022DF64 /* DWBaseContactsModel.m in Sources */ = {isa = PBXBuildFile; fileRef = 2A951CE323D1B92C00602824 /* DWBaseContactsModel.m */; }; FB66977F212C0B940034BE4F /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = FB66977E212C0B940034BE4F /* LaunchScreen.storyboard */; }; FB83F3DF236E4C9D0039ED1B /* DWPublicKeyGenerationTableViewCell.m in Sources */ = {isa = PBXBuildFile; fileRef = FB83F3DE236E4C9D0039ED1B /* DWPublicKeyGenerationTableViewCell.m */; }; FB8ACEB622E0502200EE5035 /* DWUpholdMainnetConstants.m in Sources */ = {isa = PBXBuildFile; fileRef = FB8ACEB522E0502100EE5035 /* DWUpholdMainnetConstants.m */; }; @@ -1113,8 +1113,6 @@ 2A8DBA6F2630A609009094BD /* DWExtendedPublicKeysViewController.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = DWExtendedPublicKeysViewController.m; sourceTree = ""; }; 2A8DBA782630A6D6009094BD /* DWExtendedPublicKeysModel.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = DWExtendedPublicKeysModel.h; sourceTree = ""; }; 2A8DBA792630A6D6009094BD /* DWExtendedPublicKeysModel.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = DWExtendedPublicKeysModel.m; sourceTree = ""; }; - 2A8DBAAD2630CC2D009094BD /* DWDerivationPathKeysItemObject.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = DWDerivationPathKeysItemObject.h; sourceTree = ""; }; - 2A8DBAAE2630CC2D009094BD /* DWDerivationPathKeysItemObject.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = DWDerivationPathKeysItemObject.m; sourceTree = ""; }; 2A8E79B9240676D400AA7C3D /* sk */ = {isa = PBXFileReference; lastKnownFileType = text.plist.stringsdict; name = sk; path = sk.lproj/Localizable.stringsdict; sourceTree = ""; }; 2A8E79BA240676D400AA7C3D /* sk */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = sk; path = sk.lproj/Interface.strings; sourceTree = ""; }; 2A8E79BB2406772900AA7C3D /* cs */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = cs; path = cs.lproj/Interface.strings; sourceTree = ""; }; @@ -1654,8 +1652,6 @@ FB31C252223BD3F600BD0868 /* DWMasternodeViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DWMasternodeViewController.h; sourceTree = ""; }; FB3E9F612365C8DE00C09C5C /* DWSeedPhraseView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DWSeedPhraseView.h; sourceTree = ""; }; FB3FF0B12226416A0059A9A5 /* Masternode.storyboard */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; path = Masternode.storyboard; sourceTree = ""; }; - FB3FF0B3222642FB0059A9A5 /* DWKeysOverviewViewController.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = DWKeysOverviewViewController.h; sourceTree = ""; }; - FB3FF0B4222642FB0059A9A5 /* DWKeysOverviewViewController.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = DWKeysOverviewViewController.m; sourceTree = ""; }; FB3FF0B622264DC60059A9A5 /* DWDerivationPathKeysViewController.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = DWDerivationPathKeysViewController.h; sourceTree = ""; }; FB3FF0B722264DC60059A9A5 /* DWDerivationPathKeysViewController.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = DWDerivationPathKeysViewController.m; sourceTree = ""; }; FB4310F01FA027DB00784EBC /* th */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = th; path = th.lproj/Interface.strings; sourceTree = ""; }; @@ -1687,6 +1683,10 @@ FB586CD0213D652400836ACC /* nl */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = nl; path = nl.lproj/Interface.strings; sourceTree = ""; }; FB586CD2213D657000836ACC /* el */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = el; path = el.lproj/Interface.strings; sourceTree = ""; }; FB586CD4213D659F00836ACC /* tr */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = tr; path = tr.lproj/Interface.strings; sourceTree = ""; }; + FB65F03C26882EE00022DF64 /* DWKeysOverviewViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = DWKeysOverviewViewController.m; sourceTree = ""; }; + FB65F03E26882F010022DF64 /* DWKeysOverviewViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DWKeysOverviewViewController.h; sourceTree = ""; }; + FB65F04226882F820022DF64 /* DWDerivationPathKeysItemObject.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = DWDerivationPathKeysItemObject.h; path = "DashWallet/Sources/UI/Menu/Tools/Masternode Keys/DerivationPathKeys/Models/DWDerivationPathKeysItemObject.h"; sourceTree = SOURCE_ROOT; }; + FB65F04326882F830022DF64 /* DWDerivationPathKeysItemObject.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = DWDerivationPathKeysItemObject.m; path = "DashWallet/Sources/UI/Menu/Tools/Masternode Keys/DerivationPathKeys/Models/DWDerivationPathKeysItemObject.m"; sourceTree = SOURCE_ROOT; }; FB66977E212C0B940034BE4F /* LaunchScreen.storyboard */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; path = LaunchScreen.storyboard; sourceTree = ""; }; FB6DD3811F7FA48500BC1E4D /* dashwallet.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = dashwallet.entitlements; sourceTree = ""; }; FB83F3DD236E4C9D0039ED1B /* DWPublicKeyGenerationTableViewCell.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = DWPublicKeyGenerationTableViewCell.h; sourceTree = ""; }; @@ -3518,8 +3518,8 @@ 2AB66E0723572379007BE825 /* Overview */ = { isa = PBXGroup; children = ( - FB3FF0B3222642FB0059A9A5 /* DWKeysOverviewViewController.h */, - FB3FF0B4222642FB0059A9A5 /* DWKeysOverviewViewController.m */, + FB65F03E26882F010022DF64 /* DWKeysOverviewViewController.h */, + FB65F03C26882EE00022DF64 /* DWKeysOverviewViewController.m */, 2AB66E00235711FA007BE825 /* DWWalletKeysOverviewModel.h */, 2AB66E01235711FA007BE825 /* DWWalletKeysOverviewModel.m */, ); @@ -3540,11 +3540,11 @@ 2AB66E0923572572007BE825 /* Models */ = { isa = PBXGroup; children = ( + FB65F04226882F820022DF64 /* DWDerivationPathKeysItemObject.h */, + FB65F04326882F830022DF64 /* DWDerivationPathKeysItemObject.m */, 2AB66E0A23572587007BE825 /* DWDerivationPathKeysItem.h */, 2A392766235732E9004E9A96 /* DWDerivationPathKeysModel.h */, 2A392767235732E9004E9A96 /* DWDerivationPathKeysModel.m */, - 2A8DBAAD2630CC2D009094BD /* DWDerivationPathKeysItemObject.h */, - 2A8DBAAE2630CC2D009094BD /* DWDerivationPathKeysItemObject.m */, ); path = Models; sourceTree = ""; @@ -5177,6 +5177,7 @@ 2AD1CE8A22DC9C6F00C99324 /* DWVerifySeedPhraseContentView.m in Sources */, 2A4431DB22D675CD009BAF7F /* DWPreviewSeedPhraseViewController.m in Sources */, 2AFCB9BE23BE3C0800FF59A6 /* DWConfirmSendPaymentViewController.m in Sources */, + FB65F045268837530022DF64 /* DWBaseContactsModel.m in Sources */, FB519F0A2441BBB200AF50E8 /* DWProviderUpdateServiceTableViewCell.m in Sources */, 2AC92C8A1FEB0B8B008CAEE0 /* DWQRScanModel.m in Sources */, 2A3DC87123972331004B3DBA /* DWHomeViewController+DWImportPrivateKeyDelegateImpl.m in Sources */, @@ -5297,6 +5298,7 @@ 2A0C69D023143435001B8C90 /* DWModalDismissalAnimation.m in Sources */, 2A2CD72522FA05DD008C7BC9 /* DWPressableButton.m in Sources */, FBF4DA0D237BA5BD005493A6 /* DWMasternodeTableViewCell.m in Sources */, + FB65F03D26882EE00022DF64 /* DWKeysOverviewViewController.m in Sources */, 2A4E533B22F0248D00E5168A /* DWTransactionListDataSource.m in Sources */, 2A913E6B23A15419006A2A59 /* DWUpholdAuthURLNotification.m in Sources */, 2A7A7BB6234792A600451078 /* DWMainMenuContentView.m in Sources */, @@ -5306,6 +5308,7 @@ 2A2120E72213201E009906DC /* DWAmountModel.m in Sources */, 2A2CD71322F97B65008C7BC9 /* CALayer+DWShadow.m in Sources */, 2AB3416923A8C479004E37A7 /* DWOnboardingCollectionViewCell.m in Sources */, + FB65F04426882F830022DF64 /* DWDerivationPathKeysItemObject.m in Sources */, 2A74F0012305C40F00C475EB /* DWHomeViewController+DWShortcuts.m in Sources */, 2A913E8223A30623006A2A59 /* DWHomeModelStub.m in Sources */, 2AFCB9BA23BDFF5E00FF59A6 /* DWUpholdAmountModel.m in Sources */, @@ -5356,7 +5359,6 @@ 2A1B7DC62326775600BA8C6A /* DWSuccessfulTransactionAnimatedIconView.m in Sources */, 2A5BD59E2451F39500688A8D /* DWCheckExistenceUsernameValidationRule.m in Sources */, 2A5E4548243E06E7006BA067 /* DWDPRegistrationStatusTableViewCell.m in Sources */, - FB3FF0B5222642FB0059A9A5 /* DWKeysOverviewViewController.m in Sources */, 2A913EB623A7E145006A2A59 /* DWTransactionStub.m in Sources */, 2AF26F41230C1F9D007F9228 /* DWAmountView.m in Sources */, 2A74EFE92305264200C475EB /* DWBaseActionButtonViewController.m in Sources */, @@ -5472,12 +5474,11 @@ 2A8F420F21BEE95D00858B91 /* DWAboutViewController.m in Sources */, 2A7A7BCD2347F01B00451078 /* DWSecurityMenuViewController.m in Sources */, FB031ADE2378834200EF564B /* DWActionFormTableViewCell.m in Sources */, - 2A4E534B22F03A9E00E5168A /* DWTxListHeaderView.m in Sources */, + 2A4E534B22F03A9E00E5168A /* DWFilterHeaderView.m in Sources */, 2A4E1D5325056297008AC53F /* DWPaymentsButton.m in Sources */, 2A1A60BC2674084F003DAC65 /* DWSyncingAlertContentView.m in Sources */, 2A4E534B22F03A9E00E5168A /* DWFilterHeaderView.m in Sources */, 2A1F6415238FEEA900A9B505 /* DWAdvancedSecurityModel.m in Sources */, - 2A8DBAAF2630CC2D009094BD /* DWDerivationPathKeysItemObject.m in Sources */, 2AB66DD223546746007BE825 /* DWTxDetailListView.m in Sources */, 2A7A7BE72348E9AA00451078 /* DWBorderedActionButton.m in Sources */, 2A63004E2328F37C00827825 /* DWLockScreenViewController.m in Sources */, diff --git a/DashWallet/Sources/UI/Menu/Tools/Masternode/Masternode Keys/DWKeysOverviewViewController.h b/DashWallet/Sources/UI/Menu/Tools/Masternode/Masternode Keys/DWKeysOverviewViewController.h deleted file mode 100644 index 9bd6bcb06..000000000 --- a/DashWallet/Sources/UI/Menu/Tools/Masternode/Masternode Keys/DWKeysOverviewViewController.h +++ /dev/null @@ -1,28 +0,0 @@ -// -// Created by Sam Westrich -// Copyright © 2019 Dash Core Group. All rights reserved. -// -// Licensed under the MIT License (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// https://opensource.org/licenses/MIT -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// - -#import - -NS_ASSUME_NONNULL_BEGIN - -@interface DWKeysOverviewViewController : UIViewController - -//+ (instancetype)controller; - -@end - -NS_ASSUME_NONNULL_END diff --git a/DashWallet/Sources/UI/Menu/Tools/Masternode/Masternode Keys/DWKeysOverviewViewController.m b/DashWallet/Sources/UI/Menu/Tools/Masternode/Masternode Keys/DWKeysOverviewViewController.m deleted file mode 100644 index b6f2befce..000000000 --- a/DashWallet/Sources/UI/Menu/Tools/Masternode/Masternode Keys/DWKeysOverviewViewController.m +++ /dev/null @@ -1,207 +0,0 @@ -// -// Created by Sam Westrich -// Copyright © 2019 Dash Core Group. All rights reserved. -// -// Licensed under the MIT License (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// https://opensource.org/licenses/MIT -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// - -#import "DWKeysOverviewViewController.h" - -#import "DWDerivationPathKeysViewController.h" -#import "DWFormTableViewController.h" -#import "DWUIKit.h" -#import "DWWalletKeysOverviewModel.h" -#import -#import -#import - -NS_ASSUME_NONNULL_BEGIN - -@interface DWKeysOverviewViewController () - -@property (null_resettable, nonatomic, strong) DWWalletKeysOverviewModel *model; -@property (nonatomic, strong) DWFormTableViewController *formController; - -@end - -@implementation DWKeysOverviewViewController - - -- (instancetype)initWithNibName:(nullable NSString *)nibNameOrNil bundle:(nullable NSBundle *)nibBundleOrNil { - if (self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil]) { - self.title = NSLocalizedString(@"Wallet Keys", nil); - self.hidesBottomBarWhenPushed = YES; - } - - return self; -} - -- (DWWalletKeysOverviewModel *)model { - if (_model == nil) { - _model = [[DWWalletKeysOverviewModel alloc] init]; - } - - return _model; -} - - -- (NSArray *)items { - __weak typeof(self) weakSelf = self; - - NSMutableArray *items = [NSMutableArray array]; - - { - DWSelectorFormCellModel *cellModel = [[DWSelectorFormCellModel alloc] initWithTitle:NSLocalizedString(@"Owner Keys", nil)]; - cellModel.subTitle = [NSString stringWithFormat:NSLocalizedString(@"%ld used(s)", @"#bc-ignore!"), - self.model.ownerDerivationPath.usedAddresses.count]; - cellModel.accessoryType = DWSelectorFormAccessoryType_DisclosureIndicator; - cellModel.didSelectBlock = ^(DWSelectorFormCellModel *_Nonnull cellModel, NSIndexPath *_Nonnull indexPath) { - if ([DSAuthenticationManager sharedInstance].didAuthenticate) { - __strong typeof(weakSelf) strongSelf = weakSelf; - if (!strongSelf) { - return; - } - [strongSelf showOwnerKeys]; - } - else { - [[DSAuthenticationManager sharedInstance] authenticateWithPrompt:nil - usingBiometricAuthentication:NO - alertIfLockout:YES - completion:^(BOOL authenticatedOrSuccess, BOOL usedBiometrics, BOOL cancelled) { - __strong typeof(weakSelf) strongSelf = weakSelf; - if (!strongSelf) { - return; - } - if (authenticatedOrSuccess) { - [strongSelf showOwnerKeys]; - } - }]; - } - }; - [items addObject:cellModel]; - } - - { - DWSelectorFormCellModel *cellModel = [[DWSelectorFormCellModel alloc] initWithTitle:NSLocalizedString(@"Voting Keys", nil)]; - cellModel.subTitle = [NSString stringWithFormat:NSLocalizedString(@"%ld used(s)", @"#bc-ignore!"), - self.model.votingDerivationPath.usedAddresses.count]; - cellModel.accessoryType = DWSelectorFormAccessoryType_DisclosureIndicator; - cellModel.didSelectBlock = ^(DWSelectorFormCellModel *_Nonnull cellModel, NSIndexPath *_Nonnull indexPath) { - if ([DSAuthenticationManager sharedInstance].didAuthenticate) { - __strong typeof(weakSelf) strongSelf = weakSelf; - if (!strongSelf) { - return; - } - [strongSelf showVotingKeys]; - } - else { - [[DSAuthenticationManager sharedInstance] authenticateWithPrompt:nil - usingBiometricAuthentication:NO - alertIfLockout:YES - completion:^(BOOL authenticatedOrSuccess, BOOL usedBiometrics, BOOL cancelled) { - __strong typeof(weakSelf) strongSelf = weakSelf; - if (!strongSelf) { - return; - } - if (authenticatedOrSuccess) { - [strongSelf showVotingKeys]; - } - }]; - } - }; - [items addObject:cellModel]; - } - - { - DWSelectorFormCellModel *cellModel = [[DWSelectorFormCellModel alloc] initWithTitle:NSLocalizedString(@"Operator Keys", nil)]; - cellModel.subTitle = [NSString stringWithFormat:NSLocalizedString(@"%ld used(s)", @"#bc-ignore!"), - self.model.operatorDerivationPath.usedAddresses.count]; - cellModel.accessoryType = DWSelectorFormAccessoryType_DisclosureIndicator; - cellModel.didSelectBlock = ^(DWSelectorFormCellModel *_Nonnull cellModel, NSIndexPath *_Nonnull indexPath) { - if ([DSAuthenticationManager sharedInstance].didAuthenticate) { - __strong typeof(weakSelf) strongSelf = weakSelf; - if (!strongSelf) { - return; - } - [strongSelf showOperatorKeys]; - } - else { - [[DSAuthenticationManager sharedInstance] authenticateWithPrompt:nil - usingBiometricAuthentication:NO - alertIfLockout:YES - completion:^(BOOL authenticatedOrSuccess, BOOL usedBiometrics, BOOL cancelled) { - __strong typeof(weakSelf) strongSelf = weakSelf; - if (!strongSelf) { - return; - } - if (authenticatedOrSuccess) { - [strongSelf showOperatorKeys]; - } - }]; - } - }; - [items addObject:cellModel]; - } - - return items; -} - -- (NSArray *)sections { - DWFormSectionModel *section = [[DWFormSectionModel alloc] init]; - section.items = [self items]; - - return @[ section ]; -} - -- (void)viewDidLoad { - [super viewDidLoad]; - - self.view.backgroundColor = [UIColor dw_secondaryBackgroundColor]; - - DWFormTableViewController *formController = [[DWFormTableViewController alloc] initWithStyle:UITableViewStylePlain]; - [formController setSections:[self sections] placeholderText:nil]; - - [self dw_embedChild:formController]; - self.formController = formController; -} - -- (UIStatusBarStyle)preferredStatusBarStyle { - return UIStatusBarStyleLightContent; -} - -#pragma mark - Private - -- (void)showOwnerKeys { - [self showDerivationPathKeysViewControllerWithDerivationPath:self.model.ownerDerivationPath - title:NSLocalizedString(@"Owner Keys", nil)]; -} - -- (void)showVotingKeys { - [self showDerivationPathKeysViewControllerWithDerivationPath:self.model.votingDerivationPath - title:NSLocalizedString(@"Voting Keys", nil)]; -} - -- (void)showOperatorKeys { - [self showDerivationPathKeysViewControllerWithDerivationPath:self.model.operatorDerivationPath - title:NSLocalizedString(@"Operator Keys", nil)]; -} - -- (void)showDerivationPathKeysViewControllerWithDerivationPath:(DSAuthenticationKeysDerivationPath *)derivationPath title:(NSString *)title { - DWDerivationPathKeysViewController *controller = [[DWDerivationPathKeysViewController alloc] initWithDerivationPath:derivationPath]; - controller.title = title; - [self.navigationController pushViewController:controller animated:YES]; -} - -@end - -NS_ASSUME_NONNULL_END diff --git a/DashWallet/Sources/UI/Menu/Tools/Masternode/Masternode Keys/Overview/DWKeysOverviewViewController.h b/DashWallet/Sources/UI/Menu/Tools/Masternode/Masternode Keys/Overview/DWKeysOverviewViewController.h index 2051b0ec4..9bd6bcb06 100644 --- a/DashWallet/Sources/UI/Menu/Tools/Masternode/Masternode Keys/Overview/DWKeysOverviewViewController.h +++ b/DashWallet/Sources/UI/Menu/Tools/Masternode/Masternode Keys/Overview/DWKeysOverviewViewController.h @@ -21,6 +21,8 @@ NS_ASSUME_NONNULL_BEGIN @interface DWKeysOverviewViewController : UIViewController +//+ (instancetype)controller; + @end NS_ASSUME_NONNULL_END diff --git a/DashWallet/Sources/UI/Menu/Tools/Masternode/Masternode Keys/Overview/DWKeysOverviewViewController.m b/DashWallet/Sources/UI/Menu/Tools/Masternode/Masternode Keys/Overview/DWKeysOverviewViewController.m index 568ab6d03..b6f2befce 100644 --- a/DashWallet/Sources/UI/Menu/Tools/Masternode/Masternode Keys/Overview/DWKeysOverviewViewController.m +++ b/DashWallet/Sources/UI/Menu/Tools/Masternode/Masternode Keys/Overview/DWKeysOverviewViewController.m @@ -62,48 +62,93 @@ - (DWWalletKeysOverviewModel *)model { { DWSelectorFormCellModel *cellModel = [[DWSelectorFormCellModel alloc] initWithTitle:NSLocalizedString(@"Owner Keys", nil)]; - cellModel.subTitle = [NSString stringWithFormat:NSLocalizedString(@"%ld used", nil), + cellModel.subTitle = [NSString stringWithFormat:NSLocalizedString(@"%ld used(s)", @"#bc-ignore!"), self.model.ownerDerivationPath.usedAddresses.count]; cellModel.accessoryType = DWSelectorFormAccessoryType_DisclosureIndicator; cellModel.didSelectBlock = ^(DWSelectorFormCellModel *_Nonnull cellModel, NSIndexPath *_Nonnull indexPath) { - __strong typeof(weakSelf) strongSelf = weakSelf; - if (!strongSelf) { - return; + if ([DSAuthenticationManager sharedInstance].didAuthenticate) { + __strong typeof(weakSelf) strongSelf = weakSelf; + if (!strongSelf) { + return; + } + [strongSelf showOwnerKeys]; + } + else { + [[DSAuthenticationManager sharedInstance] authenticateWithPrompt:nil + usingBiometricAuthentication:NO + alertIfLockout:YES + completion:^(BOOL authenticatedOrSuccess, BOOL usedBiometrics, BOOL cancelled) { + __strong typeof(weakSelf) strongSelf = weakSelf; + if (!strongSelf) { + return; + } + if (authenticatedOrSuccess) { + [strongSelf showOwnerKeys]; + } + }]; } - - [strongSelf showOwnerKeys]; }; [items addObject:cellModel]; } { DWSelectorFormCellModel *cellModel = [[DWSelectorFormCellModel alloc] initWithTitle:NSLocalizedString(@"Voting Keys", nil)]; - cellModel.subTitle = [NSString stringWithFormat:NSLocalizedString(@"%ld used", nil), + cellModel.subTitle = [NSString stringWithFormat:NSLocalizedString(@"%ld used(s)", @"#bc-ignore!"), self.model.votingDerivationPath.usedAddresses.count]; cellModel.accessoryType = DWSelectorFormAccessoryType_DisclosureIndicator; cellModel.didSelectBlock = ^(DWSelectorFormCellModel *_Nonnull cellModel, NSIndexPath *_Nonnull indexPath) { - __strong typeof(weakSelf) strongSelf = weakSelf; - if (!strongSelf) { - return; + if ([DSAuthenticationManager sharedInstance].didAuthenticate) { + __strong typeof(weakSelf) strongSelf = weakSelf; + if (!strongSelf) { + return; + } + [strongSelf showVotingKeys]; + } + else { + [[DSAuthenticationManager sharedInstance] authenticateWithPrompt:nil + usingBiometricAuthentication:NO + alertIfLockout:YES + completion:^(BOOL authenticatedOrSuccess, BOOL usedBiometrics, BOOL cancelled) { + __strong typeof(weakSelf) strongSelf = weakSelf; + if (!strongSelf) { + return; + } + if (authenticatedOrSuccess) { + [strongSelf showVotingKeys]; + } + }]; } - - [strongSelf showVotingKeys]; }; [items addObject:cellModel]; } { DWSelectorFormCellModel *cellModel = [[DWSelectorFormCellModel alloc] initWithTitle:NSLocalizedString(@"Operator Keys", nil)]; - cellModel.subTitle = [NSString stringWithFormat:NSLocalizedString(@"%ld used", nil), + cellModel.subTitle = [NSString stringWithFormat:NSLocalizedString(@"%ld used(s)", @"#bc-ignore!"), self.model.operatorDerivationPath.usedAddresses.count]; cellModel.accessoryType = DWSelectorFormAccessoryType_DisclosureIndicator; cellModel.didSelectBlock = ^(DWSelectorFormCellModel *_Nonnull cellModel, NSIndexPath *_Nonnull indexPath) { - __strong typeof(weakSelf) strongSelf = weakSelf; - if (!strongSelf) { - return; + if ([DSAuthenticationManager sharedInstance].didAuthenticate) { + __strong typeof(weakSelf) strongSelf = weakSelf; + if (!strongSelf) { + return; + } + [strongSelf showOperatorKeys]; + } + else { + [[DSAuthenticationManager sharedInstance] authenticateWithPrompt:nil + usingBiometricAuthentication:NO + alertIfLockout:YES + completion:^(BOOL authenticatedOrSuccess, BOOL usedBiometrics, BOOL cancelled) { + __strong typeof(weakSelf) strongSelf = weakSelf; + if (!strongSelf) { + return; + } + if (authenticatedOrSuccess) { + [strongSelf showOperatorKeys]; + } + }]; } - - [strongSelf showOperatorKeys]; }; [items addObject:cellModel]; } @@ -126,11 +171,7 @@ - (void)viewDidLoad { DWFormTableViewController *formController = [[DWFormTableViewController alloc] initWithStyle:UITableViewStylePlain]; [formController setSections:[self sections] placeholderText:nil]; - [self addChildViewController:formController]; - formController.view.frame = self.view.bounds; - formController.view.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight; - [self.view addSubview:formController.view]; - [formController didMoveToParentViewController:self]; + [self dw_embedChild:formController]; self.formController = formController; } diff --git a/DashWallet/Sources/UI/Menu/Tools/Masternode/Masternode List/Cells/DWMasternodeTableViewCell.m b/DashWallet/Sources/UI/Menu/Tools/Masternode/Masternode List/Cells/DWMasternodeTableViewCell.m index bcbd28bed..62a01d5f5 100644 --- a/DashWallet/Sources/UI/Menu/Tools/Masternode/Masternode List/Cells/DWMasternodeTableViewCell.m +++ b/DashWallet/Sources/UI/Menu/Tools/Masternode/Masternode List/Cells/DWMasternodeTableViewCell.m @@ -189,7 +189,7 @@ - (void)reloadAttributedData { UIFont *availabilityFont = [UIFont dw_fontForTextStyle:UIFontTextStyleCaption1]; UIColor *availabilityColor = [UIColor dw_quaternaryTextColor]; - self.availabilityLabel.attributedText = [NSAttributedString attributedText:self.model.validUppercaseString + self.availabilityLabel.attributedText = [NSAttributedString attributedText:self.model.validString font:availabilityFont textColor:availabilityColor highlightedText:highlightedText diff --git a/DashWallet/Sources/UI/Menu/Tools/Masternode/Masternode Registration/DWRegisterMasternodeViewController.m b/DashWallet/Sources/UI/Menu/Tools/Masternode/Masternode Registration/DWRegisterMasternodeViewController.m index e3b26338e..754902156 100644 --- a/DashWallet/Sources/UI/Menu/Tools/Masternode/Masternode Registration/DWRegisterMasternodeViewController.m +++ b/DashWallet/Sources/UI/Menu/Tools/Masternode/Masternode Registration/DWRegisterMasternodeViewController.m @@ -212,12 +212,7 @@ - (BOOL)resignCellsFirstResponders { NSData *seed = [[DSBIP39Mnemonic sharedInstance] deriveKeyFromPhrase:wallet.seedPhraseIfAuthenticated withPassphrase:nil]; DSKey *key = [ownerDerivationPath firstUnusedPrivateKeyFromSeed:seed]; - if ([key isKindOfClass:[DSECDSAKey class]]) { - strongModel.valueText = [((DSECDSAKey *)key) privateKeyStringForChain:ownerDerivationPath.chain]; - } - else { - strongModel.valueText = key.secretKeyString; - } + strongModel.valueText = key.secretKeyString; } }; case DWMasternodeRegistrationCell_OperatorKey: @@ -330,7 +325,7 @@ - (DWBaseFormCellModel *)modelForRow:(NSUInteger)row { if (!strongModel) { return; } - strongModel.operatorKey = [DSBLSKey blsKeyWithPublicKey:[value hexToData].UInt384 onChain:[[DWEnvironment sharedInstance] currentChain]]; + strongModel.operatorKey = [DSBLSKey keyWithPublicKey:[value hexToData].UInt384]; }]; break; } @@ -341,7 +336,7 @@ - (DWBaseFormCellModel *)modelForRow:(NSUInteger)row { if (!strongModel) { return; } - strongModel.votingKey = [DSECDSAKey keyWithPublicKey:[value hexToData]]; + strongModel.votingKey = [DSECDSAKey keyWithPublicKeyData:[value hexToData]]; }]; break; } diff --git a/DashWallet/Sources/UI/Menu/Tools/Masternode/Masternode Registration/Models/DWMasternodeRegistrationModel.m b/DashWallet/Sources/UI/Menu/Tools/Masternode/Masternode Registration/Models/DWMasternodeRegistrationModel.m index f6634fd21..19ec8b19b 100644 --- a/DashWallet/Sources/UI/Menu/Tools/Masternode/Masternode Registration/Models/DWMasternodeRegistrationModel.m +++ b/DashWallet/Sources/UI/Menu/Tools/Masternode/Masternode Registration/Models/DWMasternodeRegistrationModel.m @@ -99,7 +99,6 @@ - (void)setIpAddressFromString:(NSString *)ipAddressString { if (inet_aton([ipAddressString UTF8String], &addrV4) != 0) { uint32_t ip = ntohl(addrV4.s_addr); ipAddress.u32[3] = CFSwapInt32HostToBig(ip); - DSDLog(@"%08x", ip); } self.ipAddress = ipAddress; } diff --git a/DashWallet/ar.lproj/Localizable.strings b/DashWallet/ar.lproj/Localizable.strings index 4ea21c92a..41164e86a 100644 --- a/DashWallet/ar.lproj/Localizable.strings +++ b/DashWallet/ar.lproj/Localizable.strings @@ -1,4 +1,3 @@ - /* No comment provided by engineer. */ "%@ is not allowed to access Face ID" = "%@ is not allowed to access Face ID"; @@ -245,9 +244,6 @@ /* ex., Download peer: 127.0.0.1:9999 */ "Download peer: %@" = "Download peer: %@"; -/* No comment provided by engineer. */ -"Email client is not configured. Please add your email account in Settings" = "Email client is not configured. Please add your email account in Settings"; - /* No comment provided by engineer. */ "Enable Face ID" = "Enable Face ID"; @@ -650,9 +646,6 @@ /* No comment provided by engineer. */ "Recovery phrase doesn't match" = "Recovery phrase doesn't match"; -/* No comment provided by engineer. */ -"Recovery phrase must have %d words" = "Recovery phrase must have %d words"; - /* No comment provided by engineer. */ "Register" = "Register"; @@ -752,18 +745,12 @@ /* Pay by (scanning QR code) */ "Send by" = "Send by"; -/* No comment provided by engineer. */ -"Send crash report" = "Send crash report"; - /* No comment provided by engineer. */ "Send to" = "Send to"; /* Translate it as short as possible! (24 symbols max) */ "Send to Address" = "Send to Address"; -/* No comment provided by engineer. */ -"Send to copied address" = "Send to copied address"; - /* Translate it as short as possible! (24 symbols max) */ "Send with NFC" = "Send with NFC"; @@ -1043,9 +1030,6 @@ /* No comment provided by engineer. */ "We have detected that Dash Wallet crashed during migration. Rescanning the blockchain will solve this issue or you may try again. Rescanning should preferably be performed on wifi and will take up to half an hour. Your funds will be available once the sync process is complete." = "We have detected that Dash Wallet crashed during migration. Rescanning the blockchain will solve this issue or you may try again. Rescanning should preferably be performed on wifi and will take up to half an hour. Your funds will be available once the sync process is complete."; -/* No comment provided by engineer. */ -"We have detected that Dash Wallet crashed last time it was opened. Would you like to help us solve the issue by sending us the crash report data? Your transaction history and any other private information WILL NOT be shared." = "We have detected that Dash Wallet crashed last time it was opened. Would you like to help us solve the issue by sending us the crash report data? Your transaction history and any other private information WILL NOT be shared."; - /* No comment provided by engineer. */ "We Upgraded" = "We Upgraded"; @@ -1102,3 +1086,291 @@ /* No comment provided by engineer. */ "Your wallet is secured now. You can use your recovery phrase anytime to recover your account on another device." = "Your wallet is secured now. You can use your recovery phrase anytime to recover your account on another device."; + +/* No comment provided by engineer. */ +"%@ has accepted your contact request" = ""; + +/* Username has sent you a contact request */ +"%@ has sent you a contact request" = ""; + +"(1/3) Processing Payment" = ""; + +/* No comment provided by engineer. */ +"(1/3) Unable to process payment" = ""; + +/* No comment provided by engineer. */ +"(2/3) Creating Dash Identity" = ""; + +/* No comment provided by engineer. */ +"(2/3) Unable to create Dash Identity" = ""; + +/* No comment provided by engineer. */ +"(3/3) Can't register username" = ""; + +/* No comment provided by engineer. */ +"(3/3) Registering Username" = ""; + +/* No comment provided by engineer. */ +"\"%@\" is not a recovery phrase word. Would you like to try to recover the correct word that should be in its place?" = ""; + +/* No comment provided by engineer. */ +"Accept" = ""; + +/* No comment provided by engineer. */ +"Activity" = ""; + +/* Add as your contact... */ +"Add %@ as your contact to Pay Directly to Username and Retain Mutual Transaction History" = ""; + +/* No comment provided by engineer. */ +"Add a New Contact" = ""; + +/* Choose your Dash username */ +"Choose your" = ""; + +/* No comment provided by engineer. */ +"Confirm & Pay" = ""; + +/* No comment provided by engineer. */ +"Connecting to payment server" = ""; + +/* No comment provided by engineer. */ +"Contact Request Pending" = ""; + +/* No comment provided by engineer. */ +"Contact Requests" = ""; + +/* No comment provided by engineer. */ +"Contacts" = ""; + +/* No comment provided by engineer. */ +"Could not automatically recover missing or incorrect words" = ""; + +/* No comment provided by engineer. */ +"Could not connect to the Dash network, please check that you are connected to the internet." = ""; + +/* No comment provided by engineer. */ +"Current user: %@" = ""; + +/* No comment provided by engineer. */ +"Dash username" = ""; + +/* No comment provided by engineer. */ +"DashPay Upgrade Fee" = ""; + +/* No comment provided by engineer. */ +"Do not take a screenshot" = ""; + +/* (List of notifications happened) Earlier (some time ago) */ +"Earlier" = ""; + +/* Input username textfield placeholder */ +"eg: johndoe" = ""; + +/* No comment provided by engineer. */ +"Error" = ""; + +/* No comment provided by engineer. */ +"Error Upgrading" = ""; + +"Extended Public Keys" = ""; + +/* No comment provided by engineer. */ +"Find a user on the Dash Network" = ""; + +/* No comment provided by engineer. */ +"Found missing word:\n%@" = ""; + +/* No comment provided by engineer. */ +"Found missing words:\n%@" = ""; + +/* No comment provided by engineer. */ +"Found potential missing words:\n%@" = ""; + +/* No comment provided by engineer. */ +"Generate extended public keys?" = ""; + +/* Username has requested to be your friend */ +"has requested to be your friend" = ""; + +/* No comment provided by engineer. */ +"header #%d of %d" = ""; + +/* Hello username, */ +"Hello %@," = ""; + +"I Accept" = ""; + +"Invalid Payment Request" = ""; + +/* No comment provided by engineer. */ +"Invalid QR Code" = ""; + +/* No comment provided by engineer. */ +"It would seem like you are attempting to restore your wallet a using a 12 word recovery phrase, however you have only entered 10 words, would you like to automatically recover missing words? This might take around an hour. We recommend plugging in your device." = ""; + +/* No comment provided by engineer. */ +"It would seem like you are attempting to restore your wallet a using a 12 word recovery phrase, however you have only entered 11 words, would you like to automatically recover the missing word?" = ""; + +"Join Evolution" = ""; + +/* No comment provided by engineer. */ +"Let me know when it’s done" = ""; + +/* Validation rule */ +"Letters and numbers only" = ""; + +"masternode list #%d of %d" = ""; + +/* Validation rule: Maximum 24 characters */ +"Maximum %ld characters" = ""; + +/* Validation rule */ +"Minimum 3 characters" = ""; + +"My Contacts" = ""; + +/* No comment provided by engineer. */ +"Name" = ""; + +/* (List of) New (notifications) */ +"New" = ""; + +/* No comment provided by engineer. */ +"Notifications" = ""; + +/* Once accepts your request... */ +"Once %@ accepts your request you can Pay Directly to Username" = ""; + +"Pay" = ""; + +/* emphasized text in: Add as your contact to Pay Directly to Username and Retain Mutual Transaction History */ +"Pay Directly to Username" = ""; + +/* 1 out of 4 in the Paying Animation */ +"Paying" = ""; + +/* 2 out of 4 in the Paying Animation */ +"Paying." = ""; + +/* 3 out of 4 in the Paying Animation */ +"Paying.." = ""; + +/* 4 out of 4 in the Paying Animation */ +"Paying..." = ""; + +"Pending" = ""; + +/* No comment provided by engineer. */ +"Please try scanning again" = ""; + +/* No comment provided by engineer. */ +"Please Wait" = ""; + +/* No comment provided by engineer. */ +"Please wait" = ""; + +/* No comment provided by engineer. */ +"Recover" = ""; + +/* No comment provided by engineer. */ +"Recovering..." = ""; + +/* No comment provided by engineer. */ +"Recovery phrase must have 12, 15, 18, 21 or 24 words" = ""; + +/* No comment provided by engineer. */ +"Register?" = ""; + +/* emphasized text in: Add as your contact to Pay Directly to Username and Retain Mutual Transaction History */ +"Retain Mutual Transaction History" = ""; + +/* No comment provided by engineer. */ +"Search for a contact" = ""; + +/* No comment provided by engineer. */ +"Search for a contact request" = ""; + +/* No comment provided by engineer. */ +"Search for a User on the Dash Network" = ""; + +/* No comment provided by engineer. */ +"Search for a username" = ""; + +/* Search results for \"John Doe\" */ +"Search results for \"" = ""; + +/* No comment provided by engineer. */ +"Searching for username %@ on the Dash Network" = ""; + +/* No comment provided by engineer. */ +"Send Contact Request" = ""; + +/* No comment provided by engineer. */ +"Sending to" = ""; + +/* No comment provided by engineer. */ +"Sort by" = ""; + +/* No comment provided by engineer. */ +"Sort Contacts" = ""; + +"Support" = ""; + +/* No comment provided by engineer. */ +"Syncing Balance" = ""; + +/* No comment provided by engineer. */ +"There are no new notifications" = ""; + +/* No comment provided by engineer. */ +"There are no users that match with the name %@" = ""; + +/* No comment provided by engineer. */ +"There are no users that match with the name %@ in your contacts" = ""; + +/* No comment provided by engineer. */ +"Upgrade Fee" = ""; + +/* No comment provided by engineer. */ +"Upgrading to DashPay" = ""; + +/* No comment provided by engineer. */ +"Username taken" = ""; + +/* No comment provided by engineer. */ +"Validating username done" = ""; + +/* No comment provided by engineer. */ +"Validating username failed" = ""; + +/* No comment provided by engineer. */ +"Validating username…" = ""; + +/* No comment provided by engineer. */ +"View All" = ""; + +/* No comment provided by engineer. */ +"Why I should not take a screenshot?" = ""; + +/* No comment provided by engineer. */ +"WIF Private key" = ""; + +"You accepted the contact request from %@" = ""; + +/* No comment provided by engineer. */ +"You have chosen \"%@\" as your username. Your username cannot be changed once registered." = ""; + +/* No comment provided by engineer. */ +"You sent the contact request to %@" = ""; + +"Your DashPay Username is ready to use" = ""; + +/* No comment provided by engineer. */ +"Your username %@ has been successfully created on the Dash Network" = ""; + +/* No comment provided by engineer. */ +"Your username %@ is being created on the Dash Network" = ""; + +/* No comment provided by engineer. */ +"Сopied address or QR" = ""; diff --git a/DashWallet/nb.lproj/Localizable.strings b/DashWallet/nb.lproj/Localizable.strings index b0cfb64a1..b8ec60eca 100644 --- a/DashWallet/nb.lproj/Localizable.strings +++ b/DashWallet/nb.lproj/Localizable.strings @@ -1,4 +1,3 @@ - /* No comment provided by engineer. */ "%@ is not allowed to access Face ID" = "%@ is not allowed to access Face ID"; @@ -245,9 +244,6 @@ /* ex., Download peer: 127.0.0.1:9999 */ "Download peer: %@" = "Download peer: %@"; -/* No comment provided by engineer. */ -"Email client is not configured. Please add your email account in Settings" = "Email client is not configured. Please add your email account in Settings"; - /* No comment provided by engineer. */ "Enable Face ID" = "Enable Face ID"; @@ -650,9 +646,6 @@ /* No comment provided by engineer. */ "Recovery phrase doesn't match" = "Recovery phrase doesn't match"; -/* No comment provided by engineer. */ -"Recovery phrase must have %d words" = "Recovery phrase must have %d words"; - /* No comment provided by engineer. */ "Register" = "Register"; @@ -752,18 +745,12 @@ /* Pay by (scanning QR code) */ "Send by" = "Send by"; -/* No comment provided by engineer. */ -"Send crash report" = "Send crash report"; - /* No comment provided by engineer. */ "Send to" = "Send to"; /* Translate it as short as possible! (24 symbols max) */ "Send to Address" = "Send to Address"; -/* No comment provided by engineer. */ -"Send to copied address" = "Send to copied address"; - /* Translate it as short as possible! (24 symbols max) */ "Send with NFC" = "Send with NFC"; @@ -1043,9 +1030,6 @@ /* No comment provided by engineer. */ "We have detected that Dash Wallet crashed during migration. Rescanning the blockchain will solve this issue or you may try again. Rescanning should preferably be performed on wifi and will take up to half an hour. Your funds will be available once the sync process is complete." = "We have detected that Dash Wallet crashed during migration. Rescanning the blockchain will solve this issue or you may try again. Rescanning should preferably be performed on wifi and will take up to half an hour. Your funds will be available once the sync process is complete."; -/* No comment provided by engineer. */ -"We have detected that Dash Wallet crashed last time it was opened. Would you like to help us solve the issue by sending us the crash report data? Your transaction history and any other private information WILL NOT be shared." = "We have detected that Dash Wallet crashed last time it was opened. Would you like to help us solve the issue by sending us the crash report data? Your transaction history and any other private information WILL NOT be shared."; - /* No comment provided by engineer. */ "We Upgraded" = "We Upgraded"; @@ -1102,3 +1086,291 @@ /* No comment provided by engineer. */ "Your wallet is secured now. You can use your recovery phrase anytime to recover your account on another device." = "Your wallet is secured now. You can use your recovery phrase anytime to recover your account on another device."; + +/* No comment provided by engineer. */ +"%@ has accepted your contact request" = ""; + +/* Username has sent you a contact request */ +"%@ has sent you a contact request" = ""; + +"(1/3) Processing Payment" = ""; + +/* No comment provided by engineer. */ +"(1/3) Unable to process payment" = ""; + +/* No comment provided by engineer. */ +"(2/3) Creating Dash Identity" = ""; + +/* No comment provided by engineer. */ +"(2/3) Unable to create Dash Identity" = ""; + +/* No comment provided by engineer. */ +"(3/3) Can't register username" = ""; + +/* No comment provided by engineer. */ +"(3/3) Registering Username" = ""; + +/* No comment provided by engineer. */ +"\"%@\" is not a recovery phrase word. Would you like to try to recover the correct word that should be in its place?" = ""; + +/* No comment provided by engineer. */ +"Accept" = ""; + +/* No comment provided by engineer. */ +"Activity" = ""; + +/* Add as your contact... */ +"Add %@ as your contact to Pay Directly to Username and Retain Mutual Transaction History" = ""; + +/* No comment provided by engineer. */ +"Add a New Contact" = ""; + +/* Choose your Dash username */ +"Choose your" = ""; + +/* No comment provided by engineer. */ +"Confirm & Pay" = ""; + +/* No comment provided by engineer. */ +"Connecting to payment server" = ""; + +/* No comment provided by engineer. */ +"Contact Request Pending" = ""; + +/* No comment provided by engineer. */ +"Contact Requests" = ""; + +/* No comment provided by engineer. */ +"Contacts" = ""; + +/* No comment provided by engineer. */ +"Could not automatically recover missing or incorrect words" = ""; + +/* No comment provided by engineer. */ +"Could not connect to the Dash network, please check that you are connected to the internet." = ""; + +/* No comment provided by engineer. */ +"Current user: %@" = ""; + +/* No comment provided by engineer. */ +"Dash username" = ""; + +/* No comment provided by engineer. */ +"DashPay Upgrade Fee" = ""; + +/* No comment provided by engineer. */ +"Do not take a screenshot" = ""; + +/* (List of notifications happened) Earlier (some time ago) */ +"Earlier" = ""; + +/* Input username textfield placeholder */ +"eg: johndoe" = ""; + +/* No comment provided by engineer. */ +"Error" = ""; + +/* No comment provided by engineer. */ +"Error Upgrading" = ""; + +"Extended Public Keys" = ""; + +/* No comment provided by engineer. */ +"Find a user on the Dash Network" = ""; + +/* No comment provided by engineer. */ +"Found missing word:\n%@" = ""; + +/* No comment provided by engineer. */ +"Found missing words:\n%@" = ""; + +/* No comment provided by engineer. */ +"Found potential missing words:\n%@" = ""; + +/* No comment provided by engineer. */ +"Generate extended public keys?" = ""; + +/* Username has requested to be your friend */ +"has requested to be your friend" = ""; + +/* No comment provided by engineer. */ +"header #%d of %d" = ""; + +/* Hello username, */ +"Hello %@," = ""; + +"I Accept" = ""; + +"Invalid Payment Request" = ""; + +/* No comment provided by engineer. */ +"Invalid QR Code" = ""; + +/* No comment provided by engineer. */ +"It would seem like you are attempting to restore your wallet a using a 12 word recovery phrase, however you have only entered 10 words, would you like to automatically recover missing words? This might take around an hour. We recommend plugging in your device." = ""; + +/* No comment provided by engineer. */ +"It would seem like you are attempting to restore your wallet a using a 12 word recovery phrase, however you have only entered 11 words, would you like to automatically recover the missing word?" = ""; + +"Join Evolution" = ""; + +/* No comment provided by engineer. */ +"Let me know when it’s done" = ""; + +/* Validation rule */ +"Letters and numbers only" = ""; + +"masternode list #%d of %d" = ""; + +/* Validation rule: Maximum 24 characters */ +"Maximum %ld characters" = ""; + +/* Validation rule */ +"Minimum 3 characters" = ""; + +"My Contacts" = ""; + +/* No comment provided by engineer. */ +"Name" = ""; + +/* (List of) New (notifications) */ +"New" = ""; + +/* No comment provided by engineer. */ +"Notifications" = ""; + +/* Once accepts your request... */ +"Once %@ accepts your request you can Pay Directly to Username" = ""; + +"Pay" = ""; + +/* emphasized text in: Add as your contact to Pay Directly to Username and Retain Mutual Transaction History */ +"Pay Directly to Username" = ""; + +/* 1 out of 4 in the Paying Animation */ +"Paying" = ""; + +/* 2 out of 4 in the Paying Animation */ +"Paying." = ""; + +/* 3 out of 4 in the Paying Animation */ +"Paying.." = ""; + +/* 4 out of 4 in the Paying Animation */ +"Paying..." = ""; + +"Pending" = ""; + +/* No comment provided by engineer. */ +"Please try scanning again" = ""; + +/* No comment provided by engineer. */ +"Please Wait" = ""; + +/* No comment provided by engineer. */ +"Please wait" = ""; + +/* No comment provided by engineer. */ +"Recover" = ""; + +/* No comment provided by engineer. */ +"Recovering..." = ""; + +/* No comment provided by engineer. */ +"Recovery phrase must have 12, 15, 18, 21 or 24 words" = ""; + +/* No comment provided by engineer. */ +"Register?" = ""; + +/* emphasized text in: Add as your contact to Pay Directly to Username and Retain Mutual Transaction History */ +"Retain Mutual Transaction History" = ""; + +/* No comment provided by engineer. */ +"Search for a contact" = ""; + +/* No comment provided by engineer. */ +"Search for a contact request" = ""; + +/* No comment provided by engineer. */ +"Search for a User on the Dash Network" = ""; + +/* No comment provided by engineer. */ +"Search for a username" = ""; + +/* Search results for \"John Doe\" */ +"Search results for \"" = ""; + +/* No comment provided by engineer. */ +"Searching for username %@ on the Dash Network" = ""; + +/* No comment provided by engineer. */ +"Send Contact Request" = ""; + +/* No comment provided by engineer. */ +"Sending to" = ""; + +/* No comment provided by engineer. */ +"Sort by" = ""; + +/* No comment provided by engineer. */ +"Sort Contacts" = ""; + +"Support" = ""; + +/* No comment provided by engineer. */ +"Syncing Balance" = ""; + +/* No comment provided by engineer. */ +"There are no new notifications" = ""; + +/* No comment provided by engineer. */ +"There are no users that match with the name %@" = ""; + +/* No comment provided by engineer. */ +"There are no users that match with the name %@ in your contacts" = ""; + +/* No comment provided by engineer. */ +"Upgrade Fee" = ""; + +/* No comment provided by engineer. */ +"Upgrading to DashPay" = ""; + +/* No comment provided by engineer. */ +"Username taken" = ""; + +/* No comment provided by engineer. */ +"Validating username done" = ""; + +/* No comment provided by engineer. */ +"Validating username failed" = ""; + +/* No comment provided by engineer. */ +"Validating username…" = ""; + +/* No comment provided by engineer. */ +"View All" = ""; + +/* No comment provided by engineer. */ +"Why I should not take a screenshot?" = ""; + +/* No comment provided by engineer. */ +"WIF Private key" = ""; + +"You accepted the contact request from %@" = ""; + +/* No comment provided by engineer. */ +"You have chosen \"%@\" as your username. Your username cannot be changed once registered." = ""; + +/* No comment provided by engineer. */ +"You sent the contact request to %@" = ""; + +"Your DashPay Username is ready to use" = ""; + +/* No comment provided by engineer. */ +"Your username %@ has been successfully created on the Dash Network" = ""; + +/* No comment provided by engineer. */ +"Your username %@ is being created on the Dash Network" = ""; + +/* No comment provided by engineer. */ +"Сopied address or QR" = ""; From 6b909c5e2111c3092ddb0edcf57393a109396fb0 Mon Sep 17 00:00:00 2001 From: Quantum Explorer Date: Sun, 27 Jun 2021 13:29:52 +0700 Subject: [PATCH 34/34] fixed signer --- .../DWLocalMasternodeControlViewController.m | 3 +- .../Tools/Masternode/Masternode.storyboard | 118 +++++++++--------- 2 files changed, 63 insertions(+), 58 deletions(-) diff --git a/DashWallet/Sources/UI/Menu/Tools/Masternode/Local Masternodes/DWLocalMasternodeControlViewController.m b/DashWallet/Sources/UI/Menu/Tools/Masternode/Local Masternodes/DWLocalMasternodeControlViewController.m index db4826cdd..44d3574bc 100644 --- a/DashWallet/Sources/UI/Menu/Tools/Masternode/Local Masternodes/DWLocalMasternodeControlViewController.m +++ b/DashWallet/Sources/UI/Menu/Tools/Masternode/Local Masternodes/DWLocalMasternodeControlViewController.m @@ -506,7 +506,8 @@ - (void)raiseIssue:(NSString *)issue message:(NSString *)message { } - (void)showSignMessageForKey:(DSKey *)key { - DWSignMessageViewController *signMessageViewController = [[DWSignMessageViewController alloc] init]; + UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"Masternode" bundle:nil]; + DWSignMessageViewController *signMessageViewController = (DWSignMessageViewController *)[storyboard instantiateViewControllerWithIdentifier:@"DWSignMessageViewControllerIdentifier"]; signMessageViewController.key = key; [self.navigationController pushViewController:signMessageViewController animated:YES]; } diff --git a/DashWallet/Sources/UI/Menu/Tools/Masternode/Masternode.storyboard b/DashWallet/Sources/UI/Menu/Tools/Masternode/Masternode.storyboard index 246caa59c..220805786 100644 --- a/DashWallet/Sources/UI/Menu/Tools/Masternode/Masternode.storyboard +++ b/DashWallet/Sources/UI/Menu/Tools/Masternode/Masternode.storyboard @@ -1,9 +1,9 @@ - + - + @@ -20,7 +20,7 @@ - + @@ -38,12 +38,12 @@ - + - + @@ -72,7 +72,7 @@ - + @@ -101,7 +101,7 @@ - + @@ -133,7 +133,7 @@ - + @@ -174,7 +174,7 @@ - + @@ -214,14 +214,14 @@ - + - + @@ -276,7 +276,7 @@ - + @@ -296,7 +296,7 @@ - + @@ -316,7 +316,7 @@ - + @@ -333,7 +333,7 @@ - + @@ -357,7 +357,7 @@ - + @@ -386,7 +386,7 @@ - + @@ -418,7 +418,7 @@ - + @@ -470,6 +470,7 @@ + @@ -503,7 +504,8 @@ - + + @@ -512,7 +514,6 @@ - @@ -537,10 +538,10 @@ - + - + @@ -571,7 +572,7 @@