Ejemplo n.º 1
0
        public override bool ProcessContract(ParticipantHandler participantHandler, List <Chain> chains)
        {
            if (ValidateContextual(participantHandler, chains))
            {
                var k = participantHandler.CountSimilarPatients(Country, Region, Birthyear);

                if (k < 3)
                {
                    throw new TransactionParkedException();
                }
                else
                {
                    participantHandler.AddPatient(new Patient()
                    {
                        Address = TransactionId
                        ,
                        Country = Country
                        ,
                        Region = Region
                        ,
                        Birthyear = Birthyear
                    });

                    return(true);
                }
            }

            return(false);
        }
Ejemplo n.º 2
0
    protected void ParticipantList_Click(object sender, EventArgs e)
    {
        LinkButton btn = (LinkButton)sender;
        //Response.Write(btn.CommandArgument);
        int participantid = Convert.ToInt32(btn.CommandArgument);

        int        userLoggedId = -1;
        HttpCookie c1           = Request.Cookies["UserID"];

        if (c1 == null)
        {
            //Do nothing
        }
        else
        {
            // not add the same user
            userLoggedId = Convert.ToInt32(c1.Value);
            Participant participant = ParticipantHandler.getInstance().Recover(participantid);
            if (userLoggedId != participant.GetId())
            {
                participantFactory.addItem(participant);
                DataListParticipantsSelected.DataBind();
            }
        }

        /*
         * Application["regNo"] = Convert.ToInt32(btn.Text);
         * Response.Redirect("EditClub.aspx");*/
    }
Ejemplo n.º 3
0
        public bool ProcessContracts(ParticipantHandler participantHandler, List <Chain> context)
        {
            var ret = true;

            foreach (var t in TransactionList)
            {
                try
                {
                    ret &= t.ProcessContract(participantHandler, context);
                } catch (TransactionParkedException)
                {
                    ret &= true;

                    if (t.GetType() == typeof(PatientRegistrationTransaction))
                    {
                        var prt = (PatientRegistrationTransaction)t;

                        participantHandler.AddPatient(new Entities.Patient()
                        {
                            Address   = prt.TransactionId,
                            Country   = prt.Country,
                            Region    = prt.Region,
                            Birthyear = prt.Birthyear
                        });
                    }
                }
            }

            return(ret);
        }
 public override bool ValidateContextual(ParticipantHandler participantHandler, List <Chain> chains)
 {
     return
         ((participantHandler.IsEmpty() && participantHandler.IsVotablePublisher(TransactionAddress)) ||
          ((participantHandler.IsVotablePublisher(TransactionAddress) || participantHandler.IsVotablePhysician(TransactionAddress)) &&
           participantHandler.HasSender(SenderAddress) &&
           ValidateTransactionIntegrity(participantHandler.GetSenderKey(SenderAddress))));
 }
Ejemplo n.º 5
0
 public void UpdateChain(Chain chain)
 {
     participantHandler = new ParticipantHandler();
     chain.ProcessContracts(participantHandler, new List <Chain>()
     {
         chain
     });
 }
Ejemplo n.º 6
0
 //Will be only one instance
 public static ParticipantHandler getInstance()
 {
     if (instance == null)
     {
         instance = new ParticipantHandler();
     }
     return(instance);
 }
        public override bool ValidateContextual(ParticipantHandler participantHandler, List <Chain> chains)
        {
            var ret = participantHandler.HasSender(SenderAddress) &&
                      ValidateTransactionIntegrity(participantHandler.GetSenderKey(SenderAddress));

            ret &= participantHandler.HasSender(PhysicianAddress) && participantHandler.HasPatient(PatientAddress);

            return(ret);
        }
        new public bool LoadChain()
        {
            var success = base.LoadChain();

            if (success)
            {
                participantHandler_Buffered = participantHandler.Clone();
            }
            return(success);
        }
Ejemplo n.º 9
0
        public bool LoadChain()
        {
            chain = new Chain(FileHandler.Read(User.Username + FileHandler.ChainPath));
            participantHandler = new ParticipantHandler();
            var success = chain.ProcessContracts(participantHandler, new List <Chain>()
            {
                chain
            });

            return(success);
        }
