public bool AddWalletAddress(WalletAddress address, bool mergePast, out bool empty) { empty = true; if (!AddAddress(address)) { return(false); } if (address.HDKeySet != null) { KeyDataTable.GetChild(address.WalletName, address.HDKeySet.Name).Create(Encode(address.ScriptPubKey), address.HDKey, false); } var entry = address.CreateWalletRuleEntry(); Indexer.AddWalletRule(entry.WalletId, entry.Rule); if (mergePast) { CancellationTokenSource cancel = new CancellationTokenSource(); cancel.CancelAfter(10000); empty = !Indexer.MergeIntoWallet(address.WalletName, address, entry.Rule, cancel.Token); } if (!empty) { GetBalanceSummaryCacheTable(address.WalletName, true).Delete(); GetBalanceSummaryCacheTable(address.WalletName, false).Delete(); } return(true); }