- `id` property of transcations is no longer Optional. `id` column in DB
is primary key and it can't be nil. This was oversight in previous
changes.
- Sorting order of transactions is switched from asc to desc. asc is
oversight in previous changes. Android is using desc.
- Using `IFNULL` when sorting transactions by minedHeight.
- Update tests accordingly. And revert few changes on darkside tests.
These changes are no longer needed because using `desc` sorting order
on transactions.
- Fix all the tests. In few tests code had to be changes because order
of transactions is newly defined. It wasn't before.
- Change properties of Transaction.* objects. Some had to be made
Optional to make all tests work.
- Add new tests for TransactionDAO.
- Removed methods from TransactionDAO that weren't used.
- Removed `Transaction` struct and `TransactionEntity` protocol.
- Removed some other protocols from `TransactionEntity.swift`.
Use correct default fee and memo count
This change is prerequisity for future changes. API of
`TransactionRepository` is changed a bit. Now it's possible to filter
transaction by kind (all/sent/received) event when
`TransactionNG.Overview` structure is returned.
Tests are now fixed for new methods and new objects. For this mocked
database `darkside_data.db` had to be updated to the latest scheme used
by the Rust code.
Closes#677
- Previously when keychain wanted to do wipe wallet had to do it on it's
own. Which isn't good. Now wallet can simply call
`synchronizer.wipe()` and it's done.
- This change brings support for wipe. `Synchronizer` has new method
`wipe()` which takes care of everything. All the database connections
are closed. Databases are removed. `InternalSyncProgress` is reset.
Change condition when wipe can run
Closes#657
- Now SDK downloads N downloads and scan those. And repeat until sync is
done. This safes lot of space of disk used to store downloaded blocks.
- Most changes are done in `CompactBlockProcessor.processNewBlocks`.
- `SyncRanges` structure is changed a bit.
- `SyncStatus` is changed. SDK now report that it's syncing with
progress. It doesn't report each phase of the sync process separately.
Also appropriate notifications were updated.
Address review comments
- Small changes
- Add tests to check computation of processing ranges for single loop
- Structures that represent transactions DB views are newly define.
- New structures are:
- TransactionNG.Overview
- TransactionNG.Received
- TransactionNG.Sent
- `TransactionNG` is used as temporary name. `Transaction` is existing
structure in the code. `TransactionNG` will be eventually renamed to
`Transaction` once current `Transaction` is removed from code.
- New methods that are using new structures are added to
`TransactionRepository`. Those are slightly changed compared to
predecessors. Those are now little bit simpler to use.
Address review comments
- Previously we had one range for each sync which was used for each
phase of sync process. Newly there is separate range for each phase of
the sync process.
- I added `InternalSyncProgress` utility. This utility tracks progress
of some phases. And it is able to compute right ranges which should be
used for syncing.
- Some unused download code from `CompactBlockProcessor` is removed.
Fix tests
Address review comments
- Rebase to master
- Update how range for `processBatchFinished()` is computed.
- Refactor `InternalSyncProgress`
- Add tests for `InternalSyncProgress`
Address review comments
Change how latest downloaded block is tracked
- Cache DB is no longer used to track which block was downloaded as
latest. `InternalSyncProgress` is used to do that.
- Thanks to that #660 is fixed. And cache DB can be completely removed
after sync process.
- Added sleep(1) to some darkside tests when latest block height is set.
Otherwise lightwalletd in darkside mode doesn't have time to setup and
tests are flaky.
Fix TransactionEnhancementTests.testBasicEnhancement test
There's a problem withstanding:
````
▿ RustWeldingError
▿ genericError : 1 element
- message : "Error while fetching transparent balances for AccountId(0): Invalid column type Null at index: 0, name: address"
````
Which is fixed by commit `d0297bff0cdaaff42ad26f3be5bc261f6c828e8f` of "https://github.com/zcash/librustzcash".
nil-coalesce thrown errors on test so it reaches the end.
Make balance calls throwing to show underlying errors but nil-coalesce in non-throwing APIs
Add missing fulfill() calls
Add changelog entry
document and handle errors on getting shielded balance before
attempting to download sapling parameters.
- sync process enhanced to try to download sapling params if needed
- tests fixed
- failing import Crypto -> import CryptoKit
- download params only if there are sapling funds
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.
Closes#488
- When sync process is finished cache DB is removed from disk.
- Latest downloaded block is preserved becuase it's required to computes
in which phase to resume sync process.
- `SDKSynchronizer.latestDownloadedHeight` public API is removed
it makes no longer sense. This API was reading from cache DB.
state for this synchronizer.
also reports the SychronizerState on synchonizerStarted notification.
Add tests that verify the state being reported properly
Fix `BlockBatchValidationTests`
`XCAsyncTestCase` does not work as intended but `wait {}` does what
we need.
restored `needsToStartScanningWhenStopped` as a Bool var on actor
fixed Enhancement test
- Sample app refactored for the processor being an actor
- tests refactored as well
- dark side tests fixed
- utilities separated to new file
- synchronizer's start and stop are no longer in async context
- updating the UI for the scan fixed
Fix tests.
Fix tests.
Use Account 6 vectors on testListTransparentReceivers
only use first tree addresses from the vector for testListTransparentReceivers
Fix unified address generation tests.
Fix build and PR suggestions
- blocking API removed, only latestBlockHeight() stayed
- non-blocking closure based API removed
- unit tests updated to use async API
[#492] Get rid of blocking API (#551)
- forgotten commented code cleaned up
- some comments were still mentioning result (completion closure), removed
MultiThreadedEventLoopGroup has been replaced with NIOTSEventLoopGroup. It's recommended by authors of grpc-swift especially for iOS platform and it allows us to set the priority because NIOTSEventLoopGroup is GCD based while MultiThreadedEventLoopGroup is pthread based.
[#541] Initialise gRPC on a separate thread (#545)
- priority increased to .default
[#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 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