{{ __('Every vote is recorded as an anonymous ballot in a ledger. Each ballot contains the fingerprint of the one before it, so changing, adding or removing a ballot afterwards breaks the chain. You can check your own vote with your receipt code, and recount all ballots yourself.') }}
{{ __('Ballot ledger') }}: @if ($chain['valid']) {{ __('intact') }} ({{ trans_choice(':count entry|:count entries', $chain['entries'], ['count' => $chain['entries']]) }}) @else {{ __('broken at entry :sequence', ['sequence' => $chain['broken_at']]) }} @endif
{{ __('Ballots counted: :active. Cast: :cast, changed: :change, withdrawn: :withdraw.', $counts) }}
@if ($poll->sealed_at)
{{ __('Sealed') }}: {{ $poll->sealed_at->locale(app()->getLocale())->isoFormat('LLL') }}
{{ $poll->seal_hash }}
{{ __('Note this seal somewhere: if the ledger is ever changed afterwards, it will no longer match.') }}
@else{{ __('The ledger is sealed when the poll closes.') }}
@endif{{ __('The ballot list and the recount become available here when the results of this poll are visible to you.') }}
@endif @if ($public){{ $recount['matches'] ? __('The recount of the ballots matches the published result.') : __('The recount of the ballots does not match the published result.') }}
{{ __('Your browser downloads all ballots and recalculates every fingerprint and the count itself, without relying on the server. The code that does this is included in this page.') }}
{{ __('Ballots are shown by fingerprint, never by voter. Free text is hidden as [text]; it is still part of the fingerprint.') }}
| # | {{ __('Type') }} | {{ __('Fingerprint') }} | {{ __('Status') }} | {{ __('Answers') }} |
|---|---|---|---|---|
| {{ $entry->sequence }} | {{ __(['cast' => 'Vote', 'change' => 'Changed vote', 'withdraw' => 'Withdrawal', 'seal' => 'Seal'][$entry->entry_type]) }} | {{ $entry->fingerprint ? substr($entry->fingerprint, 0, 12) : '-' }} | @if (!$entry->isBallot()) - @elseif ($replaced === 'withdraw') {{ __('Withdrawn') }} @elseif ($replaced) {{ __('Replaced') }} @else {{ __('Counted') }} @endif |
@if ($entry->isBallot())
@foreach ($entry->payload['answers'] ?? [] as $answer)
@php($question = $questions->get($answer['question_id']))
@if ($question && app(\App\Polls\QuestionTypeRegistry::class)->has($question->type))
{{ \Illuminate\Support\Str::limit($question->labelFor(app()->getLocale()), 40) }}:
{{ $question->questionType()->answerToText($answer['value'] ?? null, !empty($answer['text_sha256']) ? '[' . __('text') . ']' : null, $question->settings ?? [], app()->getLocale()) ?: '-' }}
@endif
@endforeach
@elseif ($entry->entry_type === 'withdraw')
{{ __('Ballot #:sequence no longer counts', ['sequence' => $entry->refers_to_sequence]) }}
@elseif ($entry->entry_type === 'seal')
{{ __(':count ballots counted at closing', ['count' => $entry->payload['active_ballots'] ?? 0]) }}
@endif
|
{{ __('This page can show:') }}
{{ __('Example: if someone changed one vote from Yes to No, its fingerprint would no longer match the next ballot. The chain breaks and the check shows it.') }}
{{ __('This page cannot show:') }}
{{ __('Good to know:') }}