private void RegisterRepo(ContainerBuilder builder) { builder.Register(x => new AssetRepository()) .As <IAssetRepository>() .SingleInstance(); var connectionString = _settings.Nested(p => p.Bitcoin.Db.DataConnString); builder.Register(x => OperationMetaRepository.Create(connectionString, x.Resolve <ILogFactory>())) .As <IOperationMetaRepository>() .SingleInstance(); builder.Register(x => OperationEventRepository.Create(connectionString, x.Resolve <ILogFactory>())) .As <IOperationEventRepository>() .SingleInstance(); builder.Register(x => UnconfirmedTransactionRepository.Create(connectionString, x.Resolve <ILogFactory>())) .As <IUnconfirmedTransactionRepository>() .SingleInstance(); builder.Register(x => ObservableOperationRepository.Create(connectionString, x.Resolve <ILogFactory>())) .As <IObservableOperationRepository>() .SingleInstance(); builder.Register(x => ObservableWalletRepository.Create(connectionString, x.Resolve <ILogFactory>())) .As <IObservableWalletRepository>() .SingleInstance(); builder.Register(x => WalletBalanceRepository.Create(connectionString, x.Resolve <ILogFactory>())) .As <IWalletBalanceRepository>() .SingleInstance(); builder.Register(x => LastProcessedBlockRepository.Create(connectionString, x.Resolve <ILogFactory>())) .As <ILastProcessedBlockRepository>() .SingleInstance(); builder.Register(x => SpentOutputRepository.Create(connectionString, x.Resolve <ILogFactory>())) .As <ISpentOutputRepository>() .SingleInstance(); builder.Register(x => FeeRateRepository.Create(connectionString, x.Resolve <ILogFactory>())) .As <IFeeRateRepository>() .SingleInstance(); }
private static async Task Execute(string bitcoinCashDataConnString, string settingsUrl, string bitcoinCashNetwork, string blockchainType) { BCash.Instance.EnsureRegistered(); var network = Network.GetNetwork(bitcoinCashNetwork); var bcashNetwork = network == Network.Main ? BCash.Instance.Mainnet : BCash.Instance.Regtest; var logConsole = LogFactory.Create().AddConsole(); var settings = new SettingsServiceReloadingManager <AppSettings>(settingsUrl, p => {}); var walletRepo = BlockchainWalletsRepository.Create(settings.Nested(p => p.BlockchainWalletsService.Db.DataConnString), logConsole); var firstGenerationBlockchainWalletRepository = FirstGenerationBlockchainWalletRepository.Create(settings.Nested(x => x.BlockchainWalletsService.Db.ClientPersonalInfoConnString), logConsole); var observableWalletsRepo = ObservableWalletRepository.Create(new ReloadingManagerAdapter <string>(bitcoinCashDataConnString), logConsole); var addressValidator = new AddressValidator(network, bcashNetwork); Console.WriteLine("Retrieving observable wallets"); var observableWallets = (await observableWalletsRepo.GetAll()).ToList(); Console.WriteLine("Processing items"); var counter = 0; foreach (var observableWallet in observableWallets) { counter++; var address = addressValidator.GetBitcoinAddress(observableWallet.Address); if (address == null) { throw new ArgumentException($"Unrecognized address {observableWallet.Address}", nameof(observableWallet.Address)); } var oldAdrr = address.ScriptPubKey.GetDestinationAddress(network).ToString(); var newAddr = address.ScriptPubKey.GetDestinationAddress(bcashNetwork).ToString(); Console.WriteLine($"Processing {observableWallet.Address}:{oldAdrr}:{newAddr} -- {counter} of {observableWallets.Count}"); var wallet = await walletRepo.TryGetAsync(blockchainType, oldAdrr); if (wallet == null) { var prevColor = Console.ForegroundColor; Console.ForegroundColor = ConsoleColor.Yellow; Console.WriteLine($"Wallet not found {observableWallet.Address} -{blockchainType}. Queued by {oldAdrr}"); Console.ForegroundColor = prevColor; continue; } var oldCredsRecord = new BcnCredentialsRecord { Address = string.Empty, AssetAddress = oldAdrr, ClientId = wallet.ClientId.ToString(), EncodedKey = string.Empty, PublicKey = string.Empty, AssetId = $"{blockchainType} ({wallet.AssetId})" }; var newCredsRecord = new BcnCredentialsRecord { Address = string.Empty, AssetAddress = newAddr, ClientId = wallet.ClientId.ToString(), EncodedKey = string.Empty, PublicKey = string.Empty, AssetId = $"{blockchainType} ({wallet.AssetId})" }; await firstGenerationBlockchainWalletRepository.DeleteIfExistAsync(oldCredsRecord); await firstGenerationBlockchainWalletRepository.InsertOrReplaceAsync(newCredsRecord); await walletRepo.DeleteIfExistsAsync(wallet.BlockchainType, wallet.ClientId, oldAdrr); await walletRepo.AddAsync(wallet.BlockchainType, wallet.ClientId, newAddr, wallet.CreatorType); } Console.WriteLine("All done"); }