コード例 #1
0
        public Server Build(
            NodeConnectionInfo myConnectionInfo,
            KnownNodeStore knownNodeStore,
            NodeClientFactory nodeClientFactory,
            NodeClientStore nodeClientStore,
            VoteMemoryPool voteMemoryPool,
            Blockchain blockchain,
            Miner miner,
            VoteValidator voteValidator,
            BlockValidator blockValidator,
            BlockchainAdder blockchainAdder,
            IConsole console)
        {
            var handshakeService = new NodeService(
                knownNodeStore,
                nodeClientFactory,
                nodeClientStore,
                voteMemoryPool,
                blockchain,
                miner,
                voteValidator,
                blockValidator,
                blockchainAdder,
                console);
            var server = new Server
            {
                Services = { Node.BindService(handshakeService) },
                Ports    = { new ServerPort(myConnectionInfo.Ip, myConnectionInfo.Port, ServerCredentials.Insecure) }
            };

            return(server);
        }
コード例 #2
0
        public void UpdatesExistingBooking()
        {
            Vote Vote = new Vote
            {
                VoteId        = 1,
                EndDate       = new DateTime(2017, 10, 10),
                YesNoQuestion = "Questions?",
                Deleted       = false,
                Yes           = 1,
                No            = 2
            };
            //Arrange
            var mockUnitOfWork = new Mock <IUnitOfWork>();

            mockUnitOfWork
            .Setup(un => un.VoteRepository.GetByID(It.IsAny <int>()))
            .Returns(Vote);

            //Además, seteamos las expectativas para los métodos que deben llamarse luego
            mockUnitOfWork.Setup(un => un.VoteRepository.Update(It.IsAny <Vote>()));
            mockUnitOfWork.Setup(un => un.Save());

            VoteValidator VoteValidator = new VoteValidator(mockUnitOfWork.Object);

            //act
            VoteValidator.PutVote(1, Vote);

            //Assert
            mockUnitOfWork.Verify(un => un.VoteRepository.Update(It.IsAny <Vote>()), Times.Exactly(1));
            mockUnitOfWork.Verify(un => un.Save(), Times.Exactly(1));
        }
コード例 #3
0
        public async Task <ActionResult> Vote(FormVote formVote)
        {
            Logger.Init();
            try
            {
                var vote = formVote.ToVote(UserName);
                if (!VoteValidator.VoteIsValid(vote, out var messages))
                {
                    var poll = PollDbManager.GetPollWithId(vote.PollId.ToString());
                    ViewBag.Poll      = poll;
                    ViewBag.UserVoted = poll.HasVoted(UserName);
                    ViewBag.Errors    = messages;
                    return(View(formVote));
                }

                await BcClient.SendVoteToBlockChain(vote);

                PollDbManager.AddVotedUser(formVote.PollGuid, Cryptography.Sha256(UserName));

                return(Redirect("/"));
            }
            catch (Exception e)
            {
                Logger.Log.Error(e);
                return(Redirect("/ControlPanel"));
            }
        }
コード例 #4
0
ファイル: SystemFactory.cs プロジェクト: faculax/vecinosuy
 public static VoteValidator GetVoteValidatorInstance()
 {
     if (voteValidator == null)
     {
         voteValidator = new VoteValidator(GetUnitOfWofkInstance());
     }
     return(voteValidator);
 }
コード例 #5
0
        public void GetVoteById()
        {
            //Arrange
            var mockUnitOfWork = new Mock <IUnitOfWork>();

            //Esperamos que se llame al metodo Get del VoteRepository con un int
            mockUnitOfWork.Setup(un => un.VoteRepository.GetByID(It.IsAny <int>()));

            VoteValidator VoteValidator = new VoteValidator(mockUnitOfWork.Object);
            //Act

            Vote returnedVote = VoteValidator.GetVotesById(5);

            //Assert
            //mockUnitOfWork.VerifyAll();
        }
コード例 #6
0
        public void CreateVoteTest()
        {
            //Arrange
            //Creo el mock object del unitOfWork
            var mockUnitOfWork = new Mock <IUnitOfWork>();

            //Esperamos que se llame al método Insert del Repository con un Vote y luego al Save();
            mockUnitOfWork.Setup(un => un.VoteRepository.Insert(It.IsAny <Vote>()));
            mockUnitOfWork.Setup(un => un.Save());

            VoteValidator VoteValidator = new VoteValidator(mockUnitOfWork.Object);

            //Act
            VoteValidator.PostVote(new Vote());

            //Assert
            mockUnitOfWork.VerifyAll();
        }
