public override Hash CreateProposal(CreateProposalInput input) { var organization = State.Organisations[input.OrganizationAddress]; Assert(organization != null, "No registered organization."); AssertSenderIsAuthorizedProposer(organization); Hash hash = Hash.FromTwoHashes(Hash.FromMessage(input), Context.TransactionId); var proposal = new ProposalInfo { ContractMethodName = input.ContractMethodName, ExpiredTime = input.ExpiredTime, Params = input.Params, ToAddress = input.ToAddress, OrganizationAddress = input.OrganizationAddress, ProposalId = hash, Proposer = Context.Sender }; Assert(Validate(proposal), "Invalid proposal."); Assert(State.Proposals[hash] == null, "Proposal already exists."); State.Proposals[hash] = proposal; Context.Fire(new ProposalCreated { ProposalId = hash }); return(hash); }
public override Hash CreateProposal(CreateProposalInput input) { AssertIsAuthorizedProposer(input.OrganizationAddress, Context.Sender); var proposalId = CreateNewProposal(input); return(proposalId); }
public override Hash CreateProposal(CreateProposalInput proposal) { var organization = State.Organisations[proposal.OrganizationAddress]; Assert(organization != null, "No registered organization."); CheckProposerAuthority(organization); Assert( !string.IsNullOrWhiteSpace(proposal.ContractMethodName) && proposal.ToAddress != null && proposal.OrganizationAddress != null && proposal.ExpiredTime != null, "Invalid proposal."); Assert(Context.CurrentBlockTime < proposal.ExpiredTime, "Expired proposal."); Hash hash = Hash.FromMessage(proposal); Assert(State.Proposals[hash] == null, "Proposal already exists."); State.Proposals[hash] = new ProposalInfo { ContractMethodName = proposal.ContractMethodName, ExpiredTime = proposal.ExpiredTime, Params = proposal.Params, ToAddress = proposal.ToAddress, OrganizationAddress = proposal.OrganizationAddress, ProposalId = hash, Proposer = Context.Sender }; return(Hash.FromMessage(proposal)); }
public override Hash CreateProposal(CreateProposalInput input) { // check authorization of proposer public key var organization = State.Organisations[input.OrganizationAddress]; Assert(organization != null, "No registered organization."); AssertSenderIsAuthorizedProposer(organization); Hash hash = Hash.FromMessage(input); var proposal = new ProposalInfo { ContractMethodName = input.ContractMethodName, ExpiredTime = input.ExpiredTime, Params = input.Params, ToAddress = input.ToAddress, OrganizationAddress = input.OrganizationAddress, ProposalId = hash, Proposer = Context.Sender }; Assert(Validate(proposal), "Invalid proposal."); //TODO: Proposals with the same input is not supported. Assert(State.Proposals[hash] == null, "Proposal already exists."); State.Proposals[hash] = proposal; return(hash); }
public override Hash CreateProposal(CreateProposalInput proposal) { // check authorization of proposer public key CheckProposerAuthority(proposal.OrganizationAddress); Assert( !string.IsNullOrWhiteSpace(proposal.ContractMethodName) && proposal.ToAddress != null && proposal.ExpiredTime != null, "Invalid proposal."); Assert(Context.CurrentBlockTime < proposal.ExpiredTime, "Expired proposal."); //TODO: Proposals with the same input is not supported. Hash hash = Hash.FromMessage(proposal); Assert(State.Proposals[hash] == null, "Proposal already exists."); State.Proposals[hash] = new ProposalInfo { ContractMethodName = proposal.ContractMethodName, ExpiredTime = proposal.ExpiredTime, Params = proposal.Params, ToAddress = proposal.ToAddress, OrganizationAddress = proposal.OrganizationAddress, ProposalId = hash, Proposer = Context.Sender }; return(hash); }
public async Task TransferAuthorizationForVoteInterest_Test() { var newInterest = new VoteWeightInterestList(); newInterest.VoteWeightInterestInfos.Add(new VoteWeightInterest { Capital = 1000, Interest = 16, Day = 400 }); var updateInterestRet = (await TreasuryContractStub.SetVoteWeightInterest.SendAsync(newInterest)).TransactionResult; updateInterestRet.Status.ShouldBe(TransactionResultStatus.Failed); var newParliament = new Parliament.CreateOrganizationInput { ProposerAuthorityRequired = false, ProposalReleaseThreshold = new Acs3.ProposalReleaseThreshold { MaximalAbstentionThreshold = 1, MaximalRejectionThreshold = 1, MinimalApprovalThreshold = 1, MinimalVoteThreshold = 1 }, ParliamentMemberProposingAllowed = false }; var bpParliamentStub = GetParliamentContractTester(InitialCoreDataCenterKeyPairs[0]); var createNewParliament = (await bpParliamentStub.CreateOrganization.SendAsync(newParliament)).TransactionResult; createNewParliament.Status.ShouldBe(TransactionResultStatus.Mined); var calculatedNewParliamentAddress = await ParliamentContractStub.CalculateOrganizationAddress.CallAsync(newParliament); var newAuthority = new AuthorityInfo { OwnerAddress = calculatedNewParliamentAddress, ContractAddress = ParliamentContractAddress }; await ExecuteProposalTransaction(Tester, TreasuryContractAddress, nameof(TreasuryContractStub.ChangeVoteWeightInterestController), newAuthority); var proposalToUpdateInterest = new Acs3.CreateProposalInput { OrganizationAddress = calculatedNewParliamentAddress, ContractMethodName = nameof(TreasuryContractContainer.TreasuryContractStub.SetVoteWeightInterest), ExpiredTime = TimestampHelper.GetUtcNow().AddHours(1), Params = newInterest.ToByteString(), ToAddress = TreasuryContractAddress }; var createResult = await bpParliamentStub.CreateProposal.SendAsync(proposalToUpdateInterest); createResult.TransactionResult.Status.ShouldBe(TransactionResultStatus.Mined); var proposalHash = Hash.Parser.ParseFrom(createResult.TransactionResult.ReturnValue); await bpParliamentStub.Approve.SendAsync(proposalHash); await ParliamentContractStub.Release.SendAsync(proposalHash); var interestList = await TreasuryContractStub.GetVoteWeightSetting.CallAsync(new Empty()); interestList.VoteWeightInterestInfos.Count.ShouldBe(1); interestList.VoteWeightInterestInfos[0].Capital.ShouldBe(1000); interestList.VoteWeightInterestInfos[0].Interest.ShouldBe(16); interestList.VoteWeightInterestInfos[0].Day.ShouldBe(400); }