Closes#740
`CompactBlockDownloading` protocol is renamed to `BlockDownloaderService`. `CompactBlockDownloader` is renamed to `BlockDownloaderServiceImpl`.
What is the motivation for this rename?
Goal of this change is to extract code from `CompactBlockProcessor` which is related to downloading. So naturaly it should be called "downloader".
But `CompactBlockDownloader` was already taken. After analysis of `CompactBlockDownloading` and `CompactBlockDownloader` I found out that
`CompactBlockDownloader` doesn't download blocks exactly. It's more like abstraction over `LightWalletService`. And it does very similar job to
`LightWalletService`. That is why I decided to rename it to "service".
What is the motivation for protoco/impl naming scheme?
First `BlockDownloaderService` protocol doesn't describe capability in my eyes. It describe what something is. Also `BlockDownloaderServicing` sounds
strange. I agree that add suffix "Impl" to class name isn't super nice. But it is acceptable. And it makes sense to use nicer type name
(e.g. `BlockDownloaderService`) for protocol because it's used on much more places in the code.
- Added `BlockDownloader` protocol and `BlockDownloaderImpl` class. The code related to downloading was exctracted to this class.
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
- 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
- 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
- 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
- getting rid of the Operation Queue
- the cleanup is needed
- the update of tests is needed
- tested and it successfully finishes the sync process
[476] CompactBlockProcessor to async/await
- old processNewBlocks() removed
[476] CompactBlockProcessor to async/await
- unused operations removed
[476] CompactBlockProcessor to async/await
- unit tests update
[476] CompactBlockProcessor to async/await
- unit tests refactored
[476] CompactBlockProcessor to async/await
- cleanup of deprecated method
[476] CompactBlockProcessor to async/await
- fail(error) was called even for canceled tasks but that must be excluded
[476] CompactBlockProcessor to async/await
- removal of all ZcashOperations from the code (unit test will follow)
[476] CompactBlockProcessor to async/await
- network tests in building and success order again
[476] CompactBlockProcessor to async/await
- offline tests in building and success order
[476] CompactBlockProcessor to async/await (519)
- cleanup of suspending the task
[476] CompactBlockProcessor to async/await (519)
- most comments resolved
[476] CompactBlockProcessor to async/await (519)
- thread safe state for both sync and async context
[476] CompactBlockProcessor to async/await (519)
- fixed build for a sample project
[476] CompactBlockProcessor to async/await (519)
- func testStartNotifiesSuscriptors() reverted
[476] CompactBlockProcessor to async/await (519)
- TODO added to track why we used NSLock instead of an Actor
- Task priority enhanced
[476] CompactBlockProcessor to async/await (519)
- cleanup in Tasks and priorities
* [#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
Closes#326
Implements loading checkpoints from the bundle the same way the android SDK does.
* Add checkpoint files
* Add checkpoint files as resources to package
* Remove stencil files
* Update wallet birthday methods to use bundled checkpoints
* [clean up] Fix test build failure
* Add Cocoapods support
* Fix for behaviour across SPM and Cocoapods
* Add test for checkpoint retrieval
* Use latest GRPC v1.x
* update checkpoint files to match android sdk