- `BlockDownloaderImpl` is changed. It now spawns detached Task to
download blocks. So blocks can be downloaded in parallel with scanning
process.
- `Synchronizer.stop()` is no longer async.
- Blocks cache cleaning is changed. It's not possible to drop the whole
cache now. There are some blocks pre-downloaded which weren't scanned
yet.
This change switches to a new (future) version of the rust crates
that will get rid of the sent and received transactions Views in
favor of a `v_transaction` view that will do better accounting of
outgoing and incoming funds. Additionally it will support an
outputs view for seeing the inner details of transactions enabling
the SDKs tell the users the precise movement of value that a tx
causes in its multiple possible ways according to the protocol.
the `v_tx_outputs` view is not yet implemented.
Sent and Received transaction sub-types are kept for compatibility
purposes but they are generated from Overviews instead of queried
from a specific view.
In the transaction Overview the value represents the whole value
transfer for the transaction from the point of view of a given
account including fees. This means that the value for a single
transaction Overview struct represents the addition or subtraction
of ZEC value to the account's balance.
Future updates will give clients the possibility to drill into the
inner workings of those value changes in a per-output basis for
each transaction.
Also, the field `pending_unmined` field was added to `v_transactions`
so that wallets can query `DataDb` for pending but yet unmined txs
This will prepare the field for removing the notion of a "PendingDb"
and its nuances.
Also updated test database `darkside_data.db`
Closes#959Closes#971 ZcashLightClientKitSample main target broken swiftlint script
Demo App improvements: Show Short date and value on transaction list
Closes#209.
[#845] Introduce ZcashSynchronizerAlias enum
Closes#845.
[#852] SDKSynchronizer using queues label based on the alias
Closes#852.
[#847] Remove posibility to use DatabaseStorageManager as singleton
Closes#847.
[#850] Remove synchronizerConnectionStateChanged notification
Closes#850.
[#855] Add check if the Alias is already used
Closes#855
- Added `UsedAliasesChecker` utility which is used to register aliases
that are in use.
- `prepare()` and `wipe()` methods now check if the current alias can't
be used and if not then `InitializerError.aliasAlreadyInUse` is
thrown/emitted.
- Some public methods that could cause harm if used with the Alias that
is already in use now throw `SynchronizerError.notPrepared`. Thanks to
this the client app is forced to call `prepare()` first. And
`prepare()` does check for the Alias.
- Added tests for new conditions.
[#849] Make InternalSyncProgress aware of the Alias
Closes#849.
[#853] Only instance with default Alias migrates legacy cache DB
Closes#853.
[#851] Apply the Alias to the URLs
Closes#851.
- `Initializer` now updates paths according to alias before paths are
used anywhere in the SDK.
- Paths update can fail. It would be incovenient for the client apps to
handle errors thrown from `Initiliazer` constructor. So the error is
then handled in `SDKSynchronizer.prepare()` or `SDKSynchronizer.wipe()`.
[#846] Stop using SDKMetrics as singleton (#862)
- metrics are not longer a singleton
- tests fixed
- metrics outside init of the synchronizer
[#848] Make logger aware of the alias
- logger is now an instance passed throughout the sdk instead of a static proxy
[#848] Make logger aware of the alias (#868)
- comments addressed
[#848] Make logger aware of the alias (#868)
- returning protocol back
Fix typos
[#856] Add possibility to test multiple synchronizers in the sample app
Closes#856.
- Added `alias` property to `Synchronizer`.
- Added `SyncBlocksListViewController` which provides UI to use multiple
synchronizers at once.
[#209] Add changelog
- Add changelog for #209.
- Overall improve readability of the rendered changelog. Tickets
references are now prefixed with `###` instead of `- `.
Fix compilation
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.
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
[#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>
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
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
* add arm64 damn apple
* fix: exclude arm from simulator builds
* change built platform depending on target architecture
* exclude arm64 for simulator builds
* 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>
* 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
* 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