Пример #1
0
        public override Empty Initialize(InitializeInput input)
        {
            Assert(!State.Initialized.Value, "Already initialized.");
            State.Initialized.Value = true;

            var proposerWhiteList = new ProposerWhiteList();

            if (input.PrivilegedProposer != null)
            {
                proposerWhiteList.Proposers.Add(input.PrivilegedProposer);
            }

            State.ProposerWhiteList.Value = proposerWhiteList;
            var organizationInput = new CreateOrganizationInput
            {
                ProposalReleaseThreshold = new ProposalReleaseThreshold
                {
                    MinimalApprovalThreshold   = DefaultOrganizationMinimalApprovalThreshold,
                    MinimalVoteThreshold       = DefaultOrganizationMinimalVoteThresholdThreshold,
                    MaximalAbstentionThreshold = DefaultOrganizationMaximalAbstentionThreshold,
                    MaximalRejectionThreshold  = DefaultOrganizationMaximalRejectionThreshold
                },
                ProposerAuthorityRequired        = input.ProposerAuthorityRequired,
                ParliamentMemberProposingAllowed = true
            };
            var defaultOrganizationAddress = CreateNewOrganization(organizationInput);

            State.DefaultOrganizationAddress.Value = defaultOrganizationAddress;
            return(new Empty());
        }
Пример #2
0
        public override Empty Initialize(InitializeInput input)
        {
            Assert(!State.Initialized.Value, "Already initialized.");
            State.Initialized.Value = true;
            var organizationInput = new CreateOrganizationInput
            {
                ReleaseThreshold = input.GenesisOwnerReleaseThreshold
            };

            var proposerWhiteList = new ProposerWhiteList();

            if (input.PrivilegedProposer != null)
            {
                proposerWhiteList.Proposers.Add(input.PrivilegedProposer);
            }

            State.ProposerWhiteList.Value = proposerWhiteList;

            var defaultOrganizationAddress = CreateOrganization(organizationInput);

            State.GenesisContract.Value            = Context.GetZeroSmartContractAddress();
            State.DefaultOrganizationAddress.Value = defaultOrganizationAddress;
            State.GenesisContract.ChangeGenesisOwner.Send(defaultOrganizationAddress);
            State.ProposerAuthorityRequired.Value = input.ProposerAuthorityRequired;

            return(new Empty());
        }
Пример #3
0
        public override ProposerWhiteList GetProposerWhiteList(Empty input)
        {
            var res       = new ProposerWhiteList();
            var whitelist = State.ProposerWhiteList.Value;

            res.Proposers.AddRange(whitelist.Proposers);
            return(res);
        }
