react-native-zcash 0.3.4 → 0.4.0
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 +11 -0
- package/LICENSE +22 -0
- package/README.md +40 -37
- package/android/build.gradle +7 -5
- package/android/src/main/assets/saplingtree/mainnet/1310000.json +1 -1
- package/android/src/main/assets/saplingtree/mainnet/1320000.json +1 -1
- package/android/src/main/assets/saplingtree/mainnet/1330000.json +1 -1
- package/android/src/main/assets/saplingtree/mainnet/1340000.json +1 -1
- package/android/src/main/assets/saplingtree/mainnet/1350000.json +1 -1
- package/android/src/main/assets/saplingtree/mainnet/1360000.json +1 -1
- package/android/src/main/assets/saplingtree/mainnet/1370000.json +1 -1
- package/android/src/main/assets/saplingtree/mainnet/1380000.json +1 -1
- package/android/src/main/assets/saplingtree/mainnet/1390000.json +1 -1
- package/android/src/main/assets/saplingtree/mainnet/1400000.json +1 -1
- package/android/src/main/assets/saplingtree/mainnet/1410000.json +1 -1
- package/android/src/main/assets/saplingtree/mainnet/1420000.json +1 -1
- package/android/src/main/assets/saplingtree/mainnet/1430000.json +1 -1
- package/android/src/main/assets/saplingtree/mainnet/1440000.json +1 -1
- package/android/src/main/assets/saplingtree/mainnet/1450000.json +1 -1
- package/android/src/main/assets/saplingtree/mainnet/1460000.json +1 -1
- package/android/src/main/assets/saplingtree/mainnet/1470000.json +1 -1
- package/android/src/main/assets/saplingtree/mainnet/1480000.json +1 -1
- package/android/src/main/assets/saplingtree/mainnet/1490000.json +1 -1
- package/android/src/main/assets/saplingtree/mainnet/1500000.json +1 -1
- package/android/src/main/assets/saplingtree/mainnet/1510000.json +1 -1
- package/android/src/main/assets/saplingtree/mainnet/1520000.json +1 -1
- package/android/src/main/assets/saplingtree/mainnet/1530000.json +1 -1
- package/android/src/main/assets/saplingtree/mainnet/1540000.json +1 -1
- package/android/src/main/assets/saplingtree/mainnet/1550000.json +1 -1
- package/android/src/main/assets/saplingtree/mainnet/1560000.json +1 -1
- package/android/src/main/assets/saplingtree/mainnet/1570000.json +1 -1
- package/android/src/main/assets/saplingtree/mainnet/1580000.json +1 -1
- package/android/src/main/assets/saplingtree/mainnet/1590000.json +1 -1
- package/android/src/main/assets/saplingtree/mainnet/1600000.json +1 -1
- package/android/src/main/assets/saplingtree/mainnet/1610000.json +1 -1
- package/android/src/main/assets/saplingtree/mainnet/1620000.json +1 -1
- package/android/src/main/assets/saplingtree/mainnet/1630000.json +1 -1
- package/android/src/main/assets/saplingtree/mainnet/1640000.json +1 -1
- package/android/src/main/assets/saplingtree/mainnet/1650000.json +1 -1
- package/android/src/main/assets/saplingtree/mainnet/1660000.json +1 -1
- package/android/src/main/assets/saplingtree/mainnet/1670000.json +1 -1
- package/android/src/main/assets/saplingtree/mainnet/1680000.json +1 -1
- package/android/src/main/assets/saplingtree/mainnet/1690000.json +2 -1
- package/android/src/main/assets/saplingtree/mainnet/1700000.json +2 -1
- package/android/src/main/assets/saplingtree/mainnet/1710000.json +2 -1
- package/android/src/main/assets/saplingtree/mainnet/1720000.json +2 -1
- package/android/src/main/assets/saplingtree/mainnet/1730000.json +2 -1
- package/android/src/main/assets/saplingtree/mainnet/1740000.json +2 -1
- package/android/src/main/assets/saplingtree/mainnet/1750000.json +2 -1
- package/android/src/main/assets/saplingtree/mainnet/1760000.json +2 -1
- package/android/src/main/assets/saplingtree/mainnet/1770000.json +2 -1
- package/android/src/main/assets/saplingtree/mainnet/1780000.json +2 -1
- package/android/src/main/assets/saplingtree/mainnet/1790000.json +2 -1
- package/android/src/main/assets/saplingtree/mainnet/1800000.json +2 -1
- package/android/src/main/assets/saplingtree/mainnet/1810000.json +2 -1
- package/android/src/main/assets/saplingtree/mainnet/1820000.json +2 -1
- package/android/src/main/assets/saplingtree/mainnet/1830000.json +2 -1
- package/android/src/main/assets/saplingtree/mainnet/1840000.json +2 -1
- package/android/src/main/assets/saplingtree/mainnet/1850000.json +2 -1
- package/android/src/main/assets/saplingtree/mainnet/1860000.json +2 -1
- package/android/src/main/assets/saplingtree/mainnet/1870000.json +2 -1
- package/android/src/main/assets/saplingtree/mainnet/1880000.json +2 -1
- package/android/src/main/assets/saplingtree/mainnet/1890000.json +2 -1
- package/android/src/main/assets/saplingtree/mainnet/1900000.json +2 -1
- package/android/src/main/assets/saplingtree/mainnet/1910000.json +2 -1
- package/android/src/main/assets/saplingtree/mainnet/1920000.json +2 -1
- package/android/src/main/assets/saplingtree/mainnet/1930000.json +2 -1
- package/android/src/main/assets/saplingtree/mainnet/1940000.json +2 -1
- package/android/src/main/assets/saplingtree/mainnet/1950000.json +2 -1
- package/android/src/main/assets/saplingtree/mainnet/1960000.json +2 -1
- package/android/src/main/assets/saplingtree/mainnet/1970000.json +2 -1
- package/android/src/main/assets/saplingtree/mainnet/1980000.json +2 -1
- package/android/src/main/assets/saplingtree/mainnet/1990000.json +2 -1
- package/android/src/main/assets/saplingtree/mainnet/2000000.json +2 -1
- package/android/src/main/assets/saplingtree/mainnet/2010000.json +2 -1
- package/android/src/main/assets/saplingtree/mainnet/2020000.json +2 -1
- package/android/src/main/assets/saplingtree/mainnet/2030000.json +2 -1
- package/android/src/main/assets/saplingtree/mainnet/2040000.json +2 -1
- package/android/src/main/assets/saplingtree/mainnet/2050000.json +2 -1
- package/android/src/main/assets/saplingtree/mainnet/2060000.json +2 -1
- package/android/src/main/assets/saplingtree/mainnet/2070000.json +2 -1
- package/android/src/main/assets/saplingtree/mainnet/2080000.json +2 -1
- package/android/src/main/assets/saplingtree/mainnet/2090000.json +2 -1
- package/android/src/main/assets/saplingtree/mainnet/2100000.json +2 -1
- package/android/src/main/assets/saplingtree/mainnet/2110000.json +2 -1
- package/android/src/main/assets/saplingtree/mainnet/2120000.json +2 -1
- package/android/src/main/assets/saplingtree/mainnet/2130000.json +2 -1
- package/android/src/main/assets/saplingtree/mainnet/2140000.json +2 -1
- package/android/src/main/assets/saplingtree/mainnet/2150000.json +2 -1
- package/android/src/main/assets/saplingtree/mainnet/2160000.json +2 -1
- package/android/src/main/assets/saplingtree/mainnet/2170000.json +2 -1
- package/android/src/main/assets/saplingtree/mainnet/2180000.json +8 -0
- package/android/src/main/assets/saplingtree/mainnet/2190000.json +8 -0
- package/android/src/main/assets/saplingtree/mainnet/2200000.json +8 -0
- package/android/src/main/assets/saplingtree/mainnet/2210000.json +8 -0
- package/android/src/main/java/app/edge/rnzcash/RNZcashModule.kt +179 -175
- package/android/src/main/java/app/edge/rnzcash/RNZcashPackage.kt +2 -3
- package/ios/RNZcash.m +5 -22
- package/ios/RNZcash.swift +532 -514
- package/ios/ZCashLightClientKit/Block/CompactBlockProcessor.swift +1365 -0
- package/ios/ZCashLightClientKit/Block/DatabaseStorage/ConnectorProvider.swift +12 -0
- package/ios/ZCashLightClientKit/Block/DatabaseStorage/DatabaseStorageError.swift +20 -0
- package/ios/ZCashLightClientKit/Block/DatabaseStorage/SimpleConnectionProvider.swift +39 -0
- package/ios/ZCashLightClientKit/Block/Download/BlockDownloader.swift +295 -0
- package/ios/ZCashLightClientKit/Block/Download/BlockDownloaderService.swift +117 -0
- package/ios/ZCashLightClientKit/Block/Enhance/BlockEnhancer.swift +123 -0
- package/ios/ZCashLightClientKit/Block/FetchUnspentTxOutputs/UTXOFetcher.swift +114 -0
- package/ios/ZCashLightClientKit/Block/FilesystemStorage/FSCompactBlockRepository.swift +419 -0
- package/ios/ZCashLightClientKit/Block/SaplingParameters/SaplingParametersHandler.swift +52 -0
- package/ios/ZCashLightClientKit/Block/Scan/BlockScanner.swift +114 -0
- package/ios/ZCashLightClientKit/Block/Utils/AfterSyncHooksManager.swift +88 -0
- package/ios/ZCashLightClientKit/Block/Utils/InternalSyncProgress.swift +200 -0
- package/ios/ZCashLightClientKit/Block/Validate/BlockValidator.swift +51 -0
- package/ios/ZCashLightClientKit/ClosureSynchronizer.swift +84 -0
- package/ios/ZCashLightClientKit/CombineSynchronizer.swift +76 -0
- package/ios/ZCashLightClientKit/Constants/Checkpoint+Constants.swift +98 -0
- package/ios/ZCashLightClientKit/Constants/Checkpoint+mainnet.swift +19 -0
- package/ios/ZCashLightClientKit/Constants/Checkpoint+testnet.swift +20 -0
- package/ios/ZCashLightClientKit/Constants/ZcashSDK.swift +215 -0
- package/ios/ZCashLightClientKit/DAO/BlockDao.swift +112 -0
- package/ios/ZCashLightClientKit/DAO/PagedTransactionDao.swift +54 -0
- package/ios/ZCashLightClientKit/DAO/TransactionDao.swift +245 -0
- package/ios/ZCashLightClientKit/DAO/UnspentTransactionOutputDao.swift +210 -0
- package/ios/ZCashLightClientKit/Entity/AccountEntity.swift +199 -0
- package/ios/ZCashLightClientKit/Entity/BlockProgress.swift +24 -0
- package/ios/ZCashLightClientKit/Entity/EncodedTransactionEntity.swift +26 -0
- package/ios/ZCashLightClientKit/Entity/SentNoteEntity.swift +48 -0
- package/ios/ZCashLightClientKit/Entity/TransactionEntity.swift +235 -0
- package/ios/ZCashLightClientKit/Entity/UnspentTransactionOutputEntity.swift +18 -0
- package/ios/ZCashLightClientKit/Entity/ZcashCompactBlock.swift +96 -0
- package/ios/ZCashLightClientKit/Error/Sourcery/ZcashError.stencil +40 -0
- package/ios/ZCashLightClientKit/Error/Sourcery/ZcashErrorCode.stencil +15 -0
- package/ios/ZCashLightClientKit/Error/Sourcery/generateErrorCode.sh +34 -0
- package/ios/ZCashLightClientKit/Error/ZcashError.swift +820 -0
- package/ios/ZCashLightClientKit/Error/ZcashErrorCode.swift +306 -0
- package/ios/ZCashLightClientKit/Error/ZcashErrorCodeDefinition.swift +596 -0
- package/ios/ZCashLightClientKit/Extensions/Data+Zcash.swift +17 -0
- package/ios/ZCashLightClientKit/Extensions/Data+internal.swift +35 -0
- package/ios/ZCashLightClientKit/Extensions/Error+ZcashError.swift +18 -0
- package/ios/ZCashLightClientKit/Extensions/HexEncode.swift +41 -0
- package/ios/ZCashLightClientKit/Extensions/NumberFormatter+Zcash.swift +19 -0
- package/ios/ZCashLightClientKit/Extensions/URL+UpdateWithAlias.swift +36 -0
- package/ios/ZCashLightClientKit/Extensions/Undescribable.swift +22 -0
- package/ios/ZCashLightClientKit/Extensions/Zatoshi+SQLite.swift +20 -0
- package/ios/ZCashLightClientKit/Extensions/ZcashRust+Utils.swift +26 -0
- package/ios/ZCashLightClientKit/Extensions/ZcashSDK+extensions.swift +34 -0
- package/ios/ZCashLightClientKit/Initializer.swift +433 -0
- package/ios/ZCashLightClientKit/Metrics/SDKMetrics.swift +270 -0
- package/ios/ZCashLightClientKit/Model/Checkpoint.swift +84 -0
- package/ios/ZCashLightClientKit/Model/Memo.swift +236 -0
- package/ios/ZCashLightClientKit/Model/WalletTypes.swift +281 -0
- package/ios/ZCashLightClientKit/Model/Zatoshi.swift +115 -0
- package/ios/ZCashLightClientKit/Modules/Service/GRPC/LightWalletGRPCService.swift +342 -0
- package/ios/ZCashLightClientKit/Modules/Service/GRPC/ProtoBuf/Extensions/Protocolbuffer+Extensions.swift +50 -0
- package/ios/ZCashLightClientKit/Modules/Service/GRPC/ProtoBuf/compact_formats.pb.swift +399 -0
- package/ios/ZCashLightClientKit/Modules/Service/GRPC/ProtoBuf/proto/compact_formats.proto +66 -0
- package/ios/ZCashLightClientKit/Modules/Service/GRPC/ProtoBuf/proto/service.proto +185 -0
- package/ios/ZCashLightClientKit/Modules/Service/GRPC/ProtoBuf/service.grpc.swift +1123 -0
- package/ios/ZCashLightClientKit/Modules/Service/GRPC/ProtoBuf/service.pb.swift +1208 -0
- package/ios/ZCashLightClientKit/Modules/Service/LightWalletService.swift +195 -0
- package/ios/ZCashLightClientKit/Providers/LatestBlocksDataProvider.swift +69 -0
- package/ios/ZCashLightClientKit/Providers/ResourceProvider.swift +65 -0
- package/ios/ZCashLightClientKit/Repository/BlockRepository.swift +13 -0
- package/ios/ZCashLightClientKit/Repository/CompactBlockRepository.swift +43 -0
- package/ios/ZCashLightClientKit/Repository/NotesRepository.swift +17 -0
- package/ios/ZCashLightClientKit/Repository/PaginatedTransactionRepository.swift +35 -0
- package/ios/ZCashLightClientKit/Repository/TransactionRepository.swift +29 -0
- package/ios/ZCashLightClientKit/Repository/TransactionRepositoryBuilder.swift +24 -0
- package/ios/ZCashLightClientKit/Repository/UnspentTransactionOutputRepository.swift +16 -0
- package/ios/ZCashLightClientKit/Resources/checkpoints/mainnet/1000000.json +7 -0
- package/ios/ZCashLightClientKit/Resources/checkpoints/mainnet/1010000.json +7 -0
- package/ios/ZCashLightClientKit/Resources/checkpoints/mainnet/1020000.json +7 -0
- package/ios/ZCashLightClientKit/Resources/checkpoints/mainnet/1030000.json +7 -0
- package/ios/ZCashLightClientKit/Resources/checkpoints/mainnet/1040000.json +7 -0
- package/ios/ZCashLightClientKit/Resources/checkpoints/mainnet/1050000.json +7 -0
- package/ios/ZCashLightClientKit/Resources/checkpoints/mainnet/1060000.json +7 -0
- package/ios/ZCashLightClientKit/Resources/checkpoints/mainnet/1070000.json +7 -0
- package/ios/ZCashLightClientKit/Resources/checkpoints/mainnet/1080000.json +7 -0
- package/ios/ZCashLightClientKit/Resources/checkpoints/mainnet/1090000.json +7 -0
- package/ios/ZCashLightClientKit/Resources/checkpoints/mainnet/1100000.json +7 -0
- package/ios/ZCashLightClientKit/Resources/checkpoints/mainnet/1110000.json +7 -0
- package/ios/ZCashLightClientKit/Resources/checkpoints/mainnet/1120000.json +7 -0
- package/ios/ZCashLightClientKit/Resources/checkpoints/mainnet/1130000.json +7 -0
- package/ios/ZCashLightClientKit/Resources/checkpoints/mainnet/1140000.json +7 -0
- package/ios/ZCashLightClientKit/Resources/checkpoints/mainnet/1150000.json +7 -0
- package/ios/ZCashLightClientKit/Resources/checkpoints/mainnet/1160000.json +7 -0
- package/ios/ZCashLightClientKit/Resources/checkpoints/mainnet/1170000.json +7 -0
- package/ios/ZCashLightClientKit/Resources/checkpoints/mainnet/1180000.json +7 -0
- package/ios/ZCashLightClientKit/Resources/checkpoints/mainnet/1190000.json +7 -0
- package/ios/ZCashLightClientKit/Resources/checkpoints/mainnet/1200000.json +7 -0
- package/ios/ZCashLightClientKit/Resources/checkpoints/mainnet/1210000.json +7 -0
- package/ios/ZCashLightClientKit/Resources/checkpoints/mainnet/1220000.json +7 -0
- package/ios/ZCashLightClientKit/Resources/checkpoints/mainnet/1230000.json +7 -0
- package/ios/ZCashLightClientKit/Resources/checkpoints/mainnet/1240000.json +7 -0
- package/ios/ZCashLightClientKit/Resources/checkpoints/mainnet/1250000.json +7 -0
- package/ios/ZCashLightClientKit/Resources/checkpoints/mainnet/1260000.json +7 -0
- package/ios/ZCashLightClientKit/Resources/checkpoints/mainnet/1270000.json +7 -0
- package/ios/ZCashLightClientKit/Resources/checkpoints/mainnet/1280000.json +7 -0
- package/ios/ZCashLightClientKit/Resources/checkpoints/mainnet/1290000.json +7 -0
- package/ios/ZCashLightClientKit/Resources/checkpoints/mainnet/1300000.json +7 -0
- package/ios/ZCashLightClientKit/Resources/checkpoints/mainnet/1310000.json +7 -0
- package/ios/ZCashLightClientKit/Resources/checkpoints/mainnet/1320000.json +7 -0
- package/ios/ZCashLightClientKit/Resources/checkpoints/mainnet/1330000.json +7 -0
- package/ios/ZCashLightClientKit/Resources/checkpoints/mainnet/1340000.json +7 -0
- package/ios/ZCashLightClientKit/Resources/checkpoints/mainnet/1350000.json +7 -0
- package/ios/ZCashLightClientKit/Resources/checkpoints/mainnet/1360000.json +7 -0
- package/ios/ZCashLightClientKit/Resources/checkpoints/mainnet/1370000.json +7 -0
- package/ios/ZCashLightClientKit/Resources/checkpoints/mainnet/1380000.json +7 -0
- package/ios/ZCashLightClientKit/Resources/checkpoints/mainnet/1390000.json +7 -0
- package/ios/ZCashLightClientKit/Resources/checkpoints/mainnet/1400000.json +7 -0
- package/ios/ZCashLightClientKit/Resources/checkpoints/mainnet/1410000.json +7 -0
- package/ios/ZCashLightClientKit/Resources/checkpoints/mainnet/1420000.json +7 -0
- package/ios/ZCashLightClientKit/Resources/checkpoints/mainnet/1430000.json +7 -0
- package/ios/ZCashLightClientKit/Resources/checkpoints/mainnet/1440000.json +7 -0
- package/ios/ZCashLightClientKit/Resources/checkpoints/mainnet/1450000.json +7 -0
- package/ios/ZCashLightClientKit/Resources/checkpoints/mainnet/1460000.json +7 -0
- package/ios/ZCashLightClientKit/Resources/checkpoints/mainnet/1470000.json +7 -0
- package/ios/ZCashLightClientKit/Resources/checkpoints/mainnet/1480000.json +7 -0
- package/ios/ZCashLightClientKit/Resources/checkpoints/mainnet/1490000.json +7 -0
- package/ios/ZCashLightClientKit/Resources/checkpoints/mainnet/1500000.json +7 -0
- package/ios/ZCashLightClientKit/Resources/checkpoints/mainnet/1510000.json +7 -0
- package/ios/ZCashLightClientKit/Resources/checkpoints/mainnet/1520000.json +7 -0
- package/ios/ZCashLightClientKit/Resources/checkpoints/mainnet/1530000.json +7 -0
- package/ios/ZCashLightClientKit/Resources/checkpoints/mainnet/1540000.json +7 -0
- package/ios/ZCashLightClientKit/Resources/checkpoints/mainnet/1550000.json +7 -0
- package/ios/ZCashLightClientKit/Resources/checkpoints/mainnet/1560000.json +7 -0
- package/ios/ZCashLightClientKit/Resources/checkpoints/mainnet/1570000.json +7 -0
- package/ios/ZCashLightClientKit/Resources/checkpoints/mainnet/1580000.json +7 -0
- package/ios/ZCashLightClientKit/Resources/checkpoints/mainnet/1590000.json +7 -0
- package/ios/ZCashLightClientKit/Resources/checkpoints/mainnet/1600000.json +7 -0
- package/ios/ZCashLightClientKit/Resources/checkpoints/mainnet/1610000.json +7 -0
- package/ios/ZCashLightClientKit/Resources/checkpoints/mainnet/1620000.json +7 -0
- package/ios/ZCashLightClientKit/Resources/checkpoints/mainnet/1630000.json +7 -0
- package/ios/ZCashLightClientKit/Resources/checkpoints/mainnet/1631000.json +7 -0
- package/ios/ZCashLightClientKit/Resources/checkpoints/mainnet/1640000.json +7 -0
- package/ios/ZCashLightClientKit/Resources/checkpoints/mainnet/1650000.json +7 -0
- package/ios/ZCashLightClientKit/Resources/checkpoints/mainnet/1660000.json +7 -0
- package/ios/ZCashLightClientKit/Resources/checkpoints/mainnet/1670000.json +7 -0
- package/ios/ZCashLightClientKit/Resources/checkpoints/mainnet/1680000.json +7 -0
- package/ios/ZCashLightClientKit/Resources/checkpoints/mainnet/1686871.json +7 -0
- package/ios/ZCashLightClientKit/Resources/checkpoints/mainnet/1687104.json +8 -0
- package/ios/ZCashLightClientKit/Resources/checkpoints/mainnet/1690000.json +8 -0
- package/ios/ZCashLightClientKit/Resources/checkpoints/mainnet/1700000.json +8 -0
- package/ios/ZCashLightClientKit/Resources/checkpoints/mainnet/1710000.json +8 -0
- package/ios/ZCashLightClientKit/Resources/checkpoints/mainnet/1720000.json +8 -0
- package/ios/ZCashLightClientKit/Resources/checkpoints/mainnet/1722500.json +8 -0
- package/ios/ZCashLightClientKit/Resources/checkpoints/mainnet/1725000.json +8 -0
- package/ios/ZCashLightClientKit/Resources/checkpoints/mainnet/1727500.json +8 -0
- package/ios/ZCashLightClientKit/Resources/checkpoints/mainnet/1730000.json +8 -0
- package/ios/ZCashLightClientKit/Resources/checkpoints/mainnet/1732500.json +8 -0
- package/ios/ZCashLightClientKit/Resources/checkpoints/mainnet/1735000.json +8 -0
- package/ios/ZCashLightClientKit/Resources/checkpoints/mainnet/1737500.json +8 -0
- package/ios/ZCashLightClientKit/Resources/checkpoints/mainnet/1740000.json +8 -0
- package/ios/ZCashLightClientKit/Resources/checkpoints/mainnet/1742500.json +8 -0
- package/ios/ZCashLightClientKit/Resources/checkpoints/mainnet/1745000.json +8 -0
- package/ios/ZCashLightClientKit/Resources/checkpoints/mainnet/1747500.json +8 -0
- package/ios/ZCashLightClientKit/Resources/checkpoints/mainnet/1750000.json +8 -0
- package/ios/ZCashLightClientKit/Resources/checkpoints/mainnet/1752500.json +8 -0
- package/ios/ZCashLightClientKit/Resources/checkpoints/mainnet/1755000.json +9 -0
- package/ios/ZCashLightClientKit/Resources/checkpoints/mainnet/1757500.json +8 -0
- package/ios/ZCashLightClientKit/Resources/checkpoints/mainnet/1760000.json +8 -0
- package/ios/ZCashLightClientKit/Resources/checkpoints/mainnet/1762500.json +8 -0
- package/ios/ZCashLightClientKit/Resources/checkpoints/mainnet/1765000.json +8 -0
- package/ios/ZCashLightClientKit/Resources/checkpoints/mainnet/1767500.json +8 -0
- package/ios/ZCashLightClientKit/Resources/checkpoints/mainnet/1770000.json +8 -0
- package/ios/ZCashLightClientKit/Resources/checkpoints/mainnet/1772500.json +8 -0
- package/ios/ZCashLightClientKit/Resources/checkpoints/mainnet/1775000.json +8 -0
- package/ios/ZCashLightClientKit/Resources/checkpoints/mainnet/1777500.json +8 -0
- package/ios/ZCashLightClientKit/Resources/checkpoints/mainnet/1780000.json +8 -0
- package/ios/ZCashLightClientKit/Resources/checkpoints/mainnet/1782500.json +8 -0
- package/ios/ZCashLightClientKit/Resources/checkpoints/mainnet/1785000.json +8 -0
- package/ios/ZCashLightClientKit/Resources/checkpoints/mainnet/1787500.json +8 -0
- package/ios/ZCashLightClientKit/Resources/checkpoints/mainnet/1790000.json +8 -0
- package/ios/ZCashLightClientKit/Resources/checkpoints/mainnet/1792500.json +8 -0
- package/ios/ZCashLightClientKit/Resources/checkpoints/mainnet/1795000.json +8 -0
- package/ios/ZCashLightClientKit/Resources/checkpoints/mainnet/1797500.json +8 -0
- package/ios/ZCashLightClientKit/Resources/checkpoints/mainnet/1800000.json +8 -0
- package/ios/ZCashLightClientKit/Resources/checkpoints/mainnet/1802500.json +8 -0
- package/ios/ZCashLightClientKit/Resources/checkpoints/mainnet/1805000.json +8 -0
- package/ios/ZCashLightClientKit/Resources/checkpoints/mainnet/1807500.json +8 -0
- package/ios/ZCashLightClientKit/Resources/checkpoints/mainnet/1810000.json +8 -0
- package/ios/ZCashLightClientKit/Resources/checkpoints/mainnet/1812500.json +8 -0
- package/ios/ZCashLightClientKit/Resources/checkpoints/mainnet/1815000.json +8 -0
- package/ios/ZCashLightClientKit/Resources/checkpoints/mainnet/1817500.json +8 -0
- package/ios/ZCashLightClientKit/Resources/checkpoints/mainnet/1820000.json +8 -0
- package/ios/ZCashLightClientKit/Resources/checkpoints/mainnet/1822500.json +8 -0
- package/ios/ZCashLightClientKit/Resources/checkpoints/mainnet/1825000.json +8 -0
- package/ios/ZCashLightClientKit/Resources/checkpoints/mainnet/1827500.json +8 -0
- package/ios/ZCashLightClientKit/Resources/checkpoints/mainnet/1830000.json +8 -0
- package/ios/ZCashLightClientKit/Resources/checkpoints/mainnet/1832500.json +8 -0
- package/ios/ZCashLightClientKit/Resources/checkpoints/mainnet/1835000.json +8 -0
- package/ios/ZCashLightClientKit/Resources/checkpoints/mainnet/1837500.json +8 -0
- package/ios/ZCashLightClientKit/Resources/checkpoints/mainnet/1840000.json +8 -0
- package/ios/ZCashLightClientKit/Resources/checkpoints/mainnet/1842500.json +8 -0
- package/ios/ZCashLightClientKit/Resources/checkpoints/mainnet/1845000.json +8 -0
- package/ios/ZCashLightClientKit/Resources/checkpoints/mainnet/1847500.json +8 -0
- package/ios/ZCashLightClientKit/Resources/checkpoints/mainnet/1850000.json +8 -0
- package/ios/ZCashLightClientKit/Resources/checkpoints/mainnet/1852500.json +8 -0
- package/ios/ZCashLightClientKit/Resources/checkpoints/mainnet/1855000.json +8 -0
- package/ios/ZCashLightClientKit/Resources/checkpoints/mainnet/1857500.json +8 -0
- package/ios/ZCashLightClientKit/Resources/checkpoints/mainnet/1860000.json +8 -0
- package/ios/ZCashLightClientKit/Resources/checkpoints/mainnet/1862500.json +8 -0
- package/ios/ZCashLightClientKit/Resources/checkpoints/mainnet/1865000.json +8 -0
- package/ios/ZCashLightClientKit/Resources/checkpoints/mainnet/1867500.json +8 -0
- package/ios/ZCashLightClientKit/Resources/checkpoints/mainnet/1870000.json +8 -0
- package/ios/ZCashLightClientKit/Resources/checkpoints/mainnet/1872500.json +8 -0
- package/ios/ZCashLightClientKit/Resources/checkpoints/mainnet/1875000.json +8 -0
- package/ios/ZCashLightClientKit/Resources/checkpoints/mainnet/1877500.json +8 -0
- package/ios/ZCashLightClientKit/Resources/checkpoints/mainnet/1880000.json +8 -0
- package/ios/ZCashLightClientKit/Resources/checkpoints/mainnet/1882500.json +8 -0
- package/ios/ZCashLightClientKit/Resources/checkpoints/mainnet/1885000.json +8 -0
- package/ios/ZCashLightClientKit/Resources/checkpoints/mainnet/1887500.json +8 -0
- package/ios/ZCashLightClientKit/Resources/checkpoints/mainnet/1890000.json +8 -0
- package/ios/ZCashLightClientKit/Resources/checkpoints/mainnet/1892500.json +8 -0
- package/ios/ZCashLightClientKit/Resources/checkpoints/mainnet/1895000.json +8 -0
- package/ios/ZCashLightClientKit/Resources/checkpoints/mainnet/1897500.json +8 -0
- package/ios/ZCashLightClientKit/Resources/checkpoints/mainnet/1900000.json +8 -0
- package/ios/ZCashLightClientKit/Resources/checkpoints/mainnet/1902500.json +8 -0
- package/ios/ZCashLightClientKit/Resources/checkpoints/mainnet/1905000.json +8 -0
- package/ios/ZCashLightClientKit/Resources/checkpoints/mainnet/1907500.json +8 -0
- package/ios/ZCashLightClientKit/Resources/checkpoints/mainnet/1910000.json +8 -0
- package/ios/ZCashLightClientKit/Resources/checkpoints/mainnet/1912500.json +8 -0
- package/ios/ZCashLightClientKit/Resources/checkpoints/mainnet/1915000.json +8 -0
- package/ios/ZCashLightClientKit/Resources/checkpoints/mainnet/1917500.json +8 -0
- package/ios/ZCashLightClientKit/Resources/checkpoints/mainnet/1920000.json +8 -0
- package/ios/ZCashLightClientKit/Resources/checkpoints/mainnet/1922500.json +8 -0
- package/ios/ZCashLightClientKit/Resources/checkpoints/mainnet/1925000.json +8 -0
- package/ios/ZCashLightClientKit/Resources/checkpoints/mainnet/1927500.json +8 -0
- package/ios/ZCashLightClientKit/Resources/checkpoints/mainnet/1930000.json +8 -0
- package/ios/ZCashLightClientKit/Resources/checkpoints/mainnet/1932500.json +8 -0
- package/ios/ZCashLightClientKit/Resources/checkpoints/mainnet/1935000.json +8 -0
- package/ios/ZCashLightClientKit/Resources/checkpoints/mainnet/1937500.json +8 -0
- package/ios/ZCashLightClientKit/Resources/checkpoints/mainnet/1940000.json +8 -0
- package/ios/ZCashLightClientKit/Resources/checkpoints/mainnet/1942500.json +8 -0
- package/ios/ZCashLightClientKit/Resources/checkpoints/mainnet/1945000.json +8 -0
- package/ios/ZCashLightClientKit/Resources/checkpoints/mainnet/1947500.json +8 -0
- package/ios/ZCashLightClientKit/Resources/checkpoints/mainnet/1950000.json +8 -0
- package/ios/ZCashLightClientKit/Resources/checkpoints/mainnet/1952500.json +8 -0
- package/ios/ZCashLightClientKit/Resources/checkpoints/mainnet/1955000.json +8 -0
- package/ios/ZCashLightClientKit/Resources/checkpoints/mainnet/1957500.json +8 -0
- package/ios/ZCashLightClientKit/Resources/checkpoints/mainnet/1960000.json +8 -0
- package/ios/ZCashLightClientKit/Resources/checkpoints/mainnet/1962500.json +8 -0
- package/ios/ZCashLightClientKit/Resources/checkpoints/mainnet/1965000.json +8 -0
- package/ios/ZCashLightClientKit/Resources/checkpoints/mainnet/1967500.json +8 -0
- package/ios/ZCashLightClientKit/Resources/checkpoints/mainnet/1970000.json +8 -0
- package/ios/ZCashLightClientKit/Resources/checkpoints/mainnet/1972500.json +8 -0
- package/ios/ZCashLightClientKit/Resources/checkpoints/mainnet/1975000.json +8 -0
- package/ios/ZCashLightClientKit/Resources/checkpoints/mainnet/1977500.json +8 -0
- package/ios/ZCashLightClientKit/Resources/checkpoints/mainnet/1980000.json +8 -0
- package/ios/ZCashLightClientKit/Resources/checkpoints/mainnet/1982500.json +8 -0
- package/ios/ZCashLightClientKit/Resources/checkpoints/mainnet/1985000.json +8 -0
- package/ios/ZCashLightClientKit/Resources/checkpoints/mainnet/1987500.json +8 -0
- package/ios/ZCashLightClientKit/Resources/checkpoints/mainnet/1990000.json +8 -0
- package/ios/ZCashLightClientKit/Resources/checkpoints/mainnet/1992500.json +8 -0
- package/ios/ZCashLightClientKit/Resources/checkpoints/mainnet/1995000.json +8 -0
- package/ios/ZCashLightClientKit/Resources/checkpoints/mainnet/1997500.json +8 -0
- package/ios/ZCashLightClientKit/Resources/checkpoints/mainnet/2000000.json +8 -0
- package/ios/ZCashLightClientKit/Resources/checkpoints/mainnet/2002500.json +8 -0
- package/ios/ZCashLightClientKit/Resources/checkpoints/mainnet/2005000.json +8 -0
- package/ios/ZCashLightClientKit/Resources/checkpoints/mainnet/2007500.json +8 -0
- package/ios/ZCashLightClientKit/Resources/checkpoints/mainnet/2010000.json +8 -0
- package/ios/ZCashLightClientKit/Resources/checkpoints/mainnet/2012500.json +8 -0
- package/ios/ZCashLightClientKit/Resources/checkpoints/mainnet/2015000.json +8 -0
- package/ios/ZCashLightClientKit/Resources/checkpoints/mainnet/2017500.json +8 -0
- package/ios/ZCashLightClientKit/Resources/checkpoints/mainnet/2020000.json +8 -0
- package/ios/ZCashLightClientKit/Resources/checkpoints/mainnet/2022500.json +8 -0
- package/ios/ZCashLightClientKit/Resources/checkpoints/mainnet/2025000.json +8 -0
- package/ios/ZCashLightClientKit/Resources/checkpoints/mainnet/2027500.json +8 -0
- package/ios/ZCashLightClientKit/Resources/checkpoints/mainnet/2030000.json +8 -0
- package/ios/ZCashLightClientKit/Resources/checkpoints/mainnet/2032500.json +8 -0
- package/ios/ZCashLightClientKit/Resources/checkpoints/mainnet/2035000.json +8 -0
- package/ios/ZCashLightClientKit/Resources/checkpoints/mainnet/2037500.json +8 -0
- package/ios/ZCashLightClientKit/Resources/checkpoints/mainnet/2040000.json +8 -0
- package/ios/ZCashLightClientKit/Resources/checkpoints/mainnet/2042500.json +8 -0
- package/ios/ZCashLightClientKit/Resources/checkpoints/mainnet/2045000.json +8 -0
- package/ios/ZCashLightClientKit/Resources/checkpoints/mainnet/2047500.json +8 -0
- package/ios/ZCashLightClientKit/Resources/checkpoints/mainnet/2050000.json +8 -0
- package/ios/ZCashLightClientKit/Resources/checkpoints/mainnet/2052500.json +8 -0
- package/ios/ZCashLightClientKit/Resources/checkpoints/mainnet/2055000.json +8 -0
- package/ios/ZCashLightClientKit/Resources/checkpoints/mainnet/2057500.json +8 -0
- package/ios/ZCashLightClientKit/Resources/checkpoints/mainnet/2060000.json +8 -0
- package/ios/ZCashLightClientKit/Resources/checkpoints/mainnet/2062500.json +8 -0
- package/ios/ZCashLightClientKit/Resources/checkpoints/mainnet/2065000.json +8 -0
- package/ios/ZCashLightClientKit/Resources/checkpoints/mainnet/2067500.json +8 -0
- package/ios/ZCashLightClientKit/Resources/checkpoints/mainnet/2070000.json +8 -0
- package/ios/ZCashLightClientKit/Resources/checkpoints/mainnet/2072500.json +8 -0
- package/ios/ZCashLightClientKit/Resources/checkpoints/mainnet/2075000.json +8 -0
- package/ios/ZCashLightClientKit/Resources/checkpoints/mainnet/2077500.json +8 -0
- package/ios/ZCashLightClientKit/Resources/checkpoints/mainnet/2080000.json +8 -0
- package/ios/ZCashLightClientKit/Resources/checkpoints/mainnet/2082500.json +8 -0
- package/ios/ZCashLightClientKit/Resources/checkpoints/mainnet/2085000.json +8 -0
- package/ios/ZCashLightClientKit/Resources/checkpoints/mainnet/2087500.json +8 -0
- package/ios/ZCashLightClientKit/Resources/checkpoints/mainnet/2090000.json +8 -0
- package/ios/ZCashLightClientKit/Resources/checkpoints/mainnet/2100000.json +8 -0
- package/ios/ZCashLightClientKit/Resources/checkpoints/mainnet/2110000.json +8 -0
- package/ios/ZCashLightClientKit/Resources/checkpoints/mainnet/2120000.json +8 -0
- package/ios/ZCashLightClientKit/Resources/checkpoints/mainnet/2130000.json +8 -0
- package/ios/ZCashLightClientKit/Resources/checkpoints/mainnet/2140000.json +8 -0
- package/ios/ZCashLightClientKit/Resources/checkpoints/mainnet/2150000.json +8 -0
- package/ios/ZCashLightClientKit/Resources/checkpoints/mainnet/2160000.json +8 -0
- package/ios/ZCashLightClientKit/Resources/checkpoints/mainnet/2170000.json +8 -0
- package/ios/ZCashLightClientKit/Resources/checkpoints/mainnet/2180000.json +8 -0
- package/ios/ZCashLightClientKit/Resources/checkpoints/mainnet/2190000.json +8 -0
- package/ios/ZCashLightClientKit/Resources/checkpoints/mainnet/2200000.json +8 -0
- package/ios/ZCashLightClientKit/Resources/checkpoints/mainnet/2210000.json +8 -0
- package/ios/ZCashLightClientKit/Resources/checkpoints/mainnet/419200.json +7 -0
- package/ios/ZCashLightClientKit/Resources/checkpoints/mainnet/500000.json +7 -0
- package/ios/ZCashLightClientKit/Resources/checkpoints/mainnet/510000.json +7 -0
- package/ios/ZCashLightClientKit/Resources/checkpoints/mainnet/520000.json +7 -0
- package/ios/ZCashLightClientKit/Resources/checkpoints/mainnet/530000.json +7 -0
- package/ios/ZCashLightClientKit/Resources/checkpoints/mainnet/540000.json +7 -0
- package/ios/ZCashLightClientKit/Resources/checkpoints/mainnet/550000.json +7 -0
- package/ios/ZCashLightClientKit/Resources/checkpoints/mainnet/560000.json +7 -0
- package/ios/ZCashLightClientKit/Resources/checkpoints/mainnet/570000.json +7 -0
- package/ios/ZCashLightClientKit/Resources/checkpoints/mainnet/580000.json +7 -0
- package/ios/ZCashLightClientKit/Resources/checkpoints/mainnet/590000.json +7 -0
- package/ios/ZCashLightClientKit/Resources/checkpoints/mainnet/600000.json +7 -0
- package/ios/ZCashLightClientKit/Resources/checkpoints/mainnet/610000.json +7 -0
- package/ios/ZCashLightClientKit/Resources/checkpoints/mainnet/620000.json +7 -0
- package/ios/ZCashLightClientKit/Resources/checkpoints/mainnet/630000.json +7 -0
- package/ios/ZCashLightClientKit/Resources/checkpoints/mainnet/640000.json +7 -0
- package/ios/ZCashLightClientKit/Resources/checkpoints/mainnet/650000.json +7 -0
- package/ios/ZCashLightClientKit/Resources/checkpoints/mainnet/660000.json +7 -0
- package/ios/ZCashLightClientKit/Resources/checkpoints/mainnet/663150.json +8 -0
- package/ios/ZCashLightClientKit/Resources/checkpoints/mainnet/670000.json +7 -0
- package/ios/ZCashLightClientKit/Resources/checkpoints/mainnet/680000.json +7 -0
- package/ios/ZCashLightClientKit/Resources/checkpoints/mainnet/690000.json +7 -0
- package/ios/ZCashLightClientKit/Resources/checkpoints/mainnet/700000.json +7 -0
- package/ios/ZCashLightClientKit/Resources/checkpoints/mainnet/710000.json +7 -0
- package/ios/ZCashLightClientKit/Resources/checkpoints/mainnet/720000.json +7 -0
- package/ios/ZCashLightClientKit/Resources/checkpoints/mainnet/730000.json +7 -0
- package/ios/ZCashLightClientKit/Resources/checkpoints/mainnet/740000.json +7 -0
- package/ios/ZCashLightClientKit/Resources/checkpoints/mainnet/750000.json +7 -0
- package/ios/ZCashLightClientKit/Resources/checkpoints/mainnet/760000.json +7 -0
- package/ios/ZCashLightClientKit/Resources/checkpoints/mainnet/770000.json +7 -0
- package/ios/ZCashLightClientKit/Resources/checkpoints/mainnet/780000.json +7 -0
- package/ios/ZCashLightClientKit/Resources/checkpoints/mainnet/790000.json +7 -0
- package/ios/ZCashLightClientKit/Resources/checkpoints/mainnet/800000.json +7 -0
- package/ios/ZCashLightClientKit/Resources/checkpoints/mainnet/810000.json +7 -0
- package/ios/ZCashLightClientKit/Resources/checkpoints/mainnet/820000.json +7 -0
- package/ios/ZCashLightClientKit/Resources/checkpoints/mainnet/830000.json +7 -0
- package/ios/ZCashLightClientKit/Resources/checkpoints/mainnet/840000.json +7 -0
- package/ios/ZCashLightClientKit/Resources/checkpoints/mainnet/850000.json +7 -0
- package/ios/ZCashLightClientKit/Resources/checkpoints/mainnet/860000.json +7 -0
- package/ios/ZCashLightClientKit/Resources/checkpoints/mainnet/870000.json +7 -0
- package/ios/ZCashLightClientKit/Resources/checkpoints/mainnet/880000.json +7 -0
- package/ios/ZCashLightClientKit/Resources/checkpoints/mainnet/890000.json +7 -0
- package/ios/ZCashLightClientKit/Resources/checkpoints/mainnet/900000.json +7 -0
- package/ios/ZCashLightClientKit/Resources/checkpoints/mainnet/910000.json +7 -0
- package/ios/ZCashLightClientKit/Resources/checkpoints/mainnet/920000.json +7 -0
- package/ios/ZCashLightClientKit/Resources/checkpoints/mainnet/930000.json +7 -0
- package/ios/ZCashLightClientKit/Resources/checkpoints/mainnet/940000.json +7 -0
- package/ios/ZCashLightClientKit/Resources/checkpoints/mainnet/950000.json +7 -0
- package/ios/ZCashLightClientKit/Resources/checkpoints/mainnet/960000.json +7 -0
- package/ios/ZCashLightClientKit/Resources/checkpoints/mainnet/970000.json +7 -0
- package/ios/ZCashLightClientKit/Resources/checkpoints/mainnet/980000.json +7 -0
- package/ios/ZCashLightClientKit/Resources/checkpoints/mainnet/990000.json +7 -0
- package/ios/ZCashLightClientKit/Resources/checkpoints/testnet/1000000.json +7 -0
- package/ios/ZCashLightClientKit/Resources/checkpoints/testnet/1010000.json +7 -0
- package/ios/ZCashLightClientKit/Resources/checkpoints/testnet/1020000.json +7 -0
- package/ios/ZCashLightClientKit/Resources/checkpoints/testnet/1030000.json +7 -0
- package/ios/ZCashLightClientKit/Resources/checkpoints/testnet/1040000.json +7 -0
- package/ios/ZCashLightClientKit/Resources/checkpoints/testnet/1050000.json +7 -0
- package/ios/ZCashLightClientKit/Resources/checkpoints/testnet/1060000.json +7 -0
- package/ios/ZCashLightClientKit/Resources/checkpoints/testnet/1070000.json +7 -0
- package/ios/ZCashLightClientKit/Resources/checkpoints/testnet/1080000.json +7 -0
- package/ios/ZCashLightClientKit/Resources/checkpoints/testnet/1090000.json +7 -0
- package/ios/ZCashLightClientKit/Resources/checkpoints/testnet/1100000.json +7 -0
- package/ios/ZCashLightClientKit/Resources/checkpoints/testnet/1110000.json +7 -0
- package/ios/ZCashLightClientKit/Resources/checkpoints/testnet/1120000.json +7 -0
- package/ios/ZCashLightClientKit/Resources/checkpoints/testnet/1130000.json +7 -0
- package/ios/ZCashLightClientKit/Resources/checkpoints/testnet/1140000.json +7 -0
- package/ios/ZCashLightClientKit/Resources/checkpoints/testnet/1150000.json +7 -0
- package/ios/ZCashLightClientKit/Resources/checkpoints/testnet/1160000.json +7 -0
- package/ios/ZCashLightClientKit/Resources/checkpoints/testnet/1170000.json +7 -0
- package/ios/ZCashLightClientKit/Resources/checkpoints/testnet/1180000.json +7 -0
- package/ios/ZCashLightClientKit/Resources/checkpoints/testnet/1190000.json +7 -0
- package/ios/ZCashLightClientKit/Resources/checkpoints/testnet/1200000.json +7 -0
- package/ios/ZCashLightClientKit/Resources/checkpoints/testnet/1210000.json +7 -0
- package/ios/ZCashLightClientKit/Resources/checkpoints/testnet/1220000.json +7 -0
- package/ios/ZCashLightClientKit/Resources/checkpoints/testnet/1230000.json +7 -0
- package/ios/ZCashLightClientKit/Resources/checkpoints/testnet/1240000.json +7 -0
- package/ios/ZCashLightClientKit/Resources/checkpoints/testnet/1250000.json +7 -0
- package/ios/ZCashLightClientKit/Resources/checkpoints/testnet/1260000.json +7 -0
- package/ios/ZCashLightClientKit/Resources/checkpoints/testnet/1270000.json +7 -0
- package/ios/ZCashLightClientKit/Resources/checkpoints/testnet/1280000.json +7 -0
- package/ios/ZCashLightClientKit/Resources/checkpoints/testnet/1290000.json +7 -0
- package/ios/ZCashLightClientKit/Resources/checkpoints/testnet/1300000.json +7 -0
- package/ios/ZCashLightClientKit/Resources/checkpoints/testnet/1310000.json +7 -0
- package/ios/ZCashLightClientKit/Resources/checkpoints/testnet/1320000.json +7 -0
- package/ios/ZCashLightClientKit/Resources/checkpoints/testnet/1330000.json +7 -0
- package/ios/ZCashLightClientKit/Resources/checkpoints/testnet/1340000.json +7 -0
- package/ios/ZCashLightClientKit/Resources/checkpoints/testnet/1350000.json +7 -0
- package/ios/ZCashLightClientKit/Resources/checkpoints/testnet/1360000.json +7 -0
- package/ios/ZCashLightClientKit/Resources/checkpoints/testnet/1370000.json +7 -0
- package/ios/ZCashLightClientKit/Resources/checkpoints/testnet/1380000.json +7 -0
- package/ios/ZCashLightClientKit/Resources/checkpoints/testnet/1390000.json +7 -0
- package/ios/ZCashLightClientKit/Resources/checkpoints/testnet/1400000.json +7 -0
- package/ios/ZCashLightClientKit/Resources/checkpoints/testnet/1410000.json +7 -0
- package/ios/ZCashLightClientKit/Resources/checkpoints/testnet/1420000.json +7 -0
- package/ios/ZCashLightClientKit/Resources/checkpoints/testnet/1430000.json +7 -0
- package/ios/ZCashLightClientKit/Resources/checkpoints/testnet/1440000.json +7 -0
- package/ios/ZCashLightClientKit/Resources/checkpoints/testnet/1450000.json +7 -0
- package/ios/ZCashLightClientKit/Resources/checkpoints/testnet/1460000.json +7 -0
- package/ios/ZCashLightClientKit/Resources/checkpoints/testnet/1470000.json +7 -0
- package/ios/ZCashLightClientKit/Resources/checkpoints/testnet/1480000.json +7 -0
- package/ios/ZCashLightClientKit/Resources/checkpoints/testnet/1490000.json +7 -0
- package/ios/ZCashLightClientKit/Resources/checkpoints/testnet/1500000.json +7 -0
- package/ios/ZCashLightClientKit/Resources/checkpoints/testnet/1510000.json +7 -0
- package/ios/ZCashLightClientKit/Resources/checkpoints/testnet/1520000.json +7 -0
- package/ios/ZCashLightClientKit/Resources/checkpoints/testnet/1530000.json +7 -0
- package/ios/ZCashLightClientKit/Resources/checkpoints/testnet/1540000.json +7 -0
- package/ios/ZCashLightClientKit/Resources/checkpoints/testnet/1550000.json +7 -0
- package/ios/ZCashLightClientKit/Resources/checkpoints/testnet/1560000.json +7 -0
- package/ios/ZCashLightClientKit/Resources/checkpoints/testnet/1570000.json +7 -0
- package/ios/ZCashLightClientKit/Resources/checkpoints/testnet/1580000.json +7 -0
- package/ios/ZCashLightClientKit/Resources/checkpoints/testnet/1590000.json +7 -0
- package/ios/ZCashLightClientKit/Resources/checkpoints/testnet/1600000.json +7 -0
- package/ios/ZCashLightClientKit/Resources/checkpoints/testnet/1610000.json +7 -0
- package/ios/ZCashLightClientKit/Resources/checkpoints/testnet/1620000.json +7 -0
- package/ios/ZCashLightClientKit/Resources/checkpoints/testnet/1630000.json +7 -0
- package/ios/ZCashLightClientKit/Resources/checkpoints/testnet/1640000.json +7 -0
- package/ios/ZCashLightClientKit/Resources/checkpoints/testnet/1650000.json +7 -0
- package/ios/ZCashLightClientKit/Resources/checkpoints/testnet/1660000.json +7 -0
- package/ios/ZCashLightClientKit/Resources/checkpoints/testnet/1670000.json +7 -0
- package/ios/ZCashLightClientKit/Resources/checkpoints/testnet/1680000.json +7 -0
- package/ios/ZCashLightClientKit/Resources/checkpoints/testnet/1690000.json +7 -0
- package/ios/ZCashLightClientKit/Resources/checkpoints/testnet/1700000.json +7 -0
- package/ios/ZCashLightClientKit/Resources/checkpoints/testnet/1710000.json +7 -0
- package/ios/ZCashLightClientKit/Resources/checkpoints/testnet/1720000.json +7 -0
- package/ios/ZCashLightClientKit/Resources/checkpoints/testnet/1730000.json +7 -0
- package/ios/ZCashLightClientKit/Resources/checkpoints/testnet/1740000.json +7 -0
- package/ios/ZCashLightClientKit/Resources/checkpoints/testnet/1750000.json +7 -0
- package/ios/ZCashLightClientKit/Resources/checkpoints/testnet/1760000.json +7 -0
- package/ios/ZCashLightClientKit/Resources/checkpoints/testnet/1770000.json +7 -0
- package/ios/ZCashLightClientKit/Resources/checkpoints/testnet/1780000.json +7 -0
- package/ios/ZCashLightClientKit/Resources/checkpoints/testnet/1790000.json +7 -0
- package/ios/ZCashLightClientKit/Resources/checkpoints/testnet/1800000.json +7 -0
- package/ios/ZCashLightClientKit/Resources/checkpoints/testnet/1810000.json +7 -0
- package/ios/ZCashLightClientKit/Resources/checkpoints/testnet/1820000.json +7 -0
- package/ios/ZCashLightClientKit/Resources/checkpoints/testnet/1830000.json +7 -0
- package/ios/ZCashLightClientKit/Resources/checkpoints/testnet/1840000.json +7 -0
- package/ios/ZCashLightClientKit/Resources/checkpoints/testnet/1842420.json +8 -0
- package/ios/ZCashLightClientKit/Resources/checkpoints/testnet/1850000.json +8 -0
- package/ios/ZCashLightClientKit/Resources/checkpoints/testnet/1860000.json +8 -0
- package/ios/ZCashLightClientKit/Resources/checkpoints/testnet/1870000.json +8 -0
- package/ios/ZCashLightClientKit/Resources/checkpoints/testnet/1880000.json +8 -0
- package/ios/ZCashLightClientKit/Resources/checkpoints/testnet/1890000.json +8 -0
- package/ios/ZCashLightClientKit/Resources/checkpoints/testnet/1900000.json +8 -0
- package/ios/ZCashLightClientKit/Resources/checkpoints/testnet/1910000.json +8 -0
- package/ios/ZCashLightClientKit/Resources/checkpoints/testnet/1920000.json +8 -0
- package/ios/ZCashLightClientKit/Resources/checkpoints/testnet/1930000.json +8 -0
- package/ios/ZCashLightClientKit/Resources/checkpoints/testnet/1940000.json +8 -0
- package/ios/ZCashLightClientKit/Resources/checkpoints/testnet/1950000.json +8 -0
- package/ios/ZCashLightClientKit/Resources/checkpoints/testnet/1960000.json +8 -0
- package/ios/ZCashLightClientKit/Resources/checkpoints/testnet/1970000.json +8 -0
- package/ios/ZCashLightClientKit/Resources/checkpoints/testnet/1980000.json +8 -0
- package/ios/ZCashLightClientKit/Resources/checkpoints/testnet/1990000.json +8 -0
- package/ios/ZCashLightClientKit/Resources/checkpoints/testnet/2000000.json +8 -0
- package/ios/ZCashLightClientKit/Resources/checkpoints/testnet/2010000.json +8 -0
- package/ios/ZCashLightClientKit/Resources/checkpoints/testnet/2020000.json +8 -0
- package/ios/ZCashLightClientKit/Resources/checkpoints/testnet/2030000.json +8 -0
- package/ios/ZCashLightClientKit/Resources/checkpoints/testnet/2040000.json +8 -0
- package/ios/ZCashLightClientKit/Resources/checkpoints/testnet/2050000.json +8 -0
- package/ios/ZCashLightClientKit/Resources/checkpoints/testnet/2060000.json +8 -0
- package/ios/ZCashLightClientKit/Resources/checkpoints/testnet/2070000.json +8 -0
- package/ios/ZCashLightClientKit/Resources/checkpoints/testnet/2080000.json +8 -0
- package/ios/ZCashLightClientKit/Resources/checkpoints/testnet/2090000.json +8 -0
- package/ios/ZCashLightClientKit/Resources/checkpoints/testnet/2100000.json +8 -0
- package/ios/ZCashLightClientKit/Resources/checkpoints/testnet/2110000.json +8 -0
- package/ios/ZCashLightClientKit/Resources/checkpoints/testnet/2120000.json +8 -0
- package/ios/ZCashLightClientKit/Resources/checkpoints/testnet/2130000.json +8 -0
- package/ios/ZCashLightClientKit/Resources/checkpoints/testnet/2140000.json +8 -0
- package/ios/ZCashLightClientKit/Resources/checkpoints/testnet/2150000.json +8 -0
- package/ios/ZCashLightClientKit/Resources/checkpoints/testnet/2160000.json +8 -0
- package/ios/ZCashLightClientKit/Resources/checkpoints/testnet/2170000.json +8 -0
- package/ios/ZCashLightClientKit/Resources/checkpoints/testnet/2180000.json +8 -0
- package/ios/ZCashLightClientKit/Resources/checkpoints/testnet/2190000.json +8 -0
- package/ios/ZCashLightClientKit/Resources/checkpoints/testnet/2200000.json +8 -0
- package/ios/ZCashLightClientKit/Resources/checkpoints/testnet/2210000.json +8 -0
- package/ios/ZCashLightClientKit/Resources/checkpoints/testnet/2220000.json +8 -0
- package/ios/ZCashLightClientKit/Resources/checkpoints/testnet/2230000.json +8 -0
- package/ios/ZCashLightClientKit/Resources/checkpoints/testnet/2240000.json +8 -0
- package/ios/ZCashLightClientKit/Resources/checkpoints/testnet/2250000.json +8 -0
- package/ios/ZCashLightClientKit/Resources/checkpoints/testnet/2260000.json +8 -0
- package/ios/ZCashLightClientKit/Resources/checkpoints/testnet/2270000.json +8 -0
- package/ios/ZCashLightClientKit/Resources/checkpoints/testnet/2280000.json +8 -0
- package/ios/ZCashLightClientKit/Resources/checkpoints/testnet/2290000.json +8 -0
- package/ios/ZCashLightClientKit/Resources/checkpoints/testnet/2300000.json +8 -0
- package/ios/ZCashLightClientKit/Resources/checkpoints/testnet/2310000.json +8 -0
- package/ios/ZCashLightClientKit/Resources/checkpoints/testnet/2320000.json +8 -0
- package/ios/ZCashLightClientKit/Resources/checkpoints/testnet/2330000.json +8 -0
- package/ios/ZCashLightClientKit/Resources/checkpoints/testnet/2340000.json +8 -0
- package/ios/ZCashLightClientKit/Resources/checkpoints/testnet/280000.json +7 -0
- package/ios/ZCashLightClientKit/Resources/checkpoints/testnet/290000.json +7 -0
- package/ios/ZCashLightClientKit/Resources/checkpoints/testnet/300000.json +7 -0
- package/ios/ZCashLightClientKit/Resources/checkpoints/testnet/310000.json +7 -0
- package/ios/ZCashLightClientKit/Resources/checkpoints/testnet/320000.json +7 -0
- package/ios/ZCashLightClientKit/Resources/checkpoints/testnet/330000.json +7 -0
- package/ios/ZCashLightClientKit/Resources/checkpoints/testnet/340000.json +7 -0
- package/ios/ZCashLightClientKit/Resources/checkpoints/testnet/350000.json +7 -0
- package/ios/ZCashLightClientKit/Resources/checkpoints/testnet/360000.json +7 -0
- package/ios/ZCashLightClientKit/Resources/checkpoints/testnet/370000.json +7 -0
- package/ios/ZCashLightClientKit/Resources/checkpoints/testnet/380000.json +7 -0
- package/ios/ZCashLightClientKit/Resources/checkpoints/testnet/390000.json +7 -0
- package/ios/ZCashLightClientKit/Resources/checkpoints/testnet/400000.json +7 -0
- package/ios/ZCashLightClientKit/Resources/checkpoints/testnet/410000.json +7 -0
- package/ios/ZCashLightClientKit/Resources/checkpoints/testnet/420000.json +7 -0
- package/ios/ZCashLightClientKit/Resources/checkpoints/testnet/430000.json +7 -0
- package/ios/ZCashLightClientKit/Resources/checkpoints/testnet/440000.json +7 -0
- package/ios/ZCashLightClientKit/Resources/checkpoints/testnet/450000.json +7 -0
- package/ios/ZCashLightClientKit/Resources/checkpoints/testnet/460000.json +7 -0
- package/ios/ZCashLightClientKit/Resources/checkpoints/testnet/470000.json +7 -0
- package/ios/ZCashLightClientKit/Resources/checkpoints/testnet/480000.json +7 -0
- package/ios/ZCashLightClientKit/Resources/checkpoints/testnet/490000.json +7 -0
- package/ios/ZCashLightClientKit/Resources/checkpoints/testnet/500000.json +7 -0
- package/ios/ZCashLightClientKit/Resources/checkpoints/testnet/510000.json +7 -0
- package/ios/ZCashLightClientKit/Resources/checkpoints/testnet/520000.json +7 -0
- package/ios/ZCashLightClientKit/Resources/checkpoints/testnet/530000.json +7 -0
- package/ios/ZCashLightClientKit/Resources/checkpoints/testnet/540000.json +7 -0
- package/ios/ZCashLightClientKit/Resources/checkpoints/testnet/550000.json +7 -0
- package/ios/ZCashLightClientKit/Resources/checkpoints/testnet/560000.json +7 -0
- package/ios/ZCashLightClientKit/Resources/checkpoints/testnet/570000.json +7 -0
- package/ios/ZCashLightClientKit/Resources/checkpoints/testnet/580000.json +7 -0
- package/ios/ZCashLightClientKit/Resources/checkpoints/testnet/590000.json +7 -0
- package/ios/ZCashLightClientKit/Resources/checkpoints/testnet/600000.json +7 -0
- package/ios/ZCashLightClientKit/Resources/checkpoints/testnet/610000.json +7 -0
- package/ios/ZCashLightClientKit/Resources/checkpoints/testnet/620000.json +7 -0
- package/ios/ZCashLightClientKit/Resources/checkpoints/testnet/630000.json +7 -0
- package/ios/ZCashLightClientKit/Resources/checkpoints/testnet/640000.json +7 -0
- package/ios/ZCashLightClientKit/Resources/checkpoints/testnet/650000.json +7 -0
- package/ios/ZCashLightClientKit/Resources/checkpoints/testnet/660000.json +7 -0
- package/ios/ZCashLightClientKit/Resources/checkpoints/testnet/670000.json +7 -0
- package/ios/ZCashLightClientKit/Resources/checkpoints/testnet/680000.json +7 -0
- package/ios/ZCashLightClientKit/Resources/checkpoints/testnet/690000.json +7 -0
- package/ios/ZCashLightClientKit/Resources/checkpoints/testnet/700000.json +7 -0
- package/ios/ZCashLightClientKit/Resources/checkpoints/testnet/710000.json +7 -0
- package/ios/ZCashLightClientKit/Resources/checkpoints/testnet/720000.json +7 -0
- package/ios/ZCashLightClientKit/Resources/checkpoints/testnet/730000.json +7 -0
- package/ios/ZCashLightClientKit/Resources/checkpoints/testnet/740000.json +7 -0
- package/ios/ZCashLightClientKit/Resources/checkpoints/testnet/750000.json +7 -0
- package/ios/ZCashLightClientKit/Resources/checkpoints/testnet/760000.json +7 -0
- package/ios/ZCashLightClientKit/Resources/checkpoints/testnet/770000.json +7 -0
- package/ios/ZCashLightClientKit/Resources/checkpoints/testnet/780000.json +7 -0
- package/ios/ZCashLightClientKit/Resources/checkpoints/testnet/790000.json +7 -0
- package/ios/ZCashLightClientKit/Resources/checkpoints/testnet/800000.json +7 -0
- package/ios/ZCashLightClientKit/Resources/checkpoints/testnet/810000.json +7 -0
- package/ios/ZCashLightClientKit/Resources/checkpoints/testnet/820000.json +7 -0
- package/ios/ZCashLightClientKit/Resources/checkpoints/testnet/830000.json +7 -0
- package/ios/ZCashLightClientKit/Resources/checkpoints/testnet/840000.json +7 -0
- package/ios/ZCashLightClientKit/Resources/checkpoints/testnet/850000.json +7 -0
- package/ios/ZCashLightClientKit/Resources/checkpoints/testnet/860000.json +7 -0
- package/ios/ZCashLightClientKit/Resources/checkpoints/testnet/870000.json +7 -0
- package/ios/ZCashLightClientKit/Resources/checkpoints/testnet/880000.json +7 -0
- package/ios/ZCashLightClientKit/Resources/checkpoints/testnet/890000.json +7 -0
- package/ios/ZCashLightClientKit/Resources/checkpoints/testnet/900000.json +7 -0
- package/ios/ZCashLightClientKit/Resources/checkpoints/testnet/910000.json +7 -0
- package/ios/ZCashLightClientKit/Resources/checkpoints/testnet/920000.json +7 -0
- package/ios/ZCashLightClientKit/Resources/checkpoints/testnet/930000.json +7 -0
- package/ios/ZCashLightClientKit/Resources/checkpoints/testnet/940000.json +7 -0
- package/ios/ZCashLightClientKit/Resources/checkpoints/testnet/950000.json +7 -0
- package/ios/ZCashLightClientKit/Resources/checkpoints/testnet/960000.json +7 -0
- package/ios/ZCashLightClientKit/Resources/checkpoints/testnet/970000.json +7 -0
- package/ios/ZCashLightClientKit/Resources/checkpoints/testnet/980000.json +7 -0
- package/ios/ZCashLightClientKit/Resources/checkpoints/testnet/990000.json +7 -0
- package/ios/ZCashLightClientKit/Rust/ZcashKeyDerivationBackend.swift +218 -0
- package/ios/ZCashLightClientKit/Rust/ZcashKeyDerivationBackendWelding.swift +88 -0
- package/ios/ZCashLightClientKit/Rust/ZcashRustBackend.swift +645 -0
- package/ios/ZCashLightClientKit/Rust/ZcashRustBackendWelding.swift +256 -0
- package/ios/ZCashLightClientKit/Rust/zcashlc.h +1051 -0
- package/ios/ZCashLightClientKit/Synchronizer/ClosureSDKSynchronizer.swift +180 -0
- package/ios/ZCashLightClientKit/Synchronizer/CombineSDKSynchronizer.swift +175 -0
- package/ios/ZCashLightClientKit/Synchronizer/Dependencies.swift +207 -0
- package/ios/ZCashLightClientKit/Synchronizer/SDKSynchronizer.swift +663 -0
- package/ios/ZCashLightClientKit/Synchronizer.swift +504 -0
- package/ios/ZCashLightClientKit/Tool/DerivationTool.swift +207 -0
- package/ios/ZCashLightClientKit/Transaction/TransactionEncoder.swift +66 -0
- package/ios/ZCashLightClientKit/Transaction/WalletTransactionEncoder.swift +165 -0
- package/ios/ZCashLightClientKit/Utils/AsyncToClosureGateway.swift +46 -0
- package/ios/ZCashLightClientKit/Utils/AsyncToCombineGateway.swift +59 -0
- package/ios/ZCashLightClientKit/Utils/Clamped.swift +32 -0
- package/ios/ZCashLightClientKit/Utils/DIContainer.swift +86 -0
- package/ios/ZCashLightClientKit/Utils/GenericActor.swift +18 -0
- package/ios/ZCashLightClientKit/Utils/LoggingProxy.swift +48 -0
- package/ios/ZCashLightClientKit/Utils/OSLogger.swift +109 -0
- package/ios/ZCashLightClientKit/Utils/SaplingParameterDownloader.swift +159 -0
- package/ios/ZCashLightClientKit/Utils/SpecificCombineTypes.swift +16 -0
- package/ios/ZCashLightClientKit/Utils/SyncSessionIDGenerator.swift +32 -0
- package/ios/ZCashLightClientKit/Utils/Task+sleep.swift +14 -0
- package/ios/ZCashLightClientKit/Utils/UsedAliasesChecker.swift +41 -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/rnzcash.rn.js +37 -80
- package/lib/rnzcash.rn.js.map +1 -1
- package/lib/scripts/copyCheckpoints.d.ts +5 -0
- package/lib/scripts/updateSources.d.ts +1 -0
- package/lib/src/react-native.d.ts +5 -10
- package/lib/src/types.d.ts +3 -4
- package/package.json +23 -37
- package/react-native-zcash.podspec +19 -8
- package/src/react-native.ts +15 -41
- package/src/types.ts +3 -4
- 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,114 @@
|
|
|
1
|
+
//
|
|
2
|
+
// UTXOFetcher.swift
|
|
3
|
+
// ZcashLightClientKit
|
|
4
|
+
//
|
|
5
|
+
// Created by Francisco Gindre on 6/2/21.
|
|
6
|
+
//
|
|
7
|
+
|
|
8
|
+
import Foundation
|
|
9
|
+
|
|
10
|
+
enum UTXOFetcherError: Error {
|
|
11
|
+
case clearingFailed(_ error: Error?)
|
|
12
|
+
case fetchFailed(error: Error)
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
struct UTXOFetcherConfig {
|
|
16
|
+
let walletBirthdayProvider: () async -> BlockHeight
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
protocol UTXOFetcher {
|
|
20
|
+
func fetch(
|
|
21
|
+
at range: CompactBlockRange,
|
|
22
|
+
didFetch: (Float) async -> Void
|
|
23
|
+
) async throws -> (inserted: [UnspentTransactionOutputEntity], skipped: [UnspentTransactionOutputEntity])
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
struct UTXOFetcherImpl {
|
|
27
|
+
let accountRepository: AccountRepository
|
|
28
|
+
let blockDownloaderService: BlockDownloaderService
|
|
29
|
+
let config: UTXOFetcherConfig
|
|
30
|
+
let internalSyncProgress: InternalSyncProgress
|
|
31
|
+
let rustBackend: ZcashRustBackendWelding
|
|
32
|
+
let metrics: SDKMetrics
|
|
33
|
+
let logger: Logger
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
extension UTXOFetcherImpl: UTXOFetcher {
|
|
37
|
+
func fetch(
|
|
38
|
+
at range: CompactBlockRange,
|
|
39
|
+
didFetch: (Float) async -> Void
|
|
40
|
+
) async throws -> (inserted: [UnspentTransactionOutputEntity], skipped: [UnspentTransactionOutputEntity]) {
|
|
41
|
+
try Task.checkCancellation()
|
|
42
|
+
|
|
43
|
+
let accounts = try accountRepository.getAll()
|
|
44
|
+
.map { $0.account }
|
|
45
|
+
|
|
46
|
+
var tAddresses: [TransparentAddress] = []
|
|
47
|
+
for account in accounts {
|
|
48
|
+
tAddresses += try await rustBackend.listTransparentReceivers(account: Int32(account))
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
var utxos: [UnspentTransactionOutputEntity] = []
|
|
52
|
+
let stream: AsyncThrowingStream<UnspentTransactionOutputEntity, Error> = blockDownloaderService.fetchUnspentTransactionOutputs(
|
|
53
|
+
tAddresses: tAddresses.map { $0.stringEncoded },
|
|
54
|
+
startHeight: await config.walletBirthdayProvider()
|
|
55
|
+
)
|
|
56
|
+
|
|
57
|
+
do {
|
|
58
|
+
for try await transaction in stream {
|
|
59
|
+
utxos.append(transaction)
|
|
60
|
+
}
|
|
61
|
+
} catch {
|
|
62
|
+
throw ZcashError.unspentTransactionFetcherStream(error)
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
var refreshed: [UnspentTransactionOutputEntity] = []
|
|
66
|
+
var skipped: [UnspentTransactionOutputEntity] = []
|
|
67
|
+
|
|
68
|
+
let startTime = Date()
|
|
69
|
+
let all = Float(utxos.count)
|
|
70
|
+
var counter = Float(0)
|
|
71
|
+
for utxo in utxos {
|
|
72
|
+
do {
|
|
73
|
+
try await rustBackend.putUnspentTransparentOutput(
|
|
74
|
+
txid: utxo.txid.bytes,
|
|
75
|
+
index: utxo.index,
|
|
76
|
+
script: utxo.script.bytes,
|
|
77
|
+
value: Int64(utxo.valueZat),
|
|
78
|
+
height: utxo.height
|
|
79
|
+
)
|
|
80
|
+
|
|
81
|
+
refreshed.append(utxo)
|
|
82
|
+
|
|
83
|
+
counter += 1
|
|
84
|
+
await didFetch(counter / all)
|
|
85
|
+
await internalSyncProgress.set(utxo.height, .latestUTXOFetchedHeight)
|
|
86
|
+
} catch {
|
|
87
|
+
logger.error("failed to put utxo - error: \(error)")
|
|
88
|
+
skipped.append(utxo)
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
metrics.pushProgressReport(
|
|
93
|
+
progress: BlockProgress(
|
|
94
|
+
startHeight: range.lowerBound,
|
|
95
|
+
targetHeight: range.upperBound,
|
|
96
|
+
progressHeight: range.upperBound
|
|
97
|
+
),
|
|
98
|
+
start: startTime,
|
|
99
|
+
end: Date(),
|
|
100
|
+
batchSize: range.count,
|
|
101
|
+
operation: .fetchUTXOs
|
|
102
|
+
)
|
|
103
|
+
|
|
104
|
+
let result = (inserted: refreshed, skipped: skipped)
|
|
105
|
+
|
|
106
|
+
await internalSyncProgress.set(range.upperBound, .latestUTXOFetchedHeight)
|
|
107
|
+
|
|
108
|
+
if Task.isCancelled {
|
|
109
|
+
logger.debug("Warning: fetchUnspentTxOutputs on range \(range) cancelled")
|
|
110
|
+
}
|
|
111
|
+
|
|
112
|
+
return result
|
|
113
|
+
}
|
|
114
|
+
}
|
|
@@ -0,0 +1,419 @@
|
|
|
1
|
+
//
|
|
2
|
+
// CompactBlockFsStorage.swift
|
|
3
|
+
//
|
|
4
|
+
//
|
|
5
|
+
// Created by Francisco Gindre on 12/15/22.
|
|
6
|
+
//
|
|
7
|
+
|
|
8
|
+
import Foundation
|
|
9
|
+
|
|
10
|
+
class FSCompactBlockRepository {
|
|
11
|
+
let fsBlockDbRoot: URL
|
|
12
|
+
let blockDescriptor: ZcashCompactBlockDescriptor
|
|
13
|
+
let contentProvider: SortedDirectoryListing
|
|
14
|
+
let fileWriter: FSBlockFileWriter
|
|
15
|
+
let metadataStore: FSMetadataStore
|
|
16
|
+
let logger: Logger
|
|
17
|
+
|
|
18
|
+
private let fileManager = FileManager()
|
|
19
|
+
private let storageBatchSize = 10
|
|
20
|
+
|
|
21
|
+
var blocksDirectory: URL {
|
|
22
|
+
fsBlockDbRoot.appendingPathComponent("blocks", isDirectory: true)
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
/// Initializes an instance of the Filesystem based compact block repository
|
|
26
|
+
/// - Parameter fsBlockDbRoot: The `URL` pointing to where the blocks should be writen
|
|
27
|
+
/// write access must be **guaranteed**.
|
|
28
|
+
/// - Parameter blockDescriptor: A `ZcashCompactBlockDescriptor` that is used to turn a
|
|
29
|
+
/// `ZcashCompactBlock` into the filename that will hold it on cache
|
|
30
|
+
/// - parameter contentProvider: `SortedDirectoryListing` implementation. This injects the
|
|
31
|
+
/// behaviour of traversing a Directory in an ordered fashion which is not guaranteed by `Foundation`'s `FileManager`
|
|
32
|
+
init(
|
|
33
|
+
fsBlockDbRoot: URL,
|
|
34
|
+
metadataStore: FSMetadataStore,
|
|
35
|
+
blockDescriptor: ZcashCompactBlockDescriptor,
|
|
36
|
+
contentProvider: SortedDirectoryListing,
|
|
37
|
+
fileWriter: FSBlockFileWriter = .atomic,
|
|
38
|
+
logger: Logger
|
|
39
|
+
) {
|
|
40
|
+
self.fsBlockDbRoot = fsBlockDbRoot
|
|
41
|
+
self.metadataStore = metadataStore
|
|
42
|
+
self.blockDescriptor = blockDescriptor
|
|
43
|
+
self.contentProvider = contentProvider
|
|
44
|
+
self.fileWriter = fileWriter
|
|
45
|
+
self.logger = logger
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
extension FSCompactBlockRepository: CompactBlockRepository {
|
|
50
|
+
func create() async throws {
|
|
51
|
+
if !fileManager.fileExists(atPath: blocksDirectory.path) {
|
|
52
|
+
do {
|
|
53
|
+
try fileManager.createDirectory(at: blocksDirectory, withIntermediateDirectories: true)
|
|
54
|
+
} catch {
|
|
55
|
+
throw ZcashError.blockRepositoryCreateBlocksCacheDirectory(blocksDirectory, error)
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
do {
|
|
60
|
+
try await self.metadataStore.initFsBlockDbRoot()
|
|
61
|
+
} catch {
|
|
62
|
+
logger.error("Blocks metadata store init failed with error: \(error)")
|
|
63
|
+
throw error
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
func latestHeight() async -> BlockHeight {
|
|
68
|
+
await metadataStore.latestHeight()
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
func write(blocks: [ZcashCompactBlock]) async throws {
|
|
72
|
+
do {
|
|
73
|
+
var savedBlocks: [ZcashCompactBlock] = []
|
|
74
|
+
|
|
75
|
+
for block in blocks {
|
|
76
|
+
// check if file exists
|
|
77
|
+
let blockURL = self.urlForBlock(block)
|
|
78
|
+
|
|
79
|
+
if self.blockExistsInCache(block) {
|
|
80
|
+
// remove if needed
|
|
81
|
+
do {
|
|
82
|
+
try self.fileManager.removeItem(at: blockURL)
|
|
83
|
+
} catch {
|
|
84
|
+
throw ZcashError.blockRepositoryRemoveExistingBlock(blockURL, error)
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
// store atomically
|
|
89
|
+
do {
|
|
90
|
+
try self.fileWriter.writeToURL(block.data, blockURL)
|
|
91
|
+
} catch {
|
|
92
|
+
logger.error("Failed to write block: \(block.height) to path: \(blockURL.path) with error: \(error)")
|
|
93
|
+
throw ZcashError.blockRepositoryWriteBlock(block, error)
|
|
94
|
+
}
|
|
95
|
+
|
|
96
|
+
savedBlocks.append(block)
|
|
97
|
+
|
|
98
|
+
if (savedBlocks.count % storageBatchSize) == 0 {
|
|
99
|
+
try await self.metadataStore.saveBlocksMeta(savedBlocks)
|
|
100
|
+
savedBlocks.removeAll(keepingCapacity: true)
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
// if there are any remaining blocks on the cache store them
|
|
105
|
+
try await self.metadataStore.saveBlocksMeta(savedBlocks)
|
|
106
|
+
} catch {
|
|
107
|
+
logger.error("failed to Block save to cache error: \(error)")
|
|
108
|
+
throw error
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
|
|
112
|
+
func rewind(to height: BlockHeight) async throws {
|
|
113
|
+
try await metadataStore.rewindToHeight(height)
|
|
114
|
+
// Reverse the cached contents to browse from higher to lower heights
|
|
115
|
+
let sortedCachedContents = try contentProvider.listContents(of: blocksDirectory)
|
|
116
|
+
|
|
117
|
+
// it that bears no elements then there's nothing to do.
|
|
118
|
+
guard let deleteList = try Self.filterBlockFiles(
|
|
119
|
+
from: sortedCachedContents,
|
|
120
|
+
toRewind: height,
|
|
121
|
+
with: self.blockDescriptor
|
|
122
|
+
),
|
|
123
|
+
!deleteList.isEmpty
|
|
124
|
+
else { return }
|
|
125
|
+
|
|
126
|
+
for item in deleteList {
|
|
127
|
+
do {
|
|
128
|
+
try self.fileManager.removeItem(at: item)
|
|
129
|
+
} catch {
|
|
130
|
+
throw ZcashError.blockRepositoryRemoveBlockAfterRewind(item, error)
|
|
131
|
+
}
|
|
132
|
+
}
|
|
133
|
+
}
|
|
134
|
+
|
|
135
|
+
func clear(upTo height: BlockHeight) async throws {
|
|
136
|
+
let files = try filesWithHeight(upTo: height)
|
|
137
|
+
logger.debug("Clearing up to height \(height). Clearing \(files.count) blocks from cache.")
|
|
138
|
+
for url in files {
|
|
139
|
+
do {
|
|
140
|
+
try self.fileManager.removeItem(at: url)
|
|
141
|
+
} catch {
|
|
142
|
+
throw ZcashError.blockRepositoryRemoveBlockClearingCache(url, error)
|
|
143
|
+
}
|
|
144
|
+
}
|
|
145
|
+
}
|
|
146
|
+
|
|
147
|
+
func clear() async throws {
|
|
148
|
+
if self.fileManager.fileExists(atPath: self.fsBlockDbRoot.path) {
|
|
149
|
+
do {
|
|
150
|
+
try self.fileManager.removeItem(at: self.fsBlockDbRoot)
|
|
151
|
+
} catch {
|
|
152
|
+
throw ZcashError.blockRepositoryRemoveBlocksCacheDirectory(fsBlockDbRoot, error)
|
|
153
|
+
}
|
|
154
|
+
}
|
|
155
|
+
try await create()
|
|
156
|
+
}
|
|
157
|
+
}
|
|
158
|
+
|
|
159
|
+
extension FSCompactBlockRepository {
|
|
160
|
+
static let filenameComparison: (String, String) -> Int? = { lhs, rhs in
|
|
161
|
+
guard
|
|
162
|
+
let leftHeightStr = lhs.split(separator: "-").first,
|
|
163
|
+
let leftHeight = BlockHeight(leftHeightStr),
|
|
164
|
+
let rightHeightStr = rhs.split(separator: "-").first,
|
|
165
|
+
let rightHeight = BlockHeight(rightHeightStr)
|
|
166
|
+
else { return nil }
|
|
167
|
+
|
|
168
|
+
return leftHeight - rightHeight
|
|
169
|
+
}
|
|
170
|
+
|
|
171
|
+
static let filenameDescription: (ZcashCompactBlock) -> String = { block in
|
|
172
|
+
[
|
|
173
|
+
"\(block.height)",
|
|
174
|
+
block.meta.hash.toHexStringTxId(),
|
|
175
|
+
"compactblock"
|
|
176
|
+
]
|
|
177
|
+
.joined(separator: "-")
|
|
178
|
+
}
|
|
179
|
+
|
|
180
|
+
static let filenameToHeight: (String) -> BlockHeight? = { block in
|
|
181
|
+
block.split(separator: "-")
|
|
182
|
+
.first
|
|
183
|
+
.flatMap { BlockHeight(String($0)) }
|
|
184
|
+
}
|
|
185
|
+
}
|
|
186
|
+
|
|
187
|
+
extension FSCompactBlockRepository {
|
|
188
|
+
/// Filters block files from a sorted list of filenames from the FsCache directory
|
|
189
|
+
/// with the goal of rewinding up to height `toHeight` and parsing the filenames
|
|
190
|
+
/// with the given `blockDescriptor`
|
|
191
|
+
/// - note: it is assumed that the `sortedList` is ascending.
|
|
192
|
+
/// - Parameter sortedList: ascending list of block filenames
|
|
193
|
+
/// - Parameter toHeight:
|
|
194
|
+
static func filterBlockFiles(
|
|
195
|
+
from sortedList: [URL],
|
|
196
|
+
toRewind toHeight: BlockHeight,
|
|
197
|
+
with blockDescriptor: ZcashCompactBlockDescriptor
|
|
198
|
+
) throws -> [URL]? {
|
|
199
|
+
// Reverse the cached contents to browse from higher to lower heights
|
|
200
|
+
let sortedCachedContents = sortedList.reversed()
|
|
201
|
+
|
|
202
|
+
// pick the blocks that are higher than the rewind height
|
|
203
|
+
// then return their URLs
|
|
204
|
+
let deleteList = try sortedCachedContents.filter({ url in
|
|
205
|
+
guard let filename = try url.resourceValues(forKeys: [.nameKey]).name else {
|
|
206
|
+
throw ZcashError.blockRepositoryGetFilename(url)
|
|
207
|
+
}
|
|
208
|
+
|
|
209
|
+
return try filename.filterGreaterThan(toHeight, with: blockDescriptor)
|
|
210
|
+
})
|
|
211
|
+
|
|
212
|
+
guard !deleteList.isEmpty else { return nil }
|
|
213
|
+
|
|
214
|
+
return deleteList
|
|
215
|
+
}
|
|
216
|
+
|
|
217
|
+
func urlForBlock(_ block: ZcashCompactBlock) -> URL {
|
|
218
|
+
self.blocksDirectory.appendingPathComponent(
|
|
219
|
+
self.blockDescriptor.describe(block)
|
|
220
|
+
)
|
|
221
|
+
}
|
|
222
|
+
|
|
223
|
+
func blockExistsInCache(_ block: ZcashCompactBlock) -> Bool {
|
|
224
|
+
self.fileManager.fileExists(
|
|
225
|
+
atPath: urlForBlock(block).path
|
|
226
|
+
)
|
|
227
|
+
}
|
|
228
|
+
|
|
229
|
+
func filesWithHeight(upTo height: BlockHeight) throws -> [URL] {
|
|
230
|
+
let sortedCachedContents = try contentProvider.listContents(of: blocksDirectory)
|
|
231
|
+
|
|
232
|
+
return try sortedCachedContents.filter { url in
|
|
233
|
+
guard let filename = try url.resourceValues(forKeys: [.nameKey]).name else { throw ZcashError.blockRepositoryGetFilename(url) }
|
|
234
|
+
return try filename.filterLowerThanOrEqual(height, with: blockDescriptor)
|
|
235
|
+
}
|
|
236
|
+
}
|
|
237
|
+
}
|
|
238
|
+
// MARK: Associated and Helper types
|
|
239
|
+
|
|
240
|
+
struct FSBlockFileWriter {
|
|
241
|
+
let writeToURL: (Data, URL) throws -> Void
|
|
242
|
+
}
|
|
243
|
+
|
|
244
|
+
extension FSBlockFileWriter {
|
|
245
|
+
static let atomic = FSBlockFileWriter(writeToURL: { data, url in
|
|
246
|
+
try data.write(to: url, options: .atomic)
|
|
247
|
+
})
|
|
248
|
+
}
|
|
249
|
+
|
|
250
|
+
struct FSMetadataStore {
|
|
251
|
+
let saveBlocksMeta: ([ZcashCompactBlock]) async throws -> Void
|
|
252
|
+
let rewindToHeight: (BlockHeight) async throws -> Void
|
|
253
|
+
let initFsBlockDbRoot: () async throws -> Void
|
|
254
|
+
let latestHeight: () async -> BlockHeight
|
|
255
|
+
}
|
|
256
|
+
|
|
257
|
+
extension FSMetadataStore {
|
|
258
|
+
static func live(fsBlockDbRoot: URL, rustBackend: ZcashRustBackendWelding, logger: Logger) -> FSMetadataStore {
|
|
259
|
+
FSMetadataStore { blocks in
|
|
260
|
+
try await FSMetadataStore.saveBlocksMeta(
|
|
261
|
+
blocks,
|
|
262
|
+
fsBlockDbRoot: fsBlockDbRoot,
|
|
263
|
+
rustBackend: rustBackend,
|
|
264
|
+
logger: logger
|
|
265
|
+
)
|
|
266
|
+
} rewindToHeight: { height in
|
|
267
|
+
try await rustBackend.rewindCacheToHeight(height: Int32(height))
|
|
268
|
+
} initFsBlockDbRoot: {
|
|
269
|
+
try await rustBackend.initBlockMetadataDb()
|
|
270
|
+
} latestHeight: {
|
|
271
|
+
await rustBackend.latestCachedBlockHeight()
|
|
272
|
+
}
|
|
273
|
+
}
|
|
274
|
+
}
|
|
275
|
+
|
|
276
|
+
extension FSMetadataStore {
|
|
277
|
+
/// saves blocks to the FsBlockDb metadata database.
|
|
278
|
+
/// - Parameter blocks: Array of `ZcashCompactBlock` to save
|
|
279
|
+
/// - Throws: `CompactBlockRepositoryError.failedToWriteMetadata` if the
|
|
280
|
+
/// operation fails. the underlying error is logged through `LoggerProxy`
|
|
281
|
+
/// - Note: This shouldn't be called in parallel by many threads or workers. Won't do anything if `blocks` is empty
|
|
282
|
+
static func saveBlocksMeta(
|
|
283
|
+
_ blocks: [ZcashCompactBlock],
|
|
284
|
+
fsBlockDbRoot: URL,
|
|
285
|
+
rustBackend: ZcashRustBackendWelding,
|
|
286
|
+
logger: Logger
|
|
287
|
+
) async throws {
|
|
288
|
+
guard !blocks.isEmpty else { return }
|
|
289
|
+
|
|
290
|
+
do {
|
|
291
|
+
try await rustBackend.writeBlocksMetadata(blocks: blocks)
|
|
292
|
+
} catch {
|
|
293
|
+
logger.error("Failed to write metadata with error: \(error)")
|
|
294
|
+
throw error
|
|
295
|
+
}
|
|
296
|
+
}
|
|
297
|
+
}
|
|
298
|
+
|
|
299
|
+
struct ZcashCompactBlockDescriptor {
|
|
300
|
+
let height: (String) -> BlockHeight?
|
|
301
|
+
let describe: (ZcashCompactBlock) -> String
|
|
302
|
+
let compare: (String, String) -> Int?
|
|
303
|
+
}
|
|
304
|
+
|
|
305
|
+
extension ZcashCompactBlockDescriptor {
|
|
306
|
+
/// describes the block following this convention: `HEIGHT-BLOCKHASHHEX-compactblock`
|
|
307
|
+
static let live = ZcashCompactBlockDescriptor(
|
|
308
|
+
height: FSCompactBlockRepository.filenameToHeight,
|
|
309
|
+
describe: FSCompactBlockRepository.filenameDescription,
|
|
310
|
+
compare: FSCompactBlockRepository.filenameComparison
|
|
311
|
+
)
|
|
312
|
+
}
|
|
313
|
+
|
|
314
|
+
enum DirectoryListingProviders {
|
|
315
|
+
/// returns an ascending list of files from a given directory.
|
|
316
|
+
static let `defaultSorted` = SortedDirectoryContentProvider(
|
|
317
|
+
fileManager: FileManager.default,
|
|
318
|
+
sorting: URL.areInIncreasingOrderByFilename
|
|
319
|
+
)
|
|
320
|
+
|
|
321
|
+
/// the default sorting of FileManager
|
|
322
|
+
static let naive = FileManager.default
|
|
323
|
+
}
|
|
324
|
+
|
|
325
|
+
class SortedDirectoryContentProvider: SortedDirectoryListing {
|
|
326
|
+
let fileManager: FileManager
|
|
327
|
+
let sorting: (URL, URL) throws -> Bool
|
|
328
|
+
|
|
329
|
+
/// inits the `SortedDirectoryContentProvider`
|
|
330
|
+
/// - Parameter fileManager: an instance of `FileManager`
|
|
331
|
+
/// - Parameter sorting: A predicate that returns `true` if its
|
|
332
|
+
/// first argument should be ordered before its second argument;
|
|
333
|
+
/// otherwise, `false`.
|
|
334
|
+
init(fileManager: FileManager, sorting: @escaping (URL, URL) throws -> Bool) {
|
|
335
|
+
self.fileManager = fileManager
|
|
336
|
+
self.sorting = sorting
|
|
337
|
+
}
|
|
338
|
+
|
|
339
|
+
/// lists the contents of the given directory on `url` using the
|
|
340
|
+
/// sorting provided by `sorting` property of this provider.
|
|
341
|
+
/// - Parameter url: url to list the contents from. It must be a directory or the call will fail.
|
|
342
|
+
/// - Returns an array with the contained files or an empty one if the directory is empty
|
|
343
|
+
/// - Throws: rethrows any errors from the underlying `FileManager`
|
|
344
|
+
func listContents(of url: URL) throws -> [URL] {
|
|
345
|
+
do {
|
|
346
|
+
return try fileManager.contentsOfDirectory(
|
|
347
|
+
at: url,
|
|
348
|
+
includingPropertiesForKeys: [.nameKey, .isDirectoryKey],
|
|
349
|
+
options: [.skipsHiddenFiles]
|
|
350
|
+
)
|
|
351
|
+
.sorted(by: sorting)
|
|
352
|
+
} catch {
|
|
353
|
+
throw ZcashError.blockRepositoryReadDirectoryContent(url, error)
|
|
354
|
+
}
|
|
355
|
+
}
|
|
356
|
+
}
|
|
357
|
+
|
|
358
|
+
protocol SortedDirectoryListing {
|
|
359
|
+
func listContents(of url: URL) throws -> [URL]
|
|
360
|
+
}
|
|
361
|
+
|
|
362
|
+
// MARK: Extensions
|
|
363
|
+
extension URL {
|
|
364
|
+
/// asumes that URLs are from the same directory for efficiency reasons
|
|
365
|
+
static let areInIncreasingOrderByFilename: (URL, URL) throws -> Bool = { lhs, rhs in
|
|
366
|
+
guard let lhsName = try lhs.resourceValues(forKeys: [.nameKey, .isDirectoryKey]).name else {
|
|
367
|
+
throw ZcashError.blockRepositoryGetFilenameAndIsDirectory(lhs)
|
|
368
|
+
}
|
|
369
|
+
|
|
370
|
+
guard let rhsName = try rhs.resourceValues(forKeys: [.nameKey, .isDirectoryKey]).name else {
|
|
371
|
+
throw ZcashError.blockRepositoryGetFilenameAndIsDirectory(rhs)
|
|
372
|
+
}
|
|
373
|
+
|
|
374
|
+
guard let strcmp = FSCompactBlockRepository.filenameComparison(lhsName, rhsName) else {
|
|
375
|
+
throw ZcashError.blockRepositoryGetFilenameAndIsDirectory(lhs)
|
|
376
|
+
}
|
|
377
|
+
|
|
378
|
+
return strcmp < 0
|
|
379
|
+
}
|
|
380
|
+
}
|
|
381
|
+
|
|
382
|
+
extension FileManager: SortedDirectoryListing {
|
|
383
|
+
func listContents(of url: URL) throws -> [URL] {
|
|
384
|
+
do {
|
|
385
|
+
return try contentsOfDirectory(
|
|
386
|
+
at: url,
|
|
387
|
+
includingPropertiesForKeys: [.nameKey, .isDirectoryKey],
|
|
388
|
+
options: .skipsSubdirectoryDescendants
|
|
389
|
+
)
|
|
390
|
+
} catch {
|
|
391
|
+
throw ZcashError.blockRepositoryReadDirectoryContent(url, error)
|
|
392
|
+
}
|
|
393
|
+
}
|
|
394
|
+
}
|
|
395
|
+
|
|
396
|
+
extension String {
|
|
397
|
+
/// a sorting filter to be used on URL or path arrays from `FileManager`.
|
|
398
|
+
/// - Parameter height: the height of the block we want to filter from
|
|
399
|
+
/// - Parameter descriptor: The block descriptor that corresponds to the filename
|
|
400
|
+
/// convention of the FsBlockDb
|
|
401
|
+
/// - Returns if the height from this filename is greater that the one received by parameter
|
|
402
|
+
/// - Throws: `CompactBlockRepositoryError.malformedCacheEntry` if this String
|
|
403
|
+
/// can't be parsed by the given `ZcashCompactBlockDescriptor`
|
|
404
|
+
func filterGreaterThan(_ height: BlockHeight, with descriptor: ZcashCompactBlockDescriptor) throws -> Bool {
|
|
405
|
+
guard let blockHeight = descriptor.height(self) else {
|
|
406
|
+
throw ZcashError.blockRepositoryParseHeightFromFilename(self)
|
|
407
|
+
}
|
|
408
|
+
|
|
409
|
+
return blockHeight > height
|
|
410
|
+
}
|
|
411
|
+
|
|
412
|
+
func filterLowerThanOrEqual(_ height: BlockHeight, with descriptor: ZcashCompactBlockDescriptor) throws -> Bool {
|
|
413
|
+
guard let blockHeight = descriptor.height(self) else {
|
|
414
|
+
throw ZcashError.blockRepositoryParseHeightFromFilename(self)
|
|
415
|
+
}
|
|
416
|
+
|
|
417
|
+
return blockHeight <= height
|
|
418
|
+
}
|
|
419
|
+
}
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
//
|
|
2
|
+
// HandleSaplingParametersIfNeeded.swift
|
|
3
|
+
//
|
|
4
|
+
//
|
|
5
|
+
// Created by Lukáš Korba on 23.11.2022.
|
|
6
|
+
//
|
|
7
|
+
|
|
8
|
+
import Foundation
|
|
9
|
+
|
|
10
|
+
struct SaplingParametersHandlerConfig {
|
|
11
|
+
let outputParamsURL: URL
|
|
12
|
+
let spendParamsURL: URL
|
|
13
|
+
let saplingParamsSourceURL: SaplingParamsSourceURL
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
protocol SaplingParametersHandler {
|
|
17
|
+
func handleIfNeeded() async throws
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
struct SaplingParametersHandlerImpl {
|
|
21
|
+
let config: SaplingParametersHandlerConfig
|
|
22
|
+
let rustBackend: ZcashRustBackendWelding
|
|
23
|
+
let logger: Logger
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
extension SaplingParametersHandlerImpl: SaplingParametersHandler {
|
|
27
|
+
func handleIfNeeded() async throws {
|
|
28
|
+
try Task.checkCancellation()
|
|
29
|
+
|
|
30
|
+
do {
|
|
31
|
+
let totalShieldedBalance = try await rustBackend.getBalance(account: Int32(0))
|
|
32
|
+
let totalTransparentBalance = try await rustBackend.getTransparentBalance(account: Int32(0))
|
|
33
|
+
|
|
34
|
+
// Download Sapling parameters only if sapling funds are detected.
|
|
35
|
+
guard totalShieldedBalance > 0 || totalTransparentBalance > 0 else { return }
|
|
36
|
+
} catch {
|
|
37
|
+
// if sapling balance can't be detected of we fail to obtain the balance
|
|
38
|
+
// for some reason we shall not proceed to download the parameters and
|
|
39
|
+
// retry in the following attempt to sync.
|
|
40
|
+
logger.error("Couldn't Fetch shielded balance. Won't attempt to download sapling parameters")
|
|
41
|
+
return
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
try await SaplingParameterDownloader.downloadParamsIfnotPresent(
|
|
45
|
+
spendURL: config.spendParamsURL,
|
|
46
|
+
spendSourceURL: config.saplingParamsSourceURL.spendParamFileURL,
|
|
47
|
+
outputURL: config.outputParamsURL,
|
|
48
|
+
outputSourceURL: config.saplingParamsSourceURL.outputParamFileURL,
|
|
49
|
+
logger: logger
|
|
50
|
+
)
|
|
51
|
+
}
|
|
52
|
+
}
|
|
@@ -0,0 +1,114 @@
|
|
|
1
|
+
//
|
|
2
|
+
// CompactBlockProcessing.swift
|
|
3
|
+
// ZcashLightClientKit
|
|
4
|
+
//
|
|
5
|
+
// Created by Francisco Gindre on 10/15/19.
|
|
6
|
+
// Copyright © 2019 Electric Coin Company. All rights reserved.
|
|
7
|
+
//
|
|
8
|
+
import Foundation
|
|
9
|
+
|
|
10
|
+
struct BlockScannerConfig {
|
|
11
|
+
let networkType: NetworkType
|
|
12
|
+
let scanningBatchSize: Int
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
protocol BlockScanner {
|
|
16
|
+
@discardableResult
|
|
17
|
+
func scanBlocks(
|
|
18
|
+
at range: CompactBlockRange,
|
|
19
|
+
totalProgressRange: CompactBlockRange,
|
|
20
|
+
didScan: @escaping (BlockHeight) async -> Void
|
|
21
|
+
) async throws -> BlockHeight
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
struct BlockScannerImpl {
|
|
25
|
+
let config: BlockScannerConfig
|
|
26
|
+
let rustBackend: ZcashRustBackendWelding
|
|
27
|
+
let transactionRepository: TransactionRepository
|
|
28
|
+
let metrics: SDKMetrics
|
|
29
|
+
let logger: Logger
|
|
30
|
+
let latestBlocksDataProvider: LatestBlocksDataProvider
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
extension BlockScannerImpl: BlockScanner {
|
|
34
|
+
@discardableResult
|
|
35
|
+
func scanBlocks(
|
|
36
|
+
at range: CompactBlockRange,
|
|
37
|
+
totalProgressRange: CompactBlockRange,
|
|
38
|
+
didScan: @escaping (BlockHeight) async -> Void
|
|
39
|
+
) async throws -> BlockHeight {
|
|
40
|
+
logger.debug("Going to scan blocks in range: \(range)")
|
|
41
|
+
try Task.checkCancellation()
|
|
42
|
+
|
|
43
|
+
let scanStartHeight = try await transactionRepository.lastScannedHeight()
|
|
44
|
+
let targetScanHeight = range.upperBound
|
|
45
|
+
|
|
46
|
+
var scannedNewBlocks = false
|
|
47
|
+
var lastScannedHeight = scanStartHeight
|
|
48
|
+
|
|
49
|
+
repeat {
|
|
50
|
+
try Task.checkCancellation()
|
|
51
|
+
|
|
52
|
+
let previousScannedHeight = lastScannedHeight
|
|
53
|
+
|
|
54
|
+
// TODO: [#576] remove this arbitrary batch size https://github.com/zcash/ZcashLightClientKit/issues/576
|
|
55
|
+
let batchSize = scanBatchSize(startScanHeight: previousScannedHeight + 1, network: config.networkType)
|
|
56
|
+
|
|
57
|
+
let scanStartTime = Date()
|
|
58
|
+
do {
|
|
59
|
+
try await self.rustBackend.scanBlocks(limit: batchSize)
|
|
60
|
+
} catch {
|
|
61
|
+
logger.debug("block scanning failed with error: \(String(describing: error))")
|
|
62
|
+
throw error
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
let scanFinishTime = Date()
|
|
66
|
+
|
|
67
|
+
if let lastScannedBlock = try await transactionRepository.lastScannedBlock() {
|
|
68
|
+
lastScannedHeight = lastScannedBlock.height
|
|
69
|
+
await latestBlocksDataProvider.updateLatestScannedHeight(lastScannedHeight)
|
|
70
|
+
await latestBlocksDataProvider.updateLatestScannedTime(TimeInterval(lastScannedBlock.time))
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
scannedNewBlocks = previousScannedHeight != lastScannedHeight
|
|
74
|
+
if scannedNewBlocks {
|
|
75
|
+
await didScan(lastScannedHeight)
|
|
76
|
+
|
|
77
|
+
let progress = BlockProgress(
|
|
78
|
+
startHeight: totalProgressRange.lowerBound,
|
|
79
|
+
targetHeight: totalProgressRange.upperBound,
|
|
80
|
+
progressHeight: lastScannedHeight
|
|
81
|
+
)
|
|
82
|
+
|
|
83
|
+
metrics.pushProgressReport(
|
|
84
|
+
progress: progress,
|
|
85
|
+
start: scanStartTime,
|
|
86
|
+
end: scanFinishTime,
|
|
87
|
+
batchSize: Int(batchSize),
|
|
88
|
+
operation: .scanBlocks
|
|
89
|
+
)
|
|
90
|
+
|
|
91
|
+
let heightCount = lastScannedHeight - previousScannedHeight
|
|
92
|
+
let seconds = scanFinishTime.timeIntervalSinceReferenceDate - scanStartTime.timeIntervalSinceReferenceDate
|
|
93
|
+
logger.debug("Scanned \(heightCount) blocks in \(seconds) seconds")
|
|
94
|
+
}
|
|
95
|
+
|
|
96
|
+
await Task.yield()
|
|
97
|
+
} while !Task.isCancelled && scannedNewBlocks && lastScannedHeight < targetScanHeight
|
|
98
|
+
|
|
99
|
+
return lastScannedHeight
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
private func scanBatchSize(startScanHeight height: BlockHeight, network: NetworkType) -> UInt32 {
|
|
103
|
+
assert(config.scanningBatchSize > 0, "ZcashSDK.DefaultScanningBatch must be larger than 0!")
|
|
104
|
+
guard network == .mainnet else { return UInt32(config.scanningBatchSize) }
|
|
105
|
+
|
|
106
|
+
if height > 1_650_000 {
|
|
107
|
+
// librustzcash thread saturation at a number of blocks
|
|
108
|
+
// that contains 100 * num_cores Sapling outputs.
|
|
109
|
+
return UInt32(max(ProcessInfo().activeProcessorCount, 10))
|
|
110
|
+
}
|
|
111
|
+
|
|
112
|
+
return UInt32(config.scanningBatchSize)
|
|
113
|
+
}
|
|
114
|
+
}
|