Ejemplo n.º 1
0
        public void Should_validate_a_chain(bool validChain)
        {
            const int size     = 5;
            var       consense = new NetworkConsense(1, size, 0);


            var blockGenesis = new MockBlock(size, Enumerable.Empty <Transaction>(), string.Empty);
            var block1       = new MockBlock(size, Enumerable.Empty <Transaction>(), string.Empty);
            var block2       = new MockBlock(size, Enumerable.Empty <Transaction>(), string.Empty);
            var block3       = new MockBlock(size, Enumerable.Empty <Transaction>(), string.Empty);

            IEnumerable <IBlock> GetNext(string previosHash)
            {
                blockGenesis.PreviousHash = previosHash;
                yield return(blockGenesis);

                block1.PreviousHash = blockGenesis.Hash;
                yield return(block1);

                block2.PreviousHash = validChain ? block1.Hash : "INCORRECT";
                yield return(block2);

                block3.PreviousHash = block2.Hash;
                yield return(block3);
            };

            IEnumerator <IBlock> factoryState = null;

            IBlock factory(DateTime created, string previousHash, int blockSize, IEnumerable <Transaction> pendingTransactions)
            {
                if (factoryState == null)
                {
                    factoryState = GetNext(previousHash).GetEnumerator();
                }

                factoryState.MoveNext();
                return(factoryState.Current);
            }

            var bc           = new BlockChain(Guid.NewGuid(), consense, factory);
            var transactions =
                Enumerable
                .Repeat(new Transaction(Guid.NewGuid(), Guid.NewGuid(), 1), size * 2)
                .ToArray();

            bc.CreateTransaction(transactions);

            while (bc.PenddingTransactions.Count > 1)
            {
                bc.MiningPedingTransactions();
            }

            // lazy test :<
            bc.IsChainValid().Should().Be(validChain);
        }
Ejemplo n.º 2
0
        public void Should_natural_transactions_be_valid(int transactionCount)
        {
            const int blockSize = 5;
            var       consense  = new NetworkConsense(1, blockSize, 0);
            var       bc        = new BlockChain(Guid.NewGuid(), consense);

            var transactions =
                Enumerable.Repeat(new Transaction(Guid.NewGuid(), Guid.NewGuid(), 1), transactionCount)
                .ToArray();

            bc.CreateTransaction(transactions);

            while (bc.PenddingTransactions.Count > 1)
            {
                bc.MiningPedingTransactions();
            }

            bc.IsChainValid().Should().BeTrue();
        }