private async Task VoteToReferendum(Hash input) { var organizations = await GetControllerForUserFee(); var referendumProposal = new CreateProposalInput { ToAddress = AssociationAddress, Params = input.ToByteString(), OrganizationAddress = organizations.ReferendumController, ContractMethodName = nameof(AssociationContractContainer.AssociationContractStub.Approve), ExpiredTime = TimestampHelper.GetUtcNow().AddHours(1) }; var parliamentProposal = new CreateProposalInput { ToAddress = ReferendumAddress, Params = referendumProposal.ToByteString(), OrganizationAddress = organizations.ParliamentController, ContractMethodName = nameof(ReferendumContractContainer.ReferendumContractStub.CreateProposal), ExpiredTime = TimestampHelper.GetUtcNow().AddHours(1) }; var parliamentCreateProposal = await MainChainTester.ExecuteContractWithMiningAsync(ParliamentAddress, nameof(ParliamentContractContainer.ParliamentContractStub.CreateProposal), parliamentProposal); parliamentCreateProposal.Status.ShouldBe(TransactionResultStatus.Mined); var parliamentProposalId = new Hash(); parliamentProposalId.MergeFrom(parliamentCreateProposal.ReturnValue); await ApproveWithMinersAsync(parliamentProposalId, ParliamentAddress, MainChainTester); var ret = await ReleaseProposalAsync(parliamentProposalId, ParliamentAddress, MainChainTester); var id = ProposalCreated.Parser .ParseFrom(ret.Logs.First(l => l.Name.Contains(nameof(ProposalCreated))) .NonIndexed).ProposalId; await MainChainTester.ExecuteContractWithMiningAsync(ReferendumAddress, nameof(ReferendumContractContainer.ReferendumContractStub.Approve), id); parliamentProposal = new CreateProposalInput { ToAddress = ReferendumAddress, Params = id.ToByteString(), OrganizationAddress = organizations.ParliamentController, ContractMethodName = nameof(ReferendumContractContainer.ReferendumContractStub.Release), ExpiredTime = TimestampHelper.GetUtcNow().AddHours(1) }; parliamentCreateProposal = await MainChainTester.ExecuteContractWithMiningAsync(ParliamentAddress, nameof(ParliamentContractContainer.ParliamentContractStub.CreateProposal), parliamentProposal); parliamentCreateProposal.Status.ShouldBe(TransactionResultStatus.Mined); parliamentProposalId = new Hash(); parliamentProposalId.MergeFrom(parliamentCreateProposal.ReturnValue); await ApproveWithMinersAsync(parliamentProposalId, ParliamentAddress, MainChainTester); await ReleaseProposalAsync(parliamentProposalId, ParliamentAddress, MainChainTester); }
private async Task <Hash> CreateToRootForUserFeeByTwoLayer(CoefficientFromSender input) { var organizations = await GetControllerForUserFee(); var createNestProposalInput = new CreateProposalInput { ToAddress = TokenContractAddress, Params = input.ToByteString(), OrganizationAddress = organizations.RootController, ContractMethodName = nameof(TokenContractContainer.TokenContractStub.UpdateCoefficientFromSender), ExpiredTime = TimestampHelper.GetUtcNow().AddHours(1) }; var createProposalInput = new CreateProposalInput { ToAddress = AssociationAddress, Params = createNestProposalInput.ToByteString(), OrganizationAddress = organizations.ParliamentController, ContractMethodName = nameof(AssociationContractContainer.AssociationContractStub.CreateProposal), ExpiredTime = TimestampHelper.GetUtcNow().AddHours(1) }; var parliamentCreateProposal = await MainChainTester.ExecuteContractWithMiningAsync(ParliamentAddress, nameof(ParliamentContractContainer.ParliamentContractStub.CreateProposal), createProposalInput); parliamentCreateProposal.Status.ShouldBe(TransactionResultStatus.Mined); var parliamentProposalId = new Hash(); parliamentProposalId.MergeFrom(parliamentCreateProposal.ReturnValue); await ApproveWithMinersAsync(parliamentProposalId, ParliamentAddress, MainChainTester); var releaseRet = await ReleaseProposalAsync(parliamentProposalId, ParliamentAddress, MainChainTester); var id = ProposalCreated.Parser .ParseFrom(releaseRet.Logs.First(l => l.Name.Contains(nameof(ProposalCreated))) .NonIndexed).ProposalId; return(id); }
private async Task <Hash> ApproveToRootForDeveloperFeeByMiddleLayer(Hash input) { var organizations = await GetControllerForDeveloperFee(); var approveMidProposalInput = new CreateProposalInput { ToAddress = AssociationAddress, Params = input.ToByteString(), OrganizationAddress = organizations.DeveloperController, ContractMethodName = nameof(AssociationContractContainer.AssociationContractStub.Approve), ExpiredTime = TimestampHelper.GetUtcNow().AddHours(1) }; var approveLeafProposalInput = new CreateProposalInput { ToAddress = AssociationAddress, Params = approveMidProposalInput.ToByteString(), OrganizationAddress = organizations.ParliamentController, ContractMethodName = nameof(AssociationContractContainer.AssociationContractStub.CreateProposal), ExpiredTime = TimestampHelper.GetUtcNow().AddHours(1) }; var parliamentCreateProposal = await MainChainTester.ExecuteContractWithMiningAsync(ParliamentAddress, nameof(ParliamentContractContainer.ParliamentContractStub.CreateProposal), approveLeafProposalInput); parliamentCreateProposal.Status.ShouldBe(TransactionResultStatus.Mined); var parliamentProposalId = new Hash(); parliamentProposalId.MergeFrom(parliamentCreateProposal.ReturnValue); await ApproveWithMinersAsync(parliamentProposalId, ParliamentAddress, MainChainTester); var newCreateProposalRet = await ReleaseProposalAsync(parliamentProposalId, ParliamentAddress, MainChainTester); var middleProposalId = ProposalCreated.Parser .ParseFrom(newCreateProposalRet.Logs.First(l => l.Name.Contains(nameof(ProposalCreated))) .NonIndexed).ProposalId; return(middleProposalId); }