private async Task <IResponse <NoValue> > TestConnection(CryptoAdapterModel cryptoAdapter) { var response = new Response <NoValue>(); var nodeType = cryptoAdapter.NodeType; switch (nodeType) { case AdapterTypeItemEnum.Ethereum: var adapter = new EthereumAdapter(_logger); if (cryptoAdapter.Direction == DirectionEnum.Destination) { response = await adapter.TestConnectionDestination(cryptoAdapter); } else { response = await adapter.TestConnectionSource(cryptoAdapter); } break; case AdapterTypeItemEnum.Cardano: break; case AdapterTypeItemEnum.EOS: break; case AdapterTypeItemEnum.NEO: var neoAdapter = new NEOAdapter(_logger); response = await neoAdapter.TestConnectionSource(cryptoAdapter); break; case AdapterTypeItemEnum.Bitcoin: var btcAdapter = new BitcoinAdapter(_logger); var btcUsername = cryptoAdapter.Properties.SelectMany(p => p.SourceProperties).FirstOrDefault(sp => sp.Id == (long)PropertyEnum.RpcUsername).Value; var btcPassword = cryptoAdapter.Properties.SelectMany(p => p.SourceProperties).FirstOrDefault(sp => sp.Id == (long)PropertyEnum.RpcPassword).Value; response = btcAdapter.TestConnectionSource(cryptoAdapter, btcUsername, btcPassword); break; case AdapterTypeItemEnum.Litecoin: var ltcAdapter = new LitecoinAdapter(_logger); var ltcUsername = cryptoAdapter.Properties.SelectMany(p => p.SourceProperties).FirstOrDefault(sp => sp.Id == (long)PropertyEnum.RpcUsername).Value; var ltcPassword = cryptoAdapter.Properties.SelectMany(p => p.SourceProperties).FirstOrDefault(sp => sp.Id == (long)PropertyEnum.RpcPassword).Value; response = ltcAdapter.TestConnectionSource(cryptoAdapter, ltcUsername, ltcPassword); break; } return(response); }
public async Task <Response <List <TransactionResponse <BlockchainTransactionModel> > > > SendToBlockchain(BlockchainDataModel blockchainDataModel) { var response = new Response <List <TransactionResponse <BlockchainTransactionModel> > >() { Value = new List <TransactionResponse <BlockchainTransactionModel> >() }; try { var jobTimeLine = _entities.JobTimeline.FirstOrDefault(jt => jt.Id == blockchainDataModel.JobId); var cryptoAdapterId = jobTimeLine.Schedule.JobDefinition.Adapter1.CryptoAdapter.FirstOrDefault().Id; var cryptoAdapter = _cryptoAdapterService.GetCryptoAdapter(cryptoAdapterId); if (cryptoAdapter.Status != StatusEnum.Success) { return(response); } switch (cryptoAdapter.Value.NodeType) { case AdapterTypeItemEnum.Cardano: var cardano = new CardanoAdapter(); break; case AdapterTypeItemEnum.EOS: var eos = new EOSAdapter(); break; case AdapterTypeItemEnum.Ethereum: var ethAdapter = new EthereumAdapter(_logger); response = await ethAdapter.SendTransactions(blockchainDataModel.Transactions, cryptoAdapter.Value); break; case AdapterTypeItemEnum.NEO: var neo = new NEOAdapter(_logger); break; case AdapterTypeItemEnum.Bitcoin: var btcAdapter = new BitcoinAdapter(_logger); break; } } catch (Exception ex) { _logger.Information($"BlockchainService.SendToBlockchain(blockchainDataModel: {blockchainDataModel})"); _logger.Error(ex.Message); response.Status = StatusEnum.Error; } return(response); }
public async Task <IResponse <AccountModel> > NewAccount(long cryptoAdapterId) { var response = new Response <AccountModel>(); try { var cryptoAdapter = _entities.CryptoAdapter.Find(cryptoAdapterId); var cryptoAdapterModel = new CryptoAdapterModel { RpcAddr = cryptoAdapter.RpcAddr, }; if (cryptoAdapter.RpcPort != null) { cryptoAdapterModel.RpcPort = UInt16.Parse(cryptoAdapter.RpcPort); } var newAccountPassword = cryptoAdapter.CryptoAdapterProperty.FirstOrDefault(cap => cap.PropertyId == (long)PropertyEnum.NewAccountPassword).Value; var nodeType = (AdapterTypeItemEnum)cryptoAdapter.Adapter.AdapterTypeItemId; switch (nodeType) { case AdapterTypeItemEnum.Ethereum: var adapter = new EthereumAdapter(_logger); response = await adapter.NewAccount(cryptoAdapterModel, newAccountPassword); break; case AdapterTypeItemEnum.Cardano: break; case AdapterTypeItemEnum.EOS: break; case AdapterTypeItemEnum.NEO: break; default: //add logger throw new Exception(); } } catch (Exception ex) { response.Status = StatusEnum.Error; response.Message = Message.SomethingWentWrong; _logger.Information($"BlockchainService.NewAccount(cryptoAdapterId: {cryptoAdapterId})"); _logger.Error(ex.Message); } return(response); }
public async Task <TransactionResponse <BlockchainTransactionModel> > GetTransactionStatus(BlockchainTransactionModel transaction, long cryptoAdapterId) { var response = new TransactionResponse <BlockchainTransactionModel>(); try { var cryptoAdapter = _entities.CryptoAdapter.Find(cryptoAdapterId); var cryptoAdapterModel = new CryptoAdapterModel { RpcAddr = cryptoAdapter.RpcAddr }; if (cryptoAdapter.RpcPort != null) { cryptoAdapterModel.RpcPort = UInt16.Parse(cryptoAdapter.RpcPort); } var nodeType = (AdapterTypeItemEnum)cryptoAdapter.Adapter.AdapterTypeItemId; switch (nodeType) { case AdapterTypeItemEnum.Ethereum: var adapter = new EthereumAdapter(_logger); response = await adapter.GetTransactionStatus(transaction, cryptoAdapterModel); break; case AdapterTypeItemEnum.Cardano: break; case AdapterTypeItemEnum.EOS: break; case AdapterTypeItemEnum.NEO: break; default: //add logger throw new Exception(); } } catch (Exception ex) { response.Succeeded = false; response.Message = Message.SomethingWentWrong; _logger.Information($"BlockchainService.GetTransactionStatus(transaction: {transaction}, cryptoAdapterId: {cryptoAdapterId})"); _logger.Error(ex.Message); } return(response); }
public async Task <Response <List <T> > > GetBlocksWithTransactions <T>(long adapterId, int fromBlock, int toBlock, string address) { var response = new Response <List <T> >() { Value = new List <T>() }; try { var cryptoAdapter = _entities.Adapter.Find(adapterId).CryptoAdapter.FirstOrDefault(); var cryptoAdapterModel = new CryptoAdapterModel { Id = cryptoAdapter.Id, RpcAddr = cryptoAdapter.RpcAddr, RpcPort = Convert.ToUInt16(cryptoAdapter.RpcPort) }; if (typeof(T) == typeof(EthereumBlockModel)) { var ethereumResponse = new Response <List <EthereumBlockModel> >() { Value = new List <EthereumBlockModel>() }; var adapter = new EthereumAdapter(_logger); ethereumResponse = await adapter.GetBlocksWithTransactions(cryptoAdapterModel, fromBlock, toBlock, address); response = (Response <List <T> >)Convert.ChangeType(ethereumResponse, typeof(Response <List <T> >)); } else if (typeof(T) == typeof(BitcoinBlockModel)) { var bitcoinResponse = new Response <List <BitcoinBlockModel> >() { Value = new List <BitcoinBlockModel>() }; var username = cryptoAdapter.CryptoAdapterProperty.FirstOrDefault(cap => cap.PropertyId == (long)PropertyEnum.RpcUsername).Value; var password = cryptoAdapter.CryptoAdapterProperty.FirstOrDefault(cap => cap.PropertyId == (long)PropertyEnum.RpcPassword).Value; var adapter = new BitcoinAdapter(_logger); bitcoinResponse = adapter.GetBlocksWithTransactions(cryptoAdapterModel, username, password, fromBlock, toBlock, address); response = (Response <List <T> >)Convert.ChangeType(bitcoinResponse, typeof(Response <List <T> >)); } else if (typeof(T) == typeof(LitecoinBlockModel)) { var litecoinResponse = new Response <List <LitecoinBlockModel> >() { Value = new List <LitecoinBlockModel>() }; var username = cryptoAdapter.CryptoAdapterProperty.FirstOrDefault(cap => cap.PropertyId == (long)PropertyEnum.RpcUsername).Value; var password = cryptoAdapter.CryptoAdapterProperty.FirstOrDefault(cap => cap.PropertyId == (long)PropertyEnum.RpcPassword).Value; var adapter = new LitecoinAdapter(_logger); litecoinResponse = adapter.GetBlocksWithTransactions(cryptoAdapterModel, username, password, fromBlock, toBlock, address); response = (Response <List <T> >)Convert.ChangeType(litecoinResponse, typeof(Response <List <T> >)); } else if (typeof(T) == typeof(NeoBlockModel)) { var neoResponse = new Response <List <NeoBlockModel> >() { Value = new List <NeoBlockModel>() }; var adapter = new NEOAdapter(_logger); neoResponse = await adapter.GetBlocksWithTransactions(cryptoAdapterModel, fromBlock, toBlock, address); response = (Response <List <T> >)Convert.ChangeType(neoResponse, typeof(Response <List <T> >)); } } catch (Exception ex) { response.Status = StatusEnum.Error; response.Message = Message.SomethingWentWrong; _logger.Information($"BlockchainService.GetBlocksWithTransactions(adapterId: {adapterId}, fromBlock: {fromBlock}), toBlock: {toBlock}, address: {address}"); _logger.Error(ex.Message); } return(response); }
public async Task <Response <int> > GetCurrentBlockNumber(long adapterId, AdapterTypeItemEnum adapterType) { var response = new Response <int>(); try { var cryptoAdapter = _entities.Adapter.Find(adapterId).CryptoAdapter.FirstOrDefault(); var cryptoAdapterModel = new CryptoAdapterModel { RpcAddr = cryptoAdapter.RpcAddr }; if (cryptoAdapter.RpcPort != null) { cryptoAdapterModel.RpcPort = UInt16.Parse(cryptoAdapter.RpcPort); } switch (adapterType) { case AdapterTypeItemEnum.Ethereum: var ethAdapter = new EthereumAdapter(_logger); response = await ethAdapter.GetCurrentBlockNumber(cryptoAdapterModel); break; case AdapterTypeItemEnum.Bitcoin: var btcUsername = cryptoAdapter.CryptoAdapterProperty.FirstOrDefault(cap => cap.PropertyId == (long)PropertyEnum.RpcUsername).Value; var btcPassword = cryptoAdapter.CryptoAdapterProperty.FirstOrDefault(cap => cap.PropertyId == (long)PropertyEnum.RpcPassword).Value; var btcAdapter = new BitcoinAdapter(_logger); response = btcAdapter.GetCurrentBlockNumber(cryptoAdapterModel, btcUsername, btcPassword); break; case AdapterTypeItemEnum.NEO: var neoAdapter = new NEOAdapter(_logger); response = await neoAdapter.GetCurrentBlockNumber(cryptoAdapterModel); break; case AdapterTypeItemEnum.Litecoin: var ltcUsername = cryptoAdapter.CryptoAdapterProperty.FirstOrDefault(cap => cap.PropertyId == (long)PropertyEnum.RpcUsername).Value; var ltcPassword = cryptoAdapter.CryptoAdapterProperty.FirstOrDefault(cap => cap.PropertyId == (long)PropertyEnum.RpcPassword).Value; var ltcAdapter = new LitecoinAdapter(_logger); response = ltcAdapter.GetCurrentBlockNumber(cryptoAdapterModel, ltcUsername, ltcPassword); break; default: break; } } catch (Exception ex) { response.Status = StatusEnum.Error; response.Message = Message.SomethingWentWrong; _logger.Information($"BlockchainService.GetCurrentBlockNumber(adapterId: {adapterId}, adapterType: {adapterType}"); _logger.Error(ex.Message); } return(response); }