Beispiel #1
0
        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);
        }
Beispiel #2
0
        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);
        }
Beispiel #3
0
 public void AcceptBlock(Block block)
 {
     BlockRepository.Add(block);
 }