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); }
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()); }