Skip to main content

Validator mode

Toți minerii activi sunt automat eligibili ca validatori — semnezi blocuri produse de proposer și primești reward extra. Nu există stake separat și nu trebuie activare explicită.

Ce face un validator?

Când un proposer (alt miner) produce un bloc nou:

  1. Proposer-ul cere atestare de la 1-N validatori selectați prin reputation-weighted VRF
  2. Validator-ul primește consensus target: hash(index|prevHash|proposer|txRoot|tokensBurned|tokensConsumed)
  3. Validator-ul verifică datele (recomputează hash-ul local)
  4. Dacă valid → semnează cu cheia sa Ed25519 → trimite înapoi proposer-ului
  5. Proposer-ul include attestations[] în blocul final
  6. La next bloc, distributeValidatorRewards() plătește atestatorii

Eligibilitate

CerințăDetalii
MinerNFT înregistratVezi Register NFT
Reputation ≥ 1Sub 1 = blacklist temporar
Wallet onlineP2P connection activă cu mainnet
Backend NU obligatoriuValidator pur (fără task processing) e OK

Liveness guarantee: proposer-ul e MEREU în lista de validatori (slot 0), pentru a asigura cel puțin o semnătură pe fiecare bloc.

Reward per atestare

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

unde:

  • VALIDATOR_BASE_REWARD = 0.0001 OMBRA (100 micro)
  • numValidators = câți validatori au atestat acel bloc

Exemple

Total fees în blocnumValidatorsReward per validator
0 (bloc gol)10.0001 OMBRA
0.5 OMBRA10.0251 OMBRA
0.5 OMBRA30.00843 OMBRA
2.0 OMBRA10.1001 OMBRA
2.0 OMBRA50.0201 OMBRA

Cu cât mai puțini validatori atestă un bloc, cu atât reward-ul tău e mai mare. Reputation mare îți crește șansele să fii ales.

Workflow tehnic

1. Proposer cere atestare

proposer → POST /ombra/attestation-request/1.0.0 → validator
payload: {
blockIndex: 9523,
prevHash: "abc...",
proposer: "5bb...",
txRoot: "def...",
tokensBurned: "1000",
tokensConsumed: "500000"
}

2. Validator verifică

const target = computeAttestationTarget({
index, prevHash, proposer, txRoot, tokensBurned, tokensConsumed
});

// Validează că NU contradice mempool-ul local
if (alreadySeenConflictingBlock(prevHash, index)) reject();

// Validează că proposer e eligibil VRF
if (!isProposerSelected(blockIndex)) reject();

3. Semnează

const signature = ed25519.sign(target, privateKey);
return {
validatorAddress: walletAddress,
signature: hex(signature),
publicKey: hex(walletPublicKey)
};

4. Proposer construiește blocul

block.attestations = [
{ validatorAddress, signature, publicKey },
// ... pentru fiecare validator care a răspuns
];

block.hash = sha256(block + stateRoot);
broadcast(block);

5. Network validează blocul

Fiecare nod care primește blocul:

for (const att of block.attestations) {
const target = computeAttestationTarget({...block});
if (!ed25519.verify(att.signature, target, att.publicKey)) reject();
if (!isValidatorEligible(att.validatorAddress, block.index)) reject();
}
if (block.attestations.length === 0) reject(); // min 1 attestation post-fork

6. Reward distribuit

În applyBlockTransactions() post-fork:

const numValidators = block.attestations.length;
const totalFees = sum(block.txs.map(tx => tx.fee));
const rewardPerValidator = calculateValidatorReward(totalFees, numValidators);

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

Activare în wallet

În Ombra Wallet, validator mode e implicit activ odată cu mining-ul. Nu există toggle separat.

Pentru validator-only mode (fără task processing):

  1. Tab MiningSettings → toggle Procesează task-uri → OFF
  2. Toggle Atestă blocuri → ON
  3. Click Activează Mining

Wallet-ul va semna blocuri propuse de alți mineri fără să proceseze task-uri AI.

Avantaj: Zero cost backend (Claude/API/Ollama nu necesare). Doar wallet pornit + conexiune. Dezavantaj: Reward mic (~0.0001 OMBRA × 5760 blocks/zi × P(selected) — depinde de reputation).

Statistici validator

Tab Mining → secțiunea Validator Stats:

  • Atestări semnate (24h / lifetime)
  • Reward total din atestări
  • Reputation curent
  • Slot rate (% blocuri în care ai fost selectat)

Anti-cheat

Mainnet detectează validatori care semnează target-uri invalide (ex: bloc cu txRoot care nu corespunde tx-urilor):

  • Prima detectare: −20 reputation
  • A doua detectare: blacklist 1000 blocuri
  • A treia detectare: blacklist permanent (slashing)

Wallet-ul recomandă MEREU înainte de semnătură — dacă proposer trimite ceva invalid, atestare e respinsă automat fără penalty.

Vezi și