Ejemplo n.º 1
0
        public void CreateBtcTransactions()
        {
            var uriBitcoinRpcServer      = ConfigurationManager.AppSettings["UriBitcoinRpcServer"];
            var loginBitcoinRpcServer    = ConfigurationManager.AppSettings["LoginBitcoinRpcServer"];
            var passwordBitcoinRpcServer = ConfigurationManager.AppSettings["PasswordBitcoinRpcServer"];

            StopBitcoinNodeService();
            StartBitcoinNodeService();
            GenerateLocalBitcoins();
            var accounts = GetLocalAccounts(80);

            using (var client = new BitcoinNetClient(new Uri("http://localhost:18332"), loginBitcoinRpcServer, passwordBitcoinRpcServer))
            {
                for (var i = 0; i <= 7; i++)
                {
                    Log.Instance.Info($"Dispatch of bitcoins, {i}-th generation...");
                    for (var j = 0; j < 10; j++)
                    {
                        var address = client.GetNewAddress(accounts[i * 10 + j]);
                        for (var k = 0; k < 2; k++)
                        {
                            client.SendToAddress(address, 50.00f, "send bitcoin for init data", "send bitcoin for init data");
                        }
                    }
                    if (i > 6)
                    {
                        continue;
                    }
                    Log.Instance.Info($"Confirm bitcoin transactions, {i}-th generation");
                    ExternalGenerationHashBlocks(1);
                }
            }
        }
        protected string GetAddressForAccountOnDataProcessingAction(string json)
        {
            string address;

            GetDataForRpcBitcoinServer(out var uriServer, out var login, out var password);
            var request = JsonConvert.DeserializeObject <GetAddressForAccountRequest>(json);
            var server  = new Uri(uriServer);

            using (var client = new BitcoinNetClient(server, login, password))
                address = client.GetNewAddress(request.Account);
            var response = new GetAddressForAccountResponse(address);

            return(JsonConvert.SerializeObject(response));
        }
        protected void ExecuteSendBtcRequests()
        {
            var container = UnityConfig.GetConfiguredContainer();

            GetDataForRpcBitcoinServer(out var uriServer, out var login, out var password);
            var server = new Uri(uriServer);

            using (var context = container.Resolve <IDalContext>())
            {
                var requests = context.SendBtcRequests.Where(sbr => !sbr.IsExecute).ToList();
                using (var client = new BitcoinNetClient(server, login, password))
                {
                    requests.ForEach(sbr => client.SendToAddress(sbr.Address, sbr.Amount,
                                                                 "send bitcoin for execute request in Core.Bitcon.Service",
                                                                 "send bitcoin for execute request in Core.Bitcon.Service"));
                }
                requests.ForEach(sbr => sbr.IsExecute = true);
                context.SaveChangesAsync().Wait();
            }
        }
        protected void GetStateBitcoinWallets()
        {
            var container = UnityConfig.GetConfiguredContainer();

            GetDataForRpcBitcoinServer(out var uriServer, out var login, out var password);
            var server = new Uri(uriServer);

            using (var context = container.Resolve <IDalContext>())
            {
                List <ListReceivedByAddressResponseElement> wallets;
                List <GetTransactionResponse> transactions;
                using (var client = new BitcoinNetClient(server, login, password))
                {
                    wallets = client.ListReceivedByAddress(0).ToList();
                    var transactionsIds = wallets.SelectMany(w => w.TxIds);
                    transactions = transactionsIds.Select(t => client.GetTransaction(t)).ToList();
                }
                UpdateWallets(context, wallets);
                UpdateTransactions(context, transactions, "send", GetOutgoingDbTransactions, AddOutgoingTransactionInDb);
                UpdateTransactions(context, transactions, "receive", GetIncomingDbTransactions, AddIncomingTransactionInDb);
            }
        }