web3.js Transacciones seguridad/diferencias

Mientras aprendía a usar el paquete web3.js, encontré dos tipos de transacciones:

RawTransactions/ web3.eth.sendawTransaction(...) y

Transacciones simples/ web3.eth.sendTransaction(...)

Entiendo que para realizar una transacción sin procesar, crea el objeto de transacción y establece un valor hexadecimal para cada clave. Lo que no entiendo es:

1) ¿Por qué necesita hacer que todos los valores sean hexadecimales? (por ejemplo , gasLimit, gasPrice, nonce, etc.)

2) ¿Por qué usar una transacción sin procesar en lugar de la normal? Entiendo que firmas el tx sin conexión y luego simplemente pasas el hash, pero ¿cuál es el punto de hacer esto? Quiero decir, ¿cuándo necesitas hacer el tx crudo?

Si cree que hay algo más que necesito saber estudiar o si puede proporcionar fuentes que me ayuden, se lo agradecería mucho.

¡Salud!

Respuestas (1)

1) ¿Por qué necesita hacer que todos los valores sean hexadecimales?

Porque para la transacción sin procesar, debe preparar los datos sin procesar en el formato que se usa para firmar. Esto es algo que se oculta cuando se usa sendTransaction.

Puedes leer sobre la diferencia entre los dos en estas dos publicaciones:

Diferencia entre transacciones y transacciones sin procesar en web3.js

¿Qué es una "transacción en bruto" y para qué se utiliza?

2) ¿Por qué usar una transacción sin procesar en lugar de la normal?

Si tiene un nodo propio accesible localmente, puede usar sendTransaction, ya que sus cuentas se administran dentro de su nodo. Pero en el caso de que no tenga un nodo propio, está utilizando nodos de terceros para confiar su transacción a la red. Dado que no desea presentar su clave privada a estos nodos, debe preparar y firmar la transacción localmente (por ejemplo, en JavaScript en el lado del cliente en su navegador) en el formato sin formato y luego llamar a sendRawTransaction en el (no necesariamente fiable) nodo delegador.