Esempio n. 1
0
        public override Hash CreateProposal(CreateProposalInput input)
        {
            var organization = State.Organisations[input.OrganizationAddress];

            Assert(organization != null, "No registered organization.");
            AssertSenderIsAuthorizedProposer(organization);

            Hash hash     = Hash.FromTwoHashes(Hash.FromMessage(input), Context.TransactionId);
            var  proposal = new ProposalInfo
            {
                ContractMethodName  = input.ContractMethodName,
                ExpiredTime         = input.ExpiredTime,
                Params              = input.Params,
                ToAddress           = input.ToAddress,
                OrganizationAddress = input.OrganizationAddress,
                ProposalId          = hash,
                Proposer            = Context.Sender
            };

            Assert(Validate(proposal), "Invalid proposal.");
            Assert(State.Proposals[hash] == null, "Proposal already exists.");
            State.Proposals[hash] = proposal;
            Context.Fire(new ProposalCreated {
                ProposalId = hash
            });

            return(hash);
        }
Esempio n. 2
0
        public override Hash CreateProposal(CreateProposalInput input)
        {
            AssertIsAuthorizedProposer(input.OrganizationAddress, Context.Sender);
            var proposalId = CreateNewProposal(input);

            return(proposalId);
        }
Esempio n. 3
0
        public override Hash CreateProposal(CreateProposalInput proposal)
        {
            var organization = State.Organisations[proposal.OrganizationAddress];

            Assert(organization != null, "No registered organization.");
            CheckProposerAuthority(organization);
            Assert(
                !string.IsNullOrWhiteSpace(proposal.ContractMethodName) &&
                proposal.ToAddress != null &&
                proposal.OrganizationAddress != null &&
                proposal.ExpiredTime != null, "Invalid proposal.");
            Assert(Context.CurrentBlockTime < proposal.ExpiredTime, "Expired proposal.");
            Hash hash = Hash.FromMessage(proposal);

            Assert(State.Proposals[hash] == null, "Proposal already exists.");
            State.Proposals[hash] = new ProposalInfo
            {
                ContractMethodName  = proposal.ContractMethodName,
                ExpiredTime         = proposal.ExpiredTime,
                Params              = proposal.Params,
                ToAddress           = proposal.ToAddress,
                OrganizationAddress = proposal.OrganizationAddress,
                ProposalId          = hash,
                Proposer            = Context.Sender
            };
            return(Hash.FromMessage(proposal));
        }
Esempio n. 4
0
        public override Hash CreateProposal(CreateProposalInput input)
        {
            // check authorization of proposer public key
            var organization = State.Organisations[input.OrganizationAddress];

            Assert(organization != null, "No registered organization.");
            AssertSenderIsAuthorizedProposer(organization);
            Hash hash     = Hash.FromMessage(input);
            var  proposal = new ProposalInfo
            {
                ContractMethodName  = input.ContractMethodName,
                ExpiredTime         = input.ExpiredTime,
                Params              = input.Params,
                ToAddress           = input.ToAddress,
                OrganizationAddress = input.OrganizationAddress,
                ProposalId          = hash,
                Proposer            = Context.Sender
            };

            Assert(Validate(proposal), "Invalid proposal.");
            //TODO: Proposals with the same input is not supported.
            Assert(State.Proposals[hash] == null, "Proposal already exists.");
            State.Proposals[hash] = proposal;
            return(hash);
        }
Esempio n. 5
0
        public override Hash CreateProposal(CreateProposalInput proposal)
        {
            // check authorization of proposer public key
            CheckProposerAuthority(proposal.OrganizationAddress);
            Assert(
                !string.IsNullOrWhiteSpace(proposal.ContractMethodName) &&
                proposal.ToAddress != null &&
                proposal.ExpiredTime != null, "Invalid proposal.");
            Assert(Context.CurrentBlockTime < proposal.ExpiredTime, "Expired proposal.");
            //TODO: Proposals with the same input is not supported.
            Hash hash = Hash.FromMessage(proposal);

            Assert(State.Proposals[hash] == null, "Proposal already exists.");
            State.Proposals[hash] = new ProposalInfo
            {
                ContractMethodName  = proposal.ContractMethodName,
                ExpiredTime         = proposal.ExpiredTime,
                Params              = proposal.Params,
                ToAddress           = proposal.ToAddress,
                OrganizationAddress = proposal.OrganizationAddress,
                ProposalId          = hash,
                Proposer            = Context.Sender
            };

            return(hash);
        }
Esempio n. 6
0
        public async Task TransferAuthorizationForVoteInterest_Test()
        {
            var newInterest = new VoteWeightInterestList();

            newInterest.VoteWeightInterestInfos.Add(new VoteWeightInterest
            {
                Capital  = 1000,
                Interest = 16,
                Day      = 400
            });
            var updateInterestRet = (await TreasuryContractStub.SetVoteWeightInterest.SendAsync(newInterest)).TransactionResult;

            updateInterestRet.Status.ShouldBe(TransactionResultStatus.Failed);
            var newParliament = new Parliament.CreateOrganizationInput
            {
                ProposerAuthorityRequired = false,
                ProposalReleaseThreshold  = new Acs3.ProposalReleaseThreshold
                {
                    MaximalAbstentionThreshold = 1,
                    MaximalRejectionThreshold  = 1,
                    MinimalApprovalThreshold   = 1,
                    MinimalVoteThreshold       = 1
                },
                ParliamentMemberProposingAllowed = false
            };
            var bpParliamentStub    = GetParliamentContractTester(InitialCoreDataCenterKeyPairs[0]);
            var createNewParliament =
                (await bpParliamentStub.CreateOrganization.SendAsync(newParliament)).TransactionResult;

            createNewParliament.Status.ShouldBe(TransactionResultStatus.Mined);
            var calculatedNewParliamentAddress = await ParliamentContractStub.CalculateOrganizationAddress.CallAsync(newParliament);

            var newAuthority = new AuthorityInfo
            {
                OwnerAddress    = calculatedNewParliamentAddress,
                ContractAddress = ParliamentContractAddress
            };

            await ExecuteProposalTransaction(Tester, TreasuryContractAddress, nameof(TreasuryContractStub.ChangeVoteWeightInterestController), newAuthority);

            var proposalToUpdateInterest = new Acs3.CreateProposalInput
            {
                OrganizationAddress = calculatedNewParliamentAddress,
                ContractMethodName  = nameof(TreasuryContractContainer.TreasuryContractStub.SetVoteWeightInterest),
                ExpiredTime         = TimestampHelper.GetUtcNow().AddHours(1),
                Params    = newInterest.ToByteString(),
                ToAddress = TreasuryContractAddress
            };
            var createResult = await bpParliamentStub.CreateProposal.SendAsync(proposalToUpdateInterest);

            createResult.TransactionResult.Status.ShouldBe(TransactionResultStatus.Mined);

            var proposalHash = Hash.Parser.ParseFrom(createResult.TransactionResult.ReturnValue);
            await bpParliamentStub.Approve.SendAsync(proposalHash);

            await ParliamentContractStub.Release.SendAsync(proposalHash);

            var interestList = await TreasuryContractStub.GetVoteWeightSetting.CallAsync(new Empty());

            interestList.VoteWeightInterestInfos.Count.ShouldBe(1);
            interestList.VoteWeightInterestInfos[0].Capital.ShouldBe(1000);
            interestList.VoteWeightInterestInfos[0].Interest.ShouldBe(16);
            interestList.VoteWeightInterestInfos[0].Day.ShouldBe(400);
        }