Skip to main content

Proof of Token Used (PoTU)

PoTU = mecanism de deflație controlată: proposer-ul fiecărui bloc arde OMBRA ca "energy cost". Scalat cu munca AI din bloc — blocuri goale ard minim, blocuri cu task-uri mari ard proporțional.

Formula

burn_proposer = MAX(0.00001, total_block_tokens / 10,000,000) OMBRA

În micro-OMBRA:

burn_micro = MAX(10, totalTokens × 1_000_000 / 10_000_000)
= MAX(10, totalTokens / 10)

Constantele (din packages/core/src/transactions/types.ts):

  • MIN_BURN_PER_BLOCK = 10n (10 micro = 0.00001 OMBRA)
  • BURN_TOKEN_DIVISOR = 10_000_000n

Exemple

ScenariuTokens AI totalBurn
Bloc gol (heartbeat)00.00001 OMBRA
Task chat scurt50K0.00005 OMBRA
Task chat tipic300K0.00003 OMBRA
Task code agentic2M0.0003 OMBRA
Bloc cu 10M tokens (multi-task)10M0.001 OMBRA
Bloc 100M tokens (heavy)100M0.01 OMBRA

De ce burn (nu stake/pay)?

OpțiuneProCon
Burn (ales)Deflație reală, supply scade. Costul e pierderea, nu transfer.Tokens dispar definitiv
Stake/lockPosibil unlock, mai prietenosNu rezolvă supply problem
Pay-to-validatorsRedistribuie, fără pierdereNu deflation, doar rotație

Confirmat de spec: vrem emisiune redusă + deflație activă scalată cu activitate.

Heartbeat block

Bloc gol (fără task-uri) NU e gratis — proposer-ul tot arde MIN_BURN = 0.00001 OMBRA. Asta înseamnă:

  • 5760 blocuri/zi × 0.00001 = 0.0576 OMBRA/zi ars în heartbeat
  • Acoperire cost minimal "I'm alive" + protecție contra spam-ului de blocuri goale

Verificare

În chain.validateBlockV2Consensus(), fiecare bloc post-fork e verificat că:

  1. Conține o BurnTx semnată de block.proposer
  2. burnTx.amount === calculateBurnAmount(totalBlockTokens) (deterministic)
  3. block.tokensConsumed === totalBlockTokens (header match)
  4. block.tokensBurned === burnTx.amount.toString() (header match)

Dacă oricare nu match → blocul e respins de toate peers la sync.

Tx type nou: BURN

interface BurnTx extends BaseTx {
type: "BURN";
amount: bigint; // micro-OMBRA arși
reason: "block_energy";
blockIndex: number; // index blocul pentru care e burn
tokensConsumed: number; // total tokens AI (verificabil)
}

Builder: buildBurnTx în core.

Apply în chain: scade tx.amount din block.proposer.balance, nu adaugă la nicio destinație.

Trade-off-uri

De ce divisor 10M (NU 1M)?

  • 1M ar însemna burn = tokens / 1M, adică proposer arde la fel de mult cât primește miner-ul — too aggressive
  • 10M = 1/10 din miner reward — cost notabil dar nu confiscator

De ce MIN 0.00001 (NU 0)?

  • Heartbeat — proposer trebuie să fie incentivat să nu producă blocuri goale doar pentru sync
  • Permite future spam-protection (blocurile goale ard mai mult cu modificare formula)

Vezi și