中文版

TonVote.pdf

TON.Vote is a completely decentralized, on-chain DAO governance platform built exclusively for the TON ecosystem, developed by the Orbs team. The core user base is anticipated to be TON DAOs, projects, and other TON-related communities requiring governance activities. This white paper will describe the design and technical aspects of the platform.

Design goals

● Decentralized infrastructure, allow all end users to audit the integrity of all votes ● Gasless voting to increase engagement (users often do not want to pay a few cents to vote) ● Snapshot token holdings at a specific historic block to prevent vote manipulation ● Support a variety of governance strategies (NFT/jettons/delegations/hierarchy/etc) ● Be inspired by snapshot.org, who built a very successful product for EVM ecosystem

Storage

The system relies on two types of decentralized storage for all of its data:

  1. TON smart contract - Expensive storage as contract persistent state data for headers only. Stored on TON mainnet (updating this storage costs gas).
  2. IPFS - Cheaper immutable storage for the raw data (holds the actual votes). Will be migrated in full to TON Storage as soon as TON Storage is released to production.

Untitled

The system acts as a secondary logical “blockchain” on top of TON mainnet. Blocks are closed daily (every 24 hours at 23:59:59 UTC). There are two types of blocks (see diagram above): ● “Project N votes” block for day D - A JSON file containing all the votes and proposals submitted by the community of DAO project N for a specific day D. ● “All projects” block for day D - A JSON file which contains the list of all existing DAO projects, each pointing to their own latest “Project N votes” block, updated for a specific day D. The TON smart contract points to the latest “All projects” block (it contains the IPFS URL of the latest “All projects” block in its state data). A new “All projects” block is written at the end of every day. For “Project N votes”, we only store new blocks on days with activity (a day that had new votes or new proposals for the project submitted in it). The blocks contain: ● Proposals - Besides the description, voting duration in days and available answers (all votes are multiple choice), proposals include the logical timestamp on TON mainnet of when holdings snapshot is taken, and the state root of relevant mainnet chains. Proposals are signed off-chain with the public key of the proposer. ● Votes - Besides the selected answer and the proposal this vote belongs to, a vote includes a Merkle proof of the holder’s TON mainnet token balance (matching the state root published in the proposal). Votes are signed off-chain with the public key of the voter. ● Proposal results - When a proposal voting period ends, the votes can be tallied and the winning result can be published. See “Tallying Votes” below for the specifics of the calculation. Proposal results are signed off-chain with the public key of the operators.

Tallying the votes

Voting for a proposal is open for a limited time (for example 7 days). To tally the votes one needs to retrieve all votes belonging to this proposal, for example by reading the 7 consecutive “Project N votes” blocks from when the proposal was published. Each vote is first authenticated by checking the off-chain signature of the voter. The token balance of the voter is authenticated by verifying the included Merkle proof using the state root appearing in the proposal. Votes are tallied by running a standalone “strategy” (this term comes from snapshot.org) TypeScript class over the balances. Community members will be able to PR new strategies, which will enable all sorts of custom governance models - for example, NFT votes weighted by rarity.ֿ

Trustless proofs for users

End users can be sure that vote results are authentic in a completely trustless manner: