react-native-zcash 0.3.4 → 0.3.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (427) hide show
  1. package/CHANGELOG.md +5 -0
  2. package/LICENSE +22 -0
  3. package/README.md +44 -44
  4. package/android/build.gradle +1 -1
  5. package/ios/RNZcash.m +0 -1
  6. package/ios/RNZcash.swift +14 -15
  7. package/ios/ZCashLightClientKit/Block/DatabaseStorage/CompactBlockStorage.swift +123 -0
  8. package/ios/ZCashLightClientKit/Block/DatabaseStorage/DatabaseMigrationManager.swift +222 -0
  9. package/ios/ZCashLightClientKit/Block/DatabaseStorage/StorageError.swift +22 -0
  10. package/ios/ZCashLightClientKit/Block/DatabaseStorage/StorageManager.swift +73 -0
  11. package/ios/ZCashLightClientKit/Block/Downloader/BlockDownloader.swift +240 -0
  12. package/ios/ZCashLightClientKit/Block/Downloader/CompactBlockDownloaderBuilder.swift +26 -0
  13. package/ios/ZCashLightClientKit/Block/Processor/CompactBlockDownloadOperation.swift +258 -0
  14. package/ios/ZCashLightClientKit/Block/Processor/CompactBlockEnhancementOperation.swift +157 -0
  15. package/ios/ZCashLightClientKit/Block/Processor/CompactBlockProcessor.swift +1454 -0
  16. package/ios/ZCashLightClientKit/Block/Processor/CompactBlockScanningOperation.swift +238 -0
  17. package/ios/ZCashLightClientKit/Block/Processor/CompactBlockValidationInformation.swift +66 -0
  18. package/ios/ZCashLightClientKit/Block/Processor/FetchUnspentTxOutputsOperation.swift +103 -0
  19. package/ios/ZCashLightClientKit/Block/Processor/FigureNextBatchOperation.swift +58 -0
  20. package/ios/ZCashLightClientKit/Block/Processor/ZcashOperation.swift +68 -0
  21. package/ios/ZCashLightClientKit/Constants/WalletBirthday+Constants.swift +58 -0
  22. package/ios/ZCashLightClientKit/Constants/WalletBirthday+mainnet.swift +20 -0
  23. package/ios/ZCashLightClientKit/Constants/WalletBirthday+testnet.swift +20 -0
  24. package/ios/ZCashLightClientKit/Constants/ZcashSDK.swift +245 -0
  25. package/ios/ZCashLightClientKit/DAO/BlockDao.swift +67 -0
  26. package/ios/ZCashLightClientKit/DAO/CompactBlockDAO.swift +24 -0
  27. package/ios/ZCashLightClientKit/DAO/NotesDao.swift +142 -0
  28. package/ios/ZCashLightClientKit/DAO/PagedTransactionDao.swift +62 -0
  29. package/ios/ZCashLightClientKit/DAO/PendingTransactionDao.swift +213 -0
  30. package/ios/ZCashLightClientKit/DAO/TransactionBuilder.swift +169 -0
  31. package/ios/ZCashLightClientKit/DAO/TransactionDao.swift +393 -0
  32. package/ios/ZCashLightClientKit/DAO/UnspentTransactionOutputDao.swift +188 -0
  33. package/ios/ZCashLightClientKit/Entity/AccountEntity.swift +201 -0
  34. package/ios/ZCashLightClientKit/Entity/CompactBlockEntity.swift +13 -0
  35. package/ios/ZCashLightClientKit/Entity/EncodedTransactionEntity.swift +26 -0
  36. package/ios/ZCashLightClientKit/Entity/PendingTransactionEntity.swift +205 -0
  37. package/ios/ZCashLightClientKit/Entity/ReceivedNoteEntity.swift +22 -0
  38. package/ios/ZCashLightClientKit/Entity/SentNoteEntity.swift +45 -0
  39. package/ios/ZCashLightClientKit/Entity/TransactionEntity.swift +161 -0
  40. package/ios/ZCashLightClientKit/Entity/UnspentTransactionOutputEntity.swift +17 -0
  41. package/ios/ZCashLightClientKit/Extensions/Data+Zcash.swift +17 -0
  42. package/ios/ZCashLightClientKit/Extensions/Data+internal.swift +35 -0
  43. package/ios/ZCashLightClientKit/Extensions/HexEncode.swift +41 -0
  44. package/ios/ZCashLightClientKit/Extensions/ZcashRust+Utils.swift +26 -0
  45. package/ios/ZCashLightClientKit/Extensions/ZcashSDK+extensions.swift +34 -0
  46. package/ios/ZCashLightClientKit/Initializer.swift +357 -0
  47. package/ios/ZCashLightClientKit/Model/WalletTypes.swift +108 -0
  48. package/ios/ZCashLightClientKit/Providers/ResourceProvider.swift +47 -0
  49. package/ios/ZCashLightClientKit/Repository/BlockRepository.swift +13 -0
  50. package/ios/ZCashLightClientKit/Repository/CompactBlockRepository.swift +75 -0
  51. package/ios/ZCashLightClientKit/Repository/NotesRepository.swift +16 -0
  52. package/ios/ZCashLightClientKit/Repository/PaginatedTransactionRepository.swift +35 -0
  53. package/ios/ZCashLightClientKit/Repository/PendingTransactionRepository.swift +19 -0
  54. package/ios/ZCashLightClientKit/Repository/TransactionRepository.swift +30 -0
  55. package/ios/ZCashLightClientKit/Repository/TransactionRepositoryBuilder.swift +24 -0
  56. package/ios/ZCashLightClientKit/Repository/UnspentTransactionOutputRepository.swift +18 -0
  57. package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/mainnet/1000000.json +7 -0
  58. package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/mainnet/1010000.json +7 -0
  59. package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/mainnet/1020000.json +7 -0
  60. package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/mainnet/1030000.json +7 -0
  61. package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/mainnet/1040000.json +7 -0
  62. package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/mainnet/1050000.json +7 -0
  63. package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/mainnet/1060000.json +7 -0
  64. package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/mainnet/1070000.json +7 -0
  65. package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/mainnet/1080000.json +7 -0
  66. package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/mainnet/1090000.json +7 -0
  67. package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/mainnet/1100000.json +7 -0
  68. package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/mainnet/1110000.json +7 -0
  69. package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/mainnet/1120000.json +7 -0
  70. package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/mainnet/1130000.json +7 -0
  71. package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/mainnet/1140000.json +7 -0
  72. package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/mainnet/1150000.json +7 -0
  73. package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/mainnet/1160000.json +7 -0
  74. package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/mainnet/1170000.json +7 -0
  75. package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/mainnet/1180000.json +7 -0
  76. package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/mainnet/1190000.json +7 -0
  77. package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/mainnet/1200000.json +7 -0
  78. package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/mainnet/1210000.json +7 -0
  79. package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/mainnet/1220000.json +7 -0
  80. package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/mainnet/1230000.json +7 -0
  81. package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/mainnet/1240000.json +7 -0
  82. package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/mainnet/1250000.json +7 -0
  83. package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/mainnet/1260000.json +7 -0
  84. package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/mainnet/1270000.json +7 -0
  85. package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/mainnet/1280000.json +7 -0
  86. package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/mainnet/1290000.json +7 -0
  87. package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/mainnet/1300000.json +7 -0
  88. package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/mainnet/1310000.json +7 -0
  89. package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/mainnet/1320000.json +7 -0
  90. package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/mainnet/1330000.json +7 -0
  91. package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/mainnet/1340000.json +7 -0
  92. package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/mainnet/1350000.json +7 -0
  93. package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/mainnet/1360000.json +7 -0
  94. package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/mainnet/1370000.json +7 -0
  95. package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/mainnet/1380000.json +7 -0
  96. package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/mainnet/1390000.json +7 -0
  97. package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/mainnet/1400000.json +7 -0
  98. package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/mainnet/1410000.json +7 -0
  99. package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/mainnet/1420000.json +7 -0
  100. package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/mainnet/1430000.json +7 -0
  101. package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/mainnet/1440000.json +7 -0
  102. package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/mainnet/1450000.json +7 -0
  103. package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/mainnet/1460000.json +7 -0
  104. package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/mainnet/1470000.json +7 -0
  105. package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/mainnet/1480000.json +7 -0
  106. package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/mainnet/1490000.json +7 -0
  107. package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/mainnet/1500000.json +7 -0
  108. package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/mainnet/1510000.json +7 -0
  109. package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/mainnet/1520000.json +7 -0
  110. package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/mainnet/1530000.json +7 -0
  111. package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/mainnet/1540000.json +7 -0
  112. package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/mainnet/1550000.json +7 -0
  113. package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/mainnet/1560000.json +7 -0
  114. package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/mainnet/1570000.json +7 -0
  115. package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/mainnet/1580000.json +7 -0
  116. package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/mainnet/1590000.json +7 -0
  117. package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/mainnet/1600000.json +7 -0
  118. package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/mainnet/1610000.json +7 -0
  119. package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/mainnet/1620000.json +7 -0
  120. package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/mainnet/1630000.json +7 -0
  121. package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/mainnet/1640000.json +7 -0
  122. package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/mainnet/1650000.json +7 -0
  123. package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/mainnet/1660000.json +7 -0
  124. package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/mainnet/1670000.json +7 -0
  125. package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/mainnet/1680000.json +7 -0
  126. package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/mainnet/1690000.json +7 -0
  127. package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/mainnet/1700000.json +7 -0
  128. package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/mainnet/1710000.json +7 -0
  129. package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/mainnet/1720000.json +7 -0
  130. package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/mainnet/1730000.json +7 -0
  131. package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/mainnet/1740000.json +7 -0
  132. package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/mainnet/1750000.json +7 -0
  133. package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/mainnet/1760000.json +7 -0
  134. package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/mainnet/1770000.json +7 -0
  135. package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/mainnet/1780000.json +7 -0
  136. package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/mainnet/1790000.json +7 -0
  137. package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/mainnet/1800000.json +7 -0
  138. package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/mainnet/1810000.json +7 -0
  139. package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/mainnet/1820000.json +7 -0
  140. package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/mainnet/1830000.json +7 -0
  141. package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/mainnet/1840000.json +7 -0
  142. package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/mainnet/1850000.json +7 -0
  143. package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/mainnet/1860000.json +7 -0
  144. package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/mainnet/1870000.json +7 -0
  145. package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/mainnet/1880000.json +7 -0
  146. package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/mainnet/1890000.json +7 -0
  147. package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/mainnet/1900000.json +7 -0
  148. package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/mainnet/1910000.json +7 -0
  149. package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/mainnet/1920000.json +7 -0
  150. package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/mainnet/1930000.json +7 -0
  151. package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/mainnet/1940000.json +7 -0
  152. package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/mainnet/1950000.json +7 -0
  153. package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/mainnet/1960000.json +7 -0
  154. package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/mainnet/1970000.json +7 -0
  155. package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/mainnet/1980000.json +7 -0
  156. package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/mainnet/1990000.json +7 -0
  157. package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/mainnet/2000000.json +7 -0
  158. package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/mainnet/2010000.json +7 -0
  159. package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/mainnet/2020000.json +7 -0
  160. package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/mainnet/2030000.json +7 -0
  161. package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/mainnet/2040000.json +7 -0
  162. package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/mainnet/2050000.json +7 -0
  163. package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/mainnet/2060000.json +7 -0
  164. package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/mainnet/2070000.json +7 -0
  165. package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/mainnet/2080000.json +7 -0
  166. package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/mainnet/2090000.json +7 -0
  167. package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/mainnet/2100000.json +7 -0
  168. package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/mainnet/2110000.json +7 -0
  169. package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/mainnet/2120000.json +7 -0
  170. package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/mainnet/2130000.json +7 -0
  171. package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/mainnet/2140000.json +7 -0
  172. package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/mainnet/2150000.json +7 -0
  173. package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/mainnet/2160000.json +7 -0
  174. package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/mainnet/2170000.json +7 -0
  175. package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/mainnet/419200.json +7 -0
  176. package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/mainnet/500000.json +7 -0
  177. package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/mainnet/510000.json +7 -0
  178. package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/mainnet/520000.json +7 -0
  179. package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/mainnet/530000.json +7 -0
  180. package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/mainnet/540000.json +7 -0
  181. package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/mainnet/550000.json +7 -0
  182. package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/mainnet/560000.json +7 -0
  183. package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/mainnet/570000.json +7 -0
  184. package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/mainnet/580000.json +7 -0
  185. package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/mainnet/590000.json +7 -0
  186. package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/mainnet/600000.json +7 -0
  187. package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/mainnet/610000.json +7 -0
  188. package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/mainnet/620000.json +7 -0
  189. package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/mainnet/630000.json +7 -0
  190. package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/mainnet/640000.json +7 -0
  191. package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/mainnet/650000.json +7 -0
  192. package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/mainnet/660000.json +7 -0
  193. package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/mainnet/663150.json +8 -0
  194. package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/mainnet/670000.json +7 -0
  195. package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/mainnet/680000.json +7 -0
  196. package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/mainnet/690000.json +7 -0
  197. package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/mainnet/700000.json +7 -0
  198. package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/mainnet/710000.json +7 -0
  199. package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/mainnet/720000.json +7 -0
  200. package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/mainnet/730000.json +7 -0
  201. package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/mainnet/740000.json +7 -0
  202. package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/mainnet/750000.json +7 -0
  203. package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/mainnet/760000.json +7 -0
  204. package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/mainnet/770000.json +7 -0
  205. package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/mainnet/780000.json +7 -0
  206. package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/mainnet/790000.json +7 -0
  207. package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/mainnet/800000.json +7 -0
  208. package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/mainnet/810000.json +7 -0
  209. package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/mainnet/820000.json +7 -0
  210. package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/mainnet/830000.json +7 -0
  211. package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/mainnet/840000.json +7 -0
  212. package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/mainnet/850000.json +7 -0
  213. package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/mainnet/860000.json +7 -0
  214. package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/mainnet/870000.json +7 -0
  215. package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/mainnet/880000.json +7 -0
  216. package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/mainnet/890000.json +7 -0
  217. package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/mainnet/900000.json +7 -0
  218. package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/mainnet/910000.json +7 -0
  219. package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/mainnet/920000.json +7 -0
  220. package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/mainnet/930000.json +7 -0
  221. package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/mainnet/940000.json +7 -0
  222. package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/mainnet/950000.json +7 -0
  223. package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/mainnet/960000.json +7 -0
  224. package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/mainnet/970000.json +7 -0
  225. package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/mainnet/980000.json +7 -0
  226. package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/mainnet/990000.json +7 -0
  227. package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/testnet/1000000.json +7 -0
  228. package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/testnet/1010000.json +7 -0
  229. package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/testnet/1020000.json +7 -0
  230. package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/testnet/1030000.json +7 -0
  231. package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/testnet/1040000.json +7 -0
  232. package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/testnet/1050000.json +7 -0
  233. package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/testnet/1060000.json +7 -0
  234. package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/testnet/1070000.json +7 -0
  235. package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/testnet/1080000.json +7 -0
  236. package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/testnet/1090000.json +7 -0
  237. package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/testnet/1100000.json +7 -0
  238. package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/testnet/1110000.json +7 -0
  239. package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/testnet/1120000.json +7 -0
  240. package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/testnet/1130000.json +7 -0
  241. package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/testnet/1140000.json +7 -0
  242. package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/testnet/1150000.json +7 -0
  243. package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/testnet/1160000.json +7 -0
  244. package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/testnet/1170000.json +7 -0
  245. package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/testnet/1180000.json +7 -0
  246. package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/testnet/1190000.json +7 -0
  247. package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/testnet/1200000.json +7 -0
  248. package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/testnet/1210000.json +7 -0
  249. package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/testnet/1220000.json +7 -0
  250. package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/testnet/1230000.json +7 -0
  251. package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/testnet/1240000.json +7 -0
  252. package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/testnet/1250000.json +7 -0
  253. package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/testnet/1260000.json +7 -0
  254. package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/testnet/1270000.json +7 -0
  255. package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/testnet/1280000.json +7 -0
  256. package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/testnet/1290000.json +7 -0
  257. package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/testnet/1300000.json +7 -0
  258. package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/testnet/1310000.json +7 -0
  259. package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/testnet/1320000.json +7 -0
  260. package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/testnet/1330000.json +7 -0
  261. package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/testnet/1340000.json +7 -0
  262. package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/testnet/1350000.json +7 -0
  263. package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/testnet/1360000.json +7 -0
  264. package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/testnet/1370000.json +7 -0
  265. package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/testnet/1380000.json +7 -0
  266. package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/testnet/1390000.json +7 -0
  267. package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/testnet/1400000.json +7 -0
  268. package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/testnet/1410000.json +7 -0
  269. package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/testnet/1420000.json +7 -0
  270. package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/testnet/1430000.json +7 -0
  271. package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/testnet/1440000.json +7 -0
  272. package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/testnet/1450000.json +7 -0
  273. package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/testnet/1460000.json +7 -0
  274. package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/testnet/1470000.json +7 -0
  275. package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/testnet/1480000.json +7 -0
  276. package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/testnet/1490000.json +7 -0
  277. package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/testnet/1500000.json +7 -0
  278. package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/testnet/1510000.json +7 -0
  279. package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/testnet/1520000.json +7 -0
  280. package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/testnet/1530000.json +7 -0
  281. package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/testnet/1540000.json +7 -0
  282. package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/testnet/1550000.json +7 -0
  283. package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/testnet/1560000.json +7 -0
  284. package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/testnet/1570000.json +7 -0
  285. package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/testnet/1580000.json +7 -0
  286. package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/testnet/1590000.json +7 -0
  287. package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/testnet/1600000.json +7 -0
  288. package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/testnet/1610000.json +7 -0
  289. package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/testnet/1620000.json +7 -0
  290. package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/testnet/1630000.json +7 -0
  291. package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/testnet/1640000.json +7 -0
  292. package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/testnet/1650000.json +7 -0
  293. package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/testnet/1660000.json +7 -0
  294. package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/testnet/1670000.json +7 -0
  295. package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/testnet/1680000.json +7 -0
  296. package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/testnet/1690000.json +7 -0
  297. package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/testnet/1700000.json +7 -0
  298. package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/testnet/1710000.json +7 -0
  299. package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/testnet/1720000.json +7 -0
  300. package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/testnet/1730000.json +7 -0
  301. package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/testnet/1740000.json +7 -0
  302. package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/testnet/1750000.json +7 -0
  303. package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/testnet/1760000.json +7 -0
  304. package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/testnet/1770000.json +7 -0
  305. package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/testnet/1780000.json +7 -0
  306. package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/testnet/1790000.json +7 -0
  307. package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/testnet/1800000.json +7 -0
  308. package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/testnet/1810000.json +7 -0
  309. package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/testnet/1820000.json +7 -0
  310. package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/testnet/1830000.json +7 -0
  311. package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/testnet/1840000.json +7 -0
  312. package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/testnet/1850000.json +7 -0
  313. package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/testnet/1860000.json +7 -0
  314. package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/testnet/280000.json +7 -0
  315. package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/testnet/290000.json +7 -0
  316. package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/testnet/300000.json +7 -0
  317. package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/testnet/310000.json +7 -0
  318. package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/testnet/320000.json +7 -0
  319. package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/testnet/330000.json +7 -0
  320. package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/testnet/340000.json +7 -0
  321. package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/testnet/350000.json +7 -0
  322. package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/testnet/360000.json +7 -0
  323. package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/testnet/370000.json +7 -0
  324. package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/testnet/380000.json +7 -0
  325. package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/testnet/390000.json +7 -0
  326. package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/testnet/400000.json +7 -0
  327. package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/testnet/410000.json +7 -0
  328. package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/testnet/420000.json +7 -0
  329. package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/testnet/430000.json +7 -0
  330. package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/testnet/440000.json +7 -0
  331. package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/testnet/450000.json +7 -0
  332. package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/testnet/460000.json +7 -0
  333. package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/testnet/470000.json +7 -0
  334. package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/testnet/480000.json +7 -0
  335. package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/testnet/490000.json +7 -0
  336. package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/testnet/500000.json +7 -0
  337. package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/testnet/510000.json +7 -0
  338. package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/testnet/520000.json +7 -0
  339. package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/testnet/530000.json +7 -0
  340. package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/testnet/540000.json +7 -0
  341. package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/testnet/550000.json +7 -0
  342. package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/testnet/560000.json +7 -0
  343. package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/testnet/570000.json +7 -0
  344. package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/testnet/580000.json +7 -0
  345. package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/testnet/590000.json +7 -0
  346. package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/testnet/600000.json +7 -0
  347. package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/testnet/610000.json +7 -0
  348. package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/testnet/620000.json +7 -0
  349. package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/testnet/630000.json +7 -0
  350. package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/testnet/640000.json +7 -0
  351. package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/testnet/650000.json +7 -0
  352. package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/testnet/660000.json +7 -0
  353. package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/testnet/670000.json +7 -0
  354. package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/testnet/680000.json +7 -0
  355. package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/testnet/690000.json +7 -0
  356. package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/testnet/700000.json +7 -0
  357. package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/testnet/710000.json +7 -0
  358. package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/testnet/720000.json +7 -0
  359. package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/testnet/730000.json +7 -0
  360. package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/testnet/740000.json +7 -0
  361. package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/testnet/750000.json +7 -0
  362. package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/testnet/760000.json +7 -0
  363. package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/testnet/770000.json +7 -0
  364. package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/testnet/780000.json +7 -0
  365. package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/testnet/790000.json +7 -0
  366. package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/testnet/800000.json +7 -0
  367. package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/testnet/810000.json +7 -0
  368. package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/testnet/820000.json +7 -0
  369. package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/testnet/830000.json +7 -0
  370. package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/testnet/840000.json +7 -0
  371. package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/testnet/850000.json +7 -0
  372. package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/testnet/860000.json +7 -0
  373. package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/testnet/870000.json +7 -0
  374. package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/testnet/880000.json +7 -0
  375. package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/testnet/890000.json +7 -0
  376. package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/testnet/900000.json +7 -0
  377. package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/testnet/910000.json +7 -0
  378. package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/testnet/920000.json +7 -0
  379. package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/testnet/930000.json +7 -0
  380. package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/testnet/940000.json +7 -0
  381. package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/testnet/950000.json +7 -0
  382. package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/testnet/960000.json +7 -0
  383. package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/testnet/970000.json +7 -0
  384. package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/testnet/980000.json +7 -0
  385. package/ios/ZCashLightClientKit/Resources/saplingtree-checkpoints/testnet/990000.json +7 -0
  386. package/ios/ZCashLightClientKit/Rust/ZcashRustBackend.swift +718 -0
  387. package/ios/ZCashLightClientKit/Rust/ZcashRustBackendWelding.swift +389 -0
  388. package/ios/ZCashLightClientKit/Rust/zcashlc.h +385 -0
  389. package/ios/ZCashLightClientKit/Service/LightWalletGRPCService.swift +551 -0
  390. package/ios/ZCashLightClientKit/Service/LightWalletService.swift +214 -0
  391. package/ios/ZCashLightClientKit/Service/Model/ZcashCompactBlock.swift +46 -0
  392. package/ios/ZCashLightClientKit/Service/ProtoBuf/Extensions/Protocolbuffer+Extensions.swift +50 -0
  393. package/ios/ZCashLightClientKit/Service/ProtoBuf/compact_formats.pb.swift +332 -0
  394. package/ios/ZCashLightClientKit/Service/ProtoBuf/proto/compact_formats.proto +56 -0
  395. package/ios/ZCashLightClientKit/Service/ProtoBuf/proto/service.proto +180 -0
  396. package/ios/ZCashLightClientKit/Service/ProtoBuf/service.grpc.swift +383 -0
  397. package/ios/ZCashLightClientKit/Service/ProtoBuf/service.pb.swift +1173 -0
  398. package/ios/ZCashLightClientKit/Synchronizer/SDKSynchronizer.swift +929 -0
  399. package/ios/ZCashLightClientKit/Synchronizer.swift +430 -0
  400. package/ios/ZCashLightClientKit/Tool/DerivationTool.swift +344 -0
  401. package/ios/ZCashLightClientKit/Transaction/PersistentTransactionManager.swift +339 -0
  402. package/ios/ZCashLightClientKit/Transaction/TransactionEncoder.swift +116 -0
  403. package/ios/ZCashLightClientKit/Transaction/TransactionManager.swift +42 -0
  404. package/ios/ZCashLightClientKit/Transaction/WalletTransactionEncoder.swift +216 -0
  405. package/ios/ZCashLightClientKit/Utils/Bundle+module.swift +30 -0
  406. package/ios/ZCashLightClientKit/Utils/LoggingProxy.swift +47 -0
  407. package/ios/ZCashLightClientKit/Utils/SaplingParameterDownloader.swift +124 -0
  408. package/ios/libzcashlc.xcframework/Info.plist +40 -0
  409. package/ios/libzcashlc.xcframework/ios-arm64/libzcashlc.a +0 -0
  410. package/ios/libzcashlc.xcframework/ios-arm64_x86_64-simulator/libzcashlc.a +0 -0
  411. package/ios/react-native-zcash-Bridging-Header.h +2 -0
  412. package/ios/react-native-zcash.xcodeproj/project.pbxproj +1 -0
  413. package/lib/scripts/copyCheckpoints.d.ts +5 -0
  414. package/lib/scripts/updateSources.d.ts +1 -0
  415. package/package.json +20 -37
  416. package/react-native-zcash.podspec +17 -7
  417. package/ios/RNZcash-Bridging-Header.h +0 -6
  418. package/ios/RNZcash.xcodeproj/project.pbxproj +0 -271
  419. package/ios/RNZcash.xcworkspace/contents.xcworkspacedata +0 -7
  420. package/ios/RNZcash.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist +0 -8
  421. package/lib/src/browser.d.ts +0 -0
  422. package/lib/src/index.d.ts +0 -0
  423. package/lib/test/test.test.d.ts +0 -0
  424. package/scripts/copyCheckpoints.js +0 -12
  425. package/src/browser.ts +0 -36
  426. package/src/index.flow.js +0 -168
  427. package/src/index.ts +0 -1
