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)); } }
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); } }