Commit Graph

50 Commits

Author SHA1 Message Date
Michal Fousek 65d6347bcf [#778] Add swiflint config file only for tests
Closes #778

- .swiftlint.yml is now used to lint only the code of the SDK.
- .swiftlint_tests.yml is now used to lint only the code of the tests.
  This config disables rules that were previously disabled in the code
  in lot of tests.
2023-02-13 13:36:58 +01:00
Michal Fousek be8afabec4 [#770] Update GRPC swift library
Closes #770
2023-02-09 19:55:46 +01:00
Michal Fousek 1a03fa6f7c [#743] Refactor blocks validation in CompactBlockProcessor
Closes #743

- Added new protocol `BlockValidator` and `BlockValidatorImpl` class. All the code related to blocks validation is extracted to `BlockValidatorImpl`.
- Fixed `testSingleDownloadAndScan()` test.
- Changed how validation error are handled. Previously validation error were handled directly next to validation code. And when some validation
errors happened method from `CompactBlockProcessor` were called. Now validation errors are handled in `CompactBlockProcessor.processNewBlocks`
in a same way as any other error that can occur during sync process.
2023-02-03 09:58:36 +01:00
Francisco Gindre fad3aae174
- [#679] Implementation of the File-system based block cache (#679)
Closes https://github.com/zcash/ZcashLightClientKit/issues/697
Closes https://github.com/zcash/ZcashLightClientKit/issues/720
Closes https://github.com/zcash/ZcashLightClientKit/issues/587
Closes https://github.com/zcash/ZcashLightClientKit/issues/667
Closes https://github.com/zcash/ZcashLightClientKit/issues/443
Closes https://github.com/zcash/ZcashLightClientKit/issues/754

- [#790] Fix ShieldFundsTests

Closes #790
Removes comments on `ShieldFundsTests` since those issues have been fixed

Depends on zcash-light-client-ffi changes that adopt newer versions of
 librustzcash crates `zcash_primitives 0.10`, `zcash_client_backend 0.7`,
`zcash_proofs 0.10`, `zcash_client_sqlite 0.5.0`.

Also allows wallets to define a shielding_threshold and will set
foundations to customize minimum confirmations for balances, spends
and shielding operations.

**Test Bootstrapping**

- `ZcashCompactBlockDescriptor`: struct that holds functions to
describe blocks as filenames and compare those filenames

`ZcashCompactBlockDescriptor.live` has the actual implementation
but it can be replaced by mocks if needed on Tests

main implementations are held under `FSCompactBlockRepository.filenameDescription` and `FSCompactBlockRepository.filenameComparison` on a separate extention

`DirectoryListingProviders` provide two default implementations of listing a
directory deterministically. `FileManager` does not define a sorting and needs to be done in-memory by calling `.sorted()` on the resulting collection. If this
is a big toll on performance it can be changed to a POSIX implementation but
this is good for now.

`ZcashCompactBlockDescriptor` adds a `height` helper function to
turn a filename into the height of the block stored.

Implemented `func latestHeight() throws -> BlockHeight ` that
returns the blockheight by querying the cache directory in a sorted
fashion and getting the last value and turning the filename into a
`BlockHeight`

Added `Meta` struct to ZcashCompactBlock.

Tests implemented:
- `filterBlockFiles`
- `testClearTheCache`
- `testLatestHeightEmptyCacheThrows`
- `testLatestHeightEmptyCacheThrowsAsync`
- `testRewindEmptyCacheDoesNothing`
- `testRewindEmptyCacheDoesNothingAsync`
- `testWhenBlockIsStoredItFollowsTheDescribedFormat`
- `testWhenBlockIsStoredItFollowsTheFilenameConvention`
- `testGetLatestHeight`
- `testRewindDeletesTheRightBlocks` test
- `testPerformanceExample` test. This isn't a real performance test because the API doesn't work with async/await yet

adopts `shield_funds` shielding threshold parameter

Implements `initBlockMetadataDb` and fix tests
Renames dbCache parameter to `fsBlockDbRoot`. Builds but tests don't pass.
Removes cacheDb uses from code. Testing utilities still persist.
Added needed information in  MIGRATING and CHANGELOG.
Added helper to perform deletion of legacy db and creation a the
new file system backed cache.

Renames parameters and changes code where needed.
Network Constants turned into `enum` with static methods.
DeletelastDownloadedBlock helper from initializer
Removes CompactBlockStorage and CompactBlockEntity.
Implements `latestCachedBlockHeight` on rustbackend.

*Replaces dependencies on ZcashRustWelding with `FSMetadataStore`*

This allows the tests to not depend in a particular implementation
of either the MockRustBackend of or ZcashRustBackend. Also provides
a way to test errors properly and switch implementations of critical
areas like `writeBlocks`.
2023-02-02 13:58:12 -03:00
Michal Fousek a0d0c90555 [#735] Use Swiftlint for the SDK
- Swiftlint binary is included in the repository.
2023-01-27 11:44:25 +01:00
Lukas Korba f69da50ba9
[#747] Remove SampleLogger and replace it with OSLogger (#748)
- SampleLogger removed
- OSLogger used
- category default
2023-01-26 18:14:07 +01:00
Michal Fousek bb57d5d9fe [#728] Remove Swiftilint SPM package plugin
Closes #728
2023-01-20 09:24:50 +01:00
Lukas Korba 372ea5af70
[#711] Add Swiftlint plug in to SDK (#722)
- plugin integrated
- errors resolved
- warnings resolved
- package.swift macos platform version 10_15 -> 12
2023-01-18 17:09:04 +01:00
Francisco Gindre 851023842f
[#612] Remove Support for Cocoapods (#706)
Our main dependency, Swift-GRPC is dropping support for Cocoapods from version 1.8.2.

Even though they make a great work at maintaining backwards compatibility, we will eventually be forced to drop Cocoapods support.

We've reached out partners like NighthawkApps, Horizontal Systems (Unstoppable) and Edge, who have reported not depending on Cocoapods.

We intend to end Cocoapods support on 0.18.0.

Closes #612
2023-01-06 12:26:00 -03:00
Michal Fousek 21b51a2011 Add Xcode scheme that builds all the targets
This is small improvement of lives for developers. Before this change if
developer wanted to test if change can be compiled then developer had to
go scheme by scheme and test compilation. This change introduces `All`
scheme which builds all the targets on one key stroke/mouse click.
2023-01-02 15:10:57 +01:00
Lukas Korba 3c3b97ca42
[#663] Create a benchmarking section on the Demo App that can be automated (#681)
- SDKMetrics singleton for the measurement
- download, validate and scan blocks supported
- Sample app refactored to use SDKMetrics, connected to appropriate notifications and labels
- enhancement metric added
- total sync time metric added
- sample app extended to show summary time and operations summaries
- unit tests for the SDKMetrics
- doc for the SDKMetrics and our approach for the performance testing in general
- changelog update
2022-12-21 13:30:05 +01:00
Michal Fousek 44a6970b73 [#616] Dont send notification from SDK on main thread
Closes #616

- Added small helper `NotificationSender` which is used to send
  notifications.
- No notificaiton is sent on main thread.
- Change how `status` is stored and update in `SDKSynchronizer`. It is
  now protected by lock. Before this wasn't needed because status was
  updated from main thread everywhere.
- `SyncBlocksViewController` in the sample app now uses
  `SDKSynchronizer` instead of `CompactBlockProcessor` directly.
2022-11-21 16:33:42 +01:00
Michal Fousek 5e723566ba [#619] Correctly resume syncing process in scanning phase
Closes #619

- When computing next action in `NextStateHelper.nextStateAsync` now
  scanning state is also taken into consideration.
- When processing blocks download phase is skipped when it's detected
  that everything is already downloaded.
2022-11-11 14:54:44 +01:00
Francisco Gindre bb015008cf 0.17.0-alpha.4 2022-11-04 15:28:13 -03:00
Michal Fousek d3291a6664 Fix Package.resolved file for Sample SDK app 2022-11-03 17:12:09 +01:00
Francisco Gindre dbd4b8934c Merge branch 'master' into merge-master 2022-10-31 09:34:38 -03:00
Francisco Gindre 245f2324b5 [#597] SDK does not build with SQLite 0.14 2022-10-28 14:20:52 -03:00
Francisco Gindre b5d659e8a8 Fix various tests and deleted some that are not useful anymore
Closes #588
Closes #584
Closes #589
Closes #591
2022-10-27 20:09:08 -03:00
Francisco Gindre 1d97ad920b [#581] getTransparentBalanceForAccount error not handled 2022-10-26 20:26:37 -03:00
Michal Fousek d4dc571f27 Fix compilation 2022-10-04 17:32:32 +02:00
Francisco Gindre 7806b5114f
Use UnifiedSpendingKey for shielding and Spending (#535)
[#534] Use UnifiedSpendingKey for shielding and Spending

This commit implements the use of Unified Spending Keys for shielding
and spending as well as rolling Unified Addresses.

Users should obtain addresses by rolling them from the SDK.
USKs replace Sapling Extended Spending keys and TransparentAccountPrivKeys
when shielding or spending

Closes #534

Co-authored-by: Kris Nuttycombe <kris@nutty.land>

* Fix rebase issues

* PR Suggestion. Make `lastError` an Optional

* Fix test `testReOrgRemovesOutboundTxAndIsNeverMined`

Co-authored-by: Kris Nuttycombe <kris@nutty.land>
2022-10-02 23:11:17 -03:00
Francisco Gindre a9805cfe7e [#530] Implement ability to extract available typecodes from UA
this introduces several types under UnifiedAddress `ReceiverTypecodes`
and `UnifiedAddress.Errors` to host possible errors on third-party
generated UAs and their composition

Implement extracting the typecodes from a UA
2022-09-19 14:52:30 -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
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 b9ae012e09
[#381] Move Zatoshi and Amount Types to the SDK (#396)
Closes #381

This commit brings a Zatoshi type developed on the Secant project,
helper classes like Clamped and tests.

Zatoshi has been incorporated as a Codable type for SQLite Swift
to allow serialization into the pending database.

FIXES on Demo App

fix comments
2022-06-22 16:45:37 -03:00
Francisco Gindre 605a3e9881 Update changelog.md and podspec version
Fix Travis CI builds

fix travis build

Fix Travis CI

fix travis

Fix Travis CI

Delete unneeded test

Change scheme

Fix Project file so that it compile and tests for Travis CI

restore Demo app scheme

fix dumb typo

Fix Tests. Add workflow

fix workflow for github action

blank line
2022-03-03 19:07:03 -03:00
Daniel Haight 86d1257ab5 Remove dependecy on rust sources 2022-02-28 17:03:20 +00:00
Adam Stener 054ab3936a Remove build setting warning 2021-09-27 07:15:34 -05:00
Francisco Gindre 6e64b32810 remove code generation for zcashsdk constants 2021-07-28 16:37:05 -03:00
Francisco Gindre 09ac2c5877 remove WalletBirthday as generated file and add it as constants in the sdk 2021-07-28 15:46:45 -03:00
Francisco Gindre 7cb4750f29 Get UTXOs screen 2021-03-03 18:09:13 -03:00
Francisco Gindre 60dc7ae6c5 Horrible looking derivation screen 2021-03-03 18:09:13 -03:00
Francisco Gindre af8ee1ef12 Add SaplingParameterDownloader 2020-10-08 17:29:38 -03:00
Francisco Gindre bfc717dc07 Fix build problems 2020-10-08 17:29:27 -03:00
Francisco Gindre 1a4a3a7f6d fix podfile on demo app 2020-10-08 15:45:45 -03:00
Francisco Gindre 890a4eb5a9 fix script. update sample app. update pod version 2020-10-01 16:17:13 -03:00
Francisco Gindre 86b20c4236
Xcode 12 cocoapods error fix (#193)
* add arm64 damn apple

* fix: exclude arm from simulator builds

* change built platform depending on target architecture

* exclude arm64 for simulator builds
2020-09-24 12:00:15 -03:00
Kevin Gorham a45f056242
Enable heartwood. (#138)
* Enable heartwood.

We might want to make further adjustments to conditionally enable this only on testnet.

* add consensus branch Id code

* better address validation

Co-authored-by: Francisco Gindre <francisco.gindre@gmail.com>
2020-06-09 21:23:46 -03:00
Francisco Gindre 462ce0f5d7
Decrypt transactions. Full wallet restore (#110)
* Add enhancement [WIP]

* Added enhance and decrypt transaction step

* modify logging

* Enhancement tests scaffolding
2020-04-23 14:11:03 -03:00
Francisco Gindre 72c3cb59ef
Integrate logging capabilities (#93)
* Integrate logging capabilities

* Relocate file
2020-03-09 17:25:27 -03:00
Francisco Gindre 750108252f
Feature/single pod mainnet (#60)
* Mainnet changes [WIP]

* Separate pods approach [WIP]

* Create a single podfile and scripts to build mainnet or testnet [WIP]

* Added test spec to pod with TESTNET Script [WIP]

* pod install + sample app testnet build worked

* add prefix to database names

* Fix constants in tests

* fix plist

* fix stencils

* Force environment variable

* Get config from environment variable

* Save project settings and create new DemoAppConfig settings

* Fix Template. change demoApp config port

* Add extra warning when building to see environment in logs

* New Readme! + enhanced messaging on build_librustzcash_xcode.sh

* Fix Stencil if statement

* add our domain names to the demo app endpoints

* clean up Podfile

* fix: mainnet not building properly

* improve cleanup

* fixed weird seed change

* remove duplicated file reference

* Improve error handling on LightWalletService

* Improve error handling on Latest block height. fix get address pasteboard gesture

* fix mainnet walletbirthday stencil

* fix: demo app not syncing on mainnet

* Verified Balances and Send Max Funds fixed

* Add paths to preserve when installing pod

* add Stencil to preserved paths

* Fix $ZCASH_SDK_GENERATED_SOURCES_FOLDER not writable error

* Fixes from PR Comments

* Fixed TransactionId string generation

* Fixed Test build scripts + PR comments

* fix indentation

* Changes to script_commons

* fixes per PR

* remove else from mismatch function

* Add comment to poorly named function
2020-01-14 19:25:14 -03:00
Francisco Gindre 4f6e15bd9a
Add SampleStorage (#58) 2019-12-20 17:52:53 -03:00
Francisco Gindre a139ffbdfe
Transaction Listing + send funds + synchronizer implementation (#47)
* Create UIKit subfolder

* add offset to transaction repository

* mock repository and tests [WIP]

* Paged transaction DAO

* Paged transaction repository by kind

* update protobuf files

* move SDKSynchronizer to UIKit folder

* created some health check test on transactions

* Build release version of librustzcash

* Add Send on main thread button for troubleshooting purposes

* fix submit method by using RawTransaction factory method

* fix transactions table mapping

* fix transactions table mapping

* fix get balance sample

* FIX: cosensus branch ID for Blossom

* SDKSynchronizer integration for Send Funds

* fix rawTransactionId mistaken by raw field

* fix testEncodeSpend

* Transaction submission failed tests

* unpaged transaction listings

* renamed method, fixed typo

* stupid xcode misplaced folders again

* add PaginatedTableView Dependency to Example and hook it up [WIP]

* fix  unit test target not being shared

* removed performance test

* fix get address, paged transactions nulled, added type of transaction

* added kind of transaction to transaction repo builder, fixed transaction builder

* Transaction Detail screen

* add transaction details to paginated transaction
2019-12-16 19:25:45 -03:00
Francisco Gindre 561ea7b620
Feature/sending ui (#39)
* [WIp} Send View Controller + Synchronizer methods to send and cancel tx +  builders

* Send Funds scaffold

* project changes

* initializer and synchronizer enhancements. removed dummy file

* fix bitcode issue, add Progress HUD

* Pending Transactions, send transactions

* create_to_address tests + sending UI
2019-12-06 09:38:47 -03:00
Francisco Gindre c772934d3d
Transaction data access improvements + Create Spend + Get Balance Screen (#33)
* Transaction encoder implementation tests WIP

* Create Spend and Create Transaction + Test [WIP]

* New! Get Balance Screen

* Send to address
2019-11-26 19:32:20 -03:00
Francisco Gindre 2c23875607
Synchronizer + Handle reorgs (#27)
* Compact Block Synchronizer first impl

* Synchronizer

* Basic Reorg logic. Moved tests to cocoapods

* Remote Carthage Support

* remove Carthage support from readme

* RustBackendMock

* RustBackend Stub for testing reorgs. Tests (fail). Download retry logic

* Simple reorgTest passed
2019-11-14 11:38:54 -03:00
Francisco Gindre d757a1337f
Compact Block Processor Sync (#11)
* Compact Block Processor demo + tests

* fix latest block sync glitch

* fix Compact Block Processor tests

* fix lint
2019-11-04 20:18:07 -03:00
Francisco Gindre bce2bd0d7e
Get Address Example, API improvements, test fixes (#10) 2019-11-01 16:59:16 -03:00
Francisco Gindre b1887cc1b6
GetBlockHeight demo app (#9) 2019-10-31 19:43:09 -03:00
Francisco Gindre 3806526aaf Cocoapods Support + Example Project 2019-09-09 12:30:38 -03:00