Ejemplo n.º 10
0
        public bool ProcessContracts(ParticipantHandler participantHandler, List <Chain> context)
        {
            var ret       = true;
            var blockList = GetBlocks();

            foreach (var b in blockList)
            {
                ret &= b.ProcessContracts(participantHandler, context);
            }

            return(ret);
        }
Ejemplo n.º 11
0
    protected void ParticipantList_Click(object sender, EventArgs e)
    {
        LinkButton btn = (LinkButton)sender;
        //Response.Write(btn.CommandArgument);
        Participant participant = ParticipantHandler.getInstance().Recover(Convert.ToInt32(btn.CommandArgument));

        participantFactory.addItem(participant);
        DataListParticipantsSelected.DataBind();

        /*
         * Application["regNo"] = Convert.ToInt32(btn.Text);
         * Response.Redirect("EditClub.aspx");*/
    }
Ejemplo n.º 12
0
        public void UpdateChain()
        {
            if (!IsChainInitialized())
            {
                var initialized = false;

                foreach (var n in knownNodes)
                {
                    try
                    {
                        chain        = new QueryClient(n).RequestFullChain();
                        initialized |= !chain.IsEmpty();
                    } catch (RpcException) { }

                    if (initialized)
                    {
                        break;
                    }
                }

                if (!initialized)
                {
                    return;
                }

                participantHandler = new ParticipantHandler();
                chain.ProcessContracts(participantHandler, new List <Chain>()
                {
                    chain
                });
            }

            long currentIndex = chain.Blockhead.Index;

            foreach (var n in knownNodes)
            {
                try
                {
                    var update = new QueryClient(n).RequestDeltaChain(currentIndex);
                    if (!update.IsEmpty())
                    {
                        update.ProcessContracts(participantHandler, new List <Chain>()
                        {
                            chain
                        });
                        chain.Add(update);
                        currentIndex = chain.Blockhead.Index;
                    }
                } catch (RpcException) { }
            }
        }
        public bool CastVoteForPublisher(ParticipantHandler participantHandler, Guid publisherAddress, Guid senderAddress)
        {
            //If the publisher has already been confirmed, do nothing
            if (participantHandler.HasPublisher(publisherAddress))
            {
                return(true);
            }
            if (!(participantHandler.proposedPublishers.Where(p => p.Address == publisherAddress).Count() > 0))
            {
                return(false);
            }

            //If the publisher is still proposed
            //Add Vote to list of votes (if not already present from the current sender)
            var votesFromSender = from v in participantHandler.pendingVotes
                                  where v.VoteFor == publisherAddress && v.VoteFrom == senderAddress
                                  select v;

            if (votesFromSender.Count() > 0)
            {
                var hit = votesFromSender.FirstOrDefault();
                hit.Confirmed = true;
            }
            else
            {
                participantHandler.pendingVotes.Add(new Vote()
                {
                    VoteFor = publisherAddress
                    ,
                    VoteFrom = senderAddress
                    ,
                    Confirmed = true
                });
            }

            //Count list of valid votes for publisher => Valid votes must be more than half of currently confirmed publishers
            //If publisher is confirmed: Transfer to confirmed publishers, remove all votes from list
            var votesForPublisher = from v in participantHandler.pendingVotes
                                    where v.VoteFor == publisherAddress && v.Confirmed
                                    select v;

            if (votesForPublisher.Count() > Math.Floor(participantHandler.pendingVotes.Count() / 2.0))
            {
                var tranfer = participantHandler.proposedPublishers.Where(p => p.Address == publisherAddress);
                participantHandler.confirmedPublishers.AddRange(tranfer);
                participantHandler.proposedPublishers.RemoveAll(p => p.Address == publisherAddress);
                participantHandler.pendingVotes.RemoveAll(v => v.VoteFor == publisherAddress);
            }

            return(true);
        }
Ejemplo n.º 14
0
        public override bool ValidateContextual(ParticipantHandler participantHandler, List <Chain> chains)
        {
            var valid = false;

            valid &= participantHandler.HasSender(SenderAddress) &&
                     ValidateTransactionIntegrity(participantHandler.GetSenderKey(SenderAddress));

            foreach (var c in chains)
            {
                valid |= c.HasTransaction(TreatmentTransactionAddress);
            }

            return(valid);
        }
