react-native-zcash 0.4.2 → 0.6.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 (157) hide show
  1. package/CHANGELOG.md +24 -0
  2. package/README.md +6 -3
  3. package/android/build.gradle +5 -4
  4. package/android/src/main/assets/co.electriccoin.zcash/checkpoint/mainnet/2230000.json +8 -0
  5. package/android/src/main/assets/co.electriccoin.zcash/checkpoint/mainnet/2240000.json +8 -0
  6. package/android/src/main/assets/co.electriccoin.zcash/checkpoint/mainnet/2250000.json +8 -0
  7. package/android/src/main/java/app/edge/rnzcash/RNZcashModule.kt +117 -122
  8. package/ios/RNZcash.m +1 -12
  9. package/ios/RNZcash.swift +127 -153
  10. package/ios/ZCashLightClientKit/Block/Actions/Action.swift +98 -0
  11. package/ios/ZCashLightClientKit/Block/Actions/ClearAlreadyScannedBlocksAction.swift +35 -0
  12. package/ios/ZCashLightClientKit/Block/Actions/ClearCacheAction.swift +30 -0
  13. package/ios/ZCashLightClientKit/Block/Actions/DownloadAction.swift +67 -0
  14. package/ios/ZCashLightClientKit/Block/Actions/EnhanceAction.swift +97 -0
  15. package/ios/ZCashLightClientKit/Block/Actions/FetchUTXOsAction.swift +33 -0
  16. package/ios/ZCashLightClientKit/Block/Actions/MigrateLegacyCacheDBAction.swift +70 -0
  17. package/ios/ZCashLightClientKit/Block/Actions/ProcessSuggestedScanRangesAction.swift +59 -0
  18. package/ios/ZCashLightClientKit/Block/Actions/RewindAction.swift +48 -0
  19. package/ios/ZCashLightClientKit/Block/Actions/SaplingParamsAction.swift +33 -0
  20. package/ios/ZCashLightClientKit/Block/Actions/ScanAction.swift +95 -0
  21. package/ios/ZCashLightClientKit/Block/Actions/UpdateChainTipAction.swift +55 -0
  22. package/ios/ZCashLightClientKit/Block/Actions/UpdateSubtreeRootsAction.swift +58 -0
  23. package/ios/ZCashLightClientKit/Block/Actions/ValidateServerAction.swift +60 -0
  24. package/ios/ZCashLightClientKit/Block/CompactBlockProcessor.swift +421 -937
  25. package/ios/ZCashLightClientKit/Block/Download/BlockDownloader.swift +31 -17
  26. package/ios/ZCashLightClientKit/Block/Download/BlockDownloaderService.swift +2 -2
  27. package/ios/ZCashLightClientKit/Block/Enhance/BlockEnhancer.swift +46 -15
  28. package/ios/ZCashLightClientKit/Block/FetchUnspentTxOutputs/UTXOFetcher.swift +4 -15
  29. package/ios/ZCashLightClientKit/Block/FilesystemStorage/FSCompactBlockRepository.swift +4 -4
  30. package/ios/ZCashLightClientKit/Block/Scan/BlockScanner.swift +10 -35
  31. package/ios/ZCashLightClientKit/Block/Utils/CompactBlockProgress.swift +24 -0
  32. package/ios/ZCashLightClientKit/Block/Utils/SyncControlData.swift +25 -0
  33. package/ios/ZCashLightClientKit/ClosureSynchronizer.swift +1 -2
  34. package/ios/ZCashLightClientKit/CombineSynchronizer.swift +2 -5
  35. package/ios/ZCashLightClientKit/Constants/ZcashSDK.swift +7 -25
  36. package/ios/ZCashLightClientKit/DAO/TransactionDao.swift +40 -42
  37. package/ios/ZCashLightClientKit/DAO/UnspentTransactionOutputDao.swift +13 -4
  38. package/ios/ZCashLightClientKit/Entity/AccountEntity.swift +9 -0
  39. package/ios/ZCashLightClientKit/Entity/TransactionEntity.swift +7 -10
  40. package/ios/ZCashLightClientKit/Error/Sourcery/generateErrorCode.sh +1 -1
  41. package/ios/ZCashLightClientKit/Error/ZcashError.swift +121 -12
  42. package/ios/ZCashLightClientKit/Error/ZcashErrorCode.swift +43 -5
  43. package/ios/ZCashLightClientKit/Error/ZcashErrorCodeDefinition.swift +72 -6
  44. package/ios/ZCashLightClientKit/Extensions/Bool+ToData.swift +15 -0
  45. package/ios/ZCashLightClientKit/Extensions/Data+ToOtherTypes.swift +18 -0
  46. package/ios/ZCashLightClientKit/Extensions/Int+ToData.swift +15 -0
  47. package/ios/ZCashLightClientKit/Initializer.swift +47 -26
  48. package/ios/ZCashLightClientKit/Metrics/SDKMetrics.swift +0 -12
  49. package/ios/ZCashLightClientKit/Model/Checkpoint.swift +12 -0
  50. package/ios/ZCashLightClientKit/Model/ScanProgress.swift +29 -0
  51. package/ios/ZCashLightClientKit/Model/ScanRange.swift +31 -0
  52. package/ios/ZCashLightClientKit/Modules/Service/GRPC/LightWalletGRPCService.swift +15 -0
  53. package/ios/ZCashLightClientKit/Modules/Service/GRPC/ProtoBuf/compact_formats.pb.swift +150 -46
  54. package/ios/ZCashLightClientKit/Modules/Service/GRPC/ProtoBuf/proto/compact_formats.proto +30 -16
  55. package/ios/ZCashLightClientKit/Modules/Service/GRPC/ProtoBuf/proto/service.proto +32 -6
  56. package/ios/ZCashLightClientKit/Modules/Service/GRPC/ProtoBuf/service.grpc.swift +259 -22
  57. package/ios/ZCashLightClientKit/Modules/Service/GRPC/ProtoBuf/service.pb.swift +193 -7
  58. package/ios/ZCashLightClientKit/Modules/Service/LightWalletService.swift +8 -0
  59. package/ios/ZCashLightClientKit/Providers/LatestBlocksDataProvider.swift +18 -28
  60. package/ios/ZCashLightClientKit/Repository/CompactBlockRepository.swift +1 -1
  61. package/ios/ZCashLightClientKit/Repository/TransactionRepository.swift +2 -6
  62. package/ios/ZCashLightClientKit/Resources/checkpoints/mainnet/2092500.json +8 -0
  63. package/ios/ZCashLightClientKit/Resources/checkpoints/mainnet/2095000.json +8 -0
  64. package/ios/ZCashLightClientKit/Resources/checkpoints/mainnet/2097500.json +8 -0
  65. package/ios/ZCashLightClientKit/Resources/checkpoints/mainnet/2102500.json +8 -0
  66. package/ios/ZCashLightClientKit/Resources/checkpoints/mainnet/2105000.json +8 -0
  67. package/ios/ZCashLightClientKit/Resources/checkpoints/mainnet/2107500.json +8 -0
  68. package/ios/ZCashLightClientKit/Resources/checkpoints/mainnet/2112500.json +8 -0
  69. package/ios/ZCashLightClientKit/Resources/checkpoints/mainnet/2115000.json +8 -0
  70. package/ios/ZCashLightClientKit/Resources/checkpoints/mainnet/2117500.json +8 -0
  71. package/ios/ZCashLightClientKit/Resources/checkpoints/mainnet/2122500.json +8 -0
  72. package/ios/ZCashLightClientKit/Resources/checkpoints/mainnet/2125000.json +8 -0
  73. package/ios/ZCashLightClientKit/Resources/checkpoints/mainnet/2127500.json +8 -0
  74. package/ios/ZCashLightClientKit/Resources/checkpoints/mainnet/2132500.json +8 -0
  75. package/ios/ZCashLightClientKit/Resources/checkpoints/mainnet/2135000.json +8 -0
  76. package/ios/ZCashLightClientKit/Resources/checkpoints/mainnet/2137500.json +8 -0
  77. package/ios/ZCashLightClientKit/Resources/checkpoints/mainnet/2142500.json +8 -0
  78. package/ios/ZCashLightClientKit/Resources/checkpoints/mainnet/2145000.json +8 -0
  79. package/ios/ZCashLightClientKit/Resources/checkpoints/mainnet/2147500.json +8 -0
  80. package/ios/ZCashLightClientKit/Resources/checkpoints/mainnet/2152500.json +8 -0
  81. package/ios/ZCashLightClientKit/Resources/checkpoints/mainnet/2155000.json +8 -0
  82. package/ios/ZCashLightClientKit/Resources/checkpoints/mainnet/2157500.json +8 -0
  83. package/ios/ZCashLightClientKit/Resources/checkpoints/mainnet/2162500.json +8 -0
  84. package/ios/ZCashLightClientKit/Resources/checkpoints/mainnet/2165000.json +8 -0
  85. package/ios/ZCashLightClientKit/Resources/checkpoints/mainnet/2167500.json +8 -0
  86. package/ios/ZCashLightClientKit/Resources/checkpoints/mainnet/2172500.json +8 -0
  87. package/ios/ZCashLightClientKit/Resources/checkpoints/mainnet/2175000.json +8 -0
  88. package/ios/ZCashLightClientKit/Resources/checkpoints/mainnet/2177500.json +8 -0
  89. package/ios/ZCashLightClientKit/Resources/checkpoints/mainnet/2182500.json +8 -0
  90. package/ios/ZCashLightClientKit/Resources/checkpoints/mainnet/2185000.json +8 -0
  91. package/ios/ZCashLightClientKit/Resources/checkpoints/mainnet/2187500.json +8 -0
  92. package/ios/ZCashLightClientKit/Resources/checkpoints/mainnet/2192500.json +8 -0
  93. package/ios/ZCashLightClientKit/Resources/checkpoints/mainnet/2195000.json +8 -0
  94. package/ios/ZCashLightClientKit/Resources/checkpoints/mainnet/2197500.json +8 -0
  95. package/ios/ZCashLightClientKit/Resources/checkpoints/mainnet/2202500.json +8 -0
  96. package/ios/ZCashLightClientKit/Resources/checkpoints/mainnet/2205000.json +8 -0
  97. package/ios/ZCashLightClientKit/Resources/checkpoints/mainnet/2207500.json +8 -0
  98. package/ios/ZCashLightClientKit/Resources/checkpoints/mainnet/2212500.json +8 -0
  99. package/ios/ZCashLightClientKit/Resources/checkpoints/mainnet/2215000.json +8 -0
  100. package/ios/ZCashLightClientKit/Resources/checkpoints/mainnet/2217500.json +8 -0
  101. package/ios/ZCashLightClientKit/Resources/checkpoints/mainnet/2222500.json +8 -0
  102. package/ios/ZCashLightClientKit/Resources/checkpoints/mainnet/2225000.json +8 -0
  103. package/ios/ZCashLightClientKit/Resources/checkpoints/mainnet/2227500.json +8 -0
  104. package/ios/ZCashLightClientKit/Resources/checkpoints/mainnet/2230000.json +8 -0
  105. package/ios/ZCashLightClientKit/Resources/checkpoints/mainnet/2232500.json +8 -0
  106. package/ios/ZCashLightClientKit/Resources/checkpoints/mainnet/2235000.json +8 -0
  107. package/ios/ZCashLightClientKit/Resources/checkpoints/mainnet/2237500.json +8 -0
  108. package/ios/ZCashLightClientKit/Resources/checkpoints/mainnet/2240000.json +8 -0
  109. package/ios/ZCashLightClientKit/Resources/checkpoints/mainnet/2242500.json +8 -0
  110. package/ios/ZCashLightClientKit/Resources/checkpoints/mainnet/2245000.json +8 -0
  111. package/ios/ZCashLightClientKit/Resources/checkpoints/mainnet/2247500.json +8 -0
  112. package/ios/ZCashLightClientKit/Resources/checkpoints/mainnet/2250000.json +8 -0
  113. package/ios/ZCashLightClientKit/Resources/checkpoints/testnet/2350000.json +8 -0
  114. package/ios/ZCashLightClientKit/Resources/checkpoints/testnet/2360000.json +8 -0
  115. package/ios/ZCashLightClientKit/Resources/checkpoints/testnet/2370000.json +8 -0
  116. package/ios/ZCashLightClientKit/Resources/checkpoints/testnet/2380000.json +8 -0
  117. package/ios/ZCashLightClientKit/Resources/checkpoints/testnet/2390000.json +8 -0
  118. package/ios/ZCashLightClientKit/Resources/checkpoints/testnet/2400000.json +8 -0
  119. package/ios/ZCashLightClientKit/Resources/checkpoints/testnet/2410000.json +8 -0
  120. package/ios/ZCashLightClientKit/Resources/checkpoints/testnet/2420000.json +8 -0
  121. package/ios/ZCashLightClientKit/Resources/checkpoints/testnet/2430000.json +8 -0
  122. package/ios/ZCashLightClientKit/Resources/checkpoints/testnet/2440000.json +8 -0
  123. package/ios/ZCashLightClientKit/Resources/checkpoints/testnet/2450000.json +8 -0
  124. package/ios/ZCashLightClientKit/Resources/checkpoints/testnet/2460000.json +8 -0
  125. package/ios/ZCashLightClientKit/Resources/checkpoints/testnet/2470000.json +8 -0
  126. package/ios/ZCashLightClientKit/Resources/checkpoints/testnet/2480000.json +8 -0
  127. package/ios/ZCashLightClientKit/Resources/checkpoints/testnet/2490000.json +8 -0
  128. package/ios/ZCashLightClientKit/Resources/checkpoints/testnet/2500000.json +8 -0
  129. package/ios/ZCashLightClientKit/Resources/checkpoints/testnet/2510000.json +8 -0
  130. package/ios/ZCashLightClientKit/Resources/checkpoints/testnet/2520000.json +8 -0
  131. package/ios/ZCashLightClientKit/Resources/checkpoints/testnet/2530000.json +8 -0
  132. package/ios/ZCashLightClientKit/Rust/ZcashRustBackend.swift +293 -158
  133. package/ios/ZCashLightClientKit/Rust/ZcashRustBackendWelding.swift +58 -64
  134. package/ios/ZCashLightClientKit/Rust/zcashlc.h +618 -512
  135. package/ios/ZCashLightClientKit/Synchronizer/ClosureSDKSynchronizer.swift +2 -8
  136. package/ios/ZCashLightClientKit/Synchronizer/CombineSDKSynchronizer.swift +3 -15
  137. package/ios/ZCashLightClientKit/Synchronizer/Dependencies.swift +11 -30
  138. package/ios/ZCashLightClientKit/Synchronizer/SDKSynchronizer.swift +41 -50
  139. package/ios/ZCashLightClientKit/Synchronizer.swift +51 -65
  140. package/ios/ZCashLightClientKit/Transaction/TransactionEncoder.swift +2 -2
  141. package/ios/ZCashLightClientKit/Transaction/WalletTransactionEncoder.swift +7 -7
  142. package/ios/ZCashLightClientKit/Utils/OSLogger.swift +3 -3
  143. package/ios/ZCashLightClientKit/Utils/ZcashFileManager.swift +16 -0
  144. package/ios/libzcashlc.xcframework/Info.plist +9 -5
  145. package/ios/libzcashlc.xcframework/ios-arm64/libzcashlc.a +0 -0
  146. package/ios/libzcashlc.xcframework/ios-arm64_x86_64-simulator/libzcashlc.a +0 -0
  147. package/lib/rnzcash.rn.js +8 -30
  148. package/lib/rnzcash.rn.js.map +1 -1
  149. package/lib/src/react-native.d.ts +3 -5
  150. package/lib/src/types.d.ts +19 -14
  151. package/package.json +1 -1
  152. package/src/react-native.ts +13 -21
  153. package/src/types.ts +26 -23
  154. package/ios/ZCashLightClientKit/Block/Utils/InternalSyncProgress.swift +0 -200
  155. package/ios/ZCashLightClientKit/Block/Validate/BlockValidator.swift +0 -51
  156. package/ios/ZCashLightClientKit/DAO/BlockDao.swift +0 -112
  157. package/ios/ZCashLightClientKit/Entity/BlockProgress.swift +0 -24
