public void Mine(Wallet wallet) { var txs = _mempoolRepository.GetNextList(); var lastBlockHash = _blockRepository.GetLastBlockHash(); if (lastBlockHash == null) { lastBlockHash = InsertGenesis(wallet); } var newBlock = new Block(lastBlockHash); foreach (var tx in txs) { switch (tx.Type) { case TransactionType.Coins: break; case TransactionType.VisitToTheDoctor: break; default: throw new ArgumentOutOfRangeException(); } } var coinBase = new Wallet(); var mainedBlockMoney = new CoinTransaction(coinBase.PublicKey, wallet.PublicKey, 100, null); mainedBlockMoney.Sign(coinBase); mainedBlockMoney.Id = Guid.NewGuid().ToString(); mainedBlockMoney.Outputs.Add( new TransactionOutput(mainedBlockMoney.Reciepient, mainedBlockMoney.Amount, mainedBlockMoney.Id) ); UTXOs[mainedBlockMoney.Outputs[0].Id] = mainedBlockMoney.Outputs[0]; newBlock.AddTransaction(UTXOs, mainedBlockMoney); newBlock.MineBlock(new Random().Next(0, 5)); _blockRepository.Add(newBlock); }
public void RepositoriesFullInsert() { DigitalSignatureUtils.AssignKeyPair("addr3"); TransactionPoolRepository tpr = new TransactionPoolRepository(); TransactionPool tp = new TransactionPool { Timestamp = DateTime.Now }; int poolId = tpr.Add(tp); Assert.AreEqual(poolId, tpr.Get(poolId).Id); TransactionRepository tr = new TransactionRepository(); Transaction t = new Transaction { PoolId = poolId, SenderId = 6, RecipientId = 1, Amount = 10, Status = TransactionStatus.confirmed.ToString(), Timestamp = DateTime.Now }; int transactionId = tr.Add(t); Assert.AreEqual(transactionId, tr.Get(transactionId).Id); BlockRepository br = new BlockRepository(); Block b = new Block { PoolId = poolId, PreviousHash = br.Get().Last().Hash, Timestamp = DateTime.Now }; b.AssignPool(); b.ComputeHash(); b.Signature = Convert.ToBase64String( DigitalSignatureUtils.SignData( Convert.FromBase64String( b.Hash ) ) ); int blockId = br.Add(b); Assert.AreEqual(blockId, br.Get(blockId).Id); }
public void AcceptBlock(Block block) { BlockRepository.Add(block); }