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()); }
private async Task <Address> CreateOrganizationAsync() { var reviewer1 = new Reviewer { Address = Reviewer1, Weight = 1 }; var reviewer2 = new Reviewer { Address = Reviewer2, Weight = 2 }; var reviewer3 = new Reviewer { Address = Reviewer3, Weight = 3 }; var createOrganizationInput = new CreateOrganizationInput { Reviewers = { reviewer1, reviewer2, reviewer3 }, ReleaseThreshold = 2, ProposerThreshold = 2 }; var transactionResult = await AssociationAuthContractStub.CreateOrganization.SendAsync(createOrganizationInput); transactionResult.TransactionResult.Status.ShouldBe(TransactionResultStatus.Mined); return(transactionResult.Output); }
private async Task <Address> CreateOrganizationAsync(bool proposerAuthorityRequired = false) { var minimalApprovalThreshold = 6667; var maximalAbstentionThreshold = 2000; var maximalRejectionThreshold = 3000; var minimalVoteThreshold = 8000; var createOrganizationInput = new CreateOrganizationInput { ProposalReleaseThreshold = new ProposalReleaseThreshold { MinimalApprovalThreshold = minimalApprovalThreshold, MaximalAbstentionThreshold = maximalAbstentionThreshold, MaximalRejectionThreshold = maximalRejectionThreshold, MinimalVoteThreshold = minimalVoteThreshold }, ProposerAuthorityRequired = proposerAuthorityRequired }; var transactionResult = await Tester.ExecuteContractWithMiningAsync(ParliamentAddress, nameof(ParliamentContractImplContainer.ParliamentContractImplStub.CreateOrganization), createOrganizationInput); transactionResult.Status.ShouldBe(TransactionResultStatus.Mined); return(Address.Parser.ParseFrom(transactionResult.ReturnValue)); }
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()); }
private Address CreateNewOrganization(CreateOrganizationInput input) { var organizationHashAddressPair = CalculateOrganizationHashAddressPair(input); var organizationAddress = organizationHashAddressPair.OrganizationAddress; var organizationHash = organizationHashAddressPair.OrganizationHash; var organization = new Organization { ProposalReleaseThreshold = input.ProposalReleaseThreshold, OrganizationAddress = organizationAddress, OrganizationHash = organizationHash, ProposerAuthorityRequired = input.ProposerAuthorityRequired, ParliamentMemberProposingAllowed = input.ParliamentMemberProposingAllowed }; Assert(Validate(organization), "Invalid organization."); if (State.Organisations[organizationAddress] != null) { return(organizationAddress); } State.Organisations[organizationAddress] = organization; Context.Fire(new OrganizationCreated { OrganizationAddress = organizationAddress }); return(organizationAddress); }
public override Address CalculateOrganizationAddress(CreateOrganizationInput input) { var organizationHashAddressPair = CalculateOrganizationHashAddressPair(input); var organizationAddress = organizationHashAddressPair.OrganizationAddress; return(organizationAddress); }
public override Address CreateOrganization(CreateOrganizationInput input) { var organizationHashAddressPair = CalculateOrganizationHashAddressPair(input); var organizationAddress = organizationHashAddressPair.OrganizationAddress; var organizationHash = organizationHashAddressPair.OrganizationHash; var organization = new Organization { ProposalReleaseThreshold = input.ProposalReleaseThreshold, OrganizationAddress = organizationAddress, ProposerWhiteList = input.ProposerWhiteList, OrganizationMemberList = input.OrganizationMemberList, OrganizationHash = organizationHash }; Assert(Validate(organization), "Invalid organization."); if (State.Organisations[organizationAddress] == null) { State.Organisations[organizationAddress] = organization; } Context.Fire(new OrganizationCreated { OrganizationAddress = organizationAddress }); return(organizationAddress); }
public override Address CreateOrganization(CreateOrganizationInput input) { var organizationHashAddressPair = CalculateOrganizationHashAddressPair(input); var organizationAddress = organizationHashAddressPair.OrganizationAddress; var organizationHash = organizationHashAddressPair.OrganizationHash; if (State.Organizations[organizationAddress] != null) { return(organizationAddress); } var organization = new Organization { ProposalReleaseThreshold = input.ProposalReleaseThreshold, OrganizationAddress = organizationAddress, TokenSymbol = input.TokenSymbol, OrganizationHash = organizationHash, ProposerWhiteList = input.ProposerWhiteList, CreationToken = input.CreationToken }; Assert(Validate(organization), "Invalid organization data."); if (State.Organizations[organizationAddress] != null) { return(organizationAddress); } State.Organizations[organizationAddress] = organization; Context.Fire(new OrganizationCreated { OrganizationAddress = organizationAddress }); return(organizationAddress); }
private Association.CreateOrganizationInput GenerateOrganizationInputForIndexingFeePrice( Address sideChainCreator) { var proposers = new List <Address> { sideChainCreator, GetSideChainLifetimeController().OwnerAddress }; var createOrganizationInput = new CreateOrganizationInput { ProposerWhiteList = new ProposerWhiteList { Proposers = { proposers } }, OrganizationMemberList = new OrganizationMemberList { OrganizationMembers = { proposers } }, ProposalReleaseThreshold = new ProposalReleaseThreshold { MinimalApprovalThreshold = proposers.Count, MinimalVoteThreshold = proposers.Count, MaximalRejectionThreshold = 0, MaximalAbstentionThreshold = 0 } }; return(createOrganizationInput); }
private Address CalculateSideChainIndexingFeeControllerOrganizationAddress(CreateOrganizationInput input) { SetContractStateRequired(State.AssociationContract, SmartContractConstants.AssociationContractSystemName); var address = State.AssociationContract.CalculateOrganizationAddress.Call(input); return(address); }
public async Task Treasury_ChangeTreasuryController_Success_Test() { var newParliament = new CreateOrganizationInput { ProposerAuthorityRequired = false, ProposalReleaseThreshold = new ProposalReleaseThreshold { MaximalAbstentionThreshold = 1, MaximalRejectionThreshold = 1, MinimalApprovalThreshold = 1, MinimalVoteThreshold = 1 }, ParliamentMemberProposingAllowed = false }; var createNewParliament = (await ParliamentContractStub.CreateOrganization.SendAsync(newParliament)).TransactionResult; createNewParliament.Status.ShouldBe(TransactionResultStatus.Mined); var calculatedNewParliamentAddress = await ParliamentContractStub.CalculateOrganizationAddress.CallAsync(newParliament); var newController = new AuthorityInfo { ContractAddress = ParliamentContractAddress, OwnerAddress = calculatedNewParliamentAddress }; await ExecuteProposalForParliamentTransaction(Tester, TreasuryContractAddress, nameof(TreasuryContractStub.ChangeTreasuryController), newController); var getController = await TreasuryContractStub.GetTreasuryController.CallAsync(new Empty()); getController.ContractAddress.ShouldBe(newController.ContractAddress); getController.OwnerAddress.ShouldBe(newController.OwnerAddress); }
public async Task Get_Organization_Test() { var reviewer1 = new Reviewer { Address = Reviewer1, Weight = 1 }; var reviewer2 = new Reviewer { Address = Reviewer2, Weight = 2 }; var reviewer3 = new Reviewer { Address = Reviewer3, Weight = 3 }; var createOrganizationInput = new CreateOrganizationInput { Reviewers = { reviewer1, reviewer2, reviewer3 }, ReleaseThreshold = 2, ProposerThreshold = 2 }; var transactionResult = await AssociationAuthContractStub.CreateOrganization.SendAsync(createOrganizationInput); transactionResult.TransactionResult.Status.ShouldBe(TransactionResultStatus.Mined); var organizationAddress = transactionResult.Output; var getOrganization = await AssociationAuthContractStub.GetOrganization.CallAsync(organizationAddress); getOrganization.OrganizationAddress.ShouldBe(organizationAddress); getOrganization.Reviewers[0].Address.ShouldBe(Reviewer1); getOrganization.Reviewers[0].Weight.ShouldBe(1); getOrganization.ProposerThreshold.ShouldBe(2); getOrganization.ReleaseThreshold.ShouldBe(2); getOrganization.OrganizationHash.ShouldBe(Hash.FromTwoHashes( Hash.FromMessage(AssociationAuthContractAddress), Hash.FromMessage(createOrganizationInput))); }
public override Address CreateOrganization(CreateOrganizationInput input) { var isValidWeight = input.Reviewers.All(r => r.Weight >= 0); var canBeProposed = input.Reviewers.Any(r => r.Weight >= input.ProposerThreshold); var canBeReleased = input.Reviewers.Aggregate(0, (i, reviewer) => i + reviewer.Weight) > input.ReleaseThreshold; Assert(isValidWeight && canBeProposed && canBeReleased, "Invalid organization."); var organizationHash = Hash.FromTwoHashes(Hash.FromMessage(Context.Self), Hash.FromMessage(input)); Address organizationAddress = Context.ConvertVirtualAddressToContractAddress(organizationHash); if (State.Organisations[organizationAddress] == null) { var organization = new Organization { ReleaseThreshold = input.ReleaseThreshold, OrganizationAddress = organizationAddress, ProposerThreshold = input.ProposerThreshold, OrganizationHash = organizationHash }; organization.Reviewers.AddRange(input.Reviewers); State.Organisations[organizationAddress] = organization; } return(organizationAddress); }
public override Address CreateOrganization(CreateOrganizationInput input) { Assert(ValidateAddressInWhiteList(Context.Sender) || ValidateParliamentMemberAuthority(Context.Sender), "Unauthorized to create organization."); var organizationAddress = CreateNewOrganization(input); return(organizationAddress); }
internal async Task <Address> CreateOrganization(CreateOrganizationInput input) { DeployContracts(); var transactionResult = await AssociationContractStub.CreateOrganization.SendAsync(input); var organizationAddress = transactionResult.Output; return(organizationAddress); }
private OrganizationHashAddressPair CalculateOrganizationHashAddressPair(CreateOrganizationInput createOrganizationInput) { var organizationHash = Hash.FromMessage(createOrganizationInput); var organizationAddress = Context.ConvertVirtualAddressToContractAddressWithContractHashName(organizationHash); return(new OrganizationHashAddressPair { OrganizationAddress = organizationAddress, OrganizationHash = organizationHash }); }
private Address CalculateSideChainRentalController( CreateOrganizationInput input) { if (State.AssociationContract.Value == null) { State.AssociationContract.Value = Context.GetContractAddressByName(SmartContractConstants.AssociationContractSystemName); } var address = State.AssociationContract.CalculateOrganizationAddress.Call(input); return(address); }
private OrganizationHashAddressPair CalculateOrganizationHashAddressPair( CreateOrganizationInput createOrganizationInput) { var organizationHash = HashHelper.ComputeFrom(createOrganizationInput); var organizationAddress = Context.ConvertVirtualAddressToContractAddressWithContractHashName( CalculateVirtualHash(organizationHash, createOrganizationInput.CreationToken)); return(new OrganizationHashAddressPair { OrganizationAddress = organizationAddress, OrganizationHash = organizationHash }); }
private async Task <Address> CreateOrganizationAsync() { var createOrganizationInput = new CreateOrganizationInput { ReleaseThreshold = 20000 / MinersCount }; var transactionResult = await ParliamentAuthContractStub.CreateOrganization.SendAsync(createOrganizationInput); transactionResult.TransactionResult.Status.ShouldBe(TransactionResultStatus.Mined); return(transactionResult.Output); }
public async Task <Address> Create_Organization() { _createOrganizationInput = new CreateOrganizationInput { ReleaseThreshold = 5000, TokenSymbol = "ELF", }; var transactionResult = await ReferendumAuthContractStub.CreateOrganization.SendAsync(_createOrganizationInput); transactionResult.TransactionResult.Status.ShouldBe(TransactionResultStatus.Mined); return(transactionResult.Output); }
protected async Task <Address> CreateOrganizationAsync(ContractTester <BasicContractZeroTestAElfModule> tester, Address parliamentContract) { var createOrganizationInput = new CreateOrganizationInput { ReleaseThreshold = 20000 / tester.InitialMinerList.Count }; var transactionResult = await tester.ExecuteContractWithMiningAsync(parliamentContract, nameof(ParliamentAuthContractContainer.ParliamentAuthContractStub.CreateOrganization), createOrganizationInput); return(Address.Parser.ParseFrom(transactionResult.ReturnValue)); }
private async Task <Address> CreatePrivilegeOrganizationAsync() { var createOrganizationInput = new CreateOrganizationInput { ReleaseThreshold = 20000 / MinersCount, ProposerAuthorityRequired = true, ProposerWhiteList = { Tester } }; var transactionResult = await ParliamentAuthContractStub.CreateOrganization.SendAsync(createOrganizationInput); transactionResult.TransactionResult.Status.ShouldBe(TransactionResultStatus.Mined); return(transactionResult.Output); }
private async Task <Address> CreateOrganizationAsync() { var createOrganizationInput = new CreateOrganizationInput { ReleaseThreshold = 20000 / Tester.InitialMinerList.Count }; var transactionResult = await Tester.ExecuteContractWithMiningAsync(ParliamentAddress, nameof(ParliamentAuthContractContainer.ParliamentAuthContractStub.CreateOrganization), createOrganizationInput); transactionResult.Status.ShouldBe(TransactionResultStatus.Mined); return(Address.Parser.ParseFrom(transactionResult.ReturnValue)); }
public async Task Create_OrganizationFailed_Test() { var reviewer1 = new Reviewer { Address = Reviewer1, Weight = 1 }; var reviewer2 = new Reviewer { Address = Reviewer2, Weight = 2 }; var reviewer3 = new Reviewer { Address = Reviewer3, Weight = 3 }; var createOrganizationInput = new CreateOrganizationInput { Reviewers = { reviewer1, reviewer2, reviewer3 }, ReleaseThreshold = 2, ProposerThreshold = 2 }; //isValidWeight { createOrganizationInput.Reviewers[0].Weight = -1; var transactionResult = await AssociationAuthContractStub.CreateOrganization.SendAsync(createOrganizationInput); transactionResult.TransactionResult.Status.ShouldBe(TransactionResultStatus.Failed); transactionResult.TransactionResult.Error.Contains("Invalid organization.").ShouldBeTrue(); } //canBeProposed { createOrganizationInput.Reviewers[0].Weight = 1; createOrganizationInput.ProposerThreshold = 10; var transactionResult = await AssociationAuthContractStub.CreateOrganization.SendAsync(createOrganizationInput); transactionResult.TransactionResult.Status.ShouldBe(TransactionResultStatus.Failed); transactionResult.TransactionResult.Error.Contains("Invalid organization.").ShouldBeTrue(); } //canBeReleased { createOrganizationInput.ProposerThreshold = 2; createOrganizationInput.ReleaseThreshold = 10; var transactionResult = await AssociationAuthContractStub.CreateOrganization.SendAsync(createOrganizationInput); transactionResult.TransactionResult.Status.ShouldBe(TransactionResultStatus.Failed); transactionResult.TransactionResult.Error.Contains("Invalid organization.").ShouldBeTrue(); } }
public async Task Get_Organization_Test() { var createOrganizationInput = new CreateOrganizationInput { ReleaseThreshold = 5000, TokenSymbol = "ELF", }; var organizationAddress = await CreateOrganizationAsync(); var getOrganization = await ReferendumAuthContractStub.GetOrganization.CallAsync(organizationAddress); getOrganization.OrganizationAddress.ShouldBe(organizationAddress); getOrganization.ReleaseThreshold.ShouldBe(5000); getOrganization.OrganizationHash.ShouldBe(Hash.FromTwoHashes( Hash.FromMessage(ReferendumAuthContractAddress), Hash.FromMessage(createOrganizationInput))); }
public async Task Get_Organization_Test() { var createOrganizationInput = new CreateOrganizationInput { ReleaseThreshold = 10000 / MinersCount }; var transactionResult = await ParliamentAuthContractStub.CreateOrganization.SendAsync(createOrganizationInput); var organizationAddress = transactionResult.Output; var getOrganization = await ParliamentAuthContractStub.GetOrganization.CallAsync(organizationAddress); getOrganization.OrganizationAddress.ShouldBe(organizationAddress); getOrganization.ReleaseThreshold.ShouldBe(10000 / MinersCount); getOrganization.OrganizationHash.ShouldBe(Hash.FromTwoHashes( Hash.FromMessage(ParliamentAuthContractAddress), Hash.FromMessage(createOrganizationInput))); }
public override Address CreateOrganization(CreateOrganizationInput input) { var organizationHash = Hash.FromTwoHashes(Hash.FromMessage(Context.Self), Hash.FromMessage(input)); Address organizationAddress = Context.ConvertVirtualAddressToContractAddress(organizationHash); if (State.Organisations[organizationAddress] == null) { var organization = new Organization { ReleaseThreshold = input.ReleaseThreshold, OrganizationAddress = organizationAddress, TokenSymbol = input.TokenSymbol, OrganizationHash = organizationHash }; State.Organisations[organizationAddress] = organization; } return(organizationAddress); }
public override Address CreateOrganization(CreateOrganizationInput input) { Assert(input.ReleaseThreshold > 0 && input.ReleaseThreshold <= 10000, "Invalid organization."); var organizationHash = GenerateOrganizationVirtualHash(input); Address organizationAddress = Context.ConvertVirtualAddressToContractAddress(organizationHash); if (State.Organisations[organizationAddress] == null) { var organization = new Organization { ReleaseThreshold = input.ReleaseThreshold, OrganizationAddress = organizationAddress, OrganizationHash = organizationHash }; State.Organisations[organizationAddress] = organization; } return(organizationAddress); }
private Address InitialConnectorManager() { State.ParliamentAuthContract.Value = Context.GetContractAddressByName(SmartContractConstants.ParliamentAuthContractSystemName); var createOrganizationInput = new CreateOrganizationInput { ReleaseThreshold = EconomicContractConstants.ConnectorSettingProposalReleaseThreshold }; State.ParliamentAuthContract.CreateOrganization.Send(createOrganizationInput); var organizationHash = Hash.FromTwoHashes(Hash.FromMessage(State.ParliamentAuthContract.Value), Hash.FromMessage(createOrganizationInput)); return(Address.FromPublicKey(State.ParliamentAuthContract.Value.Value.Concat( organizationHash.Value.ToByteArray().ComputeHash()).ToArray())); }
public async Task Authorization_Transfer_For_Set_Vote_Weight_Interest() { var defaultSetting = await ElectionContractStub.GetVoteWeightSetting.CallAsync( new Empty()); defaultSetting.VoteWeightInterestInfos[0].Capital = 13200; var newParliament = new CreateOrganizationInput { ProposerAuthorityRequired = false, ProposalReleaseThreshold = new ProposalReleaseThreshold { MaximalAbstentionThreshold = 1, MaximalRejectionThreshold = 1, MinimalApprovalThreshold = 1, MinimalVoteThreshold = 1 }, ParliamentMemberProposingAllowed = false }; var buildNewParliamentRet = (await ParliamentContractStub.CreateOrganization.SendAsync(newParliament)).TransactionResult; buildNewParliamentRet.Status.ShouldBe(TransactionResultStatus.Mined); var newParliamentAddress = new Address(); newParliamentAddress.MergeFrom(buildNewParliamentRet.ReturnValue); var newAuthority = new AuthorityInfo { OwnerAddress = newParliamentAddress, ContractAddress = ParliamentContractAddress }; await ExecuteProposalTransaction(BootMinerAddress, ElectionContractAddress, nameof(ElectionContractStub.ChangeVoteWeightInterestController), newAuthority); await ExecuteProposalTransactionWithNewParliament(BootMinerAddress, ElectionContractAddress, nameof(ElectionContractStub.SetVoteWeightInterest), defaultSetting, newParliamentAddress); defaultSetting = await ElectionContractStub.GetVoteWeightSetting.CallAsync( new Empty()); defaultSetting.VoteWeightInterestInfos[0].Capital.ShouldBe(13200); }