Naslovnica/Glasanje javnosti/Dan D: prijelaz na Gnosis
Glasanje javnosti

Dan D: prijelaz na Gnosis

26.9.2026.: što se promijenilo, što to znači za glasača, provjeri sam

docs/2026-09-26-dan-d.md

# Dan D: glasanje javnosti prelazi na Gnosis Chain

26. 9. 2026. Što se promijenilo, što to znači za glasača i kako bilo tko sam provjeri rezultat.

# Ukratko

  • 26. 9. 2026. u 03:20:41 (01:20:41 UTC) glasanje javnosti za novi Stadion Maksimir preselilo se s naše baze na javni blockchain Gnosis Chain.
  • Listići se od tada predaju pametnom ugovoru MaksimirGlasanjeV1 na adresi 0x812960FA1120121DEd82A8806aECE93dcf49E869. Ugovor zbraja bodove sam, a zbroj može pročitati svatko, bez nas.
  • Prva faza (glasanje u bazi, 25. i 26. 9.) je zatvorena, ali ne obrisana. Njezin cijeli zapis je javan i žigosan u Bitcoinu, a listići iz nje i dalje se broje.
  • Rezultat = glasovi na lancu + glasovi iz faze 1 koji nisu preneseni. Nijedna osoba se ne broji dvaput.
  • Pravila se nisu promijenila: 100 bodova po osobi, prijava eOsobnom ili Certilia mobile.ID-jem, listić se smije mijenjati do 31. 12. 2027. u 23:59.

Glasanje: maksimir.domovina.ai/glasanje.

# Zašto

U fazi 1 glasovi su bili u bazi koju vodi domovina.ai. Svaka promjena ulazila je u lanac hasheva, a vrh lanca svakih nekoliko sati u Bitcoin (OpenTimestamps), pa naknadno prepisivanje ne bi prošlo neopaženo. Ipak, glasač je morao vjerovati da operater baze ispravno bilježi njegov listić.

Na lancu to više ne treba:

Faza 1 (baza) Od dana D (Gnosis)
Tko upisuje listić naš poslužitelj ugovor, nakon što provjeri ZK dokaz iz glasačeva preglednika
Tko može promijeniti tuđi listić tehnički operater baze (vidljivo u lancu hasheva) nitko; mijenja samo onaj tko drži ključ
Tko zbraja baza ugovor (results()), javno
Gdje je dokaz lanac hasheva + Bitcoin žig događaji ugovora na Gnosisu + Bitcoin žig snapshotova
Što glasač treba eOsobnu eOsobnu i svoj ključ (24 riječi, čuva ga passkey na uređaju)

Glasač ne treba novčanik ni kriptovalutu: transakciju šalje i plaća naš relayer, koji listić ne može promijeniti, jer ga je potpisao glasačev ključ.

# Što to znači za tebe

Ako si… Što se dogodilo Što trebaš napraviti
glasao u fazi 1 tvoj listić se i dalje broji ništa. Ako ga želiš mijenjati, na /glasanje ga preneseš na lanac: listić iz faze 1 postane nacrt, napraviš ključ i predaš
još nisi glasao glasaš odmah na lancu prijava eOsobnom, ključ (24 riječi + passkey), listić, predaj
glasao i već prenio na lanac broji se samo listić na lancu ništa

Ključ je tvoj: bez njega nitko, ni mi, ne može promijeniti tvoj listić. Zato stranica traži da 24 riječi kopiraš ili ispišeš. Detalji: tko drži koji ključ.

# Kako izgleda prijelaz

flowchart LR
  subgraph F1["Faza 1: baza (25. i 26. 9.)"]
    L["lanac listića<br/>zatvoren, javan"]
    O["ostatak = listići<br/>koji nisu preneseni"]
    L --> O
  end
  subgraph G["Gnosis Chain (od 26. 9. 01:20 UTC)"]
    V["MaksimirGlasanjeV1<br/>results()"]
  end
  O --> R["REZULTAT<br/>na /glasanje"]
  V --> R
  L -. "završni snapshot" .-> B[("Bitcoin<br/>OpenTimestamps")]
  V -. "stanje ugovora u<br/>svakom snapshotu" .-> B

Što se točno dogodilo u trenutku prijelaza:

sequenceDiagram
  autonumber
  participant DB as baza (faza 1)
  participant GA as GitHub Action
  participant BTC as Bitcoin (OTS)
  participant R as javni repozitorij
  participant C as Gnosis, V1
  Note over DB: 01:20:41 UTC: zastavica chain_from
  DB->>DB: predaja listića u fazi 1 zatvorena
  DB->>DB: lanac faze 1 postaje javan
  GA->>DB: završni snapshot faze 1
  GA->>C: stanje ugovora u istom snapshotu
  GA->>BTC: žig snapshota
  GA->>R: checkpoints/20260926T012117Z-seq2.json
  R->>R: faza1/lanac.json i zk_grupa.json
  Note over C: od sada web predaje listiće ugovoru

# Provjeri sam

Za provjeru ne treba vjerovati ni nama ni ovoj stranici. Treba Python 3 (bez dodatnih paketa) i pristup internetu (javni RPC Gnosisa):

