private void CreateInitialOrganizationForInitialControllerAddress() { SetContractStateRequired(State.ParliamentContract, SmartContractConstants.ParliamentContractSystemName); var proposalReleaseThreshold = new ProposalReleaseThreshold { MinimalApprovalThreshold = DefaultMinimalApprovalThreshold, MinimalVoteThreshold = DefaultMinimalVoteThresholdThreshold, MaximalAbstentionThreshold = DefaultMaximalAbstentionThreshold, MaximalRejectionThreshold = DefaultMaximalRejectionThreshold }; State.ParliamentContract.CreateOrganizationBySystemContract.Send( new Parliament.CreateOrganizationBySystemContractInput { OrganizationCreationInput = new Parliament.CreateOrganizationInput { ProposalReleaseThreshold = proposalReleaseThreshold, ProposerAuthorityRequired = false, ParliamentMemberProposingAllowed = true }, OrganizationAddressFeedbackMethod = nameof(SetInitialSideChainLifetimeControllerAddress) }); State.ParliamentContract.CreateOrganizationBySystemContract.Send( new Parliament.CreateOrganizationBySystemContractInput { OrganizationCreationInput = new Parliament.CreateOrganizationInput { ProposalReleaseThreshold = proposalReleaseThreshold, ProposerAuthorityRequired = true, ParliamentMemberProposingAllowed = true }, OrganizationAddressFeedbackMethod = nameof(SetInitialIndexingControllerAddress) }); }
public override Empty ChangeOrganizationThreshold(ProposalReleaseThreshold input) { var organization = State.Organisations[Context.Sender]; Assert(organization != null, "Organization not found."); organization.ProposalReleaseThreshold = input; Assert(Validate(organization), "Invalid organization."); State.Organisations[Context.Sender] = organization; return(new Empty()); }
public async Task Change_OrganizationThreshold_Test() { await InitializeParliamentContracts(); var minimalApprovalThreshold = 3000; var maximalAbstentionThreshold = 3000; var maximalRejectionThreshold = 3000; var minimalVoteThreshold = 3000; var organizationAddress = await CreateOrganizationAsync(minimalApprovalThreshold, maximalAbstentionThreshold, maximalRejectionThreshold, minimalVoteThreshold); var proposalId = await CreateProposalAsync(DefaultSenderKeyPair, organizationAddress); await ApproveAsync(InitialMinersKeyPairs[0], proposalId); var proposal = await ParliamentContractStub.GetProposal.CallAsync(proposalId); proposal.ToBeReleased.ShouldBeTrue(); { var proposalReleaseThresholdInput = new ProposalReleaseThreshold { MinimalVoteThreshold = 6000 }; var createProposalInput = new CreateProposalInput { ContractMethodName = nameof(ParliamentContractStub.ChangeOrganizationThreshold), ToAddress = ParliamentContractAddress, Params = proposalReleaseThresholdInput.ToByteString(), ExpiredTime = BlockTimeProvider.GetBlockTime().AddDays(2), OrganizationAddress = organizationAddress }; var changeProposal = await ParliamentContractStub.CreateProposal.SendAsync(createProposalInput); changeProposal.TransactionResult.Status.ShouldBe(TransactionResultStatus.Mined); var changeProposalId = changeProposal.Output; await ApproveAsync(InitialMinersKeyPairs[0], changeProposalId); var result = await ParliamentContractStub.Release.SendWithExceptionAsync(changeProposalId); result.TransactionResult.Error.ShouldContain("Invalid organization."); } { var proposalReleaseThresholdInput = new ProposalReleaseThreshold { MinimalVoteThreshold = 6000, MinimalApprovalThreshold = minimalApprovalThreshold }; var createProposalInput = new CreateProposalInput { ContractMethodName = nameof(ParliamentContractStub.ChangeOrganizationThreshold), ToAddress = ParliamentContractAddress, Params = proposalReleaseThresholdInput.ToByteString(), ExpiredTime = BlockTimeProvider.GetBlockTime().AddDays(2), OrganizationAddress = organizationAddress }; var changeProposal = await ParliamentContractStub.CreateProposal.SendAsync(createProposalInput); changeProposal.TransactionResult.Status.ShouldBe(TransactionResultStatus.Mined); var changeProposalId = changeProposal.Output; await ApproveAsync(InitialMinersKeyPairs[0], changeProposalId); var result = await ParliamentContractStub.Release.SendAsync(changeProposalId); result.TransactionResult.Status.ShouldBe(TransactionResultStatus.Mined); } }
public async Task Create_OrganizationFailed_Test() { await InitializeParliamentContracts(); var minimalApprovalThreshold = 6667; var maximalAbstentionThreshold = 2000; var maximalRejectionThreshold = 3000; var minimalVoteThreshold = 8000; var proposalReleaseThreshold = new ProposalReleaseThreshold { MinimalApprovalThreshold = minimalApprovalThreshold, MaximalAbstentionThreshold = maximalAbstentionThreshold, MaximalRejectionThreshold = maximalRejectionThreshold, MinimalVoteThreshold = minimalVoteThreshold }; var createOrganizationInput = new CreateOrganizationInput { ProposalReleaseThreshold = proposalReleaseThreshold.Clone() }; var minerParliamentContractStub = GetParliamentContractTester(InitialMinersKeyPairs[0]); { var transactionResult = await ParliamentContractStub.CreateOrganization.SendWithExceptionAsync(createOrganizationInput); transactionResult.TransactionResult.Error.ShouldContain("Unauthorized to create organization."); } { createOrganizationInput.ProposalReleaseThreshold = proposalReleaseThreshold; createOrganizationInput.ProposalReleaseThreshold.MinimalApprovalThreshold = 10000; createOrganizationInput.ProposalReleaseThreshold.MinimalVoteThreshold = 10000; createOrganizationInput.ProposalReleaseThreshold.MaximalAbstentionThreshold = 0; createOrganizationInput.ProposalReleaseThreshold.MaximalRejectionThreshold = 0; var transactionResult = await minerParliamentContractStub.CreateOrganization.SendAsync(createOrganizationInput); transactionResult.TransactionResult.Status.ShouldBe(TransactionResultStatus.Mined); } { createOrganizationInput.ProposalReleaseThreshold = proposalReleaseThreshold; createOrganizationInput.ProposalReleaseThreshold.MinimalApprovalThreshold = 0; var transactionResult = await minerParliamentContractStub.CreateOrganization.SendWithExceptionAsync(createOrganizationInput); transactionResult.TransactionResult.Status.ShouldBe(TransactionResultStatus.Failed); transactionResult.TransactionResult.Error.Contains("Invalid organization.").ShouldBeTrue(); } { createOrganizationInput.ProposalReleaseThreshold = proposalReleaseThreshold; createOrganizationInput.ProposalReleaseThreshold.MinimalApprovalThreshold = -1; var transactionResult = await minerParliamentContractStub.CreateOrganization.SendWithExceptionAsync(createOrganizationInput); transactionResult.TransactionResult.Status.ShouldBe(TransactionResultStatus.Failed); transactionResult.TransactionResult.Error.Contains("Invalid organization.").ShouldBeTrue(); } { createOrganizationInput.ProposalReleaseThreshold = proposalReleaseThreshold; createOrganizationInput.ProposalReleaseThreshold.MaximalAbstentionThreshold = -1; var transactionResult = await minerParliamentContractStub.CreateOrganization.SendWithExceptionAsync(createOrganizationInput); transactionResult.TransactionResult.Status.ShouldBe(TransactionResultStatus.Failed); transactionResult.TransactionResult.Error.Contains("Invalid organization.").ShouldBeTrue(); } { createOrganizationInput.ProposalReleaseThreshold = proposalReleaseThreshold; createOrganizationInput.ProposalReleaseThreshold.MaximalAbstentionThreshold = 3334; var transactionResult = await minerParliamentContractStub.CreateOrganization.SendWithExceptionAsync(createOrganizationInput); transactionResult.TransactionResult.Status.ShouldBe(TransactionResultStatus.Failed); transactionResult.TransactionResult.Error.Contains("Invalid organization.").ShouldBeTrue(); } { createOrganizationInput.ProposalReleaseThreshold = proposalReleaseThreshold; createOrganizationInput.ProposalReleaseThreshold.MaximalRejectionThreshold = 3334; var transactionResult = await minerParliamentContractStub.CreateOrganization.SendWithExceptionAsync(createOrganizationInput); transactionResult.TransactionResult.Status.ShouldBe(TransactionResultStatus.Failed); transactionResult.TransactionResult.Error.Contains("Invalid organization.").ShouldBeTrue(); } { createOrganizationInput.ProposalReleaseThreshold = proposalReleaseThreshold; createOrganizationInput.ProposalReleaseThreshold.MinimalApprovalThreshold = 10001; var transactionResult = await minerParliamentContractStub.CreateOrganization.SendWithExceptionAsync(createOrganizationInput); transactionResult.TransactionResult.Status.ShouldBe(TransactionResultStatus.Failed); transactionResult.TransactionResult.Error.Contains("Invalid organization.").ShouldBeTrue(); } }