コード例 #7
0
 public NodeService(
     KnownNodeStore knownNodeStore,
     NodeClientFactory nodeClientFactory,
     NodeClientStore nodeClientStore,
     VoteMemoryPool voteMemoryPool,
     Blockchain blockchain,
     Miner miner,
     VoteValidator voteValidator,
     BlockValidator blockValidator,
     BlockchainAdder blockchainAdder)
 {
     this.knownNodeStore    = knownNodeStore;
     this.nodeClientFactory = nodeClientFactory;
     this.nodeClientStore   = nodeClientStore;
     this.voteMemoryPool    = voteMemoryPool;
     this.blockchain        = blockchain;
     this.miner             = miner;
     this.voteValidator     = voteValidator;
     this.blockValidator    = blockValidator;
     this.blockchainAdder   = blockchainAdder;
 }
コード例 #8
0
        public void DoesntUpdateNonExistingVote()
        {
            //Arrange
            var mockUnitOfWork = new Mock <IUnitOfWork>();

            mockUnitOfWork
            .Setup(un => un.VoteRepository.GetByID(It.IsAny <int>())).Returns(() => null);

            mockUnitOfWork.Setup(un => un.VoteRepository.Update(It.IsAny <Vote>()));
            //mockUnitOfWork.Setup(un => un.Save());

            IVoteValidator VoteValidator = new VoteValidator(mockUnitOfWork.Object);

            //act
            VoteValidator.PutVote(0, new Vote()
            {
            });

            //Assert
            //Retorna exception
        }
コード例 #9
0
        public static void Main(string[] args)
        {
            var password   = args[0];
            var dbFilepath = args[1];
            var port       = int.Parse(args[2]);

            var voterDb    = new VoterDatabaseFacade(dbFilepath);
            var foundMiner = voterDb.TryGetVoterEncryptedKeyPair(password, out var encryptedKeyPair);

            if (!foundMiner)
            {
                Console.WriteLine("incorrect password: you may not mine!");
                return;
            }

            var blockchain = new Blockchain();

            // networking
            var registrarClientFactory     = new RegistrarClientFactory();
            var registrarClient            = registrarClientFactory.Build(Localhost, RegistrarPort);
            var registrationRequestFactory = new RegistrationRequestFactory();
            var myConnectionInfo           = new NodeConnectionInfo(Localhost, port);
            var knownNodeStore             = new KnownNodeStore();
            var nodeClientFactory          = new NodeClientFactory();
            var handshakeRequestFactory    = new HandshakeRequestFactory(blockchain);
            var nodeClientStore            = new NodeClientStore();
            var nodeServerFactory          = new NodeServerFactory();

            // votes
            var protoVoteFactory = new ProtoVoteFactory();
            var voteForwarder    = new VoteForwarder(nodeClientStore, protoVoteFactory);
            var voteMemoryPool   = new VoteMemoryPool(voteForwarder);

            // blocks
            var merkleNodeFactory = new MerkleNodeFactory();
            var merkleTreeFactory = new MerkleTreeFactory(merkleNodeFactory);
            var minerId           = encryptedKeyPair.PublicKey.GetBase64String();
            var blockFactory      = new BlockFactory(merkleTreeFactory, minerId);
            var protoBlockFactory = new ProtoBlockFactory(protoVoteFactory);
            var blockForwarder    = new BlockForwarder(nodeClientStore, protoBlockFactory);
            var voteValidator     = new VoteValidator(blockchain, voterDb);
            var blockValidator    = new BlockValidator(blockFactory, voteValidator);
            var blockchainAdder   = new BlockchainAdder(blockchain, voteMemoryPool, blockForwarder);

            // mining
            var difficultyTarget = TargetFactory.Build(BlockHeader.DefaultBits);
            var miner            = new Miner(
                blockchain,
                voteMemoryPool,
                difficultyTarget,
                blockFactory,
                blockchainAdder);

            // startup
            var nodeServer = nodeServerFactory.Build(
                myConnectionInfo,
                knownNodeStore,
                nodeClientFactory,
                nodeClientStore,
                voteMemoryPool,
                blockchain,
                miner,
                voteValidator,
                blockValidator,
                blockchainAdder);
            var boostrapper = new Bootstrapper(
                MinNetworkSize,
                knownNodeStore,
                nodeClientFactory,
                handshakeRequestFactory,
                nodeClientStore,
                registrarClient,
                registrationRequestFactory,
                nodeServer);

            Console.WriteLine("bootstrapping node network...");
            boostrapper.Bootstrap(myConnectionInfo);
            Console.WriteLine($"{MinNetworkSize} nodes in network! bootstrapping complete");


            Console.WriteLine("starting miner...");
            miner.Start();

            Console.WriteLine();
            Console.WriteLine();
            Console.WriteLine("Press any key to quit");
            Console.ReadKey();
        }
コード例 #10
0
 public BlockValidator(BlockFactory blockFactory, VoteValidator voteValidator)
 {
     this.blockFactory  = blockFactory;
     this.voteValidator = voteValidator;
 }