git clone https://github.com/stepanic/stadion-maksimir-natjecaj-2026
cd stadion-maksimir-natjecaj-2026
python3 scripts/maksimir_verify.py glasanje/faza1/lanac.json glasanje/checkpoints/*.json \
  --zk glasanje/faza1/zk_grupa.json --chain chain/deployments/gnosis/v1.json

Skripta:

  1. ponovno izračuna svaki hash u lancu faze 1 i provjeri da je svaki satni snapshot (onaj koji je u Bitcoinu) prefiks tog lanca, s istim brojem glasača i bodovima;
  2. provjeri zapisnik ZK grupe faze 1;
  3. provjeri da je na adresi ugovora točno kôd iz repozitorija (hash koda iz manifesta);
  4. pročita sve listiće s lanca (događaji BallotCast), zbroji ih sama i usporedi s results() ugovora i sa stanjem lanca u svakom snapshotu;
  5. ispiše ukupan rezultat: ostatak faze 1 + lanac.

Na dan D ispis završava s SVE PROVJERE PROŠLE. Bitcoin žig pojedinog snapshota (datoteka .json.ots uz njega) provjerava se na opentimestamps.org ili naredbom ots verify. Više o formatu: provjerljivi zapis.

# Zapis prijelaza

Što Vrijednost
Trenutak prijelaza (chain_from) 2026-09-26 01:20:41.770077 UTC
Ugovor MaksimirGlasanjeV1 0x812960FA1120121DEd82A8806aECE93dcf49E869, Gnosis (chainId 100), blok deploya 48440122, izvor potvrđen na Sourcifyju (exact match)
Vlasnik ugovora Safe 2 od 3 0xfb1b7a0e5d43e2B92d1956C70018e2eE53B2c576; vlasnik može zamijeniti registrara, jednom odrediti nasljednika (V2) i podesiti koliko dugo vrijedi stari korijen grupe, ali nema funkciju koja dira listiće, zbroj ili rok
Registrar (potvrđuje pravo glasa) 0x0F81daa9A724eAe838BE22dd446fcdB7Fbfa5374
Kraj glasanja u ugovoru (closesAt) 31. 12. 2027. u 23:59:59 po zagrebačkom vremenu, nepromjenjiv
Završni snapshot faze 1 20260926T012117Z-seq2.json (maksimir-snapshot/3, phase1_final: true), run Actiona, commit dfab6ff
Vrh lanca faze 1 seq 2, hash b3b94377339bba2bd04c3fb978bda52b3150b65dec1646fe44a561105b49de16
Vrh ZK grupe faze 1 seq 1, hash 433a3c8abad42ffe03d406f91c378881a8bb63ec0aa33ba43347ff16ffada48e
Stanje lanca u snapshotu blok 48440478 (0x0ae8fdf5a6d9b13f6597822ff76e311b1b3557ff84c1ec26fc1ca379919ccbe3), 1 registracija, 1 glasač
Izvoz faze 1 u repozitorij glasanje/faza1/, commit 92982e9
Stanje na dan D faza 1: 0 aktivnih listića (probni listić povučen 25. 9.), lanac: 1 glasač

Glasanje je u trenutku prijelaza tek počinjalo, pa je prijelaz napravljen prije šire objave. Tako nitko nije morao prenositi listić: u fazi 1 nije bilo nijednog aktivnog listića.

# Iskrene granice

Prije prijelaza kôd su pregledala dva neovisna pregleda (drugi model od onoga koji je pisao kôd). Nijedan nije našao način da netko glasa umjesto drugoga, glasa dvaput, promijeni tuđi listić ili pokvari zbroj. Našli su stvari oko toga koje još nisu popravljene. Prijelaz je napravljen uz izričito prihvaćanje tih rizika:

  • Privatnost prema nama. Registracija i prvi listić šalju se jedno za drugim, pa bi operater koji spoji zapise registrara i relayera mogao povezati listić s osobom. Javnost vidi samo pseudonimne podatke (commitment, nullifier), ne i osobu. Obećavamo da zapise ne spajamo, ali to je obećanje, a ne kriptografsko jamstvo. Plan je razdvojiti ta dva koraka u vremenu.
  • Anonimne objave se ne provjeravaju pri upisu. Tko želi, može upisati lažnu „anonimnu objavu”. Stranica objave je prepoznaje kao lažnu (provjera ide u pregledniku, s lanca), ali brojač objava i pregled poveznice na društvenim mrežama to ne znaju. Na zbroj glasova to ne utječe.
  • ZK datoteke (oko 2 MB, preuzimaju se pri izradi dokaza) dolaze s poslužitelja projekta Semaphore, bez naše provjere hasha. Plan je poslužiti ih s ove domene, uz provjeru.
  • Satni žig u Bitcoinu nije baš svaki sat: GitHub zakazane runove ponekad preskače.

Svi nalazi s objašnjenjem: prvi pregled i drugi pregled.

# Ako nešto pođe krivo

  • Relayer ne radi: stranica nudi „preuzmi paket” pa listić može poslati bilo tko, s bilo kojim novčanikom. Listić je već potpisan i ne može se promijeniti.
  • Greška u ugovoru: ugovor se ne može mijenjati (nema proxyja). Popravak je novi ugovor V2, a glasač sam, svojim ključem, seli listić. V1 se broji i dalje. Verzioniranje.
  • Lanac mora stati: faza 1 se može ponovno otvoriti jednom zastavicom. Listići na lancu ostaju i broje se, a osoba koja je već na lancu ne može opet glasati u fazi 1.

# Dalje