public void Mining() { var(privateKey, publicKey) = SignManager.GenerateKeys(); var publickKeyHash = new HexString(HashUtil.RIPEMD_SHA256(publicKey)); //Genesis Mining var genesis = BlockchainManager.CreateGenesis(); var miner = new Miner { MinerKeyHash = publickKeyHash }; Console.WriteLine("Mining"); miner.Mining(genesis, Context.CancellationToken); BlockchainManager.Chain.Add(genesis); for (var i = 0; i < 10; i++) { var gg = BlockchainManager.CreateCoinBaseTransaction(i + 1, publickKeyHash.Bytes, $"まかろに{i}"); gg.TimeStamp = DateTime.UtcNow; var txs = new List <Transaction>() { gg }; var rootHash = HashUtil.ComputeMerkleRootHash(txs.Select(x => x.Id).ToList()); var b = new Block() { PreviousBlockHash = BlockchainManager.Chain.Last().Id, Transactions = txs, MerkleRootHash = rootHash, Timestamp = DateTime.UtcNow, Bits = 1 }; miner.Mining(b, Context.CancellationToken); BlockchainManager.Chain.Add(b); Task.Delay(10).GetAwaiter().GetResult(); } //Second Block Mining Console.WriteLine($"{genesis.Transactions.Count}"); var tb = new TransactionBuilder(); var ttx = BlockchainManager.Chain.SelectMany(x => x.Transactions).First(x => x.Engraving == "まかろに0"); var input = new Input() { TransactionId = ttx.Id, OutputIndex = 0, }; var output = new Output() { Amount = 10, PublicKeyHash = publickKeyHash.Bytes }; tb.Inputs.Add(input); tb.Outputs.Add(output); var tx = tb.ToSignedTransaction(privateKey, publicKey); BlockchainManager.TransactionPool.Add(tx); miner.Start(); Console.WriteLine($"{BlockchainManager.VerifyBlockchain()} : OK"); Console.ReadLine(); }