Ejemplo n.º 15
0
        public bool ValidateContextual(ParticipantHandler participantHandler, List <Chain> context) //context = Hauptchain, falls gerade eine neu Empfangen Teilchain verarbeitet wird
        {
            context = (context == null) ? new List <Chain>() : context;
            context.Add(this);

            var ret       = true;
            var blockList = GetBlocks();

            foreach (var b in blockList)
            {
                ret &= b.ValidateContextual(participantHandler, context);
            }

            return(ret);
        }
 protected void ButtonCreateAccount_Click(object sender, EventArgs e)
 {
     if (!AuthenticationHandler.getInstance().ExistsEmail(TextBoxUser.Text) && checkNumber(TextBoxAddressNumber.Text))
     {
         int key = ParticipantHandler.getInstance().InsertParticipant(TextBoxName.Text, TextBoxUser.Text, TextBoxPassword.Text, 'P',
                                                                      TextBoxAddress.Text, Int32.Parse(TextBoxAddressNumber.Text), TextBoxZipCode.Text, TextBoxCity.Text, DropDownListProvince.Text, "Canada");
         if (key == -1)
         {
             Response.Redirect("CreateAccountError.aspx");
         }
         else
         {
             Response.Redirect("CreateAccountSuccess.aspx");
         }
     }
 }
        public override bool ProcessContract(ParticipantHandler participantHandler, List <Chain> chains)
        {
            if (!ValidateContextual(participantHandler, chains))
            {
                return(false);
            }

            if (participantHandler.IsEmpty() && participantHandler.IsVotablePublisher(TransactionAddress)) //For the first publisher in the chain
            {
                if (Vote)
                {
                    return(participantHandler.CastVoteForPublisher(TransactionAddress, SenderAddress));
                }
                else
                {
                    participantHandler.CastVoteAgainstPublisher(TransactionAddress, SenderAddress);
                }
            }
            else if (participantHandler.IsVotablePublisher(TransactionAddress) && participantHandler.HasPublisher(SenderAddress))
            {
                if (Vote)
                {
                    return(participantHandler.CastVoteForPublisher(TransactionAddress, SenderAddress));
                }
                else
                {
                    participantHandler.CastVoteAgainstPublisher(TransactionAddress, SenderAddress);
                }
            }
            else if (participantHandler.IsVotablePhysician(TransactionAddress) && participantHandler.HasSender(SenderAddress))
            {
                if (Vote)
                {
                    participantHandler.CastVoteForPhysician(TransactionAddress, SenderAddress);
                }
                else
                {
                    participantHandler.CastVoteAgainstPhysician(TransactionAddress, SenderAddress);
                }
            }
            else
            {
                return(false);
            }

            return(true);
        }
        public override bool ProcessContract(ParticipantHandler participantHandler, List <Chain> chains)
        {
            if (ValidateContextual(participantHandler, chains))
            {
                var l = 5; //Count of distinct Symtpoms for the corresponding patient over all chains

                if (l < 5)
                {
                    participantHandler.ParkSymptom(this);

                    throw new TransactionParkedException();
                }

                return(true);
            }

            return(false);
        }
        public bool CastVoteAgainstPublisher(ParticipantHandler participantHandler, Guid publisherAddress, Guid senderAddress)
        {
            //If the publisher is not confirmed, do nothing
            if (!participantHandler.HasPublisher(publisherAddress))
            {
                return(false);
            }

            //Add Vote to list of votes (if not already present from the current sender)
            var votesFromSender = from v in participantHandler.pendingVotes
                                  where v.VoteFor == publisherAddress && v.VoteFrom == senderAddress
                                  select v;

            if (votesFromSender.Count() > 0)
            {
                var hit = votesFromSender.FirstOrDefault();
                hit.Confirmed = false;
            }
            else
            {
                participantHandler.pendingVotes.Add(new Vote()
                {
                    VoteFor = publisherAddress
                    ,
                    VoteFrom = senderAddress
                    ,
                    Confirmed = false
                });
            }

            //Count list of valid votes against publisher => Valid votes must be more than half of currently confirmed publishers
            //If publisher is dismissed: Delete from List
            var votesAgainstPublisher = from v in participantHandler.pendingVotes
                                        where v.VoteFor == publisherAddress && !v.Confirmed
                                        select v;

            if (votesAgainstPublisher.Count() > Math.Floor(participantHandler.confirmedPublishers.Count() / 2.0))
            {
                participantHandler.confirmedPublishers.RemoveAll(p => p.Address == publisherAddress);
                participantHandler.pendingVotes.RemoveAll(v => v.VoteFor == publisherAddress);
            }

            return(true);
        }
        public override bool ProcessContract(ParticipantHandler participantHandler, List <Chain> chains)
        {
            if (ValidateContextual(participantHandler, chains))
            {
                participantHandler.ProposePublisher(new Publisher()
                {
                    Address = TransactionId
                    ,
                    PublicKey = PublicKey
                    ,
                    Country = Country
                    ,
                    Region = Region
                    ,
                    EntityName = EntityName
                });

                return(true);
            }

            return(false);
        }
Ejemplo n.º 21
0
 public ParticipantCreatorViewModel()
 {
     NewParticipant           = new Participant();
     CreateParticipantCommand = new RelayCommand(() => ParticipantHandler.CreateParticipant(NewParticipant), () => NewParticipant != null);
 }
 public override bool ValidateContextual(ParticipantHandler participantHandler, List <Chain> chains)
 {
     return(SenderAddress == TransactionId &&
            ValidateTransactionIntegrity(PublicKey) &&
            !participantHandler.HasPublisher(TransactionId));
 }
Ejemplo n.º 23
0
 public override bool ProcessContract(ParticipantHandler participantHandler, List <Chain> chains)
 {
     return(ValidateContextual(participantHandler, chains));
 }
        public void PublishOpenBlocks(object state)
        {
            //TODO Überprüfen, ob Node überhaupt publishen darf (Registrierung eines neuen Publishers muss durchgehen)

            manipulateBufferedTransactions.WaitOne();
            manipulateChain.WaitOne();
            Chain appendix = null;

            if (transactionBuffer.HasBlocks())
            {
                appendix = new Chain();

                while (transactionBuffer.HasBlocks())
                {
                    var nextBlock = transactionBuffer.GetNextBlock();
                    nextBlock.Publisher = User.UserAddress;

                    if (chain.IsEmpty())
                    {
                        nextBlock.Index         = 0;
                        nextBlock.PreviousBlock = null;
                        nextBlock.PreviousHash  = null;
                    }
                    else if (appendix.IsEmpty())
                    {
                        nextBlock.Index        = chain.Blockhead.Index + 1;
                        nextBlock.PreviousHash = chain.Blockhead.Hash;
                    }
                    else
                    {
                        nextBlock.Index         = appendix.Blockhead.Index + 1;
                        nextBlock.PreviousBlock = appendix.Blockhead;
                        nextBlock.PreviousHash  = appendix.Blockhead.Hash;
                    }

                    nextBlock.Sign(User.Keys.PrivateKey);
                    appendix.Add(nextBlock);
                }

                var success = appendix.ProcessContracts(participantHandler, new List <Chain>()
                {
                    chain
                });
                participantHandler_Buffered = participantHandler.Clone();

                foreach (var n in knownNodes)
                {
                    try
                    {
                        new PublisherClient(n, selfAddress).SendChain(appendix);
                    }
                    catch (RpcException)
                    { //TODO Nodes flaggen, von denen keine Antwort kommt
                    }
                }

                CLI.DisplayLine("Published " + appendix.GetTransactions().Count + " transactions " + (success ? "successfully" : "unsuccessfully"));
                chain.Add(appendix);
            }

            manipulateChain.Release();
            manipulateBufferedTransactions.Release();
        }
        //Returns whether or not the chain has been added to the blockchain
        public bool OnReceiveChain(Chain chain)
        {
            var success      = false;
            var transactions = chain.GetTransactions();

            manipulateBufferedTransactions.WaitOne();
            manipulateChain.WaitOne();

            var participantHandler_Clone = participantHandler.Clone();

            success = chain.ValidateContextual(participantHandler_Clone, new List <Chain>()
            {
                this.chain
            });

            if (success)
            {
                var deletedBlocks        = this.chain.Add(chain);
                var bufferedTransactions = transactionBuffer.Peek().GetTransactions();
                var receivedTransaction  = chain.GetTransactions();

                foreach (var b in deletedBlocks)
                {
                    foreach (var t in b.TransactionList)
                    {
                        if (!bufferedTransactions.Where(bt => bt.TransactionId == t.TransactionId).Any() ||
                            !receivedTransaction.Where(rt => rt.TransactionId == t.TransactionId).Any())
                        {
                            transactionBuffer.RecordTransaction(t);
                        }
                    }
                }

                var transactionsToUnbuffer = bufferedTransactions.Where(t => receivedTransaction.Where(rt => rt.TransactionId == t.TransactionId).Any());
                foreach (var t in transactionsToUnbuffer)
                {
                    transactionBuffer.UnrecordTransaction(t);
                }

                participantHandler = new ParticipantHandler();
                this.chain.ProcessContracts(participantHandler, new List <Chain>()
                {
                });

                participantHandler_Buffered = participantHandler.Clone();
                transactionBuffer.Peek().ProcessContracts(participantHandler_Buffered, new List <Chain>()
                {
                    this.chain
                });
            }

            manipulateChain.Release();
            manipulateBufferedTransactions.Release();

            CLI.DisplayLine("Added " + transactions.Count + " transactions " + (success ? "successfully" : "unsuccessfully"));
            foreach (var t in transactions)
            {
                CLI.DisplayLine("\t" + t.AsString());
            }
            return(success);
        }
 public abstract bool ProcessContract(ParticipantHandler participantHandler, List <Chain> context);
 public abstract bool ValidateContextual(ParticipantHandler participantHandler, List <Chain> context);
