Exemplo n.º 1
0
 private void AssertIsCrossChainBlockDataAlreadyProposed(CrossChainIndexingProposal crossChainIndexingProposal)
 {
     Assert(
         crossChainIndexingProposal.Status == CrossChainIndexingProposalStatus.Proposed &&
         crossChainIndexingProposal.Proposer != null &&
         crossChainIndexingProposal.ProposedCrossChainBlockData != null &&
         crossChainIndexingProposal.ProposalId == null,
         "Incorrect cross chain indexing proposal status.");
 }
Exemplo n.º 2
0
        private void HandleIndexingProposal(Hash proposalId, CrossChainIndexingProposal crossChainIndexingProposal)
        {
            var proposal = GetCrossChainIndexingProposal(proposalId);

            Assert(proposal.ToBeReleased, "Not approved cross chain indexing proposal.");
            var crossChainIndexingController = GetCrossChainIndexingController();

            Context.SendInline(crossChainIndexingController.ContractAddress,
                               nameof(AuthorizationContractContainer.AuthorizationContractReferenceState.Release),
                               proposal.ProposalId); // release if ready
            SetCrossChainIndexingProposalStatus(crossChainIndexingProposal,
                                                CrossChainIndexingProposalStatus.ToBeReleased);
        }
Exemplo n.º 3
0
        private void HandleIndexingProposal(Hash proposalId, CrossChainIndexingProposal crossChainIndexingProposal)
        {
            var proposal = GetCrossChainIndexingProposal(proposalId);

            if (!proposal.ToBeReleased)
            {
                SetContractStateRequired(State.ConsensusContract, SmartContractConstants.ConsensusContractSystemName);
                Assert(State.ConsensusContract.GetCurrentRoundInformation.Call(new Empty()).IsMinerListJustChanged,
                       "Not approved cross chain indexing proposal.");
            }

            var crossChainIndexingController = GetCrossChainIndexingController();

            Context.SendInline(crossChainIndexingController.ContractAddress,
                               nameof(AuthorizationContractContainer.AuthorizationContractReferenceState.Release),
                               proposal.ProposalId); // release if ready
            SetCrossChainIndexingProposalStatus(crossChainIndexingProposal,
                                                CrossChainIndexingProposalStatus.ToBeReleased);
        }
Exemplo n.º 4
0
        private void ProposeCrossChainBlockData(CrossChainBlockData crossChainBlockData, Address proposer)
        {
            var crossChainIndexingController = GetCrossChainIndexingController();
            var proposalCreationInput        = new CreateProposalBySystemContractInput
            {
                ProposalInput = new CreateProposalInput
                {
                    Params = new RecordCrossChainDataInput
                    {
                        ProposedCrossChainData = crossChainBlockData,
                        Proposer = proposer
                    }.ToByteString(),
                ContractMethodName  = nameof(RecordCrossChainData),
                ExpiredTime         = Context.CurrentBlockTime.AddSeconds(CrossChainIndexingProposalExpirationTimePeriod),
                OrganizationAddress = crossChainIndexingController.OwnerAddress,
                ToAddress           = Context.Self
                },
                ProposalIdFeedbackMethod = nameof(FeedbackCrossChainIndexingProposalId),
                OriginProposer           = Context.Sender
            };

            Context.SendInline(crossChainIndexingController.ContractAddress,
                               nameof(AuthorizationContractContainer.AuthorizationContractReferenceState
                                      .CreateProposalBySystemContract), proposalCreationInput);
            var crossChainIndexingProposal = new CrossChainIndexingProposal
            {
                Proposer = proposer,
                ProposedCrossChainBlockData = crossChainBlockData
            };

            SetCrossChainIndexingProposalStatus(crossChainIndexingProposal, CrossChainIndexingProposalStatus.Proposed);

            Context.Fire(new CrossChainIndexingDataProposedEvent
            {
                ProposedCrossChainData = crossChainBlockData
            });
        }
Exemplo n.º 5
0
 private void SetCrossChainIndexingProposalStatus(CrossChainIndexingProposal crossChainIndexingProposal,
                                                  CrossChainIndexingProposalStatus status)
 {
     crossChainIndexingProposal.Status      = status;
     State.CrossChainIndexingProposal.Value = crossChainIndexingProposal;
 }
Exemplo n.º 6
0
 private bool TryGetProposalWithStatus(CrossChainIndexingProposalStatus status,
                                       out CrossChainIndexingProposal proposal)
 {
     proposal = State.CrossChainIndexingProposal.Value;
     return(proposal != null && proposal.Status == status);
 }