Ejemplo n.º 1
0
        public async Task ClearProposalByLibAsync(Hash blockHash, long blockHeight)
        {
            var proposalIdList = _proposalProvider.GetAllProposals();
            var result         = await _contractReaderFactory.Create(new ContractReaderContext
            {
                BlockHash       = blockHash,
                BlockHeight     = blockHeight,
                ContractAddress = await GetParliamentContractAddressAsync(new ChainContext
                {
                    BlockHash   = blockHash,
                    BlockHeight = blockHeight
                })
            }).GetNotVotedPendingProposals
                                 .CallAsync(new ProposalIdList {
                ProposalIds = { proposalIdList }
            });

            if (result == null)
            {
                return;
            }

            foreach (var proposalId in proposalIdList.Except(result.ProposalIds))
            {
                if (!_proposalProvider.TryGetProposalCreatedHeight(proposalId, out var h) ||
                    h > blockHeight)
                {
                    continue;
                }
                Logger.LogDebug($"Clear proposal {proposalId} by LIB hash {blockHash}, height {blockHeight}");
                _proposalProvider.RemoveProposalById(proposalId);
            }
        }
        public void AddProposalTest()
        {
            var proposalId  = HashHelper.ComputeFrom("ProposalId");
            var blockHeight = 10;

            _proposalProvider.AddProposal(proposalId, blockHeight);
            var exist = _proposalProvider.TryGetProposalCreatedHeight(proposalId, out var height);

            exist.ShouldBeTrue();
            height.ShouldBe(blockHeight);

            var lowerHeight = blockHeight - 1;

            _proposalProvider.AddProposal(proposalId, lowerHeight);
            exist = _proposalProvider.TryGetProposalCreatedHeight(proposalId, out height);
            exist.ShouldBeTrue();
            height.ShouldBe(blockHeight);
        }