I am developing a Bitcoin wallet SPV and using 3rd party SDK for the same.

However, I tried to create wallet and it gets successfully created and I can also restore those wallets but amount and transactions not coming. Making amount always 0 as amount calculation depends on transactions.

//  XORWallet.swift
//  Created by Paresh Thakor on 06/07/19.

import UIKit

let KEY_MNEMONIC = "wallet_mnemonic"

class XORWallet: NSObject {
    static let shared = XORWallet()

    var peerGroup: WSPeerGroup?
    var wallet: WSHDWallet?

    func create(_ seed: WSSeed? = nil) -> WSHDWallet? {
        let parameters: WSParameters = WSParametersForNetworkType(WSNetworkTypeMain)
        var theSeed: WSSeed? = seed

        if theSeed == nil {
            theSeed =  (WSSeedGenerator.sharedInstance()?.generateRandomSeed())!

        if let s = theSeed {
            let store: WSBlockStore = WSMemoryBlockStore.init(parameters: parameters)
            wallet = WSHDWallet.init(parameters: parameters, seed: s)
            let downloader: WSBlockChainDownloader = WSBlockChainDownloader.init(store: store, wallet: wallet)
//            wallet?.usedAddresses()
            let peerGroup: WSPeerGroup = WSPeerGroup.init(parameters: parameters)
            NotificationCenter.default.addObserver(forName: NSNotification.Name(rawValue: "WSPeerGroupDidStartDownload"), object: nil, queue: nil) {(note) in
                print("Jay Mataji")
            peerGroup.startDownload(with: downloader)
            NotificationCenter.default.addObserver(forName: NSNotification.Name(rawValue: "WSPeerGroupDidFinishDownload"), object: nil, queue: nil){(note) in

            self.peerGroup = peerGroup
        return wallet

    func generateSeed() -> WSSeed? {
        let theSeed: WSSeed? = WSSeedGenerator.sharedInstance()?.generateRandomSeed()
        return theSeed

    func saveToUserDefaults() -> Bool {
        if let w =  wallet,
            let m = w.seed()?.mnemonic() {
            let def = UserDefaults.standard
            def.set(m, forKey: KEY_MNEMONIC)

            return true

        return false

    func loadSavedWallet() -> WSHDWallet? {
        let def = UserDefaults.standard
        if let m = def.string(forKey: KEY_MNEMONIC) {
            let seed = WSSeed(mnemonic: m)
            return create(seed)

        return create()

Create a wallet like,

if let wallet = XORWallet.shared.create(XORWallet.shared.generateSeed()) {

Please help me solving the issue as here wallet.balance() always comes 0. There is balance for this account.

I am new to bitcoin dev and may messed up something.

  • 1
    Are you rescanning the blockchain once you create your wallet? Or in the case of SPV "replaying" the chain once all your addresses are added to the bloom filter? – pinhead Sep 3 '19 at 21:22
  • @pinhead I did not really get you. As mentioned in code, I am creating wallet by create() and then access balance and address by specific methods. I don't get about bloom filters and "replaying" stuff. – Paresh Thakor Sep 4 '19 at 5:47

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Browse other questions tagged or ask your own question.