Audit passed Review basis: September 26, 2026

Opentech OÜ × POSTHUMAN

SyncVotes v2 smart-contract audit

Source-code review of the Daml contracts and signing path behind syncvotes.com/app (v2). It covers browser-side verification, balance accounting, release artifacts and deployed ledger identity across MainNet, TestNet and DevNet.

The source code is public on GitHub. All review stages completed; Opentech OÜ approved the final assessment.

Completed review process

Six stages, end to end

  1. 01Completed

    Review target

    Release pinned to an immutable source revision and one Daml package ID.

  2. 02Completed

    Contract review

    The syncvotes Daml package reviewed module by module: authorization, signatories, ensure clauses, counting and execution.

  3. 03Completed

    Signing path

    Browser-side prepared-transaction hash and root-node checks reviewed against what the server may execute.

  4. 04Completed

    Money and accounting

    Memo deposits, charges, marker deductions and hourly sweeps reviewed against ledger figures.

  5. 05Completed

    Artifact binding

    DAR hash, package ID and vetting on MainNet, TestNet and DevNet compared with the source revision.

  6. 06Completed

    Upgrade and release evidence

    Smart Contract Upgrade lineage 1.0.0 → 1.0.3 checked against prior DARs; deployment evidence reviewed.

Finding matrix

Controls verified

Seven areas reviewed; each control verified in source and, where observable, on the ledger.

F01Verified

Critical

Signing path integrity

The browser recomputes the prepared-transaction hash and checks the requested choice, contract and arguments before the member signs. Unnamed fields are refused. The server executes its own prepared transaction under that hash; its ledger user cannot act as a member.

F02Verified

Critical

Ballot authorization and lifecycle

Voter and provider sign ballots. Membership records votes to block duplicates; a permitted change withdraws the replaced ballot. Counting checks the DAO, deadline, rule, member and share at voting time, and rejects double counting.

F03Verified

High

Execution authority

DAO_Execute carries out only passed proposals under DAO authority, in bounded batches. Dissolution waits for other proposals to finish, and blocks new proposals while in progress.

F04Verified

High

Secret ballot confidentiality

During an open secret ballot, the app serves no totals, turnout or member contract IDs. Ballots cast since 1.0.1 are not held by the DAO creator’s validator.

F05Verified

High

Balance and deposit accounting

Ledger memo deposits count once per event from the configured start time. Charges use participant traffic net of rewards; marker deductions cannot make a charge negative. Balances are provider-signed statements; the package moves no coin.

F06Verified

Medium

Ledger-enforced limits

Text and picture-link lengths are bounded in Daml. Shares and ballot weights are positive by ensure; membership changes require the founding table or a passed vote.

F07Verified

Medium

Upgrade compatibility

Each release since 1.0.0 is a compiler-checked Smart Contract Upgrade of its predecessor; live contracts carry over without migration.

Validation summary

Executed checks

Daml build and upgrade check against 1.0.2
Passed (project evidence)
Frontend and server svelte-check
0 errors, 0 warnings (project evidence)
ESLint and Prettier
Passed (project evidence)
Vite production build
Passed (project evidence)
MainNet, TestNet and DevNet /version
Commit and package matched (project evidence)
DevNet activity markers
One per founding, proposal, first ballot and completed execution; none on a changed vote (project evidence)

Reviewed artifacts

Release binding

SyncVotes · 1.0.3

Package ID

1450e874679f4ccd07c7d9f1aeaff75bdcb186fc0cdf750c3606bddb4f0ecfcc

DAR SHA-256 · project build, September 26

34c272f0672edda5ddc4a1f8499479cd4fdd747931703685f4aaece414ae9d0a

Project build hash; an auditor build hash has not been published. DAR bytes may vary between builds.

Previous release · 1.0.2

Upgrade baseline DAR SHA-256

790774527d26620c5ef4ed36eb3e3bbdbf965fa7cecd8be61c89776eafe2fe7b

Deployment

Three networks

MainNet, TestNet and DevNet reported commit 3c14e2522a76 and package 1450e874… at their /version endpoints on September 26, 2026 (project evidence).

Daml: daml/src/SyncVotes/ — Types, Rules, Tally, Markers, Governance, Account and Billing (909 lines). Application: src/lib/verify.ts, src/lib/server/participant.ts, tally.ts, billing.ts and deposits.ts.

Scope

Limited-scope review

This point-in-time review covers the v2 Daml package, signing path and accounting at the source revision above. It is not formal verification or a penetration test.

The operator can read every DAO hosted by its validator. The published trust model ↗ describes that boundary; the project’s review compared it with the code.