Ejemplo n.º 28
0
        public bool ValidateContextual(ParticipantHandler participantHandler, List <Chain> context)
        {
            var blockIsValid = true;

            //Handle initializing block
            if (Index == 0)
            {
                blockIsValid &= TransactionList.Count() == 2;

                var registration = (from t in TransactionList
                                    where t.GetType() == typeof(PublisherRegistrationTransaction)
                                    select(PublisherRegistrationTransaction) t).FirstOrDefault();
                var vote = (from t in TransactionList
                            where t.GetType() == typeof(VotingTransaction)
                            select(VotingTransaction) t).FirstOrDefault();

                blockIsValid &= registration != null && vote != null;
                blockIsValid &= ValidateBlockIntegrity(registration.PublicKey);
                blockIsValid &= participantHandler.ProcessTransaction(registration, context);
                blockIsValid &= participantHandler.ProcessTransaction(vote, context);
            }
            //Handle new Publisher registration
            else if (TransactionList.Count() == 1 && TransactionList[0].GetType() == typeof(PublisherRegistrationTransaction))
            {
                var registration = (PublisherRegistrationTransaction)TransactionList[0];

                blockIsValid &= ValidateBlockIntegrity(registration.PublicKey);
                blockIsValid &= participantHandler.ProcessTransaction(registration, context);
            }
            //Handle regular block
            else if (participantHandler.HasPublisher(Publisher))
            {
                blockIsValid &= ValidateBlockIntegrity(participantHandler.GetPublisherKey(Publisher));

                foreach (var t in TransactionList)
                {
                    if (t.GetType() == typeof(PhysicianRegistrationTransaction))
                    {
                        PhysicianRegistrationTransaction temp = (PhysicianRegistrationTransaction)t;
                        blockIsValid &= temp.ValidateTransactionIntegrity(temp.PublicKey);
                        blockIsValid &= participantHandler.ProcessTransaction(temp, context);
                    }
                    else if (participantHandler.HasSender(t.SenderAddress))
                    {
                        blockIsValid &= t.ValidateTransactionIntegrity(participantHandler.GetSenderKey(t.SenderAddress));
                        blockIsValid &= participantHandler.ProcessTransaction(t, context);
                    }
                    else
                    {
                        blockIsValid = false;
                    }
                }
            }
            //Fallback - Block definitely invalid
            else
            {
                blockIsValid = false;
            }

            return(blockIsValid);
        }