Enhancement: Deterministic transaction hashing across all record fields
Los mantenedores suelen responder en 2 días
Evaluación
- Dificultad
- 2/5
- Tiempo estimado
- 1-3 horas
- Aptitud para principiantes
- 74/100
- Tipo de issue
- Nueva funcionalidad
- Claridad
- Bien especificado
- Estado de actividad
- Activo
- Stack tecnológico
- java
- Área
- blockchain
Línea de trabajo
Empieza por Transaction.toString() en src/main/java/minichain/Transaction.java (alrededor de las líneas 49-52) y por el bucle de hojas en Block.computeMerkleRoot() en src/main/java/minichain/Block.java (alrededor de las líneas 37-39). Añade a Transaction un método hash() que genere un digest de cada campo del registro, y luego cambia las hojas para que lo usen. Amplía BlockchainTest.java con un caso por campo que muestre que el hash cambia, y comprueba si alguna prueba existente afirma una raíz de Merkle fija. Se da por terminado cuando mvn clean test pasa y se cumplen los criterios de aceptación del issue.
Escrito por el modelo de indexación a partir del texto del issue.
Descripción
Problem
In Block.computeMerkleRoot(), leaf hashes were constructed using:
tree.add(sha256(tx.toString()));
However, Transaction.toString() only serialized from, to, and amount:
return from + " -> " + to + ": " + amount;
While digital signatures are independently checked during block validation, id and transaction key details were not committed to within the block's Merkle tree root. Tampering with fields like id left the Merkle tree root unchanged.
Proposed Solution
- Add an explicit, deterministic
hash()method toTransactionthat computes a SHA-256 digest over all record fields (id,from,to,amount,senderKey, andsignature). - Update
Block.computeMerkleRoot()to build Merkle leaf nodes directly fromtx.hash(). - Add tests verifying hash determinism, format (64-character hex), field sensitivity, and Merkle root invalidation upon field modification.
- Lenguaje dominante
- Java
- Estrellas
- 0
- Forks
- 3
- Merge medio
- 2 d 5 h
- PR fusionados (30 d)
- 15
Preparar el entorno
- Sin Dockerfile ni archivo de Docker Compose
- Tiene una plantilla de pull request
- Sin guía de contribución
Primeros pasos
- Lee el issue completo y luego la guía de contribución del proyecto.
- Comenta en el issue que vas a ocuparte — evita que dos personas hagan lo mismo.
- Haz un fork del repositorio y trabaja en una rama.
- Abre un pull request que haga referencia al número del issue.
Más de techcsispit/mini-chain
-
Blockchain.isValid() does not verify sender balance, allowing blocks with negative balances to pass validationPosiblemente ocupada @aadiitya2007 la tomó hace 2 días. Abiertobug good first issue
Dificultad 4/5 1-2 días Aptitud para principiantes 20/100
techcsispit/mini-chain#37 · 1 comentario · 1 asignado ·
Los mantenedores suelen responder en 2 días
-
README says changing Block or Transaction makes chain.dat stop loading, but adding a field or method still loads itPosiblemente ocupada @tanujb03 la tomó hace 21 días. Abiertodocumentation good first issue
Dificultad 1/5 Menos de una hora Aptitud para principiantes 25/100
techcsispit/mini-chain#21 ·
Los mantenedores suelen responder en 2 días
Todos los issues de techcsispit/mini-chain
Issues similares
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 82/100
Los mantenedores suelen responder en 1 día
-
Dificultad 1/5 Menos de una hora Aptitud para principiantes 88/100
quarkusio/quarkus-agent-mcp#302 ·
Los mantenedores suelen responder en 2 días
-
build
Dificultad 1/5 Menos de una hora Aptitud para principiantes 85/100
MetricsHub/metricshub-community#1472 ·
Los mantenedores suelen responder en 1 día
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 82/100
Los mantenedores suelen responder en 1 día
-
IdentityArrayObjectSet iterator remove may throw ArrayIndexOutOfBoundsExceptionPosiblemente ocupada @jiteshkhatri11 la tomó hoy. Abierto
Dificultad 2/5 1-3 horas Aptitud para principiantes 72/100
javapathfinder/jpf-core#660 · 1 comentario ·