react-native-zcash 0.8.1 → 0.9.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 (118) hide show
  1. package/CHANGELOG.md +6 -0
  2. package/android/build.gradle +3 -3
  3. package/android/src/main/assets/co.electriccoin.zcash/checkpoint/mainnet/2650000.json +8 -0
  4. package/android/src/main/java/app/edge/rnzcash/RNZcashModule.kt +15 -25
  5. package/ios/RNZcash.m +3 -5
  6. package/ios/RNZcash.swift +42 -23
  7. package/ios/ZCashLightClientKit/Block/Actions/Action.swift +1 -0
  8. package/ios/ZCashLightClientKit/Block/Actions/EnhanceAction.swift +1 -1
  9. package/ios/ZCashLightClientKit/Block/Actions/ProcessSuggestedScanRangesAction.swift +1 -1
  10. package/ios/ZCashLightClientKit/Block/Actions/ScanAction.swift +1 -1
  11. package/ios/ZCashLightClientKit/Block/Actions/TxResubmissionAction.swift +75 -0
  12. package/ios/ZCashLightClientKit/Block/Actions/UpdateChainTipAction.swift +1 -1
  13. package/ios/ZCashLightClientKit/Block/Actions/UpdateSubtreeRootsAction.swift +3 -1
  14. package/ios/ZCashLightClientKit/Block/CompactBlockProcessor.swift +14 -0
  15. package/ios/ZCashLightClientKit/Block/Download/BlockDownloaderService.swift +2 -2
  16. package/ios/ZCashLightClientKit/Block/Enhance/BlockEnhancer.swift +54 -49
  17. package/ios/ZCashLightClientKit/Checkpoint/BundleCheckpointSource.swift +1 -6
  18. package/ios/ZCashLightClientKit/Checkpoint/CheckpointSourceFactory.swift +1 -1
  19. package/ios/ZCashLightClientKit/ClosureSynchronizer.swift +3 -1
  20. package/ios/ZCashLightClientKit/CombineSynchronizer.swift +6 -2
  21. package/ios/ZCashLightClientKit/Constants/ZcashSDK.swift +15 -0
  22. package/ios/ZCashLightClientKit/DAO/TransactionDao.swift +20 -4
  23. package/ios/ZCashLightClientKit/Entity/TransactionEntity.swift +27 -24
  24. package/ios/ZCashLightClientKit/Error/Sourcery/generateErrorCode.sh +2 -2
  25. package/ios/ZCashLightClientKit/Error/ZcashError.swift +32 -1
  26. package/ios/ZCashLightClientKit/Error/ZcashErrorCode.swift +11 -1
  27. package/ios/ZCashLightClientKit/Error/ZcashErrorCodeDefinition.swift +18 -0
  28. package/ios/ZCashLightClientKit/Initializer.swift +22 -14
  29. package/ios/ZCashLightClientKit/Metrics/SDKMetrics.swift +0 -1
  30. package/ios/ZCashLightClientKit/Model/FiatCurrencyResult.swift +25 -0
  31. package/ios/ZCashLightClientKit/Model/Proposal.swift +1 -1
  32. package/ios/ZCashLightClientKit/Model/TransactionDataRequest.swift +26 -0
  33. package/ios/ZCashLightClientKit/Model/WalletTypes.swift +39 -1
  34. package/ios/ZCashLightClientKit/Model/Zatoshi.swift +1 -1
  35. package/ios/ZCashLightClientKit/Modules/Service/GRPC/LightWalletGRPCService.swift +39 -2
  36. package/ios/ZCashLightClientKit/Modules/Service/GRPC/ProtoBuf/proto/service.proto +5 -4
  37. package/ios/ZCashLightClientKit/Modules/Service/GRPC/ProtoBuf/service.grpc.swift +819 -3
  38. package/ios/ZCashLightClientKit/Modules/Service/GRPC/ProtoBuf/service.pb.swift +2 -2
  39. package/ios/ZCashLightClientKit/Modules/Service/LightWalletService.swift +3 -1
  40. package/ios/ZCashLightClientKit/Providers/ResourceProvider.swift +10 -0
  41. package/ios/ZCashLightClientKit/Repository/TransactionRepository.swift +4 -0
  42. package/ios/ZCashLightClientKit/Resources/checkpoints/mainnet/2475000.json +8 -0
  43. package/ios/ZCashLightClientKit/Resources/checkpoints/mainnet/2477500.json +8 -0
  44. package/ios/ZCashLightClientKit/Resources/checkpoints/mainnet/2482500.json +8 -0
  45. package/ios/ZCashLightClientKit/Resources/checkpoints/mainnet/2485000.json +8 -0
  46. package/ios/ZCashLightClientKit/Resources/checkpoints/mainnet/2487500.json +8 -0
  47. package/ios/ZCashLightClientKit/Resources/checkpoints/mainnet/2492500.json +8 -0
  48. package/ios/ZCashLightClientKit/Resources/checkpoints/mainnet/2495000.json +8 -0
  49. package/ios/ZCashLightClientKit/Resources/checkpoints/mainnet/2497500.json +8 -0
  50. package/ios/ZCashLightClientKit/Resources/checkpoints/mainnet/2502500.json +8 -0
  51. package/ios/ZCashLightClientKit/Resources/checkpoints/mainnet/2505000.json +8 -0
  52. package/ios/ZCashLightClientKit/Resources/checkpoints/mainnet/2507500.json +8 -0
  53. package/ios/ZCashLightClientKit/Resources/checkpoints/mainnet/2512500.json +8 -0
  54. package/ios/ZCashLightClientKit/Resources/checkpoints/mainnet/2515000.json +8 -0
  55. package/ios/ZCashLightClientKit/Resources/checkpoints/mainnet/2517500.json +8 -0
  56. package/ios/ZCashLightClientKit/Resources/checkpoints/mainnet/2522500.json +8 -0
  57. package/ios/ZCashLightClientKit/Resources/checkpoints/mainnet/2525000.json +8 -0
  58. package/ios/ZCashLightClientKit/Resources/checkpoints/mainnet/2527500.json +8 -0
  59. package/ios/ZCashLightClientKit/Resources/checkpoints/mainnet/2532500.json +8 -0
  60. package/ios/ZCashLightClientKit/Resources/checkpoints/mainnet/2535000.json +8 -0
  61. package/ios/ZCashLightClientKit/Resources/checkpoints/mainnet/2537500.json +8 -0
  62. package/ios/ZCashLightClientKit/Resources/checkpoints/mainnet/2542500.json +8 -0
  63. package/ios/ZCashLightClientKit/Resources/checkpoints/mainnet/2545000.json +8 -0
  64. package/ios/ZCashLightClientKit/Resources/checkpoints/mainnet/2547500.json +8 -0
  65. package/ios/ZCashLightClientKit/Resources/checkpoints/mainnet/2552500.json +8 -0
  66. package/ios/ZCashLightClientKit/Resources/checkpoints/mainnet/2555000.json +8 -0
  67. package/ios/ZCashLightClientKit/Resources/checkpoints/mainnet/2557500.json +8 -0
  68. package/ios/ZCashLightClientKit/Resources/checkpoints/mainnet/2562500.json +8 -0
  69. package/ios/ZCashLightClientKit/Resources/checkpoints/mainnet/2565000.json +8 -0
  70. package/ios/ZCashLightClientKit/Resources/checkpoints/mainnet/2567500.json +8 -0
  71. package/ios/ZCashLightClientKit/Resources/checkpoints/mainnet/2572500.json +8 -0
  72. package/ios/ZCashLightClientKit/Resources/checkpoints/mainnet/2575000.json +8 -0
  73. package/ios/ZCashLightClientKit/Resources/checkpoints/mainnet/2577500.json +8 -0
  74. package/ios/ZCashLightClientKit/Resources/checkpoints/mainnet/2582500.json +8 -0
  75. package/ios/ZCashLightClientKit/Resources/checkpoints/mainnet/2585000.json +8 -0
  76. package/ios/ZCashLightClientKit/Resources/checkpoints/mainnet/2587500.json +8 -0
  77. package/ios/ZCashLightClientKit/Resources/checkpoints/mainnet/2592500.json +8 -0
  78. package/ios/ZCashLightClientKit/Resources/checkpoints/mainnet/2595000.json +8 -0
  79. package/ios/ZCashLightClientKit/Resources/checkpoints/mainnet/2597500.json +8 -0
  80. package/ios/ZCashLightClientKit/Resources/checkpoints/mainnet/2602500.json +8 -0
  81. package/ios/ZCashLightClientKit/Resources/checkpoints/mainnet/2605000.json +8 -0
  82. package/ios/ZCashLightClientKit/Resources/checkpoints/mainnet/2607500.json +8 -0
  83. package/ios/ZCashLightClientKit/Resources/checkpoints/mainnet/2612500.json +8 -0
  84. package/ios/ZCashLightClientKit/Resources/checkpoints/mainnet/2615000.json +8 -0
  85. package/ios/ZCashLightClientKit/Resources/checkpoints/mainnet/2617500.json +8 -0
  86. package/ios/ZCashLightClientKit/Resources/checkpoints/mainnet/2622500.json +8 -0
  87. package/ios/ZCashLightClientKit/Resources/checkpoints/mainnet/2625000.json +8 -0
  88. package/ios/ZCashLightClientKit/Resources/checkpoints/mainnet/2627500.json +8 -0
  89. package/ios/ZCashLightClientKit/Resources/checkpoints/mainnet/2632500.json +8 -0
  90. package/ios/ZCashLightClientKit/Resources/checkpoints/mainnet/2635000.json +8 -0
  91. package/ios/ZCashLightClientKit/Resources/checkpoints/mainnet/2637500.json +8 -0
  92. package/ios/ZCashLightClientKit/Resources/checkpoints/mainnet/2642500.json +8 -0
  93. package/ios/ZCashLightClientKit/Resources/checkpoints/mainnet/2645000.json +8 -0
  94. package/ios/ZCashLightClientKit/Resources/checkpoints/mainnet/2647500.json +8 -0
  95. package/ios/ZCashLightClientKit/Resources/checkpoints/mainnet/2650000.json +8 -0
  96. package/ios/ZCashLightClientKit/Rust/ZcashKeyDerivationBackend.swift +4 -24
  97. package/ios/ZCashLightClientKit/Rust/ZcashKeyDerivationBackendWelding.swift +0 -15
  98. package/ios/ZCashLightClientKit/Rust/ZcashRustBackend.swift +133 -32
  99. package/ios/ZCashLightClientKit/Rust/ZcashRustBackendWelding.swift +18 -1
  100. package/ios/ZCashLightClientKit/Synchronizer/ClosureSDKSynchronizer.swift +4 -0
  101. package/ios/ZCashLightClientKit/Synchronizer/CombineSDKSynchronizer.swift +5 -1
  102. package/ios/ZCashLightClientKit/Synchronizer/Dependencies.swift +53 -3
  103. package/ios/ZCashLightClientKit/Synchronizer/SDKSynchronizer.swift +236 -7
  104. package/ios/ZCashLightClientKit/Synchronizer.swift +28 -0
  105. package/ios/ZCashLightClientKit/Tool/DerivationTool.swift +29 -5
  106. package/ios/ZCashLightClientKit/Tor/TorClient.swift +57 -0
  107. package/ios/ZCashLightClientKit/Utils/LoggingProxy.swift +4 -0
  108. package/ios/ZCashLightClientKit/Utils/OSLogger.swift +4 -0
  109. package/ios/libzcashlc.xcframework/ios-arm64/libzcashlc.a +0 -0
  110. package/ios/libzcashlc.xcframework/ios-arm64_x86_64-simulator/libzcashlc.a +0 -0
  111. package/ios/zcashlc.h +287 -42
  112. package/lib/rnzcash.rn.js +8 -8
  113. package/lib/rnzcash.rn.js.map +1 -1
  114. package/lib/src/react-native.d.ts +3 -3
  115. package/lib/src/types.d.ts +4 -2
  116. package/package.json +1 -1
  117. package/src/react-native.ts +13 -18
  118. package/src/types.ts +5 -2
