Esempio n. 1
0
        private static void RunSend(RepositoryConfiguration repositoryConfig)
        {
            var repoFactory = new VakapayRepositoryMysqlPersistenceFactory(repositoryConfig);

            var ethereumBusiness = new EthereumBusiness.EthereumBusiness(repoFactory);
            var connection       = repoFactory.GetDbConnection();

            try
            {
                while (true)
                {
                    Console.WriteLine("Start Send Ethereum....");

                    var rpc = new EthereumRpc(AppSettingHelper.GetEthereumNode());

                    using (var ethereumRepo = repoFactory.GetEthereumWithdrawTransactionRepository(connection))
                    {
                        var resultSend = ethereumBusiness.SendTransactionAsync(ethereumRepo, rpc);
                        Console.WriteLine(JsonHelper.SerializeObject(resultSend.Result));


                        Console.WriteLine("Send Ethereum End...");
                        Thread.Sleep(1000);
                    }
                }
            }
            catch (Exception e)
            {
                connection.Close();
                Console.WriteLine(e.ToString());
            }
        }
Esempio n. 2
0
        public WalletBusiness(IVakapayRepositoryFactory vakapayRepositoryFactory, bool isNewConnection = true)
        {
            _vakapayRepositoryFactory = vakapayRepositoryFactory;
            _connectionDb             = isNewConnection
                ? _vakapayRepositoryFactory.GetDbConnection()
                : _vakapayRepositoryFactory.GetOldConnection();

            ethereumBussiness        = new EthereumBusiness.EthereumBusiness(vakapayRepositoryFactory, false);
            bitcoinBussiness         = new BitcoinBusiness.BitcoinBusiness(vakapayRepositoryFactory, false);
            vakacoinBussiness        = new VakacoinBusiness.VakacoinBusiness(vakapayRepositoryFactory, false);
            sendMailBusiness         = new SendMailBusiness.SendMailBusiness(_vakapayRepositoryFactory, false);
            userBusiness             = new UserBusiness.UserBusiness(_vakapayRepositoryFactory, false);
            portfolioHistoryBusiness =
                new PortfolioHistoryBusiness.PortfolioHistoryBusiness(_vakapayRepositoryFactory, false);
            //(PortfolioHistoryBusiness.PortfolioHistoryBusiness)_vakapayRepositoryFactory.GetPortfolioHistoryRepository(_connectionDb);
        }
Esempio n. 3
0
        private static void RunScan(RepositoryConfiguration repositoryConfig)
        {
            var repoFactory = new VakapayRepositoryMysqlPersistenceFactory(repositoryConfig);

            var ethereumBusiness = new EthereumBusiness.EthereumBusiness(repoFactory);
            var walletBusiness   = new WalletBusiness.WalletBusiness(repoFactory);
            var connection       = repoFactory.GetOldConnection() ?? repoFactory.GetDbConnection();

            try
            {
                while (true)
                {
                    Console.WriteLine("==========Start Scan Ethereum==========");

                    var rpc = new EthereumRpc(AppSettingHelper.GetEthereumNode());

                    using (var ethereumRepo = repoFactory.GetEthereumWithdrawTransactionRepository(connection))
                    {
                        using (var ethereumDepoRepo = repoFactory.GetEthereumDepositeTransactionRepository(connection))
                        {
                            var resultSend =
                                ethereumBusiness
                                .ScanBlockAsync <EthereumWithdrawTransaction, EthereumDepositTransaction,
                                                 EthereumBlockResponse, EthereumTransactionResponse>(CryptoCurrency.ETH, walletBusiness,
                                                                                                     ethereumRepo, ethereumDepoRepo, rpc);
                            Console.WriteLine(JsonHelper.SerializeObject(resultSend.Result));


                            Console.WriteLine("==========Scan Ethereum End==========");
                            Console.WriteLine("==========Wait for next scan==========");
                            Thread.Sleep(5000);
                        }
                    }
                }
            }
            catch (Exception e)
            {
                connection.Close();
                Console.WriteLine(e.ToString());
            }
        }
