Пример #1
0
        public async Task <object> Send([FromBody] PendingTransactionRequest tr)
        {
            var transaction = new PendingTransaction(tr.Hash, tr.From, tr.To, tr.Amount, tr.SenderPublickKey, tr.SenderSignature);
            var isAccepted  = await _transactionService.AddPendingTransaction(transaction);

            return(new { Accepted = isAccepted });
        }
Пример #2
0
        public async Task <IActionResult> Index(string address)
        {
            var blocks = await _communicator.GetBlocks();

            var transactions = blocks.OrderByDescending(b => b.Index).Take(5).SelectMany(b => b.Transactions);

            bool isAccepted = false;

            if (transactions.Count(t => t.To == address && t.From == _walletManager.GetAddress()) < 5)
            {
                var pendingTransaction = new PendingTransactionRequest
                {
                    SenderPublickKey = _walletManager.GetPublicKey(),
                    From             = _walletManager.GetAddress(),
                    To     = address,
                    Amount = 5
                };

                _walletManager.SignTransactionRequest(pendingTransaction);
                _walletManager.SetTransactionRequestHash(pendingTransaction);
                isAccepted = await _communicator.PublishTransaction(pendingTransaction);
            }


            return(View("Index", new { IsAccepted = isAccepted }));
        }
Пример #3
0
        public void SignTransactionRequest(PendingTransactionRequest pendingTransactionRequest)
        {
            var dataForSign = pendingTransactionRequest.From
                              + pendingTransactionRequest.To
                              + pendingTransactionRequest.Amount;

            pendingTransactionRequest.SenderSignature = Crypto.GetSignature(dataForSign, _privateKey);
        }
Пример #4
0
 public void SetTransactionRequestHash(PendingTransactionRequest pendingTransactionRequest)
 {
     pendingTransactionRequest.Hash = Hash.ComputeHash(
         pendingTransactionRequest.From,
         pendingTransactionRequest.To,
         pendingTransactionRequest.SenderPublickKey,
         pendingTransactionRequest.SenderSignature,
         pendingTransactionRequest.Amount.ToString()
         );
 }
Пример #5
0
        public async Task <bool> PublishTransaction(PendingTransactionRequest transaction)
        {
            var response = await _nodeAddress
                           .AppendPathSegments("api", "transactions")
                           .PostJsonAsync(transaction);

            if (!response.IsSuccessStatusCode)
            {
                return(false);
            }

            var content = await response.Content.ReadAsStringAsync();

            var definition = new { accepted = false };

            return(JsonConvert.DeserializeAnonymousType(content, definition).accepted);
        }
Пример #6
0
        public void PublishTransaction(PendingTransaction transaction)
        {
            var transactionRequest = new PendingTransactionRequest
            {
                Amount           = transaction.Amount,
                From             = transaction.From,
                Hash             = transaction.Hash,
                SenderPublickKey = transaction.SenderPublickKey,
                SenderSignature  = transaction.SenderSignature,
                To = transaction.To
            };

            foreach (var peer in _peers.GetAll())
            {
                peer.Address.AppendPathSegments("api", "transactions")
                .PostJsonAsync(transactionRequest);
            }
        }
Пример #7
0
        private static void Send()
        {
            Console.WriteLine("To Address:");
            var to = Console.ReadLine();

            Console.WriteLine("Ammount:");
            var ammount = decimal.Parse(Console.ReadLine());

            var pendingTransaction = new PendingTransactionRequest
            {
                SenderPublickKey = _walletManager.GetPublicKey(),
                From             = _walletManager.GetAddress(),
                To     = to,
                Amount = ammount
            };

            _walletManager.SignTransactionRequest(pendingTransaction);
            _walletManager.SetTransactionRequestHash(pendingTransaction);

            var isAccepted = _nodeCommunicator.PublishTransaction(pendingTransaction).Result;

            Console.WriteLine("Is Acceped :");
            Console.WriteLine(isAccepted);
        }