private bool IsReleaseThresholdReached(ProposalOutput proposal,
                                               DAOProposalReleaseThreshold proposalReleaseThreshold)
        {
            var isRejected = IsProposalRejected(proposal, proposalReleaseThreshold);

            if (isRejected)
            {
                return(false);
            }

            var isAbstained = IsProposalAbstained(proposal, proposalReleaseThreshold);

            return(!isAbstained && CheckEnoughVoteAndApprovals(proposal, proposalReleaseThreshold));
        }
        private bool CheckEnoughVoteAndApprovals(ProposalOutput proposal,
                                                 DAOProposalReleaseThreshold proposalReleaseThreshold)
        {
            var isApprovalEnough =
                proposal.ApprovalCount >= proposalReleaseThreshold.MinimalApprovalThreshold;

            if (!isApprovalEnough)
            {
                return(false);
            }

            var isVoteThresholdReached =
                proposal.ApprovalCount.Add(proposal.AbstentionCount).Add(proposal.RejectionCount) >=
                proposalReleaseThreshold.MinimalVoteThreshold;

            return(isVoteThresholdReached);
        }
Ejemplo n.º 3
0
        public override ProposalOutput GetProposal(Hash proposalId)
        {
            var proposal = State.Proposals[proposalId];

            Assert(proposal != null, "Proposal not found.");

            var result = new ProposalOutput
            {
                ProposalId          = proposalId,
                ContractMethodName  = proposal.ContractMethodName,
                ExpiredTime         = proposal.ExpiredTime,
                OrganizationAddress = proposal.OrganizationAddress,
                Params    = proposal.Params,
                Proposer  = proposal.Proposer,
                ToAddress = proposal.ToAddress,
            };

            return(result);
        }
Ejemplo n.º 4
0
        public override ProposalOutput GetProposal(Hash proposalId)
        {
            var proposal = State.Proposals[proposalId];

            Assert(proposal != null, "Not found proposal.");
            var organization   = State.Organisations[proposal.OrganizationAddress];
            var minerList      = GetCurrentMinerList();
            var readyToRelease = IsReadyToRelease(proposal, organization, minerList);
            var result         = new ProposalOutput
            {
                ProposalId          = proposalId,
                ContractMethodName  = proposal.ContractMethodName,
                ExpiredTime         = proposal.ExpiredTime,
                OrganizationAddress = proposal.OrganizationAddress,
                Params       = proposal.Params,
                Proposer     = proposal.Proposer,
                ToAddress    = proposal.ToAddress,
                ToBeReleased = readyToRelease
            };

            return(result);
        }
 private bool IsProposalAbstained(ProposalOutput proposal, DAOProposalReleaseThreshold proposalReleaseThreshold)
 {
     return(proposal.AbstentionCount > proposalReleaseThreshold.MaximalAbstentionThreshold);
 }
 private bool IsProposalRejected(ProposalOutput proposal, DAOProposalReleaseThreshold proposalReleaseThreshold)
 {
     return(proposal.RejectionCount > proposalReleaseThreshold.MaximalRejectionThreshold);
 }
 private void AssertReleaseThresholdReached(ProposalOutput proposal,
                                            DAOProposalReleaseThreshold proposalReleaseThreshold)
 {
     Assert(IsReleaseThresholdReached(proposal, proposalReleaseThreshold), "No approved by certain members.");
 }