Пример #1
0
        public static Block GenesisBlock()
        {
            using (BlockchainDatabase db = BlockchainDatabase.Create())
            {
                Block genesisBlock = db.Blocks.FindOne(y => y.PreviousBlockHash == ChainParams.EmptyBlockHash);

                if (genesisBlock != null)
                {
                    return(genesisBlock);
                }

                genesisBlock = new Block
                {
                    Date              = DateTime.ParseExact("11/01/2018", "dd/MM/yyyy", CultureInfo.InvariantCulture),
                    Nonce             = 4432,
                    DifficultyMask    = ChainParams.CalculateDifficultyMask(null),
                    PreviousBlockHash = ChainParams.EmptyBlockHash
                };

                genesisBlock.Transactions.Add(new Transaction
                {
                    Outputs = new List <TransactionOutput>
                    {
                        new TransactionOutput {
                            To = Globals.Keys.GenesisPublicKey, Amount = (decimal)(ChainParams.MaxSupply * ChainParams.PreMinePercentage)
                        }
                    }
                });

                db.Blocks.Insert(genesisBlock);

                return(genesisBlock);
            }
        }
        public static Transaction TransactionFromTxInput(TransactionInput txInput)
        {
            using (BlockchainDatabase db = BlockchainDatabase.Create())
            {
                string previousTx           = txInput.PreviousTransactionHash;
                Block  blockWithTransaction = db.Blocks.FindOne(y => y.Transactions.Exists(z => z.Hash == previousTx));

                if (blockWithTransaction == null)
                {
                    return(null);
                }

                return(blockWithTransaction.Transactions.FirstOrDefault(y => y.Hash == previousTx));
            }
        }
Пример #3
0
        public static Block GenerateBlock()
        {
            using (BlockchainDatabase db = BlockchainDatabase.Create())
            {
                uint  lastBlockIndex = (uint)db.Blocks.Max(y => y.BlockIndex).AsInt32;
                Block lastBlock      = db.Blocks.FindOne(y => y.BlockIndex == lastBlockIndex);

                Block newBlock = new Block
                {
                    PreviousBlockHash = lastBlock.Hash,
                    Date           = DateTime.Now,
                    DifficultyMask = ChainParams.CalculateDifficultyMask(lastBlock),
                    BlockIndex     = lastBlockIndex + 1
                };

                return(newBlock);
            }
        }