コード例 #11
0
ファイル: Program.cs プロジェクト: comitia-curiata/pericles
        public static void Main(string[] args)
        {
            var configFilepath = args[0];
            var password       = args[1];

            // config
            var nodeConfig      = ConfigDeserializer.Deserialize <NodeConfig>(configFilepath);
            var console         = ConsoleFactory.Build(nodeConfig.IsMiningNode);
            var ipAddress       = IpAddressProvider.GetLocalIpAddress();
            var electionEndTime = nodeConfig.IsClassDemo ? DateTime.Now.AddSeconds(120) : nodeConfig.ElectionEndTime;

            // password check
            var voterDb    = new VoterDatabaseFacade(nodeConfig.VoterDbFilepath);
            var foundMiner = voterDb.TryGetVoterEncryptedKeyPair(password, out var encryptedKeyPair);

            if (!foundMiner)
            {
                Console.WriteLine("incorrect password: you may not mine!");
                return;
            }

            // blockchain
            var blockchain = new Blockchain();

            // networking
            var registrarClientFactory     = new RegistrarClientFactory();
            var registrarClient            = registrarClientFactory.Build(ipAddress, RegistrarPort);
            var registrationRequestFactory = new RegistrationRequestFactory();
            var myConnectionInfo           = new NodeConnectionInfo(ipAddress, nodeConfig.Port);
            var knownNodeStore             = new KnownNodeStore();
            var nodeClientFactory          = new NodeClientFactory();
            var handshakeRequestFactory    = new HandshakeRequestFactory(blockchain);
            var nodeClientStore            = new NodeClientStore();
            var nodeServerFactory          = new NodeServerFactory();

            // votes
            var protoVoteFactory = new ProtoVoteFactory();
            var voteForwarder    = new VoteForwarder(nodeClientStore, protoVoteFactory);
            var voteMemoryPool   = new VoteMemoryPool(voteForwarder, console);

            // blocks
            var merkleNodeFactory = new MerkleNodeFactory();
            var merkleTreeFactory = new MerkleTreeFactory(merkleNodeFactory);
            var minerId           = encryptedKeyPair.PublicKey.GetBase64String();
            var blockFactory      = new BlockFactory(merkleTreeFactory, minerId);
            var protoBlockFactory = new ProtoBlockFactory(protoVoteFactory);
            var blockForwarder    = new BlockForwarder(nodeClientStore, protoBlockFactory);
            var voteValidator     = new VoteValidator(blockchain, voterDb, electionEndTime);
            var blockValidator    = new BlockValidator(blockFactory, voteValidator);
            var blockchainAdder   = new BlockchainAdder(blockchain, voteMemoryPool, blockForwarder, console);

            // mining
            var difficultyTarget = TargetFactory.Build(BlockHeader.DefaultBits);
            var miner            = new Miner(
                blockchain,
                voteMemoryPool,
                difficultyTarget,
                blockFactory,
                blockchainAdder,
                console);

            // interaction
            var voteSerializer           = new VoteSerializer();
            var electionAlgorithmFactory = new ElectionAlgorithmFactory(voteSerializer);
            var electionAlgorithm        = electionAlgorithmFactory.Build(nodeConfig.ElectionType);
            var electionResultProvider   = new ElectionResultProvider(
                electionAlgorithm,
                electionEndTime,
                voteMemoryPool,
                blockchain);
            var voterTerminal = new VoterTerminal.VoterTerminal(
                voterDb,
                nodeConfig.Candidates.ToArray(),
                voteSerializer,
                voteMemoryPool,
                electionResultProvider,
                blockchain);
            var votingBooth = new VoterTerminal.VoterBooth(voterTerminal, nodeConfig.ElectionType);

            // startup
            var nodeServer = nodeServerFactory.Build(
                myConnectionInfo,
                knownNodeStore,
                nodeClientFactory,
                nodeClientStore,
                voteMemoryPool,
                blockchain,
                miner,
                voteValidator,
                blockValidator,
                blockchainAdder,
                console);
            var boostrapper = new Bootstrapper(
                MinNetworkSize,
                knownNodeStore,
                nodeClientFactory,
                handshakeRequestFactory,
                nodeClientStore,
                registrarClient,
                registrationRequestFactory,
                nodeServer);

            Console.WriteLine("bootstrapping node network...");
            boostrapper.Bootstrap(myConnectionInfo);
            Console.WriteLine($"{MinNetworkSize} nodes in network! bootstrapping complete");

            if (nodeConfig.IsMiningNode)
            {
                Console.WriteLine("starting miner...");
                miner.Start();

                Console.WriteLine();
                Console.WriteLine();
                Console.WriteLine("Press any key to quit");
                Console.ReadKey();
            }
            else
            {
                votingBooth.LaunchBooth();
            }
        }