コード例 #1
0
        private void ReceiveBlock(PacketHeader packetHeader, Connection connection, string blk)
        {
            // Deserialize JSON data that is received
            Block block = Serialize.DeserializeBlock(blk);

            // Testing
            MessageBox.Show("Block Received with Hash: \n\n" + block.HashBlock());

            // TODO: If it is the same height, disregard.
            if (block.getIndex() == blockHeight - 1)
            {
                //MessageBox.Show("Block received has same height as current block, disregarding...");
            }
            else if (block.getIndex() > blockHeight)
            {
                //MessageBox.Show("Block received is more than one block ahead. Finish syncing blockchain...");
                // Load method to sync missing blocks
                // Request block from random peer
            }
            else if (block.getIndex() == blockHeight)
            {
                if (block.previousHash == previousBlock.HashBlock())
                {
                    Serialize.WriteBlock(block);
                    chain.Add(block);
                    blockHeight++;
                    network.blockheight = blockHeight;
                    previousBlock       = chain.ElementAt(blockHeight - 1);
                    SendBlock(block);
                    currentBlock = new Block();
                    currentBlock.NewBlock(blockHeight, previousBlock.HashBlock());
                }
                else
                {
                    // Block not valid
                    //MessageBox.Show("Hashes do not match, disregarding block...");
                }
            }
        }