The roadmap marks Soroban smart contracts as complete
but the note reads "stub — correct stellar-sdk v12 APIs,
ready to wire." The contracts/ directory exists in core
with the correct Stellar SDK v12 API surface but no
contract calls are made from any route handler. The
public verifiability guarantee — that anyone can
independently verify a result on the Stellar ledger —
cannot be fulfilled until these stubs are wired in.
Scope:
- POST /api/votes — after a successful vote write,
call record_vote on the Soroban contract and store
the returned transaction ID against the vote record
- POST /api/results/:ballotId/tally — after tally
computation, call finalise_result and store the
transaction ID against the result record
- Surface the Stellar transaction ID on
GET /api/results/:ballotId so the frontend can
display it on the public verification page
- Both calls must fail gracefully — a Stellar network
error must not roll back the vote or tally, mark
the record as pending_anchor and queue a retry
Acceptance Criteria:
The roadmap marks Soroban smart contracts as complete
but the note reads "stub — correct stellar-sdk v12 APIs,
ready to wire." The contracts/ directory exists in core
with the correct Stellar SDK v12 API surface but no
contract calls are made from any route handler. The
public verifiability guarantee — that anyone can
independently verify a result on the Stellar ledger —
cannot be fulfilled until these stubs are wired in.
Scope:
call record_vote on the Soroban contract and store
the returned transaction ID against the vote record
computation, call finalise_result and store the
transaction ID against the result record
GET /api/results/:ballotId so the frontend can
display it on the public verification page
error must not roll back the vote or tally, mark
the record as pending_anchor and queue a retry
Acceptance Criteria:
rolling back the vote or tally
app logs a warning on startup if it is missing