Fee split — user task
Când un user submitează un task AI cu fee X OMBRA, acel fee se distribuie post-fork 70/25/5:
miner = 70% ← cel care procesează task-ul
burn = 25% ← dispare din supply (deflation)
validator = 5% ← cel care atestă blocul cu TASK_REWARD
Diagramă
┌──────────────────────────────────────────────┐
│ │
│ USER FEE: 100% (ex: 1 OMBRA) │
│ │
└──────────────────────────────────────────────┘
│
├──── 70% → MINER (cel ce procesează AI)
│
├──── 25% → BURN (deflation, dispare)
│
└──── 5% → VALIDATOR (semnează blocul)
Exemplu
User submitează TASK_SUBMIT cu fee 1 OMBRA:
| Categorie | Procent | Valoare |
|---|---|---|
| Miner (procesează task) | 70% | 0.70 OMBRA |
| Burn (dispare) | 25% | 0.25 OMBRA |
| Validator (atestă bloc) | 5% | 0.05 OMBRA |
| Total | 100% | 1.00 OMBRA |
În plus, miner-ul primește separat reward-ul PoATU = (output+thinking)/1M, iar validatorul primește încă 0.0001 OMBRA base reward per attestare.
Cod sursă
export const FEE_SPLIT_V2 = {
miner: 70n,
burn: 25n,
validator: 5n,
} as const;
export function calculateFeeSplit(fee: bigint): FeeDistribution {
return {
miner: (fee * 70n) / 100n,
burn: (fee * 25n) / 100n,
validator: (fee * 5n) / 100n,
};
}
Aplicare on-chain
În fluxul TASK_REWARD distribuit de validator după procesare:
const { miner, burn, validator } = calculateFeeSplit(task.fee);
// Construiește TASK_REWARD cu split
const rewards = [
{ address: bestMinerId.address, amount: miner + tokensReward, reason: "miner" },
{ address: validatorAddress, amount: validator, reason: "validator" },
{ address: TREASURY_ADDRESS, amount: 0n, reason: "burn" }, // amount=0, doar marker
];
Pentru reason: "burn", chain.applyTaskReward() NU adaugă la nicio adresă (tokens dispar):
for (const reward of tx.rewards) {
if (reward.reason === "burn") continue; // skip — burn
// ... adaugă la balance address
}
Comparație v1 vs v2
| Categorie | v1 split | v2 split | Schimbare |
|---|---|---|---|
| Miner | 70% | 70% | = |
| Proposer | 20% | 0% (eliminat) | −20% |
| Validator | 5% | 5% | = |
| Treasury | 5% | 0% (eliminat) | −5% |
| Burn | 0% | 25% | +25% |
V2 mută alocarea proposer + treasury la burn. Asta:
- Reduce inflația (25% din fee-uri se distrug)
- Elimină Treasury (nu mai era folosit decât ca buffer fee → distribuție)
- Proposer câștigă acum din: validator base reward (dacă self-atestă) + burn ales mai mic pentru ele
Min fee
Fee minim pentru TASK_SUBMIT: 0.01 OMBRA (din MIN_TASK_FEE = 10_000n micro).
Sub minim → tx respinsă la validateTxAgainstState().