Instance Property
progress
Foundation.Progress tracking completedUnitCount = local tip height and totalUnitCount = remote tip height.
var progress: Progress { get }
Discussion
The same Progress instance persists across updates() calls and survives the entire lifetime of this BlockchainSync. That persistence is the point: bind it once to SwiftUI.ProgressView(_:) or BGContinuedProcessingTask.progress and it tracks automatically, including across sync restarts.
Note
Progress updates use KVO; SwiftUI observes them without any extra wiring. Raw KVO observers should key-path-observe fractionCompleted.