@@ -0,0 +1,8 @@
1
+ {
2
+ "network": "main",
3
+ "height": "2602500",
4
+ "hash": "0000000000acb19f71a283f802945170a1165b118cd15c2de20ea3ed7922c22d",
5
+ "time": 1723022983,
6
+ "saplingTree": "0158636a6243e389a7f2033ee8cd4fbfaef6bc1155aa8b1ee0e03b7dea54609037017df95fa03055e312a3eaa2138189fd8e459b227788e083651621c8df4f5a3f721f000001a5ce406e8d35f64594aaa01b95ce90c399697e9515bc3978b8ae0f7f898a442101037cccdf7c0d210dee3fbd2e2814eb9a61e2d944ede6ad3ada587326c072834701398af6fbc4d07625e41b58bd496b079409848d016d8f5d8d597acea4f8a4ac3a0000000001b64828dd741da258bf461f0a23b6d9ed8a21f153f60238444fda8ea66437124b00019a7de49fc0f48272e4f81b79c32d01e0ac2519ed63971053e5c761a69809e769015bef2b7796dde552db8bbc552c55f413c388c02dbb07aeb446744375b303ef420156b3d33ce2ed017f3c386a6776460330b0b98c091f8966dc72c6d982fe61d3340113511bcbeeafe15db27eac1c40881aa9612b5998fa2702cf1a873915bfb6963f0000000000013e2598f743726006b8de42476ed56a55a75629a7b82e430c4e7c101a69e9b02a011619f99023a69bb647eab2d2aa1a73c3673c74bb033c3c4930eacda19e6fd93b0000000160272b134ca494b602137d89e528c751c06d3ef4a87a45f33af343c15060cc1e0000000000",
7
+ "orchardTree": "01d4be5ef0643fc203c26df54a7eff1dc40024206295d10386604125346454d11c001f000001c456ae0ae90be2669e61477cd75964cfd28838d5896e27644a624d2b3d1da02301c19048664b8c4a844c87e65288416cd03dd16f94efd96b3854c535fb950e4636000161933a1ab82c3630a3804717ff0bc39090387a3ae12ce363e70dfcd81746611c01ceb0f7481020e87d23aff5742d48f917e40f6bf4a74d90973e2753d409d32a2600012c69f18a28a02a6f8d9b5c06737a99085dfe7713a654432db63207f04fba1c18018ab1d7b9a8099f16c0187fd943cdd4d6a646ea51abe9e98b3e15bf37b72ded03000187fdfe48155526f00a731601c98cd8685b2f98373b59f2e82d49523f8c934515014dce184be736a7df17d72ebc84f629cafc379b11f28afcb8c0dc5c25f31f993a0000000112278dfeae9949f887b70ae81e084f8897a5054627acef3efd01c8b29793d522000160040850b766b126a2b4843fcdfdffa5d5cab3f53bc860a3bef68958b5f066170001cc2dcaa338b312112db04b435a706d63244dd435238f0aa1e9e1598d35470810012dcc4273c8a0ed2337ecf7879380a07e7d427c7f9d82e538002bd1442978402c01daf63debf5b40df902dae98dadc029f281474d190cddecef1b10653248a234150001e2bca6a8d987d668defba89dc082196a922634ed88e065c669e526bb8815ee1b000000000000"
8
+ }
@@ -0,0 +1,8 @@
1
+ {
2
+ "network": "main",
3
+ "height": "2605000",
4
+ "hash": "00000000000b0ca5b35ed55f67e7c664b0d962040d100703931914e3ee3f2fe1",
5
+ "time": 1723211544,
6
+ "saplingTree": "01687d479ca52f03720c733330bc0e684e41cd2fee76a741faf34aca891fe6cd3801543a60f586c8586212e395d46055eb624aa42f5ed50b8ffc906c176cdb9b31161f014c9bced33423215fc55d76d27e79a277a05c3e4be116183aa43fc1dc624c152c01fa723892c82c06ca36640b037e4d3595cee677cabd15514c57fcb0e823141c4301af8ec810d557d934fd84434cac3138e20165598067cca10f8a5d254326f4dc39013efacc661c0279f19edd8a8da05d80c3227667c9f16a627f4925afe4d300102001b3e2e07b7d186b6139566cd2af05eae2d6de2b4d3b2a96e7300a9e7f7741db5101cd7e4b2b23d2aaf9d8866ecfa4b14d874d9dbd459076fec78176d48d968a0f5101b8e595234ada92708bd5052eb4ed7ef41fa9b030bfd7ee521f01353da94fae5301299066b2f55d625dce08b6513a167b96e19e17645440d3290d2dd2591d51273e000001d29ff78e5e4cd45b229d5a53b1ddbeac5f056eaf596c9235e8be17de61832b6800000000012415b957855163102c9f373eec835c3b3aa11f0ac872533a867d3e2eb562d30200000000013e2598f743726006b8de42476ed56a55a75629a7b82e430c4e7c101a69e9b02a011619f99023a69bb647eab2d2aa1a73c3673c74bb033c3c4930eacda19e6fd93b0000000160272b134ca494b602137d89e528c751c06d3ef4a87a45f33af343c15060cc1e0000000000",
7
+ "orchardTree": "0120f233d4ce3b36afe7a1abebd8b1f3d6e956171db518029ec8806a7037da033b001f01ee131922a48e4d72dd43685e886d18e609ef62cb07c6c5bad028abfabed7141401598efdc28913d126b14218f398376656ed42499e0545bbbe29b3fffad5e32c1c000001fb241c6f9d9bec986636e483eb80972e7137d08c7603a615bd43f509c02a6f3e01c17951880fbcdeba671952e4e53ccd8647e9655dda7c9be80562310f50122c040104c7784dfcb7c217a8d6bbc8d4187bc2baebe7be6784b4e4cf0d9681203e65030001128c694223d7bebafe7394d77f2bb8fefb0e82e41979af17845ee73d17b0731b00018e4025bc2e04da1b4d449b49f697d13a34751db56480febf3e2effcacaa91e220187fdfe48155526f00a731601c98cd8685b2f98373b59f2e82d49523f8c934515014dce184be736a7df17d72ebc84f629cafc379b11f28afcb8c0dc5c25f31f993a0000000112278dfeae9949f887b70ae81e084f8897a5054627acef3efd01c8b29793d522000160040850b766b126a2b4843fcdfdffa5d5cab3f53bc860a3bef68958b5f066170001cc2dcaa338b312112db04b435a706d63244dd435238f0aa1e9e1598d35470810012dcc4273c8a0ed2337ecf7879380a07e7d427c7f9d82e538002bd1442978402c01daf63debf5b40df902dae98dadc029f281474d190cddecef1b10653248a234150001e2bca6a8d987d668defba89dc082196a922634ed88e065c669e526bb8815ee1b000000000000"
8
+ }
@@ -0,0 +1,8 @@
1
+ {
2
+ "network": "main",
3
+ "height": "2607500",
4
+ "hash": "0000000001e1e8b283f25423b2b39e5676d9073ccf659870a7bb1e35b6bef75b",
5
+ "time": 1723399352,
6
+ "saplingTree": "01cd24c9062c42171cdda7e86ee7b0b328571c6e2e42c893146ccdd8192901be4e01bc02a7598450b8dd55e26dbaf6d42d8db833363a7e805ce9c59d53cfa698a44b1f0137df30fc14008143a99c31d5de5657b20efda61c47239076388e4093e9b2591a000192da404d42a5292807799eddb209dbe53417728a6702acca95e6356b2ed8d32600000000019f0351d86a8aa79fbb99c537c2b748c31c8a305c37d877adcbf67db46e89965b01dc25905956dfc334fe62c7e95776b60760886b802622712b914bbf6808c063650112725de05e4206b43c6888007a4235b5c723bce9ce1377093e633ab0cc04c22301e47663e52e856db8e2959cf5581c2fe291924719199853f6d06a40df4db78059018a2603b558cc1ec169e46a6fc49b83f30363956b37a12f11a664c58cc62c5944000000012415b957855163102c9f373eec835c3b3aa11f0ac872533a867d3e2eb562d30200000000013e2598f743726006b8de42476ed56a55a75629a7b82e430c4e7c101a69e9b02a011619f99023a69bb647eab2d2aa1a73c3673c74bb033c3c4930eacda19e6fd93b0000000160272b134ca494b602137d89e528c751c06d3ef4a87a45f33af343c15060cc1e0000000000",
7
+ "orchardTree": "01af76d043c985b5f6d69f89333495ba26e1b2a7d81f1116ed861da3d168d4330c0195bcfd054ccded6bde38187f39a84e9ff6d2c836b1094c6a5092be8521a7f0321f00000001b37acb1e53bb48b748bcf429edb0f325f8f48122c51ebbf61c8ac35d8fedc62e00000001668a460cd4c58502cba2678b12c31049e91fce460da17dae02976634b9984e18015e4a4d34f90c6990d18b3e379a8a8862798c0430651e7712a31ac1ca009aa412012c22ffced1bbebe7b54e23c57d24780ca05d734ae75cfe3d1d37c27a28177936018e4025bc2e04da1b4d449b49f697d13a34751db56480febf3e2effcacaa91e220187fdfe48155526f00a731601c98cd8685b2f98373b59f2e82d49523f8c934515014dce184be736a7df17d72ebc84f629cafc379b11f28afcb8c0dc5c25f31f993a0000000112278dfeae9949f887b70ae81e084f8897a5054627acef3efd01c8b29793d522000160040850b766b126a2b4843fcdfdffa5d5cab3f53bc860a3bef68958b5f066170001cc2dcaa338b312112db04b435a706d63244dd435238f0aa1e9e1598d35470810012dcc4273c8a0ed2337ecf7879380a07e7d427c7f9d82e538002bd1442978402c01daf63debf5b40df902dae98dadc029f281474d190cddecef1b10653248a234150001e2bca6a8d987d668defba89dc082196a922634ed88e065c669e526bb8815ee1b000000000000"
8
+ }
@@ -0,0 +1,8 @@
1
+ {
2
+ "network": "main",
3
+ "height": "2612500",
4
+ "hash": "0000000000e5090e81979a60d3aa0d52d92f5e937e98835007b5cf3692fb7bae",
5
+ "time": 1723775874,
6
+ "saplingTree": "01caeb7400413a89012925699f945359c690e33b18e1182dbc31cb0cdcdcd3d21301cba90f422c06765ac2473367e04e28395d60d04df82ab911ab8d4f8fd1b7ef161f01ee5c43dfda5454dc56a11a861f07f4331f7544b3841f3643b817c0896e90991801a92c70264e405762cc4d2881dbcb62a29cde336f06cc8f2ed7065dfd5c0d0c11011d3932d65162694468ca7c386cbb72a47198433d87e82ec8306d04bb597548010001cbbc31c3f8336081251ac7da75a1d88c14dd330b8a4079fa655fa0ad828576190001ee087fa2df26c5fbf7f4e7f24a353c703847ff6a5bbb312ddb35d034d3b6ce2d000001f68ced03d3f43766d4046284e48900cdc79aba4f35fe512d99edcd62a102554e0110ebe62f1d0bebadbe4ae0fdffdde0c5fe0ac993c4102b6a0ee3eab217ef09000122269209ed691bb98c3e4c62c927a5660238f80a0aaee4b60efa6e2dfe815b03011cf92ed634937e25f2c74e11f5a16010c987bf41e7d9956c8d1a26830a391c3f0001f762af15779fb5c9593af1a8a9a2c777b9377dcb3117e5c55b4365f1061ea86c012415b957855163102c9f373eec835c3b3aa11f0ac872533a867d3e2eb562d30200000000013e2598f743726006b8de42476ed56a55a75629a7b82e430c4e7c101a69e9b02a011619f99023a69bb647eab2d2aa1a73c3673c74bb033c3c4930eacda19e6fd93b0000000160272b134ca494b602137d89e528c751c06d3ef4a87a45f33af343c15060cc1e0000000000",
7
+ "orchardTree": "016bf951b70bd46c026501bd1de84dd76a6f2390e0c29c9ac18ebecc865abff121001f00014ea4cb9fe4033b3aef96a0d85a6071cafce6889b658769630a568b9324dc7919015b01249e326585a4e3b2b5285be119034d942a0017e202214503b8ed39a5f60e0127941c3f060470d79e4c8a1139388927edf01e754f6dbfb39dc74a48a6eb301000000000000001ba2fc06d6f2a5c10219dfe7d1722c4bda2a01704a1473260649993ae559b6f22000001f427516d6600178ef99cc049193c413103980c407ea3489a687b3c3479d2300c00000112278dfeae9949f887b70ae81e084f8897a5054627acef3efd01c8b29793d522000160040850b766b126a2b4843fcdfdffa5d5cab3f53bc860a3bef68958b5f066170001cc2dcaa338b312112db04b435a706d63244dd435238f0aa1e9e1598d35470810012dcc4273c8a0ed2337ecf7879380a07e7d427c7f9d82e538002bd1442978402c01daf63debf5b40df902dae98dadc029f281474d190cddecef1b10653248a234150001e2bca6a8d987d668defba89dc082196a922634ed88e065c669e526bb8815ee1b000000000000"
8
+ }
@@ -0,0 +1,8 @@
1
+ {
2
+ "network": "main",
3
+ "height": "2615000",
4
+ "hash": "0000000001c93fd3e39a4af5f22b55dc0f60b93847282e893d65ea9845a5a64d",
5
+ "time": 1723964886,
6
+ "saplingTree": "014298f0b8a8167b85ea1a936ce2f2361ecafb8ff24cc6087fd002babbc3b5d40401145319fbe28e102cfdc42d9c654c4d7e4eb5e48d536bd044c1d4a41b4fc988491f01a9b390f75470f6c49403373c2bb74fcc204a06639febfffa895f2b6c2327e927015e89b7e60eb064f2ef084e05ae8e5736e5f4e99e3bd8c08fa1499b5854a9131d0103041a6509d4abc98224138ff1db9dc80a4db86ddc3fbd677bb709151cc631050130b89967a04e7a90aec4c9f6d2ed7144c35fe2cf9fe2b1ea69b54e678adc60010000000001a54d2eeb3265f65b0436f4fd38e5732809599343f2ff6b82beaecf643c95eb010000015edb4531bb98252fa08c3baa1d49e2c11ff6e3cb8fc06883bf8075aabfa79e230001889e7a0849bac67b05fe418b808099194a54632db5d8de4dab43ff55c3b22a0a01f762af15779fb5c9593af1a8a9a2c777b9377dcb3117e5c55b4365f1061ea86c012415b957855163102c9f373eec835c3b3aa11f0ac872533a867d3e2eb562d30200000000013e2598f743726006b8de42476ed56a55a75629a7b82e430c4e7c101a69e9b02a011619f99023a69bb647eab2d2aa1a73c3673c74bb033c3c4930eacda19e6fd93b0000000160272b134ca494b602137d89e528c751c06d3ef4a87a45f33af343c15060cc1e0000000000",
7
+ "orchardTree": "0179c6664103c002d291e4268860bf0a2f6a248af42ae8a6838f6e95226c1ac83b001f01cb0ddf2423c3f26c142523ace4492449cc3cd8da3d0149cb421e3ff651f1a92501c81e79a66c11ab3aa18f69b5ccd668a40961a637a812bc7e544a3dccfbcdde120192f9295727c4b362d5be2c03a726a4ceaebf06f5554ad32aeda22a02f4008039000001b850b62da567d9e91bc7fb76b205b477c3e4dca93dc637b2423c045e6138043e01209dad4e13c1024e38e41bd3945ca1ff1ba122900dc8eade6614ebc59d9b3930014421cd60d923f7b2e9b9bb98c8bce208059fcbc06c93e787957401cc78d0920a0198fcc6d33ee8d12cb2c296d2d474b7457b33cc112d421c9dac4a0600e97658270001ba2fc06d6f2a5c10219dfe7d1722c4bda2a01704a1473260649993ae559b6f22000001f427516d6600178ef99cc049193c413103980c407ea3489a687b3c3479d2300c00000112278dfeae9949f887b70ae81e084f8897a5054627acef3efd01c8b29793d522000160040850b766b126a2b4843fcdfdffa5d5cab3f53bc860a3bef68958b5f066170001cc2dcaa338b312112db04b435a706d63244dd435238f0aa1e9e1598d35470810012dcc4273c8a0ed2337ecf7879380a07e7d427c7f9d82e538002bd1442978402c01daf63debf5b40df902dae98dadc029f281474d190cddecef1b10653248a234150001e2bca6a8d987d668defba89dc082196a922634ed88e065c669e526bb8815ee1b000000000000"
8
+ }
@@ -0,0 +1,8 @@
1
+ {
2
+ "network": "main",
3
+ "height": "2617500",
4
+ "hash": "0000000000497e6bed2f8061f4dd797af6908b898b7e5048def0529542d4569e",
5
+ "time": 1724153048,
6
+ "saplingTree": "01a0cfa8a537970cee62c087a3885ea4ccf72cc9fcbe00f28f4222b5d3e93c801c001f01b0e15f43d32bdd03192cc1e2ae461d8009bb3d3a043ddde958a4cc866447d029013b7c7c6d52e05b3551b943d334ce1fde4edb1bfdba3f7ecf9b670cc8115f2b5a0121e31609c54c5e18bd78ebc64692dda949c4fe9dbb34bc791b332b84b413673a01f41ce8f7c5791be796ce2cbbba898546b71d77b1ccf13fc0051908c1896cbd6f018e3515f20e3e4d87d0746649d3323cfd01f483f2774dffb08d9c33016e1de722000001bad98611c327e4dd30b00f886a7a2305fe2a75ee3a48e1fc6491d4ca4f9bf217011e18f60126946aab57aa56863338465e688705b0a9f3e22cf5ca893c0f0ece2a01da766462261738f109e41d45bfc4525a62e157280cfa5399e78be6a61c8bc34400000107ce458cf2cc5c0351bc0ecb8e4ce1ab7edc9b9b528dbbbe0a70b9057e4cdf5601889e7a0849bac67b05fe418b808099194a54632db5d8de4dab43ff55c3b22a0a01f762af15779fb5c9593af1a8a9a2c777b9377dcb3117e5c55b4365f1061ea86c012415b957855163102c9f373eec835c3b3aa11f0ac872533a867d3e2eb562d30200000000013e2598f743726006b8de42476ed56a55a75629a7b82e430c4e7c101a69e9b02a011619f99023a69bb647eab2d2aa1a73c3673c74bb033c3c4930eacda19e6fd93b0000000160272b134ca494b602137d89e528c751c06d3ef4a87a45f33af343c15060cc1e0000000000",
7
+ "orchardTree": "010bbb3720cae1cdbe4708b939322cbcc81ea1fd128af58ce8b3ea9b793cfe5a2c01d5cdfabb5fbdb0967b4b8597b776cb0f9923855ab82d9e963f9edc555dbb812f1f01634815b2dfbb56f1c4ccfd2221b91c6421f6375a7b9db115ba8ee0e2ec37cd2501a9cc11287e6af871aafe2fb18355d98d7e06d34adadf862347efd3907c5efe3c000000012eb5fe2fc732fc15bbc0c2c8028d1cb797d8e028b2683743f879ee38ad19ac2b0196837cd23e03893a3354ad6705d866ad4f8f7e74205cc8e08596bef0e4464d3f01e071743c2668ca2bc87088a4f56e47fe98a7ce9947871469f853f77ffe2fe111012277c14f0bc027ea1bf58666df336027a6dea16b7b996793d7122e6b690a980c01e0d0a702e34e4d2ee1248598905dee1526f25765f90133b2e44c28bb542c891001ba2fc06d6f2a5c10219dfe7d1722c4bda2a01704a1473260649993ae559b6f22000001f427516d6600178ef99cc049193c413103980c407ea3489a687b3c3479d2300c00000112278dfeae9949f887b70ae81e084f8897a5054627acef3efd01c8b29793d522000160040850b766b126a2b4843fcdfdffa5d5cab3f53bc860a3bef68958b5f066170001cc2dcaa338b312112db04b435a706d63244dd435238f0aa1e9e1598d35470810012dcc4273c8a0ed2337ecf7879380a07e7d427c7f9d82e538002bd1442978402c01daf63debf5b40df902dae98dadc029f281474d190cddecef1b10653248a234150001e2bca6a8d987d668defba89dc082196a922634ed88e065c669e526bb8815ee1b000000000000"
8
+ }
@@ -0,0 +1,8 @@
1
+ {
2
+ "network": "main",
3
+ "height": "2622500",
4
+ "hash": "00000000004d4c95ab72d0944a6a303e62168383830fb9303bd6e1682ca141ef",
5
+ "time": 1724530606,
6
+ "saplingTree": "019fbd3cdbc510044d35610791591c8411bb65dbe2624ac8d8e7647b207af3df25001f0001cbf5137235a85ffcd21f40c2a30aca3f572b3f621c2b208811acd17b9c1a4e580001b7cbaed611c5c6e2d518b7afa87bbe895c220734128e1f54289cc6b2a1bbb4650196973931e8834bf0ef5ff89b662abb1692ed112a71ec980e3f27b250dc483341000000010a15178309f9a7dca5488a43dfef8e9d063356474b91b0aa349838f9cba3fd170000017d75e562d0bcdbc49261ed9f119b11b6691f718b6a0407b62f0528d6f76987590000000001b254e3cfba937bcd40621e1d623a943440b083892546f081aab37058fd1b763f000000013e2598f743726006b8de42476ed56a55a75629a7b82e430c4e7c101a69e9b02a011619f99023a69bb647eab2d2aa1a73c3673c74bb033c3c4930eacda19e6fd93b0000000160272b134ca494b602137d89e528c751c06d3ef4a87a45f33af343c15060cc1e0000000000",
7
+ "orchardTree": "0174c05eb88514309c81b092bb6acbbe1ac5c06949760126ea253f9b6850e43826001f0000018d63150f6d09b39e285930bd9a5a301aecea584fdd18506a15ff3f8158106b1b016b7057c107310c1e9835f508d8da5f3e9f2b984a020117f711e8e8d8216f292e0179c5731d259047a9d9bb67d28d177286bccbec6e7f5e9920d6982e4dd685091b00000001dfa4cb908589e887712519145a3e575a3e374936bc2a039813bc8f44b264d526011baf6d2b84b13c6404a14b8898028cec47ae439317a7e15970828641e95fce1b000185edfe70c36f5d1c3216c4750bbd8f11fe1ab96802f9eaf273f2e85ea0709c1d0001f427516d6600178ef99cc049193c413103980c407ea3489a687b3c3479d2300c00000112278dfeae9949f887b70ae81e084f8897a5054627acef3efd01c8b29793d522000160040850b766b126a2b4843fcdfdffa5d5cab3f53bc860a3bef68958b5f066170001cc2dcaa338b312112db04b435a706d63244dd435238f0aa1e9e1598d35470810012dcc4273c8a0ed2337ecf7879380a07e7d427c7f9d82e538002bd1442978402c01daf63debf5b40df902dae98dadc029f281474d190cddecef1b10653248a234150001e2bca6a8d987d668defba89dc082196a922634ed88e065c669e526bb8815ee1b000000000000"
8
+ }
@@ -0,0 +1,8 @@
1
+ {
2
+ "network": "main",
3
+ "height": "2625000",
4
+ "hash": "00000000001e494f384243fe1d4e6c4e1d3f85ff566a38140a23dd0fb70c8d30",
5
+ "time": 1724718729,
6
+ "saplingTree": "01fa2736a13bcd417b0f16f9f6716532b0b2b87bd4810fd4369e46ff95b6e07840010e2d541ea571825331e80d5b2cf1111f07990c17f075f9e2665cd3798fca2a441f000001b6160e8a42bc0d7c04797bc713f820f137ebe89da53897f88910d5c1d3f0f02b00000001941d361375df3b278e8c1bb70075bdcb6ed1150f087d3edc226761936090612a01a11ff4b5fb59bb3e49251a3e3454d2769e1b9a46ced2b98a94baaf19a8fd7b6c01afda6b6a2deadcfc0837102d155e54a00fe6ac67f728672a807b9a30a5a4080101f19282b7d906ec48a9ee9a59050f09785e730558787370e39c1d643adba2f137000001ae94e769c003efcb6891de2cde1c38b62006f4bfac132d42d6abc118fac8261100000001b254e3cfba937bcd40621e1d623a943440b083892546f081aab37058fd1b763f000000013e2598f743726006b8de42476ed56a55a75629a7b82e430c4e7c101a69e9b02a011619f99023a69bb647eab2d2aa1a73c3673c74bb033c3c4930eacda19e6fd93b0000000160272b134ca494b602137d89e528c751c06d3ef4a87a45f33af343c15060cc1e0000000000",
7
+ "orchardTree": "01999966ad8244e5d5b48c116cf0e82575d8d7254a7596ef40f0ab46dfbed31132001f0138d26f7aef2394231a352fc9b7baa781938b358ffd1784f929d838a97b926e3a016f0eda5ef0442cbfb4557ed7e886b9b29b0f4448fe303876cf96147f81387b020001426b60c9e44db30ecc4542643c0332f1c3d314d654659337d815a24156ecfd1600016eb082bea05f4855883229f3d7fdd4c3977b4a728384eb91f0cc2b0488fe53030001d05d08c51cbb09059afff5b0c7dc6b3236cbd742936b013d9ad791a20998302300000112852a88a1d88b30c5a3bd2f532500e25379fc536934f2bbe26a2fcdea5dff250185edfe70c36f5d1c3216c4750bbd8f11fe1ab96802f9eaf273f2e85ea0709c1d0001f427516d6600178ef99cc049193c413103980c407ea3489a687b3c3479d2300c00000112278dfeae9949f887b70ae81e084f8897a5054627acef3efd01c8b29793d522000160040850b766b126a2b4843fcdfdffa5d5cab3f53bc860a3bef68958b5f066170001cc2dcaa338b312112db04b435a706d63244dd435238f0aa1e9e1598d35470810012dcc4273c8a0ed2337ecf7879380a07e7d427c7f9d82e538002bd1442978402c01daf63debf5b40df902dae98dadc029f281474d190cddecef1b10653248a234150001e2bca6a8d987d668defba89dc082196a922634ed88e065c669e526bb8815ee1b000000000000"
8
+ }
@@ -0,0 +1,8 @@
1
+ {
2
+ "network": "main",
3
+ "height": "2627500",
4
+ "hash": "00000000004c99475ef735bee6d2771a6044bdb627d152c6ae39f54c67874c06",
5
+ "time": 1724908052,
6
+ "saplingTree": "0179ef7ef11f7fa32c7ef7daa2666bc7038f0e85ae8a230fe86b891d0d75607963017fe2269da05360fb5f1929cc85e47092d0ba34ec1673057240a9a0b576d3f72e1f014b76d424dd1ce8b571799e94b990dce772451097948252b57fae6ed3b4cb5b630104bab6e32f97cd7e4288833da7241ae251ed6515481ff6be8d6697a2895354100001fe6c5e25f177acdf002abbf09b7ab14265ce18f24bb398248d7fb0961a9d385c0000000000012ba609199201a69bbb94719c16c8b52e5125159a331617677f9a3dbd94dab16901336f840d73a3cc9d09ea5b259afaaf254f5fe06de2e07d065702d433b4802d6a0139522553ddaa37086503896aa0cf1fbc53ac1511347112e46c92269f5734cf6301ae94e769c003efcb6891de2cde1c38b62006f4bfac132d42d6abc118fac8261100000001b254e3cfba937bcd40621e1d623a943440b083892546f081aab37058fd1b763f000000013e2598f743726006b8de42476ed56a55a75629a7b82e430c4e7c101a69e9b02a011619f99023a69bb647eab2d2aa1a73c3673c74bb033c3c4930eacda19e6fd93b0000000160272b134ca494b602137d89e528c751c06d3ef4a87a45f33af343c15060cc1e0000000000",
7
+ "orchardTree": "01e6b339484a666d8e2ccc7b16a5fca12a6578996dc45062711af7701fa8d96417001f011dd4f9ae0cdf647d695f5a7580e6c8494bdd10f11101a12c0bbb2618f148081e015ef1ead7145fe5091c058a3c276f64b7f6bda630d172004e34e5be4ac6cad1090001d58efefbfa90e462768e4c92010ec6bd04ac0e6604d9f5982fd6924733ca641801ffce4849fda5ef1b48cd33cebfc2a28438373a6f17f45319ed2dddbf8c75990601edd432f66510f1906ff62fab3d4d12dc0f506211fa45da85fd39761950057624010ae29a0ca1cb46a5379c3fe073ad86352873ae9c3a67a7be9b95860b567df61101fc86b74cea8a5b575d5d3a8e52c7ebdc742cf9d6a5e9723eaaf5abb07f5eee140148da2ec04ceda0f9de1aaac8241dda43c70a18bbb23addfdef3401489dc2c50b000112852a88a1d88b30c5a3bd2f532500e25379fc536934f2bbe26a2fcdea5dff250185edfe70c36f5d1c3216c4750bbd8f11fe1ab96802f9eaf273f2e85ea0709c1d0001f427516d6600178ef99cc049193c413103980c407ea3489a687b3c3479d2300c00000112278dfeae9949f887b70ae81e084f8897a5054627acef3efd01c8b29793d522000160040850b766b126a2b4843fcdfdffa5d5cab3f53bc860a3bef68958b5f066170001cc2dcaa338b312112db04b435a706d63244dd435238f0aa1e9e1598d35470810012dcc4273c8a0ed2337ecf7879380a07e7d427c7f9d82e538002bd1442978402c01daf63debf5b40df902dae98dadc029f281474d190cddecef1b10653248a234150001e2bca6a8d987d668defba89dc082196a922634ed88e065c669e526bb8815ee1b000000000000"
8
+ }
@@ -0,0 +1,8 @@
1
+ {
2
+ "network": "main",
3
+ "height": "2632500",
4
+ "hash": "0000000001ba8f8c1a25cf54cdd0d84cd4df8c94c012312ddf6d4f1eed253be8",
5
+ "time": 1725284808,
6
+ "saplingTree": "01fbd7100d3eb3b89717849cb288f931d95f0a4cc9f8a21a089ea022894e2de81101d5682005c58c0ab44af04979b5f446b4ed3b15ac508c0365939fad83ccbc0f411f012c3ff4db281c3c28b95e4774f080d3fd9e38f3cc83e9543741475514fd86b505016d23742353f8e324107b8461499359ad3f2f06526a6c8f8fc40a4d67337c4e4f0001e41b936af507828b07af694a9ac84743a9aefe9a2b65c1b281951a49420e4b7001227537e312ba774ed8b2c0a33d7dcc8fb9b0086b01fa82c0f54810ad4bd78f67010df61fa601c74f8ddd66d58a2ff77c3eb211896a4639778128fdf9cc0938dd4900000110bdc306e6fbb15f59d5fd55d17ebc592b3c5c4a06e545694838d8bb7bed4117012156e9ab7efb3d78fed297fff7705d0a919c68fc21f5f91c58a1312bb70eff450000015f57b607ee9f63c786a49df5f034279b6d7645f26ce1e9d0cbcad31660c15229010fdff8660d84e9dbb3979b612a8c64535da6d9c5820ed495c395857252d3863b000001b254e3cfba937bcd40621e1d623a943440b083892546f081aab37058fd1b763f000000013e2598f743726006b8de42476ed56a55a75629a7b82e430c4e7c101a69e9b02a011619f99023a69bb647eab2d2aa1a73c3673c74bb033c3c4930eacda19e6fd93b0000000160272b134ca494b602137d89e528c751c06d3ef4a87a45f33af343c15060cc1e0000000000",
7
+ "orchardTree": "01c8987f1d6db36c65d41532a022e2c9e988e17dae0926d5f21ea09ac8706ca53f014ea5882eeb23f5b65f047375e8001dac73dfe222671f773a935f76b2f18598271f0130e98817bf5e5f2abf652be9f1431d0f4dddfee6707a96f440d51e84576a8509000001273c6faf9dd7c5206dd3128a20d62465bd423932d9b3e78447b236c7b26dee3600014dd50d9d5d0295590e68cb66e406e86578818518fd9702c44613f71bd842b52f00000144fbeaa87f05ba3c85cf0de179d28286093970867940c38edfaf6003abebec34000000012e924c7b6b2a77680118ee5fc70914b953fb33b7673ab2ddceb873c26632562901f427516d6600178ef99cc049193c413103980c407ea3489a687b3c3479d2300c00000112278dfeae9949f887b70ae81e084f8897a5054627acef3efd01c8b29793d522000160040850b766b126a2b4843fcdfdffa5d5cab3f53bc860a3bef68958b5f066170001cc2dcaa338b312112db04b435a706d63244dd435238f0aa1e9e1598d35470810012dcc4273c8a0ed2337ecf7879380a07e7d427c7f9d82e538002bd1442978402c01daf63debf5b40df902dae98dadc029f281474d190cddecef1b10653248a234150001e2bca6a8d987d668defba89dc082196a922634ed88e065c669e526bb8815ee1b000000000000"
8
+ }
@@ -0,0 +1,8 @@
1
+ {
2
+ "network": "main",
3
+ "height": "2635000",
4
+ "hash": "0000000000936510469feedc6c09814afb64bed2dfc6f2bf84b9585fc995a638",
5
+ "time": 1725472507,
6
+ "saplingTree": "014aec4ee318120584a5d63b3446ad73b30db681d7b6c51befadb86ba4dcd48b2b001f00000001efcdeb61d7c5cc71ceb16999553257ab67ac2f8c29b74f91367eeb4580356d7101df197a749b62e07ee373d523c8795d7ff067a3baa4deec22fdbee0d7d3875920012b0bebd3e58bf72b7c2923181f13637ad7a28bd125944757fcf9981b2afe113c00000001443df95e3fe9835e24edc7f8534a8aaf0505c418385647904caea5acadd0ce3c013e1f5c6c01be4395da13e7ff3db37edc618840a22201bdf6cb448f25b046a948016360f687872720377203b62741754d620ba92fa73359ac6caa0854db38d7a045015f57b607ee9f63c786a49df5f034279b6d7645f26ce1e9d0cbcad31660c15229010fdff8660d84e9dbb3979b612a8c64535da6d9c5820ed495c395857252d3863b000001b254e3cfba937bcd40621e1d623a943440b083892546f081aab37058fd1b763f000000013e2598f743726006b8de42476ed56a55a75629a7b82e430c4e7c101a69e9b02a011619f99023a69bb647eab2d2aa1a73c3673c74bb033c3c4930eacda19e6fd93b0000000160272b134ca494b602137d89e528c751c06d3ef4a87a45f33af343c15060cc1e0000000000",
7
+ "orchardTree": "016c29db17907191e912d000d4929fa5630a177e9910a954b176ab28b34e628b2b001f01687b54d1a8d8df472208ab4f50e4665a39106aee59069287e1711ff8cb2c0028017ef92629025fd9c81a3e0cd7c9b3e395da8907da4937020351594bd9a429a90b0001f3377c01ae9e142f6277d1edf4cfe6723f52a324ab9d3d554bef1cc0abd4221801b838055b03e108d8f3dfb6ec2a06045ed45caca6774011dd970fe5ed01a7ed05000113d22aef389acdbde9205ac1554ed76976a38686b3e992a80754c25dff774d340001348473c84ab47f1daed7cfe1980c0eb56f3c4bb61565657217752256ab2ad224016acb8166c54a52c0169502fcd761a28ade7d4e9ad43d5d04e79d0fcd3d08a1350000012e924c7b6b2a77680118ee5fc70914b953fb33b7673ab2ddceb873c26632562901f427516d6600178ef99cc049193c413103980c407ea3489a687b3c3479d2300c00000112278dfeae9949f887b70ae81e084f8897a5054627acef3efd01c8b29793d522000160040850b766b126a2b4843fcdfdffa5d5cab3f53bc860a3bef68958b5f066170001cc2dcaa338b312112db04b435a706d63244dd435238f0aa1e9e1598d35470810012dcc4273c8a0ed2337ecf7879380a07e7d427c7f9d82e538002bd1442978402c01daf63debf5b40df902dae98dadc029f281474d190cddecef1b10653248a234150001e2bca6a8d987d668defba89dc082196a922634ed88e065c669e526bb8815ee1b000000000000"
8
+ }
@@ -0,0 +1,8 @@
1
+ {
2
+ "network": "main",
3
+ "height": "2637500",
4
+ "hash": "00000000017e912451775307f70f3dc45f3c26472abcd57821cefb5397ec095d",
5
+ "time": 1725660690,
6
+ "saplingTree": "0143545ee77369853d02f5d40779ad2bde786e00ced989ac44b4e9f8b4ee028b1f01199533df7fc1e1a972ac4eb7be134a66234f9c286fbdd92596fa7399705939281f01d64856d0f6ed5cde7f5b72585d530c1e6c5155267883a36b8c189426bf30d80f014dbf82b6b2a751d69a5691fc484c1ba806f508985fc3282fdb810b87b63f385c01f49bd1f62a1cff6b37c8c513f182cee518f6eb2cb2d94a7428eba10937e1bb1d010e745ade9349a1ee37a82b740d662bb737858b6a58fc42834f9061ea496f546b000000000105a8e948e3587e3af250a809487925cab99603c74028889103dd10ecc286f85e000001985764ab0e65ac40225e22fa01dc6be6b9b5ebf14efe8f49f94bec5722a35e690000018a015f44048c81b4d523a810de3ce0f216cde33ade70ad760501bd5e08d727000001b254e3cfba937bcd40621e1d623a943440b083892546f081aab37058fd1b763f000000013e2598f743726006b8de42476ed56a55a75629a7b82e430c4e7c101a69e9b02a011619f99023a69bb647eab2d2aa1a73c3673c74bb033c3c4930eacda19e6fd93b0000000160272b134ca494b602137d89e528c751c06d3ef4a87a45f33af343c15060cc1e0000000000",
7
+ "orchardTree": "01e77d7e93c2e20ea50479189ec8223eff06fa7377e10f6ff4daf738ad3941bb2b01f387d33cba0bbcef08de97bb90f88fe2bd206b4ee9bf273ceefde3798a5f2c311f00010e2bc4a095c262944aaf4ce47b00c2e3401d4ec2d7a021945b0db01d2e2bb83101c4e89af79b5473bf471782dd97a28ac68ab1bf6da9df9582c14e63d7a166120200000001f41460af612ec2a0141597d48af9e8ed6939ec6f183cf930c64462efa34c532b015b9c9e09001ba583e70a7cac2ee145d2a8903bc87bc11e8dc169ab1b184944090134467a17a9eec4b57e54f4706dc5dae8519ed13a338c807276764be12dfced0c00017456e5ac88cf348914dc885a5b520facd0e31985bcbee5490ed74bd2d777f50100012e924c7b6b2a77680118ee5fc70914b953fb33b7673ab2ddceb873c26632562901f427516d6600178ef99cc049193c413103980c407ea3489a687b3c3479d2300c00000112278dfeae9949f887b70ae81e084f8897a5054627acef3efd01c8b29793d522000160040850b766b126a2b4843fcdfdffa5d5cab3f53bc860a3bef68958b5f066170001cc2dcaa338b312112db04b435a706d63244dd435238f0aa1e9e1598d35470810012dcc4273c8a0ed2337ecf7879380a07e7d427c7f9d82e538002bd1442978402c01daf63debf5b40df902dae98dadc029f281474d190cddecef1b10653248a234150001e2bca6a8d987d668defba89dc082196a922634ed88e065c669e526bb8815ee1b000000000000"
8
+ }
@@ -0,0 +1,8 @@
1
+ {
2
+ "network": "main",
3
+ "height": "2642500",
4
+ "hash": "00000000006693cd03a926db6e19a553d43f1f778ea4a2edbf22d4fb2e9a8816",
5
+ "time": 1726037548,
6
+ "saplingTree": "014057a44dc8aca022291f7bfb98c8ae9ca1de458f99a4d9287ae7f2381523514a001f01e5ceedb9946aae9d320f694cbaaaade053c49b30661f2877e6082a0f1514863201248dd5ace1c123df8f0325e7781b40604cb109a8e51dfe0ccd955c454eb0af4601873e0e4fb9ff27621b42f863802c8701d68ef6cf716a992e175d7ae86146d93f018746c74cb1adb19a0811447b052a4a9be991e0f0d9498a1607f2940da95dbf11010fbf67608405bd5e8c792cb8e43f8c589abb64ddef037258db69d01802750a700100332226bcc967db463041deeb5d7c8c547a9d74dadeec3b5c0721d63d73c84901b19c8961a94f9f426d4be825dab9fbc42e18557f86facf8e1a15f7018b8e446a0123a24e954893a19caf34681d1e08a4e3ad20ff2c677677a8131ce11a30ec430801161fb7489b2694aad1090661194ca06e6af6af57038dbeb897dddc2d08380d4b01cc3066969c45f7add6832034edbae71ba2df1a7d43e7cd88851c423270cf2427000127535dff4fd8bc9066593c26fb86bde398dcfb7dd9a579f3435f64f054f1b738000109c6db178ba9b949236956ab1f902dfdadf90dc338a1ac956b00d74e3c347b36018a015f44048c81b4d523a810de3ce0f216cde33ade70ad760501bd5e08d727000001b254e3cfba937bcd40621e1d623a943440b083892546f081aab37058fd1b763f000000013e2598f743726006b8de42476ed56a55a75629a7b82e430c4e7c101a69e9b02a011619f99023a69bb647eab2d2aa1a73c3673c74bb033c3c4930eacda19e6fd93b0000000160272b134ca494b602137d89e528c751c06d3ef4a87a45f33af343c15060cc1e0000000000",
7
+ "orchardTree": "016d9a28222a5bfb137493597d559cffad6fc6da60325b8afc1ea5be0876029b03001f0000011ca65ec086002e67b220e09b5bc8e9807023c6c94dc8be40af68329d52bcbc1001cc9b2e29a8ad1dfe14de1ba613f19f0d57f61d4f78866b14201d5485e4dcd03601f3dcb7c86ea96aa909ea670d176addc27500ce3bc6a74bd54df1906277b9de3701b34e6449b38f1bfde3d2effb17b5712c7b455fa3d6163b9782c7bb2ba5228c3000015960e63aeebcc121b63cace0da323d546e7fd04cb0fd4d476b44733f60d98b2c015b427bf919e85662e0596077c1d05b8110464a9b8acc50f89fcdc40234e9441a0000012e6422094d397757974138434d1900861784d8928417d19f3d1418200bdb5023012e924c7b6b2a77680118ee5fc70914b953fb33b7673ab2ddceb873c26632562901f427516d6600178ef99cc049193c413103980c407ea3489a687b3c3479d2300c00000112278dfeae9949f887b70ae81e084f8897a5054627acef3efd01c8b29793d522000160040850b766b126a2b4843fcdfdffa5d5cab3f53bc860a3bef68958b5f066170001cc2dcaa338b312112db04b435a706d63244dd435238f0aa1e9e1598d35470810012dcc4273c8a0ed2337ecf7879380a07e7d427c7f9d82e538002bd1442978402c01daf63debf5b40df902dae98dadc029f281474d190cddecef1b10653248a234150001e2bca6a8d987d668defba89dc082196a922634ed88e065c669e526bb8815ee1b000000000000"
8
+ }
@@ -0,0 +1,8 @@
1
+ {
2
+ "network": "main",
3
+ "height": "2645000",
4
+ "hash": "0000000001a78258009598e402b8aeceb776cb991ebaa1737249cf2b2333eeb2",
5
+ "time": 1726225825,
6
+ "saplingTree": "01f286e232140a8260d5c264431fa73da1a0c2c1d77e8332f5e043140f7459f54d01dfb7e6d43ee12ed5d3b39818f6349b0e773aca6dabcac512d4dc1e9aaed0613e1f000193bfb6fbfc09af66b1a941b50346b57e004aa280fea8509b4e4134b991eb396c000161147c41d8be262139fe8437a6ee5d31165ba510474a8161044c8a4563c201530001ee75b964eeb1b96e619b75821d8e68349cf3fb32313726c302fa0814c9108c36011583baaa7d3e373f313f7205aa8909c1a9854506e233e0111d3796d55cd5b05401486c3ce779cee145124aca56faa838adf518394622e044517159a2780aa8936c00014d55d141d63a0d30c341cf015872ea2af5f644c75171eb7d2fcbb02bfbabc62c01514167a1981750ef6e0bbed15f8479ffdb468eee5363e2da4e7cf1de0353541f0001619da5d62d17b0bcfed1f103c072fbae797c55055460fab54814da30b7c7323b0109c6db178ba9b949236956ab1f902dfdadf90dc338a1ac956b00d74e3c347b36018a015f44048c81b4d523a810de3ce0f216cde33ade70ad760501bd5e08d727000001b254e3cfba937bcd40621e1d623a943440b083892546f081aab37058fd1b763f000000013e2598f743726006b8de42476ed56a55a75629a7b82e430c4e7c101a69e9b02a011619f99023a69bb647eab2d2aa1a73c3673c74bb033c3c4930eacda19e6fd93b0000000160272b134ca494b602137d89e528c751c06d3ef4a87a45f33af343c15060cc1e0000000000",
7
+ "orchardTree": "01b3d75c6eaf38155f55616c0cc6b60232ff6383426ee390c56fc1a0f59c14e830001f000128b9eb51eb24cc954839c98140d1ec072b53f98ae55e8089e1309303e6c111240000000183c285bb30dbfb3b1eee233d5bad0041951ffff9e129aee5f678f83c8f8a341700015370dab5e63025aec455ebf88bce956f4f98217bc2b88bc4d49959f347925e280124736ac1734328947d00cbbc2d9d70067f3c95940bef666e7618b6ed7b091b3501259318b70a7b9ab563d152034c645eddfade822e4cdb9f686abe5a1a4b43160200012e6422094d397757974138434d1900861784d8928417d19f3d1418200bdb5023012e924c7b6b2a77680118ee5fc70914b953fb33b7673ab2ddceb873c26632562901f427516d6600178ef99cc049193c413103980c407ea3489a687b3c3479d2300c00000112278dfeae9949f887b70ae81e084f8897a5054627acef3efd01c8b29793d522000160040850b766b126a2b4843fcdfdffa5d5cab3f53bc860a3bef68958b5f066170001cc2dcaa338b312112db04b435a706d63244dd435238f0aa1e9e1598d35470810012dcc4273c8a0ed2337ecf7879380a07e7d427c7f9d82e538002bd1442978402c01daf63debf5b40df902dae98dadc029f281474d190cddecef1b10653248a234150001e2bca6a8d987d668defba89dc082196a922634ed88e065c669e526bb8815ee1b000000000000"
8
+ }
@@ -0,0 +1,8 @@
1
+ {
2
+ "network": "main",
3
+ "height": "2647500",
4
+ "hash": "00000000017d1357b1ed5da4e989fbc0b876582b794d3841550120d5039806ea",
5
+ "time": 1726414587,
6
+ "saplingTree": "011ac0ae0bc91df29324dc4e44b497e37f39231e122282fb9393d74e5b8effe004001f000001768fbe5fdb02abb79afaa9bf21cd62a8d41364945998d85e753d22ae3f72c84a0000000001dc2475360537a65a96611c4178220651c699f74d8b0bd4bc1b9b55216e5cdd660165c0935d1096c40dbc9b5b3a63316eac83d9a52a71e1f6f03e98cbb6b4ccec0c000000000000019a730d9d524de40f3fa2a76a8072ff66ef8ce0af24a68a080ef683a9d45aab7301b254e3cfba937bcd40621e1d623a943440b083892546f081aab37058fd1b763f000000013e2598f743726006b8de42476ed56a55a75629a7b82e430c4e7c101a69e9b02a011619f99023a69bb647eab2d2aa1a73c3673c74bb033c3c4930eacda19e6fd93b0000000160272b134ca494b602137d89e528c751c06d3ef4a87a45f33af343c15060cc1e0000000000",
7
+ "orchardTree": "0169759f512914bd375cefe2006db4ebe6ca2a75d183cdae625bf8fd6342b7023f001f000169356ffa09dfebffb520a2be8d59d2fc94e3cd9a9f7548a9403ddb9ff3cc672a0000013201d6be64dacbeb09ed9d1d6afd0c52679deff35aeef8324ab2287022f22106000000010ac5d26f1d24b3a75dacff16d1519701f2585e9854764d0639834fe9870efb2c0000000000010c104faa2b1148b1b627090aa939e321b82edcb0ce70aa4eee298997556b4f35000112278dfeae9949f887b70ae81e084f8897a5054627acef3efd01c8b29793d522000160040850b766b126a2b4843fcdfdffa5d5cab3f53bc860a3bef68958b5f066170001cc2dcaa338b312112db04b435a706d63244dd435238f0aa1e9e1598d35470810012dcc4273c8a0ed2337ecf7879380a07e7d427c7f9d82e538002bd1442978402c01daf63debf5b40df902dae98dadc029f281474d190cddecef1b10653248a234150001e2bca6a8d987d668defba89dc082196a922634ed88e065c669e526bb8815ee1b000000000000"
8
+ }
@@ -0,0 +1,8 @@
1
+ {
2
+ "network": "main",
3
+ "height": "2650000",
4
+ "hash": "0000000000b32debcdb364e5fc7988044a4eb29e4f86ed6c97a95f0836e3c37f",
5
+ "time": 1726602492,
6
+ "saplingTree": "01e09fe8115a458f1802d1d95ad1cbc4d6737d31ebf4a63f936b62011034dabd31010855462f487eaa137ee9950887b40953765357aff4a9eda4d85d4eccf274c42a1f000001488261fba3b34b7f78d50bc11ce1830c2339813606bb17570d7293128769577101216344eb0f3b3b8bddd4d2b51a36f6bb4fa368125d29dc02cf776797152bd95a00011f360200bebb9acb23f27fd0cb18a95b746d3a07c4df8cf7a843147bd0f9042d0000000001b5c2bb61f0ea5b18cfdeddac25f36c98988ce0705eae6824a3121158a6f6f824010d143acd831f6da07b124b16f4c4e58102caa7517722bb550946c5fa2a245371000000019a730d9d524de40f3fa2a76a8072ff66ef8ce0af24a68a080ef683a9d45aab7301b254e3cfba937bcd40621e1d623a943440b083892546f081aab37058fd1b763f000000013e2598f743726006b8de42476ed56a55a75629a7b82e430c4e7c101a69e9b02a011619f99023a69bb647eab2d2aa1a73c3673c74bb033c3c4930eacda19e6fd93b0000000160272b134ca494b602137d89e528c751c06d3ef4a87a45f33af343c15060cc1e0000000000",
7
+ "orchardTree": "016c37f7adb67b940b91f05b0d60e1d98c2d4f67c0a766ae367d42a56302ea0416001f015126bbb64a18d6e518922654683434e6aa3c488e1a4e2b35d5ff4bb4d32c310501e8131c28e898b1247a2e28d1691b0854445aecf30e7bd601117fdd36967c893e01c454a4fac32e3c68f16a55476d7e992d7cec2e4af24bc34d7d9c459f58fbe22100000102b7afec099b149198431e309cec4b3f95531b53fa350ff453c0a648276bc1140001cc846293d335bbb212a6c0f54fd45d92f995724d58b9b5fed397dbc55e3bb8030001f783a7a186e453c6d11e88542ed866790b00d4102899da05c57eb0d71fffbc2500000000010c104faa2b1148b1b627090aa939e321b82edcb0ce70aa4eee298997556b4f35000112278dfeae9949f887b70ae81e084f8897a5054627acef3efd01c8b29793d522000160040850b766b126a2b4843fcdfdffa5d5cab3f53bc860a3bef68958b5f066170001cc2dcaa338b312112db04b435a706d63244dd435238f0aa1e9e1598d35470810012dcc4273c8a0ed2337ecf7879380a07e7d427c7f9d82e538002bd1442978402c01daf63debf5b40df902dae98dadc029f281474d190cddecef1b10653248a234150001e2bca6a8d987d668defba89dc082196a922634ed88e065c669e526bb8815ee1b000000000000"
8
+ }
@@ -13,6 +13,10 @@ struct ZcashKeyDerivationBackend: ZcashKeyDerivationBackendWelding {
13
13
 
14
14
  // MARK: Address metadata and validation
15
15
  static func getAddressMetadata(_ address: String) -> AddressMetadata? {
16
+ guard !address.containsCStringNullBytesBeforeStringEnding() else {
17
+ return nil
18
+ }
19
+
16
20
  var networkId: UInt32 = 0
17
21
  var addrId: UInt32 = 0
18
22
  guard zcashlc_get_address_metadata(
@@ -63,14 +67,6 @@ struct ZcashKeyDerivationBackend: ZcashKeyDerivationBackendWelding {
63
67
  return typecodes
64
68
  }
65
69
 
66
- func isValidSaplingAddress(_ address: String) -> Bool {
67
- guard !address.containsCStringNullBytesBeforeStringEnding() else {
68
- return false
69
- }
70
-
71
- return zcashlc_is_valid_sapling_address([CChar](address.utf8CString), networkType.networkId)
72
- }
73
-
74
70
  func isValidSaplingExtendedFullViewingKey(_ key: String) -> Bool {
75
71
  guard !key.containsCStringNullBytesBeforeStringEnding() else {
76
72
  return false
@@ -87,22 +83,6 @@ struct ZcashKeyDerivationBackend: ZcashKeyDerivationBackendWelding {
87
83
  return zcashlc_is_valid_sapling_extended_spending_key([CChar](key.utf8CString), networkType.networkId)
88
84
  }
89
85
 
90
- func isValidTransparentAddress(_ address: String) -> Bool {
91
- guard !address.containsCStringNullBytesBeforeStringEnding() else {
92
- return false
93
- }
94
-
95
- return zcashlc_is_valid_transparent_address([CChar](address.utf8CString), networkType.networkId)
96
- }
97
-
98
- func isValidUnifiedAddress(_ address: String) -> Bool {
99
- guard !address.containsCStringNullBytesBeforeStringEnding() else {
100
- return false
101
- }
102
-
103
- return zcashlc_is_valid_unified_address([CChar](address.utf8CString), networkType.networkId)
104
- }
105
-
106
86
  func isValidUnifiedFullViewingKey(_ key: String) -> Bool {
107
87
  guard !key.containsCStringNullBytesBeforeStringEnding() else {
108
88
  return false
@@ -25,11 +25,6 @@ protocol ZcashKeyDerivationBackendWelding {
25
25
  /// - `rustRustReceiverTypecodesOnUnifiedAddressMalformed` if getting typecodes for unified address fails.
26
26
  func receiverTypecodesOnUnifiedAddress(_ address: String) throws -> [UInt32]
27
27
 
28
- /// Validates the if the given string is a valid Sapling Address
29
- /// - Parameter address: UTF-8 encoded String to validate
30
- /// - Returns: true when the address is valid. Returns false in any other case
31
- func isValidSaplingAddress(_ address: String) -> Bool
32
-
33
28
  /// Validates the if the given string is a valid Sapling Extended Full Viewing Key
34
29
  /// - Parameter key: UTF-8 encoded String to validate
35
30
  /// - Returns: `true` when the Sapling Extended Full Viewing Key is valid. `false` in any other case
@@ -40,16 +35,6 @@ protocol ZcashKeyDerivationBackendWelding {
40
35
  /// - parameter key: String encoded Extended Spending Key
41
36
  func isValidSaplingExtendedSpendingKey(_ key: String) -> Bool
42
37
 
43
- /// Validates the if the given string is a valid Transparent Address
44
- /// - Parameter address: UTF-8 encoded String to validate
45
- /// - Returns: true when the address is valid and transparent. false in any other case
46
- func isValidTransparentAddress(_ address: String) -> Bool
47
-
48
- /// validates whether a string encoded address is a valid Unified Address.
49
- /// - Parameter address: UTF-8 encoded String to validate
50
- /// - Returns: true when the address is valid and transparent. false in any other case
51
- func isValidUnifiedAddress(_ address: String) -> Bool
52
-
53
38
  /// verifies that the given string-encoded `UnifiedFullViewingKey` is valid.
54
39
  /// - Parameter ufvk: UTF-8 encoded String to validate
55
40
  /// - Returns: true when the encoded string is a valid UFVK. false in any other case
@@ -9,8 +9,24 @@
9
9
  import Foundation
10
10
 
11
11
 
12
+ enum RustLogging: String {
13
+ /// The logs are completely disabled.
14
+ case off
15
+ /// Logs very serious errors.
16
+ case error
17
+ /// Logs hazardous situations.
18
+ case warn
19
+ /// Logs useful information.
20
+ case info
21
+ /// Logs lower priority information.
22
+ case debug
23
+ /// Logs very low priority, often extremely verbose, information.
24
+ case trace
25
+ }
26
+
12
27
  struct ZcashRustBackend: ZcashRustBackendWelding {
13
28
  let minimumConfirmations: UInt32 = 10
29
+ let minimumShieldingConfirmations: UInt32 = 1
14
30
  let useZIP317Fees = true
15
31
 
16
32
  let dbData: (String, UInt)
@@ -21,7 +37,8 @@ struct ZcashRustBackend: ZcashRustBackendWelding {
21
37
 
22
38
  let networkType: NetworkType
23
39
 
24
- static var tracingEnabled = false
40
+ static var rustInitialized = false
41
+
25
42
  /// Creates instance of `ZcashRustBackend`.
26
43
  /// - Parameters:
27
44
  /// - dbData: `URL` pointing to file where data database will be.
@@ -31,9 +48,17 @@ struct ZcashRustBackend: ZcashRustBackendWelding {
31
48
  /// - spendParamsPath: `URL` pointing to spend parameters file.
32
49
  /// - outputParamsPath: `URL` pointing to output parameters file.
33
50
  /// - networkType: Network type to use.
34
- /// - enableTracing: this sets up whether the tracing system will dump logs onto the OSLogger system or not.
35
- /// **Important note:** this will enable the tracing **for all instances** of ZcashRustBackend, not only for this one.
36
- init(dbData: URL, fsBlockDbRoot: URL, spendParamsPath: URL, outputParamsPath: URL, networkType: NetworkType, enableTracing: Bool = false) {
51
+ /// - logLevel: this sets up whether the tracing system will dump logs onto the OSLogger system or not.
52
+ /// **Important note:** this will enable the tracing **for all instances** of ZcashRustBackend, not only for this one.
53
+ /// This is ignored after the first ZcashRustBackend instance is created.
54
+ init(
55
+ dbData: URL,
56
+ fsBlockDbRoot: URL,
57
+ spendParamsPath: URL,
58
+ outputParamsPath: URL,
59
+ networkType: NetworkType,
60
+ logLevel: RustLogging = RustLogging.off
61
+ ) {
37
62
  self.dbData = dbData.osStr()
38
63
  self.fsBlockDbRoot = fsBlockDbRoot.osPathStr()
39
64
  self.spendParamsPath = spendParamsPath.osPathStr()
@@ -41,9 +66,9 @@ struct ZcashRustBackend: ZcashRustBackendWelding {
41
66
  self.networkType = networkType
42
67
  self.keyDeriving = ZcashKeyDerivationBackend(networkType: networkType)
43
68
 
44
- if enableTracing && !Self.tracingEnabled {
45
- Self.tracingEnabled = true
46
- Self.enableTracing()
69
+ if !Self.rustInitialized {
70
+ Self.rustInitialized = true
71
+ Self.initializeRust(logLevel: logLevel)
47
72
  }
48
73
  }
49
74
 
@@ -113,7 +138,9 @@ struct ZcashRustBackend: ZcashRustBackendWelding {
113
138
 
114
139
  // -1 is the error sentinel.
115
140
  guard result >= 0 else {
116
- throw ZcashError.rustIsSeedRelevantToAnyDerivedAccount(lastErrorMessage(fallback: "`isSeedRelevantToAnyDerivedAccount` failed with unknown error"))
141
+ throw ZcashError.rustIsSeedRelevantToAnyDerivedAccount(
142
+ lastErrorMessage(fallback: "`isSeedRelevantToAnyDerivedAccount` failed with unknown error")
143
+ )
117
144
  }
118
145
 
119
146
  // 0 is false, 1 is true.
@@ -179,13 +206,13 @@ struct ZcashRustBackend: ZcashRustBackendWelding {
179
206
  }
180
207
 
181
208
  @DBActor
182
- func decryptAndStoreTransaction(txBytes: [UInt8], minedHeight: Int32) async throws {
209
+ func decryptAndStoreTransaction(txBytes: [UInt8], minedHeight: UInt32?) async throws {
183
210
  let result = zcashlc_decrypt_and_store_transaction(
184
211
  dbData.0,
185
212
  dbData.1,
186
213
  txBytes,
187
214
  UInt(txBytes.count),
188
- UInt32(minedHeight),
215
+ Int64(minedHeight ?? 0),
189
216
  networkType.networkId
190
217
  )
191
218
 
@@ -306,7 +333,7 @@ struct ZcashRustBackend: ZcashRustBackendWelding {
306
333
  dbData.1,
307
334
  networkType.networkId,
308
335
  account,
309
- minimumConfirmations
336
+ minimumShieldingConfirmations
310
337
  )
311
338
 
312
339
  guard balance >= 0 else {
@@ -747,16 +774,20 @@ struct ZcashRustBackend: ZcashRustBackendWelding {
747
774
  UInt64(shieldingThreshold.amount),
748
775
  transparentReceiver.map { [CChar]($0.utf8CString) },
749
776
  networkType.networkId,
750
- minimumConfirmations,
777
+ minimumShieldingConfirmations,
751
778
  useZIP317Fees
752
779
  )
753
780
 
754
781
  guard let proposal else {
755
- throw ZcashError.rustShieldFunds(lastErrorMessage(fallback: "`proposeShielding` failed with unknown error"))
782
+ throw ZcashError.rustShieldFunds(lastErrorMessage(fallback: "Failed with nil proposal."))
756
783
  }
757
784
 
758
785
  defer { zcashlc_free_boxed_slice(proposal) }
759
-
786
+
787
+ guard proposal.pointee.ptr != nil else {
788
+ throw ZcashError.rustShieldFunds(lastErrorMessage(fallback: "Failed with nil pointer."))
789
+ }
790
+
760
791
  return try FfiProposal(contiguousBytes: Data(
761
792
  bytes: proposal.pointee.ptr,
762
793
  count: Int(proposal.pointee.len)
@@ -813,36 +844,106 @@ struct ZcashRustBackend: ZcashRustBackendWelding {
813
844
 
814
845
  return branchId
815
846
  }
847
+
848
+ @DBActor
849
+ func transactionDataRequests() async throws -> [TransactionDataRequest] {
850
+ let tDataRequestsPtr = zcashlc_transaction_data_requests(
851
+ dbData.0,
852
+ dbData.1,
853
+ networkType.networkId
854
+ )
855
+
856
+ guard let tDataRequestsPtr else {
857
+ throw ZcashError.rustTransactionDataRequests(lastErrorMessage(fallback: "`transactionDataRequests` failed with unknown error"))
858
+ }
859
+
860
+ defer { zcashlc_free_transaction_data_requests(tDataRequestsPtr) }
861
+
862
+ var transactionDataRequests: [TransactionDataRequest] = []
863
+
864
+ for i in (0 ..< Int(tDataRequestsPtr.pointee.len)) {
865
+ let tDataRequestPtr = tDataRequestsPtr.pointee.ptr.advanced(by: i).pointee
866
+
867
+ var tDataRequest: TransactionDataRequest?
868
+
869
+ if tDataRequestPtr.tag == 0 {
870
+ tDataRequest = TransactionDataRequest.getStatus(FfiTxId(tuple: tDataRequestPtr.get_status).array)
871
+ } else if tDataRequestPtr.tag == 1 {
872
+ tDataRequest = TransactionDataRequest.enhancement(FfiTxId(tuple: tDataRequestPtr.enhancement).array)
873
+ } else if tDataRequestPtr.tag == 2, let address = String(validatingUTF8: tDataRequestPtr.spends_from_address.address) {
874
+ let end = tDataRequestPtr.spends_from_address.block_range_end
875
+ let blockRangeEnd: UInt32? = end > UInt32.max || end == -1 ? nil : UInt32(end)
876
+
877
+ tDataRequest = TransactionDataRequest.spendsFromAddress(
878
+ SpendsFromAddress(
879
+ address: address,
880
+ blockRangeStart: tDataRequestPtr.spends_from_address.block_range_start,
881
+ blockRangeEnd: blockRangeEnd
882
+ )
883
+ )
884
+ }
885
+
886
+ if let tDataRequest {
887
+ transactionDataRequests.append(tDataRequest)
888
+ }
889
+ }
890
+
891
+ return transactionDataRequests
892
+ }
893
+
894
+ @DBActor
895
+ func setTransactionStatus(txId: Data, status: TransactionStatus) async throws {
896
+ var transactionStatus = FfiTransactionStatus()
897
+
898
+ switch status {
899
+ case .txidNotRecognized:
900
+ transactionStatus.tag = 0
901
+ case .notInMainChain:
902
+ transactionStatus.tag = 1
903
+ case .mined(let height):
904
+ transactionStatus.tag = 2
905
+ transactionStatus.mined = UInt32(height)
906
+ }
907
+
908
+ zcashlc_set_transaction_status(
909
+ dbData.0,
910
+ dbData.1,
911
+ networkType.networkId,
912
+ txId.bytes,
913
+ UInt(txId.bytes.count),
914
+ transactionStatus
915
+ )
916
+ }
816
917
  }
817
918
 
818
919
  private extension ZcashRustBackend {
819
- static func enableTracing() {
820
- zcashlc_init_on_load(false)
920
+ static func initializeRust(logLevel: RustLogging) {
921
+ logLevel.rawValue.utf8CString.withUnsafeBufferPointer { levelPtr in
922
+ zcashlc_init_on_load(levelPtr.baseAddress)
923
+ }
821
924
  }
822
925
  }
823
926
 
824
- private extension ZcashRustBackend {
825
- nonisolated func lastErrorMessage(fallback: String) -> String {
826
- let errorLen = zcashlc_last_error_length()
827
- defer { zcashlc_clear_last_error() }
828
-
829
- if errorLen > 0 {
830
- let error = UnsafeMutablePointer<Int8>.allocate(capacity: Int(errorLen))
831
- defer { error.deallocate() }
832
-
833
- zcashlc_error_message_utf8(error, errorLen)
834
- if let errorMessage = String(validatingUTF8: error) {
835
- return errorMessage
836
- } else {
837
- return fallback
838
- }
927
+ nonisolated func lastErrorMessage(fallback: String) -> String {
928
+ let errorLen = zcashlc_last_error_length()
929
+ defer { zcashlc_clear_last_error() }
930
+
931
+ if errorLen > 0 {
932
+ let error = UnsafeMutablePointer<Int8>.allocate(capacity: Int(errorLen))
933
+ defer { error.deallocate() }
934
+
935
+ zcashlc_error_message_utf8(error, errorLen)
936
+ if let errorMessage = String(validatingUTF8: error) {
937
+ return errorMessage
839
938
  } else {
840
939
  return fallback
841
940
  }
941
+ } else {
942
+ return fallback
842
943
  }
843
944
  }
844
945
 
845
- private extension URL {
946
+ extension URL {
846
947
  func osStr() -> (String, UInt) {
847
948
  let path = self.absoluteString
848
949
  return (path, UInt(path.lengthOfBytes(using: .utf8)))
@@ -55,7 +55,7 @@ protocol ZcashRustBackendWelding {
55
55
  /// - parameter tx: the transaction to decrypt
56
56
  /// - parameter minedHeight: height on which this transaction was mined. this is used to fetch the consensus branch ID.
57
57
  /// - Throws: `rustDecryptAndStoreTransaction`.
58
- func decryptAndStoreTransaction(txBytes: [UInt8], minedHeight: Int32) async throws
58
+ func decryptAndStoreTransaction(txBytes: [UInt8], minedHeight: UInt32?) async throws
59
59
 
60
60
  /// Returns the most-recently-generated unified payment address for the specified account.
61
61
  /// - parameter account: index of the given account
@@ -289,4 +289,21 @@ protocol ZcashRustBackendWelding {
289
289
  /// format `{height}-{hash}-block`. This directory has must be granted both write and read permissions.
290
290
  /// - Returns `BlockHeight` of the latest cached block or `.empty` if no blocks are stored.
291
291
  func latestCachedBlockHeight() async throws -> BlockHeight
292
+
293
+ /// Returns an array of [`TransactionDataRequest`] values that describe information needed by
294
+ /// the wallet to complete its view of transaction history.
295
+ ///
296
+ /// Requests for the same transaction data may be returned repeatedly by successive data
297
+ /// requests. The caller of this method should consider the latest set of requests returned
298
+ /// by this method to be authoritative and to subsume that returned by previous calls.
299
+ func transactionDataRequests() async throws -> [TransactionDataRequest]
300
+
301
+ /// Updates the wallet backend with respect to the status of a specific transaction, from the
302
+ /// perspective of the main chain.
303
+ ///
304
+ /// Fully transparent transactions, and transactions that do not contain either shielded inputs
305
+ /// or shielded outputs belonging to the wallet, may not be discovered by the process of chain
306
+ /// scanning; as a consequence, the wallet must actively query to determine whether such
307
+ /// transactions have been mined.
308
+ func setTransactionStatus(txId: Data, status: TransactionStatus) async throws
292
309
  }
@@ -194,6 +194,10 @@ extension ClosureSDKSynchronizer: ClosureSynchronizer {
194
194
  }
195
195
  }
196
196
 
197
+ public func refreshExchangeRateUSD() {
198
+ synchronizer.refreshExchangeRateUSD()
199
+ }
200
+
197
201
  /*
198
202
  It can be missleading that these two methods are returning Publisher even this protocol is closure based. Reason is that Synchronizer doesn't
199
203
  provide different implementations for these two methods. So Combine it is even here.
@@ -80,7 +80,7 @@ extension CombineSDKSynchronizer: CombineSynchronizer {
80
80
  }
81
81
  }
82
82
 
83
- public func proposefulfillingPaymentURI(
83
+ public func proposefulfillingPaymentURI(
84
84
  _ uri: String,
85
85
  accountIndex: Int
86
86
  ) -> SinglePublisher<Proposal, Error> {
@@ -196,6 +196,10 @@ extension CombineSDKSynchronizer: CombineSynchronizer {
196
196
  }
197
197
  }
198
198
 
199
+ public func refreshExchangeRateUSD() {
200
+ synchronizer.refreshExchangeRateUSD()
201
+ }
202
+
199
203
  public func rewind(_ policy: RewindPolicy) -> CompletablePublisher<Error> { synchronizer.rewind(policy) }
200
204
  public func wipe() -> CompletablePublisher<Error> { synchronizer.wipe() }
201
205
  }