> For the complete documentation index, see [llms.txt](https://docs.glacislabs.com/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.glacislabs.com/zero-delta/points-program.md).

# Points Program

Hold supported tokens in your own wallet and earn ZeroDelta Points. How it works, how points are calculated, and the rules.

Hold supported stablecoins and tokenized assets in **your own wallet**, sign a commitment, and earn **ZeroDelta Points** for as long as you keep holding. Nothing is deposited, locked or bridged — your funds never leave your wallet.

{% hint style="info" %}
Points are a record of participation. They carry no promise of any future distribution, value or entitlement.
{% endhint %}

> The ZeroDelta app and API use the internal name **Stakeflow** for this program. The names refer to the same thing.

**Take part in the ZeroDelta app →** [**zerodelta.glacislabs.com/stakeflow**](https://www.zerodelta.glacislabs.com/stakeflow)

### At a glance

|                |                                                                                       |
| -------------- | ------------------------------------------------------------------------------------- |
| **What earns** | The supported tokens you commit, held in your wallet on a supported chain             |
| **Rate**       | Currently **1 point per US dollar of value held, per day**, for every supported token |
| **Minimum**    | **$10** of each committed token — to join, and to keep earning                        |
| **Custody**    | None. No deposit, no lock, no Points contract. Move your funds whenever you like      |
| **Leaving**    | Revoke at any time with a signature. Points already earned are never taken away       |
| **Wallets**    | EVM wallets (including ERC-1271 smart-contract wallets) and Solana wallets            |

The live list of supported tokens and chains, with each token's rate, is shown in the [ZeroDelta app](https://www.zerodelta.glacislabs.com/stakeflow).

***

### How it works

```mermaid
sequenceDiagram
    participant W as Your wallet
    participant A as ZeroDelta app
    participant P as Points service (off-chain)
    participant C as Public blockchain
    W->>A: Pick a token and an amount
    A->>P: Request a commitment
    P-->>W: Terms and message to sign
    W->>P: Signature (no transaction, no gas)
    P->>C: Check the wallet holds at least $10
    P-->>A: Commitment recorded
    loop At unannounced times
        P->>C: Read the wallet's committed token balances
        P->>P: Credit points for the period since the last reading
    end
```

{% stepper %}
{% step %}

#### Commit

In the [ZeroDelta app](https://www.zerodelta.glacislabs.com/stakeflow), choose a supported token on a supported chain and the amount you intend to hold. You sign a short statement — EIP-712 typed data on EVM, a signed message on Solana. It is a signature, not a transaction: it costs no gas and moves nothing. The full terms are shown before you sign.
{% endstep %}

{% step %}

#### Hold

Keep the tokens in the same wallet. The Points service reads your balance of each committed token from the public blockchain at times that are not announced in advance.
{% endstep %}

{% step %}

#### Earn

Each reading credits points for the time since the previous reading.
{% endstep %}

{% step %}

#### Revoke (optional)

Sign a revocation for a token whenever you want. Earning on that token stops; everything already earned stays.
{% endstep %}
{% endstepper %}

***

### How points are calculated

Points accrue per wallet, per chain, per committed token. For each period between two consecutive readings:

```
points = min(balance at previous reading, balance at this reading, committed amount)
         × token USD price × rate × days in the period
```

* **The lower balance counts.** A balance earns for a period only if it was there at both ends. Tokens added part-way start earning from the next period; tokens removed stop earning straight away. A token's first reading after it is committed therefore earns nothing — it starts the first period.
* **The commitment is a cap, not a lock.** Hold less than you committed and you earn in proportion to what you hold. Hold more and the excess earns nothing until you sign a new commitment for the larger amount, which replaces the old one. A new commitment or a revocation applies to the whole period in progress.
* **Valued in dollars.** Every token, stablecoins included, is valued at its market USD price, so a dollar of one supported token earns the same as a dollar of another.
* **Weighted by time.** Points scale with the time elapsed in each period.
* **Precise.** Points are computed in high-precision decimal arithmetic and kept at full precision. Each chain's total is shown rounded down to whole points, and a wallet's total adds those chain totals together.

#### Worked example

A wallet commits **1,000 USDC** (price $1.00, rate 1). Readings are shown one day apart to keep the numbers simple — real reading times are not published.

| Reading   | Balance | Earning basis                        | Points for the period |
| --------- | ------- | ------------------------------------ | --------------------- |
| 1         | 1,000   | — first reading                      | 0                     |
| 2         | 1,200   | min(1,000, 1,200, cap 1,000) = 1,000 | 1,000                 |
| 3         | 400     | min(1,200, 400, cap 1,000) = 400     | 400                   |
| 4         | 1,000   | min(400, 1,000, cap 1,000) = 400     | 400                   |
| **Total** |         |                                      | **1,800**             |

***

### Rules

Every rule applies **per token and per chain**. The same token on two chains is two separate commitments.

#### Joining

* **You join per chain.** Commit on each chain where you want your balances read; the same address on another chain is not read until it commits there.
* When your signed commitment is submitted, the wallet must hold at least **$10** of that token on that chain, and the committed amount must also be at least $10. For this check a stablecoin counts as $1 per token; other assets use their USD price.
* You can commit several tokens on the same chain. Signing again for a token replaces its previous commitment.
* Sign-ups on a chain, including rejoining after dropping out, are subject to a program-wide daily limit.

#### What is read

Only the tokens you have committed are read. Holding other tokens in the same wallet costs nothing and earns nothing:

| Token on that chain                             | Read?                     | Earns on                                |
| ----------------------------------------------- | ------------------------- | --------------------------------------- |
| Committed                                       | Yes                       | its balance, up to the committed amount |
| Not committed                                   | No                        | nothing                                 |
| Revoked, or ended by dropping below the minimum | No, from the next reading | nothing, until it is committed again    |

#### Staying eligible

* At every reading, **each committed token** must be worth **$10 or more** in the wallet on that chain. Balances of different tokens are never added together.
* If a committed token is below that, its final period is still paid in proportion to what was held, and that commitment ends. Your other commitments on the chain are not affected.
* To earn on that token again, commit it again. A **24-hour cooldown** applies before recommitting a token that dropped out. If it was your last commitment on that chain, the cooldown covers every token there.

#### Leaving

* Revoke a token at any time by signing a revocation. Earning on that token stops, and the period in progress is not credited for it.
* When no commitment remains on a chain, the wallet stops being read there.
* **Points are never deducted** — not when you revoke, not when you drop below the minimum, and not when you move your funds.

#### Wallet notes

* **Smart-contract wallets** must already be deployed on the chain you commit on.
* **Solana:** balances are read from the wallet's associated token account for each token, which is where modern wallets keep them. Tokens held in any other token account are not counted.

***

### Architecture

The program runs entirely **off-chain**. There is no Points smart contract: the service only verifies signatures and reads public blockchain state.

```mermaid
flowchart TB
    W[Your wallet] -->|signs commitment or revocation| APP[ZeroDelta app and API]
    APP --> ENR
    subgraph PS[Points service - off-chain]
        ENR[Enrolment<br/>verify signature and minimum] --> LED[(Points ledger<br/>append-only)]
        SNAP[Snapshot engine<br/>read committed balances, credit points] --> LED
    end
    CH[(Public blockchains<br/>EVM and Solana)] -->|balances| SNAP
    PR[USD price feed] -->|prices| SNAP
    LED -.->|points, rates, commitments| APP
```

| Component           | What it does                                                                                                                                                             |
| ------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
| **Enrolment**       | Issues a single-use, short-lived challenge carrying the terms, verifies the signature for the address, checks the minimum, and records the commitment or revocation.     |
| **Snapshot engine** | Reads each participating wallet's committed token balances from chain nodes at unannounced times, values them in USD, and credits the period since the previous reading. |
| **Points ledger**   | An append-only record of every credited period. Nothing in it can reduce a total, and credited periods are never recalculated.                                           |
| **ZeroDelta API**   | Serves points, rates and commitments to the app and to integrators — see the Stakeflow endpoints in the [API reference](/zero-delta/integration-guide/api.md).           |

***

### Fair play

* **Unannounced readings.** Reading times are not published, so a balance cannot be timed around them.
* **Both ends must hold.** Only the lower of two consecutive readings earns, so a short-lived top-up earns nothing.
* **Real funds per commitment.** The $10 minimum applies to every committed token, and the cooldown stops a token from cycling in and out.
* **Your signature only.** Committing and revoking both require the wallet's own signature, and each challenge can be used once.
* **Changes are forward-only.** Rates, supported tokens and minimums may change over time. A change applies from the next reading — including to existing participants when the minimum changes — and points already credited stay as they are.
