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,270 @@
|
|
|
1
|
+
//
|
|
2
|
+
// SDKMetrics.swift
|
|
3
|
+
//
|
|
4
|
+
//
|
|
5
|
+
// Created by Lukáš Korba on 13.12.2022.
|
|
6
|
+
//
|
|
7
|
+
|
|
8
|
+
import Foundation
|
|
9
|
+
|
|
10
|
+
/// SDK's tool for the measurement of metrics.
|
|
11
|
+
/// The barebone API of the `SDKMetrics` is all about turning it on/off, pushing new reports in and popping RAW data out.
|
|
12
|
+
/// The processing of data is either left to the user of `SDKMetrics` or anybody can take an advantage of extension APIs
|
|
13
|
+
/// providing useful structs and reports.
|
|
14
|
+
///
|
|
15
|
+
/// Usage:
|
|
16
|
+
/// The `SDKMetrics` API has been designed so it has the lowest impact possible on the SDK itself.
|
|
17
|
+
/// Reporting of the metrics is already in place but ignored until `enableMetrics()` is called. Once turned on, the data is collected
|
|
18
|
+
/// and cumulated to the in memory structural storage until `disableMetrics()` is called.
|
|
19
|
+
/// `disableMetrics()` also clears out the in memory storage.
|
|
20
|
+
///
|
|
21
|
+
/// To collect data and process it there are 2 ways:
|
|
22
|
+
///
|
|
23
|
+
/// 1.
|
|
24
|
+
/// Get RAW data by calling either `popBlock` or `popAllBlockReports`. The post-processing of data is then delegated to the caller.
|
|
25
|
+
///
|
|
26
|
+
/// 2.
|
|
27
|
+
/// Get cumulated data by using an extension APIs. For the summarized collection, call `cumulativeSummary()`.
|
|
28
|
+
/// Sometimes, typically when you want to run several iterations, the `cumulateReportsAndStartNewSet()` automatically computes
|
|
29
|
+
/// cumulativeSummary, stores it and starts to collect a new set. All summaries can be either processed by a caller,
|
|
30
|
+
/// accessing the collection `cumulativeSummaries` directly or values can be merged into one final summary by calling `summarizedCumulativeReports()`.
|
|
31
|
+
///
|
|
32
|
+
/// We encourage you to check`SDKMetricsTests` and other tests in the Test/PerformanceTests/ folder.
|
|
33
|
+
public class SDKMetrics {
|
|
34
|
+
public struct BlockMetricReport: Equatable {
|
|
35
|
+
public let startHeight: BlockHeight
|
|
36
|
+
public let progressHeight: BlockHeight
|
|
37
|
+
public let targetHeight: BlockHeight
|
|
38
|
+
public let batchSize: Int
|
|
39
|
+
public let startTime: TimeInterval
|
|
40
|
+
public let endTime: TimeInterval
|
|
41
|
+
public var duration: TimeInterval { endTime - startTime }
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
public enum Operation {
|
|
45
|
+
case downloadBlocks
|
|
46
|
+
case validateBlocks
|
|
47
|
+
case scanBlocks
|
|
48
|
+
case enhancement
|
|
49
|
+
case fetchUTXOs
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
public struct SyncReport: Equatable {
|
|
53
|
+
public let startTime: TimeInterval
|
|
54
|
+
public let endTime: TimeInterval
|
|
55
|
+
public var duration: TimeInterval { endTime - startTime }
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
public var cumulativeSummaries: [CumulativeSummary] = []
|
|
59
|
+
public var syncReport: SyncReport?
|
|
60
|
+
var isEnabled = false
|
|
61
|
+
var reports: [Operation: [BlockMetricReport]] = [:]
|
|
62
|
+
|
|
63
|
+
public init() { }
|
|
64
|
+
|
|
65
|
+
/// `SDKMetrics` is disabled by default. Any pushed data are simply ignored until `enableMetrics()` is called.
|
|
66
|
+
public func enableMetrics() {
|
|
67
|
+
isEnabled = true
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
public func disableMetrics() {
|
|
71
|
+
isEnabled = false
|
|
72
|
+
clearAll()
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
/// `SDKMetrics` focuses deeply on sync process and metrics related to it. By default there are reports around
|
|
76
|
+
/// block operations like download, validate, etc. This method pushes data on a stack for the specific operation.
|
|
77
|
+
func pushProgressReport(
|
|
78
|
+
progress: BlockProgress,
|
|
79
|
+
start: Date,
|
|
80
|
+
end: Date,
|
|
81
|
+
batchSize: Int,
|
|
82
|
+
operation: Operation
|
|
83
|
+
) {
|
|
84
|
+
guard isEnabled else { return }
|
|
85
|
+
|
|
86
|
+
let blockMetricReport = BlockMetricReport(
|
|
87
|
+
startHeight: progress.startHeight,
|
|
88
|
+
progressHeight: progress.progressHeight,
|
|
89
|
+
targetHeight: progress.targetHeight,
|
|
90
|
+
batchSize: batchSize,
|
|
91
|
+
startTime: start.timeIntervalSinceReferenceDate,
|
|
92
|
+
endTime: end.timeIntervalSinceReferenceDate
|
|
93
|
+
)
|
|
94
|
+
|
|
95
|
+
guard reports[operation] != nil else {
|
|
96
|
+
reports[operation] = [blockMetricReport]
|
|
97
|
+
return
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
reports[operation]?.append(blockMetricReport)
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
/// Block synchronisation consists of operations but the whole process is measured also, represented by
|
|
104
|
+
/// different struct `SyncReport`, missing specifics for the operations like batch size, etc.
|
|
105
|
+
/// Used for the total syncing time report in the first place.
|
|
106
|
+
func pushSyncReport(
|
|
107
|
+
start: Date,
|
|
108
|
+
end: Date
|
|
109
|
+
) {
|
|
110
|
+
guard isEnabled else { return }
|
|
111
|
+
|
|
112
|
+
let syncReport = SyncReport(
|
|
113
|
+
startTime: start.timeIntervalSinceReferenceDate,
|
|
114
|
+
endTime: end.timeIntervalSinceReferenceDate
|
|
115
|
+
)
|
|
116
|
+
|
|
117
|
+
self.syncReport = syncReport
|
|
118
|
+
}
|
|
119
|
+
|
|
120
|
+
/// A method allowing users of the `SDKMetrics` to pop the RAW data out of the system. For the specific `operation`
|
|
121
|
+
/// with option to either leave data in the storage or flushing it out and start the next batch of collecting new ones.
|
|
122
|
+
public func popBlock(operation: Operation, flush: Bool = false) -> [BlockMetricReport]? {
|
|
123
|
+
defer {
|
|
124
|
+
if flush { clearReport(operation) }
|
|
125
|
+
}
|
|
126
|
+
|
|
127
|
+
return reports[operation]
|
|
128
|
+
}
|
|
129
|
+
|
|
130
|
+
/// A method allowing users of the `SDKMetrics` to pop the RAW data out of the system. This time for all measured operations
|
|
131
|
+
/// with option to either leave data in the storage or flushing it out and start the next batch of collecting new ones.
|
|
132
|
+
public func popAllBlockReports(flush: Bool = false) -> [Operation: [BlockMetricReport]] {
|
|
133
|
+
defer {
|
|
134
|
+
if flush { clearAllBlockReports() }
|
|
135
|
+
}
|
|
136
|
+
|
|
137
|
+
return reports
|
|
138
|
+
}
|
|
139
|
+
|
|
140
|
+
func clearReport(_ operation: Operation) {
|
|
141
|
+
reports.removeValue(forKey: operation)
|
|
142
|
+
}
|
|
143
|
+
|
|
144
|
+
func clearAllBlockReports() {
|
|
145
|
+
reports.removeAll()
|
|
146
|
+
cumulativeSummaries.removeAll()
|
|
147
|
+
}
|
|
148
|
+
|
|
149
|
+
func clearAll() {
|
|
150
|
+
clearAllBlockReports()
|
|
151
|
+
syncReport = nil
|
|
152
|
+
}
|
|
153
|
+
}
|
|
154
|
+
|
|
155
|
+
/// This extension provides an API that provides the summary and accumulated reports.
|
|
156
|
+
/// The RAW data can pulled out and be processed without this extension but we
|
|
157
|
+
/// wanted to provide a way how to get essential summaries right from the SDK.
|
|
158
|
+
extension SDKMetrics {
|
|
159
|
+
public struct CumulativeSummary: Equatable {
|
|
160
|
+
public let downloadedBlocksReport: ReportSummary?
|
|
161
|
+
public let validatedBlocksReport: ReportSummary?
|
|
162
|
+
public let scannedBlocksReport: ReportSummary?
|
|
163
|
+
public let enhancementReport: ReportSummary?
|
|
164
|
+
public let fetchUTXOsReport: ReportSummary?
|
|
165
|
+
public let totalSyncReport: ReportSummary?
|
|
166
|
+
}
|
|
167
|
+
|
|
168
|
+
public struct ReportSummary: Equatable {
|
|
169
|
+
public let minTime: TimeInterval
|
|
170
|
+
public let maxTime: TimeInterval
|
|
171
|
+
public let avgTime: TimeInterval
|
|
172
|
+
|
|
173
|
+
public static let zero = Self(minTime: 0, maxTime: 0, avgTime: 0)
|
|
174
|
+
}
|
|
175
|
+
|
|
176
|
+
/// This method takes all the RAW data and computes a `CumulativeSummary` for every `operation`
|
|
177
|
+
/// independently. A `ReportSummary` is the result per `operation`, providing min, max and avg times.
|
|
178
|
+
public func cumulativeSummary() -> CumulativeSummary {
|
|
179
|
+
let downloadReport = summaryFor(reports: reports[.downloadBlocks])
|
|
180
|
+
let validateReport = summaryFor(reports: reports[.validateBlocks])
|
|
181
|
+
let scanReport = summaryFor(reports: reports[.scanBlocks])
|
|
182
|
+
let enhancementReport = summaryFor(reports: reports[.enhancement])
|
|
183
|
+
let fetchUTXOsReport = summaryFor(reports: reports[.fetchUTXOs])
|
|
184
|
+
var totalSyncReport: ReportSummary?
|
|
185
|
+
|
|
186
|
+
if let duration = syncReport?.duration {
|
|
187
|
+
totalSyncReport = ReportSummary(minTime: duration, maxTime: duration, avgTime: duration)
|
|
188
|
+
}
|
|
189
|
+
|
|
190
|
+
return CumulativeSummary(
|
|
191
|
+
downloadedBlocksReport: downloadReport,
|
|
192
|
+
validatedBlocksReport: validateReport,
|
|
193
|
+
scannedBlocksReport: scanReport,
|
|
194
|
+
enhancementReport: enhancementReport,
|
|
195
|
+
fetchUTXOsReport: fetchUTXOsReport,
|
|
196
|
+
totalSyncReport: totalSyncReport
|
|
197
|
+
)
|
|
198
|
+
}
|
|
199
|
+
|
|
200
|
+
/// This method computes the `CumulativeSummary` for the RAW data already in the system, stores it
|
|
201
|
+
/// and leave room for collecting new RAW data. Typical use case is when some code is expected to run several times
|
|
202
|
+
/// and every run is expected to be a new data collection.
|
|
203
|
+
/// Usage of this API is then typically followed by calling `summarizedCumulativeReports()` which merges all stored
|
|
204
|
+
/// cumulative reports into one final report.
|
|
205
|
+
public func cumulateReportsAndStartNewSet() {
|
|
206
|
+
cumulativeSummaries.append(cumulativeSummary())
|
|
207
|
+
reports.removeAll()
|
|
208
|
+
syncReport = nil
|
|
209
|
+
}
|
|
210
|
+
|
|
211
|
+
/// This method takes all `CumulativeSummary` reports and merge them all together, providing
|
|
212
|
+
/// final `CumulativeSummary` per `operation`, ensuring right min and max values are in the place
|
|
213
|
+
/// as well as computes final avg time per `operation`.
|
|
214
|
+
public func summarizedCumulativeReports() -> CumulativeSummary? {
|
|
215
|
+
var finalSummary: CumulativeSummary?
|
|
216
|
+
|
|
217
|
+
cumulativeSummaries.forEach { summary in
|
|
218
|
+
finalSummary = CumulativeSummary(
|
|
219
|
+
downloadedBlocksReport: accumulate(left: finalSummary?.downloadedBlocksReport, right: summary.downloadedBlocksReport),
|
|
220
|
+
validatedBlocksReport: accumulate(left: finalSummary?.validatedBlocksReport, right: summary.validatedBlocksReport),
|
|
221
|
+
scannedBlocksReport: accumulate(left: finalSummary?.scannedBlocksReport, right: summary.scannedBlocksReport),
|
|
222
|
+
enhancementReport: accumulate(left: finalSummary?.enhancementReport, right: summary.enhancementReport),
|
|
223
|
+
fetchUTXOsReport: accumulate(left: finalSummary?.fetchUTXOsReport, right: summary.fetchUTXOsReport),
|
|
224
|
+
totalSyncReport: accumulate(left: finalSummary?.totalSyncReport, right: summary.totalSyncReport)
|
|
225
|
+
)
|
|
226
|
+
}
|
|
227
|
+
|
|
228
|
+
return finalSummary
|
|
229
|
+
}
|
|
230
|
+
|
|
231
|
+
/// Internal helper method that accumulates `ReportSummary` times.
|
|
232
|
+
func accumulate(left: ReportSummary?, right: ReportSummary?) -> ReportSummary? {
|
|
233
|
+
guard let left, let right else {
|
|
234
|
+
if let right {
|
|
235
|
+
return ReportSummary(
|
|
236
|
+
minTime: right.minTime,
|
|
237
|
+
maxTime: right.maxTime,
|
|
238
|
+
avgTime: right.avgTime
|
|
239
|
+
)
|
|
240
|
+
}
|
|
241
|
+
return nil
|
|
242
|
+
}
|
|
243
|
+
|
|
244
|
+
return ReportSummary(
|
|
245
|
+
minTime: min(left.minTime, right.minTime),
|
|
246
|
+
maxTime: max(left.maxTime, right.maxTime),
|
|
247
|
+
avgTime: (left.avgTime + right.avgTime) * 0.5
|
|
248
|
+
)
|
|
249
|
+
}
|
|
250
|
+
|
|
251
|
+
/// Internal helper method that computes min, max and avg times for the `BlockMetricReport` collection.
|
|
252
|
+
func summaryFor(reports: [BlockMetricReport]?) -> ReportSummary? {
|
|
253
|
+
guard let reports, !reports.isEmpty else { return nil }
|
|
254
|
+
|
|
255
|
+
var min: TimeInterval = 99999999.0
|
|
256
|
+
var max: TimeInterval = 0.0
|
|
257
|
+
var avg: TimeInterval = 0.0
|
|
258
|
+
|
|
259
|
+
reports.forEach { report in
|
|
260
|
+
let duration = report.duration
|
|
261
|
+
avg += duration
|
|
262
|
+
if duration > max { max = duration }
|
|
263
|
+
if duration < min { min = duration }
|
|
264
|
+
}
|
|
265
|
+
// reports.count is guarded to never be a zero
|
|
266
|
+
avg /= TimeInterval(reports.count)
|
|
267
|
+
|
|
268
|
+
return ReportSummary(minTime: min, maxTime: max, avgTime: avg)
|
|
269
|
+
}
|
|
270
|
+
}
|
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
//
|
|
2
|
+
// Checkpoint.swift
|
|
3
|
+
//
|
|
4
|
+
//
|
|
5
|
+
// Created by Francisco Gindre on 7/12/22.
|
|
6
|
+
//
|
|
7
|
+
|
|
8
|
+
import Foundation
|
|
9
|
+
|
|
10
|
+
/// Represents the wallet's birthday which can be thought of as a checkpoint at the earliest moment in history where
|
|
11
|
+
/// transactions related to this wallet could exist. Ideally, this would correspond to the latest block height at the
|
|
12
|
+
/// time the wallet key was created. Worst case, the height of Sapling activation could be used (280000).
|
|
13
|
+
///
|
|
14
|
+
/// Knowing a wallet's birthday can significantly reduce the amount of data that it needs to download because none of
|
|
15
|
+
/// the data before that height needs to be scanned for transactions. However, we do need the Sapling tree data in
|
|
16
|
+
/// order to construct valid transactions from that point forward. This birthday contains that tree data, allowing us
|
|
17
|
+
/// to avoid downloading all the compact blocks required in order to generate it.
|
|
18
|
+
///
|
|
19
|
+
/// New wallets can ignore any blocks created before their birthday.
|
|
20
|
+
///
|
|
21
|
+
/// - Parameters:
|
|
22
|
+
/// - height: the height at the time the wallet was born
|
|
23
|
+
/// - hash: the block hash corresponding to the given height
|
|
24
|
+
/// - time: the time the wallet was born, in seconds
|
|
25
|
+
/// - saplingTree: the sapling tree corresponding to the given height. This takes around 15 minutes of processing to generate from scratch because all blocks since activation need to be considered. So when it is calculated in advance it can save the user a lot of time.
|
|
26
|
+
/// - orchardTree: the orchard tree corresponding to the given height. This field is optional since it won't be available prior
|
|
27
|
+
/// to NU5 activation height for the given network.
|
|
28
|
+
struct Checkpoint: Equatable {
|
|
29
|
+
let height: BlockHeight
|
|
30
|
+
let hash: String
|
|
31
|
+
let time: UInt32
|
|
32
|
+
let saplingTree: String
|
|
33
|
+
let orchardTree: String?
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
extension Checkpoint: Decodable {
|
|
37
|
+
public enum CodingKeys: String, CodingKey {
|
|
38
|
+
case height
|
|
39
|
+
case hash
|
|
40
|
+
case time
|
|
41
|
+
case saplingTree
|
|
42
|
+
case orchardTree
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
public init(from decoder: Decoder) throws {
|
|
46
|
+
do {
|
|
47
|
+
let container = try decoder.container(keyedBy: CodingKeys.self)
|
|
48
|
+
self.height = try Self.getHeight(from: container)
|
|
49
|
+
self.hash = try container.decode(String.self, forKey: .hash)
|
|
50
|
+
self.time = try container.decode(UInt32.self, forKey: .time)
|
|
51
|
+
self.saplingTree = try container.decode(String.self, forKey: .saplingTree)
|
|
52
|
+
self.orchardTree = try container.decodeIfPresent(String.self, forKey: .orchardTree)
|
|
53
|
+
} catch {
|
|
54
|
+
throw ZcashError.checkpointDecode(error)
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
static func getHeight(from container: KeyedDecodingContainer<CodingKeys>) throws -> Int {
|
|
59
|
+
guard
|
|
60
|
+
let heightString = try? container.decode(String.self, forKey: .height),
|
|
61
|
+
let height = Int(heightString)
|
|
62
|
+
else {
|
|
63
|
+
throw DecodingError.typeMismatch(
|
|
64
|
+
String.self,
|
|
65
|
+
DecodingError.Context(
|
|
66
|
+
codingPath: [CodingKeys.height],
|
|
67
|
+
debugDescription: "expected height to be encoded as a string",
|
|
68
|
+
underlyingError: nil
|
|
69
|
+
)
|
|
70
|
+
)
|
|
71
|
+
}
|
|
72
|
+
return height
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
public extension BlockHeight {
|
|
77
|
+
/// Useful when creating a new wallet to reduce sync times.
|
|
78
|
+
/// - Parameters:
|
|
79
|
+
/// - zcashNetwork: Network to use for the block height.
|
|
80
|
+
/// - Returns: The block height of the newest checkpoint known by the SDK.
|
|
81
|
+
static func ofLatestCheckpoint(network: ZcashNetwork) -> BlockHeight {
|
|
82
|
+
Checkpoint.birthday(with: BlockHeight.max, network: network).height
|
|
83
|
+
}
|
|
84
|
+
}
|
|
@@ -0,0 +1,236 @@
|
|
|
1
|
+
//
|
|
2
|
+
// Memo.swift
|
|
3
|
+
//
|
|
4
|
+
//
|
|
5
|
+
// Created by Pacu on 5/11/22.
|
|
6
|
+
//
|
|
7
|
+
|
|
8
|
+
import Foundation
|
|
9
|
+
|
|
10
|
+
public enum Memo: Equatable {
|
|
11
|
+
case empty
|
|
12
|
+
case text(MemoText)
|
|
13
|
+
case future(MemoBytes)
|
|
14
|
+
case arbitrary([UInt8])
|
|
15
|
+
|
|
16
|
+
/// Parses the given bytes as in ZIP-302
|
|
17
|
+
public init(bytes: [UInt8]) throws {
|
|
18
|
+
self = try MemoBytes(bytes: bytes).intoMemo()
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
/// Converts these memo bytes into a ZIP-302 Memo
|
|
22
|
+
public init(memoBytes: MemoBytes) throws {
|
|
23
|
+
self = try memoBytes.intoMemo()
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
/// Creates a `.text(TextMemo)` Memo using the `UTF8View` of the given string
|
|
27
|
+
/// - Throws:
|
|
28
|
+
/// - `MemoBytes.Errors.tooLong(length)` if the UTF-8 length
|
|
29
|
+
/// of this string is greater than `MemoBytes.capacity` (512 bytes)
|
|
30
|
+
public init(string: String) throws {
|
|
31
|
+
self = .text(try MemoText(String(string.utf8)))
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
/// Represent memo as String. Only `.text` memo can be represented as String.
|
|
35
|
+
/// - Returns: Valid String if it can be created from memo; otherwise `nil`.
|
|
36
|
+
public func toString() -> String? {
|
|
37
|
+
switch self {
|
|
38
|
+
case .empty, .future, .arbitrary:
|
|
39
|
+
return nil
|
|
40
|
+
|
|
41
|
+
case .text(let text):
|
|
42
|
+
return text.string
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
public extension Memo {
|
|
48
|
+
/// Use this function to know the size of this text in memo bytes.
|
|
49
|
+
/// - Parameter memotext: the string you want to turn into a
|
|
50
|
+
/// a memo.
|
|
51
|
+
/// - Returns: the size of this string in bytes using UTF-8 encoding.
|
|
52
|
+
/// - note: According to ZIP-302, memos have a length limit of 512 bytes.
|
|
53
|
+
/// Attempting to create a memo that exceeds that capacity will
|
|
54
|
+
/// throw an error.
|
|
55
|
+
static func length(for memoText: String) -> Int {
|
|
56
|
+
memoText.lengthOfBytes(using: .utf8)
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
public extension Memo {
|
|
61
|
+
func asMemoBytes() throws -> MemoBytes {
|
|
62
|
+
switch self {
|
|
63
|
+
case .empty:
|
|
64
|
+
return MemoBytes.empty()
|
|
65
|
+
|
|
66
|
+
case .text(let textMemo):
|
|
67
|
+
guard let bytes = textMemo.string.data(using: .utf8)?.bytes else {
|
|
68
|
+
throw ZcashError.memoTextInvalidUTF8
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
return try MemoBytes(bytes: bytes)
|
|
72
|
+
|
|
73
|
+
case .future(let memoBytes):
|
|
74
|
+
return memoBytes
|
|
75
|
+
|
|
76
|
+
case .arbitrary(var arbitraryBytes):
|
|
77
|
+
arbitraryBytes.insert(0xFF, at: 0)
|
|
78
|
+
return try MemoBytes(bytes: arbitraryBytes)
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
/// A wrapper on `String` so that `Memo` can't be created with an invalid String
|
|
84
|
+
public struct MemoText: Equatable {
|
|
85
|
+
public let string: String
|
|
86
|
+
|
|
87
|
+
init(_ string: String) throws {
|
|
88
|
+
let trimmedString = String(string.reversed().drop(while: { $0 == "\u{0}" }).reversed())
|
|
89
|
+
|
|
90
|
+
guard trimmedString.count == string.count else {
|
|
91
|
+
throw ZcashError.memoTextInputEndsWithNullBytes
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
guard string.utf8.count <= MemoBytes.capacity else {
|
|
95
|
+
throw ZcashError.memoTextInputTooLong(string.utf8.count)
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
self.string = string
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
public struct MemoBytes: Equatable {
|
|
103
|
+
public enum Errors: Error {
|
|
104
|
+
/// Invalid UTF-8 Bytes where detected when attempting to create a Text Memo
|
|
105
|
+
case invalidUTF8
|
|
106
|
+
/// Trailing null-bytes were found when attempting to create a Text memo
|
|
107
|
+
case endsWithNullBytes
|
|
108
|
+
/// the resulting bytes provided are too long to be stored as a Memo in any of its forms.
|
|
109
|
+
case tooLong(Int)
|
|
110
|
+
}
|
|
111
|
+
|
|
112
|
+
public static let capacity: Int = 512
|
|
113
|
+
|
|
114
|
+
public let bytes: [UInt8]
|
|
115
|
+
|
|
116
|
+
/// Copies the given bytes into the inner array if this struct in the context of ZIP-302
|
|
117
|
+
/// and returns a `MemoBytes` struct
|
|
118
|
+
/// - Throws: `Errors.tooLong(bytes.count)` if the count is greater than
|
|
119
|
+
/// 512 bytes.
|
|
120
|
+
///
|
|
121
|
+
public init(bytes: [UInt8]) throws {
|
|
122
|
+
guard bytes.count <= Self.capacity else { throw ZcashError.memoBytesInputTooLong(bytes.count) }
|
|
123
|
+
|
|
124
|
+
var rawBytes = [UInt8](repeating: 0x0, count: Self.capacity)
|
|
125
|
+
|
|
126
|
+
// replacing range is quite slow an inefficient. Use bare metal impl
|
|
127
|
+
_ = bytes.withUnsafeBufferPointer { ptr in
|
|
128
|
+
memmove(&rawBytes[0], ptr.baseAddress, ptr.count)
|
|
129
|
+
}
|
|
130
|
+
|
|
131
|
+
self.bytes = rawBytes
|
|
132
|
+
}
|
|
133
|
+
|
|
134
|
+
init(contiguousBytes: ContiguousArray<UInt8>) throws {
|
|
135
|
+
guard contiguousBytes.capacity <= Self.capacity else { throw ZcashError.memoBytesInputTooLong(contiguousBytes.capacity) }
|
|
136
|
+
|
|
137
|
+
var rawBytes = [UInt8](repeating: 0x0, count: Self.capacity)
|
|
138
|
+
|
|
139
|
+
_ = contiguousBytes.withUnsafeBufferPointer { ptr in
|
|
140
|
+
memmove(&rawBytes[0], ptr.baseAddress, ptr.count)
|
|
141
|
+
}
|
|
142
|
+
|
|
143
|
+
self.bytes = rawBytes
|
|
144
|
+
}
|
|
145
|
+
|
|
146
|
+
public static func empty() -> Self {
|
|
147
|
+
// swiftlint:disable:next force_try
|
|
148
|
+
try! Self(bytes: .emptyMemoBytes)
|
|
149
|
+
}
|
|
150
|
+
}
|
|
151
|
+
|
|
152
|
+
public extension MemoBytes {
|
|
153
|
+
/// Parsing of the MemoBytes in terms of ZIP-302 Specification
|
|
154
|
+
/// See https://zips.z.cash/zip-0302#specification
|
|
155
|
+
/// - Returns:
|
|
156
|
+
/// - `.text(MemoText)` If the first byte (byte 0) has a value of 0xF4 or smaller
|
|
157
|
+
/// - `.future(MemoBytes)` If the memo matches any of these patterns, then this memo is from the future,
|
|
158
|
+
/// because these ranges are reserved for future updates to this specification:
|
|
159
|
+
/// - The first byte has a value of 0xF5.
|
|
160
|
+
/// - The first byte has a value of 0xF6, and the remaining 511 bytes are not all 0x00.
|
|
161
|
+
/// - The first byte has a value between 0xF7 and 0xFE inclusive.
|
|
162
|
+
/// - `.arbitrary(Bytes)` when the first byte is 0xFF. The Bytes don't include the 0xFF leading byte.
|
|
163
|
+
/// - Throws:
|
|
164
|
+
/// - `MemoBytes.Errors.invalidUTF8` when the case of Text memo is found but then invalid UTF-8 is found
|
|
165
|
+
func intoMemo() throws -> Memo {
|
|
166
|
+
switch self.bytes[0] {
|
|
167
|
+
case 0x00 ... 0xF4:
|
|
168
|
+
let unpaddedBytes = self.unpaddedRawBytes()
|
|
169
|
+
guard let validatedUTF8String = String(bytes: unpaddedBytes, encoding: .utf8) else {
|
|
170
|
+
throw ZcashError.memoBytesInvalidUTF8
|
|
171
|
+
}
|
|
172
|
+
|
|
173
|
+
return .text(try MemoText(validatedUTF8String))
|
|
174
|
+
|
|
175
|
+
case 0xF5:
|
|
176
|
+
return Memo.future(self)
|
|
177
|
+
|
|
178
|
+
case 0xF6:
|
|
179
|
+
return self.bytes.dropFirst().first(where: { $0 != 0 }) == nil ?
|
|
180
|
+
Memo.empty :
|
|
181
|
+
Memo.future(self)
|
|
182
|
+
|
|
183
|
+
case 0xF7 ... 0xFE:
|
|
184
|
+
return Memo.future(self)
|
|
185
|
+
|
|
186
|
+
case 0xFF:
|
|
187
|
+
return .arbitrary([UInt8](bytes[1...]))
|
|
188
|
+
|
|
189
|
+
default:
|
|
190
|
+
return .future(self)
|
|
191
|
+
}
|
|
192
|
+
}
|
|
193
|
+
}
|
|
194
|
+
|
|
195
|
+
extension MemoBytes {
|
|
196
|
+
/// Returns raw bytes, excluding null padding
|
|
197
|
+
func unpaddedRawBytes() -> [UInt8] {
|
|
198
|
+
self.bytes.unpaddedRawBytes()
|
|
199
|
+
}
|
|
200
|
+
}
|
|
201
|
+
|
|
202
|
+
extension Array where Element == UInt8 {
|
|
203
|
+
static var emptyMemoBytes: [UInt8] {
|
|
204
|
+
var emptyMemo = [UInt8](repeating: 0x00, count: MemoBytes.capacity)
|
|
205
|
+
emptyMemo[0] = 0xF6
|
|
206
|
+
return emptyMemo
|
|
207
|
+
}
|
|
208
|
+
|
|
209
|
+
func unpaddedRawBytes() -> [UInt8] {
|
|
210
|
+
guard let lastNullByte = self.enumerated()
|
|
211
|
+
.reversed()
|
|
212
|
+
.first(where: { $0.1 != 0 })
|
|
213
|
+
.map({ $0.0 + 1 }) else {
|
|
214
|
+
return []
|
|
215
|
+
}
|
|
216
|
+
|
|
217
|
+
return [UInt8](self[0 ..< lastNullByte])
|
|
218
|
+
}
|
|
219
|
+
}
|
|
220
|
+
|
|
221
|
+
extension Optional where WrappedType == String {
|
|
222
|
+
func intoMemo() throws -> Memo {
|
|
223
|
+
switch self {
|
|
224
|
+
case .none:
|
|
225
|
+
return .empty
|
|
226
|
+
case .some(let string):
|
|
227
|
+
return try Memo(string: string)
|
|
228
|
+
}
|
|
229
|
+
}
|
|
230
|
+
}
|
|
231
|
+
|
|
232
|
+
extension Data {
|
|
233
|
+
func intoMemoBytes() throws -> MemoBytes? {
|
|
234
|
+
try MemoBytes(bytes: self.bytes)
|
|
235
|
+
}
|
|
236
|
+
}
|