Firme una transacción sin procesar con Metamask o Mist

¿Hay alguna forma de usar la clave privada de mi cuenta Metamask o Mist para firmar una transacción sin procesar?

No puedo usar ethereumjs-tx sin la clave privada, pero quiero poder usar Web3 inyectado y no crear los pares de claves yo mismo.

Respuestas (2)

En Ethereum, una "transacción sin procesar" es aquella que se ha firmado, por lo que no firma transacciones sin procesar, firma transacciones y las envía a la cadena de bloques.

Tanto Mist como MetaMask inyectan la API web3.js en el contexto del navegador y le permiten usar sus métodos para consultar la cadena de bloques y enviar transacciones para que el usuario firme y envíe a la cadena de bloques.

El método más básico y común para enviar una transacción usando web3 es usar web3.eth.sendTransaction(params, callback) .

Con ese método, se le pedirá al usuario que apruebe la transacción y, si lo hace, se firmará y se enviará a la cadena de bloques, y se le devolverá la llamada con el hash de esa transacción. Luego puede consultar la cadena de bloques para la inclusión de esa transacción sondeando web3.eth.getTransactionReceipt(hash, callback) .

Además de esto, puede firmar blobs de datos arbitrarios usando web3.eth.sign(fromAddress, data, callback) , aunque tiene protecciones para firmarlo de manera diferente a una transacción, por lo que no se engaña a los usuarios para que firmen transacciones con este método.

Bien, entonces el último podría ser lo que estoy buscando. IIUC, la firma de datos con eth.sign() me permitirá demostrar mi identidad a alguien, pero no funcionará para crear un tx sin formato para enviarlo luego a la cadena de bloques, ¿verdad?
Eso es correcto.
Para ver un ejemplo de cómo: ethereum.stackexchange.com/questions/2660/…
Muchas gracias. Usé ecrecover de utils para deducir la dirección del firmante y ahora puedo comparar esto con la dirección del propietario en mi contrato. ¡Perfecto!
Intento esto, en testnet Metamask no pregunta, ¿por qué?
Si tiene una pregunta específica, abra una nueva pregunta con detalles al respecto.

"Se le pedirá al usuario que apruebe la transacción y, si lo hace, se firmará y se enviará a la cadena de bloques"

Entonces, si hago mi firma en una máquina con espacio de aire fuera de línea, ¿cómo Metamask firmará la transacción una vez que la "apruebe" (supongo que al hacer clic en "Aceptar" en algún estúpido cuadro de diálogo del navegador, una barra retardadamente baja para "aprobación")? ¿Cómo descargaría el TX sin procesar/sin firmar para firmar sin conexión?