react-native-zcash 0.3.5 → 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.
Files changed (1060) hide show
  1. package/CHANGELOG.md +6 -0
  2. package/README.md +10 -7
  3. package/android/build.gradle +6 -4
  4. package/android/src/main/assets/saplingtree/mainnet/1310000.json +1 -1
  5. package/android/src/main/assets/saplingtree/mainnet/1320000.json +1 -1
  6. package/android/src/main/assets/saplingtree/mainnet/1330000.json +1 -1
  7. package/android/src/main/assets/saplingtree/mainnet/1340000.json +1 -1
  8. package/android/src/main/assets/saplingtree/mainnet/1350000.json +1 -1
  9. package/android/src/main/assets/saplingtree/mainnet/1360000.json +1 -1
  10. package/android/src/main/assets/saplingtree/mainnet/1370000.json +1 -1
  11. package/android/src/main/assets/saplingtree/mainnet/1380000.json +1 -1
  12. package/android/src/main/assets/saplingtree/mainnet/1390000.json +1 -1
  13. package/android/src/main/assets/saplingtree/mainnet/1400000.json +1 -1
  14. package/android/src/main/assets/saplingtree/mainnet/1410000.json +1 -1
  15. package/android/src/main/assets/saplingtree/mainnet/1420000.json +1 -1
  16. package/android/src/main/assets/saplingtree/mainnet/1430000.json +1 -1
  17. package/android/src/main/assets/saplingtree/mainnet/1440000.json +1 -1
  18. package/android/src/main/assets/saplingtree/mainnet/1450000.json +1 -1
  19. package/android/src/main/assets/saplingtree/mainnet/1460000.json +1 -1
  20. package/android/src/main/assets/saplingtree/mainnet/1470000.json +1 -1
  21. package/android/src/main/assets/saplingtree/mainnet/1480000.json +1 -1
  22. package/android/src/main/assets/saplingtree/mainnet/1490000.json +1 -1
  23. package/android/src/main/assets/saplingtree/mainnet/1500000.json +1 -1
  24. package/android/src/main/assets/saplingtree/mainnet/1510000.json +1 -1
  25. package/android/src/main/assets/saplingtree/mainnet/1520000.json +1 -1
  26. package/android/src/main/assets/saplingtree/mainnet/1530000.json +1 -1
  27. package/android/src/main/assets/saplingtree/mainnet/1540000.json +1 -1
  28. package/android/src/main/assets/saplingtree/mainnet/1550000.json +1 -1
  29. package/android/src/main/assets/saplingtree/mainnet/1560000.json +1 -1
  30. package/android/src/main/assets/saplingtree/mainnet/1570000.json +1 -1
  31. package/android/src/main/assets/saplingtree/mainnet/1580000.json +1 -1
  32. package/android/src/main/assets/saplingtree/mainnet/1590000.json +1 -1
  33. package/android/src/main/assets/saplingtree/mainnet/1600000.json +1 -1
  34. package/android/src/main/assets/saplingtree/mainnet/1610000.json +1 -1
  35. package/android/src/main/assets/saplingtree/mainnet/1620000.json +1 -1
  36. package/android/src/main/assets/saplingtree/mainnet/1630000.json +1 -1
  37. package/android/src/main/assets/saplingtree/mainnet/1640000.json +1 -1
  38. package/android/src/main/assets/saplingtree/mainnet/1650000.json +1 -1
  39. package/android/src/main/assets/saplingtree/mainnet/1660000.json +1 -1
  40. package/android/src/main/assets/saplingtree/mainnet/1670000.json +1 -1
  41. package/android/src/main/assets/saplingtree/mainnet/1680000.json +1 -1
  42. package/android/src/main/assets/saplingtree/mainnet/1690000.json +2 -1
  43. package/android/src/main/assets/saplingtree/mainnet/1700000.json +2 -1
  44. package/android/src/main/assets/saplingtree/mainnet/1710000.json +2 -1
  45. package/android/src/main/assets/saplingtree/mainnet/1720000.json +2 -1
  46. package/android/src/main/assets/saplingtree/mainnet/1730000.json +2 -1
  47. package/android/src/main/assets/saplingtree/mainnet/1740000.json +2 -1
  48. package/android/src/main/assets/saplingtree/mainnet/1750000.json +2 -1
  49. package/android/src/main/assets/saplingtree/mainnet/1760000.json +2 -1
  50. package/android/src/main/assets/saplingtree/mainnet/1770000.json +2 -1
  51. package/android/src/main/assets/saplingtree/mainnet/1780000.json +2 -1
  52. package/android/src/main/assets/saplingtree/mainnet/1790000.json +2 -1
  53. package/android/src/main/assets/saplingtree/mainnet/1800000.json +2 -1
  54. package/android/src/main/assets/saplingtree/mainnet/1810000.json +2 -1
  55. package/android/src/main/assets/saplingtree/mainnet/1820000.json +2 -1
  56. package/android/src/main/assets/saplingtree/mainnet/1830000.json +2 -1
  57. package/android/src/main/assets/saplingtree/mainnet/1840000.json +2 -1
  58. package/android/src/main/assets/saplingtree/mainnet/1850000.json +2 -1
  59. package/android/src/main/assets/saplingtree/mainnet/1860000.json +2 -1
  60. package/android/src/main/assets/saplingtree/mainnet/1870000.json +2 -1
  61. package/android/src/main/assets/saplingtree/mainnet/1880000.json +2 -1
  62. package/android/src/main/assets/saplingtree/mainnet/1890000.json +2 -1
  63. package/android/src/main/assets/saplingtree/mainnet/1900000.json +2 -1
  64. package/android/src/main/assets/saplingtree/mainnet/1910000.json +2 -1
  65. package/android/src/main/assets/saplingtree/mainnet/1920000.json +2 -1
  66. package/android/src/main/assets/saplingtree/mainnet/1930000.json +2 -1
  67. package/android/src/main/assets/saplingtree/mainnet/1940000.json +2 -1
  68. package/android/src/main/assets/saplingtree/mainnet/1950000.json +2 -1
  69. package/android/src/main/assets/saplingtree/mainnet/1960000.json +2 -1
  70. package/android/src/main/assets/saplingtree/mainnet/1970000.json +2 -1
  71. package/android/src/main/assets/saplingtree/mainnet/1980000.json +2 -1
  72. package/android/src/main/assets/saplingtree/mainnet/1990000.json +2 -1
  73. package/android/src/main/assets/saplingtree/mainnet/2000000.json +2 -1
  74. package/android/src/main/assets/saplingtree/mainnet/2010000.json +2 -1
  75. package/android/src/main/assets/saplingtree/mainnet/2020000.json +2 -1
  76. package/android/src/main/assets/saplingtree/mainnet/2030000.json +2 -1
  77. package/android/src/main/assets/saplingtree/mainnet/2040000.json +2 -1
  78. package/android/src/main/assets/saplingtree/mainnet/2050000.json +2 -1
  79. package/android/src/main/assets/saplingtree/mainnet/2060000.json +2 -1
  80. package/android/src/main/assets/saplingtree/mainnet/2070000.json +2 -1
  81. package/android/src/main/assets/saplingtree/mainnet/2080000.json +2 -1
  82. package/android/src/main/assets/saplingtree/mainnet/2090000.json +2 -1
  83. package/android/src/main/assets/saplingtree/mainnet/2100000.json +2 -1
  84. package/android/src/main/assets/saplingtree/mainnet/2110000.json +2 -1
  85. package/android/src/main/assets/saplingtree/mainnet/2120000.json +2 -1
  86. package/android/src/main/assets/saplingtree/mainnet/2130000.json +2 -1
  87. package/android/src/main/assets/saplingtree/mainnet/2140000.json +2 -1
  88. package/android/src/main/assets/saplingtree/mainnet/2150000.json +2 -1
  89. package/android/src/main/assets/saplingtree/mainnet/2160000.json +2 -1
  90. package/android/src/main/assets/saplingtree/mainnet/2170000.json +2 -1
  91. package/android/src/main/assets/saplingtree/mainnet/2180000.json +8 -0
  92. package/android/src/main/assets/saplingtree/mainnet/2190000.json +8 -0
  93. package/android/src/main/assets/saplingtree/mainnet/2200000.json +8 -0
  94. package/android/src/main/assets/saplingtree/mainnet/2210000.json +8 -0
  95. package/android/src/main/java/app/edge/rnzcash/RNZcashModule.kt +179 -175
  96. package/android/src/main/java/app/edge/rnzcash/RNZcashPackage.kt +2 -3
  97. package/ios/RNZcash.m +5 -21
  98. package/ios/RNZcash.swift +531 -512
  99. package/ios/ZCashLightClientKit/Block/CompactBlockProcessor.swift +1365 -0
  100. package/ios/ZCashLightClientKit/Block/DatabaseStorage/ConnectorProvider.swift +12 -0
  101. package/ios/ZCashLightClientKit/Block/DatabaseStorage/DatabaseStorageError.swift +20 -0
  102. package/ios/ZCashLightClientKit/Block/DatabaseStorage/SimpleConnectionProvider.swift +39 -0
  103. package/ios/ZCashLightClientKit/Block/Download/BlockDownloader.swift +295 -0
  104. package/ios/ZCashLightClientKit/Block/Download/BlockDownloaderService.swift +117 -0
  105. package/ios/ZCashLightClientKit/Block/Enhance/BlockEnhancer.swift +123 -0
  106. package/ios/ZCashLightClientKit/Block/FetchUnspentTxOutputs/UTXOFetcher.swift +114 -0
  107. package/ios/ZCashLightClientKit/Block/FilesystemStorage/FSCompactBlockRepository.swift +419 -0
  108. package/ios/ZCashLightClientKit/Block/SaplingParameters/SaplingParametersHandler.swift +52 -0
  109. package/ios/ZCashLightClientKit/Block/Scan/BlockScanner.swift +114 -0
  110. package/ios/ZCashLightClientKit/Block/Utils/AfterSyncHooksManager.swift +88 -0
  111. package/ios/ZCashLightClientKit/Block/Utils/InternalSyncProgress.swift +200 -0
  112. package/ios/ZCashLightClientKit/Block/Validate/BlockValidator.swift +51 -0
  113. package/ios/ZCashLightClientKit/ClosureSynchronizer.swift +84 -0
  114. package/ios/ZCashLightClientKit/CombineSynchronizer.swift +76 -0
  115. package/ios/ZCashLightClientKit/Constants/Checkpoint+Constants.swift +98 -0
  116. package/ios/ZCashLightClientKit/Constants/Checkpoint+mainnet.swift +19 -0
  117. package/ios/ZCashLightClientKit/Constants/Checkpoint+testnet.swift +20 -0
  118. package/ios/ZCashLightClientKit/Constants/ZcashSDK.swift +139 -169
  119. package/ios/ZCashLightClientKit/DAO/BlockDao.swift +65 -20
  120. package/ios/ZCashLightClientKit/DAO/PagedTransactionDao.swift +20 -28
  121. package/ios/ZCashLightClientKit/DAO/TransactionDao.swift +175 -323
  122. package/ios/ZCashLightClientKit/DAO/UnspentTransactionOutputDao.swift +80 -58
  123. package/ios/ZCashLightClientKit/Entity/AccountEntity.swift +86 -88
  124. package/ios/ZCashLightClientKit/Entity/BlockProgress.swift +24 -0
  125. package/ios/ZCashLightClientKit/Entity/EncodedTransactionEntity.swift +3 -3
  126. package/ios/ZCashLightClientKit/Entity/SentNoteEntity.swift +15 -12
  127. package/ios/ZCashLightClientKit/Entity/TransactionEntity.swift +205 -131
  128. package/ios/ZCashLightClientKit/Entity/UnspentTransactionOutputEntity.swift +7 -6
  129. package/ios/ZCashLightClientKit/Entity/ZcashCompactBlock.swift +96 -0
  130. package/ios/ZCashLightClientKit/Error/Sourcery/ZcashError.stencil +40 -0
  131. package/ios/ZCashLightClientKit/Error/Sourcery/ZcashErrorCode.stencil +15 -0
  132. package/ios/ZCashLightClientKit/Error/Sourcery/generateErrorCode.sh +34 -0
  133. package/ios/ZCashLightClientKit/Error/ZcashError.swift +820 -0
  134. package/ios/ZCashLightClientKit/Error/ZcashErrorCode.swift +306 -0
  135. package/ios/ZCashLightClientKit/Error/ZcashErrorCodeDefinition.swift +596 -0
  136. package/ios/ZCashLightClientKit/Extensions/Error+ZcashError.swift +18 -0
  137. package/ios/ZCashLightClientKit/Extensions/HexEncode.swift +1 -1
  138. package/ios/ZCashLightClientKit/Extensions/NumberFormatter+Zcash.swift +19 -0
  139. package/ios/ZCashLightClientKit/Extensions/URL+UpdateWithAlias.swift +36 -0
  140. package/ios/ZCashLightClientKit/Extensions/Undescribable.swift +22 -0
  141. package/ios/ZCashLightClientKit/Extensions/Zatoshi+SQLite.swift +20 -0
  142. package/ios/ZCashLightClientKit/Initializer.swift +336 -260
  143. package/ios/ZCashLightClientKit/Metrics/SDKMetrics.swift +270 -0
  144. package/ios/ZCashLightClientKit/Model/Checkpoint.swift +84 -0
  145. package/ios/ZCashLightClientKit/Model/Memo.swift +236 -0
  146. package/ios/ZCashLightClientKit/Model/WalletTypes.swift +261 -88
  147. package/ios/ZCashLightClientKit/Model/Zatoshi.swift +115 -0
  148. package/ios/ZCashLightClientKit/Modules/Service/GRPC/LightWalletGRPCService.swift +342 -0
  149. package/ios/ZCashLightClientKit/Modules/Service/GRPC/ProtoBuf/Extensions/Protocolbuffer+Extensions.swift +50 -0
  150. package/ios/ZCashLightClientKit/Modules/Service/GRPC/ProtoBuf/compact_formats.pb.swift +399 -0
  151. package/ios/ZCashLightClientKit/Modules/Service/GRPC/ProtoBuf/proto/compact_formats.proto +66 -0
  152. package/ios/ZCashLightClientKit/Modules/Service/GRPC/ProtoBuf/proto/service.proto +185 -0
  153. package/ios/ZCashLightClientKit/Modules/Service/GRPC/ProtoBuf/service.grpc.swift +1123 -0
  154. package/ios/ZCashLightClientKit/Modules/Service/GRPC/ProtoBuf/service.pb.swift +1208 -0
  155. package/ios/ZCashLightClientKit/Modules/Service/LightWalletService.swift +195 -0
  156. package/ios/ZCashLightClientKit/Providers/LatestBlocksDataProvider.swift +69 -0
  157. package/ios/ZCashLightClientKit/Providers/ResourceProvider.swift +24 -6
  158. package/ios/ZCashLightClientKit/Repository/CompactBlockRepository.swift +14 -46
  159. package/ios/ZCashLightClientKit/Repository/NotesRepository.swift +1 -0
  160. package/ios/ZCashLightClientKit/Repository/PaginatedTransactionRepository.swift +6 -6
  161. package/ios/ZCashLightClientKit/Repository/TransactionRepository.swift +18 -19
  162. package/ios/ZCashLightClientKit/Repository/UnspentTransactionOutputRepository.swift +5 -7
  163. package/ios/ZCashLightClientKit/Resources/checkpoints/mainnet/1000000.json +7 -0
  164. package/ios/ZCashLightClientKit/Resources/checkpoints/mainnet/1010000.json +7 -0
  165. package/ios/ZCashLightClientKit/Resources/checkpoints/mainnet/1020000.json +7 -0
  166. package/ios/ZCashLightClientKit/Resources/checkpoints/mainnet/1030000.json +7 -0
  167. package/ios/ZCashLightClientKit/Resources/checkpoints/mainnet/1040000.json +7 -0
  168. package/ios/ZCashLightClientKit/Resources/checkpoints/mainnet/1050000.json +7 -0
  169. package/ios/ZCashLightClientKit/Resources/checkpoints/mainnet/1060000.json +7 -0
  170. package/ios/ZCashLightClientKit/Resources/checkpoints/mainnet/1070000.json +7 -0
  171. package/ios/ZCashLightClientKit/Resources/checkpoints/mainnet/1080000.json +7 -0
  172. package/ios/ZCashLightClientKit/Resources/checkpoints/mainnet/1090000.json +7 -0
  173. package/ios/ZCashLightClientKit/Resources/checkpoints/mainnet/1100000.json +7 -0
  174. package/ios/ZCashLightClientKit/Resources/checkpoints/mainnet/1110000.json +7 -0
  175. package/ios/ZCashLightClientKit/Resources/checkpoints/mainnet/1120000.json +7 -0
  176. package/ios/ZCashLightClientKit/Resources/checkpoints/mainnet/1130000.json +7 -0
  177. package/ios/ZCashLightClientKit/Resources/checkpoints/mainnet/1140000.json +7 -0
  178. package/ios/ZCashLightClientKit/Resources/checkpoints/mainnet/1150000.json +7 -0
  179. package/ios/ZCashLightClientKit/Resources/checkpoints/mainnet/1160000.json +7 -0
  180. package/ios/ZCashLightClientKit/Resources/checkpoints/mainnet/1170000.json +7 -0
  181. package/ios/ZCashLightClientKit/Resources/checkpoints/mainnet/1180000.json +7 -0
  182. package/ios/ZCashLightClientKit/Resources/checkpoints/mainnet/1190000.json +7 -0
  183. package/ios/ZCashLightClientKit/Resources/checkpoints/mainnet/1200000.json +7 -0
  184. package/ios/ZCashLightClientKit/Resources/checkpoints/mainnet/1210000.json +7 -0
  185. package/ios/ZCashLightClientKit/Resources/checkpoints/mainnet/1220000.json +7 -0
  186. package/ios/ZCashLightClientKit/Resources/checkpoints/mainnet/1230000.json +7 -0
  187. package/ios/ZCashLightClientKit/Resources/checkpoints/mainnet/1240000.json +7 -0
  188. package/ios/ZCashLightClientKit/Resources/checkpoints/mainnet/1250000.json +7 -0
  189. package/ios/ZCashLightClientKit/Resources/checkpoints/mainnet/1260000.json +7 -0
  190. package/ios/ZCashLightClientKit/Resources/checkpoints/mainnet/1270000.json +7 -0
  191. package/ios/ZCashLightClientKit/Resources/checkpoints/mainnet/1280000.json +7 -0
  192. package/ios/ZCashLightClientKit/Resources/checkpoints/mainnet/1290000.json +7 -0
  193. package/ios/ZCashLightClientKit/Resources/checkpoints/mainnet/1300000.json +7 -0
  194. package/ios/ZCashLightClientKit/Resources/checkpoints/mainnet/1310000.json +7 -0
  195. package/ios/ZCashLightClientKit/Resources/checkpoints/mainnet/1320000.json +7 -0
  196. package/ios/ZCashLightClientKit/Resources/checkpoints/mainnet/1330000.json +7 -0
  197. package/ios/ZCashLightClientKit/Resources/checkpoints/mainnet/1340000.json +7 -0
  198. package/ios/ZCashLightClientKit/Resources/checkpoints/mainnet/1350000.json +7 -0
  199. package/ios/ZCashLightClientKit/Resources/checkpoints/mainnet/1360000.json +7 -0
  200. package/ios/ZCashLightClientKit/Resources/checkpoints/mainnet/1370000.json +7 -0
  201. package/ios/ZCashLightClientKit/Resources/checkpoints/mainnet/1380000.json +7 -0
  202. package/ios/ZCashLightClientKit/Resources/checkpoints/mainnet/1390000.json +7 -0
  203. package/ios/ZCashLightClientKit/Resources/checkpoints/mainnet/1400000.json +7 -0
  204. package/ios/ZCashLightClientKit/Resources/checkpoints/mainnet/1410000.json +7 -0
  205. package/ios/ZCashLightClientKit/Resources/checkpoints/mainnet/1420000.json +7 -0
  206. package/ios/ZCashLightClientKit/Resources/checkpoints/mainnet/1430000.json +7 -0
  207. package/ios/ZCashLightClientKit/Resources/checkpoints/mainnet/1440000.json +7 -0
  208. package/ios/ZCashLightClientKit/Resources/checkpoints/mainnet/1450000.json +7 -0
  209. package/ios/ZCashLightClientKit/Resources/checkpoints/mainnet/1460000.json +7 -0
  210. package/ios/ZCashLightClientKit/Resources/checkpoints/mainnet/1470000.json +7 -0
  211. package/ios/ZCashLightClientKit/Resources/checkpoints/mainnet/1480000.json +7 -0
  212. package/ios/ZCashLightClientKit/Resources/checkpoints/mainnet/1490000.json +7 -0
  213. package/ios/ZCashLightClientKit/Resources/checkpoints/mainnet/1500000.json +7 -0
  214. package/ios/ZCashLightClientKit/Resources/checkpoints/mainnet/1510000.json +7 -0
  215. package/ios/ZCashLightClientKit/Resources/checkpoints/mainnet/1520000.json +7 -0
  216. package/ios/ZCashLightClientKit/Resources/checkpoints/mainnet/1530000.json +7 -0
  217. package/ios/ZCashLightClientKit/Resources/checkpoints/mainnet/1540000.json +7 -0
  218. package/ios/ZCashLightClientKit/Resources/checkpoints/mainnet/1550000.json +7 -0
  219. package/ios/ZCashLightClientKit/Resources/checkpoints/mainnet/1560000.json +7 -0
  220. package/ios/ZCashLightClientKit/Resources/checkpoints/mainnet/1570000.json +7 -0
  221. package/ios/ZCashLightClientKit/Resources/checkpoints/mainnet/1580000.json +7 -0
  222. package/ios/ZCashLightClientKit/Resources/checkpoints/mainnet/1590000.json +7 -0
  223. package/ios/ZCashLightClientKit/Resources/checkpoints/mainnet/1600000.json +7 -0
  224. package/ios/ZCashLightClientKit/Resources/checkpoints/mainnet/1610000.json +7 -0
  225. package/ios/ZCashLightClientKit/Resources/checkpoints/mainnet/1620000.json +7 -0
  226. package/ios/ZCashLightClientKit/Resources/checkpoints/mainnet/1630000.json +7 -0
  227. package/ios/ZCashLightClientKit/Resources/checkpoints/mainnet/1631000.json +7 -0
  228. package/ios/ZCashLightClientKit/Resources/checkpoints/mainnet/1640000.json +7 -0
  229. package/ios/ZCashLightClientKit/Resources/checkpoints/mainnet/1650000.json +7 -0
  230. package/ios/ZCashLightClientKit/Resources/checkpoints/mainnet/1660000.json +7 -0
  231. package/ios/ZCashLightClientKit/Resources/checkpoints/mainnet/1670000.json +7 -0
  232. package/ios/ZCashLightClientKit/Resources/checkpoints/mainnet/1680000.json +7 -0
  233. package/ios/ZCashLightClientKit/Resources/checkpoints/mainnet/1686871.json +7 -0
  234. package/ios/ZCashLightClientKit/Resources/checkpoints/mainnet/1687104.json +8 -0
  235. package/ios/ZCashLightClientKit/Resources/checkpoints/mainnet/1690000.json +8 -0
  236. package/ios/ZCashLightClientKit/Resources/checkpoints/mainnet/1700000.json +8 -0
  237. package/ios/ZCashLightClientKit/Resources/checkpoints/mainnet/1710000.json +8 -0
  238. package/ios/ZCashLightClientKit/Resources/checkpoints/mainnet/1720000.json +8 -0
  239. package/ios/ZCashLightClientKit/Resources/checkpoints/mainnet/1722500.json +8 -0
  240. package/ios/ZCashLightClientKit/Resources/checkpoints/mainnet/1725000.json +8 -0
  241. package/ios/ZCashLightClientKit/Resources/checkpoints/mainnet/1727500.json +8 -0
  242. package/ios/ZCashLightClientKit/Resources/checkpoints/mainnet/1730000.json +8 -0
  243. package/ios/ZCashLightClientKit/Resources/checkpoints/mainnet/1732500.json +8 -0
  244. package/ios/ZCashLightClientKit/Resources/checkpoints/mainnet/1735000.json +8 -0
  245. package/ios/ZCashLightClientKit/Resources/checkpoints/mainnet/1737500.json +8 -0
  246. package/ios/ZCashLightClientKit/Resources/checkpoints/mainnet/1740000.json +8 -0
  247. package/ios/ZCashLightClientKit/Resources/checkpoints/mainnet/1742500.json +8 -0
  248. package/ios/ZCashLightClientKit/Resources/checkpoints/mainnet/1745000.json +8 -0
  249. package/ios/ZCashLightClientKit/Resources/checkpoints/mainnet/1747500.json +8 -0
  250. package/ios/ZCashLightClientKit/Resources/checkpoints/mainnet/1750000.json +8 -0
  251. package/ios/ZCashLightClientKit/Resources/checkpoints/mainnet/1752500.json +8 -0
  252. package/ios/ZCashLightClientKit/Resources/checkpoints/mainnet/1755000.json +9 -0
  253. package/ios/ZCashLightClientKit/Resources/checkpoints/mainnet/1757500.json +8 -0
  254. package/ios/ZCashLightClientKit/Resources/checkpoints/mainnet/1760000.json +8 -0
  255. package/ios/ZCashLightClientKit/Resources/checkpoints/mainnet/1762500.json +8 -0
  256. package/ios/ZCashLightClientKit/Resources/checkpoints/mainnet/1765000.json +8 -0
  257. package/ios/ZCashLightClientKit/Resources/checkpoints/mainnet/1767500.json +8 -0
  258. package/ios/ZCashLightClientKit/Resources/checkpoints/mainnet/1770000.json +8 -0
  259. package/ios/ZCashLightClientKit/Resources/checkpoints/mainnet/1772500.json +8 -0
  260. package/ios/ZCashLightClientKit/Resources/checkpoints/mainnet/1775000.json +8 -0
  261. package/ios/ZCashLightClientKit/Resources/checkpoints/mainnet/1777500.json +8 -0
  262. package/ios/ZCashLightClientKit/Resources/checkpoints/mainnet/1780000.json +8 -0
  263. package/ios/ZCashLightClientKit/Resources/checkpoints/mainnet/1782500.json +8 -0
  264. package/ios/ZCashLightClientKit/Resources/checkpoints/mainnet/1785000.json +8 -0
  265. package/ios/ZCashLightClientKit/Resources/checkpoints/mainnet/1787500.json +8 -0
  266. package/ios/ZCashLightClientKit/Resources/checkpoints/mainnet/1790000.json +8 -0
  267. package/ios/ZCashLightClientKit/Resources/checkpoints/mainnet/1792500.json +8 -0
  268. package/ios/ZCashLightClientKit/Resources/checkpoints/mainnet/1795000.json +8 -0
  269. package/ios/ZCashLightClientKit/Resources/checkpoints/mainnet/1797500.json +8 -0
  270. package/ios/ZCashLightClientKit/Resources/checkpoints/mainnet/1800000.json +8 -0
  271. package/ios/ZCashLightClientKit/Resources/checkpoints/mainnet/1802500.json +8 -0
  272. package/ios/ZCashLightClientKit/Resources/checkpoints/mainnet/1805000.json +8 -0
  273. package/ios/ZCashLightClientKit/Resources/checkpoints/mainnet/1807500.json +8 -0
  274. package/ios/ZCashLightClientKit/Resources/checkpoints/mainnet/1810000.json +8 -0
  275. package/ios/ZCashLightClientKit/Resources/checkpoints/mainnet/1812500.json +8 -0
  276. package/ios/ZCashLightClientKit/Resources/checkpoints/mainnet/1815000.json +8 -0
  277. package/ios/ZCashLightClientKit/Resources/checkpoints/mainnet/1817500.json +8 -0
  278. package/ios/ZCashLightClientKit/Resources/checkpoints/mainnet/1820000.json +8 -0
  279. package/ios/ZCashLightClientKit/Resources/checkpoints/mainnet/1822500.json +8 -0
  280. package/ios/ZCashLightClientKit/Resources/checkpoints/mainnet/1825000.json +8 -0
  281. package/ios/ZCashLightClientKit/Resources/checkpoints/mainnet/1827500.json +8 -0
  282. package/ios/ZCashLightClientKit/Resources/checkpoints/mainnet/1830000.json +8 -0
  283. package/ios/ZCashLightClientKit/Resources/checkpoints/mainnet/1832500.json +8 -0
  284. package/ios/ZCashLightClientKit/Resources/checkpoints/mainnet/1835000.json +8 -0
  285. package/ios/ZCashLightClientKit/Resources/checkpoints/mainnet/1837500.json +8 -0
  286. package/ios/ZCashLightClientKit/Resources/checkpoints/mainnet/1840000.json +8 -0
  287. package/ios/ZCashLightClientKit/Resources/checkpoints/mainnet/1842500.json +8 -0
  288. package/ios/ZCashLightClientKit/Resources/checkpoints/mainnet/1845000.json +8 -0
  289. package/ios/ZCashLightClientKit/Resources/checkpoints/mainnet/1847500.json +8 -0
  290. package/ios/ZCashLightClientKit/Resources/checkpoints/mainnet/1850000.json +8 -0
  291. package/ios/ZCashLightClientKit/Resources/checkpoints/mainnet/1852500.json +8 -0
  292. package/ios/ZCashLightClientKit/Resources/checkpoints/mainnet/1855000.json +8 -0
  293. package/ios/ZCashLightClientKit/Resources/checkpoints/mainnet/1857500.json +8 -0
  294. package/ios/ZCashLightClientKit/Resources/checkpoints/mainnet/1860000.json +8 -0
  295. package/ios/ZCashLightClientKit/Resources/checkpoints/mainnet/1862500.json +8 -0
  296. package/ios/ZCashLightClientKit/Resources/checkpoints/mainnet/1865000.json +8 -0
  297. package/ios/ZCashLightClientKit/Resources/checkpoints/mainnet/1867500.json +8 -0
  298. package/ios/ZCashLightClientKit/Resources/checkpoints/mainnet/1870000.json +8 -0
  299. package/ios/ZCashLightClientKit/Resources/checkpoints/mainnet/1872500.json +8 -0
  300. package/ios/ZCashLightClientKit/Resources/checkpoints/mainnet/1875000.json +8 -0
  301. package/ios/ZCashLightClientKit/Resources/checkpoints/mainnet/1877500.json +8 -0
  302. package/ios/ZCashLightClientKit/Resources/checkpoints/mainnet/1880000.json +8 -0
  303. package/ios/ZCashLightClientKit/Resources/checkpoints/mainnet/1882500.json +8 -0
  304. package/ios/ZCashLightClientKit/Resources/checkpoints/mainnet/1885000.json +8 -0
  305. package/ios/ZCashLightClientKit/Resources/checkpoints/mainnet/1887500.json +8 -0
  306. package/ios/ZCashLightClientKit/Resources/checkpoints/mainnet/1890000.json +8 -0
  307. package/ios/ZCashLightClientKit/Resources/checkpoints/mainnet/1892500.json +8 -0
  308. package/ios/ZCashLightClientKit/Resources/checkpoints/mainnet/1895000.json +8 -0
  309. package/ios/ZCashLightClientKit/Resources/checkpoints/mainnet/1897500.json +8 -0
  310. package/ios/ZCashLightClientKit/Resources/checkpoints/mainnet/1900000.json +8 -0
  311. package/ios/ZCashLightClientKit/Resources/checkpoints/mainnet/1902500.json +8 -0
  312. package/ios/ZCashLightClientKit/Resources/checkpoints/mainnet/1905000.json +8 -0
  313. package/ios/ZCashLightClientKit/Resources/checkpoints/mainnet/1907500.json +8 -0
  314. package/ios/ZCashLightClientKit/Resources/checkpoints/mainnet/1910000.json +8 -0
  315. package/ios/ZCashLightClientKit/Resources/checkpoints/mainnet/1912500.json +8 -0
  316. package/ios/ZCashLightClientKit/Resources/checkpoints/mainnet/1915000.json +8 -0
  317. package/ios/ZCashLightClientKit/Resources/checkpoints/mainnet/1917500.json +8 -0
  318. package/ios/ZCashLightClientKit/Resources/checkpoints/mainnet/1920000.json +8 -0
  319. package/ios/ZCashLightClientKit/Resources/checkpoints/mainnet/1922500.json +8 -0
  320. package/ios/ZCashLightClientKit/Resources/checkpoints/mainnet/1925000.json +8 -0
  321. package/ios/ZCashLightClientKit/Resources/checkpoints/mainnet/1927500.json +8 -0
  322. package/ios/ZCashLightClientKit/Resources/checkpoints/mainnet/1930000.json +8 -0
  323. package/ios/ZCashLightClientKit/Resources/checkpoints/mainnet/1932500.json +8 -0
  324. package/ios/ZCashLightClientKit/Resources/checkpoints/mainnet/1935000.json +8 -0
  325. package/ios/ZCashLightClientKit/Resources/checkpoints/mainnet/1937500.json +8 -0
  326. package/ios/ZCashLightClientKit/Resources/checkpoints/mainnet/1940000.json +8 -0
  327. package/ios/ZCashLightClientKit/Resources/checkpoints/mainnet/1942500.json +8 -0
  328. package/ios/ZCashLightClientKit/Resources/checkpoints/mainnet/1945000.json +8 -0
  329. package/ios/ZCashLightClientKit/Resources/checkpoints/mainnet/1947500.json +8 -0
  330. package/ios/ZCashLightClientKit/Resources/checkpoints/mainnet/1950000.json +8 -0
  331. package/ios/ZCashLightClientKit/Resources/checkpoints/mainnet/1952500.json +8 -0
  332. package/ios/ZCashLightClientKit/Resources/checkpoints/mainnet/1955000.json +8 -0
  333. package/ios/ZCashLightClientKit/Resources/checkpoints/mainnet/1957500.json +8 -0
  334. package/ios/ZCashLightClientKit/Resources/checkpoints/mainnet/1960000.json +8 -0
  335. package/ios/ZCashLightClientKit/Resources/checkpoints/mainnet/1962500.json +8 -0
  336. package/ios/ZCashLightClientKit/Resources/checkpoints/mainnet/1965000.json +8 -0
  337. package/ios/ZCashLightClientKit/Resources/checkpoints/mainnet/1967500.json +8 -0
  338. package/ios/ZCashLightClientKit/Resources/checkpoints/mainnet/1970000.json +8 -0
  339. package/ios/ZCashLightClientKit/Resources/checkpoints/mainnet/1972500.json +8 -0
  340. package/ios/ZCashLightClientKit/Resources/checkpoints/mainnet/1975000.json +8 -0
  341. package/ios/ZCashLightClientKit/Resources/checkpoints/mainnet/1977500.json +8 -0
  342. package/ios/ZCashLightClientKit/Resources/checkpoints/mainnet/1980000.json +8 -0
  343. package/ios/ZCashLightClientKit/Resources/checkpoints/mainnet/1982500.json +8 -0
  344. package/ios/ZCashLightClientKit/Resources/checkpoints/mainnet/1985000.json +8 -0
  345. package/ios/ZCashLightClientKit/Resources/checkpoints/mainnet/1987500.json +8 -0
  346. package/ios/ZCashLightClientKit/Resources/checkpoints/mainnet/1990000.json +8 -0
  347. package/ios/ZCashLightClientKit/Resources/checkpoints/mainnet/1992500.json +8 -0
  348. package/ios/ZCashLightClientKit/Resources/checkpoints/mainnet/1995000.json +8 -0
  349. package/ios/ZCashLightClientKit/Resources/checkpoints/mainnet/1997500.json +8 -0
  350. package/ios/ZCashLightClientKit/Resources/checkpoints/mainnet/2000000.json +8 -0
  351. package/ios/ZCashLightClientKit/Resources/checkpoints/mainnet/2002500.json +8 -0
  352. package/ios/ZCashLightClientKit/Resources/checkpoints/mainnet/2005000.json +8 -0
  353. package/ios/ZCashLightClientKit/Resources/checkpoints/mainnet/2007500.json +8 -0
  354. package/ios/ZCashLightClientKit/Resources/checkpoints/mainnet/2010000.json +8 -0
  355. package/ios/ZCashLightClientKit/Resources/checkpoints/mainnet/2012500.json +8 -0
  356. package/ios/ZCashLightClientKit/Resources/checkpoints/mainnet/2015000.json +8 -0
  357. package/ios/ZCashLightClientKit/Resources/checkpoints/mainnet/2017500.json +8 -0
  358. package/ios/ZCashLightClientKit/Resources/checkpoints/mainnet/2020000.json +8 -0
  359. package/ios/ZCashLightClientKit/Resources/checkpoints/mainnet/2022500.json +8 -0
  360. package/ios/ZCashLightClientKit/Resources/checkpoints/mainnet/2025000.json +8 -0
  361. package/ios/ZCashLightClientKit/Resources/checkpoints/mainnet/2027500.json +8 -0
  362. package/ios/ZCashLightClientKit/Resources/checkpoints/mainnet/2030000.json +8 -0
  363. package/ios/ZCashLightClientKit/Resources/checkpoints/mainnet/2032500.json +8 -0
  364. package/ios/ZCashLightClientKit/Resources/checkpoints/mainnet/2035000.json +8 -0
  365. package/ios/ZCashLightClientKit/Resources/checkpoints/mainnet/2037500.json +8 -0
  366. package/ios/ZCashLightClientKit/Resources/checkpoints/mainnet/2040000.json +8 -0
  367. package/ios/ZCashLightClientKit/Resources/checkpoints/mainnet/2042500.json +8 -0
  368. package/ios/ZCashLightClientKit/Resources/checkpoints/mainnet/2045000.json +8 -0
  369. package/ios/ZCashLightClientKit/Resources/checkpoints/mainnet/2047500.json +8 -0
  370. package/ios/ZCashLightClientKit/Resources/checkpoints/mainnet/2050000.json +8 -0
  371. package/ios/ZCashLightClientKit/Resources/checkpoints/mainnet/2052500.json +8 -0
  372. package/ios/ZCashLightClientKit/Resources/checkpoints/mainnet/2055000.json +8 -0
  373. package/ios/ZCashLightClientKit/Resources/checkpoints/mainnet/2057500.json +8 -0
  374. package/ios/ZCashLightClientKit/Resources/checkpoints/mainnet/2060000.json +8 -0
  375. package/ios/ZCashLightClientKit/Resources/checkpoints/mainnet/2062500.json +8 -0
  376. package/ios/ZCashLightClientKit/Resources/checkpoints/mainnet/2065000.json +8 -0
  377. package/ios/ZCashLightClientKit/Resources/checkpoints/mainnet/2067500.json +8 -0
  378. package/ios/ZCashLightClientKit/Resources/checkpoints/mainnet/2070000.json +8 -0
  379. package/ios/ZCashLightClientKit/Resources/checkpoints/mainnet/2072500.json +8 -0
  380. package/ios/ZCashLightClientKit/Resources/checkpoints/mainnet/2075000.json +8 -0
  381. package/ios/ZCashLightClientKit/Resources/checkpoints/mainnet/2077500.json +8 -0
  382. package/ios/ZCashLightClientKit/Resources/checkpoints/mainnet/2080000.json +8 -0
  383. package/ios/ZCashLightClientKit/Resources/checkpoints/mainnet/2082500.json +8 -0
  384. package/ios/ZCashLightClientKit/Resources/checkpoints/mainnet/2085000.json +8 -0
  385. package/ios/ZCashLightClientKit/Resources/checkpoints/mainnet/2087500.json +8 -0
  386. package/ios/ZCashLightClientKit/Resources/checkpoints/mainnet/2090000.json +8 -0
  387. package/ios/ZCashLightClientKit/Resources/checkpoints/mainnet/2100000.json +8 -0
  388. package/ios/ZCashLightClientKit/Resources/checkpoints/mainnet/2110000.json +8 -0
  389. package/ios/ZCashLightClientKit/Resources/checkpoints/mainnet/2120000.json +8 -0
  390. package/ios/ZCashLightClientKit/Resources/checkpoints/mainnet/2130000.json +8 -0
  391. package/ios/ZCashLightClientKit/Resources/checkpoints/mainnet/2140000.json +8 -0
  392. package/ios/ZCashLightClientKit/Resources/checkpoints/mainnet/2150000.json +8 -0
  393. package/ios/ZCashLightClientKit/Resources/checkpoints/mainnet/2160000.json +8 -0
  394. package/ios/ZCashLightClientKit/Resources/checkpoints/mainnet/2170000.json +8 -0
  395. package/ios/ZCashLightClientKit/Resources/checkpoints/mainnet/2180000.json +8 -0
  396. package/ios/ZCashLightClientKit/Resources/checkpoints/mainnet/2190000.json +8 -0
  397. package/ios/ZCashLightClientKit/Resources/checkpoints/mainnet/2200000.json +8 -0
  398. package/ios/ZCashLightClientKit/Resources/checkpoints/mainnet/2210000.json +8 -0
  399. package/ios/ZCashLightClientKit/Resources/checkpoints/mainnet/419200.json +7 -0
  400. package/ios/ZCashLightClientKit/Resources/checkpoints/mainnet/500000.json +7 -0
  401. package/ios/ZCashLightClientKit/Resources/checkpoints/mainnet/510000.json +7 -0
  402. package/ios/ZCashLightClientKit/Resources/checkpoints/mainnet/520000.json +7 -0
  403. package/ios/ZCashLightClientKit/Resources/checkpoints/mainnet/530000.json +7 -0
  404. package/ios/ZCashLightClientKit/Resources/checkpoints/mainnet/540000.json +7 -0
  405. package/ios/ZCashLightClientKit/Resources/checkpoints/mainnet/550000.json +7 -0
  406. package/ios/ZCashLightClientKit/Resources/checkpoints/mainnet/560000.json +7 -0
  407. package/ios/ZCashLightClientKit/Resources/checkpoints/mainnet/570000.json +7 -0
  408. package/ios/ZCashLightClientKit/Resources/checkpoints/mainnet/580000.json +7 -0
  409. package/ios/ZCashLightClientKit/Resources/checkpoints/mainnet/590000.json +7 -0
  410. package/ios/ZCashLightClientKit/Resources/checkpoints/mainnet/600000.json +7 -0
  411. package/ios/ZCashLightClientKit/Resources/checkpoints/mainnet/610000.json +7 -0
  412. package/ios/ZCashLightClientKit/Resources/checkpoints/mainnet/620000.json +7 -0
  413. package/ios/ZCashLightClientKit/Resources/checkpoints/mainnet/630000.json +7 -0
  414. package/ios/ZCashLightClientKit/Resources/checkpoints/mainnet/640000.json +7 -0
  415. package/ios/ZCashLightClientKit/Resources/checkpoints/mainnet/650000.json +7 -0
  416. package/ios/ZCashLightClientKit/Resources/checkpoints/mainnet/660000.json +7 -0
  417. package/ios/ZCashLightClientKit/Resources/checkpoints/mainnet/663150.json +8 -0
  418. package/ios/ZCashLightClientKit/Resources/checkpoints/mainnet/670000.json +7 -0
  419. package/ios/ZCashLightClientKit/Resources/checkpoints/mainnet/680000.json +7 -0
  420. package/ios/ZCashLightClientKit/Resources/checkpoints/mainnet/690000.json +7 -0
  421. package/ios/ZCashLightClientKit/Resources/checkpoints/mainnet/700000.json +7 -0
  422. package/ios/ZCashLightClientKit/Resources/checkpoints/mainnet/710000.json +7 -0
  423. package/ios/ZCashLightClientKit/Resources/checkpoints/mainnet/720000.json +7 -0
  424. package/ios/ZCashLightClientKit/Resources/checkpoints/mainnet/730000.json +7 -0
  425. package/ios/ZCashLightClientKit/Resources/checkpoints/mainnet/740000.json +7 -0
  426. package/ios/ZCashLightClientKit/Resources/checkpoints/mainnet/750000.json +7 -0
  427. package/ios/ZCashLightClientKit/Resources/checkpoints/mainnet/760000.json +7 -0
  428. package/ios/ZCashLightClientKit/Resources/checkpoints/mainnet/770000.json +7 -0
  429. package/ios/ZCashLightClientKit/Resources/checkpoints/mainnet/780000.json +7 -0
  430. package/ios/ZCashLightClientKit/Resources/checkpoints/mainnet/790000.json +7 -0
  431. package/ios/ZCashLightClientKit/Resources/checkpoints/mainnet/800000.json +7 -0
  432. package/ios/ZCashLightClientKit/Resources/checkpoints/mainnet/810000.json +7 -0
  433. package/ios/ZCashLightClientKit/Resources/checkpoints/mainnet/820000.json +7 -0
  434. package/ios/ZCashLightClientKit/Resources/checkpoints/mainnet/830000.json +7 -0
  435. package/ios/ZCashLightClientKit/Resources/checkpoints/mainnet/840000.json +7 -0
  436. package/ios/ZCashLightClientKit/Resources/checkpoints/mainnet/850000.json +7 -0
  437. package/ios/ZCashLightClientKit/Resources/checkpoints/mainnet/860000.json +7 -0
  438. package/ios/ZCashLightClientKit/Resources/checkpoints/mainnet/870000.json +7 -0
  439. package/ios/ZCashLightClientKit/Resources/checkpoints/mainnet/880000.json +7 -0
  440. package/ios/ZCashLightClientKit/Resources/checkpoints/mainnet/890000.json +7 -0
  441. package/ios/ZCashLightClientKit/Resources/checkpoints/mainnet/900000.json +7 -0
  442. package/ios/ZCashLightClientKit/Resources/checkpoints/mainnet/910000.json +7 -0
  443. package/ios/ZCashLightClientKit/Resources/checkpoints/mainnet/920000.json +7 -0
  444. package/ios/ZCashLightClientKit/Resources/checkpoints/mainnet/930000.json +7 -0
  445. package/ios/ZCashLightClientKit/Resources/checkpoints/mainnet/940000.json +7 -0
  446. package/ios/ZCashLightClientKit/Resources/checkpoints/mainnet/950000.json +7 -0
  447. package/ios/ZCashLightClientKit/Resources/checkpoints/mainnet/960000.json +7 -0
  448. package/ios/ZCashLightClientKit/Resources/checkpoints/mainnet/970000.json +7 -0
  449. package/ios/ZCashLightClientKit/Resources/checkpoints/mainnet/980000.json +7 -0
  450. package/ios/ZCashLightClientKit/Resources/checkpoints/mainnet/990000.json +7 -0
  451. package/ios/ZCashLightClientKit/Resources/checkpoints/testnet/1000000.json +7 -0
  452. package/ios/ZCashLightClientKit/Resources/checkpoints/testnet/1010000.json +7 -0
  453. package/ios/ZCashLightClientKit/Resources/checkpoints/testnet/1020000.json +7 -0
  454. package/ios/ZCashLightClientKit/Resources/checkpoints/testnet/1030000.json +7 -0
  455. package/ios/ZCashLightClientKit/Resources/checkpoints/testnet/1040000.json +7 -0
  456. package/ios/ZCashLightClientKit/Resources/checkpoints/testnet/1050000.json +7 -0
  457. package/ios/ZCashLightClientKit/Resources/checkpoints/testnet/1060000.json +7 -0
  458. package/ios/ZCashLightClientKit/Resources/checkpoints/testnet/1070000.json +7 -0
  459. package/ios/ZCashLightClientKit/Resources/checkpoints/testnet/1080000.json +7 -0
  460. package/ios/ZCashLightClientKit/Resources/checkpoints/testnet/1090000.json +7 -0
  461. package/ios/ZCashLightClientKit/Resources/checkpoints/testnet/1100000.json +7 -0
  462. package/ios/ZCashLightClientKit/Resources/checkpoints/testnet/1110000.json +7 -0
  463. package/ios/ZCashLightClientKit/Resources/checkpoints/testnet/1120000.json +7 -0
  464. package/ios/ZCashLightClientKit/Resources/checkpoints/testnet/1130000.json +7 -0
  465. package/ios/ZCashLightClientKit/Resources/checkpoints/testnet/1140000.json +7 -0
  466. package/ios/ZCashLightClientKit/Resources/checkpoints/testnet/1150000.json +7 -0
  467. package/ios/ZCashLightClientKit/Resources/checkpoints/testnet/1160000.json +7 -0
  468. package/ios/ZCashLightClientKit/Resources/checkpoints/testnet/1170000.json +7 -0
  469. package/ios/ZCashLightClientKit/Resources/checkpoints/testnet/1180000.json +7 -0
  470. package/ios/ZCashLightClientKit/Resources/checkpoints/testnet/1190000.json +7 -0
  471. package/ios/ZCashLightClientKit/Resources/checkpoints/testnet/1200000.json +7 -0
  472. package/ios/ZCashLightClientKit/Resources/checkpoints/testnet/1210000.json +7 -0
  473. package/ios/ZCashLightClientKit/Resources/checkpoints/testnet/1220000.json +7 -0
  474. package/ios/ZCashLightClientKit/Resources/checkpoints/testnet/1230000.json +7 -0
  475. package/ios/ZCashLightClientKit/Resources/checkpoints/testnet/1240000.json +7 -0
  476. package/ios/ZCashLightClientKit/Resources/checkpoints/testnet/1250000.json +7 -0
  477. package/ios/ZCashLightClientKit/Resources/checkpoints/testnet/1260000.json +7 -0
  478. package/ios/ZCashLightClientKit/Resources/checkpoints/testnet/1270000.json +7 -0
  479. package/ios/ZCashLightClientKit/Resources/checkpoints/testnet/1280000.json +7 -0
  480. package/ios/ZCashLightClientKit/Resources/checkpoints/testnet/1290000.json +7 -0
  481. package/ios/ZCashLightClientKit/Resources/checkpoints/testnet/1300000.json +7 -0
  482. package/ios/ZCashLightClientKit/Resources/checkpoints/testnet/1310000.json +7 -0
  483. package/ios/ZCashLightClientKit/Resources/checkpoints/testnet/1320000.json +7 -0
  484. package/ios/ZCashLightClientKit/Resources/checkpoints/testnet/1330000.json +7 -0
  485. package/ios/ZCashLightClientKit/Resources/checkpoints/testnet/1340000.json +7 -0
  486. package/ios/ZCashLightClientKit/Resources/checkpoints/testnet/1350000.json +7 -0
  487. package/ios/ZCashLightClientKit/Resources/checkpoints/testnet/1360000.json +7 -0
  488. package/ios/ZCashLightClientKit/Resources/checkpoints/testnet/1370000.json +7 -0
  489. package/ios/ZCashLightClientKit/Resources/checkpoints/testnet/1380000.json +7 -0
  490. package/ios/ZCashLightClientKit/Resources/checkpoints/testnet/1390000.json +7 -0
  491. package/ios/ZCashLightClientKit/Resources/checkpoints/testnet/1400000.json +7 -0
  492. package/ios/ZCashLightClientKit/Resources/checkpoints/testnet/1410000.json +7 -0
  493. package/ios/ZCashLightClientKit/Resources/checkpoints/testnet/1420000.json +7 -0
  494. package/ios/ZCashLightClientKit/Resources/checkpoints/testnet/1430000.json +7 -0
  495. package/ios/ZCashLightClientKit/Resources/checkpoints/testnet/1440000.json +7 -0
  496. package/ios/ZCashLightClientKit/Resources/checkpoints/testnet/1450000.json +7 -0
  497. package/ios/ZCashLightClientKit/Resources/checkpoints/testnet/1460000.json +7 -0
  498. package/ios/ZCashLightClientKit/Resources/checkpoints/testnet/1470000.json +7 -0
  499. package/ios/ZCashLightClientKit/Resources/checkpoints/testnet/1480000.json +7 -0
  500. package/ios/ZCashLightClientKit/Resources/checkpoints/testnet/1490000.json +7 -0
  501. package/ios/ZCashLightClientKit/Resources/checkpoints/testnet/1500000.json +7 -0
  502. package/ios/ZCashLightClientKit/Resources/checkpoints/testnet/1510000.json +7 -0
  503. package/ios/ZCashLightClientKit/Resources/checkpoints/testnet/1520000.json +7 -0
  504. package/ios/ZCashLightClientKit/Resources/checkpoints/testnet/1530000.json +7 -0
  505. package/ios/ZCashLightClientKit/Resources/checkpoints/testnet/1540000.json +7 -0
  506. package/ios/ZCashLightClientKit/Resources/checkpoints/testnet/1550000.json +7 -0
  507. package/ios/ZCashLightClientKit/Resources/checkpoints/testnet/1560000.json +7 -0
  508. package/ios/ZCashLightClientKit/Resources/checkpoints/testnet/1570000.json +7 -0
  509. package/ios/ZCashLightClientKit/Resources/checkpoints/testnet/1580000.json +7 -0
  510. package/ios/ZCashLightClientKit/Resources/checkpoints/testnet/1590000.json +7 -0
  511. package/ios/ZCashLightClientKit/Resources/checkpoints/testnet/1600000.json +7 -0
  512. package/ios/ZCashLightClientKit/Resources/checkpoints/testnet/1610000.json +7 -0
  513. package/ios/ZCashLightClientKit/Resources/checkpoints/testnet/1620000.json +7 -0
  514. package/ios/ZCashLightClientKit/Resources/checkpoints/testnet/1630000.json +7 -0
  515. package/ios/ZCashLightClientKit/Resources/checkpoints/testnet/1640000.json +7 -0
  516. package/ios/ZCashLightClientKit/Resources/checkpoints/testnet/1650000.json +7 -0
  517. package/ios/ZCashLightClientKit/Resources/checkpoints/testnet/1660000.json +7 -0
  518. package/ios/ZCashLightClientKit/Resources/checkpoints/testnet/1670000.json +7 -0
  519. package/ios/ZCashLightClientKit/Resources/checkpoints/testnet/1680000.json +7 -0
  520. package/ios/ZCashLightClientKit/Resources/checkpoints/testnet/1690000.json +7 -0
  521. package/ios/ZCashLightClientKit/Resources/checkpoints/testnet/1700000.json +7 -0
  522. package/ios/ZCashLightClientKit/Resources/checkpoints/testnet/1710000.json +7 -0
  523. package/ios/ZCashLightClientKit/Resources/checkpoints/testnet/1720000.json +7 -0
  524. package/ios/ZCashLightClientKit/Resources/checkpoints/testnet/1730000.json +7 -0
  525. package/ios/ZCashLightClientKit/Resources/checkpoints/testnet/1740000.json +7 -0
  526. package/ios/ZCashLightClientKit/Resources/checkpoints/testnet/1750000.json +7 -0
  527. package/ios/ZCashLightClientKit/Resources/checkpoints/testnet/1760000.json +7 -0
  528. package/ios/ZCashLightClientKit/Resources/checkpoints/testnet/1770000.json +7 -0
  529. package/ios/ZCashLightClientKit/Resources/checkpoints/testnet/1780000.json +7 -0
  530. package/ios/ZCashLightClientKit/Resources/checkpoints/testnet/1790000.json +7 -0
  531. package/ios/ZCashLightClientKit/Resources/checkpoints/testnet/1800000.json +7 -0
  532. package/ios/ZCashLightClientKit/Resources/checkpoints/testnet/1810000.json +7 -0
  533. package/ios/ZCashLightClientKit/Resources/checkpoints/testnet/1820000.json +7 -0
  534. package/ios/ZCashLightClientKit/Resources/checkpoints/testnet/1830000.json +7 -0
  535. package/ios/ZCashLightClientKit/Resources/checkpoints/testnet/1840000.json +7 -0
  536. package/ios/ZCashLightClientKit/Resources/checkpoints/testnet/1842420.json +8 -0
  537. package/ios/ZCashLightClientKit/Resources/checkpoints/testnet/1850000.json +8 -0
  538. package/ios/ZCashLightClientKit/Resources/checkpoints/testnet/1860000.json +8 -0
  539. package/ios/ZCashLightClientKit/Resources/checkpoints/testnet/1870000.json +8 -0
  540. package/ios/ZCashLightClientKit/Resources/checkpoints/testnet/1880000.json +8 -0
  541. package/ios/ZCashLightClientKit/Resources/checkpoints/testnet/1890000.json +8 -0
  542. package/ios/ZCashLightClientKit/Resources/checkpoints/testnet/1900000.json +8 -0
  543. package/ios/ZCashLightClientKit/Resources/checkpoints/testnet/1910000.json +8 -0
  544. package/ios/ZCashLightClientKit/Resources/checkpoints/testnet/1920000.json +8 -0
  545. package/ios/ZCashLightClientKit/Resources/checkpoints/testnet/1930000.json +8 -0
  546. package/ios/ZCashLightClientKit/Resources/checkpoints/testnet/1940000.json +8 -0
  547. package/ios/ZCashLightClientKit/Resources/checkpoints/testnet/1950000.json +8 -0
  548. package/ios/ZCashLightClientKit/Resources/checkpoints/testnet/1960000.json +8 -0
  549. package/ios/ZCashLightClientKit/Resources/checkpoints/testnet/1970000.json +8 -0
  550. package/ios/ZCashLightClientKit/Resources/checkpoints/testnet/1980000.json +8 -0
  551. package/ios/ZCashLightClientKit/Resources/checkpoints/testnet/1990000.json +8 -0
  552. package/ios/ZCashLightClientKit/Resources/checkpoints/testnet/2000000.json +8 -0
  553. package/ios/ZCashLightClientKit/Resources/checkpoints/testnet/2010000.json +8 -0
  554. package/ios/ZCashLightClientKit/Resources/checkpoints/testnet/2020000.json +8 -0
  555. package/ios/ZCashLightClientKit/Resources/checkpoints/testnet/2030000.json +8 -0
  556. package/ios/ZCashLightClientKit/Resources/checkpoints/testnet/2040000.json +8 -0
  557. package/ios/ZCashLightClientKit/Resources/checkpoints/testnet/2050000.json +8 -0
  558. package/ios/ZCashLightClientKit/Resources/checkpoints/testnet/2060000.json +8 -0
  559. package/ios/ZCashLightClientKit/Resources/checkpoints/testnet/2070000.json +8 -0
  560. package/ios/ZCashLightClientKit/Resources/checkpoints/testnet/2080000.json +8 -0
  561. package/ios/ZCashLightClientKit/Resources/checkpoints/testnet/2090000.json +8 -0
  562. package/ios/ZCashLightClientKit/Resources/checkpoints/testnet/2100000.json +8 -0
  563. package/ios/ZCashLightClientKit/Resources/checkpoints/testnet/2110000.json +8 -0
  564. package/ios/ZCashLightClientKit/Resources/checkpoints/testnet/2120000.json +8 -0
  565. package/ios/ZCashLightClientKit/Resources/checkpoints/testnet/2130000.json +8 -0
  566. package/ios/ZCashLightClientKit/Resources/checkpoints/testnet/2140000.json +8 -0
  567. package/ios/ZCashLightClientKit/Resources/checkpoints/testnet/2150000.json +8 -0
  568. package/ios/ZCashLightClientKit/Resources/checkpoints/testnet/2160000.json +8 -0
  569. package/ios/ZCashLightClientKit/Resources/checkpoints/testnet/2170000.json +8 -0
  570. package/ios/ZCashLightClientKit/Resources/checkpoints/testnet/2180000.json +8 -0
  571. package/ios/ZCashLightClientKit/Resources/checkpoints/testnet/2190000.json +8 -0
  572. package/ios/ZCashLightClientKit/Resources/checkpoints/testnet/2200000.json +8 -0
  573. package/ios/ZCashLightClientKit/Resources/checkpoints/testnet/2210000.json +8 -0
  574. package/ios/ZCashLightClientKit/Resources/checkpoints/testnet/2220000.json +8 -0
  575. package/ios/ZCashLightClientKit/Resources/checkpoints/testnet/2230000.json +8 -0
  576. package/ios/ZCashLightClientKit/Resources/checkpoints/testnet/2240000.json +8 -0
  577. package/ios/ZCashLightClientKit/Resources/checkpoints/testnet/2250000.json +8 -0
  578. package/ios/ZCashLightClientKit/Resources/checkpoints/testnet/2260000.json +8 -0
  579. package/ios/ZCashLightClientKit/Resources/checkpoints/testnet/2270000.json +8 -0
  580. package/ios/ZCashLightClientKit/Resources/checkpoints/testnet/2280000.json +8 -0
  581. package/ios/ZCashLightClientKit/Resources/checkpoints/testnet/2290000.json +8 -0
  582. package/ios/ZCashLightClientKit/Resources/checkpoints/testnet/2300000.json +8 -0
  583. package/ios/ZCashLightClientKit/Resources/checkpoints/testnet/2310000.json +8 -0
  584. package/ios/ZCashLightClientKit/Resources/checkpoints/testnet/2320000.json +8 -0
  585. package/ios/ZCashLightClientKit/Resources/checkpoints/testnet/2330000.json +8 -0
  586. package/ios/ZCashLightClientKit/Resources/checkpoints/testnet/2340000.json +8 -0
  587. package/ios/ZCashLightClientKit/Resources/checkpoints/testnet/280000.json +7 -0
  588. package/ios/ZCashLightClientKit/Resources/checkpoints/testnet/290000.json +7 -0
  589. package/ios/ZCashLightClientKit/Resources/checkpoints/testnet/300000.json +7 -0
  590. package/ios/ZCashLightClientKit/Resources/checkpoints/testnet/310000.json +7 -0
  591. package/ios/ZCashLightClientKit/Resources/checkpoints/testnet/320000.json +7 -0
  592. package/ios/ZCashLightClientKit/Resources/checkpoints/testnet/330000.json +7 -0
  593. package/ios/ZCashLightClientKit/Resources/checkpoints/testnet/340000.json +7 -0
  594. package/ios/ZCashLightClientKit/Resources/checkpoints/testnet/350000.json +7 -0
  595. package/ios/ZCashLightClientKit/Resources/checkpoints/testnet/360000.json +7 -0
  596. package/ios/ZCashLightClientKit/Resources/checkpoints/testnet/370000.json +7 -0
  597. package/ios/ZCashLightClientKit/Resources/checkpoints/testnet/380000.json +7 -0
  598. package/ios/ZCashLightClientKit/Resources/checkpoints/testnet/390000.json +7 -0
  599. package/ios/ZCashLightClientKit/Resources/checkpoints/testnet/400000.json +7 -0
  600. package/ios/ZCashLightClientKit/Resources/checkpoints/testnet/410000.json +7 -0
  601. package/ios/ZCashLightClientKit/Resources/checkpoints/testnet/420000.json +7 -0
  602. package/ios/ZCashLightClientKit/Resources/checkpoints/testnet/430000.json +7 -0
  603. package/ios/ZCashLightClientKit/Resources/checkpoints/testnet/440000.json +7 -0
  604. package/ios/ZCashLightClientKit/Resources/checkpoints/testnet/450000.json +7 -0
  605. package/ios/ZCashLightClientKit/Resources/checkpoints/testnet/460000.json +7 -0
  606. package/ios/ZCashLightClientKit/Resources/checkpoints/testnet/470000.json +7 -0
  607. package/ios/ZCashLightClientKit/Resources/checkpoints/testnet/480000.json +7 -0
  608. package/ios/ZCashLightClientKit/Resources/checkpoints/testnet/490000.json +7 -0
  609. package/ios/ZCashLightClientKit/Resources/checkpoints/testnet/500000.json +7 -0
  610. package/ios/ZCashLightClientKit/Resources/checkpoints/testnet/510000.json +7 -0
  611. package/ios/ZCashLightClientKit/Resources/checkpoints/testnet/520000.json +7 -0
  612. package/ios/ZCashLightClientKit/Resources/checkpoints/testnet/530000.json +7 -0
  613. package/ios/ZCashLightClientKit/Resources/checkpoints/testnet/540000.json +7 -0
  614. package/ios/ZCashLightClientKit/Resources/checkpoints/testnet/550000.json +7 -0
  615. package/ios/ZCashLightClientKit/Resources/checkpoints/testnet/560000.json +7 -0
  616. package/ios/ZCashLightClientKit/Resources/checkpoints/testnet/570000.json +7 -0
  617. package/ios/ZCashLightClientKit/Resources/checkpoints/testnet/580000.json +7 -0
  618. package/ios/ZCashLightClientKit/Resources/checkpoints/testnet/590000.json +7 -0
  619. package/ios/ZCashLightClientKit/Resources/checkpoints/testnet/600000.json +7 -0
  620. package/ios/ZCashLightClientKit/Resources/checkpoints/testnet/610000.json +7 -0
  621. package/ios/ZCashLightClientKit/Resources/checkpoints/testnet/620000.json +7 -0
  622. package/ios/ZCashLightClientKit/Resources/checkpoints/testnet/630000.json +7 -0
  623. package/ios/ZCashLightClientKit/Resources/checkpoints/testnet/640000.json +7 -0
  624. package/ios/ZCashLightClientKit/Resources/checkpoints/testnet/650000.json +7 -0
  625. package/ios/ZCashLightClientKit/Resources/checkpoints/testnet/660000.json +7 -0
  626. package/ios/ZCashLightClientKit/Resources/checkpoints/testnet/670000.json +7 -0
  627. package/ios/ZCashLightClientKit/Resources/checkpoints/testnet/680000.json +7 -0
  628. package/ios/ZCashLightClientKit/Resources/checkpoints/testnet/690000.json +7 -0
  629. package/ios/ZCashLightClientKit/Resources/checkpoints/testnet/700000.json +7 -0
  630. package/ios/ZCashLightClientKit/Resources/checkpoints/testnet/710000.json +7 -0
  631. package/ios/ZCashLightClientKit/Resources/checkpoints/testnet/720000.json +7 -0
  632. package/ios/ZCashLightClientKit/Resources/checkpoints/testnet/730000.json +7 -0
  633. package/ios/ZCashLightClientKit/Resources/checkpoints/testnet/740000.json +7 -0
  634. package/ios/ZCashLightClientKit/Resources/checkpoints/testnet/750000.json +7 -0
  635. package/ios/ZCashLightClientKit/Resources/checkpoints/testnet/760000.json +7 -0
  636. package/ios/ZCashLightClientKit/Resources/checkpoints/testnet/770000.json +7 -0
  637. package/ios/ZCashLightClientKit/Resources/checkpoints/testnet/780000.json +7 -0
  638. package/ios/ZCashLightClientKit/Resources/checkpoints/testnet/790000.json +7 -0
  639. package/ios/ZCashLightClientKit/Resources/checkpoints/testnet/800000.json +7 -0
  640. package/ios/ZCashLightClientKit/Resources/checkpoints/testnet/810000.json +7 -0
  641. package/ios/ZCashLightClientKit/Resources/checkpoints/testnet/820000.json +7 -0
  642. package/ios/ZCashLightClientKit/Resources/checkpoints/testnet/830000.json +7 -0
  643. package/ios/ZCashLightClientKit/Resources/checkpoints/testnet/840000.json +7 -0
  644. package/ios/ZCashLightClientKit/Resources/checkpoints/testnet/850000.json +7 -0
  645. package/ios/ZCashLightClientKit/Resources/checkpoints/testnet/860000.json +7 -0
  646. package/ios/ZCashLightClientKit/Resources/checkpoints/testnet/870000.json +7 -0
  647. package/ios/ZCashLightClientKit/Resources/checkpoints/testnet/880000.json +7 -0
  648. package/ios/ZCashLightClientKit/Resources/checkpoints/testnet/890000.json +7 -0
  649. package/ios/ZCashLightClientKit/Resources/checkpoints/testnet/900000.json +7 -0
  650. package/ios/ZCashLightClientKit/Resources/checkpoints/testnet/910000.json +7 -0
  651. package/ios/ZCashLightClientKit/Resources/checkpoints/testnet/920000.json +7 -0
  652. package/ios/ZCashLightClientKit/Resources/checkpoints/testnet/930000.json +7 -0
  653. package/ios/ZCashLightClientKit/Resources/checkpoints/testnet/940000.json +7 -0
  654. package/ios/ZCashLightClientKit/Resources/checkpoints/testnet/950000.json +7 -0
  655. package/ios/ZCashLightClientKit/Resources/checkpoints/testnet/960000.json +7 -0
  656. package/ios/ZCashLightClientKit/Resources/checkpoints/testnet/970000.json +7 -0
  657. package/ios/ZCashLightClientKit/Resources/checkpoints/testnet/980000.json +7 -0
  658. package/ios/ZCashLightClientKit/Resources/checkpoints/testnet/990000.json +7 -0
  659. package/ios/ZCashLightClientKit/Rust/ZcashKeyDerivationBackend.swift +218 -0
  660. package/ios/ZCashLightClientKit/Rust/ZcashKeyDerivationBackendWelding.swift +88 -0
  661. package/ios/ZCashLightClientKit/Rust/ZcashRustBackend.swift +531 -604
  662. package/ios/ZCashLightClientKit/Rust/ZcashRustBackendWelding.swift +223 -356
  663. package/ios/ZCashLightClientKit/Rust/zcashlc.h +802 -136
  664. package/ios/ZCashLightClientKit/Synchronizer/ClosureSDKSynchronizer.swift +180 -0
  665. package/ios/ZCashLightClientKit/Synchronizer/CombineSDKSynchronizer.swift +175 -0
  666. package/ios/ZCashLightClientKit/Synchronizer/Dependencies.swift +207 -0
  667. package/ios/ZCashLightClientKit/Synchronizer/SDKSynchronizer.swift +527 -793
  668. package/ios/ZCashLightClientKit/Synchronizer.swift +416 -342
  669. package/ios/ZCashLightClientKit/Tool/DerivationTool.swift +163 -300
  670. package/ios/ZCashLightClientKit/Transaction/TransactionEncoder.swift +39 -89
  671. package/ios/ZCashLightClientKit/Transaction/WalletTransactionEncoder.swift +93 -144
  672. package/ios/ZCashLightClientKit/Utils/AsyncToClosureGateway.swift +46 -0
  673. package/ios/ZCashLightClientKit/Utils/AsyncToCombineGateway.swift +59 -0
  674. package/ios/ZCashLightClientKit/Utils/Clamped.swift +32 -0
  675. package/ios/ZCashLightClientKit/Utils/DIContainer.swift +86 -0
  676. package/ios/ZCashLightClientKit/Utils/GenericActor.swift +18 -0
  677. package/ios/ZCashLightClientKit/Utils/LoggingProxy.swift +22 -21
  678. package/ios/ZCashLightClientKit/Utils/OSLogger.swift +109 -0
  679. package/ios/ZCashLightClientKit/Utils/SaplingParameterDownloader.swift +124 -89
  680. package/ios/ZCashLightClientKit/Utils/SpecificCombineTypes.swift +16 -0
  681. package/ios/ZCashLightClientKit/Utils/SyncSessionIDGenerator.swift +32 -0
  682. package/ios/ZCashLightClientKit/Utils/Task+sleep.swift +14 -0
  683. package/ios/ZCashLightClientKit/Utils/UsedAliasesChecker.swift +41 -0
  684. package/ios/libzcashlc.xcframework/Info.plist +5 -5
  685. package/ios/libzcashlc.xcframework/ios-arm64/libzcashlc.a +0 -0
  686. package/ios/libzcashlc.xcframework/ios-arm64_x86_64-simulator/libzcashlc.a +0 -0
  687. package/lib/rnzcash.rn.js +37 -80
  688. package/lib/rnzcash.rn.js.map +1 -1
  689. package/lib/src/react-native.d.ts +5 -10
  690. package/lib/src/types.d.ts +3 -4
  691. package/package.json +4 -1
  692. package/react-native-zcash.podspec +5 -4
  693. package/src/react-native.ts +15 -41
  694. package/src/types.ts +3 -4
  695. package/ios/ZCashLightClientKit/Block/DatabaseStorage/CompactBlockStorage.swift +0 -123
  696. package/ios/ZCashLightClientKit/Block/DatabaseStorage/DatabaseMigrationManager.swift +0 -222
  697. package/ios/ZCashLightClientKit/Block/DatabaseStorage/StorageError.swift +0 -22
  698. package/ios/ZCashLightClientKit/Block/DatabaseStorage/StorageManager.swift +0 -73
  699. package/ios/ZCashLightClientKit/Block/Downloader/BlockDownloader.swift +0 -240
  700. package/ios/ZCashLightClientKit/Block/Downloader/CompactBlockDownloaderBuilder.swift +0 -26
  701. package/ios/ZCashLightClientKit/Block/Processor/CompactBlockDownloadOperation.swift +0 -258
  702. package/ios/ZCashLightClientKit/Block/Processor/CompactBlockEnhancementOperation.swift +0 -157
  703. package/ios/ZCashLightClientKit/Block/Processor/CompactBlockProcessor.swift +0 -1454
  704. package/ios/ZCashLightClientKit/Block/Processor/CompactBlockScanningOperation.swift +0 -238
  705. package/ios/ZCashLightClientKit/Block/Processor/CompactBlockValidationInformation.swift +0 -66
  706. package/ios/ZCashLightClientKit/Block/Processor/FetchUnspentTxOutputsOperation.swift +0 -103
  707. package/ios/ZCashLightClientKit/Block/Processor/FigureNextBatchOperation.swift +0 -58
  708. package/ios/ZCashLightClientKit/Block/Processor/ZcashOperation.swift +0 -68
  709. package/ios/ZCashLightClientKit/Constants/WalletBirthday+Constants.swift +0 -58
  710. package/ios/ZCashLightClientKit/Constants/WalletBirthday+mainnet.swift +0 -20
  711. package/ios/ZCashLightClientKit/Constants/WalletBirthday+testnet.swift +0 -20
  712. package/ios/ZCashLightClientKit/DAO/CompactBlockDAO.swift +0 -24
  713. package/ios/ZCashLightClientKit/DAO/NotesDao.swift +0 -142
  714. package/ios/ZCashLightClientKit/DAO/PendingTransactionDao.swift +0 -213
  715. package/ios/ZCashLightClientKit/DAO/TransactionBuilder.swift +0 -169
  716. package/ios/ZCashLightClientKit/Entity/CompactBlockEntity.swift +0 -13
  717. package/ios/ZCashLightClientKit/Entity/PendingTransactionEntity.swift +0 -205
  718. package/ios/ZCashLightClientKit/Entity/ReceivedNoteEntity.swift +0 -22
  719. package/ios/ZCashLightClientKit/Repository/PendingTransactionRepository.swift +0 -19
  720. package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/mainnet/1000000.json +0 -7
  721. package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/mainnet/1010000.json +0 -7
  722. package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/mainnet/1020000.json +0 -7
  723. package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/mainnet/1030000.json +0 -7
  724. package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/mainnet/1040000.json +0 -7
  725. package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/mainnet/1050000.json +0 -7
  726. package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/mainnet/1060000.json +0 -7
  727. package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/mainnet/1070000.json +0 -7
  728. package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/mainnet/1080000.json +0 -7
  729. package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/mainnet/1090000.json +0 -7
  730. package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/mainnet/1100000.json +0 -7
  731. package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/mainnet/1110000.json +0 -7
  732. package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/mainnet/1120000.json +0 -7
  733. package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/mainnet/1130000.json +0 -7
  734. package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/mainnet/1140000.json +0 -7
  735. package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/mainnet/1150000.json +0 -7
  736. package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/mainnet/1160000.json +0 -7
  737. package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/mainnet/1170000.json +0 -7
  738. package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/mainnet/1180000.json +0 -7
  739. package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/mainnet/1190000.json +0 -7
  740. package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/mainnet/1200000.json +0 -7
  741. package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/mainnet/1210000.json +0 -7
  742. package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/mainnet/1220000.json +0 -7
  743. package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/mainnet/1230000.json +0 -7
  744. package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/mainnet/1240000.json +0 -7
  745. package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/mainnet/1250000.json +0 -7
  746. package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/mainnet/1260000.json +0 -7
  747. package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/mainnet/1270000.json +0 -7
  748. package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/mainnet/1280000.json +0 -7
  749. package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/mainnet/1290000.json +0 -7
  750. package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/mainnet/1300000.json +0 -7
  751. package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/mainnet/1310000.json +0 -7
  752. package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/mainnet/1320000.json +0 -7
  753. package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/mainnet/1330000.json +0 -7
  754. package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/mainnet/1340000.json +0 -7
  755. package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/mainnet/1350000.json +0 -7
  756. package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/mainnet/1360000.json +0 -7
  757. package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/mainnet/1370000.json +0 -7
  758. package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/mainnet/1380000.json +0 -7
  759. package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/mainnet/1390000.json +0 -7
  760. package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/mainnet/1400000.json +0 -7
  761. package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/mainnet/1410000.json +0 -7
  762. package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/mainnet/1420000.json +0 -7
  763. package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/mainnet/1430000.json +0 -7
  764. package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/mainnet/1440000.json +0 -7
  765. package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/mainnet/1450000.json +0 -7
  766. package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/mainnet/1460000.json +0 -7
  767. package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/mainnet/1470000.json +0 -7
  768. package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/mainnet/1480000.json +0 -7
  769. package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/mainnet/1490000.json +0 -7
  770. package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/mainnet/1500000.json +0 -7
  771. package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/mainnet/1510000.json +0 -7
  772. package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/mainnet/1520000.json +0 -7
  773. package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/mainnet/1530000.json +0 -7
  774. package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/mainnet/1540000.json +0 -7
  775. package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/mainnet/1550000.json +0 -7
  776. package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/mainnet/1560000.json +0 -7
  777. package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/mainnet/1570000.json +0 -7
  778. package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/mainnet/1580000.json +0 -7
  779. package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/mainnet/1590000.json +0 -7
  780. package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/mainnet/1600000.json +0 -7
  781. package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/mainnet/1610000.json +0 -7
  782. package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/mainnet/1620000.json +0 -7
  783. package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/mainnet/1630000.json +0 -7
  784. package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/mainnet/1640000.json +0 -7
  785. package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/mainnet/1650000.json +0 -7
  786. package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/mainnet/1660000.json +0 -7
  787. package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/mainnet/1670000.json +0 -7
  788. package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/mainnet/1680000.json +0 -7
  789. package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/mainnet/1690000.json +0 -7
  790. package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/mainnet/1700000.json +0 -7
  791. package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/mainnet/1710000.json +0 -7
  792. package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/mainnet/1720000.json +0 -7
  793. package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/mainnet/1730000.json +0 -7
  794. package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/mainnet/1740000.json +0 -7
  795. package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/mainnet/1750000.json +0 -7
  796. package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/mainnet/1760000.json +0 -7
  797. package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/mainnet/1770000.json +0 -7
  798. package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/mainnet/1780000.json +0 -7
  799. package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/mainnet/1790000.json +0 -7
  800. package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/mainnet/1800000.json +0 -7
  801. package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/mainnet/1810000.json +0 -7
  802. package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/mainnet/1820000.json +0 -7
  803. package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/mainnet/1830000.json +0 -7
  804. package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/mainnet/1840000.json +0 -7
  805. package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/mainnet/1850000.json +0 -7
  806. package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/mainnet/1860000.json +0 -7
  807. package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/mainnet/1870000.json +0 -7
  808. package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/mainnet/1880000.json +0 -7
  809. package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/mainnet/1890000.json +0 -7
  810. package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/mainnet/1900000.json +0 -7
  811. package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/mainnet/1910000.json +0 -7
  812. package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/mainnet/1920000.json +0 -7
  813. package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/mainnet/1930000.json +0 -7
  814. package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/mainnet/1940000.json +0 -7
  815. package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/mainnet/1950000.json +0 -7
  816. package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/mainnet/1960000.json +0 -7
  817. package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/mainnet/1970000.json +0 -7
  818. package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/mainnet/1980000.json +0 -7
  819. package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/mainnet/1990000.json +0 -7
  820. package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/mainnet/2000000.json +0 -7
  821. package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/mainnet/2010000.json +0 -7
  822. package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/mainnet/2020000.json +0 -7
  823. package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/mainnet/2030000.json +0 -7
  824. package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/mainnet/2040000.json +0 -7
  825. package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/mainnet/2050000.json +0 -7
  826. package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/mainnet/2060000.json +0 -7
  827. package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/mainnet/2070000.json +0 -7
  828. package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/mainnet/2080000.json +0 -7
  829. package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/mainnet/2090000.json +0 -7
  830. package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/mainnet/2100000.json +0 -7
  831. package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/mainnet/2110000.json +0 -7
  832. package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/mainnet/2120000.json +0 -7
  833. package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/mainnet/2130000.json +0 -7
  834. package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/mainnet/2140000.json +0 -7
  835. package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/mainnet/2150000.json +0 -7
  836. package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/mainnet/2160000.json +0 -7
  837. package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/mainnet/2170000.json +0 -7
  838. package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/mainnet/419200.json +0 -7
  839. package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/mainnet/500000.json +0 -7
  840. package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/mainnet/510000.json +0 -7
  841. package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/mainnet/520000.json +0 -7
  842. package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/mainnet/530000.json +0 -7
  843. package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/mainnet/540000.json +0 -7
  844. package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/mainnet/550000.json +0 -7
  845. package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/mainnet/560000.json +0 -7
  846. package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/mainnet/570000.json +0 -7
  847. package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/mainnet/580000.json +0 -7
  848. package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/mainnet/590000.json +0 -7
  849. package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/mainnet/600000.json +0 -7
  850. package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/mainnet/610000.json +0 -7
  851. package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/mainnet/620000.json +0 -7
  852. package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/mainnet/630000.json +0 -7
  853. package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/mainnet/640000.json +0 -7
  854. package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/mainnet/650000.json +0 -7
  855. package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/mainnet/660000.json +0 -7
  856. package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/mainnet/663150.json +0 -8
  857. package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/mainnet/670000.json +0 -7
  858. package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/mainnet/680000.json +0 -7
  859. package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/mainnet/690000.json +0 -7
  860. package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/mainnet/700000.json +0 -7
  861. package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/mainnet/710000.json +0 -7
  862. package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/mainnet/720000.json +0 -7
  863. package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/mainnet/730000.json +0 -7
  864. package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/mainnet/740000.json +0 -7
  865. package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/mainnet/750000.json +0 -7
  866. package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/mainnet/760000.json +0 -7
  867. package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/mainnet/770000.json +0 -7
  868. package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/mainnet/780000.json +0 -7
  869. package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/mainnet/790000.json +0 -7
  870. package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/mainnet/800000.json +0 -7
  871. package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/mainnet/810000.json +0 -7
  872. package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/mainnet/820000.json +0 -7
  873. package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/mainnet/830000.json +0 -7
  874. package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/mainnet/840000.json +0 -7
  875. package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/mainnet/850000.json +0 -7
  876. package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/mainnet/860000.json +0 -7
  877. package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/mainnet/870000.json +0 -7
  878. package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/mainnet/880000.json +0 -7
  879. package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/mainnet/890000.json +0 -7
  880. package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/mainnet/900000.json +0 -7
  881. package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/mainnet/910000.json +0 -7
  882. package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/mainnet/920000.json +0 -7
  883. package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/mainnet/930000.json +0 -7
  884. package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/mainnet/940000.json +0 -7
  885. package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/mainnet/950000.json +0 -7
  886. package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/mainnet/960000.json +0 -7
  887. package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/mainnet/970000.json +0 -7
  888. package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/mainnet/980000.json +0 -7
  889. package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/mainnet/990000.json +0 -7
  890. package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/testnet/1000000.json +0 -7
  891. package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/testnet/1010000.json +0 -7
  892. package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/testnet/1020000.json +0 -7
  893. package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/testnet/1030000.json +0 -7
  894. package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/testnet/1040000.json +0 -7
  895. package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/testnet/1050000.json +0 -7
  896. package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/testnet/1060000.json +0 -7
  897. package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/testnet/1070000.json +0 -7
  898. package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/testnet/1080000.json +0 -7
  899. package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/testnet/1090000.json +0 -7
  900. package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/testnet/1100000.json +0 -7
  901. package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/testnet/1110000.json +0 -7
  902. package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/testnet/1120000.json +0 -7
  903. package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/testnet/1130000.json +0 -7
  904. package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/testnet/1140000.json +0 -7
  905. package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/testnet/1150000.json +0 -7
  906. package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/testnet/1160000.json +0 -7
  907. package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/testnet/1170000.json +0 -7
  908. package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/testnet/1180000.json +0 -7
  909. package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/testnet/1190000.json +0 -7
  910. package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/testnet/1200000.json +0 -7
  911. package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/testnet/1210000.json +0 -7
  912. package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/testnet/1220000.json +0 -7
  913. package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/testnet/1230000.json +0 -7
  914. package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/testnet/1240000.json +0 -7
  915. package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/testnet/1250000.json +0 -7
  916. package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/testnet/1260000.json +0 -7
  917. package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/testnet/1270000.json +0 -7
  918. package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/testnet/1280000.json +0 -7
  919. package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/testnet/1290000.json +0 -7
  920. package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/testnet/1300000.json +0 -7
  921. package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/testnet/1310000.json +0 -7
  922. package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/testnet/1320000.json +0 -7
  923. package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/testnet/1330000.json +0 -7
  924. package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/testnet/1340000.json +0 -7
  925. package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/testnet/1350000.json +0 -7
  926. package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/testnet/1360000.json +0 -7
  927. package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/testnet/1370000.json +0 -7
  928. package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/testnet/1380000.json +0 -7
  929. package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/testnet/1390000.json +0 -7
  930. package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/testnet/1400000.json +0 -7
  931. package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/testnet/1410000.json +0 -7
  932. package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/testnet/1420000.json +0 -7
  933. package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/testnet/1430000.json +0 -7
  934. package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/testnet/1440000.json +0 -7
  935. package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/testnet/1450000.json +0 -7
  936. package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/testnet/1460000.json +0 -7
  937. package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/testnet/1470000.json +0 -7
  938. package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/testnet/1480000.json +0 -7
  939. package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/testnet/1490000.json +0 -7
  940. package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/testnet/1500000.json +0 -7
  941. package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/testnet/1510000.json +0 -7
  942. package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/testnet/1520000.json +0 -7
  943. package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/testnet/1530000.json +0 -7
  944. package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/testnet/1540000.json +0 -7
  945. package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/testnet/1550000.json +0 -7
  946. package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/testnet/1560000.json +0 -7
  947. package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/testnet/1570000.json +0 -7
  948. package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/testnet/1580000.json +0 -7
  949. package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/testnet/1590000.json +0 -7
  950. package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/testnet/1600000.json +0 -7
  951. package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/testnet/1610000.json +0 -7
  952. package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/testnet/1620000.json +0 -7
  953. package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/testnet/1630000.json +0 -7
  954. package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/testnet/1640000.json +0 -7
  955. package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/testnet/1650000.json +0 -7
  956. package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/testnet/1660000.json +0 -7
  957. package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/testnet/1670000.json +0 -7
  958. package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/testnet/1680000.json +0 -7
  959. package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/testnet/1690000.json +0 -7
  960. package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/testnet/1700000.json +0 -7
  961. package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/testnet/1710000.json +0 -7
  962. package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/testnet/1720000.json +0 -7
  963. package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/testnet/1730000.json +0 -7
  964. package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/testnet/1740000.json +0 -7
  965. package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/testnet/1750000.json +0 -7
  966. package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/testnet/1760000.json +0 -7
  967. package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/testnet/1770000.json +0 -7
  968. package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/testnet/1780000.json +0 -7
  969. package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/testnet/1790000.json +0 -7
  970. package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/testnet/1800000.json +0 -7
  971. package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/testnet/1810000.json +0 -7
  972. package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/testnet/1820000.json +0 -7
  973. package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/testnet/1830000.json +0 -7
  974. package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/testnet/1840000.json +0 -7
  975. package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/testnet/1850000.json +0 -7
  976. package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/testnet/1860000.json +0 -7
  977. package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/testnet/280000.json +0 -7
  978. package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/testnet/290000.json +0 -7
  979. package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/testnet/300000.json +0 -7
  980. package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/testnet/310000.json +0 -7
  981. package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/testnet/320000.json +0 -7
  982. package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/testnet/330000.json +0 -7
  983. package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/testnet/340000.json +0 -7
  984. package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/testnet/350000.json +0 -7
  985. package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/testnet/360000.json +0 -7
  986. package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/testnet/370000.json +0 -7
  987. package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/testnet/380000.json +0 -7
  988. package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/testnet/390000.json +0 -7
  989. package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/testnet/400000.json +0 -7
  990. package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/testnet/410000.json +0 -7
  991. package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/testnet/420000.json +0 -7
  992. package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/testnet/430000.json +0 -7
  993. package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/testnet/440000.json +0 -7
  994. package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/testnet/450000.json +0 -7
  995. package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/testnet/460000.json +0 -7
  996. package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/testnet/470000.json +0 -7
  997. package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/testnet/480000.json +0 -7
  998. package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/testnet/490000.json +0 -7
  999. package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/testnet/500000.json +0 -7
  1000. package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/testnet/510000.json +0 -7
  1001. package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/testnet/520000.json +0 -7
  1002. package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/testnet/530000.json +0 -7
  1003. package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/testnet/540000.json +0 -7
  1004. package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/testnet/550000.json +0 -7
  1005. package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/testnet/560000.json +0 -7
  1006. package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/testnet/570000.json +0 -7
  1007. package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/testnet/580000.json +0 -7
  1008. package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/testnet/590000.json +0 -7
  1009. package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/testnet/600000.json +0 -7
  1010. package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/testnet/610000.json +0 -7
  1011. package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/testnet/620000.json +0 -7
  1012. package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/testnet/630000.json +0 -7
  1013. package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/testnet/640000.json +0 -7
  1014. package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/testnet/650000.json +0 -7
  1015. package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/testnet/660000.json +0 -7
  1016. package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/testnet/670000.json +0 -7
  1017. package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/testnet/680000.json +0 -7
  1018. package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/testnet/690000.json +0 -7
  1019. package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/testnet/700000.json +0 -7
  1020. package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/testnet/710000.json +0 -7
  1021. package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/testnet/720000.json +0 -7
  1022. package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/testnet/730000.json +0 -7
  1023. package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/testnet/740000.json +0 -7
  1024. package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/testnet/750000.json +0 -7
  1025. package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/testnet/760000.json +0 -7
  1026. package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/testnet/770000.json +0 -7
  1027. package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/testnet/780000.json +0 -7
  1028. package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/testnet/790000.json +0 -7
  1029. package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/testnet/800000.json +0 -7
  1030. package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/testnet/810000.json +0 -7
  1031. package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/testnet/820000.json +0 -7
  1032. package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/testnet/830000.json +0 -7
  1033. package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/testnet/840000.json +0 -7
  1034. package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/testnet/850000.json +0 -7
  1035. package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/testnet/860000.json +0 -7
  1036. package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/testnet/870000.json +0 -7
  1037. package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/testnet/880000.json +0 -7
  1038. package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/testnet/890000.json +0 -7
  1039. package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/testnet/900000.json +0 -7
  1040. package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/testnet/910000.json +0 -7
  1041. package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/testnet/920000.json +0 -7
  1042. package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/testnet/930000.json +0 -7
  1043. package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/testnet/940000.json +0 -7
  1044. package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/testnet/950000.json +0 -7
  1045. package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/testnet/960000.json +0 -7
  1046. package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/testnet/970000.json +0 -7
  1047. package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/testnet/980000.json +0 -7
  1048. package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/testnet/990000.json +0 -7
  1049. package/ios/ZCashLightClientKit/Service/LightWalletGRPCService.swift +0 -551
  1050. package/ios/ZCashLightClientKit/Service/LightWalletService.swift +0 -214
  1051. package/ios/ZCashLightClientKit/Service/Model/ZcashCompactBlock.swift +0 -46
  1052. package/ios/ZCashLightClientKit/Service/ProtoBuf/Extensions/Protocolbuffer+Extensions.swift +0 -50
  1053. package/ios/ZCashLightClientKit/Service/ProtoBuf/compact_formats.pb.swift +0 -332
  1054. package/ios/ZCashLightClientKit/Service/ProtoBuf/proto/compact_formats.proto +0 -56
  1055. package/ios/ZCashLightClientKit/Service/ProtoBuf/proto/service.proto +0 -180
  1056. package/ios/ZCashLightClientKit/Service/ProtoBuf/service.grpc.swift +0 -383
  1057. package/ios/ZCashLightClientKit/Service/ProtoBuf/service.pb.swift +0 -1173
  1058. package/ios/ZCashLightClientKit/Transaction/PersistentTransactionManager.swift +0 -339
  1059. package/ios/ZCashLightClientKit/Transaction/TransactionManager.swift +0 -42
  1060. package/ios/ZCashLightClientKit/Utils/Bundle+module.swift +0 -30
