Hacktoberfest 2026: le issue che i maintainer hanno segnato per ottobre, aperte e adatte ai principianti. Sfoglia le issue Hacktoberfest

isValid() does not verify mining reward amount or enforce a single reward transaction per block

Chiusa Adatta ai principianti
#35 1 commento 0 reazioni 0 assegnatari Vedi su GitHub

I maintainer di solito rispondono entro 2 giorni

Nessuno ha ancora preso questa issue.

Valutazione

Difficoltà
2/5
Tempo stimato
1-3 ore
Idoneità per principianti
72/100
Tipo di issue
Bug
Chiarezza
Specificata chiaramente
Stato di attività
Attiva
Stack tecnologico
java
Ambito
blockchain

Direzione di ricerca

Leggi Blockchain.isValid() e Transaction.NETWORK in Transaction; l’issue indica i controlli mancanti e il README definisce la ricompensa di 50 coin. Segui il modo in cui i blocchi espongono le loro transazioni, poi aggiorna la validazione in modo che ogni blocco abbia al massimo una transazione di rete e il suo importo sia uguale a MINING_REWARD. Il lavoro è completato quando importi alterati e ricompense duplicate fanno restituire false a isValid(), mentre i blocchi minati validi continuano a superare la validazione.

Scritto dal modello di indicizzazione a partire dal testo della issue.

Descrizione

Description

In mini-chain, mining rewards are issued with Transaction.NETWORK ("network") as the sender.

Under Transaction.hasValidSignature():

public boolean hasValidSignature() {
    if (NETWORK.equals(from)) return true;
    ...

Transactions from "network" bypass digital signature checks by design because there is no private key for the network.

However, in Blockchain.isValid(), there is no validation verifying the mining reward amount or the count of reward transactions:

  1. A block's mining reward can be altered from MINING_REWARD (50) to an arbitrary amount (e.g. 1,000,000 coins).
  2. A block can contain multiple "network" reward transactions.

When a block's reward transaction is tampered with, the Merkle root recalculated, and the block re-mined to meet the difficulty target (as demonstrated in Menu Option 7), isValid() still returns true because:

  • The recalculated Merkle root matches block.getMerkleRoot().
  • The re-mined block hash meets the difficulty target.
  • tx.hasValidSignature() returns true for "network" without validating that the amount equals MINING_REWARD.
Expected Behavior

According to the README:

  • "Mining: A mined block holds all waiting payments plus a 50 coin reward for the miner."
  • "Validation: isValid() returns false if anything in any mined block was changed..."

isValid() should verify that in each mined block:

  1. There is at most one transaction from Transaction.NETWORK.
  2. Any transaction from Transaction.NETWORK has tx.amount() == MINING_REWARD.

If either invariant is violated, isValid() should return false.

Lingua principale
Java
Stelle
0
Fork
3
Merge medio
1g 18h
PR unite (30g)
14

Preparare l'ambiente

  • Nessun Dockerfile né file Docker Compose
  • Ha un modello di pull request
  • Nessuna guida per i contributori

Come iniziare

  1. Leggi tutta la issue e poi la guida ai contributi del progetto.
  2. Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
  3. Fai un fork del repository e lavora su un branch.
  4. Apri una pull request che faccia riferimento al numero della issue.

Altre issue di techcsispit/mini-chain

Tutte le issue di techcsispit/mini-chain

Issue simili

Altre issue su Java

Ricevi le nuove issue nella tua casella

Un breve riepilogo di issue GitHub adatte ai principianti.