¿Por qué una transacción firmada incluye un campo "hash"?

Al firmar una transacción usando la go-ethereumbiblioteca, el objeto resultante se parece a esto:

"tx": {
        "nonce": "0x7",
        "gasPrice": "0x77359400",
        "gas": "0x5208",
        "to": "0x9ea773969b2622a0a361fd137b088f90f88bd82f",
        "value": "0x7a120",
        "input": "0x",
        "v": "0x47a",
        "r": "0x1944717416cde8sa47ed607325bfb85a40618da4a6dab9c6e1636609612deddd",
        "s": "0x5480b689ffbab6o7dc58ae5d04369c3841a4fcbc95edecf7cf8608b9bf818e9c",
        "hash": "0x997d39754493fee0581985667s89874a83c8d93b29e0e8802831781b140b87d2"
    }

La forma en que entiendo el proceso de verificación de transacciones es que la clave pública , el hash de la transacción y los valores r , s , v de la firma se utilizan para verificar que la transacción fue firmada por la clave privada del usuario .

Lo que parece que no puedo entender es por qué el objeto de transacción firmada a menudo incluye un "hash"campo, por ejemplo, https://web3js.readthedocs.io/en/1.0/web3-eth.html#signtransaction

es decir, mi suposición sería que si está verificando contra el hash provisto, entonces realmente no está verificando nada (el hash podría verse comprometido). Tengo entendido que siempre desea realizar un hash de la transacción usted mismo para verificar que este es realmente el hash correcto que ha sido firmado por la clave privada del usuario.

¿Qué me estoy perdiendo?

Respuestas (1)

Ese es el hash de toda la transacción (todo, incluida la firma). No se utiliza para la verificación (que se realiza mediante la firma). En cambio, sirve como el identificador único global de una transacción, por ejemplo, es lo que ingresa como parámetro para obtener:

web3.eth.getTransactionReceipt('txn-hash')
Por supuesto, eso tiene sentido.