@@ -0,0 +1,344 @@
1
+ //
2
+ // DerivationTool.swift
3
+ // Pods
4
+ //
5
+ // Created by Francisco Gindre on 10/8/20.
6
+ //
7
+
8
+ import Foundation
9
+
10
+ public protocol KeyValidation {
11
+ func isValidExtendedViewingKey(_ extvk: String) throws -> Bool
12
+
13
+ func isValidTransparentAddress(_ tAddress: String) throws -> Bool
14
+
15
+ func isValidShieldedAddress(_ zAddress: String) throws -> Bool
16
+ }
17
+
18
+ public protocol KeyDeriving {
19
+ /**
20
+ Given a seed and a number of accounts, return the associated viewing keys.
21
+
22
+ - Parameter seed: the seed from which to derive viewing keys.
23
+ - Parameter numberOfAccounts: the number of accounts to use. Multiple accounts are not fully
24
+ supported so the default value of 1 is recommended.
25
+
26
+ - Returns: the viewing keys that correspond to the seed, formatted as Strings.
27
+ */
28
+ func deriveViewingKeys(seed: [UInt8], numberOfAccounts: Int) throws -> [String]
29
+
30
+ /**
31
+ Given a spending key, return the associated viewing key.
32
+
33
+ - Parameter spendingKey: the key from which to derive the viewing key.
34
+
35
+ - Returns: the viewing key that corresponds to the spending key.
36
+ */
37
+ func deriveViewingKey(spendingKey: String) throws -> String
38
+
39
+ /**
40
+ Given a seed and a number of accounts, return the associated spending keys.
41
+
42
+ - Parameter seed: the seed from which to derive spending keys.
43
+ - Parameter numberOfAccounts: the number of accounts to use. Multiple accounts are not fully
44
+ supported so the default value of 1 is recommended.
45
+
46
+ - Returns: the spending keys that correspond to the seed, formatted as Strings.
47
+ */
48
+ func deriveSpendingKeys(seed: [UInt8], numberOfAccounts: Int) throws -> [String]
49
+
50
+ /**
51
+ Given a seed and account index, return the associated address.
52
+
53
+ - Parameter seed: the seed from which to derive the address.
54
+ - Parameter accountIndex: the index of the account to use for deriving the address. Multiple
55
+ accounts are not fully supported so the default value of 1 is recommended.
56
+
57
+ - Returns: the address that corresponds to the seed and account index.
58
+ */
59
+ func deriveShieldedAddress(seed: [UInt8], accountIndex: Int) throws -> String
60
+
61
+ /**
62
+ Given a viewing key string, return the associated address.
63
+
64
+ - Parameter viewingKey: the viewing key to use for deriving the address. The viewing key is tied to
65
+ a specific account so no account index is required.
66
+
67
+ - Returns: the address that corresponds to the viewing key.
68
+ */
69
+ func deriveShieldedAddress(viewingKey: String) throws -> String
70
+
71
+ /**
72
+ Derives a transparent address from seedbytes, specifying account and index
73
+ */
74
+ func deriveTransparentAddress(seed: [UInt8], account: Int, index: Int) throws -> String
75
+
76
+ /**
77
+ Derives a SecretKey to spend transparent funds from a transparent secret key wif encoded
78
+ */
79
+ func deriveTransparentPrivateKey(seed: [UInt8], account: Int, index: Int) throws -> String
80
+
81
+ /**
82
+ Derives a transparent address from the given transparent Secret Key
83
+ */
84
+ func deriveTransparentAddressFromPrivateKey(_ tsk: String) throws -> String
85
+
86
+ func deriveTransparentAddressFromPublicKey(_ pubkey: String) throws -> String
87
+
88
+ /**
89
+ derives unified viewing keys from seedbytes, specifying a number of accounts
90
+ - Returns an array of unified viewing key tuples.
91
+ */
92
+ func deriveUnifiedViewingKeysFromSeed(_ seed: [UInt8], numberOfAccounts: Int) throws -> [UnifiedViewingKey]
93
+
94
+ /**
95
+ derives a Unified Address from a Unified Viewing Key
96
+ */
97
+ func deriveUnifiedAddressFromUnifiedViewingKey(_ uvk: UnifiedViewingKey) throws -> UnifiedAddress
98
+ }
99
+
100
+ public enum KeyDerivationErrors: Error {
101
+ case derivationError(underlyingError: Error)
102
+ case unableToDerive
103
+ case invalidInput
104
+ }
105
+
106
+ public class DerivationTool: KeyDeriving {
107
+ var rustwelding: ZcashRustBackendWelding.Type = ZcashRustBackend.self
108
+
109
+ var networkType: NetworkType
110
+
111
+ public init(networkType: NetworkType) {
112
+ self.networkType = networkType
113
+ }
114
+
115
+ /**
116
+ Given a seed and a number of accounts, return the associated viewing keys.
117
+
118
+ - Parameter seed: the seed from which to derive viewing keys.
119
+ - Parameter numberOfAccounts: the number of accounts to use. Multiple accounts are not fully
120
+ supported so the default value of 1 is recommended.
121
+
122
+ - Returns: the viewing keys that correspond to the seed, formatted as Strings.
123
+ */
124
+ public func deriveViewingKeys(seed: [UInt8], numberOfAccounts: Int) throws -> [String] {
125
+ guard numberOfAccounts > 0, let numberOfAccounts = Int32(exactly: numberOfAccounts) else {
126
+ throw KeyDerivationErrors.invalidInput
127
+ }
128
+
129
+ do {
130
+ guard let keys = try rustwelding.deriveExtendedFullViewingKeys(seed: seed, accounts: numberOfAccounts, networkType: networkType) else {
131
+ throw KeyDerivationErrors.unableToDerive
132
+ }
133
+ return keys
134
+ } catch {
135
+ throw KeyDerivationErrors.derivationError(underlyingError: error)
136
+ }
137
+ }
138
+
139
+ /**
140
+ Given a spending key, return the associated viewing key.
141
+
142
+ - Parameter spendingKey: the key from which to derive the viewing key.
143
+
144
+ - Returns: the viewing key that corresponds to the spending key.
145
+ */
146
+ public func deriveViewingKey(spendingKey: String) throws -> String {
147
+ do {
148
+ guard let key = try rustwelding.deriveExtendedFullViewingKey(spendingKey, networkType: networkType) else {
149
+ throw KeyDerivationErrors.unableToDerive
150
+ }
151
+ return key
152
+ } catch {
153
+ throw KeyDerivationErrors.derivationError(underlyingError: error)
154
+ }
155
+ }
156
+
157
+ /**
158
+ Given a seed and a number of accounts, return the associated spending keys.
159
+
160
+ - Parameter seed: the seed from which to derive spending keys.
161
+ - Parameter numberOfAccounts: the number of accounts to use. Multiple accounts are not fully
162
+ supported so the default value of 1 is recommended.
163
+
164
+ - Returns: the spending keys that correspond to the seed, formatted as Strings.
165
+ */
166
+ public func deriveSpendingKeys(seed: [UInt8], numberOfAccounts: Int) throws -> [String] {
167
+ guard numberOfAccounts > 0, let numberOfAccounts = Int32(exactly: numberOfAccounts) else {
168
+ throw KeyDerivationErrors.invalidInput
169
+ }
170
+ do {
171
+ guard let keys = try rustwelding.deriveExtendedSpendingKeys(seed: seed, accounts: numberOfAccounts, networkType: networkType) else {
172
+ throw KeyDerivationErrors.unableToDerive
173
+ }
174
+ return keys
175
+ } catch {
176
+ throw KeyDerivationErrors.derivationError(underlyingError: error)
177
+ }
178
+ }
179
+
180
+ /**
181
+ Given a seed and account index, return the associated address.
182
+
183
+ - Parameter seed: the seed from which to derive the address.
184
+ - Parameter accountIndex: the index of the account to use for deriving the address. Multiple
185
+ accounts are not fully supported so the default value of 1 is recommended.
186
+
187
+ - Returns: the address that corresponds to the seed and account index.
188
+ */
189
+ public func deriveShieldedAddress(seed: [UInt8], accountIndex: Int) throws -> String {
190
+ guard accountIndex >= 0, let accountIndex = Int32(exactly: accountIndex) else {
191
+ throw KeyDerivationErrors.invalidInput
192
+ }
193
+
194
+ do {
195
+ guard let address = try rustwelding.deriveShieldedAddressFromSeed(seed: seed, accountIndex: accountIndex, networkType: networkType) else {
196
+ throw KeyDerivationErrors.unableToDerive
197
+ }
198
+ return address
199
+ } catch {
200
+ throw KeyDerivationErrors.derivationError(underlyingError: error)
201
+ }
202
+ }
203
+
204
+ /**
205
+ Given a viewing key string, return the associated address.
206
+
207
+ - Parameter viewingKey: the viewing key to use for deriving the address. The viewing key is tied to
208
+ a specific account so no account index is required.
209
+
210
+ - Returns: the address that corresponds to the viewing key.
211
+ */
212
+ public func deriveShieldedAddress(viewingKey: String) throws -> String {
213
+ do {
214
+ guard let zaddr = try rustwelding.deriveShieldedAddressFromViewingKey(viewingKey, networkType: networkType) else {
215
+ throw KeyDerivationErrors.unableToDerive
216
+ }
217
+ return zaddr
218
+ } catch {
219
+ throw KeyDerivationErrors.derivationError(underlyingError: error)
220
+ }
221
+ }
222
+
223
+ public func deriveTransparentAddress(seed: [UInt8], account: Int = 0, index: Int = 0) throws -> String {
224
+ do {
225
+ guard let zaddr = try rustwelding.deriveTransparentAddressFromSeed(
226
+ seed: seed,
227
+ account: account,
228
+ index: index,
229
+ networkType: networkType
230
+ ) else {
231
+ throw KeyDerivationErrors.unableToDerive
232
+ }
233
+ return zaddr
234
+ } catch {
235
+ throw KeyDerivationErrors.derivationError(underlyingError: error)
236
+ }
237
+ }
238
+
239
+ public func deriveUnifiedViewingKeysFromSeed(_ seed: [UInt8], numberOfAccounts: Int) throws -> [UnifiedViewingKey] {
240
+ guard numberOfAccounts > 0 else {
241
+ throw KeyDerivationErrors.invalidInput
242
+ }
243
+ do {
244
+ return try rustwelding.deriveUnifiedViewingKeyFromSeed(seed, numberOfAccounts: numberOfAccounts, networkType: networkType)
245
+ } catch {
246
+ throw KeyDerivationErrors.derivationError(underlyingError: error)
247
+ }
248
+ }
249
+
250
+ /**
251
+ derives a Unified Address from a Unified Viewing Key
252
+ */
253
+ public func deriveUnifiedAddressFromUnifiedViewingKey(_ uvk: UnifiedViewingKey) throws -> UnifiedAddress {
254
+ do {
255
+ let tAddress = try deriveTransparentAddressFromPublicKey(uvk.extpub)
256
+ let zAddress = try deriveShieldedAddress(viewingKey: uvk.extfvk)
257
+ return ConcreteUnifiedAddress(tAddress: tAddress, zAddress: zAddress)
258
+ } catch {
259
+ throw KeyDerivationErrors.unableToDerive
260
+ }
261
+ }
262
+
263
+ public func deriveTransparentAddressFromPublicKey(_ pubkey: String) throws -> String {
264
+ guard !pubkey.isEmpty else {
265
+ throw KeyDerivationErrors.invalidInput
266
+ }
267
+
268
+ do {
269
+ return try rustwelding.derivedTransparentAddressFromPublicKey(pubkey, networkType: networkType)
270
+ } catch {
271
+ throw KeyDerivationErrors.derivationError(underlyingError: error)
272
+ }
273
+ }
274
+
275
+ /**
276
+ Derives the transparent funds private key from the given seed
277
+ - Throws:
278
+ - KeyDerivationErrors.derivationError with the underlying error when it fails
279
+ - KeyDerivationErrors.unableToDerive when there's an unknown error
280
+ */
281
+ public func deriveTransparentPrivateKey(seed: [UInt8], account: Int = 0, index: Int = 0) throws -> String {
282
+ do {
283
+ guard let seedKey = try rustwelding.deriveTransparentPrivateKeyFromSeed(
284
+ seed: seed,
285
+ account: account,
286
+ index: index,
287
+ networkType: networkType
288
+ ) else {
289
+ throw KeyDerivationErrors.unableToDerive
290
+ }
291
+ return seedKey
292
+ } catch {
293
+ throw KeyDerivationErrors.derivationError(underlyingError: error)
294
+ }
295
+ }
296
+ }
297
+
298
+ extension DerivationTool: KeyValidation {
299
+ public func isValidExtendedViewingKey(_ extvk: String) throws -> Bool {
300
+ do {
301
+ return try rustwelding.isValidExtendedFullViewingKey(extvk, networkType: networkType)
302
+ } catch {
303
+ throw KeyDerivationErrors.derivationError(underlyingError: error)
304
+ }
305
+ }
306
+
307
+ public func isValidTransparentAddress(_ tAddress: String) throws -> Bool {
308
+ do {
309
+ return try rustwelding.isValidTransparentAddress(tAddress, networkType: networkType)
310
+ } catch {
311
+ throw KeyDerivationErrors.derivationError(underlyingError: error)
312
+ }
313
+ }
314
+
315
+ public func isValidShieldedAddress(_ zAddress: String) throws -> Bool {
316
+ do {
317
+ return try rustwelding.isValidShieldedAddress(zAddress, networkType: networkType)
318
+ } catch {
319
+ throw KeyDerivationErrors.derivationError(underlyingError: error)
320
+ }
321
+ }
322
+
323
+ /**
324
+ Derives the transparent address from a WIF Private Key
325
+ - Throws:
326
+ - KeyDerivationErrors.derivationError with the underlying error when it fails
327
+ - KeyDerivationErrors.unableToDerive when there's an unknown error
328
+ */
329
+ public func deriveTransparentAddressFromPrivateKey(_ tsk: String) throws -> String {
330
+ do {
331
+ guard let tAddr = try rustwelding.deriveTransparentAddressFromSecretKey(tsk, networkType: networkType) else {
332
+ throw KeyDerivationErrors.unableToDerive
333
+ }
334
+ return tAddr
335
+ } catch {
336
+ throw KeyDerivationErrors.derivationError(underlyingError: error)
337
+ }
338
+ }
339
+ }
340
+
341
+ private struct ConcreteUnifiedAddress: UnifiedAddress {
342
+ var tAddress: TransparentAddress
343
+ var zAddress: SaplingShieldedAddress
344
+ }
@@ -0,0 +1,339 @@
1
+ //
2
+ // PendingTransactionsManager.swift
3
+ // ZcashLightClientKit
4
+ //
5
+ // Created by Francisco Gindre on 11/26/19.
6
+ //
7
+
8
+ import Foundation
9
+
10
+ enum TransactionManagerError: Error {
11
+ case couldNotCreateSpend(toAddress: String, account: Int, zatoshi: Int)
12
+ case encodingFailed(PendingTransactionEntity)
13
+ case updateFailed(PendingTransactionEntity)
14
+ case notPending(PendingTransactionEntity)
15
+ case cancelled(PendingTransactionEntity)
16
+ case internalInconsistency(PendingTransactionEntity)
17
+ case submitFailed(PendingTransactionEntity, errorCode: Int)
18
+ case shieldingEncodingFailed(PendingTransactionEntity, reason: String)
19
+ }
20
+
21
+ class PersistentTransactionManager: OutboundTransactionManager {
22
+ var repository: PendingTransactionRepository
23
+ var encoder: TransactionEncoder
24
+ var service: LightWalletService
25
+ var queue: DispatchQueue
26
+ var network: NetworkType
27
+
28
+ init(
29
+ encoder: TransactionEncoder,
30
+ service: LightWalletService,
31
+ repository: PendingTransactionRepository,
32
+ networkType: NetworkType
33
+ ) {
34
+ self.repository = repository
35
+ self.encoder = encoder
36
+ self.service = service
37
+ self.network = networkType
38
+ self.queue = DispatchQueue.init(label: "PersistentTransactionManager.serial.queue", qos: .userInitiated)
39
+ }
40
+
41
+ func initSpend(
42
+ zatoshi: Int,
43
+ toAddress: String,
44
+ memo: String?,
45
+ from accountIndex: Int
46
+ ) throws -> PendingTransactionEntity {
47
+ guard let insertedTx = try repository.find(
48
+ by: try repository.create(
49
+ PendingTransaction(
50
+ value: zatoshi,
51
+ toAddress: toAddress,
52
+ memo: memo,
53
+ account: accountIndex
54
+ )
55
+ )
56
+ ) else {
57
+ throw TransactionManagerError.couldNotCreateSpend(
58
+ toAddress: toAddress,
59
+ account: accountIndex,
60
+ zatoshi: zatoshi
61
+ )
62
+ }
63
+ LoggerProxy.debug("pending transaction \(String(describing: insertedTx.id)) created")
64
+ return insertedTx
65
+ }
66
+
67
+ func encodeShieldingTransaction(
68
+ spendingKey: String,
69
+ tsk: String,
70
+ pendingTransaction: PendingTransactionEntity,
71
+ result: @escaping (Result<PendingTransactionEntity, Error>) -> Void
72
+ ) {
73
+ queue.async { [weak self] in
74
+ guard let self = self else { return }
75
+
76
+ let derivationTool = DerivationTool(networkType: self.network)
77
+
78
+ guard
79
+ let viewingKey = try? derivationTool.deriveViewingKey(spendingKey: spendingKey),
80
+ let zAddr = try? derivationTool.deriveShieldedAddress(viewingKey: viewingKey)
81
+ else {
82
+ result(
83
+ .failure(
84
+ TransactionManagerError.shieldingEncodingFailed(
85
+ pendingTransaction,
86
+ reason: "There was an error Deriving your keys"
87
+ )
88
+ )
89
+ )
90
+ return
91
+ }
92
+
93
+ guard pendingTransaction.toAddress == zAddr else {
94
+ result(
95
+ .failure(
96
+ TransactionManagerError.shieldingEncodingFailed(
97
+ pendingTransaction,
98
+ reason: """
99
+ the recipient address does not match your
100
+ derived shielded address. Shielding transactions
101
+ addresses must match the ones derived from your keys.
102
+ This is a serious error. We are not letting you encode
103
+ this shielding transaction because it can lead to loss
104
+ of funds
105
+ """
106
+ )
107
+ )
108
+ )
109
+ return
110
+ }
111
+ do {
112
+ let encodedTransaction = try self.encoder.createShieldingTransaction(
113
+ spendingKey: spendingKey,
114
+ tSecretKey: tsk,
115
+ memo: pendingTransaction.memo?.asZcashTransactionMemo(),
116
+ from: pendingTransaction.accountIndex
117
+ )
118
+ let transaction = try self.encoder.expandEncodedTransaction(encodedTransaction)
119
+
120
+ var pending = pendingTransaction
121
+ pending.encodeAttempts += 1
122
+ pending.raw = encodedTransaction.raw
123
+ pending.rawTransactionId = encodedTransaction.transactionId
124
+ pending.expiryHeight = transaction.expiryHeight ?? BlockHeight.empty()
125
+ pending.minedHeight = transaction.minedHeight ?? BlockHeight.empty()
126
+
127
+ try self.repository.update(pending)
128
+
129
+ result(.success(pending))
130
+ } catch StorageError.updateFailed {
131
+ DispatchQueue.main.async {
132
+ result(.failure(TransactionManagerError.updateFailed(pendingTransaction)))
133
+ }
134
+ } catch {
135
+ DispatchQueue.main.async {
136
+ result(.failure(error))
137
+ }
138
+ }
139
+ }
140
+ }
141
+
142
+ func encode(
143
+ spendingKey: String,
144
+ pendingTransaction: PendingTransactionEntity,
145
+ result: @escaping (Result<PendingTransactionEntity, Error>) -> Void
146
+ ) {
147
+ queue.async { [weak self] in
148
+ guard let self = self else { return }
149
+ do {
150
+ let encodedTransaction = try self.encoder.createTransaction(
151
+ spendingKey: spendingKey,
152
+ zatoshi: pendingTransaction.value,
153
+ to: pendingTransaction.toAddress,
154
+ memo: pendingTransaction.memo?.asZcashTransactionMemo(),
155
+ from: pendingTransaction.accountIndex
156
+ )
157
+ let transaction = try self.encoder.expandEncodedTransaction(encodedTransaction)
158
+
159
+ var pending = pendingTransaction
160
+ pending.encodeAttempts += 1
161
+ pending.raw = encodedTransaction.raw
162
+ pending.rawTransactionId = encodedTransaction.transactionId
163
+ pending.expiryHeight = transaction.expiryHeight ?? BlockHeight.empty()
164
+ pending.minedHeight = transaction.minedHeight ?? BlockHeight.empty()
165
+
166
+ try self.repository.update(pending)
167
+
168
+ result(.success(pending))
169
+ } catch StorageError.updateFailed {
170
+ DispatchQueue.main.async {
171
+ result(.failure(TransactionManagerError.updateFailed(pendingTransaction)))
172
+ }
173
+ } catch {
174
+ do {
175
+ try self.updateOnFailure(transaction: pendingTransaction, error: error)
176
+ } catch {
177
+ DispatchQueue.main.async {
178
+ result(.failure(TransactionManagerError.updateFailed(pendingTransaction)))
179
+ }
180
+ }
181
+ DispatchQueue.main.async {
182
+ result(.failure(error))
183
+ }
184
+ }
185
+ }
186
+ }
187
+
188
+ func submit(
189
+ pendingTransaction: PendingTransactionEntity,
190
+ result: @escaping (Result<PendingTransactionEntity, Error>) -> Void
191
+ ) {
192
+ guard let txId = pendingTransaction.id else {
193
+ result(.failure(TransactionManagerError.notPending(pendingTransaction)))// this transaction is not stored
194
+ return
195
+ }
196
+
197
+ queue.async { [weak self] in
198
+ guard let self = self else { return }
199
+
200
+ do {
201
+ guard let storedTx = try self.repository.find(by: txId) else {
202
+ result(.failure(TransactionManagerError.notPending(pendingTransaction)))
203
+ return
204
+ }
205
+
206
+ guard !storedTx.isCancelled else {
207
+ LoggerProxy.debug("ignoring cancelled transaction \(storedTx)")
208
+ result(.failure(TransactionManagerError.cancelled(storedTx)))
209
+ return
210
+ }
211
+
212
+ guard let raw = storedTx.raw else {
213
+ LoggerProxy.debug("INCONSISTENCY: attempt to send pending transaction \(txId) that has not raw data")
214
+ result(.failure(TransactionManagerError.internalInconsistency(storedTx)))
215
+ return
216
+ }
217
+
218
+ let response = try self.service.submit(spendTransaction: raw)
219
+ let transaction = try self.update(transaction: storedTx, on: response)
220
+
221
+ guard response.errorCode >= 0 else {
222
+ result(.failure(TransactionManagerError.submitFailed(transaction, errorCode: Int(response.errorCode))))
223
+ return
224
+ }
225
+
226
+ result(.success(transaction))
227
+ } catch {
228
+ try? self.updateOnFailure(transaction: pendingTransaction, error: error)
229
+ result(.failure(error))
230
+ }
231
+ }
232
+ }
233
+
234
+ func applyMinedHeight(pendingTransaction: PendingTransactionEntity, minedHeight: BlockHeight) throws -> PendingTransactionEntity {
235
+ guard let id = pendingTransaction.id else {
236
+ throw TransactionManagerError.internalInconsistency(pendingTransaction)
237
+ }
238
+
239
+ guard var transaction = try repository.find(by: id) else {
240
+ throw TransactionManagerError.notPending(pendingTransaction)
241
+ }
242
+
243
+ transaction.minedHeight = minedHeight
244
+ guard let pendingTxId = pendingTransaction.id else {
245
+ throw TransactionManagerError.updateFailed(pendingTransaction)
246
+ }
247
+ do {
248
+ try repository.applyMinedHeight(minedHeight, id: pendingTxId)
249
+ } catch {
250
+ throw TransactionManagerError.updateFailed(transaction)
251
+ }
252
+ return transaction
253
+ }
254
+
255
+ func handleReorg(at height: BlockHeight) throws {
256
+ guard let affectedTxs = try self.allPendingTransactions()?.filter({ $0.minedHeight >= height }) else {
257
+ return
258
+ }
259
+
260
+ try affectedTxs
261
+ .map { transaction -> PendingTransactionEntity in
262
+ var updatedTx = transaction
263
+ updatedTx.minedHeight = -1
264
+ return updatedTx
265
+ }
266
+ .forEach { try self.repository.update($0) }
267
+ }
268
+
269
+ func monitorChanges(byId: Int, observer: Any) {
270
+ // TODO: Implement this
271
+ }
272
+
273
+ func cancel(pendingTransaction: PendingTransactionEntity) -> Bool {
274
+ guard let id = pendingTransaction.id else { return false }
275
+
276
+ guard let transaction = try? repository.find(by: id) else { return false }
277
+
278
+ guard !transaction.isSubmitted else { return false }
279
+
280
+ guard (try? repository.cancel(transaction)) != nil else { return false }
281
+
282
+ return true
283
+ }
284
+
285
+ func allPendingTransactions() throws -> [PendingTransactionEntity]? {
286
+ try repository.getAll()
287
+ }
288
+
289
+ // MARK: other functions
290
+ private func updateOnFailure(transaction: PendingTransactionEntity, error: Error) throws {
291
+ var pending = transaction
292
+ pending.errorMessage = error.localizedDescription
293
+ pending.encodeAttempts = transaction.encodeAttempts + 1
294
+ try self.repository.update(pending)
295
+ }
296
+
297
+ private func update(transaction: PendingTransactionEntity, on sendResponse: LightWalletServiceResponse) throws -> PendingTransactionEntity {
298
+ var pendingTx = transaction
299
+ pendingTx.submitAttempts += 1
300
+ let error = sendResponse.errorCode < 0
301
+ pendingTx.errorCode = error ? Int(sendResponse.errorCode) : nil
302
+ pendingTx.errorMessage = error ? sendResponse.errorMessage : nil
303
+ try repository.update(pendingTx)
304
+ return pendingTx
305
+ }
306
+
307
+ func delete(pendingTransaction: PendingTransactionEntity) throws {
308
+ do {
309
+ try repository.delete(pendingTransaction)
310
+ } catch {
311
+ throw TransactionManagerError.notPending(pendingTransaction)
312
+ }
313
+ }
314
+ }
315
+
316
+ enum OutboundTransactionManagerBuilder {
317
+ static func build(initializer: Initializer) throws -> OutboundTransactionManager {
318
+ PersistentTransactionManager(
319
+ encoder: TransactionEncoderbuilder.build(initializer: initializer),
320
+ service: initializer.lightWalletService,
321
+ repository: try PendingTransactionRepositoryBuilder.build(initializer: initializer),
322
+ networkType: initializer.network.networkType
323
+ )
324
+ }
325
+ }
326
+
327
+ enum PendingTransactionRepositoryBuilder {
328
+ static func build(initializer: Initializer) throws -> PendingTransactionRepository {
329
+ let dao = PendingTransactionSQLDAO(dbProvider: SimpleConnectionProvider(path: initializer.pendingDbURL.path, readonly: false))
330
+ try dao.createrTableIfNeeded()
331
+ return dao
332
+ }
333
+ }
334
+
335
+ enum TransactionEncoderbuilder {
336
+ static func build(initializer: Initializer) -> TransactionEncoder {
337
+ WalletTransactionEncoder(initializer: initializer)
338
+ }
339
+ }