REPRESENTTHE PUBLIC RECORD
RECORD / METHODOLOGY

Don't trust us. Audit us.

This page explains exactly what Represent writes to the public ledger and how to recount any ballot yourself — no account, no app, no permission needed.

1 · What gets recorded

Every vote on a public ballot is a transfer of exactly 1 RPV token from the voter's wallet to a position address — a unique address that stands for “support” or “oppose” on that specific ballot. Nobody holds the keys to a position address; tokens sent there are votes, permanently.

LEDGERBase Sepolia — a public Ethereum network
VOTE TOKENRepresent Vote Token (RPV) · 0x4a57Cd1C4235cb7Af37625bA59bA00beB2265312
ONE VOTE1 RPV transferred to a position address
PILOT PHASE

The ledger currently runs on Base Sepolia, a public test network — gas is free while we grow. The mathematics on this page are identical on Base Mainnet, and the move is planned. Vote counts on this site are authoritative regardless of network.

2 · How position addresses are derived

The position address for any ballot is pure arithmetic — no database, no server, no trust required:

address = last 20 bytes of keccak256( utf8( "<ballot-id>-support" ) )

The same rule with -oppose gives the oppose address. Anyone can run it — here it is in JavaScript with the ethers library:

const h = ethers.keccak256(ethers.toUtf8Bytes(ballotId + "-support"));
const supportAddress = ethers.getAddress("0x" + h.slice(-40));

Worked example. Ballot 65bc4f40-ed16-4a0e-8851-9b8903f9ec14 (“Provincial control over immigration”, Alberta Shadow Referendum Q1):

SUPPORT0xe14B064E3AaBB2dbf910897F3714731D982BAf7f
OPPOSE0x90Cdc7C7F432a28330055f4eEA8016E54e7eB665

Run the formula yourself and you will get these exact addresses. If we ever published a different address for this ballot, the mismatch would be provable.

Multiple-choice ballots use the same idea with one address per option, derived from the ballot id, the option's index, and the relay wallet's public address via the standard ABI encoding (ballotId, optionIndex, relayerAddress, "OPTION_VOTE").

3 · Recount a ballot yourself

  1. Derive the ballot's support and oppose addresses with the formula above (or start from the worked example).
  2. Open the RPV token on the block explorer: https://sepolia.basescan.org/token/0x4a57Cd1C4235cb7Af37625bA59bA00beB2265312 and go to the Transfers tab.
  3. Filter transfers to the support address. Each transfer of 1 RPV is one verified ballot in support. Count them.
  4. Repeat for the oppose address. Compare both counts to the tally published on this site.

Every transfer carries a timestamp and a transaction hash — the vote's permanent receipt. Changing or deleting a past entry is not possible on the network; that is what “tamper-evident” means here.

4 · What this proves — and what it doesn't

It proves: every recorded ballot is permanent, timestamped, and independently countable by anyone. No one — including us — can quietly alter a past vote, inflate a published split beyond what the chain supports, or delete history without the gap being visible.

Honest limits: