{{ __('Verify poll') }}

{{ $title }}

@if ($slug) {{ __('Back to the poll') }} @endif

{{ __('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

{{ __('Check your vote') }}

@if ($ballotsHidden)

{{ __('The ballot list and the recount become available here when the results of this poll are visible to you.') }}

@endif @if ($public)

{{ __('Recount') }}

{{ $recount['matches'] ? __('The recount of the ballots matches the published result.') : __('The recount of the ballots does not match the published result.') }}

    @foreach ($recount['questions'] as $questionId => $matches)
  • {{ $matches ? '✓' : '✗' }} {{ $questions->get($questionId)?->labelFor(app()->getLocale()) }}
  • @endforeach

{{ __('Verify in your browser') }}

{{ __('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.') }}

{{ __('Verify in your browser') }} {{ __('Processing...') }} {{ __('Download the ledger (JSON)') }}

{{ __('All ballots') }}

{{ __('Ballots are shown by fingerprint, never by voter. Free text is hidden as [text]; it is still part of the fingerprint.') }}

@foreach ($ballots as $entry) @php($replaced = $replacedBy->get($entry->sequence)) @endforeach
# {{ __('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
{{ $ballots->links() }}
@endif

{{ __('What this can and cannot prove') }}

{{ __('This page can show:') }}

  • {{ __('That your vote was counted the way you cast it. Enter your receipt code to see your ballot.') }}
  • {{ __('That no vote was changed, added or removed afterwards. Each ballot carries a fingerprint of the ballot before it, like links in a chain.') }}
  • {{ __('That nothing changed after the poll was sealed. Write down the seal at the top: if it is still the same later, nothing has changed.') }}

{{ __('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:') }}

  • {{ __('Who cast the other ballots. The list is anonymous. The platform does keep track of who voted, but only so that each profile votes once.') }}

{{ __('Good to know:') }}

  • {{ __('Keep your receipt code to yourself: anyone who has it can see how you voted.') }}
  • {{ __('We cannot send your code again if you lose it, because we only store a fingerprint of it.') }}
@if ($public) @push('scripts') @endpush @endif