react-native-zcash 0.5.0 → 0.6.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +28 -0
- package/README.md +7 -3
- package/android/build.gradle +5 -4
- package/android/src/main/assets/co.electriccoin.zcash/checkpoint/mainnet/2240000.json +8 -0
- package/android/src/main/assets/co.electriccoin.zcash/checkpoint/mainnet/2250000.json +8 -0
- package/android/src/main/java/app/edge/rnzcash/RNZcashModule.kt +221 -169
- package/android/src/main/java/app/edge/rnzcash/RNZcashPackage.kt +1 -2
- package/ios/RNZcash.m +5 -8
- package/ios/RNZcash.swift +177 -137
- package/ios/ZCashLightClientKit/Block/Actions/Action.swift +98 -0
- package/ios/ZCashLightClientKit/Block/Actions/ClearAlreadyScannedBlocksAction.swift +35 -0
- package/ios/ZCashLightClientKit/Block/Actions/ClearCacheAction.swift +30 -0
- package/ios/ZCashLightClientKit/Block/Actions/DownloadAction.swift +67 -0
- package/ios/ZCashLightClientKit/Block/Actions/EnhanceAction.swift +97 -0
- package/ios/ZCashLightClientKit/Block/Actions/FetchUTXOsAction.swift +33 -0
- package/ios/ZCashLightClientKit/Block/Actions/MigrateLegacyCacheDBAction.swift +70 -0
- package/ios/ZCashLightClientKit/Block/Actions/ProcessSuggestedScanRangesAction.swift +59 -0
- package/ios/ZCashLightClientKit/Block/Actions/RewindAction.swift +48 -0
- package/ios/ZCashLightClientKit/Block/Actions/SaplingParamsAction.swift +33 -0
- package/ios/ZCashLightClientKit/Block/Actions/ScanAction.swift +95 -0
- package/ios/ZCashLightClientKit/Block/Actions/UpdateChainTipAction.swift +55 -0
- package/ios/ZCashLightClientKit/Block/Actions/UpdateSubtreeRootsAction.swift +58 -0
- package/ios/ZCashLightClientKit/Block/Actions/ValidateServerAction.swift +60 -0
- package/ios/ZCashLightClientKit/Block/CompactBlockProcessor.swift +421 -937
- package/ios/ZCashLightClientKit/Block/Download/BlockDownloader.swift +31 -17
- package/ios/ZCashLightClientKit/Block/Download/BlockDownloaderService.swift +2 -2
- package/ios/ZCashLightClientKit/Block/Enhance/BlockEnhancer.swift +46 -15
- package/ios/ZCashLightClientKit/Block/FetchUnspentTxOutputs/UTXOFetcher.swift +4 -15
- package/ios/ZCashLightClientKit/Block/FilesystemStorage/FSCompactBlockRepository.swift +4 -4
- package/ios/ZCashLightClientKit/Block/Scan/BlockScanner.swift +10 -35
- package/ios/ZCashLightClientKit/Block/Utils/CompactBlockProgress.swift +24 -0
- package/ios/ZCashLightClientKit/Block/Utils/SyncControlData.swift +25 -0
- package/ios/ZCashLightClientKit/ClosureSynchronizer.swift +1 -2
- package/ios/ZCashLightClientKit/CombineSynchronizer.swift +2 -5
- package/ios/ZCashLightClientKit/Constants/ZcashSDK.swift +7 -25
- package/ios/ZCashLightClientKit/DAO/TransactionDao.swift +40 -42
- package/ios/ZCashLightClientKit/DAO/UnspentTransactionOutputDao.swift +13 -4
- package/ios/ZCashLightClientKit/Entity/AccountEntity.swift +9 -0
- package/ios/ZCashLightClientKit/Entity/TransactionEntity.swift +7 -10
- package/ios/ZCashLightClientKit/Error/Sourcery/generateErrorCode.sh +1 -1
- package/ios/ZCashLightClientKit/Error/ZcashError.swift +121 -12
- package/ios/ZCashLightClientKit/Error/ZcashErrorCode.swift +43 -5
- package/ios/ZCashLightClientKit/Error/ZcashErrorCodeDefinition.swift +72 -6
- package/ios/ZCashLightClientKit/Extensions/Bool+ToData.swift +15 -0
- package/ios/ZCashLightClientKit/Extensions/Data+ToOtherTypes.swift +18 -0
- package/ios/ZCashLightClientKit/Extensions/Int+ToData.swift +15 -0
- package/ios/ZCashLightClientKit/Initializer.swift +47 -26
- package/ios/ZCashLightClientKit/Metrics/SDKMetrics.swift +0 -12
- package/ios/ZCashLightClientKit/Model/Checkpoint.swift +12 -0
- package/ios/ZCashLightClientKit/Model/ScanProgress.swift +29 -0
- package/ios/ZCashLightClientKit/Model/ScanRange.swift +31 -0
- package/ios/ZCashLightClientKit/Modules/Service/GRPC/LightWalletGRPCService.swift +15 -0
- package/ios/ZCashLightClientKit/Modules/Service/GRPC/ProtoBuf/compact_formats.pb.swift +150 -46
- package/ios/ZCashLightClientKit/Modules/Service/GRPC/ProtoBuf/proto/compact_formats.proto +30 -16
- package/ios/ZCashLightClientKit/Modules/Service/GRPC/ProtoBuf/proto/service.proto +32 -6
- package/ios/ZCashLightClientKit/Modules/Service/GRPC/ProtoBuf/service.grpc.swift +259 -22
- package/ios/ZCashLightClientKit/Modules/Service/GRPC/ProtoBuf/service.pb.swift +193 -7
- package/ios/ZCashLightClientKit/Modules/Service/LightWalletService.swift +8 -0
- package/ios/ZCashLightClientKit/Providers/LatestBlocksDataProvider.swift +18 -28
- package/ios/ZCashLightClientKit/Repository/CompactBlockRepository.swift +1 -1
- package/ios/ZCashLightClientKit/Repository/TransactionRepository.swift +2 -6
- package/ios/ZCashLightClientKit/Resources/checkpoints/mainnet/2092500.json +8 -0
- package/ios/ZCashLightClientKit/Resources/checkpoints/mainnet/2095000.json +8 -0
- package/ios/ZCashLightClientKit/Resources/checkpoints/mainnet/2097500.json +8 -0
- package/ios/ZCashLightClientKit/Resources/checkpoints/mainnet/2102500.json +8 -0
- package/ios/ZCashLightClientKit/Resources/checkpoints/mainnet/2105000.json +8 -0
- package/ios/ZCashLightClientKit/Resources/checkpoints/mainnet/2107500.json +8 -0
- package/ios/ZCashLightClientKit/Resources/checkpoints/mainnet/2112500.json +8 -0
- package/ios/ZCashLightClientKit/Resources/checkpoints/mainnet/2115000.json +8 -0
- package/ios/ZCashLightClientKit/Resources/checkpoints/mainnet/2117500.json +8 -0
- package/ios/ZCashLightClientKit/Resources/checkpoints/mainnet/2122500.json +8 -0
- package/ios/ZCashLightClientKit/Resources/checkpoints/mainnet/2125000.json +8 -0
- package/ios/ZCashLightClientKit/Resources/checkpoints/mainnet/2127500.json +8 -0
- package/ios/ZCashLightClientKit/Resources/checkpoints/mainnet/2132500.json +8 -0
- package/ios/ZCashLightClientKit/Resources/checkpoints/mainnet/2135000.json +8 -0
- package/ios/ZCashLightClientKit/Resources/checkpoints/mainnet/2137500.json +8 -0
- package/ios/ZCashLightClientKit/Resources/checkpoints/mainnet/2142500.json +8 -0
- package/ios/ZCashLightClientKit/Resources/checkpoints/mainnet/2145000.json +8 -0
- package/ios/ZCashLightClientKit/Resources/checkpoints/mainnet/2147500.json +8 -0
- package/ios/ZCashLightClientKit/Resources/checkpoints/mainnet/2152500.json +8 -0
- package/ios/ZCashLightClientKit/Resources/checkpoints/mainnet/2155000.json +8 -0
- package/ios/ZCashLightClientKit/Resources/checkpoints/mainnet/2157500.json +8 -0
- package/ios/ZCashLightClientKit/Resources/checkpoints/mainnet/2162500.json +8 -0
- package/ios/ZCashLightClientKit/Resources/checkpoints/mainnet/2165000.json +8 -0
- package/ios/ZCashLightClientKit/Resources/checkpoints/mainnet/2167500.json +8 -0
- package/ios/ZCashLightClientKit/Resources/checkpoints/mainnet/2172500.json +8 -0
- package/ios/ZCashLightClientKit/Resources/checkpoints/mainnet/2175000.json +8 -0
- package/ios/ZCashLightClientKit/Resources/checkpoints/mainnet/2177500.json +8 -0
- package/ios/ZCashLightClientKit/Resources/checkpoints/mainnet/2182500.json +8 -0
- package/ios/ZCashLightClientKit/Resources/checkpoints/mainnet/2185000.json +8 -0
- package/ios/ZCashLightClientKit/Resources/checkpoints/mainnet/2187500.json +8 -0
- package/ios/ZCashLightClientKit/Resources/checkpoints/mainnet/2192500.json +8 -0
- package/ios/ZCashLightClientKit/Resources/checkpoints/mainnet/2195000.json +8 -0
- package/ios/ZCashLightClientKit/Resources/checkpoints/mainnet/2197500.json +8 -0
- package/ios/ZCashLightClientKit/Resources/checkpoints/mainnet/2202500.json +8 -0
- package/ios/ZCashLightClientKit/Resources/checkpoints/mainnet/2205000.json +8 -0
- package/ios/ZCashLightClientKit/Resources/checkpoints/mainnet/2207500.json +8 -0
- package/ios/ZCashLightClientKit/Resources/checkpoints/mainnet/2212500.json +8 -0
- package/ios/ZCashLightClientKit/Resources/checkpoints/mainnet/2215000.json +8 -0
- package/ios/ZCashLightClientKit/Resources/checkpoints/mainnet/2217500.json +8 -0
- package/ios/ZCashLightClientKit/Resources/checkpoints/mainnet/2222500.json +8 -0
- package/ios/ZCashLightClientKit/Resources/checkpoints/mainnet/2225000.json +8 -0
- package/ios/ZCashLightClientKit/Resources/checkpoints/mainnet/2227500.json +8 -0
- package/ios/ZCashLightClientKit/Resources/checkpoints/mainnet/2230000.json +8 -0
- package/ios/ZCashLightClientKit/Resources/checkpoints/mainnet/2232500.json +8 -0
- package/ios/ZCashLightClientKit/Resources/checkpoints/mainnet/2235000.json +8 -0
- package/ios/ZCashLightClientKit/Resources/checkpoints/mainnet/2237500.json +8 -0
- package/ios/ZCashLightClientKit/Resources/checkpoints/mainnet/2240000.json +8 -0
- package/ios/ZCashLightClientKit/Resources/checkpoints/mainnet/2242500.json +8 -0
- package/ios/ZCashLightClientKit/Resources/checkpoints/mainnet/2245000.json +8 -0
- package/ios/ZCashLightClientKit/Resources/checkpoints/mainnet/2247500.json +8 -0
- package/ios/ZCashLightClientKit/Resources/checkpoints/mainnet/2250000.json +8 -0
- package/ios/ZCashLightClientKit/Resources/checkpoints/testnet/2350000.json +8 -0
- package/ios/ZCashLightClientKit/Resources/checkpoints/testnet/2360000.json +8 -0
- package/ios/ZCashLightClientKit/Resources/checkpoints/testnet/2370000.json +8 -0
- package/ios/ZCashLightClientKit/Resources/checkpoints/testnet/2380000.json +8 -0
- package/ios/ZCashLightClientKit/Resources/checkpoints/testnet/2390000.json +8 -0
- package/ios/ZCashLightClientKit/Resources/checkpoints/testnet/2400000.json +8 -0
- package/ios/ZCashLightClientKit/Resources/checkpoints/testnet/2410000.json +8 -0
- package/ios/ZCashLightClientKit/Resources/checkpoints/testnet/2420000.json +8 -0
- package/ios/ZCashLightClientKit/Resources/checkpoints/testnet/2430000.json +8 -0
- package/ios/ZCashLightClientKit/Resources/checkpoints/testnet/2440000.json +8 -0
- package/ios/ZCashLightClientKit/Resources/checkpoints/testnet/2450000.json +8 -0
- package/ios/ZCashLightClientKit/Resources/checkpoints/testnet/2460000.json +8 -0
- package/ios/ZCashLightClientKit/Resources/checkpoints/testnet/2470000.json +8 -0
- package/ios/ZCashLightClientKit/Resources/checkpoints/testnet/2480000.json +8 -0
- package/ios/ZCashLightClientKit/Resources/checkpoints/testnet/2490000.json +8 -0
- package/ios/ZCashLightClientKit/Resources/checkpoints/testnet/2500000.json +8 -0
- package/ios/ZCashLightClientKit/Resources/checkpoints/testnet/2510000.json +8 -0
- package/ios/ZCashLightClientKit/Resources/checkpoints/testnet/2520000.json +8 -0
- package/ios/ZCashLightClientKit/Resources/checkpoints/testnet/2530000.json +8 -0
- package/ios/ZCashLightClientKit/Rust/ZcashRustBackend.swift +293 -158
- package/ios/ZCashLightClientKit/Rust/ZcashRustBackendWelding.swift +58 -64
- package/ios/ZCashLightClientKit/Rust/zcashlc.h +618 -512
- package/ios/ZCashLightClientKit/Synchronizer/ClosureSDKSynchronizer.swift +2 -8
- package/ios/ZCashLightClientKit/Synchronizer/CombineSDKSynchronizer.swift +3 -15
- package/ios/ZCashLightClientKit/Synchronizer/Dependencies.swift +11 -30
- package/ios/ZCashLightClientKit/Synchronizer/SDKSynchronizer.swift +41 -50
- package/ios/ZCashLightClientKit/Synchronizer.swift +51 -65
- package/ios/ZCashLightClientKit/Transaction/TransactionEncoder.swift +2 -2
- package/ios/ZCashLightClientKit/Transaction/WalletTransactionEncoder.swift +7 -7
- package/ios/ZCashLightClientKit/Utils/OSLogger.swift +3 -3
- package/ios/ZCashLightClientKit/Utils/ZcashFileManager.swift +16 -0
- package/ios/libzcashlc.xcframework/Info.plist +4 -0
- package/ios/libzcashlc.xcframework/ios-arm64/libzcashlc.a +0 -0
- package/ios/libzcashlc.xcframework/ios-arm64_x86_64-simulator/libzcashlc.a +0 -0
- package/lib/rnzcash.rn.js +29 -29
- package/lib/rnzcash.rn.js.map +1 -1
- package/lib/src/react-native.d.ts +5 -5
- package/lib/src/types.d.ts +27 -15
- package/package.json +2 -1
- package/src/react-native.ts +40 -21
- package/src/types.ts +36 -24
- package/ios/ZCashLightClientKit/Block/Utils/InternalSyncProgress.swift +0 -200
- package/ios/ZCashLightClientKit/Block/Validate/BlockValidator.swift +0 -51
- package/ios/ZCashLightClientKit/DAO/BlockDao.swift +0 -112
- 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
|
|
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: "
|
|
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.
|
|
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.
|
|
1056
|
-
try visitor.visitSingularStringField(value: self.
|
|
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.
|
|
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
|
|
12
|
-
var
|
|
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
|
|
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
|
|
24
|
+
let rustBackend: ZcashRustBackendWelding
|
|
26
25
|
|
|
27
26
|
// Valid values are stored here after Synchronizer's `prepare` is called.
|
|
28
|
-
private(set) var
|
|
29
|
-
private(set) var
|
|
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,
|
|
34
|
+
init(service: LightWalletService, rustBackend: ZcashRustBackendWelding) {
|
|
36
35
|
self.service = service
|
|
37
|
-
self.
|
|
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
|
-
|
|
46
|
-
|
|
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
|
-
|
|
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
|
|
63
|
-
|
|
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
|
|
28
|
-
func getTransactionOutputs(for
|
|
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
|
+
}
|