Documentation
Concepts
Shielded pools, assets, fees, memos, blocks and validators, and the exchange pool.
Test network: the coins have no value
Shielded pools and notes
Your balance on Tint is a set of notes. A note is a record, encrypted to one address, that says “this much of this coin belongs to you”. Notes are stored on the chain as commitments in a Merkle tree, so nobody can read them or tell whose they are.
To pay, your wallet spends some notes and creates new ones: one for the recipient, and change for you. It proves, with a Halo 2 proof, that it owns the spent notes, that they existed, and that the values balance, without saying which notes. Each spent note reveals a nullifier, a tag the network uses to refuse a second spend of the same note without learning which note it was.
The recipient's wallet reads every block and tries to decrypt each new note with its viewing key. A note that decrypts is theirs. This trial decryption is why a node cannot tell who a payment is for.
Assets
A coin is an asset with a number. Asset 0 is the native coin TINT; asset 1 is the test dollar TUSD. A chain can define up to 16 assets. Every asset is its own shielded pool: a payment moves notes of one asset, and the exchange is the only place where two assets meet.
Amounts are whole numbers of units. One coin is 100,000,000 units (8 decimals), so the smallest amount of TINT is 0.00000001.
Fees
Every action of a payment pays a minimum fee, and the fee is paid in the coin you send. You never need a second coin to pay for gas. On the current test network the minimum is:
| Coin | Fee per action |
|---|---|
TINT | 0.00005 |
TUSD | 0.001 |
A transaction has at least one action and at most 64. The wallet shows the exact fee before you confirm. The fee is public.
Memos
Every note carries a 512-byte memo field, encrypted along with the note. Put a short text there and only the recipient's wallet can read it. An empty memo costs nothing extra, because every note has the field anyway.
Blocks and validators
Tint is proof-of-stake. A fixed set of validators agrees on each block using a BFT consensus (Simplex, from the commonware library). A block is final once the validators have agreed on it: there is no waiting for confirmations to pile up.
- A block with payments is built as soon as there is a payment to include.
- A quiet chain builds an empty block about every 5 seconds, so that empty blocks do not fill the disk. A payment does not wait for that rest.
- The consensus parameters set a minimum of half a second between two blocks.
- The validators are chosen at genesis and do not change yet. On the public test network all four run on one server.
Block rewards pay validators: the test network starts at 2 TINT per block, halves every 15,768,000 blocks and settles at a tail reward of 0.1 TINT.
The exchange pool
The chain has a built-in pool that trades TINT and TUSD against each other. It follows the constant-product rule (x · y = k): the price moves as the pool's two reserves change. The pool keeps 0.3% of what is paid in, and the fee stays in the pool.
It starts with 200,000 TINT and 100,000 TUSD, a price of half a test dollar per coin. Nobody runs the pool, and its coins cannot be withdrawn: it can only trade.
A swap states the least it will accept. If the pool's price has moved so that it can no longer give that, the node answers price_moved and nothing is spent.
Limits
| Limit | Value on the test network |
|---|---|
| Actions in one transaction | 64 |
| Actions in one block | 2,048 |
| Recent roots a transaction may anchor to | 1,000 blocks |
| How far ahead a transaction may set its expiry | 1,000 blocks |