[#1362] Release 1-2-1 preview
- The scan qr for some cameras returned several QR codes found, this needed to be handled [#1362] Release 1-2-1 preview - All texts localized
This commit is contained in:
parent
a9aae12413
commit
acdba147b4
|
@ -89,7 +89,7 @@ let package = Package(
|
|||
.package(url: "https://github.com/pointfreeco/swift-case-paths", from: "1.5.4"),
|
||||
.package(url: "https://github.com/pointfreeco/swift-url-routing", from: "0.6.2"),
|
||||
.package(url: "https://github.com/zcash-hackworks/MnemonicSwift", from: "2.2.4"),
|
||||
.package(url: "https://github.com/Electric-Coin-Company/zcash-swift-wallet-sdk", from: "2.2.4"),
|
||||
.package(url: "https://github.com/Electric-Coin-Company/zcash-swift-wallet-sdk", exact: "2.2.3"),
|
||||
.package(url: "https://github.com/firebase/firebase-ios-sdk", from: "10.27.0"),
|
||||
.package(url: "https://github.com/flexa/flexa-ios.git", from: "1.0.3"),
|
||||
.package(url: "https://github.com/pacu/zcash-swift-payment-uri", from: "0.1.0-beta.9")
|
||||
|
|
|
@ -84,7 +84,7 @@ public struct AddressDetails {
|
|||
|
||||
case .copyToPastboard:
|
||||
pasteboard.setString(state.address)
|
||||
state.toast = .top("Copied to the clipboard!")
|
||||
state.toast = .top(L10n.General.copiedToTheClipboard)
|
||||
return .none
|
||||
|
||||
case .generateQRCode:
|
||||
|
|
|
@ -74,7 +74,7 @@ public struct AddressDetailsView: View {
|
|||
Spacer()
|
||||
|
||||
ZashiButton(
|
||||
"Share QR Code",
|
||||
L10n.AddressDetails.shareQR,
|
||||
prefixView:
|
||||
Asset.Assets.Icons.share.image
|
||||
.zImage(size: 20, style: Design.Btns.Primary.fg)
|
||||
|
@ -85,7 +85,7 @@ public struct AddressDetailsView: View {
|
|||
.disabled(store.addressToShare != nil)
|
||||
|
||||
ZashiButton(
|
||||
"Copy Address",
|
||||
L10n.AddressDetails.copyAddress,
|
||||
type: .ghost,
|
||||
prefixView:
|
||||
Asset.Assets.copy.image
|
||||
|
@ -129,9 +129,9 @@ extension AddressDetailsView {
|
|||
UIShareDialogView(activityItems: [
|
||||
ShareableImage(
|
||||
image: UIImage(cgImage: cgImg),
|
||||
title: "My Zashi ZEC Address",
|
||||
reason: "Hi, scan this QR code to send me a ZEC payment!"
|
||||
), "Hi, scan this QR code to send me a ZEC payment!"
|
||||
title: L10n.AddressDetails.shareTitle,
|
||||
reason: L10n.AddressDetails.shareDesc
|
||||
), L10n.AddressDetails.shareDesc
|
||||
]) {
|
||||
store.send(.shareFinished)
|
||||
}
|
||||
|
|
|
@ -28,13 +28,13 @@ public struct DeeplinkWarningView: View {
|
|||
.padding(.bottom, 24)
|
||||
.padding(.leading, 12)
|
||||
|
||||
Text("Looks like you used a third-party app to scan for payment.")
|
||||
Text(L10n.DeeplinkWarning.title)
|
||||
.zFont(.semiBold, size: 24, style: Design.Text.primary)
|
||||
.minimumScaleFactor(0.5)
|
||||
.multilineTextAlignment(.center)
|
||||
.lineLimit(2)
|
||||
|
||||
Text("For better safety and security, rescan the QR code with Zashi.")
|
||||
Text(L10n.DeeplinkWarning.desc)
|
||||
.zFont(size: 14, style: Design.Text.primary)
|
||||
.multilineTextAlignment(.center)
|
||||
.screenHorizontalPadding()
|
||||
|
@ -42,7 +42,7 @@ public struct DeeplinkWarningView: View {
|
|||
|
||||
Spacer()
|
||||
|
||||
ZashiButton("Rescan in Zashi") {
|
||||
ZashiButton(L10n.DeeplinkWarning.cta) {
|
||||
store.send(.gotItTapped)
|
||||
}
|
||||
.padding(.bottom, 24)
|
||||
|
@ -51,7 +51,7 @@ public struct DeeplinkWarningView: View {
|
|||
.navigationBarTitleDisplayMode(.inline)
|
||||
.screenHorizontalPadding()
|
||||
.applyErredScreenBackground()
|
||||
.screenTitle("HELLO!")
|
||||
.screenTitle(L10n.DeeplinkWarning.screenTitle.uppercased())
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -68,7 +68,7 @@ public struct Receive {
|
|||
|
||||
case .copyToPastboard(let text):
|
||||
pasteboard.setString(text)
|
||||
state.toast = .top("Copied to the clipboard!")
|
||||
state.toast = .top(L10n.General.copiedToTheClipboard)
|
||||
return .none
|
||||
|
||||
case .requestTapped:
|
||||
|
|
|
@ -38,7 +38,7 @@ public struct ReceiveView: View {
|
|||
WithPerceptionTracking {
|
||||
VStack(alignment: .leading, spacing: 0) {
|
||||
HStack {
|
||||
Text("Receive Zcash")
|
||||
Text(L10n.Receive.title)
|
||||
.zFont(.semiBold, size: 28, style: Design.Text.primary)
|
||||
.lineLimit(1)
|
||||
.padding(.top, 24)
|
||||
|
@ -47,7 +47,7 @@ public struct ReceiveView: View {
|
|||
Spacer()
|
||||
}
|
||||
|
||||
Text("Prioritize using your shielded address for maximum privacy.")
|
||||
Text(L10n.Receive.warning)
|
||||
.zFont(size: 16, style: Design.Text.secondary)
|
||||
}
|
||||
.padding(.horizontal, 20)
|
||||
|
@ -55,23 +55,9 @@ public struct ReceiveView: View {
|
|||
currentFocus = .uaAddress
|
||||
}
|
||||
|
||||
// HStack(alignment: .top, spacing: 0) {
|
||||
// Asset.Assets.infoOutline.image
|
||||
// .zImage(size: 20, style: Design.Text.tertiary)
|
||||
// .padding(.trailing, 12)
|
||||
//
|
||||
// Text("Prioritize using shielded address for maximum privacy.")
|
||||
// .zFont(size: 12, style: Design.Text.tertiary)
|
||||
// .padding(.top, 3)
|
||||
//
|
||||
// Spacer(minLength: 0)
|
||||
// }
|
||||
// .padding(.horizontal, 20)
|
||||
// .padding(.top, 24)
|
||||
|
||||
addressBlock(
|
||||
prefixIcon: Asset.Assets.Brandmarks.brandmarkMax.image,
|
||||
title: "Zcash Shielded Address",
|
||||
title: L10n.Receive.shieldedAddress,
|
||||
address: store.unifiedAddress,
|
||||
postfixIcon: Asset.Assets.Icons.shieldTickFilled.image,
|
||||
iconFg: Design.Utility.Purple._800,
|
||||
|
@ -94,7 +80,7 @@ public struct ReceiveView: View {
|
|||
|
||||
addressBlock(
|
||||
prefixIcon: Asset.Assets.Brandmarks.brandmarkLow.image,
|
||||
title: "Zcash Transparent Address",
|
||||
title: L10n.Receive.transparentAddress,
|
||||
address: store.transparentAddress,
|
||||
iconFg: Design.Text.primary,
|
||||
iconBg: Design.Surfaces.bgTertiary,
|
||||
|
@ -116,7 +102,7 @@ public struct ReceiveView: View {
|
|||
if networkType == .testnet {
|
||||
addressBlock(
|
||||
prefixIcon: Asset.Assets.Brandmarks.brandmarkLow.image,
|
||||
title: "Zcash Sapling Address",
|
||||
title: L10n.Receive.saplingAddress,
|
||||
address: store.saplingAddress,
|
||||
iconFg: Design.Text.primary,
|
||||
iconBg: Design.Surfaces.bgTertiary,
|
||||
|
@ -170,8 +156,6 @@ public struct ReceiveView: View {
|
|||
|
||||
Text(address.zip316)
|
||||
.zFont(size: 14, style: Design.Text.tertiary)
|
||||
//.truncationMode(.middle)
|
||||
//.frame(maxWidth: 110)
|
||||
.padding(.bottom, expanded ? 10 : 0)
|
||||
}
|
||||
.lineLimit(1)
|
||||
|
@ -188,15 +172,15 @@ public struct ReceiveView: View {
|
|||
|
||||
if expanded {
|
||||
HStack(spacing: 8) {
|
||||
button("Copy", fill: iconBg.color, icon: Asset.Assets.copy.image) {
|
||||
button(L10n.Receive.copy, fill: iconBg.color, icon: Asset.Assets.copy.image) {
|
||||
copyAction()
|
||||
}
|
||||
|
||||
button("QR Code", fill: iconBg.color, icon: Asset.Assets.Icons.qr.image) {
|
||||
button(L10n.Receive.qrCode, fill: iconBg.color, icon: Asset.Assets.Icons.qr.image) {
|
||||
qrAction()
|
||||
}
|
||||
|
||||
button("Request", fill: iconBg.color, icon: Asset.Assets.Icons.coinsHand.image) {
|
||||
button(L10n.Receive.request, fill: iconBg.color, icon: Asset.Assets.Icons.coinsHand.image) {
|
||||
requestAction()
|
||||
}
|
||||
}
|
||||
|
|
|
@ -18,8 +18,11 @@ public struct RequestZecSummaryView: View {
|
|||
|
||||
@Perception.Bindable var store: StoreOf<RequestZec>
|
||||
|
||||
public init(store: StoreOf<RequestZec>) {
|
||||
let tokenName: String
|
||||
|
||||
public init(store: StoreOf<RequestZec>, tokenName: String) {
|
||||
self.store = store
|
||||
self.tokenName = tokenName
|
||||
}
|
||||
|
||||
public var body: some View {
|
||||
|
@ -30,7 +33,7 @@ public struct RequestZecSummaryView: View {
|
|||
|
||||
Group {
|
||||
Text(store.requestedZec.decimalString())
|
||||
+ Text(" ZEC")
|
||||
+ Text(" \(tokenName)")
|
||||
.foregroundColor(Design.Text.quaternary.color)
|
||||
}
|
||||
.zFont(.semiBold, size: 56, style: Design.Text.primary)
|
||||
|
@ -64,7 +67,7 @@ public struct RequestZecSummaryView: View {
|
|||
Spacer()
|
||||
|
||||
ZashiButton(
|
||||
"Share QR Code",
|
||||
L10n.RequestZec.Summary.shareQR,
|
||||
prefixView:
|
||||
Asset.Assets.Icons.share.image
|
||||
.zImage(size: 20, style: Design.Btns.Primary.fg)
|
||||
|
@ -75,7 +78,7 @@ public struct RequestZecSummaryView: View {
|
|||
.disabled(store.encryptedOutputToBeShared != nil)
|
||||
|
||||
ZashiButton(
|
||||
"Close",
|
||||
L10n.General.close,
|
||||
type: .ghost
|
||||
) {
|
||||
store.send(.cancelRequestTapped)
|
||||
|
@ -89,7 +92,7 @@ public struct RequestZecSummaryView: View {
|
|||
.onAppear { store.send(.onAppear) }
|
||||
.onDisappear { store.send(.onDisappear) }
|
||||
}
|
||||
.screenTitle("Request")
|
||||
.screenTitle(L10n.General.request)
|
||||
.screenHorizontalPadding()
|
||||
.applyScreenBackground()
|
||||
.zashiBack()
|
||||
|
@ -117,9 +120,9 @@ extension RequestZecSummaryView {
|
|||
UIShareDialogView(activityItems: [
|
||||
ShareableImage(
|
||||
image: UIImage(cgImage: cgImg),
|
||||
title: "Request ZEC",
|
||||
reason: "Hi, I have generated a ZEC payment request for you using the Zashi app!"
|
||||
), "Hi, I have generated a ZEC payment request for you using the Zashi app! (download link: https://apps.apple.com/app/zashi-zcash-wallet/id1672392439)"
|
||||
title: L10n.RequestZec.Summary.shareTitle,
|
||||
reason: L10n.RequestZec.Summary.shareDesc
|
||||
), "\(L10n.RequestZec.Summary.shareDesc) \(L10n.RequestZec.Summary.shareMsg)"
|
||||
]) {
|
||||
store.send(.shareFinished)
|
||||
}
|
||||
|
@ -134,6 +137,6 @@ extension RequestZecSummaryView {
|
|||
|
||||
#Preview {
|
||||
NavigationView {
|
||||
RequestZecView(store: RequestZec.placeholder)
|
||||
RequestZecView(store: RequestZec.placeholder, tokenName: "ZEC")
|
||||
}
|
||||
}
|
||||
|
|
|
@ -19,9 +19,12 @@ public struct RequestZecView: View {
|
|||
@State private var keyboardVisible: Bool = false
|
||||
|
||||
@FocusState private var isMemoFocused
|
||||
|
||||
let tokenName: String
|
||||
|
||||
public init(store: StoreOf<RequestZec>) {
|
||||
public init(store: StoreOf<RequestZec>, tokenName: String) {
|
||||
self.store = store
|
||||
self.tokenName = tokenName
|
||||
}
|
||||
|
||||
public var body: some View {
|
||||
|
@ -37,13 +40,13 @@ public struct RequestZecView: View {
|
|||
PrivacyBadge(store.maxPrivacy ? .max : .low)
|
||||
.padding(.top, 26)
|
||||
|
||||
Text("Payment Request")
|
||||
Text(L10n.RequestZec.title)
|
||||
.zFont(.medium, size: 18, style: Design.Text.tertiary)
|
||||
.padding(.top, 12)
|
||||
|
||||
Group {
|
||||
Text(store.requestedZec.decimalString())
|
||||
+ Text(" ZEC")
|
||||
+ Text(" \(tokenName)")
|
||||
.foregroundColor(Design.Text.quaternary.color)
|
||||
}
|
||||
.zFont(.semiBold, size: 56, style: Design.Text.primary)
|
||||
|
@ -55,7 +58,7 @@ public struct RequestZecView: View {
|
|||
MessageEditorView(
|
||||
store: store.memoStore(),
|
||||
title: "",
|
||||
placeholder: "What’s this for?"
|
||||
placeholder: L10n.RequestZec.whatFor
|
||||
)
|
||||
.frame(minHeight: 155)
|
||||
.frame(maxHeight: 300)
|
||||
|
@ -68,13 +71,13 @@ public struct RequestZecView: View {
|
|||
}
|
||||
.padding(.vertical, 1)
|
||||
|
||||
ZashiButton("Request") {
|
||||
ZashiButton(L10n.General.request) {
|
||||
store.send(.requestTapped)
|
||||
}
|
||||
.disabled(!store.memoState.isValid)
|
||||
.padding(.bottom, keyboardVisible ? 48 : 24)
|
||||
}
|
||||
.screenTitle("Request")
|
||||
.screenTitle(L10n.General.request)
|
||||
.zashiBack()
|
||||
.screenHorizontalPadding()
|
||||
.applyScreenBackground()
|
||||
|
@ -127,7 +130,7 @@ public struct RequestZecView: View {
|
|||
|
||||
#Preview {
|
||||
NavigationView {
|
||||
RequestZecView(store: RequestZec.placeholder)
|
||||
RequestZecView(store: RequestZec.placeholder, tokenName: "ZEC")
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -33,9 +33,10 @@ public struct Scan {
|
|||
public var cancelId = UUID()
|
||||
|
||||
public var info = ""
|
||||
public var isCameraEnabled = true
|
||||
public var isTorchAvailable = false
|
||||
public var isTorchOn = false
|
||||
public var isCameraEnabled = true
|
||||
public var isRPFound = false
|
||||
|
||||
public init(
|
||||
info: String = "",
|
||||
|
@ -77,6 +78,7 @@ public struct Scan {
|
|||
case .onAppear:
|
||||
// reset the values
|
||||
state.isTorchOn = false
|
||||
state.isRPFound = false
|
||||
// check the torch availability
|
||||
state.isTorchAvailable = captureDevice.isTorchAvailable()
|
||||
if !captureDevice.isAuthorized() {
|
||||
|
@ -102,6 +104,10 @@ public struct Scan {
|
|||
return .none
|
||||
|
||||
case .libraryImage(let image):
|
||||
guard !state.isRPFound else {
|
||||
return .none
|
||||
}
|
||||
|
||||
guard let codes = qrImageDetector.check(image) else {
|
||||
return .send(.scanFailed(.noQRCodeFound))
|
||||
}
|
||||
|
@ -117,7 +123,8 @@ public struct Scan {
|
|||
if uriParser.isValidURI(code, zcashSDKEnvironment.network.networkType) {
|
||||
return .send(.found(code.redacted))
|
||||
} else if let data = uriParser.checkRP(code) {
|
||||
return .send(.foundRP(data))
|
||||
state.isRPFound = true
|
||||
return .send(.foundRP(data))
|
||||
} else {
|
||||
return .send(.scanFailed(.noQRCodeFound))
|
||||
}
|
||||
|
@ -141,9 +148,13 @@ public struct Scan {
|
|||
)
|
||||
|
||||
case .scan(let code):
|
||||
guard !state.isRPFound else {
|
||||
return .none
|
||||
}
|
||||
if uriParser.isValidURI(code.data, zcashSDKEnvironment.network.networkType) {
|
||||
return .send(.found(code))
|
||||
} else if let data = uriParser.checkRP(code.data) {
|
||||
state.isRPFound = true
|
||||
return .send(.foundRP(data))
|
||||
} else {
|
||||
return .send(.scanFailed(.invalidQRCode))
|
||||
|
|
|
@ -40,7 +40,7 @@ public struct RequestPaymentConfirmationView: View {
|
|||
|
||||
HStack {
|
||||
VStack(alignment: .leading, spacing: 6) {
|
||||
Text("Requested By")
|
||||
Text(L10n.Send.RequestPayment.requestedBy)
|
||||
.zFont(.medium, size: 14, style: Design.Text.tertiary)
|
||||
|
||||
if let alias = store.alias {
|
||||
|
@ -62,7 +62,7 @@ public struct RequestPaymentConfirmationView: View {
|
|||
if !store.isTransparentAddress {
|
||||
if store.isAddressExpanded {
|
||||
ZashiButton(
|
||||
"Hide",
|
||||
L10n.General.hide,
|
||||
type: .tertiary,
|
||||
infinityWidth: false,
|
||||
prefixView:
|
||||
|
@ -75,7 +75,7 @@ public struct RequestPaymentConfirmationView: View {
|
|||
.padding(.trailing, 12)
|
||||
} else {
|
||||
ZashiButton(
|
||||
"Show",
|
||||
L10n.General.show,
|
||||
type: .tertiary,
|
||||
infinityWidth: false,
|
||||
prefixView:
|
||||
|
@ -90,7 +90,7 @@ public struct RequestPaymentConfirmationView: View {
|
|||
|
||||
if store.alias == nil {
|
||||
ZashiButton(
|
||||
"Save",
|
||||
L10n.General.save,
|
||||
type: .tertiary,
|
||||
infinityWidth: false,
|
||||
prefixView:
|
||||
|
@ -109,7 +109,7 @@ public struct RequestPaymentConfirmationView: View {
|
|||
|
||||
if !store.message.isEmpty {
|
||||
VStack(alignment: .leading) {
|
||||
Text("For:")
|
||||
Text(L10n.Send.RequestPayment.for)
|
||||
.zFont(.medium, size: 14, style: Design.Text.tertiary)
|
||||
|
||||
HStack {
|
||||
|
@ -148,7 +148,7 @@ public struct RequestPaymentConfirmationView: View {
|
|||
.padding(.bottom, 20)
|
||||
|
||||
HStack {
|
||||
Text("Total")
|
||||
Text(L10n.Send.RequestPayment.total)
|
||||
.zFont(.medium, size: 14, style: Design.Text.tertiary)
|
||||
|
||||
Spacer()
|
||||
|
@ -204,7 +204,7 @@ public struct RequestPaymentConfirmationView: View {
|
|||
}
|
||||
}
|
||||
.onAppear { store.send(.onAppear) }
|
||||
.screenTitle("PAYMENT REQUEST")
|
||||
.screenTitle(L10n.Send.RequestPayment.title.uppercased())
|
||||
}
|
||||
.navigationBarBackButtonHidden()
|
||||
.padding(.vertical, 1)
|
||||
|
|
|
@ -212,7 +212,7 @@ public struct SendFlow {
|
|||
case resetForm
|
||||
case reviewPressed
|
||||
case scan(Scan.Action)
|
||||
case sendFailed(ZcashError)
|
||||
case sendFailed(ZcashError, Confirmation)
|
||||
case syncAmounts(Bool)
|
||||
case updateDestination(SendFlow.State.Destination?)
|
||||
case walletBalances(WalletBalances.Action)
|
||||
|
@ -307,7 +307,7 @@ public struct SendFlow {
|
|||
case .value(let rate), .refreshEnable(let rate):
|
||||
if let rate {
|
||||
state.currencyConversion = CurrencyConversion(.usd, ratio: rate.rate.doubleValue, timestamp: rate.date.timeIntervalSince1970)
|
||||
return .send(.syncAmounts(false))
|
||||
return .send(.syncAmounts(true))
|
||||
}
|
||||
case .stale:
|
||||
state.currencyConversion = nil
|
||||
|
@ -337,13 +337,17 @@ public struct SendFlow {
|
|||
await send(.proposal(proposal))
|
||||
await send(.confirmationRequired(confirmationType))
|
||||
} catch {
|
||||
await send(.sendFailed(error.toZcashError()))
|
||||
await send(.sendFailed(error.toZcashError(), confirmationType))
|
||||
}
|
||||
}
|
||||
|
||||
case .sendFailed(let error):
|
||||
state.alert = AlertState.sendFailure(error)
|
||||
return .none
|
||||
case let .sendFailed(error, confirmationType):
|
||||
if confirmationType == .requestPayment {
|
||||
return .send(.updateDestination(nil))
|
||||
} else {
|
||||
state.alert = AlertState.sendFailure(error)
|
||||
return .none
|
||||
}
|
||||
|
||||
case .confirmationRequired:
|
||||
return .none
|
||||
|
|
|
@ -225,7 +225,7 @@ public struct SendFlowView: View {
|
|||
.zImage(size: 20, style: Design.Text.lightSupport)
|
||||
.padding(.trailing, 12)
|
||||
|
||||
Text("Add contact by tapping on Address Book icon.")
|
||||
Text(L10n.Send.addressNotInBook)
|
||||
.zFont(.medium, size: 14, style: Design.Text.light)
|
||||
.padding(.top, 2)
|
||||
.lineLimit(1)
|
||||
|
@ -241,37 +241,6 @@ public struct SendFlowView: View {
|
|||
}
|
||||
.frame(width: geometry.size.width - 48)
|
||||
.offset(x: 24, y: geometry[$0].minY + geometry[$0].height - 16)
|
||||
|
||||
|
||||
// VStack(spacing: 0) {
|
||||
// Asset.Assets.Icons.user.image
|
||||
// .zImage(size: 20, style: Design.Text.primary)
|
||||
//
|
||||
// Text(L10n.Send.addressNotInBook)
|
||||
// .zFont(.semiBold, size: 18, style: Design.Text.primary)
|
||||
// .padding(.top, 8)
|
||||
//
|
||||
// ZashiButton(
|
||||
// L10n.AddressBook.addNewContact,
|
||||
// type: .tertiary,
|
||||
// infinityWidth: false
|
||||
// ) {
|
||||
// store.send(.addNewContactTapped(store.address))
|
||||
// }
|
||||
// .padding(.top, 16)
|
||||
// }
|
||||
// .padding(32)
|
||||
// .frame(width: geometry.size.width - 48)
|
||||
// .background {
|
||||
// RoundedRectangle(cornerRadius: 10)
|
||||
// .fill(Design.Surfaces.bgPrimary.color)
|
||||
// .background {
|
||||
// RoundedRectangle(cornerRadius: 10)
|
||||
// .stroke(Design.Surfaces.strokePrimary.color)
|
||||
// }
|
||||
// }
|
||||
// .offset(x: 24, y: geometry[$0].minY + geometry[$0].height - 18)
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -145,31 +145,46 @@ public struct TabsView: View {
|
|||
.navigationLinkEmpty(
|
||||
isActive: store.bindingForStackMaxPrivacy(.zecKeyboard),
|
||||
destination: {
|
||||
ZecKeyboardView(store: store.zecKeyboardStore())
|
||||
.navigationLinkEmpty(
|
||||
isActive: store.bindingForStackMaxPrivacy(.requestZec),
|
||||
destination: {
|
||||
RequestZecView(store: store.requestZecStore())
|
||||
.navigationLinkEmpty(
|
||||
isActive: store.bindingForStackMaxPrivacy(.requestZecSummary),
|
||||
destination: {
|
||||
RequestZecSummaryView(store: store.requestZecStore())
|
||||
}
|
||||
ZecKeyboardView(
|
||||
store: store.zecKeyboardStore(),
|
||||
tokenName: tokenName
|
||||
)
|
||||
.navigationLinkEmpty(
|
||||
isActive: store.bindingForStackMaxPrivacy(.requestZec),
|
||||
destination: {
|
||||
RequestZecView(
|
||||
store: store.requestZecStore(),
|
||||
tokenName: tokenName
|
||||
)
|
||||
.navigationLinkEmpty(
|
||||
isActive: store.bindingForStackMaxPrivacy(.requestZecSummary),
|
||||
destination: {
|
||||
RequestZecSummaryView(
|
||||
store: store.requestZecStore(),
|
||||
tokenName: tokenName
|
||||
)
|
||||
}
|
||||
)
|
||||
}
|
||||
)
|
||||
}
|
||||
)
|
||||
}
|
||||
)
|
||||
.navigationLinkEmpty(
|
||||
isActive: store.bindingForStackLowPrivacy(.zecKeyboard),
|
||||
destination: {
|
||||
ZecKeyboardView(store: store.zecKeyboardStore())
|
||||
.navigationLinkEmpty(
|
||||
isActive: store.bindingForStackLowPrivacy(.requestZecSummary),
|
||||
destination: {
|
||||
RequestZecSummaryView(store: store.requestZecStore())
|
||||
}
|
||||
)
|
||||
ZecKeyboardView(
|
||||
store: store.zecKeyboardStore(),
|
||||
tokenName: tokenName
|
||||
)
|
||||
.navigationLinkEmpty(
|
||||
isActive: store.bindingForStackLowPrivacy(.requestZecSummary),
|
||||
destination: {
|
||||
RequestZecSummaryView(
|
||||
store: store.requestZecStore(),
|
||||
tokenName: tokenName
|
||||
)
|
||||
}
|
||||
)
|
||||
}
|
||||
)
|
||||
.navigationLinkEmpty(
|
||||
|
|
|
@ -16,8 +16,11 @@ import Utils
|
|||
public struct ZecKeyboardView: View {
|
||||
@Perception.Bindable var store: StoreOf<ZecKeyboard>
|
||||
|
||||
public init(store: StoreOf<ZecKeyboard>) {
|
||||
let tokenName: String
|
||||
|
||||
public init(store: StoreOf<ZecKeyboard>, tokenName: String) {
|
||||
self.store = store
|
||||
self.tokenName = tokenName
|
||||
}
|
||||
|
||||
public var body: some View {
|
||||
|
@ -30,7 +33,7 @@ public struct ZecKeyboardView: View {
|
|||
.zImage(size: 20, style: Design.Utility.WarningYellow._500)
|
||||
.padding(.trailing, 12)
|
||||
|
||||
Text("This transaction amount is invalid.")
|
||||
Text(L10n.ZecKeyboard.invalid)
|
||||
.zFont(.medium, size: 14, style: Design.Utility.WarningYellow._700)
|
||||
.padding(.top, 3)
|
||||
}
|
||||
|
@ -42,7 +45,7 @@ public struct ZecKeyboardView: View {
|
|||
HStack(spacing: 0) {
|
||||
if store.isInputInZec {
|
||||
Text(store.humanReadableMainInput)
|
||||
+ Text(" ZEC")
|
||||
+ Text(" \(tokenName)")
|
||||
.foregroundColor(Design.Text.quaternary.color)
|
||||
} else {
|
||||
if store.isCurrencySymbolPrefix {
|
||||
|
@ -82,7 +85,7 @@ public struct ZecKeyboardView: View {
|
|||
}
|
||||
} else {
|
||||
Text(store.humanReadableConvertedInput)
|
||||
+ Text(" ZEC")
|
||||
+ Text(" \(tokenName)")
|
||||
.foregroundColor(Design.Text.quaternary.color)
|
||||
}
|
||||
}
|
||||
|
@ -150,7 +153,7 @@ public struct ZecKeyboardView: View {
|
|||
.padding(.bottom, 24)
|
||||
}
|
||||
|
||||
ZashiButton("Next") {
|
||||
ZashiButton(L10n.General.next) {
|
||||
store.send(.nextTapped)
|
||||
}
|
||||
.disabled(store.isNextButtonDisabled)
|
||||
|
@ -161,13 +164,13 @@ public struct ZecKeyboardView: View {
|
|||
}
|
||||
.applyScreenBackground()
|
||||
.zashiBack()
|
||||
.screenTitle("Request")
|
||||
.screenTitle(L10n.General.request)
|
||||
}
|
||||
}
|
||||
|
||||
#Preview {
|
||||
NavigationView {
|
||||
ZecKeyboardView(store: ZecKeyboard.placeholder)
|
||||
ZecKeyboardView(store: ZecKeyboard.placeholder, tokenName: "ZEC")
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -71,6 +71,16 @@ public enum L10n {
|
|||
public static let title = L10n.tr("Localizable", "addressBook.newContact.title", fallback: "Add New Address")
|
||||
}
|
||||
}
|
||||
public enum AddressDetails {
|
||||
/// Copy Address
|
||||
public static let copyAddress = L10n.tr("Localizable", "addressDetails.copyAddress", fallback: "Copy Address")
|
||||
/// Hi, scan this QR code to send me a ZEC payment!
|
||||
public static let shareDesc = L10n.tr("Localizable", "addressDetails.shareDesc", fallback: "Hi, scan this QR code to send me a ZEC payment!")
|
||||
/// Share QR Code
|
||||
public static let shareQR = L10n.tr("Localizable", "addressDetails.shareQR", fallback: "Share QR Code")
|
||||
/// My Zashi ZEC Address
|
||||
public static let shareTitle = L10n.tr("Localizable", "addressDetails.shareTitle", fallback: "My Zashi ZEC Address")
|
||||
}
|
||||
public enum Balance {
|
||||
/// Available Balance:
|
||||
public static let availableTitle = L10n.tr("Localizable", "balance.availableTitle", fallback: "Available Balance:")
|
||||
|
@ -149,6 +159,16 @@ public enum L10n {
|
|||
/// Currency Conversion
|
||||
public static let title = L10n.tr("Localizable", "currencyConversion.title", fallback: "Currency Conversion")
|
||||
}
|
||||
public enum DeeplinkWarning {
|
||||
/// Rescan in Zashi
|
||||
public static let cta = L10n.tr("Localizable", "deeplinkWarning.cta", fallback: "Rescan in Zashi")
|
||||
/// For better safety and security, rescan the QR code with Zashi.
|
||||
public static let desc = L10n.tr("Localizable", "deeplinkWarning.desc", fallback: "For better safety and security, rescan the QR code with Zashi.")
|
||||
/// HELLO!
|
||||
public static let screenTitle = L10n.tr("Localizable", "deeplinkWarning.screenTitle", fallback: "HELLO!")
|
||||
/// Looks like you used a third-party app to scan for payment.
|
||||
public static let title = L10n.tr("Localizable", "deeplinkWarning.title", fallback: "Looks like you used a third-party app to scan for payment.")
|
||||
}
|
||||
public enum DeleteWallet {
|
||||
/// Delete
|
||||
public static let actionButtonTitle = L10n.tr("Localizable", "deleteWallet.actionButtonTitle", fallback: "Delete")
|
||||
|
@ -182,6 +202,8 @@ public enum L10n {
|
|||
public static let close = L10n.tr("Localizable", "general.close", fallback: "Close")
|
||||
/// Confirm
|
||||
public static let confirm = L10n.tr("Localizable", "general.confirm", fallback: "Confirm")
|
||||
/// Copied to the clipboard!
|
||||
public static let copiedToTheClipboard = L10n.tr("Localizable", "general.copiedToTheClipboard", fallback: "Copied to the clipboard!")
|
||||
/// Delete
|
||||
public static let delete = L10n.tr("Localizable", "general.delete", fallback: "Delete")
|
||||
/// Done
|
||||
|
@ -190,6 +212,8 @@ public enum L10n {
|
|||
public static func fee(_ p1: Any) -> String {
|
||||
return L10n.tr("Localizable", "general.fee", String(describing: p1), fallback: "Typical Fee < %@")
|
||||
}
|
||||
/// Hide
|
||||
public static let hide = L10n.tr("Localizable", "general.hide", fallback: "Hide")
|
||||
///
|
||||
public static let hideBalancesLeast = L10n.tr("Localizable", "general.hideBalancesLeast", fallback: "")
|
||||
/// -----
|
||||
|
@ -206,10 +230,14 @@ public enum L10n {
|
|||
public static let no = L10n.tr("Localizable", "general.no", fallback: "No")
|
||||
/// Ok
|
||||
public static let ok = L10n.tr("Localizable", "general.ok", fallback: "Ok")
|
||||
/// Request
|
||||
public static let request = L10n.tr("Localizable", "general.request", fallback: "Request")
|
||||
/// Save
|
||||
public static let save = L10n.tr("Localizable", "general.save", fallback: "Save")
|
||||
/// Send
|
||||
public static let send = L10n.tr("Localizable", "general.send", fallback: "Send")
|
||||
/// Show
|
||||
public static let show = L10n.tr("Localizable", "general.show", fallback: "Show")
|
||||
/// Success
|
||||
public static let success = L10n.tr("Localizable", "general.success", fallback: "Success")
|
||||
/// Tap to copy
|
||||
|
@ -340,14 +368,26 @@ public enum L10n {
|
|||
public enum Receive {
|
||||
/// Copy
|
||||
public static let copy = L10n.tr("Localizable", "receive.copy", fallback: "Copy")
|
||||
/// QR Code
|
||||
public static let qrCode = L10n.tr("Localizable", "receive.qrCode", fallback: "QR Code")
|
||||
/// Request
|
||||
public static let request = L10n.tr("Localizable", "receive.request", fallback: "Request")
|
||||
/// Sapling Address
|
||||
public static let sa = L10n.tr("Localizable", "receive.sa", fallback: "Sapling Address")
|
||||
/// Share
|
||||
public static let share = L10n.tr("Localizable", "receive.share", fallback: "Share")
|
||||
/// Zcash Sapling Address
|
||||
public static let saplingAddress = L10n.tr("Localizable", "receive.saplingAddress", fallback: "Zcash Sapling Address")
|
||||
/// Zcash Shielded Address
|
||||
public static let shieldedAddress = L10n.tr("Localizable", "receive.shieldedAddress", fallback: "Zcash Shielded Address")
|
||||
/// Transparent Address
|
||||
public static let ta = L10n.tr("Localizable", "receive.ta", fallback: "Transparent Address")
|
||||
/// Receive Zcash
|
||||
public static let title = L10n.tr("Localizable", "receive.title", fallback: "Receive Zcash")
|
||||
/// Zcash Transparent Address
|
||||
public static let transparentAddress = L10n.tr("Localizable", "receive.transparentAddress", fallback: "Zcash Transparent Address")
|
||||
/// Unified Address
|
||||
public static let ua = L10n.tr("Localizable", "receive.ua", fallback: "Unified Address")
|
||||
/// Prioritize using your shielded address for maximum privacy.
|
||||
public static let warning = L10n.tr("Localizable", "receive.warning", fallback: "Prioritize using your shielded address for maximum privacy.")
|
||||
public enum Error {
|
||||
/// could not extract sapling receiver from UA
|
||||
public static let cantExtractSaplingAddress = L10n.tr("Localizable", "receive.error.cantExtractSaplingAddress", fallback: "could not extract sapling receiver from UA")
|
||||
|
@ -385,6 +425,22 @@ public enum L10n {
|
|||
public static let wroteItDown = L10n.tr("Localizable", "recoveryPhraseDisplay.button.wroteItDown", fallback: "I've saved it")
|
||||
}
|
||||
}
|
||||
public enum RequestZec {
|
||||
/// Payment Request
|
||||
public static let title = L10n.tr("Localizable", "requestZec.title", fallback: "Payment Request")
|
||||
/// What’s this for?
|
||||
public static let whatFor = L10n.tr("Localizable", "requestZec.whatFor", fallback: "What’s this for?")
|
||||
public enum Summary {
|
||||
/// Hi, I have generated a ZEC payment request for you using the Zashi app!
|
||||
public static let shareDesc = L10n.tr("Localizable", "requestZec.summary.shareDesc", fallback: "Hi, I have generated a ZEC payment request for you using the Zashi app!")
|
||||
/// (download link: https://apps.apple.com/app/zashi-zcash-wallet/id1672392439)
|
||||
public static let shareMsg = L10n.tr("Localizable", "requestZec.summary.shareMsg", fallback: "(download link: https://apps.apple.com/app/zashi-zcash-wallet/id1672392439)")
|
||||
/// Share QR Code
|
||||
public static let shareQR = L10n.tr("Localizable", "requestZec.summary.shareQR", fallback: "Share QR Code")
|
||||
/// Request ZEC
|
||||
public static let shareTitle = L10n.tr("Localizable", "requestZec.summary.shareTitle", fallback: "Request ZEC")
|
||||
}
|
||||
}
|
||||
public enum RestoreInfo {
|
||||
/// Got it!
|
||||
public static let gotIt = L10n.tr("Localizable", "restoreInfo.gotIt", fallback: "Got it!")
|
||||
|
@ -575,8 +631,8 @@ public enum L10n {
|
|||
public static let warningD = L10n.tr("Localizable", "securityWarning.warningD", fallback: ": Crash reports might reveal the timing of the crash and what events occurred, but do not reveal spending or viewing keys.")
|
||||
}
|
||||
public enum Send {
|
||||
/// Address not in Address Book
|
||||
public static let addressNotInBook = L10n.tr("Localizable", "send.addressNotInBook", fallback: "Address not in Address Book")
|
||||
/// Add contact by tapping on Address Book icon.
|
||||
public static let addressNotInBook = L10n.tr("Localizable", "send.addressNotInBook", fallback: "Add contact by tapping on Address Book icon.")
|
||||
/// Zcash Address
|
||||
public static let addressPlaceholder = L10n.tr("Localizable", "send.addressPlaceholder", fallback: "Zcash Address")
|
||||
/// Amount
|
||||
|
@ -625,6 +681,16 @@ public enum L10n {
|
|||
/// Transparent transactions can’t have memos
|
||||
public static let memo = L10n.tr("Localizable", "send.info.memo", fallback: "Transparent transactions can’t have memos")
|
||||
}
|
||||
public enum RequestPayment {
|
||||
/// For:
|
||||
public static let `for` = L10n.tr("Localizable", "send.requestPayment.for", fallback: "For:")
|
||||
/// Requested By
|
||||
public static let requestedBy = L10n.tr("Localizable", "send.requestPayment.requestedBy", fallback: "Requested By")
|
||||
/// Payment Request
|
||||
public static let title = L10n.tr("Localizable", "send.requestPayment.title", fallback: "Payment Request")
|
||||
/// Total
|
||||
public static let total = L10n.tr("Localizable", "send.requestPayment.total", fallback: "Total")
|
||||
}
|
||||
}
|
||||
public enum ServerSetup {
|
||||
/// Active
|
||||
|
@ -848,6 +914,10 @@ public enum L10n {
|
|||
return L10n.tr("Localizable", "whatsNew.version", String(describing: p1), fallback: "Zashi Version %@")
|
||||
}
|
||||
}
|
||||
public enum ZecKeyboard {
|
||||
/// This transaction amount is invalid.
|
||||
public static let invalid = L10n.tr("Localizable", "zecKeyboard.invalid", fallback: "This transaction amount is invalid.")
|
||||
}
|
||||
}
|
||||
// swiftlint:enable explicit_type_interface function_parameter_count identifier_name line_length
|
||||
// swiftlint:enable nesting type_body_length type_name vertical_whitespace_opening_braces
|
||||
|
|
|
@ -66,16 +66,36 @@
|
|||
"home.migratingDatabases" = "Upgrading databases…";
|
||||
|
||||
// MARK: - Address Details
|
||||
"addressDetails.shareTitle" = "My Zashi ZEC Address";
|
||||
"addressDetails.shareDesc" = "Hi, scan this QR code to send me a ZEC payment!";
|
||||
"addressDetails.shareQR" = "Share QR Code";
|
||||
"addressDetails.copyAddress" = "Copy Address";
|
||||
|
||||
// MARK: - Request ZEC
|
||||
"requestZec.title" = "Payment Request";
|
||||
"requestZec.whatFor" = "What’s this for?";
|
||||
"requestZec.summary.shareQR" = "Share QR Code";
|
||||
"requestZec.summary.shareTitle" = "Request ZEC";
|
||||
"requestZec.summary.shareDesc" = "Hi, I have generated a ZEC payment request for you using the Zashi app!";
|
||||
"requestZec.summary.shareMsg" = "(download link: https://apps.apple.com/app/zashi-zcash-wallet/id1672392439)";
|
||||
|
||||
// MARK: - Receive
|
||||
"receive.ua" = "Unified Address";
|
||||
"receive.sa" = "Sapling Address";
|
||||
"receive.ta" = "Transparent Address";
|
||||
"receive.copy" = "Copy";
|
||||
"receive.share" = "Share";
|
||||
"receive.error.cantExtractUnifiedAddress" = "could not extract UA";
|
||||
"receive.error.cantExtractTransparentAddress" = "could not extract transparent receiver from UA";
|
||||
"receive.error.cantExtractSaplingAddress" = "could not extract sapling receiver from UA";
|
||||
"receive.title" = "Receive Zcash";
|
||||
"receive.warning" = "Prioritize using your shielded address for maximum privacy.";
|
||||
"receive.shieldedAddress" = "Zcash Shielded Address";
|
||||
"receive.transparentAddress" = "Zcash Transparent Address";
|
||||
"receive.saplingAddress" = "Zcash Sapling Address";
|
||||
"receive.copy" = "Copy";
|
||||
"receive.qrCode" = "QR Code";
|
||||
"receive.request" = "Request";
|
||||
|
||||
// MARK: - Address Details
|
||||
// MARK: - Server Setup
|
||||
"serverSetup.title" = "Server";
|
||||
"serverSetup.custom" = "custom server";
|
||||
"serverSetup.default" = "Default";
|
||||
|
@ -122,7 +142,7 @@
|
|||
"send.error.invalidAmount" = "Invalid amount";
|
||||
"send.error.invalidAddress" = "Invalid address";
|
||||
"send.info.memo" = "Transparent transactions can’t have memos";
|
||||
"send.addressNotInBook" = "Address not in Address Book";
|
||||
"send.addressNotInBook" = "Add contact by tapping on Address Book icon.";
|
||||
"send.amountSummary" = "Total Amount";
|
||||
"send.amount" = "Amount";
|
||||
"send.toSummary" = "Sending to";
|
||||
|
@ -135,6 +155,13 @@
|
|||
"send.alert.failure.message" = "Error: %@";
|
||||
"send.addressPlaceholder" = "Zcash Address";
|
||||
"send.currencyPlaceholder" = "USD";
|
||||
"send.requestPayment.requestedBy" = "Requested By";
|
||||
"send.requestPayment.for" = "For:";
|
||||
"send.requestPayment.total" = "Total";
|
||||
"send.requestPayment.title" = "Payment Request";
|
||||
|
||||
// MARK: - ZEC Keyboard
|
||||
"zecKeyboard.invalid" = "This transaction amount is invalid.";
|
||||
|
||||
// MARK: - Delete Wallet
|
||||
"deleteWallet.title" = "Delete Zashi";
|
||||
|
@ -215,6 +242,9 @@ Sharing this private data is irrevocable — once you have shared this private d
|
|||
"general.confirm" = "Confirm";
|
||||
"general.done" = "Done";
|
||||
"general.save" = "Save";
|
||||
"general.request" = "Request";
|
||||
"general.hide" = "Hide";
|
||||
"general.show" = "Show";
|
||||
"balance.availableTitle" = "Available Balance:";
|
||||
"qrCodeFor" = "QR Code for %@";
|
||||
"general.tapToCopy" = "Tap to copy";
|
||||
|
@ -226,6 +256,7 @@ Sharing this private data is irrevocable — once you have shared this private d
|
|||
"general.alert.continue" = "Continue";
|
||||
"general.alert.caution" = "Heads up";
|
||||
"general.alert.ignore" = "Ignore";
|
||||
"general.copiedToTheClipboard" = "Copied to the clipboard!";
|
||||
|
||||
// MARK: - Wallet Status
|
||||
"walletStatus.restoringWallet" = "RESTORING YOUR WALLET…";
|
||||
|
@ -353,6 +384,12 @@ Sharing this private data is irrevocable — once you have shared this private d
|
|||
"currencyConversion.refreshDesc" = "The rate is refreshed automatically and can also be refreshed manually.";
|
||||
"currencyConversion.skipBtn" = "Skip for now";
|
||||
|
||||
// MARK: - Deeplink Warning
|
||||
"deeplinkWarning.title" = "Looks like you used a third-party app to scan for payment.";
|
||||
"deeplinkWarning.desc" = "For better safety and security, rescan the QR code with Zashi.";
|
||||
"deeplinkWarning.cta" = "Rescan in Zashi";
|
||||
"deeplinkWarning.screenTitle" = "Hello!";
|
||||
|
||||
// MARK: - Tooltips
|
||||
"tooltip.exchangeRate.title" = "Exchange rate unavailable";
|
||||
"tooltip.exchangeRate.desc" = "We tried but we couldn’t refresh the exchange rate for you. Check your connection, relaunch the app, and we’ll try again.";
|
||||
|
|
|
@ -2020,7 +2020,7 @@
|
|||
ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor;
|
||||
CODE_SIGN_ENTITLEMENTS = "secant-distrib.entitlements";
|
||||
CODE_SIGN_STYLE = Automatic;
|
||||
CURRENT_PROJECT_VERSION = 2;
|
||||
CURRENT_PROJECT_VERSION = 5;
|
||||
DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
|
||||
DEVELOPMENT_ASSET_PATHS = "\"secant/Preview Content\"";
|
||||
DEVELOPMENT_TEAM = RLPRR8CPQG;
|
||||
|
@ -2061,7 +2061,7 @@
|
|||
ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor;
|
||||
CODE_SIGN_ENTITLEMENTS = "secant-distrib.entitlements";
|
||||
CODE_SIGN_STYLE = Automatic;
|
||||
CURRENT_PROJECT_VERSION = 2;
|
||||
CURRENT_PROJECT_VERSION = 5;
|
||||
DEVELOPMENT_ASSET_PATHS = "\"secant/Preview Content\"";
|
||||
DEVELOPMENT_TEAM = RLPRR8CPQG;
|
||||
ENABLE_BITCODE = NO;
|
||||
|
@ -2263,7 +2263,7 @@
|
|||
ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor;
|
||||
CODE_SIGN_ENTITLEMENTS = "secant-distrib.entitlements";
|
||||
CODE_SIGN_STYLE = Automatic;
|
||||
CURRENT_PROJECT_VERSION = 2;
|
||||
CURRENT_PROJECT_VERSION = 5;
|
||||
DEVELOPMENT_ASSET_PATHS = "\"secant/Preview Content\"";
|
||||
DEVELOPMENT_TEAM = RLPRR8CPQG;
|
||||
ENABLE_BITCODE = NO;
|
||||
|
|
|
@ -356,8 +356,8 @@
|
|||
"kind" : "remoteSourceControl",
|
||||
"location" : "https://github.com/apple/swift-nio-http2.git",
|
||||
"state" : {
|
||||
"revision" : "b5f7062b60e4add1e8c343ba4eb8da2e324b3a94",
|
||||
"version" : "1.34.0"
|
||||
"revision" : "eaa71bb6ae082eee5a07407b1ad0cbd8f48f9dca",
|
||||
"version" : "1.34.1"
|
||||
}
|
||||
},
|
||||
{
|
||||
|
@ -374,8 +374,8 @@
|
|||
"kind" : "remoteSourceControl",
|
||||
"location" : "https://github.com/apple/swift-nio-transport-services.git",
|
||||
"state" : {
|
||||
"revision" : "38ac8221dd20674682148d6451367f89c2652980",
|
||||
"version" : "1.21.0"
|
||||
"revision" : "dbace16f126fdcd80d58dc54526c561ca17327d7",
|
||||
"version" : "1.22.0"
|
||||
}
|
||||
},
|
||||
{
|
||||
|
@ -471,10 +471,10 @@
|
|||
{
|
||||
"identity" : "zcash-light-client-ffi",
|
||||
"kind" : "remoteSourceControl",
|
||||
"location" : "https://github.com/Electric-Coin-Company/zcash-light-client-ffi",
|
||||
"location" : "https://github.com/zcash-hackworks/zcash-light-client-ffi",
|
||||
"state" : {
|
||||
"revision" : "be1575f8d2dce5b7502448ef1f8619e2ca9359d9",
|
||||
"version" : "0.10.0"
|
||||
"revision" : "8ed5b08d59ff5e7e11240be29b084dedbdf2f268",
|
||||
"version" : "0.9.1"
|
||||
}
|
||||
},
|
||||
{
|
||||
|
@ -491,8 +491,8 @@
|
|||
"kind" : "remoteSourceControl",
|
||||
"location" : "https://github.com/Electric-Coin-Company/zcash-swift-wallet-sdk",
|
||||
"state" : {
|
||||
"revision" : "e2ce60ef245e3d672b0703a0fbf1d4ed31eaa16c",
|
||||
"version" : "2.2.4"
|
||||
"revision" : "af9383b419c2cafe37ac9edecf9d41cf37fbbf45",
|
||||
"version" : "2.2.3"
|
||||
}
|
||||
}
|
||||
],
|
||||
|
|
Loading…
Reference in New Issue