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 }); }
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 })); }
public void SignTransactionRequest(PendingTransactionRequest pendingTransactionRequest) { var dataForSign = pendingTransactionRequest.From + pendingTransactionRequest.To + pendingTransactionRequest.Amount; pendingTransactionRequest.SenderSignature = Crypto.GetSignature(dataForSign, _privateKey); }
public void SetTransactionRequestHash(PendingTransactionRequest pendingTransactionRequest) { pendingTransactionRequest.Hash = Hash.ComputeHash( pendingTransactionRequest.From, pendingTransactionRequest.To, pendingTransactionRequest.SenderPublickKey, pendingTransactionRequest.SenderSignature, pendingTransactionRequest.Amount.ToString() ); }
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); }
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); } }
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); }