Skip to main content

Rewards: miner + validator

Două tipuri de actori câștigă OMBRA post-fork: mineri (procesează task-uri AI) și validatori (semnează blocuri produse de proposer).

Reward miner (PoATU)

reward_miner_tokens = (outputTokens + thinkingTokens) / 1,000,000 OMBRA

PLUS share din fee-ul user-ului care a submitat task-ul:

reward_miner_fee = 70% × fee_task

Total miner per task: reward_miner_tokens + reward_miner_fee

Reward validator

Per attestare (semnătură pe un bloc):

reward_validator = (VALIDATOR_BASE_REWARD + 5% × total_fees_in_block) / numValidators

unde VALIDATOR_BASE_REWARD = 0.0001 OMBRA (100 micro).

Pentru un bloc cu 1 task fee 0.5 OMBRA și 1 validator:

  • reward = (0.0001 + 5% × 0.5) / 1 = 0.0001 + 0.025 = 0.0251 OMBRA

Calculator interactiv

Calculator reward

Miner reward (tokens)0.300000 OMBRAMiner share fee (70%)0.350000 OMBRAMiner TOTAL0.650000 OMBRAValidator reward0.025100 OMBRABurn fee (25%)0.125000 OMBRABurn proposer (PoTU)0.030000 OMBRANet new supply+0.520100 OMBRA

Exemple comparative

TaskTokens outTokens thinkingFeeMiner totalValidatorBurn proposerNet supply
Chat scurt5K00.010.0120.000600.00001+0.012
Chat tipic100K200K0.50.6500.025100.00003+0.550
Code simple50K50K0.30.3100.015100.00001+0.265
Code agentic500K1.5M2.03.4000.100100.00020+3.000
Long analysis1M3M5.07.5000.250100.00040+6.500

(Net supply = miner + validator − burn_fee − burn_proposer)

Mecanica plății

Pentru miner

Reward-ul nu vine direct ca tx separat. Apare în:

  1. TASK_REWARD tx după validare — rewards: [{address: miner, amount: X, reason: "miner"}]
  2. Aplicate la applyTaskReward() — incremente balance miner

Pentru validator

Validator-ul nu primește tx explicită. Reward-ul e distribuit automat în distributeValidatorRewards() apelat din applyBlockTransactions() post-fork:

const rewardPerValidator = calculateValidatorReward(totalFeesInBlock, numValidators);
for (const att of block.attestations) {
const acc = await db.getAccount(att.validatorAddress);
await db.putAccount({ ...acc, balance: acc.balance + rewardPerValidator });
}

Asta evită spam de tx-uri ATTESTATION_REWARD în mempool (deși tipul există, e rezervat pentru rare cazuri de payout explicit).

Cod sursă

packages/core/src/consensus/reward.ts:

export function calculateMinerReward(outputTokens: number, thinkingTokens: number): bigint {
const totalTokens = BigInt(outputTokens + thinkingTokens);
return (totalTokens * 1_000_000n) / TOKENS_PER_OMBRA;
}

export function calculateValidatorReward(totalFeesInBlock: bigint, numValidators: number): bigint {
if (numValidators <= 0) return 0n;
const feeShare = (totalFeesInBlock * FEE_SPLIT_V2.validator) / 100n;
return VALIDATOR_BASE_REWARD + feeShare / BigInt(numValidators);
}

Vezi și