public void RegisterNodeTest()
        {
            var bc = new Business.Blockchain(_proofHandler, _client);

            bc.RegisterNode("http://localhost/");
            Assert.IsTrue(bc.Nodes.Contains("localhost"));
        }
        public void ResolveConflictsTest_noNew()
        {
            var bc = new Business.Blockchain(_proofHandler, _client);
            var a  = bc.ResolveConflicts().Result;

            Assert.IsFalse(a);
        }
        public void MineBlockTest()
        {
            var bc = new Business.Blockchain(_proofHandler, _client);

            bc.MineBlock();
            Assert.AreEqual(2, bc.Chain.Count);
        }
        public void AddTransactionTest()
        {
            var bc = new Business.Blockchain(_proofHandler, _client);

            bc.AddTransaction("1", "2", 1f);
            bc.MineBlock();
            Assert.AreEqual(2, bc.LastBlock.Transactions.Length);
        }
        public void ResolveConflictsTest_HasNew()
        {
            var bc = new Business.Blockchain(_proofHandler, _client);

            bc.RegisterNode("http://localhost/");
            var a = bc.ResolveConflicts().Result;

            Assert.IsTrue(a);
        }
        public void Initialize()
        {
            var proofMock = new Mock <IProofHandler>();

            proofMock.Setup(x => x.GetProofOfWork(It.IsAny <int>())).Returns(1);
            proofMock.Setup(x => x.ValidateProof(It.IsAny <int>(), It.IsAny <int>())).Returns(true);
            _proofHandler = proofMock.Object;
            var netClient = new Mock <IBlockchainNetworkClient>();
            var chain     = new Business.Blockchain(_proofHandler, _client);

            chain.MineBlock();
            var msg = new HttpResponseMessage
            {
                StatusCode = HttpStatusCode.OK,
                Content    = new StringContent(JsonConvert.SerializeObject(chain.Chain))
            };

            netClient.Setup(x => x.GetNodeChain(It.IsAny <string>()))
            .Returns(Task.FromResult(msg));

            _client = netClient.Object;
        }
 public ChainController(Business.Blockchain blockchain)
 {
     this.blockchain = blockchain;
 }
Beispiel #8
0
        static void Main()
        {
            Console.WriteLine("Hello World!");

            var proofHandler = new ProofHandler();

            var blockchain = new Business.Blockchain(proofHandler, new BlockchainNetworkClient(new HttpClient()));

            Console.WriteLine("Created new Blockchain...");

            Console.WriteLine("Mining a new block...");
            var result = blockchain.MineBlock();

            Console.WriteLine($"Mined block, result index {result.Index}, proof {result.Proof}...");

            Console.WriteLine("Adding transaction...");
            var index = blockchain.AddTransaction("Anna", "Johan", 2);

            Console.WriteLine($"Transaction added, will be in block index {index}...");
            Console.WriteLine("Mining next block...");
            result = blockchain.MineBlock();
            Console.WriteLine($"Mined block, result index {result.Index}, proof {result.Proof}...");

            Console.WriteLine("Adding transaction...");
            index = blockchain.AddTransaction("Bertil", "Johan", 3);
            Console.WriteLine($"Transaction added, will be in block index {index}...");
            Console.WriteLine("Mining next block...");
            result = blockchain.MineBlock();
            Console.WriteLine($"Mined block, result index {result.Index}, proof {result.Proof}...");

            Console.WriteLine("Adding transaction...");
            index = blockchain.AddTransaction("Caesar", "Johan", 4);
            Console.WriteLine($"Transaction added, will be in block index {index}...");
            Console.WriteLine("Mining next block...");
            result = blockchain.MineBlock();
            Console.WriteLine($"Mined block, result index {result.Index}, proof {result.Proof}...");

            Console.WriteLine("Adding transaction...");
            index = blockchain.AddTransaction("Disa", "Johan", 5);
            Console.WriteLine($"Transaction added, will be in block index {index}...");
            Console.WriteLine("Mining next block...");
            result = blockchain.MineBlock();
            Console.WriteLine($"Mined block, result index {result.Index}, proof {result.Proof}...");

            Console.WriteLine("Listing chain...");

            var previousHash = "1";

            foreach (var block in blockchain.Chain)
            {
                Console.WriteLine($"Listing block {block.Index}, proof {block.Proof}, previous hash matches? {block.PreviousHash == previousHash}");
                previousHash = Hasher.CreateHash(block);

                if (!block.Transactions.Any())
                {
                    Console.WriteLine("  No transactions in block...");
                    continue;
                }

                Console.WriteLine($"  Listing transactions for block index {block.Index}...");

                foreach (var transaction in block.Transactions)
                {
                    Console.WriteLine($"    Transaction: {transaction.Amount} from {transaction.Sender} to {transaction.Receiver}...");
                }
            }

            previousHash = "1";
            var previousProof = 100;

            foreach (var block in blockchain.Chain)
            {
                Console.WriteLine($"Proof is {block.Proof} - Valid? {proofHandler.ValidateProof(previousProof, block.Proof)}, good hash? {previousHash == block.PreviousHash}.");
                previousHash  = Hasher.CreateHash(block);
                previousProof = block.Proof;
            }
        }
        public void BlockchainTest()
        {
            var bc = new Business.Blockchain(_proofHandler, _client);

            Assert.AreEqual(1, bc.Chain.Count);
        }
Beispiel #10
0
 public BlockchainController()
 {
     _blockChain = new Business.Blockchain();
 }