react-native-zcash 0.3.4 → 0.3.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +5 -0
- package/LICENSE +22 -0
- package/README.md +44 -44
- package/android/build.gradle +1 -1
- package/ios/RNZcash.m +0 -1
- package/ios/RNZcash.swift +14 -15
- package/ios/ZCashLightClientKit/Block/DatabaseStorage/CompactBlockStorage.swift +123 -0
- package/ios/ZCashLightClientKit/Block/DatabaseStorage/DatabaseMigrationManager.swift +222 -0
- package/ios/ZCashLightClientKit/Block/DatabaseStorage/StorageError.swift +22 -0
- package/ios/ZCashLightClientKit/Block/DatabaseStorage/StorageManager.swift +73 -0
- package/ios/ZCashLightClientKit/Block/Downloader/BlockDownloader.swift +240 -0
- package/ios/ZCashLightClientKit/Block/Downloader/CompactBlockDownloaderBuilder.swift +26 -0
- package/ios/ZCashLightClientKit/Block/Processor/CompactBlockDownloadOperation.swift +258 -0
- package/ios/ZCashLightClientKit/Block/Processor/CompactBlockEnhancementOperation.swift +157 -0
- package/ios/ZCashLightClientKit/Block/Processor/CompactBlockProcessor.swift +1454 -0
- package/ios/ZCashLightClientKit/Block/Processor/CompactBlockScanningOperation.swift +238 -0
- package/ios/ZCashLightClientKit/Block/Processor/CompactBlockValidationInformation.swift +66 -0
- package/ios/ZCashLightClientKit/Block/Processor/FetchUnspentTxOutputsOperation.swift +103 -0
- package/ios/ZCashLightClientKit/Block/Processor/FigureNextBatchOperation.swift +58 -0
- package/ios/ZCashLightClientKit/Block/Processor/ZcashOperation.swift +68 -0
- package/ios/ZCashLightClientKit/Constants/WalletBirthday+Constants.swift +58 -0
- package/ios/ZCashLightClientKit/Constants/WalletBirthday+mainnet.swift +20 -0
- package/ios/ZCashLightClientKit/Constants/WalletBirthday+testnet.swift +20 -0
- package/ios/ZCashLightClientKit/Constants/ZcashSDK.swift +245 -0
- package/ios/ZCashLightClientKit/DAO/BlockDao.swift +67 -0
- package/ios/ZCashLightClientKit/DAO/CompactBlockDAO.swift +24 -0
- package/ios/ZCashLightClientKit/DAO/NotesDao.swift +142 -0
- package/ios/ZCashLightClientKit/DAO/PagedTransactionDao.swift +62 -0
- package/ios/ZCashLightClientKit/DAO/PendingTransactionDao.swift +213 -0
- package/ios/ZCashLightClientKit/DAO/TransactionBuilder.swift +169 -0
- package/ios/ZCashLightClientKit/DAO/TransactionDao.swift +393 -0
- package/ios/ZCashLightClientKit/DAO/UnspentTransactionOutputDao.swift +188 -0
- package/ios/ZCashLightClientKit/Entity/AccountEntity.swift +201 -0
- package/ios/ZCashLightClientKit/Entity/CompactBlockEntity.swift +13 -0
- package/ios/ZCashLightClientKit/Entity/EncodedTransactionEntity.swift +26 -0
- package/ios/ZCashLightClientKit/Entity/PendingTransactionEntity.swift +205 -0
- package/ios/ZCashLightClientKit/Entity/ReceivedNoteEntity.swift +22 -0
- package/ios/ZCashLightClientKit/Entity/SentNoteEntity.swift +45 -0
- package/ios/ZCashLightClientKit/Entity/TransactionEntity.swift +161 -0
- package/ios/ZCashLightClientKit/Entity/UnspentTransactionOutputEntity.swift +17 -0
- package/ios/ZCashLightClientKit/Extensions/Data+Zcash.swift +17 -0
- package/ios/ZCashLightClientKit/Extensions/Data+internal.swift +35 -0
- package/ios/ZCashLightClientKit/Extensions/HexEncode.swift +41 -0
- package/ios/ZCashLightClientKit/Extensions/ZcashRust+Utils.swift +26 -0
- package/ios/ZCashLightClientKit/Extensions/ZcashSDK+extensions.swift +34 -0
- package/ios/ZCashLightClientKit/Initializer.swift +357 -0
- package/ios/ZCashLightClientKit/Model/WalletTypes.swift +108 -0
- package/ios/ZCashLightClientKit/Providers/ResourceProvider.swift +47 -0
- package/ios/ZCashLightClientKit/Repository/BlockRepository.swift +13 -0
- package/ios/ZCashLightClientKit/Repository/CompactBlockRepository.swift +75 -0
- package/ios/ZCashLightClientKit/Repository/NotesRepository.swift +16 -0
- package/ios/ZCashLightClientKit/Repository/PaginatedTransactionRepository.swift +35 -0
- package/ios/ZCashLightClientKit/Repository/PendingTransactionRepository.swift +19 -0
- package/ios/ZCashLightClientKit/Repository/TransactionRepository.swift +30 -0
- package/ios/ZCashLightClientKit/Repository/TransactionRepositoryBuilder.swift +24 -0
- package/ios/ZCashLightClientKit/Repository/UnspentTransactionOutputRepository.swift +18 -0
- package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/mainnet/1000000.json +7 -0
- package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/mainnet/1010000.json +7 -0
- package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/mainnet/1020000.json +7 -0
- package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/mainnet/1030000.json +7 -0
- package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/mainnet/1040000.json +7 -0
- package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/mainnet/1050000.json +7 -0
- package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/mainnet/1060000.json +7 -0
- package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/mainnet/1070000.json +7 -0
- package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/mainnet/1080000.json +7 -0
- package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/mainnet/1090000.json +7 -0
- package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/mainnet/1100000.json +7 -0
- package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/mainnet/1110000.json +7 -0
- package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/mainnet/1120000.json +7 -0
- package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/mainnet/1130000.json +7 -0
- package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/mainnet/1140000.json +7 -0
- package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/mainnet/1150000.json +7 -0
- package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/mainnet/1160000.json +7 -0
- package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/mainnet/1170000.json +7 -0
- package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/mainnet/1180000.json +7 -0
- package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/mainnet/1190000.json +7 -0
- package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/mainnet/1200000.json +7 -0
- package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/mainnet/1210000.json +7 -0
- package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/mainnet/1220000.json +7 -0
- package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/mainnet/1230000.json +7 -0
- package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/mainnet/1240000.json +7 -0
- package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/mainnet/1250000.json +7 -0
- package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/mainnet/1260000.json +7 -0
- package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/mainnet/1270000.json +7 -0
- package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/mainnet/1280000.json +7 -0
- package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/mainnet/1290000.json +7 -0
- package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/mainnet/1300000.json +7 -0
- package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/mainnet/1310000.json +7 -0
- package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/mainnet/1320000.json +7 -0
- package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/mainnet/1330000.json +7 -0
- package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/mainnet/1340000.json +7 -0
- package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/mainnet/1350000.json +7 -0
- package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/mainnet/1360000.json +7 -0
- package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/mainnet/1370000.json +7 -0
- package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/mainnet/1380000.json +7 -0
- package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/mainnet/1390000.json +7 -0
- package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/mainnet/1400000.json +7 -0
- package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/mainnet/1410000.json +7 -0
- package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/mainnet/1420000.json +7 -0
- package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/mainnet/1430000.json +7 -0
- package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/mainnet/1440000.json +7 -0
- package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/mainnet/1450000.json +7 -0
- package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/mainnet/1460000.json +7 -0
- package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/mainnet/1470000.json +7 -0
- package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/mainnet/1480000.json +7 -0
- package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/mainnet/1490000.json +7 -0
- package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/mainnet/1500000.json +7 -0
- package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/mainnet/1510000.json +7 -0
- package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/mainnet/1520000.json +7 -0
- package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/mainnet/1530000.json +7 -0
- package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/mainnet/1540000.json +7 -0
- package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/mainnet/1550000.json +7 -0
- package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/mainnet/1560000.json +7 -0
- package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/mainnet/1570000.json +7 -0
- package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/mainnet/1580000.json +7 -0
- package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/mainnet/1590000.json +7 -0
- package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/mainnet/1600000.json +7 -0
- package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/mainnet/1610000.json +7 -0
- package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/mainnet/1620000.json +7 -0
- package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/mainnet/1630000.json +7 -0
- package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/mainnet/1640000.json +7 -0
- package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/mainnet/1650000.json +7 -0
- package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/mainnet/1660000.json +7 -0
- package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/mainnet/1670000.json +7 -0
- package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/mainnet/1680000.json +7 -0
- package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/mainnet/1690000.json +7 -0
- package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/mainnet/1700000.json +7 -0
- package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/mainnet/1710000.json +7 -0
- package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/mainnet/1720000.json +7 -0
- package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/mainnet/1730000.json +7 -0
- package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/mainnet/1740000.json +7 -0
- package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/mainnet/1750000.json +7 -0
- package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/mainnet/1760000.json +7 -0
- package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/mainnet/1770000.json +7 -0
- package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/mainnet/1780000.json +7 -0
- package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/mainnet/1790000.json +7 -0
- package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/mainnet/1800000.json +7 -0
- package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/mainnet/1810000.json +7 -0
- package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/mainnet/1820000.json +7 -0
- package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/mainnet/1830000.json +7 -0
- package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/mainnet/1840000.json +7 -0
- package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/mainnet/1850000.json +7 -0
- package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/mainnet/1860000.json +7 -0
- package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/mainnet/1870000.json +7 -0
- package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/mainnet/1880000.json +7 -0
- package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/mainnet/1890000.json +7 -0
- package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/mainnet/1900000.json +7 -0
- package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/mainnet/1910000.json +7 -0
- package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/mainnet/1920000.json +7 -0
- package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/mainnet/1930000.json +7 -0
- package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/mainnet/1940000.json +7 -0
- package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/mainnet/1950000.json +7 -0
- package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/mainnet/1960000.json +7 -0
- package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/mainnet/1970000.json +7 -0
- package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/mainnet/1980000.json +7 -0
- package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/mainnet/1990000.json +7 -0
- package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/mainnet/2000000.json +7 -0
- package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/mainnet/2010000.json +7 -0
- package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/mainnet/2020000.json +7 -0
- package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/mainnet/2030000.json +7 -0
- package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/mainnet/2040000.json +7 -0
- package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/mainnet/2050000.json +7 -0
- package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/mainnet/2060000.json +7 -0
- package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/mainnet/2070000.json +7 -0
- package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/mainnet/2080000.json +7 -0
- package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/mainnet/2090000.json +7 -0
- package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/mainnet/2100000.json +7 -0
- package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/mainnet/2110000.json +7 -0
- package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/mainnet/2120000.json +7 -0
- package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/mainnet/2130000.json +7 -0
- package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/mainnet/2140000.json +7 -0
- package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/mainnet/2150000.json +7 -0
- package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/mainnet/2160000.json +7 -0
- package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/mainnet/2170000.json +7 -0
- package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/mainnet/419200.json +7 -0
- package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/mainnet/500000.json +7 -0
- package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/mainnet/510000.json +7 -0
- package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/mainnet/520000.json +7 -0
- package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/mainnet/530000.json +7 -0
- package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/mainnet/540000.json +7 -0
- package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/mainnet/550000.json +7 -0
- package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/mainnet/560000.json +7 -0
- package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/mainnet/570000.json +7 -0
- package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/mainnet/580000.json +7 -0
- package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/mainnet/590000.json +7 -0
- package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/mainnet/600000.json +7 -0
- package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/mainnet/610000.json +7 -0
- package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/mainnet/620000.json +7 -0
- package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/mainnet/630000.json +7 -0
- package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/mainnet/640000.json +7 -0
- package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/mainnet/650000.json +7 -0
- package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/mainnet/660000.json +7 -0
- package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/mainnet/663150.json +8 -0
- package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/mainnet/670000.json +7 -0
- package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/mainnet/680000.json +7 -0
- package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/mainnet/690000.json +7 -0
- package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/mainnet/700000.json +7 -0
- package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/mainnet/710000.json +7 -0
- package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/mainnet/720000.json +7 -0
- package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/mainnet/730000.json +7 -0
- package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/mainnet/740000.json +7 -0
- package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/mainnet/750000.json +7 -0
- package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/mainnet/760000.json +7 -0
- package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/mainnet/770000.json +7 -0
- package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/mainnet/780000.json +7 -0
- package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/mainnet/790000.json +7 -0
- package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/mainnet/800000.json +7 -0
- package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/mainnet/810000.json +7 -0
- package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/mainnet/820000.json +7 -0
- package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/mainnet/830000.json +7 -0
- package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/mainnet/840000.json +7 -0
- package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/mainnet/850000.json +7 -0
- package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/mainnet/860000.json +7 -0
- package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/mainnet/870000.json +7 -0
- package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/mainnet/880000.json +7 -0
- package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/mainnet/890000.json +7 -0
- package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/mainnet/900000.json +7 -0
- package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/mainnet/910000.json +7 -0
- package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/mainnet/920000.json +7 -0
- package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/mainnet/930000.json +7 -0
- package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/mainnet/940000.json +7 -0
- package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/mainnet/950000.json +7 -0
- package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/mainnet/960000.json +7 -0
- package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/mainnet/970000.json +7 -0
- package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/mainnet/980000.json +7 -0
- package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/mainnet/990000.json +7 -0
- package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/testnet/1000000.json +7 -0
- package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/testnet/1010000.json +7 -0
- package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/testnet/1020000.json +7 -0
- package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/testnet/1030000.json +7 -0
- package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/testnet/1040000.json +7 -0
- package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/testnet/1050000.json +7 -0
- package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/testnet/1060000.json +7 -0
- package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/testnet/1070000.json +7 -0
- package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/testnet/1080000.json +7 -0
- package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/testnet/1090000.json +7 -0
- package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/testnet/1100000.json +7 -0
- package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/testnet/1110000.json +7 -0
- package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/testnet/1120000.json +7 -0
- package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/testnet/1130000.json +7 -0
- package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/testnet/1140000.json +7 -0
- package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/testnet/1150000.json +7 -0
- package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/testnet/1160000.json +7 -0
- package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/testnet/1170000.json +7 -0
- package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/testnet/1180000.json +7 -0
- package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/testnet/1190000.json +7 -0
- package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/testnet/1200000.json +7 -0
- package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/testnet/1210000.json +7 -0
- package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/testnet/1220000.json +7 -0
- package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/testnet/1230000.json +7 -0
- package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/testnet/1240000.json +7 -0
- package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/testnet/1250000.json +7 -0
- package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/testnet/1260000.json +7 -0
- package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/testnet/1270000.json +7 -0
- package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/testnet/1280000.json +7 -0
- package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/testnet/1290000.json +7 -0
- package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/testnet/1300000.json +7 -0
- package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/testnet/1310000.json +7 -0
- package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/testnet/1320000.json +7 -0
- package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/testnet/1330000.json +7 -0
- package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/testnet/1340000.json +7 -0
- package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/testnet/1350000.json +7 -0
- package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/testnet/1360000.json +7 -0
- package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/testnet/1370000.json +7 -0
- package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/testnet/1380000.json +7 -0
- package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/testnet/1390000.json +7 -0
- package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/testnet/1400000.json +7 -0
- package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/testnet/1410000.json +7 -0
- package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/testnet/1420000.json +7 -0
- package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/testnet/1430000.json +7 -0
- package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/testnet/1440000.json +7 -0
- package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/testnet/1450000.json +7 -0
- package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/testnet/1460000.json +7 -0
- package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/testnet/1470000.json +7 -0
- package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/testnet/1480000.json +7 -0
- package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/testnet/1490000.json +7 -0
- package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/testnet/1500000.json +7 -0
- package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/testnet/1510000.json +7 -0
- package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/testnet/1520000.json +7 -0
- package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/testnet/1530000.json +7 -0
- package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/testnet/1540000.json +7 -0
- package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/testnet/1550000.json +7 -0
- package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/testnet/1560000.json +7 -0
- package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/testnet/1570000.json +7 -0
- package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/testnet/1580000.json +7 -0
- package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/testnet/1590000.json +7 -0
- package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/testnet/1600000.json +7 -0
- package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/testnet/1610000.json +7 -0
- package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/testnet/1620000.json +7 -0
- package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/testnet/1630000.json +7 -0
- package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/testnet/1640000.json +7 -0
- package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/testnet/1650000.json +7 -0
- package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/testnet/1660000.json +7 -0
- package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/testnet/1670000.json +7 -0
- package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/testnet/1680000.json +7 -0
- package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/testnet/1690000.json +7 -0
- package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/testnet/1700000.json +7 -0
- package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/testnet/1710000.json +7 -0
- package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/testnet/1720000.json +7 -0
- package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/testnet/1730000.json +7 -0
- package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/testnet/1740000.json +7 -0
- package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/testnet/1750000.json +7 -0
- package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/testnet/1760000.json +7 -0
- package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/testnet/1770000.json +7 -0
- package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/testnet/1780000.json +7 -0
- package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/testnet/1790000.json +7 -0
- package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/testnet/1800000.json +7 -0
- package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/testnet/1810000.json +7 -0
- package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/testnet/1820000.json +7 -0
- package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/testnet/1830000.json +7 -0
- package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/testnet/1840000.json +7 -0
- package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/testnet/1850000.json +7 -0
- package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/testnet/1860000.json +7 -0
- package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/testnet/280000.json +7 -0
- package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/testnet/290000.json +7 -0
- package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/testnet/300000.json +7 -0
- package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/testnet/310000.json +7 -0
- package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/testnet/320000.json +7 -0
- package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/testnet/330000.json +7 -0
- package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/testnet/340000.json +7 -0
- package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/testnet/350000.json +7 -0
- package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/testnet/360000.json +7 -0
- package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/testnet/370000.json +7 -0
- package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/testnet/380000.json +7 -0
- package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/testnet/390000.json +7 -0
- package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/testnet/400000.json +7 -0
- package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/testnet/410000.json +7 -0
- package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/testnet/420000.json +7 -0
- package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/testnet/430000.json +7 -0
- package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/testnet/440000.json +7 -0
- package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/testnet/450000.json +7 -0
- package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/testnet/460000.json +7 -0
- package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/testnet/470000.json +7 -0
- package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/testnet/480000.json +7 -0
- package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/testnet/490000.json +7 -0
- package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/testnet/500000.json +7 -0
- package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/testnet/510000.json +7 -0
- package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/testnet/520000.json +7 -0
- package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/testnet/530000.json +7 -0
- package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/testnet/540000.json +7 -0
- package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/testnet/550000.json +7 -0
- package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/testnet/560000.json +7 -0
- package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/testnet/570000.json +7 -0
- package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/testnet/580000.json +7 -0
- package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/testnet/590000.json +7 -0
- package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/testnet/600000.json +7 -0
- package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/testnet/610000.json +7 -0
- package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/testnet/620000.json +7 -0
- package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/testnet/630000.json +7 -0
- package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/testnet/640000.json +7 -0
- package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/testnet/650000.json +7 -0
- package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/testnet/660000.json +7 -0
- package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/testnet/670000.json +7 -0
- package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/testnet/680000.json +7 -0
- package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/testnet/690000.json +7 -0
- package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/testnet/700000.json +7 -0
- package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/testnet/710000.json +7 -0
- package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/testnet/720000.json +7 -0
- package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/testnet/730000.json +7 -0
- package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/testnet/740000.json +7 -0
- package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/testnet/750000.json +7 -0
- package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/testnet/760000.json +7 -0
- package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/testnet/770000.json +7 -0
- package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/testnet/780000.json +7 -0
- package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/testnet/790000.json +7 -0
- package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/testnet/800000.json +7 -0
- package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/testnet/810000.json +7 -0
- package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/testnet/820000.json +7 -0
- package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/testnet/830000.json +7 -0
- package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/testnet/840000.json +7 -0
- package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/testnet/850000.json +7 -0
- package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/testnet/860000.json +7 -0
- package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/testnet/870000.json +7 -0
- package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/testnet/880000.json +7 -0
- package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/testnet/890000.json +7 -0
- package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/testnet/900000.json +7 -0
- package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/testnet/910000.json +7 -0
- package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/testnet/920000.json +7 -0
- package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/testnet/930000.json +7 -0
- package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/testnet/940000.json +7 -0
- package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/testnet/950000.json +7 -0
- package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/testnet/960000.json +7 -0
- package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/testnet/970000.json +7 -0
- package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/testnet/980000.json +7 -0
- package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/testnet/990000.json +7 -0
- package/ios/ZCashLightClientKit/Rust/ZcashRustBackend.swift +718 -0
- package/ios/ZCashLightClientKit/Rust/ZcashRustBackendWelding.swift +389 -0
- package/ios/ZCashLightClientKit/Rust/zcashlc.h +385 -0
- package/ios/ZCashLightClientKit/Service/LightWalletGRPCService.swift +551 -0
- package/ios/ZCashLightClientKit/Service/LightWalletService.swift +214 -0
- package/ios/ZCashLightClientKit/Service/Model/ZcashCompactBlock.swift +46 -0
- package/ios/ZCashLightClientKit/Service/ProtoBuf/Extensions/Protocolbuffer+Extensions.swift +50 -0
- package/ios/ZCashLightClientKit/Service/ProtoBuf/compact_formats.pb.swift +332 -0
- package/ios/ZCashLightClientKit/Service/ProtoBuf/proto/compact_formats.proto +56 -0
- package/ios/ZCashLightClientKit/Service/ProtoBuf/proto/service.proto +180 -0
- package/ios/ZCashLightClientKit/Service/ProtoBuf/service.grpc.swift +383 -0
- package/ios/ZCashLightClientKit/Service/ProtoBuf/service.pb.swift +1173 -0
- package/ios/ZCashLightClientKit/Synchronizer/SDKSynchronizer.swift +929 -0
- package/ios/ZCashLightClientKit/Synchronizer.swift +430 -0
- package/ios/ZCashLightClientKit/Tool/DerivationTool.swift +344 -0
- package/ios/ZCashLightClientKit/Transaction/PersistentTransactionManager.swift +339 -0
- package/ios/ZCashLightClientKit/Transaction/TransactionEncoder.swift +116 -0
- package/ios/ZCashLightClientKit/Transaction/TransactionManager.swift +42 -0
- package/ios/ZCashLightClientKit/Transaction/WalletTransactionEncoder.swift +216 -0
- package/ios/ZCashLightClientKit/Utils/Bundle+module.swift +30 -0
- package/ios/ZCashLightClientKit/Utils/LoggingProxy.swift +47 -0
- package/ios/ZCashLightClientKit/Utils/SaplingParameterDownloader.swift +124 -0
- package/ios/libzcashlc.xcframework/Info.plist +40 -0
- package/ios/libzcashlc.xcframework/ios-arm64/libzcashlc.a +0 -0
- package/ios/libzcashlc.xcframework/ios-arm64_x86_64-simulator/libzcashlc.a +0 -0
- package/ios/react-native-zcash-Bridging-Header.h +2 -0
- package/ios/react-native-zcash.xcodeproj/project.pbxproj +1 -0
- package/lib/scripts/copyCheckpoints.d.ts +5 -0
- package/lib/scripts/updateSources.d.ts +1 -0
- package/package.json +20 -37
- package/react-native-zcash.podspec +17 -7
- package/ios/RNZcash-Bridging-Header.h +0 -6
- package/ios/RNZcash.xcodeproj/project.pbxproj +0 -271
- package/ios/RNZcash.xcworkspace/contents.xcworkspacedata +0 -7
- package/ios/RNZcash.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist +0 -8
- package/lib/src/browser.d.ts +0 -0
- package/lib/src/index.d.ts +0 -0
- package/lib/test/test.test.d.ts +0 -0
- package/scripts/copyCheckpoints.js +0 -12
- package/src/browser.ts +0 -36
- package/src/index.flow.js +0 -168
- package/src/index.ts +0 -1
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
//
|
|
2
|
+
// SQLDatabase.swift
|
|
3
|
+
// ZcashLightClientKit
|
|
4
|
+
//
|
|
5
|
+
// Created by Francisco Gindre on 10/13/19.
|
|
6
|
+
// Copyright © 2019 Electric Coin Company. All rights reserved.
|
|
7
|
+
//
|
|
8
|
+
|
|
9
|
+
import Foundation
|
|
10
|
+
import SQLite
|
|
11
|
+
|
|
12
|
+
class StorageManager {
|
|
13
|
+
static var shared = StorageManager()
|
|
14
|
+
|
|
15
|
+
private var readOnly: [URL: Connection] = [:]
|
|
16
|
+
private var readWrite: [URL: Connection] = [:]
|
|
17
|
+
|
|
18
|
+
init() {}
|
|
19
|
+
|
|
20
|
+
func connection(at url: URL, readOnly: Bool = false) throws -> Connection {
|
|
21
|
+
readOnly ? try readOnlyConnection(at: url) : try readWriteConnection(at: url)
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
private func readOnlyConnection(at url: URL) throws -> Connection {
|
|
25
|
+
if let readOnlyConnection = readOnly[url] {
|
|
26
|
+
return readOnlyConnection
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
let readOnlyConnection = try Connection.customConection(at: url)
|
|
30
|
+
readOnly[url] = readOnlyConnection
|
|
31
|
+
|
|
32
|
+
return readOnlyConnection
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
private func readWriteConnection(at url: URL) throws -> Connection {
|
|
36
|
+
if let readWriteConnection = readWrite[url] {
|
|
37
|
+
return readWriteConnection
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
let readWriteConnection = try Connection.customConection(at: url)
|
|
41
|
+
readWrite[url] = readWriteConnection
|
|
42
|
+
|
|
43
|
+
return readWriteConnection
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
private extension Connection {
|
|
48
|
+
static func customConection(at url: URL, readonly: Bool = false) throws -> Connection {
|
|
49
|
+
let conn = try Connection(url.absoluteString, readonly: readonly)
|
|
50
|
+
try conn.run("PRAGMA journal_mode = TRUNCATE;")
|
|
51
|
+
return conn
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
class SimpleConnectionProvider: ConnectionProvider {
|
|
56
|
+
var path: String
|
|
57
|
+
var readonly: Bool
|
|
58
|
+
var db: Connection?
|
|
59
|
+
|
|
60
|
+
init(path: String, readonly: Bool = false) {
|
|
61
|
+
self.path = path
|
|
62
|
+
self.readonly = readonly
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
func connection() throws -> Connection {
|
|
66
|
+
guard let conn = db else {
|
|
67
|
+
let conn = try Connection(path, readonly: readonly)
|
|
68
|
+
self.db = conn
|
|
69
|
+
return conn
|
|
70
|
+
}
|
|
71
|
+
return conn
|
|
72
|
+
}
|
|
73
|
+
}
|
|
@@ -0,0 +1,240 @@
|
|
|
1
|
+
//
|
|
2
|
+
// BlockDownloader.swift
|
|
3
|
+
// ZcashLightClientKit
|
|
4
|
+
//
|
|
5
|
+
// Created by Francisco Gindre on 17/09/2019.
|
|
6
|
+
// Copyright © 2019 Electric Coin Company. All rights reserved.
|
|
7
|
+
//
|
|
8
|
+
|
|
9
|
+
import Foundation
|
|
10
|
+
|
|
11
|
+
enum CompactBlockDownloadError: Error {
|
|
12
|
+
case timeout
|
|
13
|
+
case generalError(error: Error)
|
|
14
|
+
}
|
|
15
|
+
/**
|
|
16
|
+
Represents what a compact block downloaded should provide to its clients
|
|
17
|
+
*/
|
|
18
|
+
public protocol CompactBlockDownloading {
|
|
19
|
+
/**
|
|
20
|
+
Downloads and stores the given block range.
|
|
21
|
+
Non-Blocking
|
|
22
|
+
*/
|
|
23
|
+
func downloadBlockRange(
|
|
24
|
+
_ heightRange: CompactBlockRange,
|
|
25
|
+
completion: @escaping (Error?) -> Void
|
|
26
|
+
)
|
|
27
|
+
|
|
28
|
+
/**
|
|
29
|
+
Remove newer blocks and go back to the given height
|
|
30
|
+
- Parameters:
|
|
31
|
+
- height: the given height to rewind to
|
|
32
|
+
- completion: block to be executed after completing rewind
|
|
33
|
+
*/
|
|
34
|
+
func rewind(to height: BlockHeight, completion: @escaping (Error?) -> Void)
|
|
35
|
+
|
|
36
|
+
/**
|
|
37
|
+
returns the height of the latest compact block stored locally
|
|
38
|
+
BlockHeight.empty() if no blocks are stored yet
|
|
39
|
+
non-blocking
|
|
40
|
+
*/
|
|
41
|
+
func lastDownloadedBlockHeight(result: @escaping (Result<BlockHeight, Error>) -> Void)
|
|
42
|
+
|
|
43
|
+
/**
|
|
44
|
+
Returns the last height on the blockchain
|
|
45
|
+
Non-blocking
|
|
46
|
+
*/
|
|
47
|
+
func latestBlockHeight(result: @escaping (Result<BlockHeight, Error>) -> Void)
|
|
48
|
+
|
|
49
|
+
/**
|
|
50
|
+
Downloads and stores the given block range.
|
|
51
|
+
Blocking
|
|
52
|
+
*/
|
|
53
|
+
func downloadBlockRange(_ range: CompactBlockRange) throws
|
|
54
|
+
|
|
55
|
+
/**
|
|
56
|
+
Restore the download progress up to the given height.
|
|
57
|
+
*/
|
|
58
|
+
func rewind(to height: BlockHeight) throws
|
|
59
|
+
|
|
60
|
+
/**
|
|
61
|
+
Returns the height of the latest compact block stored locally.
|
|
62
|
+
BlockHeight.empty() if no blocks are stored yet
|
|
63
|
+
Blocking
|
|
64
|
+
*/
|
|
65
|
+
func lastDownloadedBlockHeight() throws -> BlockHeight
|
|
66
|
+
|
|
67
|
+
/**
|
|
68
|
+
Returns the latest block height
|
|
69
|
+
Blocking
|
|
70
|
+
*/
|
|
71
|
+
func latestBlockHeight() throws -> BlockHeight
|
|
72
|
+
|
|
73
|
+
/**
|
|
74
|
+
Gets the transaction for the Id given
|
|
75
|
+
- Parameter txId: Data representing the transaction Id
|
|
76
|
+
- Returns: a transaction entity with the requested transaction
|
|
77
|
+
- Throws: An error if the fetch failed
|
|
78
|
+
*/
|
|
79
|
+
func fetchTransaction(txId: Data) throws -> TransactionEntity
|
|
80
|
+
|
|
81
|
+
/**
|
|
82
|
+
Gets the transaction for the Id given
|
|
83
|
+
- Parameter txId: Data representing the transaction Id
|
|
84
|
+
- Parameter result: a handler for the result of the operation
|
|
85
|
+
*/
|
|
86
|
+
func fetchTransaction(txId: Data, result: @escaping (Result<TransactionEntity, Error>) -> Void)
|
|
87
|
+
|
|
88
|
+
func fetchUnspentTransactionOutputs(tAddress: String, startHeight: BlockHeight) throws -> [UnspentTransactionOutputEntity]
|
|
89
|
+
|
|
90
|
+
func fetchUnspentTransactionOutputs(tAddress: String, startHeight: BlockHeight, result: @escaping (Result<[UnspentTransactionOutputEntity], Error>) -> Void)
|
|
91
|
+
|
|
92
|
+
func fetchUnspentTransactionOutputs(tAddresses: [String], startHeight: BlockHeight) throws -> [UnspentTransactionOutputEntity]
|
|
93
|
+
|
|
94
|
+
func fetchUnspentTransactionOutputs(tAddresses: [String], startHeight: BlockHeight, result: @escaping (Result<[UnspentTransactionOutputEntity], Error>) -> Void)
|
|
95
|
+
|
|
96
|
+
func closeConnection()
|
|
97
|
+
}
|
|
98
|
+
|
|
99
|
+
/**
|
|
100
|
+
Serves as a source of compact blocks received from the light wallet server. Once started, it will use the given
|
|
101
|
+
lightwallet service to request all the appropriate blocks and compact block store to persist them. By delegating to
|
|
102
|
+
these dependencies, the downloader remains agnostic to the particular implementation of how to retrieve and store
|
|
103
|
+
data; although, by default the SDK uses gRPC and SQL.
|
|
104
|
+
- Property lightwalletService: the service used for requesting compact blocks
|
|
105
|
+
- Property storage: responsible for persisting the compact blocks that are received
|
|
106
|
+
*/
|
|
107
|
+
class CompactBlockDownloader {
|
|
108
|
+
var lightwalletService: LightWalletService
|
|
109
|
+
private(set) var storage: CompactBlockRepository
|
|
110
|
+
|
|
111
|
+
init(service: LightWalletService, storage: CompactBlockRepository) {
|
|
112
|
+
self.lightwalletService = service
|
|
113
|
+
self.storage = storage
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
|
|
117
|
+
extension CompactBlockDownloader: CompactBlockDownloading {
|
|
118
|
+
func closeConnection() {
|
|
119
|
+
lightwalletService.closeConnection()
|
|
120
|
+
}
|
|
121
|
+
|
|
122
|
+
func fetchUnspentTransactionOutputs(tAddresses: [String], startHeight: BlockHeight) throws -> [UnspentTransactionOutputEntity] {
|
|
123
|
+
try lightwalletService.fetchUTXOs(for: tAddresses, height: startHeight)
|
|
124
|
+
}
|
|
125
|
+
|
|
126
|
+
func fetchUnspentTransactionOutputs(
|
|
127
|
+
tAddresses: [String],
|
|
128
|
+
startHeight: BlockHeight,
|
|
129
|
+
result: @escaping (Result<[UnspentTransactionOutputEntity], Error>) -> Void
|
|
130
|
+
) {
|
|
131
|
+
lightwalletService.fetchUTXOs(for: tAddresses, height: startHeight) { fetchResult in
|
|
132
|
+
switch fetchResult {
|
|
133
|
+
case .success(let utxos):
|
|
134
|
+
result(.success(utxos))
|
|
135
|
+
case .failure(let error):
|
|
136
|
+
result(.failure(error))
|
|
137
|
+
}
|
|
138
|
+
}
|
|
139
|
+
}
|
|
140
|
+
|
|
141
|
+
func fetchUnspentTransactionOutputs(tAddress: String, startHeight: BlockHeight) throws -> [UnspentTransactionOutputEntity] {
|
|
142
|
+
try lightwalletService.fetchUTXOs(for: tAddress, height: startHeight)
|
|
143
|
+
}
|
|
144
|
+
|
|
145
|
+
func fetchUnspentTransactionOutputs(tAddress: String, startHeight: BlockHeight, result: @escaping (Result<[UnspentTransactionOutputEntity], Error>) -> Void) {
|
|
146
|
+
lightwalletService.fetchUTXOs(for: tAddress, height: startHeight) { fetchResult in
|
|
147
|
+
switch fetchResult {
|
|
148
|
+
case .success(let utxos):
|
|
149
|
+
result(.success(utxos))
|
|
150
|
+
case .failure(let error):
|
|
151
|
+
result(.failure(error))
|
|
152
|
+
}
|
|
153
|
+
}
|
|
154
|
+
}
|
|
155
|
+
|
|
156
|
+
func latestBlockHeight(result: @escaping (Result<BlockHeight, Error>) -> Void) {
|
|
157
|
+
lightwalletService.latestBlockHeight { fetchResult in
|
|
158
|
+
switch fetchResult {
|
|
159
|
+
case .failure(let error):
|
|
160
|
+
result(.failure(error))
|
|
161
|
+
case .success(let height):
|
|
162
|
+
result(.success(height))
|
|
163
|
+
}
|
|
164
|
+
}
|
|
165
|
+
}
|
|
166
|
+
|
|
167
|
+
func latestBlockHeight() throws -> BlockHeight {
|
|
168
|
+
try lightwalletService.latestBlockHeight()
|
|
169
|
+
}
|
|
170
|
+
|
|
171
|
+
/**
|
|
172
|
+
Downloads and stores the given block range.
|
|
173
|
+
Non-Blocking
|
|
174
|
+
*/
|
|
175
|
+
func downloadBlockRange(
|
|
176
|
+
_ heightRange: CompactBlockRange,
|
|
177
|
+
completion: @escaping (Error?) -> Void
|
|
178
|
+
) {
|
|
179
|
+
lightwalletService.blockRange(heightRange) { [weak self] result in
|
|
180
|
+
guard let self = self else {
|
|
181
|
+
return
|
|
182
|
+
}
|
|
183
|
+
|
|
184
|
+
switch result {
|
|
185
|
+
case .failure(let error):
|
|
186
|
+
completion(error)
|
|
187
|
+
case .success(let compactBlocks):
|
|
188
|
+
self.storage.write(blocks: compactBlocks) { storeError in
|
|
189
|
+
completion(storeError)
|
|
190
|
+
}
|
|
191
|
+
}
|
|
192
|
+
}
|
|
193
|
+
}
|
|
194
|
+
|
|
195
|
+
func downloadBlockRange(_ range: CompactBlockRange) throws {
|
|
196
|
+
let blocks = try lightwalletService.blockRange(range)
|
|
197
|
+
try storage.write(blocks: blocks)
|
|
198
|
+
}
|
|
199
|
+
|
|
200
|
+
func rewind(to height: BlockHeight, completion: @escaping (Error?) -> Void) {
|
|
201
|
+
storage.rewind(to: height) { e in
|
|
202
|
+
completion(e)
|
|
203
|
+
}
|
|
204
|
+
}
|
|
205
|
+
|
|
206
|
+
func lastDownloadedBlockHeight(result: @escaping (Result<BlockHeight, Error>) -> Void) {
|
|
207
|
+
storage.latestHeight { heightResult in
|
|
208
|
+
switch heightResult {
|
|
209
|
+
case .failure(let e):
|
|
210
|
+
result(.failure(CompactBlockDownloadError.generalError(error: e)))
|
|
211
|
+
return
|
|
212
|
+
case .success(let height):
|
|
213
|
+
result(.success(height))
|
|
214
|
+
}
|
|
215
|
+
}
|
|
216
|
+
}
|
|
217
|
+
|
|
218
|
+
func rewind(to height: BlockHeight) throws {
|
|
219
|
+
try self.storage.rewind(to: height)
|
|
220
|
+
}
|
|
221
|
+
|
|
222
|
+
func lastDownloadedBlockHeight() throws -> BlockHeight {
|
|
223
|
+
try self.storage.latestHeight()
|
|
224
|
+
}
|
|
225
|
+
|
|
226
|
+
func fetchTransaction(txId: Data) throws -> TransactionEntity {
|
|
227
|
+
try lightwalletService.fetchTransaction(txId: txId)
|
|
228
|
+
}
|
|
229
|
+
|
|
230
|
+
func fetchTransaction(txId: Data, result: @escaping (Result<TransactionEntity, Error>) -> Void) {
|
|
231
|
+
lightwalletService.fetchTransaction(txId: txId) { txResult in
|
|
232
|
+
switch txResult {
|
|
233
|
+
case .failure(let error):
|
|
234
|
+
result(.failure(error))
|
|
235
|
+
case .success(let transaction):
|
|
236
|
+
result(.success(transaction))
|
|
237
|
+
}
|
|
238
|
+
}
|
|
239
|
+
}
|
|
240
|
+
}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
//
|
|
2
|
+
// CompactBlockDownloaderBuilder.swift
|
|
3
|
+
// ZcashLightClientKit
|
|
4
|
+
//
|
|
5
|
+
// Created by Francisco Gindre on 10/18/19.
|
|
6
|
+
// Copyright © 2019 Electric Coin Company. All rights reserved.
|
|
7
|
+
//
|
|
8
|
+
|
|
9
|
+
import Foundation
|
|
10
|
+
import SQLite
|
|
11
|
+
|
|
12
|
+
extension CompactBlockDownloader {
|
|
13
|
+
static func sqlDownloader(service: LightWalletService, at url: URL) -> CompactBlockDownloader? {
|
|
14
|
+
let storage = CompactBlockStorage(url: url, readonly: false)
|
|
15
|
+
|
|
16
|
+
guard (try? storage.createTable()) != nil else { return nil }
|
|
17
|
+
|
|
18
|
+
return CompactBlockDownloader(service: service, storage: storage)
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
extension CompactBlockStorage {
|
|
23
|
+
convenience init(url: URL, readonly: Bool) {
|
|
24
|
+
self.init(connectionProvider: SimpleConnectionProvider(path: url.absoluteString, readonly: readonly))
|
|
25
|
+
}
|
|
26
|
+
}
|
|
@@ -0,0 +1,258 @@
|
|
|
1
|
+
//
|
|
2
|
+
// CompactBlockDownloadOperation.swift
|
|
3
|
+
// ZcashLightClientKit
|
|
4
|
+
//
|
|
5
|
+
// Created by Francisco Gindre on 10/16/19.
|
|
6
|
+
// Copyright © 2019 Electric Coin Company. All rights reserved.
|
|
7
|
+
//
|
|
8
|
+
|
|
9
|
+
import Foundation
|
|
10
|
+
|
|
11
|
+
class CompactBlockDownloadOperation: ZcashOperation {
|
|
12
|
+
override var isConcurrent: Bool { false }
|
|
13
|
+
override var isAsynchronous: Bool { false }
|
|
14
|
+
|
|
15
|
+
private var downloader: CompactBlockDownloading
|
|
16
|
+
private var range: CompactBlockRange
|
|
17
|
+
|
|
18
|
+
required init(downloader: CompactBlockDownloading, range: CompactBlockRange) {
|
|
19
|
+
self.range = range
|
|
20
|
+
self.downloader = downloader
|
|
21
|
+
super.init()
|
|
22
|
+
self.name = "Download Operation: \(range)"
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
override func main() {
|
|
26
|
+
guard !shouldCancel() else {
|
|
27
|
+
cancel()
|
|
28
|
+
return
|
|
29
|
+
}
|
|
30
|
+
self.startedHandler?()
|
|
31
|
+
do {
|
|
32
|
+
try downloader.downloadBlockRange(range)
|
|
33
|
+
} catch {
|
|
34
|
+
self.error = error
|
|
35
|
+
self.fail()
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
protocol CompactBlockProgressDelegate: AnyObject {
|
|
41
|
+
func progressUpdated(_ progress: CompactBlockProgress)
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
class CompactBlockStreamDownloadOperation: ZcashOperation {
|
|
45
|
+
enum CompactBlockStreamDownloadOperationError: Error {
|
|
46
|
+
case startHeightMissing
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
override var isConcurrent: Bool { false }
|
|
50
|
+
override var isAsynchronous: Bool { false }
|
|
51
|
+
|
|
52
|
+
private var storage: CompactBlockStorage
|
|
53
|
+
private var service: LightWalletService
|
|
54
|
+
private var done = false
|
|
55
|
+
private var cancelable: CancellableCall?
|
|
56
|
+
private var startHeight: BlockHeight?
|
|
57
|
+
private var targetHeight: BlockHeight?
|
|
58
|
+
|
|
59
|
+
private weak var progressDelegate: CompactBlockProgressDelegate?
|
|
60
|
+
|
|
61
|
+
required init(
|
|
62
|
+
service: LightWalletService,
|
|
63
|
+
storage: CompactBlockStorage,
|
|
64
|
+
startHeight: BlockHeight? = nil,
|
|
65
|
+
targetHeight: BlockHeight? = nil,
|
|
66
|
+
progressDelegate: CompactBlockProgressDelegate? = nil
|
|
67
|
+
) {
|
|
68
|
+
self.storage = storage
|
|
69
|
+
self.service = service
|
|
70
|
+
self.startHeight = startHeight
|
|
71
|
+
self.targetHeight = targetHeight
|
|
72
|
+
self.progressDelegate = progressDelegate
|
|
73
|
+
super.init()
|
|
74
|
+
self.name = "Download Stream Operation"
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
// swiftlint:disable cyclomatic_complexity
|
|
78
|
+
override func main() {
|
|
79
|
+
guard !shouldCancel() else {
|
|
80
|
+
cancel()
|
|
81
|
+
return
|
|
82
|
+
}
|
|
83
|
+
self.startedHandler?()
|
|
84
|
+
do {
|
|
85
|
+
if self.targetHeight == nil {
|
|
86
|
+
self.targetHeight = try service.latestBlockHeight()
|
|
87
|
+
}
|
|
88
|
+
guard let latestHeight = self.targetHeight else {
|
|
89
|
+
throw LightWalletServiceError.generalError(message: "missing target height on block stream operation")
|
|
90
|
+
}
|
|
91
|
+
let latestDownloaded = try storage.latestHeight()
|
|
92
|
+
let startHeight = max(self.startHeight ?? BlockHeight.empty(), latestDownloaded)
|
|
93
|
+
|
|
94
|
+
self.cancelable = self.service.blockStream(startHeight: startHeight, endHeight: latestHeight) { [weak self] blockResult in
|
|
95
|
+
switch blockResult {
|
|
96
|
+
case .success(let result):
|
|
97
|
+
switch result {
|
|
98
|
+
case .success:
|
|
99
|
+
self?.done = true
|
|
100
|
+
return
|
|
101
|
+
case .error(let e):
|
|
102
|
+
self?.fail(error: e)
|
|
103
|
+
}
|
|
104
|
+
case .failure(let e):
|
|
105
|
+
if case .userCancelled = e {
|
|
106
|
+
self?.done = true
|
|
107
|
+
} else {
|
|
108
|
+
self?.fail(error: e)
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
} handler: {[weak self] block in
|
|
112
|
+
guard let self = self else { return }
|
|
113
|
+
do {
|
|
114
|
+
try self.storage.insert(block)
|
|
115
|
+
} catch {
|
|
116
|
+
self.fail(error: error)
|
|
117
|
+
}
|
|
118
|
+
} progress: { progress in
|
|
119
|
+
self.progressDelegate?.progressUpdated(.download(progress))
|
|
120
|
+
}
|
|
121
|
+
|
|
122
|
+
while !done && !isCancelled {
|
|
123
|
+
sleep(1)
|
|
124
|
+
}
|
|
125
|
+
} catch {
|
|
126
|
+
self.fail(error: error)
|
|
127
|
+
}
|
|
128
|
+
}
|
|
129
|
+
|
|
130
|
+
override func fail(error: Error? = nil) {
|
|
131
|
+
self.cancelable?.cancel()
|
|
132
|
+
super.fail(error: error)
|
|
133
|
+
}
|
|
134
|
+
|
|
135
|
+
override func cancel() {
|
|
136
|
+
self.cancelable?.cancel()
|
|
137
|
+
super.cancel()
|
|
138
|
+
}
|
|
139
|
+
}
|
|
140
|
+
|
|
141
|
+
class CompactBlockBatchDownloadOperation: ZcashOperation {
|
|
142
|
+
enum CompactBlockBatchDownloadOperationError: Error {
|
|
143
|
+
case startHeightMissing
|
|
144
|
+
case batchDownloadFailed(range: CompactBlockRange, error: Error?)
|
|
145
|
+
}
|
|
146
|
+
|
|
147
|
+
override var isConcurrent: Bool { false }
|
|
148
|
+
override var isAsynchronous: Bool { false }
|
|
149
|
+
|
|
150
|
+
private var batch: Int
|
|
151
|
+
private var maxRetries: Int
|
|
152
|
+
private var storage: CompactBlockStorage
|
|
153
|
+
private var service: LightWalletService
|
|
154
|
+
private var cancelable: CancellableCall?
|
|
155
|
+
private var startHeight: BlockHeight
|
|
156
|
+
private var targetHeight: BlockHeight
|
|
157
|
+
|
|
158
|
+
private weak var progressDelegate: CompactBlockProgressDelegate?
|
|
159
|
+
|
|
160
|
+
required init(
|
|
161
|
+
service: LightWalletService,
|
|
162
|
+
storage: CompactBlockStorage,
|
|
163
|
+
startHeight: BlockHeight,
|
|
164
|
+
targetHeight: BlockHeight,
|
|
165
|
+
batchSize: Int = 100,
|
|
166
|
+
maxRetries: Int = 5,
|
|
167
|
+
progressDelegate: CompactBlockProgressDelegate? = nil
|
|
168
|
+
) {
|
|
169
|
+
self.storage = storage
|
|
170
|
+
self.service = service
|
|
171
|
+
self.startHeight = startHeight
|
|
172
|
+
self.targetHeight = targetHeight
|
|
173
|
+
self.progressDelegate = progressDelegate
|
|
174
|
+
self.batch = batchSize
|
|
175
|
+
self.maxRetries = maxRetries
|
|
176
|
+
super.init()
|
|
177
|
+
self.name = "Download Batch Operation"
|
|
178
|
+
}
|
|
179
|
+
|
|
180
|
+
override func main() {
|
|
181
|
+
guard !shouldCancel() else {
|
|
182
|
+
cancel()
|
|
183
|
+
return
|
|
184
|
+
}
|
|
185
|
+
self.startedHandler?()
|
|
186
|
+
do {
|
|
187
|
+
let localDownloadedHeight = try self.storage.latestHeight()
|
|
188
|
+
|
|
189
|
+
if localDownloadedHeight != BlockHeight.empty() && localDownloadedHeight > startHeight {
|
|
190
|
+
LoggerProxy.warn("provided startHeight (\(startHeight)) differs from local latest downloaded height (\(localDownloadedHeight))")
|
|
191
|
+
startHeight = localDownloadedHeight + 1
|
|
192
|
+
}
|
|
193
|
+
|
|
194
|
+
var currentHeight = startHeight
|
|
195
|
+
self.progressDelegate?.progressUpdated(
|
|
196
|
+
.download(
|
|
197
|
+
BlockProgress(
|
|
198
|
+
startHeight: currentHeight,
|
|
199
|
+
targetHeight: targetHeight,
|
|
200
|
+
progressHeight: currentHeight
|
|
201
|
+
)
|
|
202
|
+
)
|
|
203
|
+
)
|
|
204
|
+
|
|
205
|
+
while !isCancelled && currentHeight <= targetHeight {
|
|
206
|
+
var retries = 0
|
|
207
|
+
var success = true
|
|
208
|
+
var localError: Error?
|
|
209
|
+
|
|
210
|
+
let range = nextRange(currentHeight: currentHeight, targetHeight: targetHeight)
|
|
211
|
+
|
|
212
|
+
repeat {
|
|
213
|
+
do {
|
|
214
|
+
let blocks = try service.blockRange(range)
|
|
215
|
+
try storage.insert(blocks)
|
|
216
|
+
success = true
|
|
217
|
+
} catch {
|
|
218
|
+
success = false
|
|
219
|
+
localError = error
|
|
220
|
+
retries += 1
|
|
221
|
+
}
|
|
222
|
+
} while !isCancelled && !success && retries < maxRetries
|
|
223
|
+
|
|
224
|
+
if retries >= maxRetries {
|
|
225
|
+
throw CompactBlockBatchDownloadOperationError.batchDownloadFailed(range: range, error: localError)
|
|
226
|
+
}
|
|
227
|
+
|
|
228
|
+
self.progressDelegate?.progressUpdated(
|
|
229
|
+
.download(
|
|
230
|
+
BlockProgress(
|
|
231
|
+
startHeight: startHeight,
|
|
232
|
+
targetHeight: targetHeight,
|
|
233
|
+
progressHeight: range.upperBound
|
|
234
|
+
)
|
|
235
|
+
)
|
|
236
|
+
)
|
|
237
|
+
|
|
238
|
+
currentHeight = range.upperBound + 1
|
|
239
|
+
}
|
|
240
|
+
} catch {
|
|
241
|
+
self.fail(error: error)
|
|
242
|
+
}
|
|
243
|
+
}
|
|
244
|
+
|
|
245
|
+
override func fail(error: Error? = nil) {
|
|
246
|
+
self.cancelable?.cancel()
|
|
247
|
+
super.fail(error: error)
|
|
248
|
+
}
|
|
249
|
+
|
|
250
|
+
override func cancel() {
|
|
251
|
+
self.cancelable?.cancel()
|
|
252
|
+
super.cancel()
|
|
253
|
+
}
|
|
254
|
+
|
|
255
|
+
func nextRange(currentHeight: BlockHeight, targetHeight: BlockHeight) -> CompactBlockRange {
|
|
256
|
+
CompactBlockRange(uncheckedBounds: (lower: currentHeight, upper: min(currentHeight + batch, targetHeight)))
|
|
257
|
+
}
|
|
258
|
+
}
|