Example #1
0
        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());
        }
Example #2
0
        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");
            }
        }
Example #3
0
        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);
        }