Esempio n. 1
0
        private async Task <TransactionResult> TakeSnapshot(Hash votingItemId, long snapshotNumber)
        {
            var input = new TakeSnapshotInput
            {
                VotingItemId   = votingItemId,
                SnapshotNumber = snapshotNumber
            };
            var transactionResult = (await VoteContractStub.TakeSnapshot.SendAsync(input)).TransactionResult;

            return(transactionResult);
        }
Esempio n. 2
0
        public override Empty TakeSnapshot(TakeSnapshotInput input)
        {
            var votingItem = AssertVotingItem(input.VotingItemId);

            Assert(votingItem.Sponsor == Context.Sender, "Only sponsor can take snapshot.");

            Assert(votingItem.CurrentSnapshotNumber - 1 <= votingItem.TotalSnapshotNumber,
                   "Current voting item already ended.");

            // Update previous voting going information.
            var previousVotingResultHash = GetVotingResultHash(input.VotingItemId, votingItem.CurrentSnapshotNumber);
            var previousVotingResult     = State.VotingResults[previousVotingResultHash];

            previousVotingResult.SnapshotEndTimestamp     = Context.CurrentBlockTime;
            State.VotingResults[previousVotingResultHash] = previousVotingResult;

            Assert(votingItem.CurrentSnapshotNumber == input.SnapshotNumber,
                   $"Can only take snapshot of current snapshot number: {votingItem.CurrentSnapshotNumber}, but {input.SnapshotNumber}");
            var nextSnapshotNumber = input.SnapshotNumber.Add(1);

            votingItem.CurrentSnapshotNumber           = nextSnapshotNumber;
            State.VotingItems[votingItem.VotingItemId] = votingItem;

            // Initial next voting going information.
            var currentVotingGoingHash = GetVotingResultHash(input.VotingItemId, nextSnapshotNumber);

            State.VotingResults[currentVotingGoingHash] = new VotingResult
            {
                VotingItemId           = input.VotingItemId,
                SnapshotNumber         = nextSnapshotNumber,
                SnapshotStartTimestamp = Context.CurrentBlockTime,
                VotersCount            = previousVotingResult.VotersCount,
                VotesAmount            = previousVotingResult.VotesAmount
            };
            return(new Empty());
        }