public void TestBlockChain() { var blockChain = new SimpleBlockChain(100, 1); blockChain.Add("tom", "jim", 1); blockChain.Add("tom", "jim", 2); blockChain.Add("bob", "alice", 3); Thread.Sleep(1000); Console.WriteLine(blockChain.ToString()); Assert.IsTrue(blockChain.IsValid()); }
private async Task HandleBlockChainResponse(string message) { var receiveBlocks = JsonConvert.DeserializeObject <List <SimpleBlock> >(message); receiveBlocks.OrderBy(block => block.Index); SimpleBlock latestBlockReceived = receiveBlocks.Last(); SimpleBlock latestBlock = blockChain.LatestBlock; if (latestBlockReceived.Index > latestBlock.Index) { if (latestBlock.Hash == latestBlockReceived.PreviousHash) { logger.LogInformation("We can append the received block to our chain"); blockChain.Add(latestBlockReceived); await Broadcast(ResponseLatestMessage()); } else if (receiveBlocks.Count == 1) { logger.LogInformation("We have to query the chain from our peer"); await Broadcast(QueryAllMessage()); } else { blockChain.ReplaceChain(receiveBlocks); } } else { logger.LogInformation("received blockchain is not longer than received blockchain. Do nothing"); } }
public async void Post([FromBody] string value) { SimpleBlock lastBlock = _blockChain.LatestBlock; SimpleBlock newBlock = _blockFactory.CreateBlock(lastBlock, value); _blockChain.Add(newBlock); await _p2PService.Broadcast(_p2PService.ResponseLatestMessage()); string s = JsonConvert.SerializeObject(newBlock); _logger.LogInformation("Block added: " + s); }