Пример #4
0
        public override Empty ChangeOrganizationProposerWhiteList(ProposerWhiteList input)
        {
            var organization = State.Organisations[Context.Sender];

            Assert(organization != null, "Organization not found.");
            organization.ProposerWhiteList = input;
            Assert(Validate(organization), "Invalid organization.");
            State.Organisations[Context.Sender] = organization;
            return(new Empty());
        }
        public async Task Change_OrganizationProposalWhiteList_Test()
        {
            var organizationAddress = await GetDefaultOrganizationAddressAsync();

            var result = await Tester.ExecuteContractWithMiningAsync(ParliamentAddress,
                                                                     nameof(ParliamentContractContainer.ParliamentContractStub.GetProposerWhiteListContext), new Empty());

            var proposers = GetProposerWhiteListContextOutput.Parser.ParseFrom(result.ReturnValue).Proposers;

            proposers.Count.ShouldBe(1);
            proposers.Contains(Tester.GetCallOwnerAddress()).ShouldBeTrue();
            var ecKeyPair = CryptoHelper.GenerateKeyPair();

            var proposerWhiteList = new ProposerWhiteList
            {
                Proposers = { Tester.GetAddress(ecKeyPair) }
            };
            var proposalInput = CreateParliamentProposalInput(proposerWhiteList, organizationAddress);
            var createResult  = await Tester.ExecuteContractWithMiningAsync(ParliamentAddress,
                                                                            nameof(ParliamentContractContainer.ParliamentContractStub.CreateProposal),
                                                                            proposalInput);

            createResult.Status.ShouldBe(TransactionResultStatus.Mined);
            var proposalId = Hash.Parser.ParseFrom(createResult.ReturnValue);

            var miner = Tester.CreateNewContractTester(Tester.InitialMinerList[0]);

            (await miner.ExecuteContractWithMiningAsync(ParliamentAddress,
                                                        nameof(ParliamentContractContainer.ParliamentContractStub.Approve), proposalId)).Status
            .ShouldBe(TransactionResultStatus.Mined);
            miner = Tester.CreateNewContractTester(Tester.InitialMinerList[1]);
            (await miner.ExecuteContractWithMiningAsync(ParliamentAddress,
                                                        nameof(ParliamentContractContainer.ParliamentContractStub.Approve), proposalId)).Status
            .ShouldBe(TransactionResultStatus.Mined);
            miner = Tester.CreateNewContractTester(Tester.InitialMinerList[2]);
            (await miner.ExecuteContractWithMiningAsync(ParliamentAddress,
                                                        nameof(ParliamentContractContainer.ParliamentContractStub.Approve), proposalId)).Status
            .ShouldBe(TransactionResultStatus.Mined);

            var releaseResult = await Tester.ExecuteContractWithMiningAsync(ParliamentAddress,
                                                                            nameof(ParliamentContractContainer.ParliamentContractStub.Release), proposalId);

            releaseResult.Status.ShouldBe(TransactionResultStatus.Mined);

            result = await Tester.ExecuteContractWithMiningAsync(ParliamentAddress,
                                                                 nameof(ParliamentContractContainer.ParliamentContractStub.GetProposerWhiteListContext), new Empty());

            proposers = GetProposerWhiteListContextOutput.Parser.ParseFrom(result.ReturnValue).Proposers;
            proposers.Count.ShouldBe(1);
            proposers.Contains(Tester.GetAddress(ecKeyPair)).ShouldBeTrue();
            proposers.Contains(Tester.GetCallOwnerAddress()).ShouldBeFalse();
        }
Пример #6
0
        public override Empty ChangeOrganizationProposerWhiteList(ProposerWhiteList input)
        {
            var defaultOrganizationAddress = State.DefaultOrganizationAddress.Value;

            Assert(defaultOrganizationAddress == Context.Sender, "No permission.");
            var organization = State.Organisations[defaultOrganizationAddress];

            Assert(
                input.Proposers.Count > 0 || !organization.ProposerAuthorityRequired ||
                organization.ParliamentMemberProposingAllowed, "White list can't be empty.");
            State.ProposerWhiteList.Value = input;
            Context.Fire(new OrganizationWhiteListChanged
            {
                OrganizationAddress = Context.Sender,
                ProposerWhiteList   = input
            });
            return(new Empty());
        }
 public static int Count(this ProposerWhiteList proposerWhiteList)
 {
     return(proposerWhiteList.Proposers.Count);
 }
 public static bool Contains(this ProposerWhiteList proposerWhiteList, Address address)
 {
     return(proposerWhiteList.Proposers.Contains(address));
 }
 public static bool Empty(this ProposerWhiteList proposerWhiteList)
 {
     return(proposerWhiteList.Count() == 0);
 }
 public static bool AnyDuplicate(this ProposerWhiteList proposerWhiteList)
 {
     return(proposerWhiteList.Proposers.GroupBy(p => p).Any(g => g.Count() > 1));
 }
Пример #11
0
 public override Empty ChangeOrganizationProposerWhiteList(ProposerWhiteList input)
 {
     Assert(State.DefaultOrganizationAddress.Value == Context.Sender, "No permission.");
     State.ProposerWhiteList.Value = input;
     return(new Empty());
 }