Commit Graph

702 Commits

Author SHA1 Message Date
Francisco Gindre 3597d3c019
Merge pull request #355 from zcash/non-consensus-changes-libzcashlc
Issue #335 - Update lib.rs to lastest librustzcash master
2022-09-13 13:41:44 -07:00
Francisco Gindre e179153420 update protobuf files from lightwalletd's commit `68789356fb1a75f62735a529b38389ef08ea7582` 2022-09-12 16:58:30 -06:00
Francisco Gindre 72c1f14aa6 Issue #375 - User can't go twice in a row to SendFundsViewController 2022-09-12 16:58:29 -06:00
Francisco Gindre cd345f6ddc Add test utilities for db Migration 2022-09-12 16:58:29 -06:00
Francisco Gindre a1bc2937d4 Issue #374 - XCTest don't load Resources from the module's bundle
Tests referencing Bundle.module were failing.
Fixed with proposed solution here:
https://stackoverflow.com/questions/47177036/use-resources-in-unit-tests-with-swift-package-manager
2022-09-12 16:58:29 -06:00
Francisco Gindre 23097ac8e0 Add outputPool to NotesDao 2022-09-12 16:58:29 -06:00
Francisco Gindre 1a73985307 Fix Merge Mistakes 2022-09-12 14:36:30 -03:00
Francisco Gindre 91719508ec
Merge pull request #528 from zcash/release/0.16.9-beta
[#525] Release 0.16.9-beta

Approval on https://github.com/zcash/ZcashLightClientKit/pull/526
2022-09-12 10:07:40 -07:00
Francisco Gindre a81a77f494 Merge branch 'master' into merge_master_to_zip_316 2022-09-12 14:00:40 -03:00
Francisco Gindre 4428f9ffb2 Merge branch 'feature/zip-316-and-latest-upstream' into merge_master_to_zip_316 2022-09-12 13:40:05 -03:00
Francisco Gindre a05990b417 [#525] Release 0.16.9-beta 2022-09-12 13:18:40 -03:00
Lukas Korba 9cf2e07d25
Merge pull request #524 from LukasKorba/483_OutboundTransactionManager_Async
[483] OutboundTransactionManager To Async/Await
2022-09-12 14:25:34 +02:00
Lukas Korba 4a2fcde353 [483] OutboundTransactionManager To Async/Await
- protocol methods updated from closure to async APIs
- PersistentTransactionManager updated to implement async APIs
- PersistentTransactionManager deleted closure APIs
- SDKSynchronizer updated to use async APIs
2022-09-12 13:27:52 +02:00
Francisco Gindre 375cf3ce41
Merge pull request #393 from zcash/384_adopt_type_safe_memos 2022-09-09 19:41:33 -07:00
Francisco Gindre 0282d81584 Fix Errors introduced by Merge-Commit 2022-09-08 20:44:38 -03:00
Francisco Gindre 458d3d7106 Merge branch 'feature/zip-316-and-latest-upstream' into merge_master_to_zip_316 2022-09-07 20:58:46 -03:00
Francisco Gindre 9b930391a4 [#384] Adopt Type Safe Memos in the FFI and SDK
Closes #384

This makes the SDK use the Memo and MemoBytes types across the FFI and the
public interface of the SDKSynchronizer. Addresses the comments by @defuse  on
issue https://github.com/zcash/ZcashLightClientKit/issues/378.
These changes depend on zcash-light-client-ffi repo changes managing
memos as byte arrays instead of string encoding of memos.

There are some compromises in terms of database representation of memos
and their exposure in transaction representing entities because we
wanted to avoid changing the database at this moment and be retro-
compatible with earlier versions and maintain deprecated APIs for wallets
to have time to adopt.

Memo and MemoBytes are WIP and subject to change. we are exploring
making Memo an opaque type based on a struct and drop the enum approach
to make the interface less throwing.

Fix: wrap new functions and deprecate old API. catch Memo errors

update get_sent and get_received memo functions from rust welding
point to branch in FFI repo

Fix type Tests/DarksideTests/BalanceTests.swift

Co-authored-by: Carter Jernigan <git@carterjernigan.com>

PR suggestions. Inverted condition

PR Suggestions + cleanup

merge fixes

Suggestions from PR to treat null bytes on TextMemo

refactor unpaddedRawBytes function and add tests

undo change in PendingTransactionSQLDAO

Fix broken import on Swift Package for libzcashlc

Fix libzcashlc url

Fix travis.yml
2022-09-07 14:49:08 -03:00
Kris Nuttycombe a8e6b5b5e4
Merge pull request #491 from zcash/type_safe_address_api
Add type-safe wrappers for address types.
2022-09-07 09:20:18 -06:00
Francisco Gindre 16ec1ebb70 Fix call on `zcashlc_is_valid_sapling_extended_spending_key` with `[CChar](key.utf8CString)` 2022-09-06 15:25:11 -03:00
Francisco Gindre 3f61e182d9 remove unused type `UFVK` 2022-09-06 15:21:20 -03:00
Francisco Gindre 094d660fca Temporarily fix shield funds `initSpend` call with the `accountIndex`
unified address from SDK Synchronizer
2022-09-06 15:12:26 -03:00
Francisco Gindre ed87a2781c [#461] Adopt a Type-Safe Keys and Addresses API
This PR creates data types for Addresses and Keys so that they are
not represented by Strings anymore. This avoids mistakenly use
the wrong keys because they are all alike for the type system.

New Protocols:
=============

StringEncoded -> Protocol that makes a type can be expressed in an
string-encoded fashion either for UI or Interchange purposes.

Undescribable -> A protocol that implements methods that override default
decriptions used by debuggers, loggers and event trackers to avoid types
conforming to it to be leaked to logs.

Deleted Protocols:
==================

UnifiedFullViewingKey --> turned into a struct.
UnifiedAddress --> turned into a struct

new Error Type:
================

````
enum KeyEncodingError: Error {
    case invalidEncoding
}
````

This error is thrown when an Address or Key type (addresses are public
keys in the end) can be decoded from their String representation,
typically upon initialization from a User input.

New Types:
=========

SaplingExtendedSpendingKey -> Type for Sapling Extended Full Viewing Keys
this type will be replaced with Unified Spending Keys soon.

SaplingExtendedFullViewingKey -> Extended Full Viewing Key for Sapling.
Maintains existing funcionality. Will be probably deprecated in favor of
UFVK.

TransparentAccountPrivKey -> Private key for transparent account. Used
only for shielding operations. Note: this will probably be deprecated soon.

UnifiedFullViewingKey -> Replaces the protocol that had the same name.

TransparentAddress -> Replaces a type alias with a struct

SaplingAddress --> Represents a Sapling receiver address. Comonly called zAddress. This address corresponds to the Zcash Sapling shielded pool.
Although this it is fully functional, we encourage developers to
choose `UnifiedAddress` before Sapling or Transparent ones.

UnifiedAddress -> Represents a UA. String-encodable and Equatable. Use of
UAs must be favored instead of individual receivers for different pools.
This type can't be decomposed into their Receiver types yet.

Recipient -> This represents all valid receiver types to be used as
inputs for outgoing transactions.

````
public enum Recipient: Equatable, StringEncoded {
    case transparent(TransparentAddress)
    case sapling(SaplingAddress)
    case unified(UnifiedAddress)
````

The wrapped concrete receiver is a valid receiver type.

Deleted Type Aliases:
=====================

The following aliases were deleted and turned into types
````
public typealias TransparentAddress = String
public typealias SaplingShieldedAddress = String

````

Changes to Derivation Tool
==========================

DerivationTool has been changed to accomodate this new types and
remove Strings whenever possible.

Changes to Synchronizer and CompactBlockProcessor
=================================================
Accordingly these to components have been modified to accept the
new types intead of strings when possible.

Changes to Demo App
===================
The demo App has been patch to compile and work with the new types.
Developers must consider that the use (and abuse) of forced_try and
forced unwrapping is a "license" that maintainers are using for the
sake of brevity. We consider that clients of this SDK do know how to
handle Errors and Optional and it is not the objective of the demo
code to show good practices on those matters.

Closes #461
2022-09-05 15:09:07 -03:00
Francisco Gindre d737ddefa9 Merge branch 'master' into merge_master_to_zip_316 2022-09-01 17:51:46 -03:00
Lukas Korba 7b90e598ad
[#472] CompactBlockBatchScanningOperation to async (#505)
- CompactBlockBatchScanningOperation operation's main reimplemented to be Task based

[472] CompactBlockBatchScanningOperation to async

cleanup

[472] CompactBlockBatchScanningOperation to async (505)

- CompactBlockBatchScanningOperation wrapped to Task
2022-08-30 11:28:00 -03:00
Lukas Korba 87f50a796c
[#473] CompactBlockEnhancementOperation to async/await (#513)
- Wrapped to Task
- Downloader APIs upgraded to async one
2022-08-30 11:07:36 -03:00
Lukas Korba b684a2f486
[#474] FetchUnspentTxOutputsOperation to async/await (#514)
- wrapped to Task
- downloader uses the new async API
2022-08-30 11:00:48 -03:00
Lukas Korba 29f159845d
[#471] CompactBlockValidationOperation to async (#515)
- CompactBlockValidationOperation wrapped to Task
2022-08-30 10:56:39 -03:00
Lukas Korba be24044b51
[#470] CompactBlockStreamDownloadOperation to async (#506)
- using new sync APIs for storage and service
- whole logic wrapped in the Task

Closes #470
2022-08-29 16:53:49 -03:00
Lukas Korba 16d1948b5b
[#465] CompactBlockDownloading to Async/Await (#507)
Closes #465
- CompactBlockDownloading closures removed
- CompactBlockDownloading new async API provided
2022-08-29 16:31:01 -03:00
Francisco Gindre 30bfa6c633
Merge pull request #504 from zcash/release-0.16.8-beta
[#503] Add new checkpoints on top of 0.16.7-beta and release .8
2022-08-26 11:46:51 -07:00
Lukas Korba 742e6bd8ec
[#464] CompactBlockStorage To async/await (#494)
- await/async APIs provided
- async throws unit tests using new API implemented

[464] CompactBlockStorage To async/await (494)

- removed deprecated closure APIs
- upgraded use of the async APIs
- tests updated
2022-08-26 14:52:12 -03:00
Francisco Gindre 3606a13623 [#503] Add new checkpoints on top of 0.16.7-beta and release .8
Closes #503

This commit adds new checkpoints on top 0.16.7-beta and serves as
a point to tag the release of 0.16.8-beta
2022-08-26 13:21:42 -03:00
Lukas Korba f1a570bbc2
[#463] Migrate LightwalletService to Async/Await (#493)
- migration of the protocol's methods done
- split the code so there's blocking and non-blocking API separately

[463] Migrate LightwalletService to Async/Await

- draft

[463] Migrate LightwalletService to Async/Await

- failing tests under investigation

[463] Migrate LightwalletService to Async/Await

- code cleanup
- tests cleanup
- async throws unit tests added

[463] Migrate LightwalletService to Async/Await

- sample app updated to the latest API

[463] Migrate LightwalletService to Async/Await

- cleanup

[463] Migrate LightwalletService to Async/Await

- cleanup

[463] Migrate LightwalletService to Async/Await

- fixed non-building tests

[463] Migrate LightwalletService to Async/Await

- reverting back to lastHeight()

[463] Migrate LightwalletService to Async/Await

updated code to AsyncStream

[463] Migrate LightwalletService to Async/Await (493)

- tests fixed
- blockRange reimplemented to use AsyncStream
- grpc proto files regenerated to exclude Server
2022-08-25 10:39:59 -03:00
Francisco Gindre 29e06d0b8a
[#501] Bump MacOS minimum deployment target to 10_15 (#502)
This is needed to be ablo to build on Macs without running Xcode IDE
Closes #501
2022-08-24 18:18:28 -03:00
Kris Nuttycombe 905ee401d1 Use zcash_client_sqlite to manage migrations for the wallet db.
This change removes responsibility for maintaining the state of
the wallet database from `ZcashLightClientKit` in favor of using
the migration system now provided by librustzcash. This will help
to ensure that the structure of the database is kept consistent with
the functions that query and update the database state.

Co-authored-by: Francisco Gindre <francisco.gindre@gmail.com>
2022-08-24 09:38:42 -06:00
Francisco Gindre 739c7a7237 Point zcash-light-client-ffi to corresponding feature branch 2022-08-24 09:33:42 -06:00
Jack Grigg def779e5bc Migrate to ZIP 316 UFVKs
This also brings in various associated changes to the FFI methods in
zcash-light-client-kit as a result of moving to the main branch of
zcash/librustzcash.
2022-08-24 09:33:42 -06:00
Jack Grigg b0343d4c38 Rename `UnifiedViewingKey` to `UnifiedFullViewingKey`
The type does not yet match ZIP 316, but performing this rename first
makes the subsequent commit simpler.
2022-08-24 09:33:42 -06:00
Lukas Korba 6d0f241ed6
[#475] NextStateHelper to async/await (#495)
- refactored to await/async
2022-08-23 16:58:15 -03:00
Lukas Korba 5d662dc98b
[#496] Travis CI and GA update to support compiler >= 5.6 (#497)
- travis.yml updated to xcode13.4
- github actions updated to run on macos 12
2022-08-23 16:08:10 -03:00
Francisco Gindre fb061b27a8
[#457] Release 0.16.7-beta (#458)
Adds checkpoints on testnet and mainnet
updates changelog.md
2022-08-15 18:38:52 -03:00
Francisco Gindre 40df80ef25
[#455] revert queue priority downgrade changes from [#435] (#456)
Closes #455

this reverts queue priority changes from commit `a5d0e447748257d2af5c9101391dd05a5ce929a2` since we detected it might prevent downloads to be scheduled in a
timely fashion

Co-authored-by: pacu <pacu@pacus-MacBook-Pro.local>
2022-08-15 17:03:03 -03:00
Francisco Gindre a37c140441 0.16.6-beta
Update podspec
2022-08-02 09:14:37 -03:00
Francisco Gindre fba4cecbe6
[#452] Release ZcashLightClientKit 0.16.5-beta (#453)
0.16.5-beta

- [#449] Use CompactBlock Streamer download instead of batch downloads (#451)
This increases the speed of downloads significantly while reducing the memory footprint.
- [#435] thread sanitizer issues (#448)
Issues related to Thread Sanitizer warnings

Closes #452
2022-07-31 09:42:12 -03:00
Francisco Gindre a2283f0171
[#449] Use CompactBlock Streamer download instead of batch downloads (#451)
* [#449] Use CompactBlock Streamer download instead of batch downloade

This commit implements a small buffer for the stream download operation
so it does not store a block at a time and does it in batches instead.

Closes #449

* Fix tests

* PR Suggestions
2022-07-30 20:01:18 -03:00
Francisco Gindre a5d0e44774
[#435] thread sanitizer issues (#448)
* [#435] this commit attempts to fix thread being starved dues to inversion
of priorities where a .userInitiated thread ends up depending on a lower
priority one on GRPC.

* Add an Synchronizer State struct to report state at once

* Make CompactBlockProcessor's downloader available internally for SDKSynchronizer
remove duplicate handling of processor finished

* PR Suggestions
2022-07-29 15:20:55 -03:00
Francisco Gindre fef4bccce8
[#446] Release 0.16.4-beta (#447)
Closes #446
2022-07-29 11:41:14 -03:00
Francisco Gindre 3be694c920
[#444] Syncing Restarts to zero when the wallet is wiped and synced from zero in one go. (#445)
This commit changes the way walletBirthday is stored in the synchronizer and intinitializer. Wallets syncing from creation/restore would have a problem where the birthday stored in the Blocks Table would be the one corresponding to the chekpoint found a the time of syncing, but the compact block downloader would start downloading blocks from the height provided by the user when the wallet was restored. This would cause a `validationFailed` error at the height checkpoint.height + 1 and restart downloading from checkpoint.height and then resume correctly.

Darksidewalletd test setUp was changed re be able to reproduce the error since injection guaranteed correctness and it was not possible to reproduce the error with it since the wallet birthday height provided matched exactly with the checkpoint on disk and that's the only case that avoided this error.

Closes #444
2022-07-29 10:33:23 -03:00
Francisco Gindre 96520aeb7c
[#440] Split constants for Download Batches and Scanning Batches (#441)
this commit splits the batch sizes so that wallets can be tweaked to either scan or download more or less blocks depending of the CompactBlockProcessor.Config used. Defaults are provided

This also bumps up the default time out for GRPC services to 30 seconds to unary calls and 100 seconds to streaming calls
Also, adds some documentation formatting that won't hurt

PR Suggestions

PR Suggestions
2022-07-29 10:07:08 -03:00
Francisco Gindre 1f1f69bc24 [#438] Release 0.16.3-beta
This commit changes the Podspec and changelog.md
2022-07-26 11:14:26 -03:00