Esempio n. 1
0
        public override Hash ProposeContractCodeCheck(ContractCodeCheckInput input)
        {
            RequireSenderAuthority();
            AssertDeploymentProposerAuthority(Context.Origin);
            var proposedContractInputHash = Hash.FromRawBytes(input.ContractInput.ToByteArray());
            var proposedInfo = State.ContractProposingInputMap[proposedContractInputHash];

            Assert(proposedInfo != null && proposedInfo.Status == ContractProposingInputStatus.Approved,
                   "Invalid contract proposing status.");
            proposedInfo.Status = ContractProposingInputStatus.PreCodeChecked;
            State.ContractProposingInputMap[proposedContractInputHash] = proposedInfo;

            RequireParliamentAuthAddressSet();

            // Create proposal for deployment
            State.ParliamentAuthContract.CreateProposal.Send(new CreateProposalInput
            {
                ToAddress          = Context.Self,
                ContractMethodName = input.IsContractDeployment
                    ? nameof(BasicContractZeroContainer.BasicContractZeroBase.DeploySmartContract)
                    : nameof(BasicContractZeroContainer.BasicContractZeroBase.UpdateSmartContract),
                Params = input.ContractInput,
                OrganizationAddress = State.GenesisOwner.Value,
                ExpiredTime         = Context.CurrentBlockTime.AddMinutes(10) // Maybe, get the interval from configuration
            });

            // Fire event to trigger BPs checking contract code
            Context.Fire(new CodeCheckRequired
            {
                Code = ExtractCodeFromContractCodeCheckInput(input),
                ProposedContractInputHash = proposedContractInputHash
            });

            return(proposedContractInputHash);
        }
Esempio n. 2
0
        public override Hash ProposeContractCodeCheck(ContractCodeCheckInput input)
        {
            RequireSenderAuthority(State.ContractDeploymentController.Value.OwnerAddress);
            // AssertDeploymentProposerAuthority(Context.Origin);
            var proposedContractInputHash = Hash.FromRawBytes(input.ContractInput.ToByteArray());
            var proposedInfo = State.ContractProposingInputMap[proposedContractInputHash];

            Assert(proposedInfo != null && proposedInfo.Status == ContractProposingInputStatus.Approved,
                   "Invalid contract proposing status.");
            proposedInfo.Status = ContractProposingInputStatus.PreCodeChecked;
            State.ContractProposingInputMap[proposedContractInputHash] = proposedInfo;

            RequireParliamentContractAddressSet();

            var codeCheckController   = State.CodeCheckController.Value;
            var proposalCreationInput = new CreateProposalBySystemContractInput
            {
                ProposalInput = new CreateProposalInput
                {
                    ToAddress          = Context.Self,
                    ContractMethodName = input.IsContractDeployment
                        ? nameof(BasicContractZeroContainer.BasicContractZeroBase.DeploySmartContract)
                        : nameof(BasicContractZeroContainer.BasicContractZeroBase.UpdateSmartContract),
                    Params = input.ContractInput,
                    OrganizationAddress = codeCheckController.OwnerAddress,
                    ExpiredTime         = Context.CurrentBlockTime.AddSeconds(CodeCheckProposalExpirationTimePeriod)
                },
                OriginProposer = proposedInfo.Proposer
            };

            // Create proposal for deployment
            Context.SendInline(codeCheckController.ContractAddress,
                               nameof(AuthorizationContractContainer.AuthorizationContractReferenceState
                                      .CreateProposalBySystemContract), proposalCreationInput);

            // Fire event to trigger BPs checking contract code
            Context.Fire(new CodeCheckRequired
            {
                Code = ExtractCodeFromContractCodeCheckInput(input),
                ProposedContractInputHash = proposedContractInputHash
            });

            return(proposedContractInputHash);
        }
Esempio n. 3
0
        public override Hash ProposeContractCodeCheck(ContractCodeCheckInput input)
        {
            RequireSenderAuthority(State.ContractDeploymentController.Value.OwnerAddress);
            AssertCodeCheckProposingInput(input);
            var proposedContractInputHash = input.ProposedContractInputHash;
            var proposedInfo = State.ContractProposingInputMap[proposedContractInputHash];

            Assert(proposedInfo != null && proposedInfo.Status == ContractProposingInputStatus.Approved,
                   "Invalid contract proposing status.");
            proposedInfo.Status = ContractProposingInputStatus.CodeCheckProposed;
            State.ContractProposingInputMap[proposedContractInputHash] = proposedInfo;

            var codeCheckController   = State.CodeCheckController.Value;
            var proposalCreationInput = new CreateProposalBySystemContractInput
            {
                ProposalInput = new CreateProposalInput
                {
                    ToAddress           = Context.Self,
                    ContractMethodName  = input.CodeCheckReleaseMethod,
                    Params              = input.ContractInput,
                    OrganizationAddress = codeCheckController.OwnerAddress,
                    ExpiredTime         = Context.CurrentBlockTime.AddSeconds(CodeCheckProposalExpirationTimePeriod)
                },
                OriginProposer = proposedInfo.Proposer
            };

            proposedInfo.ExpiredTime = proposalCreationInput.ProposalInput.ExpiredTime;
            State.ContractProposingInputMap[proposedContractInputHash] = proposedInfo;
            Context.SendInline(codeCheckController.ContractAddress,
                               nameof(AuthorizationContractContainer.AuthorizationContractReferenceState
                                      .CreateProposalBySystemContract), proposalCreationInput);

            // Fire event to trigger BPs checking contract code
            Context.Fire(new CodeCheckRequired
            {
                Code = ExtractCodeFromContractCodeCheckInput(input),
                ProposedContractInputHash = proposedContractInputHash,
                Category         = input.Category,
                IsSystemContract = input.IsSystemContract
            });

            return(proposedContractInputHash);
        }
 private void AssertCodeCheckProposingInput(ContractCodeCheckInput input)
 {
     Assert(
         input.CodeCheckReleaseMethod == nameof(DeploySmartContract) ||
         input.CodeCheckReleaseMethod == nameof(UpdateSmartContract), "Invalid input.");
 }
 private ByteString ExtractCodeFromContractCodeCheckInput(ContractCodeCheckInput input)
 {
     return(input.CodeCheckReleaseMethod == nameof(DeploySmartContract)
         ? ContractDeploymentInput.Parser.ParseFrom(input.ContractInput).Code
         : ContractUpdateInput.Parser.ParseFrom(input.ContractInput).Code);
 }
 private ByteString ExtractCodeFromContractCodeCheckInput(ContractCodeCheckInput input)
 {
     return(input.IsContractDeployment
         ? ContractDeploymentInput.Parser.ParseFrom(input.ContractInput).Code
         : ContractUpdateInput.Parser.ParseFrom(input.ContractInput).Code);
 }