@@ -24,6 +24,46 @@ fileprivate struct _GeneratedWithProtocGenSwiftVersion: SwiftProtobuf.ProtobufAP
24
24
  typealias Version = _2
25
25
  }
26
26
 
27
+ enum ShieldedProtocol: SwiftProtobuf.Enum {
28
+ typealias RawValue = Int
29
+ case sapling // = 0
30
+ case orchard // = 1
31
+ case UNRECOGNIZED(Int)
32
+
33
+ init() {
34
+ self = .sapling
35
+ }
36
+
37
+ init?(rawValue: Int) {
38
+ switch rawValue {
39
+ case 0: self = .sapling
40
+ case 1: self = .orchard
41
+ default: self = .UNRECOGNIZED(rawValue)
42
+ }
43
+ }
44
+
45
+ var rawValue: Int {
46
+ switch self {
47
+ case .sapling: return 0
48
+ case .orchard: return 1
49
+ case .UNRECOGNIZED(let i): return i
50
+ }
51
+ }
52
+
53
+ }
54
+
55
+ #if swift(>=4.2)
56
+
57
+ extension ShieldedProtocol: CaseIterable {
58
+ // The compiler won't synthesize support with the UNRECOGNIZED case.
59
+ static var allCases: [ShieldedProtocol] = [
60
+ .sapling,
61
+ .orchard,
62
+ ]
63
+ }
64
+
65
+ #endif // swift(>=4.2)
66
+
27
67
  /// A BlockID message contains identifiers to select a block: a height or a
28
68
  /// hash. Specification by hash is not implemented, but may be in the future.
