コード例 #1
0
        public async Task SetRequiredAcsInContracts_Test()
        {
            var contractFeeChargingPolicy = new RequiredAcsInContracts
            {
                AcsList = { "acsx", "acsy" }
            };
            var organizationAddress = await GetParliamentDefaultOrganizationAddressAsync();

            var proposalId = await CreateProposalAsync(organizationAddress, new SetConfigurationInput
            {
                Key   = RequiredAcsInContractsConfigurationNameProvider.Name,
                Value = contractFeeChargingPolicy.ToByteString()
            },
                                                       nameof(ConfigurationContainer.ConfigurationStub.SetConfiguration));

            proposalId.ShouldNotBeNull();
            await ApproveWithMinersAsync(proposalId);

            var releaseTxResult = await ReleaseProposalAsync(proposalId);

            releaseTxResult.Status.ShouldBe(TransactionResultStatus.Mined);
            var actual = await Tester.CallContractMethodAsync(ConfigurationContractAddress,
                                                              nameof(ConfigurationContainer.ConfigurationStub.GetConfiguration),
                                                              new StringValue
            {
                Value = RequiredAcsInContractsConfigurationNameProvider.Name
            });

            RequiredAcsInContracts.Parser.ParseFrom(BytesValue.Parser.ParseFrom(actual).Value)
            .ShouldBe(contractFeeChargingPolicy);
        }
コード例 #2
0
        public async Task <RequiredAcs> GetRequiredAcsInContractsAsync(Hash blockHash, long blockHeight)
        {
            var tx = new Transaction
            {
                From       = FromAddress,
                To         = ConfigurationContractAddress,
                MethodName = nameof(ConfigurationContainer.ConfigurationStub.GetConfiguration),
                Params     = new StringValue {
                    Value = RequiredAcsInContractsConfigurationNameProvider.Name
                }.ToByteString(),
                Signature = ByteString.CopyFromUtf8(KernelConstants.SignaturePlaceholder)
            };

            var returned = await _transactionReadOnlyExecutionService.ExecuteAsync <BytesValue>(
                new ChainContext
            {
                BlockHash   = blockHash,
                BlockHeight = blockHeight
            }, tx, TimestampHelper.GetUtcNow(), false);

            var requiredAcsInContracts = new RequiredAcsInContracts();

            requiredAcsInContracts.MergeFrom(returned.Value);
            return(new RequiredAcs
            {
                AcsList = requiredAcsInContracts.AcsList.ToList(),
                RequireAll = requiredAcsInContracts.RequireAll
            });
        }
コード例 #3
0
        public async Task SetRequiredAcsInContracts_NoPermission()
        {
            var transactionResult = await ExecuteContractWithMiningAsync(ConfigurationContractAddress,
                                                                         nameof(ConfigurationContainer.ConfigurationStub.SetRequiredAcsInContracts),
                                                                         new RequiredAcsInContracts());

            var test = new RequiredAcsInContracts();

            transactionResult.Status.ShouldBe(TransactionResultStatus.Failed);
            transactionResult.Error.ShouldContain("No permission.");
        }
コード例 #4
0
        GenerateConfigurationInitializationCallList(ChainInitializationData chainInitializationData)
        {
            var configurationContractMethodCallList = new SystemContractDeploymentInput.Types.SystemTransactionMethodCallList();
            var requiredAcsInContracts = new RequiredAcsInContracts();

            if (!chainInitializationData.ChainCreatorPrivilegePreserved)
            {
                requiredAcsInContracts.AcsList.AddRange(_contractOptions.ContractFeeStrategyAcsList);
            }
            configurationContractMethodCallList.Add(nameof(ConfigurationContainer.ConfigurationStub.SetRequiredAcsInContracts),
                                                    requiredAcsInContracts);
            return(configurationContractMethodCallList);
        }
コード例 #5
0
        public async Task <RequiredAcs> GetRequiredAcsInContractsAsync(Hash blockHash, long blockHeight)
        {
            var chainContext = new ChainContext
            {
                BlockHash   = blockHash,
                BlockHeight = blockHeight
            };

            var returned =
                await _configurationService.GetConfigurationDataAsync(
                    RequiredAcsInContractsConfigurationName, chainContext);

            var requiredAcsInContracts = new RequiredAcsInContracts();

            requiredAcsInContracts.MergeFrom(returned);
            return(new RequiredAcs
            {
                AcsList = requiredAcsInContracts.AcsList.ToList(),
                RequireAll = requiredAcsInContracts.RequireAll
            });
        }
コード例 #6
0
        public async Task SetRequiredAcsInContracts_Test()
        {
            var contractFeeChargingPolicy = new RequiredAcsInContracts
            {
                AcsList = { "acsx", "acsy" }
            };
            var organizationAddress = await GetParliamentDefaultOrganizationAddressAsync();

            var proposalId = await CreateProposalAsync(organizationAddress, contractFeeChargingPolicy,
                                                       nameof(ConfigurationContainer.ConfigurationStub.SetRequiredAcsInContracts));

            proposalId.ShouldNotBeNull();
            await ApproveWithMinersAsync(proposalId);

            var releaseTxResult = await ReleaseProposalAsync(proposalId);

            releaseTxResult.Status.ShouldBe(TransactionResultStatus.Mined);
            var actual = await Tester.CallContractMethodAsync(ConfigurationContractAddress,
                                                              nameof(ConfigurationContainer.ConfigurationStub.GetRequiredAcsInContracts), new Empty());

            RequiredAcsInContracts.Parser.ParseFrom(actual).ShouldBe(contractFeeChargingPolicy);
        }
コード例 #7
0
 public override Empty SetRequiredAcsInContracts(RequiredAcsInContracts input)
 {
     CheckSenderIsParliamentOrZeroContract();
     State.RequiredAcsInContracts.Value = input;
     return(new Empty());
 }