Esempio n. 4
0
        private static void RunScan(RepositoryConfiguration repositoryConfig)
        {
            var repoFactory = new SmartContractRepositoryMysqlPersistenceFactory(repositoryConfig);

            var ethereumBusiness = new EthereumBusiness.EthereumBusiness(repoFactory);
            var rpc = new EthereumRpc(AppSettingHelper.GetEthereumNode());

            rpc.GetBlockNumber();
            var result = rpc.GetBlockNumber();

            if (result.Status == Status.STATUS_ERROR)
            {
                throw new Exception("Cant GetBlockNumber");
            }
            int blockNumber = 0;

            if (!int.TryParse(result.Data, out blockNumber))
            {
                throw new Exception("Cant parse block number");
            }
            CacheHelper.SetCacheString(String.Format(RedisCacheKey.KEY_SCANBLOCK_LASTSCANBLOCK,
                                                     CryptoCurrency.ETH), blockNumber.ToString());
            //      var walletBusiness = new WalletBusiness.WalletBusiness(repoFactory);
            var connection = repoFactory.GetOldConnection() ?? repoFactory.GetDbConnection();

            try
            {
                while (true)
                {
                    Console.WriteLine("==========Start Scan Ethereum==========");



                    // var rpc = new EthereumRpc(AppSettingHelper.GetEthereumNode());
                    //  var _re = rpc.FindTransactionByHash("0xe62ea756f9dbb5eb2439ea946eab1a3413c5517ebe6eecfb6d067a5d849fcf1f");
                    // foreach(var tran in _re.)
                    //var _input = rpc.DecodeInput("0xa9059cbb0000000000000000000000003a2e25cfb83d633c184f6e4de1066552c5bf45170000000000000000000000000000000000000000000000008ac7230489e80000");
                    using (var ethereumRepo = repoFactory.GetEthereumWithdrawTransactionRepository(connection))
                    {
                        using (var ethereumDepoRepo = repoFactory.GetEthereumDepositeTransactionRepository(connection))
                        {
                            var resultSend =
                                ethereumBusiness
                                .ScanBlockAsync <models.Entities.ETH.EthereumTransaction.EthereumWithdrawTransaction, models.Entities.ETH.EthereumTransaction.EthereumDepositTransaction,
                                                 models.Entities.ETH.EthereumBlockResponse, EthereumTransactionResponse>(CryptoCurrency.ETH,
                                                                                                                         ethereumRepo, ethereumDepoRepo, rpc);
                            Console.WriteLine(JsonHelper.SerializeObject(resultSend.Result));


                            Console.WriteLine("==========Scan Ethereum End==========");
                            Console.WriteLine("==========Wait for next scan==========");
                            Thread.Sleep(50000);
                        }
                    }
                }
            }
            catch (Exception e)
            {
                connection.Close();
                Console.WriteLine(e.ToString());
            }
        }
        /// <summary>
        /// Created Address with optimistic lock
        /// </summary>
        /// <param name="rpcClass"></param>
        /// <param name="walletId"></param>
        /// <param name="other"></param>
        /// <returns></returns>
        public async Task <ReturnObject> CreateAddressAsync()
        {
            try
            {
                using (var dbConnection = _smartcontractRepositoryFactory.GetDbConnection())
                {
                    if (dbConnection.State != ConnectionState.Open)
                    {
                        dbConnection.Open();
                    }

                    var userRepository = _smartcontractRepositoryFactory.GetUserRepository(dbConnection);
                    var userPendding   = userRepository.FindUserAddressNull();


                    if (userPendding?.mem_id == null)
                    {
                        return new ReturnObject
                               {
                                   Status  = Status.STATUS_ERROR,
                                   Message = "User Not Found"
                               }
                    }
                    ;


                    //begin first email
                    var transctionScope = dbConnection.BeginTransaction();
                    try
                    {
                        var lockResult = await userRepository.LockForProcessUser(userPendding);

                        if (lockResult.Status == Status.STATUS_ERROR)
                        {
                            transctionScope.Rollback();
                            return(new ReturnObject
                            {
                                Status = Status.STATUS_SUCCESS,
                                Message = "Cannot Lock For Process"
                            });
                        }

                        transctionScope.Commit();
                    }
                    catch (Exception e)
                    {
                        transctionScope.Rollback();
                        return(new ReturnObject
                        {
                            Status = Status.STATUS_ERROR,
                            Message = e.ToString()
                        });
                    }

                    //update Version to Model
                    userPendding.Version += 1;

                    var transactionSend = dbConnection.BeginTransaction();
                    try
                    {
                        var ethRpc           = new EthereumRpc(AppSettingHelper.GetEthereumNode());
                        var pass             = CommonHelper.RandomString(15);
                        var ethereumBusiness =
                            new EthereumBusiness.EthereumBusiness(_smartcontractRepositoryFactory);
                        var resultEthereum = ethereumBusiness.CreateAddress(ethRpc, userPendding.mem_id, pass);
                        if (resultEthereum.Status == Status.STATUS_ERROR)
                        {
                            transactionSend.Rollback();

                            return(new ReturnObject
                            {
                                Status = Status.STATUS_ERROR,
                                Message = "Cannot create add bitcoin"
                            });
                        }

                        var address = resultEthereum.Data;

                        if (string.IsNullOrEmpty(address))
                        {
                            transactionSend.Rollback();

                            return(new ReturnObject
                            {
                                Status = Status.STATUS_ERROR,
                                Message = "Cannot create address"
                            });
                        }

                        userPendding.IsProcessing = 0;
                        userPendding.mem_address  = address;
                        userPendding.Status       = Status.STATUS_COMPLETED;

                        var updateResult = userRepository.UpdateUser(userPendding);
                        if (updateResult.Status == Status.STATUS_ERROR)
                        {
                            transactionSend.Rollback();

                            return(new ReturnObject
                            {
                                Status = Status.STATUS_ERROR,
                                Message = "Cannot update wallet status"
                            });
                        }

                        transactionSend.Commit();
                        return(new ReturnObject
                        {
                            Status = Status.STATUS_SUCCESS,
                            Message = "Create success"
                        });
                    }
                    catch (Exception e)
                    {
                        // release lock
                        transactionSend.Rollback();
                        var releaseResult = await userRepository.ReleaseLock(userPendding);

                        Console.WriteLine(JsonHelper.SerializeObject(releaseResult));
                        throw;
                    }
                }
            }
            catch (Exception e)
            {
                return(new ReturnObject
                {
                    Status = Status.STATUS_ERROR,
                    Message = e.Message
                });
            }
        }