@@ -0,0 +1,1365 @@
1
+ //
2
+ // CompactBlockProcessor.swift
3
+ // ZcashLightClientKit
4
+ //
5
+ // Created by Francisco Gindre on 18/09/2019.
6
+ // Copyright © 2019 Electric Coin Company. All rights reserved.
7
+ //
8
+ // swiftlint:disable file_length type_body_length
9
+
10
+ import Foundation
11
+ import Combine
12
+
13
+ public typealias RefreshedUTXOs = (inserted: [UnspentTransactionOutputEntity], skipped: [UnspentTransactionOutputEntity])
14
+
15
+ public enum CompactBlockProgress {
16
+ case syncing(_ progress: BlockProgress)
17
+ case enhance(_ progress: EnhancementProgress)
18
+ case fetch(_ progress: Float)
19
+
20
+ public var progress: Float {
21
+ switch self {
22
+ case .syncing(let blockProgress):
23
+ return blockProgress.progress
24
+ case .enhance(let enhancementProgress):
25
+ return enhancementProgress.progress
26
+ case .fetch(let fetchingProgress):
27
+ return fetchingProgress
28
+ }
29
+ }
30
+
31
+ public var progressHeight: BlockHeight? {
32
+ switch self {
33
+ case .syncing(let blockProgress):
34
+ return blockProgress.progressHeight
35
+ case .enhance(let enhancementProgress):
36
+ return enhancementProgress.lastFoundTransaction?.minedHeight
37
+ default:
38
+ return 0
39
+ }
40
+ }
41
+
42
+ public var blockDate: Date? {
43
+ if case .enhance(let enhancementProgress) = self, let time = enhancementProgress.lastFoundTransaction?.blockTime {
44
+ return Date(timeIntervalSince1970: time)
45
+ }
46
+
47
+ return nil
48
+ }
49
+
50
+ public var targetHeight: BlockHeight? {
51
+ switch self {
52
+ case .syncing(let blockProgress):
53
+ return blockProgress.targetHeight
54
+ default:
55
+ return nil
56
+ }
57
+ }
58
+ }
59
+
60
+ public struct EnhancementProgress: Equatable {
61
+ /// total transactions that were detected in the `range`
62
+ public let totalTransactions: Int
63
+ /// enhanced transactions so far
64
+ public let enhancedTransactions: Int
65
+ /// last found transaction
66
+ public let lastFoundTransaction: ZcashTransaction.Overview?
67
+ /// block range that's being enhanced
68
+ public let range: CompactBlockRange
69
+ /// whether this transaction can be considered `newly mined` and not part of the
70
+ /// wallet catching up to stale and uneventful blocks.
71
+ public let newlyMined: Bool
72
+
73
+ public init(
74
+ totalTransactions: Int,
75
+ enhancedTransactions: Int,
76
+ lastFoundTransaction: ZcashTransaction.Overview?,
77
+ range: CompactBlockRange,
78
+ newlyMined: Bool
79
+ ) {
80
+ self.totalTransactions = totalTransactions
81
+ self.enhancedTransactions = enhancedTransactions
82
+ self.lastFoundTransaction = lastFoundTransaction
83
+ self.range = range
84
+ self.newlyMined = newlyMined
85
+ }
86
+
87
+ public var progress: Float {
88
+ totalTransactions > 0 ? Float(enhancedTransactions) / Float(totalTransactions) : 0
89
+ }
90
+
91
+ public static var zero: EnhancementProgress {
92
+ EnhancementProgress(totalTransactions: 0, enhancedTransactions: 0, lastFoundTransaction: nil, range: 0...0, newlyMined: false)
93
+ }
94
+
95
+ public static func == (lhs: EnhancementProgress, rhs: EnhancementProgress) -> Bool {
96
+ return
97
+ lhs.totalTransactions == rhs.totalTransactions &&
98
+ lhs.enhancedTransactions == rhs.enhancedTransactions &&
99
+ lhs.lastFoundTransaction?.id == rhs.lastFoundTransaction?.id &&
100
+ lhs.range == rhs.range
101
+ }
102
+ }
103
+
104
+ /// The compact block processor is in charge of orchestrating the download and caching of compact blocks from a LightWalletEndpoint
105
+ /// when started the processor downloads does a download - validate - scan cycle until it reaches latest height on the blockchain.
106
+ actor CompactBlockProcessor {
107
+ typealias EventClosure = (Event) async -> Void
108
+
109
+ enum Event {
110
+ /// Event sent when the CompactBlockProcessor presented an error.
111
+ case failed (Error)
112
+
113
+ /// Event sent when the CompactBlockProcessor has finished syncing the blockchain to latest height
114
+ case finished (_ lastScannedHeight: BlockHeight, _ foundBlocks: Bool)
115
+
116
+ /// Event sent when the CompactBlockProcessor found a newly mined transaction
117
+ case minedTransaction(ZcashTransaction.Overview)
118
+
119
+ /// Event sent when the CompactBlockProcessor enhanced a bunch of transactions in some range.
120
+ case foundTransactions ([ZcashTransaction.Overview], CompactBlockRange)
121
+
122
+ /// Event sent when the CompactBlockProcessor handled a ReOrg.
123
+ /// `reorgHeight` is the height on which the reorg was detected.
124
+ /// `rewindHeight` is the height that the processor backed to in order to solve the Reorg.
125
+ case handledReorg (_ reorgHeight: BlockHeight, _ rewindHeight: BlockHeight)
126
+
127
+ /// Event sent when progress of the sync process changes.
128
+ case progressUpdated (CompactBlockProgress)
129
+
130
+ /// Event sent when the CompactBlockProcessor fetched utxos from lightwalletd attempted to store them.
131
+ case storedUTXOs ((inserted: [UnspentTransactionOutputEntity], skipped: [UnspentTransactionOutputEntity]))
132
+
133
+ /// Event sent when the CompactBlockProcessor starts enhancing of the transactions.
134
+ case startedEnhancing
135
+
136
+ /// Event sent when the CompactBlockProcessor starts fetching of the UTXOs.
137
+ case startedFetching
138
+
139
+ /// Event sent when the CompactBlockProcessor starts syncing.
140
+ case startedSyncing
141
+
142
+ /// Event sent when the CompactBlockProcessor stops syncing.
143
+ case stopped
144
+ }
145
+
146
+ /// Compact Block Processor configuration
147
+ ///
148
+ /// - parameter fsBlockCacheRoot: absolute root path where the filesystem block cache will be stored.
149
+ /// - parameter dataDb: absolute file path of the DB where all information derived from the cache DB is stored.
150
+ /// - parameter spendParamsURL: absolute file path of the sapling-spend.params file
151
+ /// - parameter outputParamsURL: absolute file path of the sapling-output.params file
152
+ struct Configuration {
153
+ let alias: ZcashSynchronizerAlias
154
+ let saplingParamsSourceURL: SaplingParamsSourceURL
155
+ let fsBlockCacheRoot: URL
156
+ let dataDb: URL
157
+ let spendParamsURL: URL
158
+ let outputParamsURL: URL
159
+ let downloadBatchSize: Int
160
+ let scanningBatchSize: Int
161
+ let retries: Int
162
+ let maxBackoffInterval: TimeInterval
163
+ let maxReorgSize = ZcashSDK.maxReorgSize
164
+ let rewindDistance: Int
165
+ let walletBirthdayProvider: () -> BlockHeight
166
+ var walletBirthday: BlockHeight { walletBirthdayProvider() }
167
+ let downloadBufferSize: Int = 10
168
+ let network: ZcashNetwork
169
+ let saplingActivation: BlockHeight
170
+ let cacheDbURL: URL?
171
+ var blockPollInterval: TimeInterval {
172
+ TimeInterval.random(in: ZcashSDK.defaultPollInterval / 2 ... ZcashSDK.defaultPollInterval * 1.5)
173
+ }
174
+
175
+ init(
176
+ alias: ZcashSynchronizerAlias,
177
+ cacheDbURL: URL? = nil,
178
+ fsBlockCacheRoot: URL,
179
+ dataDb: URL,
180
+ spendParamsURL: URL,
181
+ outputParamsURL: URL,
182
+ saplingParamsSourceURL: SaplingParamsSourceURL,
183
+ downloadBatchSize: Int = ZcashSDK.DefaultDownloadBatch,
184
+ retries: Int = ZcashSDK.defaultRetries,
185
+ maxBackoffInterval: TimeInterval = ZcashSDK.defaultMaxBackOffInterval,
186
+ rewindDistance: Int = ZcashSDK.defaultRewindDistance,
187
+ scanningBatchSize: Int = ZcashSDK.DefaultScanningBatch,
188
+ walletBirthdayProvider: @escaping () -> BlockHeight,
189
+ saplingActivation: BlockHeight,
190
+ network: ZcashNetwork
191
+ ) {
192
+ self.alias = alias
193
+ self.fsBlockCacheRoot = fsBlockCacheRoot
194
+ self.dataDb = dataDb
195
+ self.spendParamsURL = spendParamsURL
196
+ self.outputParamsURL = outputParamsURL
197
+ self.saplingParamsSourceURL = saplingParamsSourceURL
198
+ self.network = network
199
+ self.downloadBatchSize = downloadBatchSize
200
+ self.retries = retries
201
+ self.maxBackoffInterval = maxBackoffInterval
202
+ self.rewindDistance = rewindDistance
203
+ self.scanningBatchSize = scanningBatchSize
204
+ self.walletBirthdayProvider = walletBirthdayProvider
205
+ self.saplingActivation = saplingActivation
206
+ self.cacheDbURL = cacheDbURL
207
+ assert(downloadBatchSize >= scanningBatchSize)
208
+ }
209
+
210
+ init(
211
+ alias: ZcashSynchronizerAlias,
212
+ fsBlockCacheRoot: URL,
213
+ dataDb: URL,
214
+ spendParamsURL: URL,
215
+ outputParamsURL: URL,
216
+ saplingParamsSourceURL: SaplingParamsSourceURL,
217
+ downloadBatchSize: Int = ZcashSDK.DefaultDownloadBatch,
218
+ retries: Int = ZcashSDK.defaultRetries,
219
+ maxBackoffInterval: TimeInterval = ZcashSDK.defaultMaxBackOffInterval,
220
+ rewindDistance: Int = ZcashSDK.defaultRewindDistance,
221
+ scanningBatchSize: Int = ZcashSDK.DefaultScanningBatch,
222
+ walletBirthdayProvider: @escaping () -> BlockHeight,
223
+ network: ZcashNetwork
224
+ ) {
225
+ self.alias = alias
226
+ self.fsBlockCacheRoot = fsBlockCacheRoot
227
+ self.dataDb = dataDb
228
+ self.spendParamsURL = spendParamsURL
229
+ self.outputParamsURL = outputParamsURL
230
+ self.saplingParamsSourceURL = saplingParamsSourceURL
231
+ self.walletBirthdayProvider = walletBirthdayProvider
232
+ self.saplingActivation = network.constants.saplingActivationHeight
233
+ self.network = network
234
+ self.cacheDbURL = nil
235
+ self.downloadBatchSize = downloadBatchSize
236
+ self.retries = retries
237
+ self.maxBackoffInterval = maxBackoffInterval
238
+ self.rewindDistance = rewindDistance
239
+ self.scanningBatchSize = scanningBatchSize
240
+
241
+ assert(downloadBatchSize >= scanningBatchSize)
242
+ }
243
+ }
244
+
245
+ /**
246
+ Represents the possible states of a CompactBlockProcessor
247
+ */
248
+ enum State {
249
+ /**
250
+ connected and downloading blocks
251
+ */
252
+ case syncing
253
+
254
+ /**
255
+ was doing something but was paused
256
+ */
257
+ case stopped
258
+
259
+ /**
260
+ Processor is Enhancing transactions
261
+ */
262
+ case enhancing
263
+
264
+ /**
265
+ fetching utxos
266
+ */
267
+ case fetching
268
+
269
+ /**
270
+ was processing but erred
271
+ */
272
+ case error(_ error: Error)
273
+
274
+ /// Download sapling param files if needed.
275
+ case handlingSaplingFiles
276
+
277
+ /**
278
+ Processor is up to date with the blockchain and you can now make transactions.
279
+ */
280
+ case synced
281
+ }
282
+
283
+ private var afterSyncHooksManager = AfterSyncHooksManager()
284
+
285
+ let metrics: SDKMetrics
286
+ let logger: Logger
287
+
288
+ /// Don't update this variable directly. Use `updateState()` method.
289
+ var state: State = .stopped
290
+
291
+ private(set) var config: Configuration
292
+
293
+ var maxAttemptsReached: Bool {
294
+ self.retryAttempts >= self.config.retries
295
+ }
296
+
297
+ var shouldStart: Bool {
298
+ switch self.state {
299
+ case .stopped, .synced, .error:
300
+ return !maxAttemptsReached
301
+ default:
302
+ return false
303
+ }
304
+ }
305
+
306
+ // It would be better to use Combine here but Combine doesn't work great with async. When this runs regularly only one closure is stored here
307
+ // and that is one provided by `SDKSynchronizer`. But while running tests more "subscribers" is required here. Therefore it's required to handle
308
+ // more closures here.
309
+ var eventClosures: [String: EventClosure] = [:]
310
+
311
+ let blockDownloaderService: BlockDownloaderService
312
+ let blockDownloader: BlockDownloader
313
+ let blockValidator: BlockValidator
314
+ let blockScanner: BlockScanner
315
+ let blockEnhancer: BlockEnhancer
316
+ let utxoFetcher: UTXOFetcher
317
+ let saplingParametersHandler: SaplingParametersHandler
318
+ private let latestBlocksDataProvider: LatestBlocksDataProvider
319
+
320
+ let service: LightWalletService
321
+ let storage: CompactBlockRepository
322
+ let transactionRepository: TransactionRepository
323
+ let accountRepository: AccountRepository
324
+ let rustBackend: ZcashRustBackendWelding
325
+ private var retryAttempts: Int = 0
326
+ private var backoffTimer: Timer?
327
+ private var lastChainValidationFailure: BlockHeight?
328
+ private var consecutiveChainValidationErrors: Int = 0
329
+ var processingError: Error?
330
+ private var foundBlocks = false
331
+ private var maxAttempts: Int {
332
+ config.retries
333
+ }
334
+
335
+ var batchSize: BlockHeight {
336
+ BlockHeight(self.config.downloadBatchSize)
337
+ }
338
+
339
+ private var cancelableTask: Task<Void, Error>?
340
+
341
+ private let internalSyncProgress: InternalSyncProgress
342
+
343
+ /// Initializes a CompactBlockProcessor instance
344
+ /// - Parameters:
345
+ /// - service: concrete implementation of `LightWalletService` protocol
346
+ /// - storage: concrete implementation of `CompactBlockRepository` protocol
347
+ /// - backend: a class that complies to `ZcashRustBackendWelding`
348
+ /// - config: `Configuration` struct for this processor
349
+ init(
350
+ container: DIContainer,
351
+ config: Configuration
352
+ ) {
353
+ self.init(
354
+ container: container,
355
+ config: config,
356
+ accountRepository: AccountRepositoryBuilder.build(dataDbURL: config.dataDb, readOnly: true, logger: container.resolve(Logger.self))
357
+ )
358
+ }
359
+
360
+ /// Initializes a CompactBlockProcessor instance from an Initialized object
361
+ /// - Parameters:
362
+ /// - initializer: an instance that complies to CompactBlockDownloading protocol
363
+ init(initializer: Initializer, walletBirthdayProvider: @escaping () -> BlockHeight) {
364
+ self.init(
365
+ container: initializer.container,
366
+ config: Configuration(
367
+ alias: initializer.alias,
368
+ fsBlockCacheRoot: initializer.fsBlockDbRoot,
369
+ dataDb: initializer.dataDbURL,
370
+ spendParamsURL: initializer.spendParamsURL,
371
+ outputParamsURL: initializer.outputParamsURL,
372
+ saplingParamsSourceURL: initializer.saplingParamsSourceURL,
373
+ walletBirthdayProvider: walletBirthdayProvider,
374
+ network: initializer.network
375
+ ),
376
+ accountRepository: initializer.accountRepository
377
+ )
378
+ }
379
+
380
+ internal init(
381
+ container: DIContainer,
382
+ config: Configuration,
383
+ accountRepository: AccountRepository
384
+ ) {
385
+ Dependencies.setupCompactBlockProcessor(
386
+ in: container,
387
+ config: config,
388
+ accountRepository: accountRepository
389
+ )
390
+
391
+ self.metrics = container.resolve(SDKMetrics.self)
392
+ self.logger = container.resolve(Logger.self)
393
+ self.latestBlocksDataProvider = container.resolve(LatestBlocksDataProvider.self)
394
+ self.internalSyncProgress = container.resolve(InternalSyncProgress.self)
395
+ self.blockDownloaderService = container.resolve(BlockDownloaderService.self)
396
+ self.blockDownloader = container.resolve(BlockDownloader.self)
397
+ self.blockValidator = container.resolve(BlockValidator.self)
398
+ self.blockScanner = container.resolve(BlockScanner.self)
399
+ self.blockEnhancer = container.resolve(BlockEnhancer.self)
400
+ self.utxoFetcher = container.resolve(UTXOFetcher.self)
401
+ self.saplingParametersHandler = container.resolve(SaplingParametersHandler.self)
402
+ self.service = container.resolve(LightWalletService.self)
403
+ self.rustBackend = container.resolve(ZcashRustBackendWelding.self)
404
+ self.storage = container.resolve(CompactBlockRepository.self)
405
+ self.config = config
406
+ self.transactionRepository = container.resolve(TransactionRepository.self)
407
+ self.accountRepository = accountRepository
408
+ }
409
+
410
+ deinit {
411
+ cancelableTask?.cancel()
412
+ }
413
+
414
+ func update(config: Configuration) async {
415
+ self.config = config
416
+ await stop()
417
+ }
418
+
419
+ func updateState(_ newState: State) async -> Void {
420
+ let oldState = state
421
+ state = newState
422
+ await transitionState(from: oldState, to: newState)
423
+ }
424
+
425
+ func updateEventClosure(identifier: String, closure: @escaping (Event) async -> Void) async {
426
+ eventClosures[identifier] = closure
427
+ }
428
+
429
+ func send(event: Event) async {
430
+ for item in eventClosures {
431
+ await item.value(event)
432
+ }
433
+ }
434
+
435
+ static func validateServerInfo(
436
+ _ info: LightWalletdInfo,
437
+ saplingActivation: BlockHeight,
438
+ localNetwork: ZcashNetwork,
439
+ rustBackend: ZcashRustBackendWelding
440
+ ) async throws {
441
+ // check network types
442
+ guard let remoteNetworkType = NetworkType.forChainName(info.chainName) else {
443
+ throw ZcashError.compactBlockProcessorChainName(info.chainName)
444
+ }
445
+
446
+ guard remoteNetworkType == localNetwork.networkType else {
447
+ throw ZcashError.compactBlockProcessorNetworkMismatch(localNetwork.networkType, remoteNetworkType)
448
+ }
449
+
450
+ guard saplingActivation == info.saplingActivationHeight else {
451
+ throw ZcashError.compactBlockProcessorSaplingActivationMismatch(saplingActivation, BlockHeight(info.saplingActivationHeight))
452
+ }
453
+
454
+ // check branch id
455
+ let localBranch = try rustBackend.consensusBranchIdFor(height: Int32(info.blockHeight))
456
+
457
+ guard let remoteBranchID = ConsensusBranchID.fromString(info.consensusBranchID) else {
458
+ throw ZcashError.compactBlockProcessorConsensusBranchID
459
+ }
460
+
461
+ guard remoteBranchID == localBranch else {
462
+ throw ZcashError.compactBlockProcessorWrongConsensusBranchId(localBranch, remoteBranchID)
463
+ }
464
+ }
465
+
466
+ /// Starts the CompactBlockProcessor instance and starts downloading and processing blocks
467
+ ///
468
+ /// triggers the blockProcessorStartedDownloading notification
469
+ ///
470
+ /// - Important: subscribe to the notifications before calling this method
471
+ func start(retry: Bool = false) async {
472
+ if retry {
473
+ self.retryAttempts = 0
474
+ self.processingError = nil
475
+ self.backoffTimer?.invalidate()
476
+ self.backoffTimer = nil
477
+ }
478
+
479
+ guard shouldStart else {
480
+ switch self.state {
481
+ case .error(let error):
482
+ // max attempts have been reached
483
+ logger.info("max retry attempts reached with error: \(error)")
484
+ await notifyError(ZcashError.compactBlockProcessorMaxAttemptsReached(self.maxAttempts))
485
+ await updateState(.stopped)
486
+ case .stopped:
487
+ // max attempts have been reached
488
+ logger.info("max retry attempts reached")
489
+ await notifyError(ZcashError.compactBlockProcessorMaxAttemptsReached(self.maxAttempts))
490
+ case .synced:
491
+ // max attempts have been reached
492
+ logger.warn("max retry attempts reached on synced state, this indicates malfunction")
493
+ await notifyError(ZcashError.compactBlockProcessorMaxAttemptsReached(self.maxAttempts))
494
+ case .syncing, .enhancing, .fetching, .handlingSaplingFiles:
495
+ logger.debug("Warning: compact block processor was started while busy!!!!")
496
+ afterSyncHooksManager.insert(hook: .anotherSync)
497
+ }
498
+ return
499
+ }
500
+
501
+ do {
502
+ if let legacyCacheDbURL = self.config.cacheDbURL {
503
+ try await self.migrateCacheDb(legacyCacheDbURL)
504
+ }
505
+ } catch {
506
+ await self.fail(error)
507
+ }
508
+
509
+ await self.nextBatch()
510
+ }
511
+
512
+ /**
513
+ Stops the CompactBlockProcessor
514
+
515
+ Note: retry count is reset
516
+ */
517
+ func stop() async {
518
+ self.backoffTimer?.invalidate()
519
+ self.backoffTimer = nil
520
+
521
+ cancelableTask?.cancel()
522
+ await blockDownloader.stopDownload()
523
+
524
+ self.retryAttempts = 0
525
+ }
526
+
527
+ // MARK: Rewind
528
+
529
+ /// Rewinds to provided height.
530
+ /// - Parameter height: height to rewind to. If nil is provided, it will rescan to nearest height (quick rescan)
531
+ ///
532
+ /// - Note: If this is called while sync is in progress then the sync process is stopped first and then rewind is executed.
533
+ func rewind(context: AfterSyncHooksManager.RewindContext) async {
534
+ logger.debug("Starting rewind")
535
+ switch self.state {
536
+ case .syncing, .enhancing, .fetching, .handlingSaplingFiles:
537
+ logger.debug("Stopping sync because of rewind")
538
+ afterSyncHooksManager.insert(hook: .rewind(context))
539
+ await stop()
540
+
541
+ case .stopped, .error, .synced:
542
+ logger.debug("Sync doesn't run. Executing rewind.")
543
+ await doRewind(context: context)
544
+ }
545
+ }
546
+
547
+ private func doRewind(context: AfterSyncHooksManager.RewindContext) async {
548
+ logger.debug("Executing rewind.")
549
+ let lastDownloaded = await internalSyncProgress.latestDownloadedBlockHeight
550
+ let height = Int32(context.height ?? lastDownloaded)
551
+
552
+ let nearestHeight: Int32
553
+ do {
554
+ nearestHeight = try await rustBackend.getNearestRewindHeight(height: height)
555
+ } catch {
556
+ await fail(error)
557
+ return await context.completion(.failure(error))
558
+ }
559
+
560
+ // FIXME: [#719] this should be done on the rust layer, https://github.com/zcash/ZcashLightClientKit/issues/719
561
+ let rewindHeight = max(Int32(nearestHeight - 1), Int32(config.walletBirthday))
562
+
563
+ do {
564
+ try await rustBackend.rewindToHeight(height: rewindHeight)
565
+ } catch {
566
+ await fail(error)
567
+ return await context.completion(.failure(error))
568
+ }
569
+
570
+ // clear cache
571
+ let rewindBlockHeight = BlockHeight(rewindHeight)
572
+ do {
573
+ try await blockDownloaderService.rewind(to: rewindBlockHeight)
574
+ } catch {
575
+ return await context.completion(.failure(error))
576
+ }
577
+
578
+ await internalSyncProgress.rewind(to: rewindBlockHeight)
579
+
580
+ self.lastChainValidationFailure = nil
581
+ await context.completion(.success(rewindBlockHeight))
582
+ }
583
+
584
+ // MARK: Wipe
585
+
586
+ func wipe(context: AfterSyncHooksManager.WipeContext) async {
587
+ logger.debug("Starting wipe")
588
+ switch self.state {
589
+ case .syncing, .enhancing, .fetching, .handlingSaplingFiles:
590
+ logger.debug("Stopping sync because of wipe")
591
+ afterSyncHooksManager.insert(hook: .wipe(context))
592
+ await stop()
593
+
594
+ case .stopped, .error, .synced:
595
+ logger.debug("Sync doesn't run. Executing wipe.")
596
+ await doWipe(context: context)
597
+ }
598
+ }
599
+
600
+ private func doWipe(context: AfterSyncHooksManager.WipeContext) async {
601
+ logger.debug("Executing wipe.")
602
+ context.prewipe()
603
+
604
+ await updateState(.stopped)
605
+
606
+ do {
607
+ try await self.storage.clear()
608
+ await internalSyncProgress.rewind(to: 0)
609
+
610
+ wipeLegacyCacheDbIfNeeded()
611
+
612
+ let fileManager = FileManager.default
613
+ if fileManager.fileExists(atPath: config.dataDb.path) {
614
+ try fileManager.removeItem(at: config.dataDb)
615
+ }
616
+
617
+ await context.completion(nil)
618
+ } catch {
619
+ await context.completion(error)
620
+ }
621
+ }
622
+
623
+ // MARK: Sync
624
+
625
+ func validateServer() async {
626
+ do {
627
+ let info = try await self.service.getInfo()
628
+ try await Self.validateServerInfo(
629
+ info,
630
+ saplingActivation: self.config.saplingActivation,
631
+ localNetwork: self.config.network,
632
+ rustBackend: self.rustBackend
633
+ )
634
+ } catch {
635
+ await self.severeFailure(error)
636
+ }
637
+ }
638
+
639
+ /// Processes new blocks on the given range based on the configuration set for this instance
640
+ func processNewBlocks(ranges: SyncRanges) async {
641
+ self.foundBlocks = true
642
+
643
+ cancelableTask = Task(priority: .userInitiated) {
644
+ do {
645
+ let totalProgressRange = computeTotalProgressRange(from: ranges)
646
+
647
+ logger.debug("""
648
+ Syncing with ranges:
649
+ downloaded but not scanned: \
650
+ \(ranges.downloadedButUnscannedRange?.lowerBound ?? -1)...\(ranges.downloadedButUnscannedRange?.upperBound ?? -1)
651
+ download and scan: \(ranges.downloadAndScanRange?.lowerBound ?? -1)...\(ranges.downloadAndScanRange?.upperBound ?? -1)
652
+ enhance range: \(ranges.enhanceRange?.lowerBound ?? -1)...\(ranges.enhanceRange?.upperBound ?? -1)
653
+ fetchUTXO range: \(ranges.fetchUTXORange?.lowerBound ?? -1)...\(ranges.fetchUTXORange?.upperBound ?? -1)
654
+ total progress range: \(totalProgressRange.lowerBound)...\(totalProgressRange.upperBound)
655
+ """)
656
+
657
+ var anyActionExecuted = false
658
+
659
+ // clear any present cached state if needed.
660
+ // this checks if there was a sync in progress that was
661
+ // interrupted abruptly and cache was not able to be cleared
662
+ // properly and internal state set to the appropriate value
663
+ if let newLatestDownloadedHeight = ranges.shouldClearBlockCacheAndUpdateInternalState() {
664
+ try await storage.clear()
665
+ await internalSyncProgress.set(newLatestDownloadedHeight, .latestDownloadedBlockHeight)
666
+ } else {
667
+ try await storage.create()
668
+ }
669
+
670
+ if let range = ranges.downloadedButUnscannedRange {
671
+ logger.debug("Starting scan with downloaded but not scanned blocks with range: \(range.lowerBound)...\(range.upperBound)")
672
+ try await blockScanner.scanBlocks(at: range, totalProgressRange: totalProgressRange) { [weak self] lastScannedHeight in
673
+ let progress = BlockProgress(
674
+ startHeight: totalProgressRange.lowerBound,
675
+ targetHeight: totalProgressRange.upperBound,
676
+ progressHeight: lastScannedHeight
677
+ )
678
+ await self?.notifyProgress(.syncing(progress))
679
+ }
680
+ }
681
+
682
+ if let range = ranges.downloadAndScanRange {
683
+ logger.debug("Starting sync with range: \(range.lowerBound)...\(range.upperBound)")
684
+ try await blockDownloader.setSyncRange(range, batchSize: batchSize)
685
+ try await downloadAndScanBlocks(at: range, totalProgressRange: totalProgressRange)
686
+ // Side effect of calling stop is to delete last used download stream. To be sure that it doesn't keep any data in memory.
687
+ await blockDownloader.stopDownload()
688
+ }
689
+
690
+ if let range = ranges.enhanceRange {
691
+ anyActionExecuted = true
692
+ logger.debug("Enhancing with range: \(range.lowerBound)...\(range.upperBound)")
693
+ await updateState(.enhancing)
694
+ if let transactions = try await blockEnhancer.enhance(
695
+ at: range,
696
+ didEnhance: { [weak self] progress in
697
+ await self?.notifyProgress(.enhance(progress))
698
+ if
699
+ let foundTx = progress.lastFoundTransaction,
700
+ progress.newlyMined {
701
+ await self?.notifyMinedTransaction(foundTx)
702
+ }
703
+ }
704
+ ) {
705
+ await notifyTransactions(transactions, in: range)
706
+ }
707
+ }
708
+
709
+ if let range = ranges.fetchUTXORange {
710
+ anyActionExecuted = true
711
+ logger.debug("Fetching UTXO with range: \(range.lowerBound)...\(range.upperBound)")
712
+ await updateState(.fetching)
713
+ let result = try await utxoFetcher.fetch(at: range) { [weak self] progress in
714
+ await self?.notifyProgress(.fetch(progress))
715
+ }
716
+ await send(event: .storedUTXOs(result))
717
+ }
718
+
719
+ logger.debug("Fetching sapling parameters")
720
+ await updateState(.handlingSaplingFiles)
721
+ try await saplingParametersHandler.handleIfNeeded()
722
+
723
+ logger.debug("Clearing cache")
724
+ try await clearCompactBlockCache()
725
+
726
+ if !Task.isCancelled {
727
+ let newBlocksMined = await ranges.latestBlockHeight < latestBlocksDataProvider.latestBlockHeight
728
+ await processBatchFinished(height: (anyActionExecuted && !newBlocksMined) ? ranges.latestBlockHeight : nil)
729
+ }
730
+ } catch {
731
+ // Side effect of calling stop is to delete last used download stream. To be sure that it doesn't keep any data in memory.
732
+ await blockDownloader.stopDownload()
733
+ logger.error("Sync failed with error: \(error)")
734
+
735
+ if Task.isCancelled {
736
+ logger.info("Processing cancelled.")
737
+ await updateState(.stopped)
738
+ await handleAfterSyncHooks()
739
+ } else {
740
+ if case let ZcashError.rustValidateCombinedChainInvalidChain(height) = error {
741
+ await validationFailed(at: BlockHeight(height))
742
+ } else {
743
+ logger.error("processing failed with error: \(error)")
744
+ await fail(error)
745
+ }
746
+ }
747
+ }
748
+ }
749
+ }
750
+
751
+ private func handleAfterSyncHooks() async {
752
+ let afterSyncHooksManager = self.afterSyncHooksManager
753
+ self.afterSyncHooksManager = AfterSyncHooksManager()
754
+
755
+ if let wipeContext = afterSyncHooksManager.shouldExecuteWipeHook() {
756
+ await doWipe(context: wipeContext)
757
+ } else if let rewindContext = afterSyncHooksManager.shouldExecuteRewindHook() {
758
+ await doRewind(context: rewindContext)
759
+ } else if afterSyncHooksManager.shouldExecuteAnotherSyncHook() {
760
+ logger.debug("Starting new sync.")
761
+ await nextBatch()
762
+ }
763
+ }
764
+
765
+ private func downloadAndScanBlocks(at range: CompactBlockRange, totalProgressRange: CompactBlockRange) async throws {
766
+ // Divide `range` by `batchSize` and compute how many time do we need to run to download and scan all the blocks.
767
+ // +1 must be done here becase `range` is closed range. So even if upperBound and lowerBound are same there is one block to sync.
768
+ let blocksCountToSync = (range.upperBound - range.lowerBound) + 1
769
+ var loopsCount = blocksCountToSync / batchSize
770
+ if blocksCountToSync % batchSize != 0 {
771
+ loopsCount += 1
772
+ }
773
+
774
+ var lastScannedHeight: BlockHeight = .zero
775
+ for i in 0..<loopsCount {
776
+ let processingRange = computeSingleLoopDownloadRange(fullRange: range, loopCounter: i, batchSize: batchSize)
777
+
778
+ logger.debug("Sync loop #\(i + 1) range: \(processingRange.lowerBound)...\(processingRange.upperBound)")
779
+
780
+ // This is important. We must be sure that no new download is executed when this Task is canceled. Without this line `stop()` doesn't
781
+ // work.
782
+ try Task.checkCancellation()
783
+
784
+ do {
785
+ await blockDownloader.setDownloadLimit(processingRange.upperBound + (2 * batchSize))
786
+ await blockDownloader.startDownload(maxBlockBufferSize: config.downloadBufferSize)
787
+
788
+ try await blockDownloader.waitUntilRequestedBlocksAreDownloaded(in: processingRange)
789
+ } catch {
790
+ await ifTaskIsNotCanceledClearCompactBlockCache(lastScannedHeight: lastScannedHeight)
791
+ throw error
792
+ }
793
+
794
+ do {
795
+ try await blockValidator.validate()
796
+ } catch {
797
+ await ifTaskIsNotCanceledClearCompactBlockCache(lastScannedHeight: lastScannedHeight)
798
+ logger.error("Block validation failed with error: \(error)")
799
+ throw error
800
+ }
801
+
802
+ // Without this `stop()` would work. But this line improves support for Task cancelation.
803
+ try Task.checkCancellation()
804
+
805
+ do {
806
+ lastScannedHeight = try await blockScanner.scanBlocks(
807
+ at: processingRange,
808
+ totalProgressRange: totalProgressRange
809
+ ) { [weak self] lastScannedHeight in
810
+ let progress = BlockProgress(
811
+ startHeight: totalProgressRange.lowerBound,
812
+ targetHeight: totalProgressRange.upperBound,
813
+ progressHeight: lastScannedHeight
814
+ )
815
+ await self?.notifyProgress(.syncing(progress))
816
+ }
817
+ } catch {
818
+ logger.error("Scanning failed with error: \(error)")
819
+ await ifTaskIsNotCanceledClearCompactBlockCache(lastScannedHeight: lastScannedHeight)
820
+ throw error
821
+ }
822
+
823
+ try await clearCompactBlockCache(upTo: lastScannedHeight)
824
+
825
+ let progress = BlockProgress(
826
+ startHeight: totalProgressRange.lowerBound,
827
+ targetHeight: totalProgressRange.upperBound,
828
+ progressHeight: processingRange.upperBound
829
+ )
830
+ await notifyProgress(.syncing(progress))
831
+ }
832
+ }
833
+
834
+ /*
835
+ Here range for one batch is computed. For example if we want to sync blocks 0...1000 with batchSize 100 we want to generage blocks like
836
+ this:
837
+ 0...99
838
+ 100...199
839
+ 200...299
840
+ 300...399
841
+ ...
842
+ 900...999
843
+ 1000...1000
844
+ */
845
+ func computeSingleLoopDownloadRange(fullRange: CompactBlockRange, loopCounter: Int, batchSize: BlockHeight) -> CompactBlockRange {
846
+ let lowerBound = fullRange.lowerBound + (loopCounter * batchSize)
847
+ let upperBound = min(fullRange.lowerBound + ((loopCounter + 1) * batchSize) - 1, fullRange.upperBound)
848
+ return lowerBound...upperBound
849
+ }
850
+
851
+ /// It may happen that sync process start with syncing blocks that were downloaded but not synced in previous run of the sync process. This
852
+ /// methods analyses what must be done and computes range that should be used to compute reported progress.
853
+ private func computeTotalProgressRange(from syncRanges: SyncRanges) -> CompactBlockRange {
854
+ guard syncRanges.downloadedButUnscannedRange != nil || syncRanges.downloadAndScanRange != nil else {
855
+ // In this case we are sure that no downloading or scanning happens so this returned range won't be even used. And it's easier to return
856
+ // this "fake" range than to handle nil.
857
+ return 0...0
858
+ }
859
+
860
+ // Thanks to guard above we can be sure that one of these two ranges is not nil.
861
+ let lowerBound = syncRanges.downloadedButUnscannedRange?.lowerBound ?? syncRanges.downloadAndScanRange?.lowerBound ?? 0
862
+ let upperBound = syncRanges.downloadAndScanRange?.upperBound ?? syncRanges.downloadedButUnscannedRange?.upperBound ?? 0
863
+
864
+ return lowerBound...upperBound
865
+ }
866
+
867
+ func notifyMinedTransaction(_ tx: ZcashTransaction.Overview) async {
868
+ logger.debug("notify mined transaction: \(tx)")
869
+ await send(event: .minedTransaction(tx))
870
+ }
871
+
872
+ func notifyProgress(_ progress: CompactBlockProgress) async {
873
+ logger.debug("progress: \(progress)")
874
+ await send(event: .progressUpdated(progress))
875
+ }
876
+
877
+ func notifyTransactions(_ txs: [ZcashTransaction.Overview], in range: CompactBlockRange) async {
878
+ await send(event: .foundTransactions(txs, range))
879
+ }
880
+
881
+ func determineLowerBound(
882
+ errorHeight: Int,
883
+ consecutiveErrors: Int,
884
+ walletBirthday: BlockHeight
885
+ ) -> BlockHeight {
886
+ let offset = min(ZcashSDK.maxReorgSize, ZcashSDK.defaultRewindDistance * (consecutiveErrors + 1))
887
+ return max(errorHeight - offset, walletBirthday - ZcashSDK.maxReorgSize)
888
+ }
889
+
890
+ func severeFailure(_ error: Error) async {
891
+ cancelableTask?.cancel()
892
+ await blockDownloader.stopDownload()
893
+ logger.error("show stopper failure: \(error)")
894
+ self.backoffTimer?.invalidate()
895
+ self.retryAttempts = config.retries
896
+ self.processingError = error
897
+ await updateState(.error(error))
898
+ await self.notifyError(error)
899
+ }
900
+
901
+ func fail(_ error: Error) async {
902
+ // TODO: [#713] specify: failure. https://github.com/zcash/ZcashLightClientKit/issues/713
903
+ logger.error("\(error)")
904
+ cancelableTask?.cancel()
905
+ await blockDownloader.stopDownload()
906
+ self.retryAttempts += 1
907
+ self.processingError = error
908
+ switch self.state {
909
+ case .error:
910
+ await notifyError(error)
911
+ default:
912
+ break
913
+ }
914
+ await updateState(.error(error))
915
+ guard self.maxAttemptsReached else { return }
916
+ // don't set a new timer if there are no more attempts.
917
+ await self.setTimer()
918
+ }
919
+
920
+ private func validateConfiguration() throws {
921
+ guard FileManager.default.isReadableFile(atPath: config.fsBlockCacheRoot.absoluteString) else {
922
+ throw ZcashError.compactBlockProcessorMissingDbPath(config.fsBlockCacheRoot.absoluteString)
923
+ }
924
+
925
+ guard FileManager.default.isReadableFile(atPath: config.dataDb.absoluteString) else {
926
+ throw ZcashError.compactBlockProcessorMissingDbPath(config.dataDb.absoluteString)
927
+ }
928
+ }
929
+
930
+ private func nextBatch() async {
931
+ await updateState(.syncing)
932
+ if backoffTimer == nil { await setTimer() }
933
+ do {
934
+ let nextState = try await NextStateHelper.nextState(
935
+ service: self.service,
936
+ downloaderService: blockDownloaderService,
937
+ latestBlocksDataProvider: latestBlocksDataProvider,
938
+ config: self.config,
939
+ rustBackend: self.rustBackend,
940
+ internalSyncProgress: internalSyncProgress
941
+ )
942
+ switch nextState {
943
+ case .finishProcessing(let height):
944
+ await self.processingFinished(height: height)
945
+ case .processNewBlocks(let ranges):
946
+ await self.processNewBlocks(ranges: ranges)
947
+ case let .wait(latestHeight, latestDownloadHeight):
948
+ // Lightwalletd might be syncing
949
+ logger.info(
950
+ "Lightwalletd might be syncing: latest downloaded block height is: \(latestDownloadHeight) " +
951
+ "while latest blockheight is reported at: \(latestHeight)"
952
+ )
953
+ await self.processingFinished(height: latestDownloadHeight)
954
+ }
955
+ } catch {
956
+ await self.severeFailure(error)
957
+ }
958
+ }
959
+
960
+ internal func validationFailed(at height: BlockHeight) async {
961
+ // cancel all Tasks
962
+ cancelableTask?.cancel()
963
+ await blockDownloader.stopDownload()
964
+
965
+ // register latest failure
966
+ self.lastChainValidationFailure = height
967
+
968
+ // rewind
969
+ let rewindHeight = determineLowerBound(
970
+ errorHeight: height,
971
+ consecutiveErrors: consecutiveChainValidationErrors,
972
+ walletBirthday: self.config.walletBirthday
973
+ )
974
+
975
+ self.consecutiveChainValidationErrors += 1
976
+
977
+ do {
978
+ try await rustBackend.rewindToHeight(height: Int32(rewindHeight))
979
+ } catch {
980
+ await fail(error)
981
+ return
982
+ }
983
+
984
+ do {
985
+ try await blockDownloaderService.rewind(to: rewindHeight)
986
+ await internalSyncProgress.rewind(to: rewindHeight)
987
+
988
+ await send(event: .handledReorg(height, rewindHeight))
989
+
990
+ // process next batch
991
+ await self.nextBatch()
992
+ } catch {
993
+ await self.fail(error)
994
+ }
995
+ }
996
+
997
+ internal func processBatchFinished(height: BlockHeight?) async {
998
+ retryAttempts = 0
999
+ consecutiveChainValidationErrors = 0
1000
+
1001
+ if let height {
1002
+ await processingFinished(height: height)
1003
+ } else {
1004
+ await nextBatch()
1005
+ }
1006
+ }
1007
+
1008
+ private func processingFinished(height: BlockHeight) async {
1009
+ await send(event: .finished(height, foundBlocks))
1010
+ await updateState(.synced)
1011
+ await setTimer()
1012
+ }
1013
+
1014
+ private func ifTaskIsNotCanceledClearCompactBlockCache(lastScannedHeight: BlockHeight) async {
1015
+ guard !Task.isCancelled else { return }
1016
+ do {
1017
+ // Blocks download work in parallel with scanning. So imagine this scenario:
1018
+ //
1019
+ // Scanning is done until height 10300. Blocks are downloaded until height 10400.
1020
+ // And now validation fails and this method is called. And `.latestDownloadedBlockHeight` in `internalSyncProgress` is set to 10400. And
1021
+ // all the downloaded blocks are removed here.
1022
+ //
1023
+ // If this line doesn't happen then when sync starts next time it thinks that all the blocks are downloaded until 10400. But all were
1024
+ // removed. So blocks between 10300 and 10400 wouldn't ever be scanned.
1025
+ //
1026
+ // Scanning is done until 10300 so the SDK can be sure that blocks with height below 10300 are not required. So it makes sense to set
1027
+ // `.latestDownloadedBlockHeight` to `lastScannedHeight`. And sync will work fine in next run.
1028
+ await internalSyncProgress.set(lastScannedHeight, .latestDownloadedBlockHeight)
1029
+ try await clearCompactBlockCache()
1030
+ } catch {
1031
+ logger.error("`clearCompactBlockCache` failed after error: \(error)")
1032
+ }
1033
+ }
1034
+
1035
+ private func clearCompactBlockCache(upTo height: BlockHeight) async throws {
1036
+ try await storage.clear(upTo: height)
1037
+ logger.info("Cache removed upTo \(height)")
1038
+ }
1039
+
1040
+ private func clearCompactBlockCache() async throws {
1041
+ await blockDownloader.stopDownload()
1042
+ try await storage.clear()
1043
+ logger.info("Cache removed")
1044
+ }
1045
+
1046
+ private func setTimer() async {
1047
+ let interval = self.config.blockPollInterval
1048
+ self.backoffTimer?.invalidate()
1049
+ let timer = Timer(
1050
+ timeInterval: interval,
1051
+ repeats: true,
1052
+ block: { [weak self] _ in
1053
+ Task { [weak self] in
1054
+ guard let self else { return }
1055
+ switch await self.state {
1056
+ case .syncing, .enhancing, .fetching, .handlingSaplingFiles:
1057
+ await self.latestBlocksDataProvider.updateBlockData()
1058
+ case .stopped, .error, .synced:
1059
+ if await self.shouldStart {
1060
+ self.logger.debug(
1061
+ """
1062
+ Timer triggered: Starting compact Block processor!.
1063
+ Processor State: \(await self.state)
1064
+ latestHeight: \(try await self.transactionRepository.lastScannedHeight())
1065
+ attempts: \(await self.retryAttempts)
1066
+ """
1067
+ )
1068
+ await self.start()
1069
+ } else if await self.maxAttemptsReached {
1070
+ await self.fail(ZcashError.compactBlockProcessorMaxAttemptsReached(self.config.retries))
1071
+ }
1072
+ }
1073
+ }
1074
+ }
1075
+ )
1076
+ RunLoop.main.add(timer, forMode: .default)
1077
+
1078
+ self.backoffTimer = timer
1079
+ }
1080
+
1081
+ private func transitionState(from oldValue: State, to newValue: State) async {
1082
+ guard oldValue != newValue else {
1083
+ return
1084
+ }
1085
+
1086
+ switch newValue {
1087
+ case .error(let err):
1088
+ await notifyError(err)
1089
+ case .stopped:
1090
+ await send(event: .stopped)
1091
+ case .enhancing:
1092
+ await send(event: .startedEnhancing)
1093
+ case .fetching:
1094
+ await send(event: .startedFetching)
1095
+ case .handlingSaplingFiles:
1096
+ // We don't report this to outside world as separate phase for now.
1097
+ break
1098
+ case .synced:
1099
+ // transition to this state is handled by `processingFinished(height: BlockHeight)`
1100
+ break
1101
+ case .syncing:
1102
+ await send(event: .startedSyncing)
1103
+ }
1104
+ }
1105
+
1106
+ private func notifyError(_ err: Error) async {
1107
+ await send(event: .failed(err))
1108
+ }
1109
+ // TODO: [#713] encapsulate service errors better, https://github.com/zcash/ZcashLightClientKit/issues/713
1110
+ }
1111
+
1112
+ extension CompactBlockProcessor.State: Equatable {
1113
+ public static func == (lhs: CompactBlockProcessor.State, rhs: CompactBlockProcessor.State) -> Bool {
1114
+ switch (lhs, rhs) {
1115
+ case
1116
+ (.syncing, .syncing),
1117
+ (.stopped, .stopped),
1118
+ (.error, .error),
1119
+ (.synced, .synced),
1120
+ (.enhancing, .enhancing),
1121
+ (.fetching, .fetching):
1122
+ return true
1123
+ default:
1124
+ return false
1125
+ }
1126
+ }
1127
+ }
1128
+
1129
+ extension CompactBlockProcessor {
1130
+ func getUnifiedAddress(accountIndex: Int) async throws -> UnifiedAddress {
1131
+ try await rustBackend.getCurrentAddress(account: Int32(accountIndex))
1132
+ }
1133
+
1134
+ func getSaplingAddress(accountIndex: Int) async throws -> SaplingAddress {
1135
+ try await getUnifiedAddress(accountIndex: accountIndex).saplingReceiver()
1136
+ }
1137
+
1138
+ func getTransparentAddress(accountIndex: Int) async throws -> TransparentAddress {
1139
+ try await getUnifiedAddress(accountIndex: accountIndex).transparentReceiver()
1140
+ }
1141
+
1142
+ func getTransparentBalance(accountIndex: Int) async throws -> WalletBalance {
1143
+ guard accountIndex >= 0 else {
1144
+ throw ZcashError.compactBlockProcessorInvalidAccount
1145
+ }
1146
+
1147
+ return WalletBalance(
1148
+ verified: Zatoshi(
1149
+ try await rustBackend.getVerifiedTransparentBalance(account: Int32(accountIndex))
1150
+ ),
1151
+ total: Zatoshi(
1152
+ try await rustBackend.getTransparentBalance(account: Int32(accountIndex))
1153
+ )
1154
+ )
1155
+ }
1156
+ }
1157
+
1158
+ extension CompactBlockProcessor {
1159
+ func refreshUTXOs(tAddress: TransparentAddress, startHeight: BlockHeight) async throws -> RefreshedUTXOs {
1160
+ let dataDb = self.config.dataDb
1161
+
1162
+ let stream: AsyncThrowingStream<UnspentTransactionOutputEntity, Error> = blockDownloaderService.fetchUnspentTransactionOutputs(
1163
+ tAddress: tAddress.stringEncoded,
1164
+ startHeight: startHeight
1165
+ )
1166
+ var utxos: [UnspentTransactionOutputEntity] = []
1167
+
1168
+ do {
1169
+ for try await utxo in stream {
1170
+ utxos.append(utxo)
1171
+ }
1172
+ return await storeUTXOs(utxos, in: dataDb)
1173
+ } catch {
1174
+ throw error
1175
+ }
1176
+ }
1177
+
1178
+ private func storeUTXOs(_ utxos: [UnspentTransactionOutputEntity], in dataDb: URL) async -> RefreshedUTXOs {
1179
+ var refreshed: [UnspentTransactionOutputEntity] = []
1180
+ var skipped: [UnspentTransactionOutputEntity] = []
1181
+ for utxo in utxos {
1182
+ do {
1183
+ try await rustBackend.putUnspentTransparentOutput(
1184
+ txid: utxo.txid.bytes,
1185
+ index: utxo.index,
1186
+ script: utxo.script.bytes,
1187
+ value: Int64(utxo.valueZat),
1188
+ height: utxo.height
1189
+ )
1190
+
1191
+ refreshed.append(utxo)
1192
+ } catch {
1193
+ logger.info("failed to put utxo - error: \(error)")
1194
+ skipped.append(utxo)
1195
+ }
1196
+ }
1197
+ return (inserted: refreshed, skipped: skipped)
1198
+ }
1199
+ }
1200
+
1201
+ extension CompactBlockProcessor {
1202
+ enum NextState: Equatable {
1203
+ case finishProcessing(height: BlockHeight)
1204
+ case processNewBlocks(ranges: SyncRanges)
1205
+ case wait(latestHeight: BlockHeight, latestDownloadHeight: BlockHeight)
1206
+ }
1207
+
1208
+ @discardableResult
1209
+ func figureNextBatch(
1210
+ downloaderService: BlockDownloaderService
1211
+ ) async throws -> NextState {
1212
+ try Task.checkCancellation()
1213
+
1214
+ do {
1215
+ return try await CompactBlockProcessor.NextStateHelper.nextState(
1216
+ service: service,
1217
+ downloaderService: downloaderService,
1218
+ latestBlocksDataProvider: latestBlocksDataProvider,
1219
+ config: config,
1220
+ rustBackend: rustBackend,
1221
+ internalSyncProgress: internalSyncProgress
1222
+ )
1223
+ } catch {
1224
+ throw error
1225
+ }
1226
+ }
1227
+ }
1228
+
1229
+ extension CompactBlockProcessor {
1230
+ enum NextStateHelper {
1231
+ // swiftlint:disable:next function_parameter_count
1232
+ static func nextState(
1233
+ service: LightWalletService,
1234
+ downloaderService: BlockDownloaderService,
1235
+ latestBlocksDataProvider: LatestBlocksDataProvider,
1236
+ config: Configuration,
1237
+ rustBackend: ZcashRustBackendWelding,
1238
+ internalSyncProgress: InternalSyncProgress
1239
+ ) async throws -> CompactBlockProcessor.NextState {
1240
+ // It should be ok to not create new Task here because this method is already async. But for some reason something not good happens
1241
+ // when Task is not created here. For example tests start failing. Reason is unknown at this time.
1242
+ let task = Task(priority: .userInitiated) {
1243
+ let info = try await service.getInfo()
1244
+
1245
+ try await CompactBlockProcessor.validateServerInfo(
1246
+ info,
1247
+ saplingActivation: config.saplingActivation,
1248
+ localNetwork: config.network,
1249
+ rustBackend: rustBackend
1250
+ )
1251
+
1252
+ let latestDownloadHeight = try await downloaderService.lastDownloadedBlockHeight()
1253
+
1254
+ await internalSyncProgress.migrateIfNeeded(latestDownloadedBlockHeightFromCacheDB: latestDownloadHeight)
1255
+
1256
+ await latestBlocksDataProvider.updateScannedData()
1257
+ await latestBlocksDataProvider.updateBlockData()
1258
+
1259
+ return await internalSyncProgress.computeNextState(
1260
+ latestBlockHeight: latestBlocksDataProvider.latestBlockHeight,
1261
+ latestScannedHeight: latestBlocksDataProvider.latestScannedHeight,
1262
+ walletBirthday: config.walletBirthday
1263
+ )
1264
+ }
1265
+
1266
+ return try await task.value
1267
+ }
1268
+ }
1269
+ }
1270
+
1271
+ /// This extension contains asociated types and functions needed to clean up the
1272
+ /// `cacheDb` in favor of `FsBlockDb`. Once this cleanup functionality is deprecated,
1273
+ /// delete the whole extension and reference to it in other parts of the code including tests.
1274
+ extension CompactBlockProcessor {
1275
+ public enum CacheDbMigrationError: Error {
1276
+ case fsCacheMigrationFailedSameURL
1277
+ case failedToDeleteLegacyDb(Error)
1278
+ case failedToInitFsBlockDb(Error)
1279
+ case failedToSetDownloadHeight(Error)
1280
+ }
1281
+
1282
+ /// Deletes the SQLite cacheDb and attempts to initialize the fsBlockDbRoot
1283
+ /// - parameter legacyCacheDbURL: the URL where the cache Db used to be stored.
1284
+ /// - Throws: `InitializerError.fsCacheInitFailedSameURL` when the given URL
1285
+ /// is the same URL than the one provided as `self.fsBlockDbRoot` assuming that's a
1286
+ /// programming error being the `legacyCacheDbURL` a sqlite database file and not a
1287
+ /// directory. Also throws errors from initializing the fsBlockDbRoot.
1288
+ ///
1289
+ /// - Note: Errors from deleting the `legacyCacheDbURL` won't be throwns.
1290
+ func migrateCacheDb(_ legacyCacheDbURL: URL) async throws {
1291
+ guard legacyCacheDbURL != config.fsBlockCacheRoot else {
1292
+ throw ZcashError.compactBlockProcessorCacheDbMigrationFsCacheMigrationFailedSameURL
1293
+ }
1294
+
1295
+ // Instance with alias `default` is same as instance before the Alias was introduced. So it makes sense that only this instance handles
1296
+ // legacy cache DB. Any instance with different than `default` alias was created after the Alias was introduced and at this point legacy
1297
+ // cache DB is't anymore. So there is nothing to migrate for instances with not default Alias.
1298
+ guard config.alias == .default else {
1299
+ return
1300
+ }
1301
+
1302
+ // if the URL provided is not readable, it means that the client has a reference
1303
+ // to the cacheDb file but it has been deleted in a prior sync cycle. there's
1304
+ // nothing to do here.
1305
+ guard FileManager.default.isReadableFile(atPath: legacyCacheDbURL.path) else {
1306
+ return
1307
+ }
1308
+
1309
+ do {
1310
+ // if there's a readable file at the provided URL, delete it.
1311
+ try FileManager.default.removeItem(at: legacyCacheDbURL)
1312
+ } catch {
1313
+ throw ZcashError.compactBlockProcessorCacheDbMigrationFailedToDeleteLegacyDb(error)
1314
+ }
1315
+
1316
+ // create the storage
1317
+ try await self.storage.create()
1318
+
1319
+ // The database has been deleted, so we have adjust the internal state of the
1320
+ // `CompactBlockProcessor` so that it doesn't rely on download heights set
1321
+ // by a previous processing cycle.
1322
+ let lastScannedHeight = try await transactionRepository.lastScannedHeight()
1323
+
1324
+ await internalSyncProgress.set(lastScannedHeight, .latestDownloadedBlockHeight)
1325
+ }
1326
+
1327
+ func wipeLegacyCacheDbIfNeeded() {
1328
+ guard let cacheDbURL = config.cacheDbURL else {
1329
+ return
1330
+ }
1331
+
1332
+ guard FileManager.default.isDeletableFile(atPath: cacheDbURL.pathExtension) else {
1333
+ return
1334
+ }
1335
+
1336
+ try? FileManager.default.removeItem(at: cacheDbURL)
1337
+ }
1338
+ }
1339
+
1340
+ extension SyncRanges {
1341
+ /// Tells whether the state represented by these sync ranges evidence some sort of
1342
+ /// outdated state on the cache or the internal state of the compact block processor.
1343
+ ///
1344
+ /// - Note: this can mean that the processor has synced over the height that the internal
1345
+ /// state knows of because the sync process was interrupted before it could reflect
1346
+ /// it in the internal state storage. This could happen because of many factors, the
1347
+ /// most feasible being OS shutting down a background process or the user abruptly
1348
+ /// exiting the app.
1349
+ /// - Returns: an ``Optional<BlockHeight>`` where Some represents what's the
1350
+ /// new state the internal state should reflect and indicating that the cache should be cleared
1351
+ /// as well. c`None` means that no action is required.
1352
+ func shouldClearBlockCacheAndUpdateInternalState() -> BlockHeight? {
1353
+ guard self.downloadedButUnscannedRange != nil else {
1354
+ return nil
1355
+ }
1356
+
1357
+ guard
1358
+ let latestScannedHeight = self.latestScannedHeight,
1359
+ let latestDownloadedHeight = self.latestDownloadedBlockHeight,
1360
+ latestScannedHeight > latestDownloadedHeight
1361
+ else { return nil }
1362
+
1363
+ return latestScannedHeight
1364
+ }
1365
+ }