コード例 #1
0
        public BlockchainServices()
        {
            // generate initial blockchain with genesis block
            blockchain = new Blockchain();
            // calculate hash of genesis block
            Block         genesisBlock     = blockchain.Chain[0];
            BlockServices blockServices    = new BlockServices(genesisBlock);
            string        genesisBlockHash = blockServices.BlockHash();

            blockchain.Chain[0].Hash = genesisBlockHash;
        }
コード例 #2
0
        public Block MineBlock(string miningRewardAddress)
        {
            // add mining reward transaction to block
            Transaction trans = new Transaction("SYSTEM", miningRewardAddress, blockchain.MiningReward, "Mining reward");

            blockchain.PendingTransactions.Add(trans);
            Block block         = new Block(DateTime.Now, blockchain.PendingTransactions, LatestBlock().Hash);
            var   blockServices = new BlockServices(block);

            blockServices.MineBlock(blockchain.Difficulty);
            blockchain.Chain.Add(block);
            //clear pending transactions (all pending transactions are in a block
            blockchain.PendingTransactions = new List <Transaction>();
            return(block);
        }
コード例 #3
0
 public bool isBlockchainValid()
 {
     for (long i = 1; i < blockchain.Chain.LongCount(); i++)
     {
         Block         currentBlock  = blockchain.Chain[(int)i];
         Block         previousBlock = blockchain.Chain[(int)i - 1];
         BlockServices blockServices = new BlockServices(currentBlock);
         if (currentBlock.Hash != blockServices.BlockHash())
         {
             return(false);
         }
         if (currentBlock.PreviousHash != previousBlock.Hash)
         {
             return(false);
         }
         blockServices = null;
     }
     return(true);
 }