示例#1
0
        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);
        }
示例#2
0
        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);
        }
示例#3
0
        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);
        }