2020-12-09 15:58:33 -08:00
|
|
|
//
|
|
|
|
// GetUTXOsViewController.swift
|
|
|
|
// ZcashLightClientSample
|
|
|
|
//
|
|
|
|
// Created by Francisco Gindre on 12/9/20.
|
|
|
|
// Copyright © 2020 Electric Coin Company. All rights reserved.
|
|
|
|
//
|
|
|
|
|
|
|
|
import UIKit
|
|
|
|
import ZcashLightClientKit
|
|
|
|
import KRProgressHUD
|
|
|
|
class GetUTXOsViewController: UIViewController {
|
|
|
|
@IBOutlet weak var tAddressField: UITextField!
|
|
|
|
@IBOutlet weak var getButton: UIButton!
|
2020-12-11 12:15:29 -08:00
|
|
|
@IBOutlet weak var getFromCache: UIButton!
|
2020-12-23 15:01:55 -08:00
|
|
|
@IBOutlet weak var shieldFundsButton: UIButton!
|
2020-12-09 15:58:33 -08:00
|
|
|
@IBOutlet weak var validAddressLabel: UILabel!
|
|
|
|
@IBOutlet weak var messageLabel: UILabel!
|
|
|
|
|
|
|
|
|
|
|
|
override func viewDidLoad() {
|
|
|
|
super.viewDidLoad()
|
|
|
|
|
|
|
|
updateUI()
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
func updateUI() {
|
|
|
|
let valid = Initializer.shared.isValidTransparentAddress(tAddressField.text ?? "")
|
|
|
|
|
|
|
|
self.validAddressLabel.text = valid ? "Valid TransparentAddress" : "Invalid Transparent address"
|
|
|
|
self.validAddressLabel.textColor = valid ? UIColor.systemGreen : UIColor.systemRed
|
|
|
|
|
|
|
|
self.getButton.isEnabled = valid
|
2020-12-11 12:15:29 -08:00
|
|
|
self.getFromCache.isEnabled = valid
|
2020-12-09 15:58:33 -08:00
|
|
|
}
|
|
|
|
|
|
|
|
@IBAction func getButtonTapped(_ sender: Any) {
|
|
|
|
guard Initializer.shared.isValidTransparentAddress(tAddressField.text ?? ""),
|
|
|
|
let tAddr = tAddressField.text else {
|
2020-12-11 12:15:29 -08:00
|
|
|
self.messageLabel.text = "Invalid t-Address"
|
2020-12-09 15:58:33 -08:00
|
|
|
return
|
|
|
|
}
|
|
|
|
KRProgressHUD.showMessage("fetching")
|
2021-03-08 10:47:36 -08:00
|
|
|
AppDelegate.shared.sharedSynchronizer.refreshUTXOs(address: tAddr) { (result) in
|
2020-12-09 15:58:33 -08:00
|
|
|
DispatchQueue.main.async { [weak self] in
|
|
|
|
KRProgressHUD.dismiss()
|
|
|
|
switch result {
|
|
|
|
case .success(let utxos):
|
2021-01-22 13:51:48 -08:00
|
|
|
do {
|
2021-03-08 10:47:36 -08:00
|
|
|
let balance = try AppDelegate.shared.sharedSynchronizer.getTransparentBalance(address: tAddr)
|
2021-01-22 13:51:48 -08:00
|
|
|
|
|
|
|
self?.messageLabel.text = """
|
2021-03-08 10:47:36 -08:00
|
|
|
Stored \(utxos.inserted.count) UTXOs for address \(tAddr)
|
|
|
|
\(utxos.skipped.count) Skipped
|
2021-01-22 13:51:48 -08:00
|
|
|
\(balance)
|
|
|
|
"""
|
|
|
|
} catch {
|
|
|
|
self?.messageLabel.text = "Error \(error)"
|
|
|
|
}
|
2020-12-09 15:58:33 -08:00
|
|
|
|
|
|
|
case .failure(let error):
|
|
|
|
self?.messageLabel.text = "Error \(error)"
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2020-12-11 12:15:29 -08:00
|
|
|
@IBAction func getFromCacheTapped(_ sender: Any) {
|
|
|
|
guard Initializer.shared.isValidTransparentAddress(tAddressField.text ?? ""),
|
|
|
|
let tAddr = tAddressField.text else {
|
|
|
|
self.messageLabel.text = "Invalid t-Address"
|
|
|
|
return
|
|
|
|
}
|
|
|
|
do {
|
|
|
|
let utxos = try AppDelegate.shared.sharedSynchronizer.cachedUTXOs(address: tAddr)
|
|
|
|
self.messageLabel.text = "found \(utxos.count) UTXOs for address \(tAddr) on cache"
|
|
|
|
} catch {
|
|
|
|
self.messageLabel.text = "Error \(error)"
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
2020-12-09 15:58:33 -08:00
|
|
|
@IBAction func viewTapped(_ recognizer: UITapGestureRecognizer) {
|
|
|
|
self.tAddressField.resignFirstResponder()
|
|
|
|
}
|
2020-12-23 15:01:55 -08:00
|
|
|
|
|
|
|
@IBAction func shieldFunds(_ sender: Any) {
|
|
|
|
do {
|
|
|
|
let seed = DemoAppConfig.seed
|
|
|
|
let sk = try DerivationTool.default.deriveSpendingKeys(seed: seed, numberOfAccounts: 1).first!
|
|
|
|
|
|
|
|
let tsk = try DerivationTool.default.deriveTransparentPrivateKey(seed: seed)
|
|
|
|
KRProgressHUD.showMessage("🛡 Shielding 🛡")
|
|
|
|
AppDelegate.shared.sharedSynchronizer.shieldFunds(spendingKey: sk, transparentSecretKey: tsk, memo: "shielding is fun!", from: 0) { (result) in
|
|
|
|
DispatchQueue.main.async {
|
|
|
|
KRProgressHUD.dismiss()
|
|
|
|
switch result{
|
|
|
|
case .success(let tx):
|
|
|
|
self.messageLabel.text = "funds shielded \(tx)"
|
|
|
|
case .failure(let error):
|
|
|
|
self.messageLabel.text = "Shielding failed: \(error)"
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
} catch {
|
|
|
|
self.messageLabel.text = "Error \(error)"
|
|
|
|
}
|
|
|
|
}
|
2020-12-09 15:58:33 -08:00
|
|
|
}
|
|
|
|
|
|
|
|
extension GetUTXOsViewController: UITextFieldDelegate {
|
|
|
|
func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, replacementString string: String) -> Bool {
|
|
|
|
updateUI()
|
|
|
|
return true
|
|
|
|
}
|
|
|
|
|
|
|
|
func textFieldDidEndEditing(_ textField: UITextField) {
|
|
|
|
updateUI()
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
2021-01-22 13:51:48 -08:00
|
|
|
|
|
|
|
|
2021-03-08 10:47:36 -08:00
|
|
|
extension WalletBalance {
|
2021-01-22 13:51:48 -08:00
|
|
|
var description: String {
|
|
|
|
"""
|
2021-03-08 10:47:36 -08:00
|
|
|
WalletBalance:
|
|
|
|
verified: \(self.verified)
|
|
|
|
Total: \(self.total)
|
2021-01-22 13:51:48 -08:00
|
|
|
"""
|
|
|
|
}
|
|
|
|
}
|