29
69
  struct BlockID {
@@ -104,7 +144,7 @@ struct TxFilter {
104
144
  fileprivate var _block: BlockID? = nil
105
145
  }
106
146
 
107
- /// RawTransaction contains the complete transaction data. It also optionally includes
147
+ /// RawTransaction contains the complete transaction data. It also optionally includes
108
148
  /// the block height in which the transaction was included, or, when returned
109
149
  /// by GetMempoolStream(), the latest block height.
110
150
  struct RawTransaction {
@@ -326,6 +366,7 @@ struct TreeState {
326
366
  /// "main" or "test"
327
367
  var network: String = String()
328
368
 
369
+ /// block height
329
370
  var height: UInt64 = 0
330
371
 
331
372
  /// block id
@@ -335,7 +376,48 @@ struct TreeState {
335
376
  var time: UInt32 = 0
336
377
 
337
378
  /// sapling commitment tree state
338
- var tree: String = String()
379
+ var saplingTree: String = String()
380
+
381
+ /// orchard commitment tree state
382
+ var orchardTree: String = String()
383
+
384
+ var unknownFields = SwiftProtobuf.UnknownStorage()
385
+
386
+ init() {}
387
+ }
388
+
389
+ struct GetSubtreeRootsArg {
390
+ // SwiftProtobuf.Message conformance is added in an extension below. See the
391
+ // `Message` and `Message+*Additions` files in the SwiftProtobuf library for
392
+ // methods supported on all messages.
393
+
394
+ /// Index identifying where to start returning subtree roots
395
+ var startIndex: UInt32 = 0
396
+
397
+ /// Shielded protocol to return subtree roots for
398
+ var shieldedProtocol: ShieldedProtocol = .sapling
399
+
400
+ /// Maximum number of entries to return, or 0 for all entries.
401
+ var maxEntries: UInt32 = 0
402
+
403
+ var unknownFields = SwiftProtobuf.UnknownStorage()
404
+
405
+ init() {}
406
+ }
407
+
408
+ struct SubtreeRoot {
409
+ // SwiftProtobuf.Message conformance is added in an extension below. See the
410
+ // `Message` and `Message+*Additions` files in the SwiftProtobuf library for
411
+ // methods supported on all messages.
412
+
413
+ /// The 32-byte Merkle root of the subtree.
414
+ var rootHash: Data = Data()
415
+
416
+ /// The hash of the block that completed this subtree.
417
+ var completingBlockHash: Data = Data()
418
+
419
+ /// The height of the block that completed this subtree in the main chain.
420
+ var completingBlockHeight: UInt64 = 0
339
421
 
340
422
  var unknownFields = SwiftProtobuf.UnknownStorage()
341
423
 
@@ -396,6 +478,7 @@ struct GetAddressUtxosReplyList {
396
478
  }
397
479
 
398
480
  #if swift(>=5.5) && canImport(_Concurrency)
481
+ extension ShieldedProtocol: @unchecked Sendable {}
399
482
  extension BlockID: @unchecked Sendable {}
400
483
  extension BlockRange: @unchecked Sendable {}
401
484
  extension TxFilter: @unchecked Sendable {}
@@ -412,6 +495,8 @@ extension AddressList: @unchecked Sendable {}
412
495
  extension Balance: @unchecked Sendable {}
413
496
  extension Exclude: @unchecked Sendable {}
414
497
  extension TreeState: @unchecked Sendable {}
498
+ extension GetSubtreeRootsArg: @unchecked Sendable {}
499
+ extension SubtreeRoot: @unchecked Sendable {}
415
500
  extension GetAddressUtxosArg: @unchecked Sendable {}
416
501
  extension GetAddressUtxosReply: @unchecked Sendable {}
417
502
  extension GetAddressUtxosReplyList: @unchecked Sendable {}
@@ -421,6 +506,13 @@ extension GetAddressUtxosReplyList: @unchecked Sendable {}
421
506
 
422
507
  fileprivate let _protobuf_package = "cash.z.wallet.sdk.rpc"
423
508
 
509
+ extension ShieldedProtocol: SwiftProtobuf._ProtoNameProviding {
510
+ static let _protobuf_nameMap: SwiftProtobuf._NameMap = [
511
+ 0: .same(proto: "sapling"),
512
+ 1: .same(proto: "orchard"),
513
+ ]
514
+ }
515
+
424
516
  extension BlockID: SwiftProtobuf.Message, SwiftProtobuf._MessageImplementationBase, SwiftProtobuf._ProtoNameProviding {
425
517
  static let protoMessageName: String = _protobuf_package + ".BlockID"
426
518
  static let _protobuf_nameMap: SwiftProtobuf._NameMap = [
@@ -1020,7 +1112,8 @@ extension TreeState: SwiftProtobuf.Message, SwiftProtobuf._MessageImplementation
1020
1112
  2: .same(proto: "height"),
1021
1113
  3: .same(proto: "hash"),
1022
1114
  4: .same(proto: "time"),
1023
- 5: .same(proto: "tree"),
1115
+ 5: .same(proto: "saplingTree"),
1116
+ 6: .same(proto: "orchardTree"),
1024
1117
  ]
1025
1118
 
1026
1119
  mutating func decodeMessage<D: SwiftProtobuf.Decoder>(decoder: inout D) throws {
@@ -1033,7 +1126,8 @@ extension TreeState: SwiftProtobuf.Message, SwiftProtobuf._MessageImplementation
1033
1126
  case 2: try { try decoder.decodeSingularUInt64Field(value: &self.height) }()
1034
1127
  case 3: try { try decoder.decodeSingularStringField(value: &self.hash) }()
1035
1128
  case 4: try { try decoder.decodeSingularUInt32Field(value: &self.time) }()
1036
- case 5: try { try decoder.decodeSingularStringField(value: &self.tree) }()
1129
+ case 5: try { try decoder.decodeSingularStringField(value: &self.saplingTree) }()
1130
+ case 6: try { try decoder.decodeSingularStringField(value: &self.orchardTree) }()
1037
1131
  default: break
1038
1132
  }
1039
1133
  }
@@ -1052,8 +1146,11 @@ extension TreeState: SwiftProtobuf.Message, SwiftProtobuf._MessageImplementation
1052
1146
  if self.time != 0 {
1053
1147
  try visitor.visitSingularUInt32Field(value: self.time, fieldNumber: 4)
1054
1148
  }
1055
- if !self.tree.isEmpty {
1056
- try visitor.visitSingularStringField(value: self.tree, fieldNumber: 5)
1149
+ if !self.saplingTree.isEmpty {
1150
+ try visitor.visitSingularStringField(value: self.saplingTree, fieldNumber: 5)
1151
+ }
1152
+ if !self.orchardTree.isEmpty {
1153
+ try visitor.visitSingularStringField(value: self.orchardTree, fieldNumber: 6)
1057
1154
  }
1058
1155
  try unknownFields.traverse(visitor: &visitor)
1059
1156
  }
@@ -1063,7 +1160,96 @@ extension TreeState: SwiftProtobuf.Message, SwiftProtobuf._MessageImplementation
1063
1160
  if lhs.height != rhs.height {return false}
1064
1161
  if lhs.hash != rhs.hash {return false}
1065
1162
  if lhs.time != rhs.time {return false}
1066
- if lhs.tree != rhs.tree {return false}
1163
+ if lhs.saplingTree != rhs.saplingTree {return false}
1164
+ if lhs.orchardTree != rhs.orchardTree {return false}
1165
+ if lhs.unknownFields != rhs.unknownFields {return false}
1166
+ return true
1167
+ }
1168
+ }
1169
+
1170
+ extension GetSubtreeRootsArg: SwiftProtobuf.Message, SwiftProtobuf._MessageImplementationBase, SwiftProtobuf._ProtoNameProviding {
1171
+ static let protoMessageName: String = _protobuf_package + ".GetSubtreeRootsArg"
1172
+ static let _protobuf_nameMap: SwiftProtobuf._NameMap = [
1173
+ 1: .same(proto: "startIndex"),
1174
+ 2: .same(proto: "shieldedProtocol"),
1175
+ 3: .same(proto: "maxEntries"),
1176
+ ]
1177
+
1178
+ mutating func decodeMessage<D: SwiftProtobuf.Decoder>(decoder: inout D) throws {
1179
+ while let fieldNumber = try decoder.nextFieldNumber() {
1180
+ // The use of inline closures is to circumvent an issue where the compiler
1181
+ // allocates stack space for every case branch when no optimizations are
1182
+ // enabled. https://github.com/apple/swift-protobuf/issues/1034
1183
+ switch fieldNumber {
1184
+ case 1: try { try decoder.decodeSingularUInt32Field(value: &self.startIndex) }()
1185
+ case 2: try { try decoder.decodeSingularEnumField(value: &self.shieldedProtocol) }()
1186
+ case 3: try { try decoder.decodeSingularUInt32Field(value: &self.maxEntries) }()
1187
+ default: break
1188
+ }
1189
+ }
1190
+ }
1191
+
1192
+ func traverse<V: SwiftProtobuf.Visitor>(visitor: inout V) throws {
1193
+ if self.startIndex != 0 {
1194
+ try visitor.visitSingularUInt32Field(value: self.startIndex, fieldNumber: 1)
1195
+ }
1196
+ if self.shieldedProtocol != .sapling {
1197
+ try visitor.visitSingularEnumField(value: self.shieldedProtocol, fieldNumber: 2)
1198
+ }
1199
+ if self.maxEntries != 0 {
1200
+ try visitor.visitSingularUInt32Field(value: self.maxEntries, fieldNumber: 3)
1201
+ }
1202
+ try unknownFields.traverse(visitor: &visitor)
1203
+ }
1204
+
1205
+ static func ==(lhs: GetSubtreeRootsArg, rhs: GetSubtreeRootsArg) -> Bool {
1206
+ if lhs.startIndex != rhs.startIndex {return false}
1207
+ if lhs.shieldedProtocol != rhs.shieldedProtocol {return false}
1208
+ if lhs.maxEntries != rhs.maxEntries {return false}
1209
+ if lhs.unknownFields != rhs.unknownFields {return false}
1210
+ return true
1211
+ }
1212
+ }
1213
+
1214
+ extension SubtreeRoot: SwiftProtobuf.Message, SwiftProtobuf._MessageImplementationBase, SwiftProtobuf._ProtoNameProviding {
1215
+ static let protoMessageName: String = _protobuf_package + ".SubtreeRoot"
1216
+ static let _protobuf_nameMap: SwiftProtobuf._NameMap = [
1217
+ 2: .same(proto: "rootHash"),
1218
+ 3: .same(proto: "completingBlockHash"),
1219
+ 4: .same(proto: "completingBlockHeight"),
1220
+ ]
1221
+
1222
+ mutating func decodeMessage<D: SwiftProtobuf.Decoder>(decoder: inout D) throws {
1223
+ while let fieldNumber = try decoder.nextFieldNumber() {
1224
+ // The use of inline closures is to circumvent an issue where the compiler
1225
+ // allocates stack space for every case branch when no optimizations are
1226
+ // enabled. https://github.com/apple/swift-protobuf/issues/1034
1227
+ switch fieldNumber {
1228
+ case 2: try { try decoder.decodeSingularBytesField(value: &self.rootHash) }()
1229
+ case 3: try { try decoder.decodeSingularBytesField(value: &self.completingBlockHash) }()
1230
+ case 4: try { try decoder.decodeSingularUInt64Field(value: &self.completingBlockHeight) }()
1231
+ default: break
1232
+ }
1233
+ }
1234
+ }
1235
+
1236
+ func traverse<V: SwiftProtobuf.Visitor>(visitor: inout V) throws {
1237
+ if !self.rootHash.isEmpty {
1238
+ try visitor.visitSingularBytesField(value: self.rootHash, fieldNumber: 2)
1239
+ }
1240
+ if !self.completingBlockHash.isEmpty {
1241
+ try visitor.visitSingularBytesField(value: self.completingBlockHash, fieldNumber: 3)
1242
+ }
1243
+ if self.completingBlockHeight != 0 {
1244
+ try visitor.visitSingularUInt64Field(value: self.completingBlockHeight, fieldNumber: 4)
1245
+ }
1246
+ try unknownFields.traverse(visitor: &visitor)
1247
+ }
1248
+
1249
+ static func ==(lhs: SubtreeRoot, rhs: SubtreeRoot) -> Bool {
1250
+ if lhs.rootHash != rhs.rootHash {return false}
1251
+ if lhs.completingBlockHash != rhs.completingBlockHash {return false}
1252
+ if lhs.completingBlockHeight != rhs.completingBlockHeight {return false}
1067
1253
  if lhs.unknownFields != rhs.unknownFields {return false}
1068
1254
  return true
1069
1255
  }
@@ -180,6 +180,7 @@ protocol LightWalletService: AnyObject {
180
180
  func fetchTransaction(txId: Data) async throws -> ZcashTransaction.Fetched
181
181
 
182
182
  /// - Throws: `serviceFetchUTXOsFailed` when GRPC call fails.
183
+ // sourcery: mockedName="fetchUTXOsSingle"
183
184
  func fetchUTXOs(for tAddress: String, height: BlockHeight) -> AsyncThrowingStream<UnspentTransactionOutputEntity, Error>
184
185
 
185
186
  /// - Throws: `serviceFetchUTXOsFailed` when GRPC call fails.
@@ -192,4 +193,11 @@ protocol LightWalletService: AnyObject {
192
193
  ) -> AsyncThrowingStream<ZcashCompactBlock, Error>
193
194
 
194
195
  func closeConnection()
196
+
197
+ /// Returns a stream of information about roots of subtrees of the Sapling and Orchard
198
+ /// note commitment trees.
199
+ ///
200
+ /// - Parameters:
201
+ /// - request: Request to send to GetSubtreeRoots.
202
+ func getSubtreeRoots(_ request: GetSubtreeRootsArg) -> AsyncThrowingStream<SubtreeRoot, Error>
195
203
  }
@@ -8,62 +8,52 @@
8
8
  import Foundation
9
9
 
10
10
  protocol LatestBlocksDataProvider {
11
- var latestScannedHeight: BlockHeight { get async }
12
- var latestScannedTime: TimeInterval { get async }
11
+ var fullyScannedHeight: BlockHeight { get async }
12
+ var maxScannedHeight: BlockHeight { get async }
13
13
  var latestBlockHeight: BlockHeight { get async }
14
14
  var walletBirthday: BlockHeight { get async }
15
15
 
16
16
  func updateScannedData() async
17
17
  func updateBlockData() async
18
18
  func updateWalletBirthday(_ walletBirthday: BlockHeight) async
19
- func updateLatestScannedHeight(_ latestScannedHeight: BlockHeight) async
20
- func updateLatestScannedTime(_ latestScannedTime: TimeInterval) async
19
+ func update(_ latestBlockHeight: BlockHeight) async
21
20
  }
22
21
 
23
22
  actor LatestBlocksDataProviderImpl: LatestBlocksDataProvider {
24
23
  let service: LightWalletService
25
- let transactionRepository: TransactionRepository
24
+ let rustBackend: ZcashRustBackendWelding
26
25
 
27
26
  // Valid values are stored here after Synchronizer's `prepare` is called.
28
- private(set) var latestScannedHeight: BlockHeight = .zero
29
- private(set) var latestScannedTime: TimeInterval = 0.0
27
+ private(set) var fullyScannedHeight: BlockHeight = .zero
28
+ private(set) var maxScannedHeight: BlockHeight = .zero
30
29
  // Valid value is stored here after block processor's `nextState` is called.
31
30
  private(set) var latestBlockHeight: BlockHeight = .zero
32
31
  // Valid values are stored here after Synchronizer's `prepare` is called.
33
32
  private(set) var walletBirthday: BlockHeight = .zero
34
33
 
35
- init(service: LightWalletService, transactionRepository: TransactionRepository) {
34
+ init(service: LightWalletService, rustBackend: ZcashRustBackendWelding) {
36
35
  self.service = service
37
- self.transactionRepository = transactionRepository
36
+ self.rustBackend = rustBackend
38
37
  }
39
38
 
40
- /// Call of this function is potentially dangerous and can result in `database lock` errors.
41
- /// Typical use is outside of a sync process. Example: Synchronizer's prepare function, call there is a safe one.
42
- /// The update of `latestScannedHeight` and `latestScannedTime` during the syncing is done via
43
- /// appropriate `updateX()` methods inside `BlockScanner` so `transactionRepository` is omitted.
44
39
  func updateScannedData() async {
45
- latestScannedHeight = (try? await transactionRepository.lastScannedHeight()) ?? walletBirthday
46
- if let time = try? await transactionRepository.blockForHeight(latestScannedHeight)?.time {
47
- latestScannedTime = TimeInterval(time)
48
- }
40
+ fullyScannedHeight = (try? await rustBackend.fullyScannedHeight()) ?? walletBirthday
41
+ maxScannedHeight = (try? await rustBackend.maxScannedHeight()) ?? walletBirthday
49
42
  }
50
-
43
+
51
44
  func updateBlockData() async {
52
- if let newLatestBlockHeight = try? await service.latestBlockHeight(),
53
- latestBlockHeight < newLatestBlockHeight {
54
- latestBlockHeight = newLatestBlockHeight
45
+ if let newLatestBlockHeight = try? await service.latestBlockHeight() {
46
+ await update(newLatestBlockHeight)
55
47
  }
56
48
  }
57
-
49
+
58
50
  func updateWalletBirthday(_ walletBirthday: BlockHeight) async {
59
51
  self.walletBirthday = walletBirthday
60
52
  }
61
53
 
62
- func updateLatestScannedHeight(_ latestScannedHeight: BlockHeight) async {
63
- self.latestScannedHeight = latestScannedHeight
64
- }
65
-
66
- func updateLatestScannedTime(_ latestScannedTime: TimeInterval) async {
67
- self.latestScannedTime = latestScannedTime
54
+ func update(_ newLatestBlockHeight: BlockHeight) async {
55
+ if latestBlockHeight < newLatestBlockHeight {
56
+ latestBlockHeight = newLatestBlockHeight
57
+ }
68
58
  }
69
59
  }
@@ -15,7 +15,7 @@ protocol CompactBlockRepository {
15
15
  /**
16
16
  Gets the height of the highest block that is currently stored.
17
17
  */
18
- func latestHeight() async -> BlockHeight
18
+ func latestHeight() async throws -> BlockHeight
19
19
 
20
20
  /**
21
21
  Write the given blocks to this store, which may be anything from an in-memory cache to a DB.
@@ -11,11 +11,7 @@ protocol TransactionRepository {
11
11
  func closeDBConnection()
12
12
  func countAll() async throws -> Int
13
13
  func countUnmined() async throws -> Int
14
- func blockForHeight(_ height: BlockHeight) async throws -> Block?
15
- func lastScannedHeight() async throws -> BlockHeight
16
- func lastScannedBlock() async throws -> Block?
17
14
  func isInitialized() async throws -> Bool
18
- func find(id: Int) async throws -> ZcashTransaction.Overview
19
15
  func find(rawID: Data) async throws -> ZcashTransaction.Overview
20
16
  func find(offset: Int, limit: Int, kind: TransactionKind) async throws -> [ZcashTransaction.Overview]
21
17
  func find(in range: CompactBlockRange, limit: Int, kind: TransactionKind) async throws -> [ZcashTransaction.Overview]
@@ -24,6 +20,6 @@ protocol TransactionRepository {
24
20
  func findReceived(offset: Int, limit: Int) async throws -> [ZcashTransaction.Overview]
25
21
  func findSent(offset: Int, limit: Int) async throws -> [ZcashTransaction.Overview]
26
22
  func findMemos(for transaction: ZcashTransaction.Overview) async throws -> [Memo]
27
- func getRecipients(for id: Int) async throws -> [TransactionRecipient]
28
- func getTransactionOutputs(for id: Int) async throws -> [ZcashTransaction.Output]
23
+ func getRecipients(for rawID: Data) async throws -> [TransactionRecipient]
24
+ func getTransactionOutputs(for rawID: Data) async throws -> [ZcashTransaction.Output]
29
25
  }
@@ -0,0 +1,8 @@
1
+ {
2
+ "network": "main",
3
+ "height": "2092500",
4
+ "hash": "00000000013365596b59163d9e8139a976ecadb10b6ce18eb575e49888832219",
5
+ "time": 1684576908,
6
+ "saplingTree": "018de6417a42c0566e8f84f0b94164e4c3b76d0dea5f1aa635baea2836326e371201c4123ec239dd34553c6921fc85777b4a7d70967aa39ed82b2566706126e6f21d1a0181809bf17ce60e950fd8c64d4c846b955eb86b2dff062c7cb146960c6f22ba230000000105ce5b0449420a9f9dc89441e67adc8b625cdd738cd6e728f8c47d447802e16601e1d763d718555b4c73a01170a66919d85999677e1c8ab94a6cbe6c51013c9f08011f38e1bf27941eb7c217a2e67b53c99c25031812b1cd7b1853bcb93bdc102f0f000112b043efd4e2d8f5b4bc3649904ed6ec348e2e59c11f75ef87baa81fa8f2034c016d31744589d45905df4c0dbcd9a42b5d3507c441c3566ec227c8a50f18b1c67101b69615574920069516c50990b13dd13f37f4a82952780471748f11bcf142972a01139af09000951960d1b56a1ea891670ae96a34c9d5982d63b27eee370918ac50015d21b93305a79bafdb1a5de7fbf4d19f9f9ac17768f8152d3829d5064235de2f01d6a45fd33282e4d396267459ed1c8aa83ff4f0466efb3a8f51186a9eabfddb380000000001e1c882101803f4307fef0296028169358d583e3c2f95e37973aa8078e3f5550a0000011619f99023a69bb647eab2d2aa1a73c3673c74bb033c3c4930eacda19e6fd93b0000000160272b134ca494b602137d89e528c751c06d3ef4a87a45f33af343c15060cc1e",
7
+ "orchardTree": "01ab04a02a24f169002b89dd71b757732be65a3891fac6ff495bc1acaa99446703001f000001148690d769f7291b8fdbc9da34726bf4d844f202006e61bf6636b12236f29300000172b67c0bb183ead5bf28926a5a2c93a3e44c4d57233a2b4ffa09f5d7335e67090144c57951cc117c85e4829ddcb21349fe059682634871761b4183bd938b8b94100000000000010eedfc218e6314fe4765605f9cc955955f95dd1a81801c22193b896957e9ae0d012c3c98fa8cb6ea586dba0e1a0afe57591db11866861b275af15bbc490b8d0c33000001e2abc59115521d82c5970567575a3f15c8758a69737fccce96275431616e4b0e0153b3c5ce9055df15e6f470f41481288a4ed05c20ff510d3b393d050d8f88151d01e3ac7e584c6aa734385de6a5b6d6226bf90e9820a5f2e24b92583b8c6d78b605000000012dcc4273c8a0ed2337ecf7879380a07e7d427c7f9d82e538002bd1442978402c01daf63debf5b40df902dae98dadc029f281474d190cddecef1b10653248a234150001e2bca6a8d987d668defba89dc082196a922634ed88e065c669e526bb8815ee1b000000000000"
8
+ }
@@ -0,0 +1,8 @@
1
+ {
2
+ "network": "main",
3
+ "height": "2095000",
4
+ "hash": "0000000001790ab3e6d6ec360d5af7dea78580112b4803252152c0d5b94acbf2",
5
+ "time": 1684765043,
6
+ "saplingTree": "01382a823615bd12ea7160a5e1f7118034910a22ec97a8b1035f3ed31632b6252c013cb01f13cff9faf8ec1bf896d208ae31c746ff994f286889b7b3fe32c61d40451a015aaa0e39dd8d72c96b00870ff4bf2afb67b1754343d9f8469d7bc5b6574cfa1700017d99b07759eb918419c4f8ce036e16e65eb6eed79710632fc7357dbfce28442e000000000001afb51ef7fed4c60043a1ae256bd4ab792290009f57236028a3d0dc13c5a3a35101f60b1d1dd034c1535ae5e2778f9175d2972a0ce2384ea500e5c1a8935ef974010000000001671883df514f0a1e5e600828c3993a7a9293459f51ff212ef1b91aa2de2e522c00000001e1c882101803f4307fef0296028169358d583e3c2f95e37973aa8078e3f5550a0000011619f99023a69bb647eab2d2aa1a73c3673c74bb033c3c4930eacda19e6fd93b0000000160272b134ca494b602137d89e528c751c06d3ef4a87a45f33af343c15060cc1e",
7
+ "orchardTree": "014a814c5044f0bf177be9747bb8c749c091af1291c5a1236a05df9ef673331928001f00013efb14f688a27c2a58863ac1e734f016a4a0aff8ca50de3b007de7cd68f8c20a000000012ff799fb99dcdce3eba46bd123033cdb4055a9bc37edc6736778b2d21bfa9e110001b5175034bd4ce3898a2d6c40762a7159ec00a5d6beec72c9ed62aa0526077b3a0105a52101664e143bdad8fb84e2d66920e562dfa871a4cba7c89ec2f58364cd2500000001b1f15c4ab464ffe3f30961c8daa217ef117d8d9cab5b09db206ba3f0b026b5110165e503629e8e90c3ec7c91f0f3b0b866a40f5fa49e2d2ddb9a40ce8bb44dba160194a4a11810b293285e43608071c6fe29911818e95d1e66949ed1fefd0ec8d73a0155e14d2fa26914e2693137fe146c1f4f9ed7dc06e9a6b4fc8598317163ead63c000001f7b6f7b9502c944ff59f4202125cac701c1e88819c34f31aaf2b6789b047ab040000012dcc4273c8a0ed2337ecf7879380a07e7d427c7f9d82e538002bd1442978402c01daf63debf5b40df902dae98dadc029f281474d190cddecef1b10653248a234150001e2bca6a8d987d668defba89dc082196a922634ed88e065c669e526bb8815ee1b000000000000"
8
+ }
@@ -0,0 +1,8 @@
1
+ {
2
+ "network": "main",
3
+ "height": "2097500",
4
+ "hash": "000000000017ac57ea5218729dda7061caba09f8d6c64cfffe2dc47b662fa5c6",
5
+ "time": 1684953946,
6
+ "saplingTree": "012bf7016722f54ae9ae73b270c6322b9ab52247d0077ca30237185d8fa6095e51016af91e0001a55ead6e0410902df7438ec6d5c0c8d00683be6769ea0dff07820b1a0000013fc5e29a1df8e874e6778f9f6542c357b4a0e97aeb63420fde306f035298cd3701f719b8fe7eaddc6ddfc1724219542a87c0b4e6e3d826e52dfacd01e412de895900015aa5fd97c5b342c331353266e3ed5ab1d798bce59475c9fe72f58c8327901d6401deae86ed8155870a9f4cc5a0a39fa5ddeafd583fbf02873fadb1d8a099b2d20e01e13eae00f6ccbec5f4d378ac33425afb3a4c3efc3dd1a865202142b9a77fd52500012053372ac9ef02ef20780f3d01f7b8cbe06d88dfc0257a7dc5cf0c34fedc173301fb513148bd8bcb28b43ced7a9e9b53f7e8f48209f19ce6f3d6b2985455538f3f00000001671883df514f0a1e5e600828c3993a7a9293459f51ff212ef1b91aa2de2e522c00000001e1c882101803f4307fef0296028169358d583e3c2f95e37973aa8078e3f5550a0000011619f99023a69bb647eab2d2aa1a73c3673c74bb033c3c4930eacda19e6fd93b0000000160272b134ca494b602137d89e528c751c06d3ef4a87a45f33af343c15060cc1e",
7
+ "orchardTree": "010b1a6110d1305f78cb6d39a97494e2206526aa7f0ff00cf5351564bb9c746718013cbf1147c48176f9bc512ea4039b3f710a57a16408d2f8cae33561bf855f61331f0001a7dff68773d80881410a9db9da4729b30733d2b05e6ed42adb4453bab024801e00000104402aa5f5e36a896e02cd065e888ca739fc8cf2291d89e72b626e26fd1f2a040001e1c594675cf57c94453ca1688d299f18bb024b79df56790471a36372e471ad1c01a30f0d2837ef3357d7293e01535b8b2bc147961f776a24cdb772697116aabb16000001f2ad9e8b21f24380b145e9c3a68bb33b96b117b12e5045711cf37b9a2bb13a0901417a39cbd0a9555358c505f60eb68c8a36689c370223114a920cdbcd02062b2c01c2e3d2cc60b094453841db281bafdbee7e98a4cff560da5c6b634372a6abbb1a01e318389f3d0de7a890873723a47dc51a9418e07aa3e0dc2f2cdc2db45107fd200001555dc6fad0823ff78bc428d108673c8a73d6ac135555eb4f42a0daefccb55e3701c7288c9d134fc74663f1a1243b12b4ed82edc7f18f096be59934284dc7f73b360001f7b6f7b9502c944ff59f4202125cac701c1e88819c34f31aaf2b6789b047ab040000012dcc4273c8a0ed2337ecf7879380a07e7d427c7f9d82e538002bd1442978402c01daf63debf5b40df902dae98dadc029f281474d190cddecef1b10653248a234150001e2bca6a8d987d668defba89dc082196a922634ed88e065c669e526bb8815ee1b000000000000"
8
+ }
@@ -0,0 +1,8 @@
1
+ {
2
+ "network": "main",
3
+ "height": "2102500",
4
+ "hash": "000000000037780d67c190236f36303d46940e2a5a9199ccdd7e320c8f54d5cf",
5
+ "time": 1685330652,
6
+ "saplingTree": "01f8da1ea3410b63406030ee23fcd1ae29146e1b99cc78494447d7455225988a06001a0000000001d68d1a2ba8181e03c5371c5f674a94a1c1984e09a38a4da95ad9f2678d23031b01780c0fc9824ed28ced1a786ae76abe582709e04e9433016d1dbbb3931b38f90500000001d909bf103e69fd4eb0d3f46465cef15ab0e2f12944bd3ff3b88c9ffbf627bb3301f097eb7eb50df851f083e528139db097d0c9b3b2d6476c099273318d58362c0b012014bb08a44ed8a24a22753e0c9eff193bbb571d0a9e2082e5f48b18a5970310000001671883df514f0a1e5e600828c3993a7a9293459f51ff212ef1b91aa2de2e522c00000001e1c882101803f4307fef0296028169358d583e3c2f95e37973aa8078e3f5550a0000011619f99023a69bb647eab2d2aa1a73c3673c74bb033c3c4930eacda19e6fd93b0000000160272b134ca494b602137d89e528c751c06d3ef4a87a45f33af343c15060cc1e",
7
+ "orchardTree": "0144dbeb886fbf9b20fa0027dd7d21e73d704b63cbd2bfd33a6380153d5ccd6131001f00016878d1acb3b25fe97a72dff9b0e02fea660be1fcd94e62bb67521334b2b64304000000000000000000016b20c1f1ac370a9a0b9147d02314aa486fa61f91876be7a882aaf79d513d8725015d4478a518c1de06b0123ef45033e5d8680213466ffc0a9520c9d32e3330d21d0001dbee0150fe57bf520f7a508ef17337e3f51bbb413253842d526659f6f74019350001538c2de27716de39a417675a57bb095ed1393fa8362f204fc7a7204e34c1aa0f0114c4410ffbf43d9d16dbb3c65c6c2d58792f6e659ec55b90773486dfba58751901f7b6f7b9502c944ff59f4202125cac701c1e88819c34f31aaf2b6789b047ab040000012dcc4273c8a0ed2337ecf7879380a07e7d427c7f9d82e538002bd1442978402c01daf63debf5b40df902dae98dadc029f281474d190cddecef1b10653248a234150001e2bca6a8d987d668defba89dc082196a922634ed88e065c669e526bb8815ee1b000000000000"
8
+ }
@@ -0,0 +1,8 @@
1
+ {
2
+ "network": "main",
3
+ "height": "2105000",
4
+ "hash": "00000000002d5f610c4c7c2180ff0b704a5889ab7229d4e436163608b992e3f0",
5
+ "time": 1685518702,
6
+ "saplingTree": "015bbf169788f64e8d3c0fb8a42d30691ee9b33c02fb0254c34850e0b3f5a5f014001a00000145cd9ac43f99e961a9444d38ea015ffaf2ae8785fdadc0ef3440de69a0d19a2c0001bc01e0871b3d7382f6a5b6e74c28ceda70d4878147f99f701198cc54df12d863013b4fd240117dad631779d3e21c60c661cf20db6d5eae717256a5ed8eb5dcaf6f0001c9046482709611c47c96d44276d3ab871069767803cef8faeadc9a21814808630139280fcd15da1d1831093279ea29aebcdba0a264b8a7daa1665dd4304d37eb3900000001d455e5db2d001e579431358ef90419bca0befef90695884b49010c7474dc1d4a0001671883df514f0a1e5e600828c3993a7a9293459f51ff212ef1b91aa2de2e522c00000001e1c882101803f4307fef0296028169358d583e3c2f95e37973aa8078e3f5550a0000011619f99023a69bb647eab2d2aa1a73c3673c74bb033c3c4930eacda19e6fd93b0000000160272b134ca494b602137d89e528c751c06d3ef4a87a45f33af343c15060cc1e",
7
+ "orchardTree": "01b60452b7fbcdcebe76bc331eb7c7d208da0f5169805fe23857e44abd0e72c73b001f000165abefc8261a869a76ff69f59ec3d22e4fac3dd8a843d59684e2db62dfc7be2800000175dfef4db4b081eccd55dd4b0005170ea8763a55db42182b0491f56e60cfec0d01dabda694b9e721da6be675b84226889e75d2e50bfdb4294c706516e50888ee2201c4f31db7eb33963324765e270daeca04a96bc145d63e42a618d801814a1f8c00000001d0d6e7d80cc09db286ff65314c302a989e5bb37e3cb3a024cdcdab14578a9b1c011a854e88782740aabcfabd54238e99084ecdfad73b4eb7f75285a9ab7a7e1f1c0000000000000000019742ec0f749b819491e155a797e8b1a6d2dd55bcc4597259dc6fb9895945a92800012dcc4273c8a0ed2337ecf7879380a07e7d427c7f9d82e538002bd1442978402c01daf63debf5b40df902dae98dadc029f281474d190cddecef1b10653248a234150001e2bca6a8d987d668defba89dc082196a922634ed88e065c669e526bb8815ee1b000000000000"
8
+ }
@@ -0,0 +1,8 @@
1
+ {
2
+ "network": "main",
3
+ "height": "2107500",
4
+ "hash": "00000000016485cbb8b9c2a079305a1d1177a27ca4342b6426d89da4702f3863",
5
+ "time": 1685707435,
6
+ "saplingTree": "010c4ed1c1b7acebae4207eb3a04fa2f0f51a33564ad66883b0859a45138aec55d001a00000000000122e3e759245b9903aabe5391e6fa6aebdfc09a26109458f1c745fb88f08a114301a85ee776e32c419d2cf13de80747ae779e53288d53ded9b09ed5ce924443ec49000184f348f03781f94d403346c864470d60f1522cc256cc1c8d8ec649c7d721551b00013117c853e3a9044701f575a18e64e73451b9eb13727a135bf10be38c2d4f6d5c0001d455e5db2d001e579431358ef90419bca0befef90695884b49010c7474dc1d4a0001671883df514f0a1e5e600828c3993a7a9293459f51ff212ef1b91aa2de2e522c00000001e1c882101803f4307fef0296028169358d583e3c2f95e37973aa8078e3f5550a0000011619f99023a69bb647eab2d2aa1a73c3673c74bb033c3c4930eacda19e6fd93b0000000160272b134ca494b602137d89e528c751c06d3ef4a87a45f33af343c15060cc1e",
7
+ "orchardTree": "019452281d4c701b90098399be6789c81fcb36cb2a5a50b3cd8628956dcb668816001f01297415fa026ea197f86573bf8655c5300aa66b5b2d35c0889532ee9f2f201d010160b277e469f92fb05fe43b279af296ec27f59f22b789ac8fe3befceb0ef22c2600000143adbeddcbb313050bb18830275ee035a38220f21567559434386ad0d862431401d23ae86badae3a11a60aadba21824e1e75bfdd62c7f46941e77f5873d3f08b2a000001652332d544568f2cb393e67e6adfdf91a4c51041a91c67d04dd7b3ca4d3a0a2c0137216a9a52f91d0cbdaa97b376590990694c8918ed7a1f1e32dd0d6c4fbe782b01b8fd58ffb2ecdf2c94b9dd5509803d82b714e4592075c97ada2011c85c5634070000011e80aeb28c4c3fbae528d503414a75cb51fd870f762acd966fa97030eeb7743b0001abe3e755e753fd92239afb91d16c880bd00833e1e046c9ac3ad1404c2b1ded05000000019742ec0f749b819491e155a797e8b1a6d2dd55bcc4597259dc6fb9895945a92800012dcc4273c8a0ed2337ecf7879380a07e7d427c7f9d82e538002bd1442978402c01daf63debf5b40df902dae98dadc029f281474d190cddecef1b10653248a234150001e2bca6a8d987d668defba89dc082196a922634ed88e065c669e526bb8815ee1b000000000000"
8
+ }
@@ -0,0 +1,8 @@
1
+ {
2
+ "network": "main",
3
+ "height": "2112500",
4
+ "hash": "0000000001ac14f02bc4e6bd3e9166fc387843af8c5bcebfa80579e99f3891a7",
5
+ "time": 1686084017,
6
+ "saplingTree": "01d4ebce8bfc212c607f27e7ab3dd94300750ca5362c156a3d362c0697c6b3384a001a000001b3fa0af92c525387e5227a592eae249820d44b92791e4f48bb14449d7f65026c0000017ef3c2cdf95708ca6f27b1c2db7b96aa95ed9eb7ed4052192a4807edcac27c2f00019dcdff8ea58f28dfe800c169fdd532955be9ad7c8b4c727124f1b8e89506702b019642a4ec42292d2af15fb48c7dc9b6318ecebdbd4e4abc8ade4eef471b98db580001a630af0f3f164e18f5df9b67903bc8d0ffc1b01c1382de5a0304abd842f6124c0000014bf52db79311d05f380dcb309e78893c78c381451e2305417e99720c712d3b0f011fc06915786889414c2a06eda88494e075a4a2921273af22f3036a6b9894955501e23000c83def6dfca2ce6bf9078ecb6c7c7f09d8362766bcb01b4ecb2795c72b000001e1c882101803f4307fef0296028169358d583e3c2f95e37973aa8078e3f5550a0000011619f99023a69bb647eab2d2aa1a73c3673c74bb033c3c4930eacda19e6fd93b0000000160272b134ca494b602137d89e528c751c06d3ef4a87a45f33af343c15060cc1e",
7
+ "orchardTree": "011874950e4c35684e76db0a3360b582bd0b918a280941cebdccc3f55d2ee8f61501fd655cf893d18bb545b145fd43d8d4083addf50fdf55b25338d5f77c4e410f1e1f0000013f6a2762d7b6388c3450dbe1d8b7765c6ec664b3dc2cf0b0921e2379b17dd518015df8745d3c1aaf7b508d3bb14793178f79b4e1b6e0ab80d25941d66eae926a2c01a0ade5db9f02611495065fc81e8a02eafd1795afaadf84f46696023064c24f0a01f83f676a7eea8ff36f5e8424fe738590ffe1f29ec56b125aef11dcc17172fc090194df7cfff5c8383cdceac707bdc634b90fe3c38567fb6d17794a629fe6edd63400000001233b46f97662f57e7ea38c6f592c3d95eba2fce512426327ee60d407822c5b36010b2f646b4ab0f80fee9637c1ffff43bf2c2db9bcff4b6e0830b5a0fabc2d44100001968dfc1563a37187ebeca4e1708d589fb865153e577d40591e864eabb96a6b2e0197196374d620373977dd77ccaaa9bd2f7e25a1faac1119027926ac98ccb7853200017d0ee43b80a4035e0fae12010d9df1447723eb6ddff0f331623c91f5f5d0d11d0000019742ec0f749b819491e155a797e8b1a6d2dd55bcc4597259dc6fb9895945a92800012dcc4273c8a0ed2337ecf7879380a07e7d427c7f9d82e538002bd1442978402c01daf63debf5b40df902dae98dadc029f281474d190cddecef1b10653248a234150001e2bca6a8d987d668defba89dc082196a922634ed88e065c669e526bb8815ee1b000000000000"
8
+ }
@@ -0,0 +1,8 @@
1
+ {
2
+ "network": "main",
3
+ "height": "2115000",
4
+ "hash": "00000000010901b8f8510a409c42e1e5bd4149e49c8965bb924c08f05efc24c5",
5
+ "time": 1686271925,
6
+ "saplingTree": "01e990f6d1dd7784ee5d0507bdc5e1bbc066d73794641e08f1a921bf600ffb381a001a01329252d5292962320de35b1d6b64d4c2880d0acd9c16c545472cb4de20b14a6401bc0bd29b3d0519acc8381a77a515537c805306e3d7ca1e90e582916b178bca1e0001ab6d7df60219bede3ec2be22a8630bac07c6f2ee9136a84ca568d83841beb13d0154acb388820320eb24664d6dcb10e459309716a4d229bcd5acf6895ba8c50765000001427da0cc1d10d6392298721917a04174240fc2f5c678630e0924958dc8f3d20f0001d0d0337addf6be5d880d017ffe316cc73cca66e685e07b6cc0d9f3d309fdac26019506b65733225c8f74e106cb2488883a71c9e9b94ca13f5e16f17e3b2621816d00010c407fdbdb92394790088dca485223cf67c171fe3723e9b329089fc51887070c000001ec7dad95a5f433e5beec92ba5233d6a7c3ee622801ad14fed5bf7fabe4e02e4101687cca347a242409839d0df7ba71d3bf6a76e33fa78a312cd222186767b754170001e1c882101803f4307fef0296028169358d583e3c2f95e37973aa8078e3f5550a0000011619f99023a69bb647eab2d2aa1a73c3673c74bb033c3c4930eacda19e6fd93b0000000160272b134ca494b602137d89e528c751c06d3ef4a87a45f33af343c15060cc1e",
7
+ "orchardTree": "01d3953babbe8d41d7311399696d4d79fafbf55982ac765d778c3d2c04d888f603001f01044d322357a9e78de18f21f936bd4019cb994e9df12fd64b9dc99ce0cefd4834000112c817526d499ea975aee119581c0b9133d289bcd9a5f06b00324401bfd2de3c000001b1ee423045f50669f8823fe02c4de4b2f7a7149ef646c0e2f98c2103eaa99631010010a989d1ddcf0cb61a2017a6a900fbdc25bc4fca7fbe9f2254c35994e24d17000001c30d649fefa3d94647380b3fc9a14ee7c766ec02005a9cd5d32c49df7c6dcf1101233b46f97662f57e7ea38c6f592c3d95eba2fce512426327ee60d407822c5b36010b2f646b4ab0f80fee9637c1ffff43bf2c2db9bcff4b6e0830b5a0fabc2d44100001968dfc1563a37187ebeca4e1708d589fb865153e577d40591e864eabb96a6b2e0197196374d620373977dd77ccaaa9bd2f7e25a1faac1119027926ac98ccb7853200017d0ee43b80a4035e0fae12010d9df1447723eb6ddff0f331623c91f5f5d0d11d0000019742ec0f749b819491e155a797e8b1a6d2dd55bcc4597259dc6fb9895945a92800012dcc4273c8a0ed2337ecf7879380a07e7d427c7f9d82e538002bd1442978402c01daf63debf5b40df902dae98dadc029f281474d190cddecef1b10653248a234150001e2bca6a8d987d668defba89dc082196a922634ed88e065c669e526bb8815ee1b000000000000"
8
+ }
@@ -0,0 +1,8 @@
1
+ {
2
+ "network": "main",
3
+ "height": "2117500",
4
+ "hash": "000000000023622799c2842e86f742f567abf21273e103f35192e6b17eb7699b",
5
+ "time": 1686460564,
6
+ "saplingTree": "01a76ee82d9d11e731e10b4f0d91be7e8186ed4439314d04675c858e60d45f0a03001a012c9a12e009a6bc74c7c9a142ff80b0abb7eec19e0957065268203f788221781a0180d199ebc42206b7fc76dac4483a89ecfb5e2da2cf7a060717c6c6e008a888100189bfca168408b7da8dcb5b5d2be4aa06781b76b32e269805eca4ee922565d10900000000000000010b0a92226997b3551cd494b9c33e5355e1af76b1b17623eaf91cf88f647dcd0000000001b47da8031c469ab46e6e4042e4a23070ada8fb5f3779cffc43899ea34a33f24c00000182a4610f3faf5df36204a716dc35903638fa29e4901b2a0dee63141e5b8a3a3901e1c882101803f4307fef0296028169358d583e3c2f95e37973aa8078e3f5550a0000011619f99023a69bb647eab2d2aa1a73c3673c74bb033c3c4930eacda19e6fd93b0000000160272b134ca494b602137d89e528c751c06d3ef4a87a45f33af343c15060cc1e",
7
+ "orchardTree": "0138f32583b8474206e46eab3687ba5a5b16dd29c34d40a8d3a53a418b79da931e0178005ef7a7e08eb51ecb935971fc33f27bdebe3cbba959f8c6d20c90131ce72f1f01ec8860a272ffde04266785a75bd0c8b575d29cac0e7fb76473e1d11c15fc792a0000000001b44ad9696a2bd83037f9b7c5e785c89df1b77fa6fe2c2d9188b9af3b1722a50e01c9ec13391f748c713a1fa582f831e5fb827e5c3ba97c02fe51c4746803bcdc150001a095ac85da18d7d954334a7eba708c89e1872806f21c3af0de37ace91ebe662c01c30d649fefa3d94647380b3fc9a14ee7c766ec02005a9cd5d32c49df7c6dcf1101233b46f97662f57e7ea38c6f592c3d95eba2fce512426327ee60d407822c5b36010b2f646b4ab0f80fee9637c1ffff43bf2c2db9bcff4b6e0830b5a0fabc2d44100001968dfc1563a37187ebeca4e1708d589fb865153e577d40591e864eabb96a6b2e0197196374d620373977dd77ccaaa9bd2f7e25a1faac1119027926ac98ccb7853200017d0ee43b80a4035e0fae12010d9df1447723eb6ddff0f331623c91f5f5d0d11d0000019742ec0f749b819491e155a797e8b1a6d2dd55bcc4597259dc6fb9895945a92800012dcc4273c8a0ed2337ecf7879380a07e7d427c7f9d82e538002bd1442978402c01daf63debf5b40df902dae98dadc029f281474d190cddecef1b10653248a234150001e2bca6a8d987d668defba89dc082196a922634ed88e065c669e526bb8815ee1b000000000000"
8
+ }
@@ -0,0 +1,8 @@
1
+ {
2
+ "network": "main",
3
+ "height": "2122500",
4
+ "hash": "00000000015a1b5b40b93fe0156a28472251441ce799be4158fd1501ba022590",
5
+ "time": 1686837828,
6
+ "saplingTree": "01e69f1705f3b97691431b9bd3b2ad772088102f85f82895a3731b859d5a70bd280106b00563d51726020a551c64b1ace35c22e290e2c4750d4ef057c9dc7e907c3b1a0150fcbcd8aeaa3af95f70c596172131a581e29008541fc8af47629f94ee04bd500001ee733837a8a1b8fc9176c2c965d0ecf1da6ec2a3ab5f15156fc9c1d0957cdc3e0132499cf1e98d418d661c7d9605a011077c530f52117e962800b78a845cf2803a0168275c54bec97724e4cfdee47fd0a9fa884d6e105830729166625627248cf1560000019ad07cb3481ceb21a7cae22136318463ed9b05aff9fc9fa78d5cfab866e859580001625ee3541f423a486a6e97aa54cff11468ddd4f91d02e5b0d73b49ab8ec2a5230151061a44ce224f3cf46b8aa3963cac990b5ce880d398c817da881f3f2d86db67010deb5fcd6495f70693500a5d39f13e7e34e76e55a77af1405b9d89d77500d53f010fece75e43458f4ceae82f5a978ab6e77f8cbf2b62bf2342b131d0288fea6b7001c959650d752b8114d25925e963ebd79fb9e20d91e9ee675d784166ac27ee853e014d43db89b40d38e8e9098e0e3192f038f78f951c082069fd04ba0cfd0ceef54e00014c67b779c5bffffa2e84a484ce23b13d9afe15f12c81e857ba224fb7143b3f680182a4610f3faf5df36204a716dc35903638fa29e4901b2a0dee63141e5b8a3a3901e1c882101803f4307fef0296028169358d583e3c2f95e37973aa8078e3f5550a0000011619f99023a69bb647eab2d2aa1a73c3673c74bb033c3c4930eacda19e6fd93b0000000160272b134ca494b602137d89e528c751c06d3ef4a87a45f33af343c15060cc1e",
7
+ "orchardTree": "01e8f589bbd3438edf4c0c6a4afeb50bc138261cece9ef4e67519e1a1e38e6711901a7280a5f07474d4837f1a7a5ba1f7967b1110c77dd0396790a4f53ff1ee4db0d1f00000000000148abb685fa99c0288c553d0d994d280a27af4786acb943575318588ce4afd43100015596d04401b55325d58de635795b5303385769482a480908698494b0cb7d1f290001771a2e6bb06489ea55846a67f9fd99be1bd64c56a1ab9799c3e3579721f476280158c3438fb8c5eb733f9e6e8b47ae903ec63eba804dd744f4944910732df95a180001e02e87752204444cdd297d5b901ce35e23b152a54c70de78f225a68186680b0c000001986f97a298c0dd0db22864d45b660149a4fa58a1ac68734578706eeb635ad711017d0ee43b80a4035e0fae12010d9df1447723eb6ddff0f331623c91f5f5d0d11d0000019742ec0f749b819491e155a797e8b1a6d2dd55bcc4597259dc6fb9895945a92800012dcc4273c8a0ed2337ecf7879380a07e7d427c7f9d82e538002bd1442978402c01daf63debf5b40df902dae98dadc029f281474d190cddecef1b10653248a234150001e2bca6a8d987d668defba89dc082196a922634ed88e065c669e526bb8815ee1b000000000000"
8
+ }
@@ -0,0 +1,8 @@
1
+ {
2
+ "network": "main",
3
+ "height": "2125000",
4
+ "hash": "00000000011e65ede21b592ca83d0042b24990e2376197a4ff586673e74c0601",
5
+ "time": 1687026056,
6
+ "saplingTree": "0196437c2d372f4c7a7f09ab740bcd28efd33425cc4c621e6c71f40bf3ce59c22e001a0000000177fa094155895c9eec4b60149cf6f740b38658f3c1adf98b39c557b836bd7c6c01190b095227c7aa699803731c6169d67ac2ffa3dbd49dd1147f46a1133f631f3c000001f3d5c5e289d719e396cc2905452781ccbd6b8f3dbcfbda285aa05115cccf505601441640f7b20b1f3a0c45a3b0ff3381b41b6f77c833c66aa96287bcc762e9cc6d0001e9ca040e7a0012be4f2666f0f85e486a931a54959debc617b4b073644fc8bf1d016264c64b36678a61a9c034eb51cffbb44aef89c26cca87681332102c751e0b5a000101000a982525f9cf120cdf93c82ad25901aa53314fea166d45e2c392d3015c1f00013e6c6698c4fafd383ebdc4da1c94783e24d16d52437c7e727e43eaf812c23a30014c67b779c5bffffa2e84a484ce23b13d9afe15f12c81e857ba224fb7143b3f680182a4610f3faf5df36204a716dc35903638fa29e4901b2a0dee63141e5b8a3a3901e1c882101803f4307fef0296028169358d583e3c2f95e37973aa8078e3f5550a0000011619f99023a69bb647eab2d2aa1a73c3673c74bb033c3c4930eacda19e6fd93b0000000160272b134ca494b602137d89e528c751c06d3ef4a87a45f33af343c15060cc1e",
7
+ "orchardTree": "01401ad749e8e7d8ad6d671af322b7ee9b809df826925b01a766557d1c2e667c15001f0001008a562f646a04aeaeaff912114d8fb3192ddfc1b98d71895f1f92de86cd3e3d00012be2060e450deb64cd70f84fbf26e1145499409db16d0704c42c1ab3aa1bc52b000001624fa7d4e1d8d83539013d52a20ad53d1f1cffd3b25c79ecba55cbb34c6a7a31011a287fbda6a7fd3ae9a1c9ad27cc50e6ccb5d700fc4ef266ef2bde9fa3807632011cfc3a14a2c4c8cde4bb9ed833e212f337ed681af992c097bfe9e7867091bf3a000000013b00875bf4fde336cacab4e6f125ad22212272dbec07180eb3231537b778b024000000000196643d8b6911cba8670c50216e1f575b8ab23e853b760867da49d50f3cbe5b2500019742ec0f749b819491e155a797e8b1a6d2dd55bcc4597259dc6fb9895945a92800012dcc4273c8a0ed2337ecf7879380a07e7d427c7f9d82e538002bd1442978402c01daf63debf5b40df902dae98dadc029f281474d190cddecef1b10653248a234150001e2bca6a8d987d668defba89dc082196a922634ed88e065c669e526bb8815ee1b000000000000"
8
+ }
@@ -0,0 +1,8 @@
1
+ {
2
+ "network": "main",
3
+ "height": "2127500",
4
+ "hash": "0000000000c17809d5ff65a828485008dd09f0340dea1c99d189e865e5d956dd",
5
+ "time": 1687215351,
6
+ "saplingTree": "014e7ae217ed3b37119e1335595503ecb926dcddfc24f61a7b0af18ccbf94c192601a492a6eac7547163ddad1a29fbf6e230c90c7218df278f9c4b15822d375c426e1a00011cb0e3724e6d657cf04dfbc95ead5e21fc166cda3a8be635018714c16141062a00000151b2659101b18e27c4354bdb8a72c2da93733da007138a07c1ff07e67092764c00012ba3b020bfb8584eaba8fcca894cce08cacad48181dfde7c4ebbe588e71988230001806a885d228dfb811b282a7dd70a6e1b486cd3eb6a3c15c870b4e3609b7c691101dd51e1528693a76dcfaebab4fe1f902bfc785e814973bdb2df427b0d7b751e0f000001e15be3081ea7919cc2282efa1727cd8f097c3371ec5165f902d09e7875e05c410101000a982525f9cf120cdf93c82ad25901aa53314fea166d45e2c392d3015c1f00013e6c6698c4fafd383ebdc4da1c94783e24d16d52437c7e727e43eaf812c23a30014c67b779c5bffffa2e84a484ce23b13d9afe15f12c81e857ba224fb7143b3f680182a4610f3faf5df36204a716dc35903638fa29e4901b2a0dee63141e5b8a3a3901e1c882101803f4307fef0296028169358d583e3c2f95e37973aa8078e3f5550a0000011619f99023a69bb647eab2d2aa1a73c3673c74bb033c3c4930eacda19e6fd93b0000000160272b134ca494b602137d89e528c751c06d3ef4a87a45f33af343c15060cc1e",
7
+ "orchardTree": "01d11a58bd1f200236bd0ac02213ef369f16cf6dd26a8db1e55829d5e9306f773d01ccdd7764e974d22197ff8a8cf5c88b0848bb165e703ea9ef7f94aa06f9e4341a1f0001a3a0352368a28ef2bc0649eceaa7e8bf2255da3354402a8e24adede78ad0813701f798c7ba06289f01af24dcd7404449a3cd96f40b45e380e908a0ee9ba74dae29017993e59c049c159d8938b96ded2d91e03761e0d87e84f4d4ceb3fe48c8cbf3210165eae6b0a2cbdb5fbacbea087be8841297321068aa8be5ec3d32e5809f06ad2101e3b848750b793320f975c367b4471fd3233525a86701f73425f67cff34f73c18018b9ae3100e240608c1e1d2ace18fd15c4d8a2a28a4da89356af2ccfb36cda21f00000000000173335c401d11a391c47c639c77155b3da9d5e4fe07cf7d85ef2c908b220d632401f308d624b6ac27b43a892c6f40a3b159d85c526f111dbd23d4803ab10aa8ff21000149b4515dde4622673fe56f0d4d07a8d1d51ffe015954665f7017d28ecb1cdd3b000196643d8b6911cba8670c50216e1f575b8ab23e853b760867da49d50f3cbe5b2500019742ec0f749b819491e155a797e8b1a6d2dd55bcc4597259dc6fb9895945a92800012dcc4273c8a0ed2337ecf7879380a07e7d427c7f9d82e538002bd1442978402c01daf63debf5b40df902dae98dadc029f281474d190cddecef1b10653248a234150001e2bca6a8d987d668defba89dc082196a922634ed88e065c669e526bb8815ee1b000000000000"
8
+ }
@@ -0,0 +1,8 @@
1
+ {
2
+ "network": "main",
3
+ "height": "2132500",
4
+ "hash": "00000000015faba0525daac01ed9af492ff1eb44bb65f1279e5ad91b60f9b5e8",
5
+ "time": 1687591558,
6
+ "saplingTree": "01fe5ec5066aff836e6ff0182580a0c1ce10204d74813d4a4b405762703e93aa62001a01704ca8b8f7d52de03126531816246cea9d072d9a9289aaf8e23b5f1590a0535b0113e8f7292b7a58543f967de14c4ab733b8e81eec431c8772274be7de122f274d000192708cfe5886835cf97d07cfe68af36917119878cfc5aafc08de33dcbda3892501cc7e50f3bce567d1f60c94b194c487fc1941e93e5a6c9d7619f3e5f32f75de6100018727fe44af9ad988853a41e3ea9f8fd4345846224b26caf0a545567a2d36e93a014bc1f36cf49b54f5c86c8af82b17dd5e4fa72ba6dd9320d86a57535e4db32422000000011e6357b996da8dba3e2219956da1ef3e4dae6f847950c3a79b53c4998e4fb95b01e15be3081ea7919cc2282efa1727cd8f097c3371ec5165f902d09e7875e05c410101000a982525f9cf120cdf93c82ad25901aa53314fea166d45e2c392d3015c1f00013e6c6698c4fafd383ebdc4da1c94783e24d16d52437c7e727e43eaf812c23a30014c67b779c5bffffa2e84a484ce23b13d9afe15f12c81e857ba224fb7143b3f680182a4610f3faf5df36204a716dc35903638fa29e4901b2a0dee63141e5b8a3a3901e1c882101803f4307fef0296028169358d583e3c2f95e37973aa8078e3f5550a0000011619f99023a69bb647eab2d2aa1a73c3673c74bb033c3c4930eacda19e6fd93b0000000160272b134ca494b602137d89e528c751c06d3ef4a87a45f33af343c15060cc1e",
7
+ "orchardTree": "0167af531c1c73d7dde016e9b48c9f5de97e05f4d72ea7abd3e27ed7bc069e4117010d4452cb2ab11bf6634b458a77f00bbb09a87e2c86733cdf71cb0b919306b72e1f0000000124848d54b643d88694d3e70a72172d325d54ffe0f654c469c844fd156b9348230000013ddd8fa056aade588a75273953c561a22a935b8552a83a7edd1b4f87092fab30019d1891117d1fd95ace01737b10853e290e945543ec4b015ba69865861981630e00013d406827b999178fe43f17c35684319c8121f0ed0edfdd35bc051350643a970f01c367dbc0303e24cc866432e401aa1ee3fc77d21414ecc505013359e5099e7c270001fc702e7beb6c700ca4a29658b0addde15e37500dd3072f18a6de500d246de82601758ff05006dbb6bbd44311a7a7934a4933a8c4e5cd93e1b838830cb765aad31d012e260237535488f94a78bd039f26b0ea1be0c6a11a261a98b4b8374624c2903401ebea0a7f49d1af17ef9aa083e4f6f02f7d1e98de69f3df21b0d744271348901c01f5bf8f7a82d2e9b1e7ffc052ab19501fc31f129a853492184020f6fa1975882c0196643d8b6911cba8670c50216e1f575b8ab23e853b760867da49d50f3cbe5b2500019742ec0f749b819491e155a797e8b1a6d2dd55bcc4597259dc6fb9895945a92800012dcc4273c8a0ed2337ecf7879380a07e7d427c7f9d82e538002bd1442978402c01daf63debf5b40df902dae98dadc029f281474d190cddecef1b10653248a234150001e2bca6a8d987d668defba89dc082196a922634ed88e065c669e526bb8815ee1b000000000000"
8
+ }
@@ -0,0 +1,8 @@
1
+ {
2
+ "network": "main",
3
+ "height": "2135000",
4
+ "hash": "0000000000772a796bd0ee831132066630d668c2a1bf97578d503eee3142d742",
5
+ "time": 1687779842,
6
+ "saplingTree": "01667bd8558534874082f700f02010556742744def7f876ed9b401b12183968a07018d54d9cda0616a4dd48c9a85678035180ebb550dae72001cbce048c2948fa26f1a0150515981968d8e063be1574ec196dd0552ae0bcb789b2a5f2c180f5a7eebaa4c01b9767489906a03087d888e744c0f61b1d88cfe791ded2f5743c7edcb2d2ae35d010f08cf80e8ea823f1497e208ae891416b7c0c1ec25eacd649ebb17ae58de750901c0dbec05e2a05977c34008ca5dde1bcb46174b3aea3554eb6d9c9618ccca0a1e01b1ee9878eba607747f7b4eb8dd32d6dff7997ae65b34b8dd85e71f57e9063d03000000016235c9d0d8d0174e6f367a7bc0e64efe0eb72c659aec1411f552902633cfdc0001dd7387f57a6258155fa23ca196f9d93003a9b6434d3baede4da7ddda466d6c4800011e6357b996da8dba3e2219956da1ef3e4dae6f847950c3a79b53c4998e4fb95b01e15be3081ea7919cc2282efa1727cd8f097c3371ec5165f902d09e7875e05c410101000a982525f9cf120cdf93c82ad25901aa53314fea166d45e2c392d3015c1f00013e6c6698c4fafd383ebdc4da1c94783e24d16d52437c7e727e43eaf812c23a30014c67b779c5bffffa2e84a484ce23b13d9afe15f12c81e857ba224fb7143b3f680182a4610f3faf5df36204a716dc35903638fa29e4901b2a0dee63141e5b8a3a3901e1c882101803f4307fef0296028169358d583e3c2f95e37973aa8078e3f5550a0000011619f99023a69bb647eab2d2aa1a73c3673c74bb033c3c4930eacda19e6fd93b0000000160272b134ca494b602137d89e528c751c06d3ef4a87a45f33af343c15060cc1e",
7
+ "orchardTree": "01ff9e4e0f5f9f1f9cfd166cae5d3c2b3b1ff7b9136bde3c3b04a7b984bdae200e001f000000000001d724eabc3b13aabc3250c1a52b92f28c6a520856b091a207d5d95a3ca36b9622000168410d0e976ad5b00838d789f9f5f7b7cc9da8ac1ce1688024e78ef39310ea1a00000001a1a9cbe45ba01f0893f2f9ae1ffa7d6b96543980d803531c3f713920e0adda160150a48271391b70492f153d770b82b211439f88efbe1bd0f6426a40c3a960982300000179bbd160a790cdfa01c5f69410dfde26347f3be0b277ce6b08a63dbb94c47a1400000129c5fdb83c8403cf4a07f5ad30c24a8a24263c222cd67707ff1cc16574d79121019742ec0f749b819491e155a797e8b1a6d2dd55bcc4597259dc6fb9895945a92800012dcc4273c8a0ed2337ecf7879380a07e7d427c7f9d82e538002bd1442978402c01daf63debf5b40df902dae98dadc029f281474d190cddecef1b10653248a234150001e2bca6a8d987d668defba89dc082196a922634ed88e065c669e526bb8815ee1b000000000000"
8
+ }
@@ -0,0 +1,8 @@
1
+ {
2
+ "network": "main",
3
+ "height": "2137500",
4
+ "hash": "00000000006738221d6da47b2afbeeee8b3ae26adce1b5186881a3dfc663a507",
5
+ "time": 1687968214,
6
+ "saplingTree": "0190485f66da9d4fc577dba07b9a26d4f995a3ffb38f5790fa1293796722e17849001a000001ee4d4d1586aa2f277b56d41c6bc96d57f89f110db00601a0ca10b1a9dac97f2201960325e42bc485022b8141af425cc5753d59aabd747dfbce994dd585c223607201f5faa9a4cd1bc264e1e84d41b8c76c8ce60184801c3f50d6ea5ab2df0785af2d0000014b8af15d7ab4474cc1d97dbd59ee4e021227676cfd501462e128c414db67835c01118b242ea4c5e74a37d21b234735593cd15584dc8fd093a7ffe4e2505fa4921d00019dc6c0e67be4d57ca3d5cb1c6d56b24be40dc5c0f1609c1892aa66486f0c1238011e6357b996da8dba3e2219956da1ef3e4dae6f847950c3a79b53c4998e4fb95b01e15be3081ea7919cc2282efa1727cd8f097c3371ec5165f902d09e7875e05c410101000a982525f9cf120cdf93c82ad25901aa53314fea166d45e2c392d3015c1f00013e6c6698c4fafd383ebdc4da1c94783e24d16d52437c7e727e43eaf812c23a30014c67b779c5bffffa2e84a484ce23b13d9afe15f12c81e857ba224fb7143b3f680182a4610f3faf5df36204a716dc35903638fa29e4901b2a0dee63141e5b8a3a3901e1c882101803f4307fef0296028169358d583e3c2f95e37973aa8078e3f5550a0000011619f99023a69bb647eab2d2aa1a73c3673c74bb033c3c4930eacda19e6fd93b0000000160272b134ca494b602137d89e528c751c06d3ef4a87a45f33af343c15060cc1e",
7
+ "orchardTree": "01050571c6b65ddabfd6fd81e9790f451933d98d43fb20c293c68682c80d31ef2a001f01ccf4e6d6a4d897dac86b2d0ea8ce351df4735358e5cf6492f0ce5d4e965874000000019a5932713986a0fd81ec1764c3e237c27094dec85ab4ef55bbfa2c9975b21b0200011812e67bbfd576c66b0e6037775bddbeb48f5f62e0d16b14b638e89f16bd09270138193bf001847d197377334c4b42d1f57c5bdd0f552f4d768835ff3409e92e21018a9bb93b24f0ba7a67f688363e48c519cecf8b9228fe6bfe1ce8a8ca705e2232000001d55620e0c67c33819409f1b9bdcac55e8fbe2afa8e9423dfd260fe32b9340804000118a9f8f4d5c728ce7fa7d5747d6c5cc3174720a049a5b0ee8cd236610b224209015a1142067c607861fbf1c85e2d871c43600fb794e4dc07a53a1033117a84bb320000012fbccc46bd29e8abb79dd4d66e2e3c64e66dd5db9a2aa93ea241c396727a0f08000129c5fdb83c8403cf4a07f5ad30c24a8a24263c222cd67707ff1cc16574d79121019742ec0f749b819491e155a797e8b1a6d2dd55bcc4597259dc6fb9895945a92800012dcc4273c8a0ed2337ecf7879380a07e7d427c7f9d82e538002bd1442978402c01daf63debf5b40df902dae98dadc029f281474d190cddecef1b10653248a234150001e2bca6a8d987d668defba89dc082196a922634ed88e065c669e526bb8815ee1b000000000000"
8
+ }
@@ -0,0 +1,8 @@
1
+ {
2
+ "network": "main",
3
+ "height": "2142500",
4
+ "hash": "000000000073cc0f3f62a49050ed986a6d75989c8d5904110e844c33de470a23",
5
+ "time": 1688344583,
6
+ "saplingTree": "01f92c4973ff13fcc68a2afb7364a97502ab386d78a53cc07c52af03b1dbffa367001a0000000190b3e0f36260c366bf9221754faa32b9f143bbae44a2e9bccb1750d934330d4301f62d31b862eabda28686e68c1a8ed23edde77f380b518aa9a44b6911d21e1c33014e192d41beb3fdb577c39ba789843a57fe9ee1c299821b0f9ce9ff285c81a94e01f49c370e2b21495272e25d8794b9a3b1542a4b9cb772996049002e62877f0d040001149482f1778e88b76373c3a9202d86277ab5f6b08ec225f19935ef361c45b75001e7922c17d8663af9b7deb8928a26b221d05b4c7a250217812de8c344f737956a016b3e05d2915fdc2bb81df36e94aeff69b04fd16d23b0e6ed4e74b0646af498110000000000000000018cf6f5034a55fed59d1d832620916a43c756d2379e50ef9440fc4c3e7a29aa2300011619f99023a69bb647eab2d2aa1a73c3673c74bb033c3c4930eacda19e6fd93b0000000160272b134ca494b602137d89e528c751c06d3ef4a87a45f33af343c15060cc1e",
7
+ "orchardTree": "012812c2d7b808df8b52a74d68cb30f05bc101a4c670570cd3ccda155ac2cb7b15001f01425e13ae5d15904c0cbd76547345426a3854ecd018d1e32874f02cd080eeaa040001bccc4b47ea113743d5508af079b409151455a81550186bddb158e2083ab1022e0000018ca0a289dd6764cd3d0d8bd3a54008005cd7f2a23759285f1132685334d47d24013be7039ac4c1ef345c78c99e010d779a9dab49d43f1e3355a6894dba8594dc3201c67e6c3556582e5ed79399d405e9b2d94730d311169bc74189c9d5f057119c06017ba9abff802691f6992094f84b5de2c9addb5327014443c431978be1ae0182120001d757f10232488c162664e128ae153fdf0b7fdd85d4c8a76c9b37a67ea3245e000145e5dca1aa710e20d221acfaa7fd7c545b568dec7ca8eda7321398c7888e333101fea11c276fb5c29b7af1b5a8b9fe8d6a66c6ea28155b824b2c2447d2637e6e1f000000000124c95d3079ca074c77bda5f11a34fd92433f9fcfa89e245ccee87361babc22180129c5fdb83c8403cf4a07f5ad30c24a8a24263c222cd67707ff1cc16574d79121019742ec0f749b819491e155a797e8b1a6d2dd55bcc4597259dc6fb9895945a92800012dcc4273c8a0ed2337ecf7879380a07e7d427c7f9d82e538002bd1442978402c01daf63debf5b40df902dae98dadc029f281474d190cddecef1b10653248a234150001e2bca6a8d987d668defba89dc082196a922634ed88e065c669e526bb8815ee1b000000000000"
8
+ }
@@ -0,0 +1,8 @@
1
+ {
2
+ "network": "main",
3
+ "height": "2145000",
4
+ "hash": "0000000000990da5ab1cbfa2113c829b4e76075443a2d407ce3e68f04e157a2d",
5
+ "time": 1688533563,
6
+ "saplingTree": "018501237f6d1aec316ed8d73bb2e6d6542f2d4d8be725b7ec48379d80753c01690108e6d9879d806a4bf36ea8ef04b398e90837ef20cbffd2aa3174c250e77f616d1a01831945d5abf584f066159345dbae83a85daf7bbe3582c1c103069453c5950a52000105a8c0fd8db5f24185610686919d8663ccef86377f8653f4b244e3e2a6e74f710001de7871561b67aafce3d6cc4a958603c6bdadc1d829e9683fd3333e20b75598220111418b8081030c134422efc9dcd1969c222687287622c2e629ccd84260c8124d00000141aa5b64562fb15807976367fa510a541abebd352ab1d6ebae2d27f6643a6e47000103079ebea4b0d22f63c37a92eb5023b64ba6cfa1bab4115038945fa72ffeb73f01a4e9cae1346fdf7e453b13183102a5910919fac77822de89a7a7982014baa62700000000000000018cf6f5034a55fed59d1d832620916a43c756d2379e50ef9440fc4c3e7a29aa2300011619f99023a69bb647eab2d2aa1a73c3673c74bb033c3c4930eacda19e6fd93b0000000160272b134ca494b602137d89e528c751c06d3ef4a87a45f33af343c15060cc1e",
7
+ "orchardTree": "01a0226d7882f2c9ede30199f09556010421c7d0f53d9ef2c521aad8e513286005001f01d4107f8bed56c21768615454f6b5145ef3f35530e0b53011dc11dd239f5c710100000001ce142d4f12dfa819026964be1e25f309d999f1b8fbfbb874447ff8873e5131370000000001b3336fa9782b9438b8cfc3381a9bf1e61d380745bfdc0049b1b9fd0665e83a20019357bf2a273cd2a3e33970daaa148df3961a29c66a90369ea3bbeb5ffbfed83a0001e7310276b999e62afd20f4b7a82b89935461a87d9ff7caecd3f9e274e6e9cf3301b40f0d846e2cae419c1d3fea71b58a46654d8c39c7445dc1a6faedd0eaf29e2d0001e90db6dfb630aca4d9d3b0c681c01ea26fccbe89745f6d5d04e340b2749d2d18000124c95d3079ca074c77bda5f11a34fd92433f9fcfa89e245ccee87361babc22180129c5fdb83c8403cf4a07f5ad30c24a8a24263c222cd67707ff1cc16574d79121019742ec0f749b819491e155a797e8b1a6d2dd55bcc4597259dc6fb9895945a92800012dcc4273c8a0ed2337ecf7879380a07e7d427c7f9d82e538002bd1442978402c01daf63debf5b40df902dae98dadc029f281474d190cddecef1b10653248a234150001e2bca6a8d987d668defba89dc082196a922634ed88e065c669e526bb8815ee1b000000000000"
8
+ }